SQL常用 select 語句 DQL

DQL -- 數據查詢語言

  查詢不會修改數據庫表記錄!

  1,select * from emp

 2,where sal >1000     //where語句對取得的數據進行過濾          

 3,group by deptno     //對過濾後的數據進行分組

 4,having              //對分組數據(組函數)進行限制

 5,order by           //對過濾出的數據進行排序

 

一、 基本查詢

 

 

1. 字段(列)控制

1) 查詢所有列

 SELECT * FROM 表名;

 SELECT * FROM emp;

 --> 其中“*”表示查詢所有列

 

2) 查詢指定列

 SELECT 列1 [, 列2, ... 列N] FROM 表名;

 SELECT empno, ename, sal, comm FROM 表名;

 

3) 完全重複的記錄只一次

 當查詢結果中的多行記錄一模一樣時,只顯示一行。一般查詢所有列時很少會有這種情況,但只查詢一列(或幾列)時,這種可能就大了!

 SELECT DISTICT * | 列1 [, 列2, ... 列N] FROM 表名;

 SELECT DISTICT sal FROM emp;

 -->查詢員工表的工資,如果存在相同的工資只顯示一次!

 

4) 列運算

 I 數量類型的列可以做加、減、乘、除運算

   SELECT sal*1.5 FROM emp;

   SELECT sal+comm FROM emp;

 

 II 字符串類型可以做連續運算

   SELECT CONCAT('$', sal) FROM emp;

 

 III 轉換NULL值

  有時需要把NULL轉換成其它值,例如com+1000時,如果com列存在NULL值,那麼NULL+1000還是NULL,而我們這時希望把NULL當做 0 來運算。

   SELECT IFNULL(comm, 0)+1000 FROM emp;

   --> IFNULL(comm,0):如果comm中存在NULL值,那麼當成0來運算。

 

 IV 給列起別名

  你也許已經注意到了,當使用列運算後,查詢出的結果集中的列名稱很不好看,這時我們需要給列名起個別名,這樣在結果集中列名就顯示別名了

   SELECT IFNULL(comm, 0)+1000 AS 獎金 FROM emp;

   --> 其中AS可以省略

 

2. 條件控制

1) 條件查詢

 與前面介紹的UPDATE和DELETE語句一樣,SELECT語句也可以使用WHERE子句來控制記錄。

  * SELECT empno,ename,sal,comm FROM emp WHEREsal > 10000 AND comm IS NOT NULL;

  * SELECT empno,ename,sal FROM emp WHERE salBETWEEN 20000 AND 30000;

  * SELECT empno,ename,job FROM emp WHERE jobIN ('經理', '董事長');

2) 模糊查詢

  當你想查詢姓張,並且姓名一共兩個字的員工時,這時就可以使用模糊查詢

  * SELECT * FROM emp WHERE ename LIKE '張_';

  -->模糊查詢需要使用運算符:LIKE,其中_匹配一個任意字符,注意,只匹配一個字符而不是多個。

  --> 上面語句查詢的是姓張,名字由兩個字組成的員工。

  * SELECT * FROM emp WHERE ename LIKE '___';/*姓名由3個字組成的員工*/

 

  如果我們想查詢姓張,名字幾個字的員工時就要使用“%”了。

  SELECT * FROM emp WHERE ename LIKE '張%';

  --> 其中%匹配0~N個任意字符,所以上面語句查詢的是姓張的所有員工。

  SELECT * FROM emp WHERE ename LIKE '%阿%';

  -->千萬不要認爲上面語句是在查詢姓名中間帶有阿字的員工,因爲%匹配0~N個字符,所以姓名以阿開頭和結尾的員工也都會查詢到。

  SELECT * FROM emp WHERE ename LIKE '%';

  --> 這個條件等同與不存在,但如果姓名爲NULL的查詢不出來!

 

二、排序

1) 升序

  SELECT * FROM WHERE emp ORDER BY sal ASC;

  --> 按sal排序,升序!

  --> 其中ASC是可以省略的

2) 降序

  SELECT * FROM WHERE emp ORDER BY comm DESC;

  --> 按comm排序,降序!

  --> 其中DESC不能省略

3) 使用多列作爲排序條件

  SELECT * FROM WHERE emp ORDER BY sal ASC,comm DESC;

  --> 使用sal升序排,如果sal相同時,使用comm的降序排

 

三、聚合函數

  聚合函數用來做某列的縱向運算。

1) COUNT

  SELECT COUNT(*) FROM emp;

  --> 計算emp表中所有列都不爲NULL的記錄的行數

  SELECT COUNT(comm) FROM emp;

  --> 雲計算emp表中comm列不爲NULL的記錄的行數

2) MAX

  SELECT MAX(sal) FROM emp;

  --> 查詢最高工資

3) MIN

  SELECT MIN(sal) FROM emp;

  --> 查詢最低工資

4) SUM

  SELECT SUM(sal) FROM emp;

  --> 查詢工資合

5) AVG

  SELECT AVG(sal) FROM emp;

  --> 查詢平均工資

 

四、分組查詢

  分組查詢是把記錄使用某一列進行分組,然後查詢組信息。

  例如:查看所有部門的記錄數。

  SELECT deptno, COUNT(*) FROM emp GROUP BYdeptno;

  --> 使用deptno分組,查詢部門編號和每個部門的記錄數

  SELECT job, MAX(SAL) FROM emp GROUP BY job;

  --> 使用job分組,查詢每種工作的最高工資

 

  組條件

  以部門分組,查詢每組記錄數。條件爲記錄數大於3

  SELECT deptno, COUNT(*) FROM emp GROUP BYdeptno HAVING COUNT(*) > 3;

 

五、limit子句(方言)

  LIMIT用來限定查詢結果的起始行,以及總行數。

  例如:查詢起始行爲第5行,一共查詢3行記錄

  SELECT * FROM emp LIMIT 4, 3;

  --> 其中4表示從第5行開始,其中3表示一共查詢3行。即第5、6、7行記錄。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章