SQL語句學習(2)之基本查詢、排序、聚合函式、分組查詢
一、 基本查詢
1. 欄位(列)控制
1) 查詢所有列
SELECT * FROM 表名;
SELECT * FROM emp;
--> 其中“*”表示查詢所有列
2) 查詢指定列
SELECT 列1 [, 列2, ... 列N] FROM 表名;
SELECT empno, ename, sal, comm FROM 表名;
3) 完全重複的記錄只一次
當查詢結果中的多行記錄一模一樣時,只顯示一行。一般查詢所有列時很少會有這種情況,但只查詢一列(或幾列)時,這總可能就大了!
SELECT DISTINCT * | 列1 [, 列2, ... 列N] FROM 表名;
SELECT DISTINCT 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 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 '張%';
--> 其中%匹配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
SELECTCOUNT(*) 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;