mysql 查詢語句整理
單表查詢
MySQL從數據表中查詢數據最基本的語句是SELECT語句,在前面的“增刪查”已經使用過:SELECT * FROM 表名,也就是查詢指定數據表中的所有數據。下面將對SELECT語句進行詳細介紹。
查詢所有字段
語法:SELECT 字段名1,字段名2,…
FROM 表名
結果:
註意:字段順序可以更改則顯示的結果也會作出對應的調整:
4.1.2 在SELECT語句中使用(‘ * ’)通配符代替所有字段
語法:SELECT * FROM 表名;
4.1.3 查詢指定的部分字段
語法:SELECT 字段名1,字段名2,… FROM 表名;
4.2 按條件查詢
4.2.1 帶關系運算符的查詢
語法:SELECT 字段名1,字段名2,…
FROM 表名
WHERE 條件表達式
在WHERE子句中可以使用如下關系運算符:
關系運算符 |
說 明 |
= |
等於 |
<> |
不等於 |
!= |
不等於 |
< |
小於 |
<= |
小於等於 |
> |
大於 |
>= |
大於等於 |
舉例:
4.2.2 帶 IN 關鍵字的查詢
IN關鍵字用於判斷某個字段的值是否在指定集合中,若在,則該字段所在的記錄將會被查詢出來.
語法:SELECT * | 字段名1,字段名2,…
FROM 表名
WHERE 字段名 [ NOT ] IN (元素1,元素2,…)
註意:NOT IN 與 IN 相反,查詢的是不在指定範圍內的記錄。
4.2.3 帶 BETWEEN AND 關鍵字的查詢
BETWEEN AND 用於判斷某個字段的值是否在指定範圍之內,若在,則該字段所在的記錄會被查詢出來,反之不會。
語法:SELECT * | { 字段名1,字段名2,… }
FROM 表名
WHERE 字段名 [ NOT ] BETWEEN 值1 AND 值2;
註意:NOT BETWEEN AND 表示查詢指定範圍外的記錄。
4.2.4 空值查詢
在數據表中有些值可能為空值(NULL),空值不同於0,也不同於空字符串,需要使用 IS NULL 來判斷字段的值是否為空值。
語法:SELECT * | 字段名1,字段名2,…
FROM 表名
WHERE 字段名 IS [ NOT ] NULL
註意:IS NOT NULL 關鍵字用來查詢字段不為空值的記錄。
4.2.5 帶 DISTINCT 關鍵字的查詢
很多表中某些字段的數據存在重復的值,可以使用DISTINCT關鍵字來過濾重復的值,只保留一個值。
語法:SELECT DISTINCT 字段名 FROM 表名;
註意:DISTINCT 關鍵字還可作用於多個字段,則只有多個字段的值都完全相同時才會被認作是重復記錄。
4.2.6 帶 LIKE 關鍵字的查詢
語法:SELECT * | 字段名1,字段名2,…
FROM 表名
WHERE 字段名 [ NOT ] LIKE ‘匹配字符串’;
百分號(%)通配符
匹配任意長度的字符串,包括空字符串。例如,字符串“ c% ”匹配以字符 c 開始,任意長度的字符串,如“ ct ”,“ cut ”,“ current ”等;字符串“ c%g ”表示以字符 c 開始,以 g 結尾的字符串;字符串“ %y% ”表示包含字符“ y ”的字符串,無論“ y ”在字符串的什麽位置。
(2)下劃線(_)通配符
下劃線通配符只匹配單個字符,若要匹配多個字符,需要使用多個下劃線通配符。例如,字符串“ cu_ ”匹配以字符串“ cu ”開始,長度為3的字符,如“ cut ”,“ cup ”;字符串“ c__l”匹配在“ c ”和“ l ”之間包含兩個字符的字符串,如“ cool ”。需要註意的是,連續的“_”之間不能有空格,例如“M_ _QL”只能匹配“My SQL”,不能匹配“MySQL”。
註意:若要查詢的字段值本來就含有“ % ”或者“ _ ”,則要用“ \ ”進行轉義,如要查詢本身含有“ % ”的字符串,命令應改為 “ %\%%”。
4.2.7 帶 AND 關鍵字的多條件查詢
在使用SELECT語句查詢數據時,優勢為了使查詢結果更加精確,可以使用多個查詢條件,如使用 AND 關鍵字可以連接兩個或多個查詢條件。
語法:SELECT * | 字段名1,字段名2,…
FROM 表名
WHERE 條件表達式1 AND 條件表達式2 [ … AND 條件表達式 n ];
4.2.8 帶 OR 關鍵字的多條件查詢
與 AND 關鍵字不同,OR 關鍵字只要滿足任意一個條件就會被查詢出來
語法:SELECT * | 字段名1,字段名2,…
FROM 表名
WHERE 條件表達式1 OR 條件表達式2 [ … OR 條件表達式 n ];
4.2.9 OR 和 AND 一起使用的情況
OR 和 AND 一起使用的時候,AND 的優先級高於 OR,因此二者一起使用時,會先運算 AND 兩邊的表達式,再運算 OR 兩邊的表達式。
高級查詢
聚合函數
函數名稱 |
作用 |
COUNT() |
返回某列的行數 |
SUM() |
返回某列值的和 |
AVG() |
返回某列的平均值 |
MAX() |
返回某列的最大值 |
MIN() |
返回某列的最小值 |
(1)COUNT()函數:統計記錄的條數
語法:SELECT COUNT(*) FROM 表名
(2)SUM()函數:求出表中某個字段所有值的總和
語法:SELECT SUM(字段名) FROM 表名;
(3)AVG()函數:求出表中某個字段所有值的平均值
語法:SELECT AVG(字段名) FROM 表名;
(4)MAX()函數:求出表中某個字段所有值的最大值
語法:SELECT MAX(字段名) FROM 表名;
(5)MIN()函數:求出表中某個字段所有值的最小值
語法:SELECT MIN(字段名) FROM 表名;
4.3.2 對查詢結果進行排序
語法:SELECT 字段名1,字段名2,…
FROM 表名
ORDER BY 字段名1 [ ASC | DESC ],字段名2 [ ASC | DESC ]…
在該語法中指定的字段名是對查詢結果進行排序的依據,ASC表示升序排列,DESC 表示降序排列,默認情況是升序排列。
4.3.3 分組查詢
在對表中數據進行統計的時候,可以使用GROUP BY 按某個字段或者多個字段進行分組,字段中值相同的為一組,如男生分為一組,女生分為一組。
語法:SELECT 字段名1,字段名2,…
FROM 表名
GROUP BY 字段名1,字段名2,… [ HAVING 條件表達式 ];
(1)單獨使用 GROUP BY 進行分組
單獨使用GROUP BY 關鍵字,查詢的是每個分組中的一條記錄
註意:若在此2例中鍵入命令之後出現“#1055”錯誤,無法完成分組查詢,是由於MySQL版本升級到了5.7,可自行百度“MySQL 1055錯誤”參考解決辦法。
(2) GROUP BY 和聚合函數一起使用
GROUP BY 和聚合函數一起使用,可以統計出某個或者某些字段在一個分組中的最大值、最小值、平均值等。
(2) GROUP BY 和 HAVING 關鍵字一起使用
HAVING關鍵字和WHERE關鍵字的作用相同,區別在於HAVING 關鍵字可以跟聚合函數,而WHERE 關鍵字不能。通常HAVING 關鍵字都和GROUP BY一起使用,用於對分組後的結果進行過濾。
4.3.4 使用 LIMIT 限制查詢結果的數量
語法:SELECT 字段名2,字段名2,…
FROM 表名
LIMIT [ OFFSET ,] 記錄數
在此語法中,LIMIT 後面可以跟兩個參數,第一個參數“ OFFSET ”表示偏移量,如果偏移量為0,則從查詢結果的第一條記錄開始,偏移量為1則從查詢結果中的第二條記錄開始,以此類推。OFFSET為可選值,默認值為0,第二個參數“記錄數”表示指定返回查詢記錄的條數。
4.4 為表和字段取別名
4.4.1 為表取別名
在進行查詢操作時,如果表名很長使用起來不方便,可以為表取一個別名來代替表的名稱。
語法:SELECT * FROM 表名 [ AS ] 別名;
4.4.1 為字段取別名
語法:SELECT 字段名 [ AS ] 別名 [ ,字段名 [AS] 別名,…] FROM 表名 ;
mysql 查詢語句整理