查詢記錄ide
單表查詢SELECT語句完×××式: 函數
SELECT select_expr [ , select_expr ... ]spa
[排序
FROM tbl_referencesit
[WHERE 條件]io
[GROUP BY {col_name | position} [ASC | DESC], ... 分組]class
[HAVING 條件 對分組結果進行二次篩選]email
[ORDER BY {col_name | position} [ASC | DESC], ...排序]select
[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>=二、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; 限制顯示條數