撩課-Mysql第5部查詢DQL
DQL
查詢所有列
SELECT * FROM 表名;
結果集
資料庫執行DQL語句不會對資料進行改變,而是讓資料庫傳送結果集給客戶端。 結果集 通過查詢語句查詢出來的資料以表的形式展示我們稱這個表為虛擬結果集。存放在記憶體中。 查詢返回的結果集是一張虛擬表。
查詢指定列的資料
SELECT 列名1,列表2... FROM 表名;
條件查詢
條件查詢就是在查詢時給出WHERE子句, 在WHERE子句中可以使用一些運算子及關鍵字:
條件查詢執行符及關鍵字:
=(等於)、 !=(不等於)、 <>(不等於)、 <(小於)、 <=(小於等於)、 >(大於)、 >=(大於等於); BETWEEN…AND;值在什麼範圍 IN(set);固定的範圍值 IS NULL;(為空) IS NOT NULL(不為空) AND;與 OR;或 NOT; 非
查詢性別為男,並且年齡為20的學生記錄
SELECT * FROM students WHERE gender='男' AND age=20;
查詢學號為1001 或者 名為zs的記錄
SELECT * FROM students WHERE id ='1001' OR name='zs';
查詢學號為1001,1002,1003的記錄
SELECT * FROM students WHERE id='1001' OR id='1002' OR 1001='1003'; SELECT * FROM students WHERE idIN('1001','1002','1003'); SELECT * FROM students WHERE id NOT IN ('1001','1002','1003');
查詢年齡為null的記錄
SELECT * FROM students WHERE age IS NULL;
查詢年齡在18到20之間的學生記錄
SELECT * FROM students WHERE age>=18 AND age<=20; SELECT * FROM students WHERE age BETWEEN 18 AND 20;
查詢性別非男的學生記錄
SELECT * FROM students WHERE gender !='男';
查詢姓名不為null的學生記錄
SELECT * FROM students WHEREname IS NOTNULL;
模糊查詢
根據指定的關鍵進行查詢 使用LIKE關鍵字後跟萬用字元 萬用字元 _:任意一個字元 %:任意0~n個字元
查詢姓名由5個字母構成的學生記錄
SELECT * FROM students WHERE name LIKE '_____'; 模糊查詢必須使用LIKE關鍵字。 其中 “_”匹配任意一個字母,5個“_”表示5個任意字母。
查詢姓名由5個字母構成,並且第5個字母為“s”的學生記錄
SELECT * FROM students WHERE name LIKE '____s';
查詢姓名以“m”開頭的學生記錄
SELECT * FROM students WHERE name LIKE 'm%'; 其中“%”匹配0~n個任何字母。
查詢姓名中第2個字母為“u”的學生記錄
SELECT * FROM students WHERE name LIKE '_u%';
查詢姓名中包含“s”字母的學生記錄
SELECT * FROM stu WHERE name LIKE '%s%';
欄位控制查詢
去除重複記錄
SELECT DISTINCT name FROM students; 把查詢欄位的結果進行運算,必須都要是資料型 SELECT *,欄位1+欄位2 FROM 表名; 列有很多記錄的值為NULL, 因為任何東西與NULL相加結果還是NULL, 所以結算結果可能會出現NULL。 下面使用了把NULL轉換成數值0的函式IFNULL: SELECT *,age+IFNULL(score,0) FROM students;
對查詢結果起別名\
在上面查詢中出現列名為sx+IFNULL(yw,0), 這很不美觀, 現在我們給這一列給出一個別名,為total: SELECT *, yw+IFNULL(sx,0) AS total FROM score; 省略 AS SELECT *, yw+IFNULL(sx,0)total FROM score;\
排序
建立表 CREATE TABLE `employee` ( `id` int(11) NOT NULL, `name` varchar(50) DEFAULT NULL, `gender` varchar(1) DEFAULT NULL, `hire_date` date DEFAULT NULL, `salary` decimal(10,0) DEFAULT NULL, `performance` double(255,0) DEFAULT NULL, `manage` double(255,0) DEFAULT NULL, `department` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `employee` VALUES (1001, '張三', '男', '1991-7-25', 2000, 200, 500, '營銷部'); INSERT INTO `employee` VALUES (1002, '李四', '男', '2017-7-5', 4000, 500, NULL, '營銷部'); INSERT INTO `employee` VALUES (1003, '王五', '女', '2018-5-1', 6000, 100, 5000, '研發部'); INSERT INTO `employee` VALUES (1004, '趙六', '男', '1991-6-1', 1000, 3000, 4000, '財務部'); INSERT INTO `employee` VALUES (1005, '孫七', '女', '2018-3-23', 8000, 1000, NULL, '研發部'); INSERT INTO `employee` VALUES (1006, '周八', '男', '2010-9-8', 5000, 500, 1000, '人事部'); INSERT INTO `employee` VALUES (1007, '吳九', '女', '2017-7-5', 8000, 601, NULL, '研發部'); INSERT INTO `employee` VALUES (1008, '鄭十', '女', '2014-4-6', 4000, 1801, NULL, '人事部');
對查詢的結果進行排序
使用關鍵字ORDER BY 排序型別 升序ASC 從小到大預設 降序DESC 從大到小
對所有員工的薪水進行排序
SELECT *FROM employee ORDER BY age ASC;
查詢所有學生記錄,按年齡降序排序
SELECT * FROM employee ORDER BY age DESC;
查詢所有僱員,按月薪降序排序,如果月薪相同時,按編號升序排序
SELECT * FROM employee ORDER BY salary DESC, id ASC;
聚合函式
對查詢的結果進行統計計算 常用聚合函式 COUNT():統計指定列不為NULL的記錄行數; MAX():計算指定列的最大值,如果指定列是字串型別,那麼使用字串排序運算; MIN():計算指定列的最小值,如果指定列是字串型別,那麼使用字串排序運算; SUM():計算指定列的數值和,如果指定列型別不是數值型別,那麼計算結果為0; AVG():計算指定列的平均值,如果指定列型別不是數值型別,那麼計算結果為0;
查詢employee表中記錄數:
SELECT COUNT(*) AS total_record FROM employee;
查詢員工表中有績效的人數:
SELECT COUNT(performance)FROM employee;
**查詢員工表中月薪大於2500的人數:
SELECT COUNT(*) FROM employee WHERE salary > 2500;
統計月薪與績效之和大於5000元的人數:
SELECT COUNT(*)FROM employee WHERE salary+IFNULL(performance,0) > 5000;
查詢有績效的人數,和有管理費的人數:
SELECT COUNT(performance), COUNT(manage) FROM employee;
查詢所有僱員月薪和:
SELECT SUM(salary) FROM employee;
查詢所有僱員月薪和,以及所有僱員績效和
SELECT SUM(salary), SUM(performance) FROM employee;
查詢所有僱員月薪+績效和:
SELECT SUM(salary+IFNULL(performance,0)) FROM employee;
統計所有員工平均工資:
SELECT AVG(salary) FROM employee;
查詢最高工資和最低工資:
SELECT MAX(salary), MIN(salary) FROM employee;