MySQL學習筆記(二)

在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]';

相關文章
相關標籤/搜索