1. 程式人生 > >DQL資料查詢語言_(查詢不會修改資料庫記錄!)

DQL資料查詢語言_(查詢不會修改資料庫記錄!)

一、基本查詢
1、欄位(列)控制
1)查詢所有列

  • SELECT * FROM 表名;

2)查詢指定列

  • SELECT 列1,列2,……,列n FROM 表名;

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

  • SELECT DISTINCT * | 列1,[列2,……,列n] FROM 表名;

4)列運算

  • 數量型別可以做加、減、乘、除運算

  • SELECT sal*1.5 FROM emp;

  • 字串型別可以做連續運算

  • SELECT CONCAT(‘我是’,sal) FROM emp;

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

  • SELECT IFNULL(com,0)+1000 FROM emp;

  • 如果IFNULL(com,0):如果com中存在NULL值,那麼當成0來運算

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

  • SELECT IFNULL(com,0)+100 AS 獎金 FROM emp;

  • 其中AS可以省略

2、條件控制
1)條件查詢
與前面介紹的UPDATE和DELETE語句一樣,SELECT語句也可以使用WHERE子句來控制記錄。

  • SELECT empno,ename,sal,comm FROM emp WHERE sal > 10000 AND comm IS NOT NULL;
  • SELECT empno,ename,sal FROM emp WHERE sal BETWEEN 20000 AND 30000;
  • SELECT empno,ename,job FROM emp WHERE job IN (‘經理’, ‘董事長’);

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

  • SELECT * FROM emp WHERE ename LIKE ‘張_’;
  • 模糊查詢需要使用運算子:LIKE,其中_匹配一個任意字元,注意,只匹配一個字元而不是多個。
  • 上面語句查詢的是姓張,名字由兩個字組成的員工。
  • SELECT * FROM emp WHERE ename LIKE ‘___’;
  • 姓名由3個字組成的員工
  • SELECT * FROM emp WHERE ename LIKE ‘張%’;
  • 如果我們想查詢姓張,名字幾個字可以的員工時就要使用“%”了。
  • 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 BY deptno;
  • 使用deptno分組,查詢部門編號和每個部門的記錄數
  • SELECT job,MAX(SAL) FROM emp GROUP BY job;
  • 使用job分組,查詢每種工作的最高工資

組條件:
以部門分組,查詢每組記錄數。條件為記錄數大於3
SELECT deptno,COUNT( * ) FROM emp GROUP BY deptno HAVING COUNT( * )>3;

五、limit子句(方言)
LIMIT用來限定查詢結果的起始行,以及總行數。
例如:查詢起始行為第5行,一共查詢3行記錄

  • SELECT * FROM emp LIMIT 4,3;

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

  • SELECT * FROM emp LIMIT 20,10;
    1、一頁的記錄數:10行
    2、查詢第3頁

(當前頁-1)*每頁記錄數
(3-1)*10

  • 執行順序

select
from
where
group by
having
order by