MySQL查询数据操作(DQL)
查詢記錄
單表查詢SELECT語句完×××式:
SELECT select_expr [ , select_expr ... ]
[
FROM tbl_references
[WHERE 條件]
[GROUP BY {col_name | position} [ASC | DESC], ... 分組]
[HAVING 條件 對分組結果進行二次篩選]
[ORDER BY {col_name | position} [ASC | DESC], ...排序]
[LIMIT 限制顯示條數]
]
查詢表達式(select_expr)
1. 每一個表達式表示想要查詢的一列,至少有一列,多個列之間以逗號分隔
2. *表示所有列,tbl_name.*可以表示命名的所有列
3. [AS] alias_name 為其賦予別名
SELECT id, username, role FROM cms.cms_admin;
給字段起別名
例如:SELECT id AS '編號',username AS '用戶名',email AS '郵箱' FROM 表名; 查詢完后別名代替原名顯示。
WHERE條件
1. 比較 = < <= > >= != <> !
2. BETWEEN AND 、NOT BETEEN AND 指定范圍
IN、NOT IN 指定集合
3. 模糊查詢 LIKE
% :代表0個 1個 或多個任意字符
_ :代表1個任意字符
例如查詢姓王的用戶:
SELECT * FROM user WHERE username LIKE '王%';
查詢名字中含有in的用戶:
SELECT * FROM user WHERE username LIKE '%in%';
查詢名字長度為4的用戶:
SELECT * FROM user WHERE username LIKE '_ _ _ _';
查詢名字第二位是i的用戶:
SELECT* FROM user WHERE username LIKE '_i%';
當沒有使用%或_時 LIKE相當于等號,精準查詢。
4. 是否為空值IS NULL、IS NOT NULL
5. 多個查詢條件 AND ?OR
例如查詢用戶名為jack,密碼為123456的用戶:
SELECT * FROM user WHERE username='jack' AND password='123456';
查詢id大于等于3且年齡不為NULL的用戶:
SELECT * FROM user WHERE id>=3 AND age IS NOT NULL;
查詢id大于等于3,年齡不為NULL,proId等于3的用戶:
SELECT * FROM user WHERE id>=3 AND age IS NOT NULL AND proId=3;
查詢編號在5~10之間的,用戶名為4位的用戶:
SELECT * FROM user WHERE id BETWEEN 5 AND 10 AND username LIKE '____';
查詢用戶名以張開頭或者id為2或4的用戶
SELECT * FROM user WHERE username LIKE '張%' OR id IN(2, 4);
分組查詢GROUP BY
只會顯示各個組中的第一條記錄。
按照用戶所在省份分組proId:
SELECT * FROM user GROUP BY proId;
按照性別分組:
SELECT * FROM user GROUP BY sex;
按照字段位置分組:
SELECT * FROM user GROUP BY 7;(按照第7個位置的字段分組)
按照多個字段分組:
SELECT * FROM user GROUP BY sex,proId;(先按照sex分組,在sex中又以proId來分組。 )
通過WHERE條件篩選,再把結果分組
例如查詢id大于等于5的用戶按照sex分組:
SELECT * FROM user WHERE id>=5 GROUP BY sex;
GROUP_CONCAT(字段名稱) ? ? 得到某個字段詳情
GROUP BY配合GROUP_CONCAT()函數得到分組詳情
查詢id,sex,用戶詳情,按照sex分組
SELECT id,sex,GROUP_CONCAT(username) FROM user GROUP BY sex;
查詢proId、sex、regTime、username詳情,按proId分組、
SELECT proId,GROUP_CONCAT(username),GROUP_CONCAT(username),GROUP_CONCAT(sex),GROUP_CANCAT(regTime) FROM user GROUP BY proId;
聚合函數
COUNT() ? ? ?統計某個字段的總數
MAX() ? ? ? ? ?最大值
MIN() ? ? ? ? ? 最小值
AVG() ? ? ? ? ? 平均值
SUM() ? ? ? ? ?和
注意:COUNT(字段)不統計NULL值。
例如查詢id、sex、username詳情、組中總人數,并按sex分組:
SELECT id,sex,GROUP_CONCAT(username) AS users,COUNT(*) AS COUNT(*) AS totalUsers FROM user GROUP BY sex;
統計表中所有記錄總和:
SELECT COUNT(*) AS totalUsers FROM user;
查詢編號、性別、用戶名詳情,組中總人數,組中最大年齡,最小年齡,平均年齡,年齡總和,按性別分組:
SELECT id,sex,GROUP_CONCAT(username),
COUNT(*) AS total_users,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age,
SUM(age) AS sum_age
FROM user
GROUP BY sex;
WITH ROLLUP聚合統計上面所有記錄
使用HAVING子句對分組結果進行二次篩選
WHERE是對記錄第一次篩選,HAVING子句是對分組結果的二次篩選
注意:HAVING子句只能配合分組使用才有意義,放在分組之后
例如查詢id>=2、sex、用戶名詳情、組中總人數、最大年齡、年齡總和:
SELECT id,sex,GROUP_CONCAT(username) AS users,
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
SUM(age) AS sum_age
FROM user
--id大于等于2
WHERE id >=2
GROUP BY sex
-- 繼續篩選人數大于2的組并且最大年齡大于60
HAVING COUNT(*)>2 ?AND MAX(age)>60;
對查詢結果進行排序 ?ORDER BY
例如:按照id升序排序
SELECT * FROM user ORDER BY id ASC;
按照id降序排序
SELECT * FROM user ORDER BY id DESC;
按多字段排序
例如:按年齡升序,id降序排列
SELECT * FROM user ORDER BY age ASC,id DESC;
對結果隨機排序
SELECT * FROM user ORDER BY RAND();
限制查詢結果顯示條數 LIMIT
1.LIMIT 顯示條數
2.LIMIT 偏移量,顯示條數
查詢結果集 前三條記錄:
SELECT * FROM user LIMIT 3;
SELECT * FROM user ORDER BY id DESC LIMIT 3;
查詢表中前一條記錄:
SELECT * FROM user LIMIT 1;
實現分頁,偏移量+每頁顯示記錄數
SELECT * FROM user LIMIT 0,5; ?
SELECT * FROM user LIMIT 5,5; ?
SELECT * FROM user LIMIT 10,5;
總結:
SELECT id,sex,age,GROUP_CONCAT(username),
COUNT(*) AS totalUsers,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age,
SUM(age) AS sum_age
FROM user
WHERE id>=1 ?根據條件第一次篩選
GROUP BY sex ?對篩選結果分組
HAVING COUNT(*)>=2 對查詢結果二次篩選
ORDER BY age DESC ?篩選結果按照age字段排序
LIMIT 0,2; ?限制顯示條數
轉載于:https://blog.51cto.com/zgw285763054/1879420
總結
以上是生活随笔為你收集整理的MySQL查询数据操作(DQL)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息安全系统设计基础实验四:外设驱动程序
- 下一篇: codefores741A Arpa's