IN/NOT IN操作符:查詢滿足(不滿足)指定范圍內的條件的記錄。
s_id為101和102的記錄:
MYSQL> SELECT s_id, s_name FROM fruits WHERE s_id IN (101,102);
s_id不等於101和102的記錄:
MYSQL> SELECT s_id, s_name FROM fruits WHERE s_id NOT IN (101,102);
BETWEEN AND/NOT BETWEEN AND查詢: 查詢指定范圍內(外)的值(包括兩個端點值),參數:范圍的開始值和結束值。
查詢f_price在2~10之間的記錄:
MYSQL> SELECT f_name, f_price FROM fruits WHERE f_price BETWEEN 2 AND 10;
LIKE操作符: 模糊查詢,“%”匹配任意長度的字符,“_”匹配任意一個字符。
查詢以b開頭的記錄:
MYSQL> SELECT f_name FROM fruits WHERE f_name LIKE 'b%';
查詢匹配ball的記錄:
MYSQL> SELECT f_name FROM fruits WHERE f_name LIKE 'bal_';
NULL值查詢: 如果某個字段設置為NULL(NULL不等於0,也不等於空字符串),則可使用IS NULL查詢:
查詢f_name字段為NULL的記錄:
MYSQL> SELECT f_name FROM fruits WHERE f_name IS NULL;
ORDER BY DESC/ASC: 降序/升序排序
MYSQL> SELECT f_name FROM fruits ORDER BY f_name DESC;
GROUP BY: 對數據按照某個字段或多個字段進行分組,和集合函數一起使用,MAX(),MIN(),COUNT(),SUM(),AVG()(以分組后的每一組為單位使用上述函數)
GROUP BY 字段 HAVING 條件表達式;
根據s_id對記錄進行分組:
MYSQL> SELECT s_id, COUNT(*) AS Total FROM fruits GROUP BY s_id;
GROUP_COUNT: 顯示每個分組中的字段值
MYSQL> SELECT s_id, GROUP_COUNT(f_name) AS names FROM fruits GROUP BY s_id;
# 顯示每個分組中的所有f_name字段。
HAVING 過濾分組
MYSQL> SELECT s_id, s_name FROM friuts GROUP BY s_id HAVING COUNT(f_name) > 1;
# 顯示f_name數量大於1的分組信息。
WITH ROLLUP: 顯示分組后數據的所有記錄
MYSQL> SELECT s_id, COUNT(*) FROM fruits GROUP BY s_id WITH ROLLUP;
多字段分組:
MYSQL> SELECT * FROM fruits GROUP BY s_id, f_name;
#首先根據s_id進行分組,再對每個分組里根據f_name進行分組。
LIMIT 限制查詢結果:
LIMIT 位置偏移量(從哪一行開始), 行數
MYSQL> SELECT * FROM fruits LIMIT 4;
# 第一行為0,默認從第一行開始
內連接查詢(INNER JOIN):
MYSQL> SELECT t_1.name, s_name FROM fruits, t_1 WHERE fruits.s_id = t_1.s_id;
MYSQL> SELECT t_1.name, s_name FROM fruits INNER JOIN t_1 ON fruits.s_id = t_1.s_id;
上述兩個sql語句結果一致。
注:如果一個連接查詢中,涉及到的連個表是同一個表,這種查詢成為自連接查詢。
MYSQL> SELECT f1.f_name, f1.s_id FROM fruits AS f1, fruits AS f2 WHERE f1.s_id = f2.s_id;
左外連接查詢(LEFT JOIN): 顯示左表中的所有行,如果右表中沒有對應的字段為NULL
MYSQL> SELECT t_1.s_id, t_2.f_name FROM t_1 LEFT OUTER JOIN t_2 ON t_1.s_id = t_2.s_id;
右外連接(RIGHT JOIN): 顯示右表中的所有行。
MYSQL> SELECT t_1.s_id, t_2.f_name FROM t_1 RIGHT OUTER JOIN t_2 ON t_1.s_id = t_2.s_id;
符合條件連接查詢
MYSQL> SELECT t_1.s_id, t_2.f_name FROM t_1 INNER JOIN t_2 ON t_1.s_id = t_2.s_id AND t_1.f_name = 'abc' ORDER BY t_1.f_name;
子查詢(ANY,ALL,EXISTS):
ANY:
MYSQL> SELECT * FROM fruits WHERE s_id > ANY(SELECT s_id FROM t2);
# 返回大於子查詢結果中最小值的所有記錄。
ALL:
MYSQL> SELECT * FROM fruits WHERE s_id > ALL(SELECT s_id FROM t2);
# 返回大於子查詢結果中最大值的所有記錄。
EXISTS:
MYSQL> SELECT * FROM fruits WHERE EXISTS(SELECT s_id FROM t2);
# 子查詢是否有記錄。
NOT EXISTS:
MYSQL> SELECT * FROM fruits WHERE NOT EXISTS(SELECT s_id FROM t2);
# 如果子查詢沒有返回行則符合條件。
IN/NOT IN:
MYSQL> SELECT * FROM fruits WHERE s_id IN(SELECT s_id FROM t2);
<、<=、=、>=、!=:
MYSQL> SELECT * FROM fruits WHERE s_id = (SELECT s_id FROM t2 WHERE s_id = 1);
合並查詢結果
UNION 不刪除重復行,
UNION ALL刪除重復行
MYSQL> SELECT s_id FROM fruits WHERE f_price < 9 UNION ALL SELECT s_id WHERE s_id IN(10,11);
正則表達式查詢(REGEXP)
MYSQL> SELECT * FROM fruits WHERE f_name REGEXP '^b';
# 查詢f_name以b開頭的記錄。