MySQL查詢數據操做(DQL)

查詢記錄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;  限制顯示條數

相關文章
相關標籤/搜索