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