(高手就不要笑話了^_^)。
好了,其他的不說(shuō)現(xiàn)在就開始:
select 子句主要決定了從表中取出的列名,列數(shù)以及列的顯示順序等信息,"*"表示查詢所有的列,有關(guān)select的用法應(yīng)該結(jié)合其它子句的用法。
1.from 子句:
①from子句用于指定被查詢的表,試圖或快照。
②如果指定多個(gè)實(shí)體,用逗號(hào)講它們分割。為了查詢方便,特別是進(jìn)行自連接查詢時(shí),可以給表起別名。(這里我要說(shuō)很多剛開始使用sql的朋友開始的時(shí)候總覺(jué)得這個(gè)很簡(jiǎn)單,沒(méi)有什么可學(xué)的,可是到后來(lái)在做一些復(fù)雜的sql的時(shí)候總是想不起來(lái)這一點(diǎn)導(dǎo)致其實(shí)不難的sql語(yǔ)句無(wú)從下手)。
③如果被查詢的實(shí)體不在當(dāng)前的模式中,則必須用模式名來(lái)限定該對(duì)象。
select *from admin.emp
④若查詢遠(yuǎn)程數(shù)據(jù)庫(kù)中的實(shí)體,必須使用數(shù)據(jù)庫(kù)鏈路,如果查詢分區(qū)表中某個(gè)分區(qū)的數(shù)據(jù),則必須使用關(guān)鍵字Partition來(lái)指定分區(qū)名。
select *from emp@cbf107
select *from emp partition(A_hiredate)
2.where 子句
where 子句用于限定處理的行數(shù),選擇滿足條件的行,where 子句中的任何邏輯條件都使用比較運(yùn)算符,滿足where子句中邏輯條件的數(shù)據(jù)被返回或者被處理,在where子句中可以使用列名或表達(dá)式。
select ename from emp where deptno=10
①如果列類型為字符型,where ename='smith';(單引號(hào)內(nèi)字符串大小寫有區(qū)別)
②列類型為數(shù)字型deptno=20;
③如果列值取其他列值,可用如下形式表示
where emp.depno=dept.deptno
④in 與 not in 擇列的值與值列表中某一個(gè)值相符的相關(guān)行信息(如果進(jìn)行"或操作")
查詢表EMP中有那些雇員和分析員
select name,job from emp where job in ('clerk','analyst');
查詢表EMP中有那些人不是雇員和分析員
select name,job from emp where job not in ('clerk','analyst');
有那些雇員的工資在/不在2000~3000之間
select ename,job,sal from emp where sal between 2000 and 3000;
select ename,job,sal from emp where sal not between 2000 and 3000
select ename,oeptno from emp where ename like 's%';
"%" 匹配0個(gè)或n個(gè)長(zhǎng)度的字符串,而"_"僅匹配一個(gè)字符。假如查詢條件中本身含有"_"或"%",為了與模式匹配符"_"和"%"區(qū)分,必須在like運(yùn)算符中加ESCAPE"%子句.
查詢雇員名以A_開始的行
select *from emp where ename like 'a\_%' ESCAPE '\';
is null 和 is not null
空值(null)不等同于0,0是一個(gè)數(shù)字,而空值表示未知的,不存在的或不可用的數(shù)據(jù).它不能像0那樣進(jìn)行算術(shù)運(yùn)算,null用于查詢列值為空值或非空的信息。
在Oracle的RDBMS中,null(空值)不占空間,判斷某一列值是否為空,不能用"="或"!="運(yùn)算符號(hào),而要用is null或is not null。
選擇沒(méi)有獎(jiǎng)金的雇員信息
select ename,job from emp where comm is null
3.order by
在關(guān)系型模式中,行是沒(méi)有順序可言的。order by 子句確定的行信息顯示時(shí)的先后順序,當(dāng)按多列進(jìn)行排序時(shí),首先由第一個(gè)列名確定順序,其次由第二個(gè)列名確定順序。
先按工資的降序排列,在工資相同的情況下,按姓名的字母順序排列
select
ename employee,
sal salary
from
emp
where
deptno=30
order by
sal desc employee;
假如在select子句中使用distinct關(guān)鍵字,在order by 子句中只能使用select 子句中列出來(lái)的列名,不能使用列的別名。
在查詢語(yǔ)句中不僅可以使用列名或列的別名進(jìn)行排序,也可以使用在select 子句中列的位置進(jìn)行排序。(select 子句中有一個(gè)很長(zhǎng)的表達(dá)式,并且要用此表達(dá)式的結(jié)果進(jìn)行排序時(shí)用列的位置是很有用的)。對(duì)于涉及集合操作:union,minus的查詢,不能使用列名,在這種情況下,必須提供列的位置。
select
'name:'||ename "employee",
sal "salary",
from
emp
where
deptno=30
order by
2,1;
4.group by
在select 語(yǔ)句中可以使用group by 子句將行劃分成較小的組,然后,使用聚組函數(shù)返回每一個(gè)組的匯總信息,另外,可以使用having子句限制返回的結(jié)果集。group by 子句可以將查詢結(jié)果分組,并返回行的匯總信息Oracle 按照group by 子句中指定的表達(dá)式的值分組查詢結(jié)果。
在帶有g(shù)roup by 子句的查詢語(yǔ)句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚組函數(shù)
select max(sal),job emp group by job;
(注意max(sal),job的job并非一定要出現(xiàn),但有意義)
查詢語(yǔ)句的select 和group by ,having 子句是聚組函數(shù)唯一出現(xiàn)的地方,在where 子句中不能使用聚組函數(shù)。
select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;
當(dāng)在gropu by 子句中使用having 子句時(shí),查詢結(jié)果中只返回滿足having條件的組。在一個(gè)sql語(yǔ)句中可以有where子句和having子句。having 與where 子句類似,均用于設(shè)置限定條件
where 子句的作用是在對(duì)查詢結(jié)果進(jìn)行分組前,將不符合where條件的行去掉,即在分組之前過(guò)濾數(shù)據(jù),條件中不能包含聚組函數(shù),使用where條件顯示特定的行。
having 子句的作用是篩選滿足條件的組,即在分組之后過(guò)濾數(shù)據(jù),條件中經(jīng)常包含聚組函數(shù),使用having 條件顯示特定的組,也可以使用多個(gè)分組標(biāo)準(zhǔn)進(jìn)行分組。
查詢每個(gè)部門的每種職位的雇員數(shù)
select deptno,job,count(*) from emp group by deptno,job;
5.多表連接
笛卡爾連接就是指從多張表中取數(shù)據(jù)時(shí),在where子句中沒(méi)有指定多張表的公共關(guān)系(即一張表中取出每條記錄與另一張表中的每條記錄作連接)。假如第一張表中有M條記錄,而第二張表中用N條記錄,結(jié)果是M*N條記錄。要盡量避免產(chǎn)生笛卡爾連接。所以一般有N張表連接,至少有N-1個(gè)連接條件。
select
D.dname,D.Loc,E.ename,e.sal
from
delpt D,emp E
where
D.deptno=E.deptno;
一但定義了表的別名,在本條select語(yǔ)句中就不能用表名去限制列名,應(yīng)該用表的別名去限制別名。
哪些雇員的工資屬于第三級(jí)別?
select
empno,ename,sal
from
emp,salgrade
where
grade=3
and
sal between losal and hisal;
找出emp表中的每一雇員屬于哪一等級(jí)。
select
empno,ename,sal,grade
from
emp,sal,grade
where
emp.sal between lowsal and hisal.
5.外連接與內(nèi)連接
有時(shí)候,即使在連接的表中沒(méi)有相應(yīng)的行,用戶可能想從一張表中看數(shù)據(jù),Oracle提供了外連接實(shí)現(xiàn)該功能。
內(nèi)連接是指連接查詢只顯示完全滿足連接條件的記錄,即等值連接,外連接的查詢結(jié)果是內(nèi)連接查詢結(jié)果的擴(kuò)展。外連接不僅返回滿足連接條件的所有記錄而且也返回了一個(gè)表中那些在另一個(gè)表中沒(méi)有匹配行的記錄。外連接的操作符是“+”。“+”號(hào)放在連接條件中信息不完全的那一邊(即沒(méi)有相應(yīng)行的那一邊)。運(yùn)算符“+”影響NULL行的建立。建一行或多行NULL來(lái)匹配連接的表中信息完全的行。
外連接運(yùn)算符“+”只能出現(xiàn)在where子句中表達(dá)式的一邊。
假如在多張表之間有多個(gè)連接條件,外連接運(yùn)算符不能使用or,in邏輯運(yùn)算符與其它條件組合。
假如emp表中deptno=10的ename為空值,dept表中deptno=20的loc為空值:
1.
select
ename,dept.deptno,loc
from
emp,dept
where
emp.depno(+)=dept.deptno;
如果在dept.deptno中有的數(shù)值在emp.deptno中沒(méi)有值,則在做外連接時(shí),
結(jié)果中ename會(huì)產(chǎn)生一個(gè)空值。(emp.deptno=10)
2.
select
ename,dept.deptno,loc
from
emp,dept
where
emp.depno=dept.deptno(+);
如果在emp.deptno中有的數(shù)值在dept.deptno中沒(méi)有值,則在做外連接時(shí),
結(jié)果中l(wèi)oc會(huì)產(chǎn)生一個(gè)空值。。(dept.deptno=20)
5.自連接
自連接是指同一張表的不同行間的連接。該連接不受其他表的影響。用自連接可以比較同一張表中不同行的某一列的值。因?yàn)樽赃B接查詢僅涉及到某一張表與其自身的連接。所以在from子句中該表名出現(xiàn)兩次,分別用兩個(gè)不同的別名表示,兩個(gè)別名當(dāng)作兩張不同的表進(jìn)行處理,與其它的表連接一樣,別名之間也使用一個(gè)或多個(gè)相關(guān)的列連接。為了區(qū)分同一張表的不同行的列,在名前永別名加以限制。
select
worker.ename,
manager.ename manager
from
emp worker,
emp manager
where
work.mgr=manager.empno;
7.集合運(yùn)算
基合運(yùn)算符可以用于從多張表中選擇數(shù)據(jù)。
①UNION運(yùn)算
用于求兩個(gè)結(jié)果集合的并集(兩個(gè)結(jié)果集合的所有記錄),并自動(dòng)去掉重復(fù)行。
select ename,sal from account where sal>2000
union
select ename,sal from research where sal>2000
union
select ename,sal from sales where sal>2000;
注:ename,sal 是必須一致的。
②UNION ALL運(yùn)算
用于求兩個(gè)結(jié)果集合的并集(兩個(gè)結(jié)果集中的所有記錄)源碼天空,并且不去掉重復(fù)行。
select ename,sal from account where sal>2000
union
select ename,sal from research where sal>2000
union
select ename,sal from sales where sal>2000;
③INTERSECT運(yùn)算
intersect運(yùn)算返回查詢結(jié)果中相同的部分。
各部門中有哪些相同的職位?
select Job from account
intersect
select Job from research
intersect
select Job from sales;
④MINUS運(yùn)算
minus返回兩個(gè)結(jié)果集的差集。(在第一個(gè)結(jié)果集中存在的,而在第二個(gè)結(jié)果集中不存在的行。)
有那些職位是財(cái)務(wù)部中有,而在銷售部門中沒(méi)有?
select Job from account
minus
select Job from sales;
您可能感興趣的文章:- Sql 語(yǔ)句學(xué)習(xí)指南
- 非常不錯(cuò)的SQL語(yǔ)句學(xué)習(xí)手冊(cè)實(shí)例版
- 50個(gè)常用sql語(yǔ)句 網(wǎng)上流行的學(xué)生選課表的例子