在MySQL學習筆記(二)中講了MySQL的基礎知識,如今說說MySQL的核心的部分,查詢:SELECT語句。正則表達式
1. 查詢全部字段: SELECT * FROM <表名>;函數
2. 查詢指定字段: SELECT <line1,line2,...> FROM <表名>;學習
3. 指定記錄查詢: SELECT <line1,line2,...> FROM <表名> WHERE <查詢條件>;spa
WHERE條件判斷符有如下這些:code
=,<>、!=,<,<=,>,=>,BETWEEN
4. 帶IN關鍵詞的查詢,就是在查詢條件中使用IN關鍵詞。blog
例如:SELECT line1,line2 FROM tab1 WHERE line1 IN(100,200);排序
固然,也能夠在IN前面加上NOT進行相反的條件查詢。class
5. 帶BETWEEN AND的範圍查詢,就是在查詢條件中使用BETWEEN AND關鍵詞。效率
例如:SELECT line1,line2 FROM tab1 WHERE line1 BETWEEN 100 AND 200;基礎
類似的,也能夠在BETWEEN前面加上NOT進行相反的條件查詢。
6. 帶LIKE的字符匹配查詢:(1)匹配任意長度的字符使用‘%’,固然也包括零字符。
例如,須要查找在tab1中全部以‘a’開頭的line1,SQL語句以下:
SELECT line1 FROM tab1 WHERE line1 LIKE ‘a%’;
須要查找在tab1中全部包含‘b’的line1記錄,SQL語句以下:
SELECT line1 FROM tab1 WHERE line1 LIKE ‘%b%’;
(2)匹配一個長度的任意字符,使用下劃線‘_’,例如:
SELECT line1 FROM tab1 WHERE line1 LIKE ‘_c%’;
7. 空值查詢(IS NULL 或者 IS NOT NULL):SELECT line1 FROM tab1 WHERE line1 IS NULL;
8. 多條件查詢。
(1)AND關鍵詞:SELECT <line1,line2,...> FROM <表名> WHERE <查詢條件1> AND <查詢條件2> [AND ...];
(2)OR關鍵詞:SELECT <line1,line2,...> FROM <表名> WHERE <查詢條件1> OR <查詢條件2> [AND ...];
這兩個關鍵詞是能夠一塊兒使用的,可是AND的優先級要比OR高,使用時要確保邏輯正確。
9. 去重條件查詢:SELECT DISTINCT <字段名> FROM <表名>;
10. 對查詢結果排序:使用ORDER BY子句。例如:
(1)對line1進行排序:SELECT line1 FROM tab1 ORDER BY line1;
(2)先按line1排序,再按line2排序:SELECT * FROM tab1 ORDER BY line1,line2;
另外,也能夠指定排序,如ASC(升序,默認排序方式),(DESC)降序。
例如需對line1降序,對line2升序:SELECT * FROM tab1 ORDER BY line1 DESC, line2;
11. 分組查詢。使用GROUP BY關鍵詞,語法爲:[GROUP BY 字段] [HAVING <條件表達式>]
(1) 與集合函數一塊兒使用時,如MAX( )、MIN( )、COUNT( )、SUM( )、AVG( )等。能夠加上AS關鍵詞,給這些集合函數取一個別名,如MAX(line1) AS max。
例如以line1分組並統計分組中的數量:SELECT line1,COUNT(*) AS Total FROM tab1 GROUP BY line1;
若是須要詳細的顯示出分組中的各字段的名字,可使用GROUP_CONCAT()關鍵詞。
使用如:SELECT line1,GROUP_CONCAT(line2),COUNT(*) AS Total FROM tab1 GROUP BY line1;
固然也可使用多個字段分組,形如GROUP BY line1,line2;
(2)使用HAVING關鍵詞過濾分組。
例如:SELECT line1,COUNT(*) AS Total FROM tab1 GROUP BY line1 HAVING COUNT(line1)>100;
(3)使用WITH ROLLUP統計數量,它會在分組的最後一列加一條統計上面記錄總和的記錄。
例如:SELECT line1,COUNT(*) AS Total FROM tab1 GROUP BY line1 WITH ROLLUP;
(4)使用LIMIT限制查詢結果,語法:LIMIT [位置偏移量, ] <行數>;
例如,返回前3條記錄:SELECT * FROM tab1 LIMIT 3;
從第5條記錄起,返回接下來的2條記錄: SELECT * FROM tab1 LIMIT 4,2;
12. 子查詢。子查詢是指一個查詢語句中嵌套在另外一個查詢語句內部的查詢。在SELECT語句中,先查詢子句的結果,將其做爲外層的查詢的過濾條件。經常使用的操做符有ANY(SOME)、ALL、IN、EXISTS。固然,子查詢中能夠添加到SELECT、UPDATE、DELETE語句中。
(1)帶ANY、SOME關鍵詞(即知足其中任一條件)的子查詢:
SELECT line1 FROM tab1 WHERE line1 > ANY(SELECT line2 FROM tab2);
(2)帶ALL關鍵詞(知足內層的全部條件)的子查詢:
SELECT line1 FROM tab1 WHERE line1 > ALL(SELECT line2 FROM tab2);
(3)帶(NOT) EXISTS關鍵字(系統對子查詢進行運算以判斷是否返回行,EXISTS是一個布爾型值,若是爲false則再也不對外層語句進行查詢)的子查詢。
例如:SELECT * FROM tab1 WHERE EXISTS (SELECT lin1 FROM tab2 WHERE lin1>10);
(4)帶(NOT)IN關鍵詞的子查詢:
SELECT line1 FROM tab1 WHERE line2 IN (SELECT lin1 FROM tab2 WHERE lin2> 10);
(5)使用比較運算符的子查詢:
SELECT line1 FROM tab1 WHERE line1=(SELECT lin1 FROM tab2 WHERE lin2= 'one');
13. UNION合併查詢的結果。合併的前提是這些表的列數與數據類型必須相同,其返回的行都是惟一不重複的。當使用UNION ALL時,容許有重複的結果,其查詢效率相對較高。
語法: SELECT line1,... FROM tab1 UNION [ALL] SELECT line1,... FROM tab1;
14. 使用正則表達式查詢。MySQL中使用REGEXP關鍵詞指定字符的匹配模式。關於正則表達式,請看另外一篇博文《正則表達式的使用》,這裏只舉幾個例子說明:
(1)查詢特定字符(這裏以‘s’爲例)開頭的記錄:
SELECT * FROM tab1 WHERE line1 REGEXP '^s';
(2)查詢指定字符以外(這裏以查詢‘a-o’以外的字符爲例)的字符:
SELECT * FROM tab1 WHERE line1 REGEXP '[^a-o]';