DQL用于從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)鸥鹉,并不會(huì)修改數(shù)據(jù)
- 基本查詢
- 條件控制
- 查詢排序
- 分組查詢
- limit限制
一.基本查詢
- 字段(列)控制
(1) 查詢所有列
SELECT * FROM 表名;
(2) 查詢指定列
SELECT 列1 [列2, ... 列N] FROM 表名;
(3) 完全重復(fù)的記錄只一次
當(dāng)查詢結(jié)果中的多行記錄一模一樣時(shí)持偏,只顯示一行。一般查詢所有列時(shí)很少會(huì)有這種情況,但只查詢一列(或幾列)時(shí)哥攘,可能會(huì)出現(xiàn)
SELECT DISTINCT * | 列1 [列2, ... 列N] FROM 表名;
(4) 列運(yùn)算數(shù)字類型的列可以做加寥粹、減渣锦、乘欧芽、除運(yùn)算
SELECT sal*1.5 FROM emp;
SELECT sal+comm FROM emp;字符串類型可以做連續(xù)運(yùn)算
SELECT CONCAT('$', sal) FROM emp;轉(zhuǎn)換NULL值
有時(shí)需要把NULL轉(zhuǎn)換成其它值男韧,例如com+1000時(shí)朴摊,如果com列存在NULL值,那么NULL+1000還是NULL此虑,而這時(shí)希望把NULL當(dāng)前0來(lái)運(yùn)算甚纲。
SELECT IFNULL(comm, 0)+1000 FROM emp;
IFNULL(comm, 0):如果comm中存在NULL值,那么當(dāng)成0來(lái)運(yùn)算給列起別名
當(dāng)使用列運(yùn)算后朦前,查詢出的結(jié)果集中的列名稱很不好看介杆,這時(shí)我們需要給列名起個(gè)別名,這樣在結(jié)果集中列名就顯示別名了
SELECT IFNULL(comm, 0)+1000 AS 獎(jiǎng)金 FROM emp;
其中AS可以省略
二.條件控制
1. 條件查詢
- 與前面介紹的UPDATE和DELETE語(yǔ)句一樣况既,SELECT語(yǔ)句也可以使用WHERE子句來(lái)控制記錄
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 ('經(jīng)理', '董事長(zhǎng)');
2. 模糊查詢
當(dāng)你想查詢姓張这溅,并且姓名一共兩個(gè)字的員工時(shí),這時(shí)就可以使用模糊查詢
SELECT * FROM emp WHERE ename LIKE '張_';模糊查詢需要使用運(yùn)算符:LIKE棒仍,其中匹配一個(gè)任意字符悲靴,注意,只匹配一個(gè)字符而不是多個(gè)莫其。
SELECT * FROM emp WHERE ename LIKE '__';
姓名由3個(gè)字組成的員工如果想查詢姓張癞尚,名字幾個(gè)字都可以的員工時(shí)就要使用“%”
SELECT * FROM emp WHERE ename LIKE '張%';其中%匹配0~N個(gè)任意字符,所以上面語(yǔ)句查詢的是姓張的所有員工*
SELECT * FROM emp WHERE ename LIKE '%阿%';上面語(yǔ)句是在查詢姓名中間帶有阿字的員工乱陡,因?yàn)?匹配0~N個(gè)字符浇揩,所以姓名以阿開(kāi)頭和結(jié)尾的員工也都會(huì)查詢到*
SELECT * FROM emp WHERE ename LIKE '%';
這個(gè)條件等同與不存在,但如果姓名為NULL的查詢不出來(lái)
三. 排序查詢
1. 升序
SELECT * FROM 表名 WHERE 條件 ORDER BY 列名 ASC;
默認(rèn)情況下就是按照升序排列憨颠,可以省略
2. 降序
SELECT * FROM 表名 WHERE 條件 ORDER BY 列名 DESC;
其中DESC不能省略
3. 使用多列作為排序條件
SELECT * FROM 表名 WHERE 條件 ORDER BY 列名1 ASC, 列名2 DESC;
使用列名1升序排胳徽,如果列名1相同時(shí),使用列名2的降序排
四爽彤、聚合函數(shù)
聚合函數(shù)用來(lái)做某列的縱向運(yùn)算
1. COUNT
SELECT COUNT(*) FROM emp;
計(jì)算emp表中所有列都不為NULL的記錄的行數(shù)
SELECT COUNT(comm) FROM emp;
計(jì)算emp表中comm列不為NULL的記錄的行數(shù)
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;
查詢平均工資
四养盗、分組查詢
分組查詢是把記錄使用某一列進(jìn)行分組,然后查詢組信息适篙。
- 使用deptno分組往核,查詢部門編號(hào)和每個(gè)部門的記錄數(shù)
SELECT deptno, COUNT(*) FROM emp GROUP BY deptno; - 使用job分組,查詢每種工作的最高工資
SELECT job, MAX(SAL) FROM emp GROUP BY job; - 以部門分組嚷节,查詢每組記錄數(shù)聂儒。條件為記錄數(shù)大于3
SELECT deptno, COUNT() FROM emp GROUP BY deptno HAVING COUNT() > 3;
五虎锚、limit子句
LIMIT用來(lái)限定查詢結(jié)果的起始行,以及總行數(shù)
- 查詢起始行為第5行衩婚,一共查詢3行記錄
SELECT * FROM emp LIMIT 4, 3;
其中4表示從第5行開(kāi)始窜护,其中3表示一共查詢3行。即第5谅猾、6柄慰、7行記錄 - 查詢起始行為第1行,一共查詢5行記錄
SELECT * FROM emp LIMIT 0, 5; - 查詢第3頁(yè)(每頁(yè)的記錄數(shù):10行)
SELECT * FROM emp LIMIT 20, 10;
(當(dāng)前頁(yè)-1) * 每頁(yè)記錄數(shù)