1、選擇所有的記錄
select * from table_name;
其中*表示表中的所有字段,。
2,、查詢(xún)不重復(fù)的記錄
用關(guān)鍵字distinct
select distinct
字段名 from 表名;
3,、條件查詢(xún)
用關(guān)鍵字where
select * from 表名 where 條件,;
where后面的條件是一個(gè)字段的比較,可以使用=,、>,、<、>=,、<=,、!=等比較運(yùn)算符,;多個(gè)條件還可以使用or、and等邏輯運(yùn)算,。
4,、排序和限制
用關(guān)鍵字order
by desc(降序), asc(升序),,limit(排序結(jié)果顯示一部分)
order
by后面可以跟多個(gè)不同的排序字段,,并且每個(gè)排序字段可以有不同的排序順序。
例如:把emp表中的記錄按照工資sal的高低順序排序,。
select * from emp order
by sal,;
select * from emp order
by sal,deptno desc,;(sal升序,,septno降序)
先按第一個(gè)字段排序,當(dāng)?shù)谝粋€(gè)字段相同時(shí),,按照第二個(gè)字段排序,。
select······limit
offset_start, row_count;
offset_start表示起始偏移量,默認(rèn)值為0,。
row_count表示顯示的行數(shù),。
例如:select * from emp order
by sal limit 1,3,;
顯示前3條記錄,,起始偏移量為1,從第二條記錄開(kāi)始顯示,。
order by 和limit
通常一起使用來(lái)控制記錄的分頁(yè)顯示,。
5、聚合
很多情況下,,用戶(hù)需要一些匯總操作,,例如統(tǒng)計(jì)整個(gè)公司的人數(shù)或者每個(gè)部門(mén)的人數(shù)。
語(yǔ)法:
select 字段1,,字段2.,。。函數(shù)名 from 表名 where where_condition1
group
by 字段11,,字段12
with rollup
having
where_condition2;
函數(shù)名表示要做的聚合操作,就是聚合函數(shù),,常用的有sum(求和),、count(*)(記錄數(shù))、max(最大值),、min(最小值),。
group by
關(guān)鍵字表示要進(jìn)行分類(lèi)聚合的字段,、
having
關(guān)鍵字表示對(duì)分類(lèi)后的結(jié)果在進(jìn)行條件的過(guò)濾。
having和where的區(qū)別是having是對(duì)聚合后的結(jié)果進(jìn)行條件的過(guò)濾,,而where是在聚合前就對(duì)記錄進(jìn)行過(guò)濾,,如果邏輯允許,我們可以用where先進(jìn)行過(guò)濾,,這樣結(jié)果集變小了,,將對(duì)聚合的效率大大的提高,最后在根據(jù)邏輯看是否用having進(jìn)行再過(guò)濾,。
select sum(sal), max(sal), min(sal) from emp;
6,、表連接
當(dāng)需要同時(shí)顯示多個(gè)表中的字段時(shí),就可以用表連接來(lái)實(shí)現(xiàn)這樣的功能,。
從大類(lèi)上分,,表連接分為內(nèi)連接和外連接,它們之間的最主要的區(qū)別是內(nèi)連接僅選出兩張表中互相匹配的記錄,,而外連接會(huì)會(huì)選出其他不匹配的記錄,。我們最常用的是內(nèi)連接。
例如:查詢(xún)出所有雇員的名字和所在的部門(mén)名稱(chēng),,因?yàn)楣蛦T名稱(chēng)和部門(mén)分別放在表emp和表dept中,,因此,需要使用表連接來(lái)進(jìn)行查詢(xún),。
select ename, deptname from emp, dept where
emp.deptno=dept.deptno;
(ename是表emp中的字段,,deptname是dept表中的字段)
外連接又分為左鏈接和右連接(關(guān)鍵字left
join和 right join)
左連接:包含所有的左邊表中的記錄甚至是右邊表中沒(méi)有和他匹配的記錄。
右連接:包含所有的右邊表中的記錄甚至是左邊表中沒(méi)有和他匹配的記錄,。
例如:select
ename, deptname from emp left join dept on emp.deptno=dept.deptno;
select ename, deptname from dept right
join emp on emp.deptno=dept.deptno;
ename是表emp中的字段,,deptname是dept表中的字段。 就是包含表emp中的所有記錄,。 以上兩條語(yǔ)句等價(jià),。
7、字查詢(xún)
在某些情況下,,當(dāng)進(jìn)行查詢(xún)的時(shí)候,,需要的條件是另外一個(gè)select語(yǔ)句的結(jié)果,這個(gè)時(shí)候,,就要用到子查詢(xún),。用于子查詢(xún)的關(guān)鍵字主要包括in、not
in,、=,、!=,、exists,、not exists等,。
select * from emp where deptno in
(select deptno from dept);
(表示的意思就是就表emp中的所有記錄,,除去dept表對(duì)應(yīng)的部門(mén)不存在的刪掉,。)
在某些情況下,子查詢(xún)可以轉(zhuǎn)化成表連接,。例如,,上面的語(yǔ)句可以寫(xiě)成:
select emp.* from
emp, dept where
emp.deptno=dept.deptno;
8、記錄聯(lián)合
我們經(jīng)常會(huì)碰到這樣的應(yīng)用,,將兩個(gè)表的數(shù)據(jù)按照一定的查詢(xún)條件查詢(xún)出來(lái)后,,將結(jié)果合并到一起顯示出來(lái)。這個(gè)時(shí)候,,就需要用到union和
union all關(guān)鍵字來(lái)實(shí)現(xiàn)這樣的功能,。union和union all的區(qū)別:union all
是把結(jié)果集合并在一起,而union是將union all后的結(jié)果進(jìn)行一次distict,,去除重復(fù)記錄,。
select * from table1
union| union all select * from
table2;
例如:
① select deptno from
emp union all select
deptno from dept,;
② select deptno from
emp union select
deptno from dept,;
①中的記錄將會(huì)有重復(fù)記錄,②中沒(méi)有重復(fù)記錄,。
|