MySQL學習筆記(二)

來源:互聯網
上載者:User

標籤:

在MySQL學習筆記(二)中講了MySQL的基礎知識,現在說說MySQL的核心的部分,查詢:SELECT語句。

1. 查詢所有欄位: SELECT * FROM <表名>;

2. 查詢指定欄位: SELECT <line1,line2,...> FROM <表名>;

3. 指定記錄查詢: SELECT <line1,line2,...> FROM <表名> WHERE <查詢條件>;

WHERE條件判斷符有以下這些:

=,<>、!=,<,<=,>,=>,BETWEEN

4. 帶IN關鍵詞的查詢,就是在查詢條件中使用IN關鍵詞。

例如:SELECT line1,line2 FROM tab1 WHERE line1 IN(100,200);

當然,也可以在IN前面加上NOT進行相反的條件查詢。

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. 使用Regex查詢。MySQL中使用REGEXP關鍵詞指定字元的匹配模式。關於Regex,請看另一篇博文《Regex的使用》,這裡只舉幾個例子說明:

(1)查詢特定字元(這裡以‘s’為例)開頭的記錄:

SELECT * FROM tab1 WHERE line1 REGEXP ‘^s‘;

(2)查詢指定字元之外(這裡以查詢‘a-o’之外的字元為例)的字元:

SELECT * FROM tab1 WHERE line1 REGEXP ‘[^a-o]‘;

MySQL學習筆記(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.