Mysql必知必會之閱讀總結
1. Mysql中使用 SELECT 查詢資料時候,有以下預設規則:
(1)SQL語句不區分大小寫(注:在Mysql4.1之前是區分的),因此,SELECT 和 select是等價的,甚至可以寫為Select。當然,並不推薦此風格,不符合規範、不利於閱讀
(2)在處理 SQL 語句時候,所有的空格都會被忽略掉。
(3)SQL 語句可以寫在一行,也可以寫在多行上,其效果是等價的。
(4)SQL 語句結束時,必須以分號(“;”)結束。
(5) 在檢索(SELECT) 多個列的時候,各列(列:欄位,行:記錄)之間用逗號隔開,最後一個列之後不用加逗號
eg: TEST_DATA=# SELECT name,gender,age FROM test1;
(6) 萬用字元(“*”)表示查詢所有的列,列出現的順序一般是列在表中定義的位置。注:使用萬用字元會帶來效能下降
(7) DISTINCT 關鍵字用於過濾掉表中重複出現的行,從而返回的資料行(記錄)是唯一的。
注:單獨的 DISTINCT (即不與其他函式同時使用時候),只能放在 開頭,否則會報錯。
如:SELECT age, DISTINCT name FROM test1;
則報錯。
(8)使用 LIMIT 來限制 SELECT 返回的記錄數。假如限制表 test1 中總數為10, 只想返回5行,則可使用:SELECT *FROM test1 LIMIT 5;
Mysql 也支援 SELECT 返回“指定的起始行和返回行數”,如:SELECT *FROM test1 LIMIT 3,4;
變數 | 含義 |
---|---|
行0 | SELECT 出來的記錄數中,第一個記錄數的位置為0,而不是1,因此LIMIT 1,1表示將檢索出來第二行,而不是第一行 |
(9) 完全限制的表名,所謂的完全限制表名是指,在 SELECT 中,在列的前面加上該列所在表的表名,如:SELECT test1.name FROM test1;
(10) ORDER BY 指定查詢到的記錄數按照某中規則進行排序(升序ASC,預設。降序:DESC)。在使用ORDER BY 子句的時候,應保證其位置在 FROM 子句之後。如果同時也使用了 LIMIT ,則 LIMIT 必須位於 ORDER BY 之後。如:SELECT *FROM test1 ORDER BY id DESC LIMIT 10;
(11) WHERE 子句過濾資料。若同時使用了 ORDER BY 和 WHERE 子句,則應當讓 ORDER BY 位於 WHERE 子句的後面。如:SELECT *FROM test1 WHERE id = 2 ORDER BY id DESC LIMIT 10;
(12) WHERE 子句操作符:
操作符 | 說明 |
---|---|
= | 等於 |
<> | 不等於 |
!= | 不等於 |
< | 小於 |
<= | 小於 等於 |
> | 大於 |
>= | 大於 等於 |
BETWEEN | 在指定的兩個值之間 |
(13) Mysql 在執行匹配時候,預設不區分大小寫。如:
eg:
SELECT name FROM test1 WHERE name = 'hello';
執行上面的查詢語句時候,若該表中的: name同時有 Hello 和 hello;則兩個都會返回。
(14) SELECT 語句中單引號(’ ')的使用。注意:單引號是用來限定字串的,也就是說,只有在“將值與字串型別的列進行比較時候,才需要加單引號,若是與數值列的值進行比較,則不需要加單引號。”
eg:
SELECT *FROM test1 WHERE name = 'hello'; //串型別的列值比較,需加單引號
SELECT *FROM test1 WHERE id = 1; //與數值列比較,不需要加單引號
(15) BETWEEN 區間範圍值檢查。即查詢某個範圍內的記錄數,因此涉及到兩個值,一個低端值,一個高階值。這兩個值之間用 AND 進行連線。如:
eg:
SELECT name,age,gender FROM test1 WHERE age BETWEEN 20 AND 50; //查詢年齡範圍在20~50之間的所有記錄資訊
(16) 空置檢查。SELECT 中檢查某列是否為空,可以使用 IS NULL, IS NOT NULL
(17) 組合WHERE 子句,通常會用到兩個操作符(邏輯運算子)AND 和 OR。其中AND表示條件同時成立,OR表示若其中一個成立即可返回資料(OR:它指示Mysql檢索匹配任一條件的行)。
eg:
SELECT * FROM test1 WHERE age = 25 AND name IS NOT NULL; //返回所有年齡age=25,同時名字不為空的資料
SELECT * FROM test1 WHERE age = 25 OR name IS NOT NULL; //返回所有年齡age=25,或是名字不為空的資料
(18) 若在 SELECT 中同時使用了 AND 、OR操作符,會有一個 計算次序 的現象。即類似於C/C++/JAVA等高階語言中的運算子優先順序一樣。AND 邏輯運算子的優先順序 大於 OR 邏輯運算子。
eg:
SELECT name,age FROM test1 WHERE age = 20 OR age = 30 AND name = 'xiaoming';
//本意是查詢:age = 30 AND name = 'xiaoming' 或 age = 20 AND name = 'xiaoming';然而 SQL 卻理解為了:
age = 30 AND name = 'xiaoming' 或 age = 20; //因為 AND 優先順序高於 OR。
//需修改為:
SELECT name,age FROM test1 WHERE (age = 20 OR age = 30) AND name = 'xiaoming';
解決方法是:使用圓括號()來明確地分組響應的操作符。
(19) IN 操作符。其功能等價於 OR 操作符。其使用方法是:IN ( n1,n2,n3,n4,,,nn);即 IN 操作符後緊跟圓括號(),然後圓括號中是所有要列舉的值,使用逗號隔開。
eg:
SELECT * FROM test1 WHERE age IN(20,24,26,30,35,40);
等價於
SELECT * FROM test1 WHERE age = 20 OR age = 24 OR age = 26 OR age = 30 OR age = 35 OR age = 40;
(20) NOT 操作符用來否定它之後所跟的任何條件。Mysql 支援使用 NOT 對 IN、BETWEEN 和 EXISTS 子句取反。
eg:
SELECT * FROM test1 WHERE age NOT IN(20,30); //查詢所有年齡不在20和30中的資料。
(21)
(22) 萬用字元進行過濾。在為搜尋子句中使用 萬用字元的時候,必須搭配 LIKE 關鍵字。
(23) 拼接欄位:將多個欄位拼接在一起構成一個欄位值。[瞭解更多,請檢視部落格…] 。注意:多數DBMS使用 || 或 + 來實現拼接,而 Mysql 則使用 CONCAT來實現。
(24) 執行算術運算。在 SELECT 的時候,可以在 SELECT 中對錶中的欄位進行算術運算,再返回改值操作。其支援的演算法運算有:
操作符 | 說明 |
---|---|
+ | 加 |
- | 減 |
* | 乘 |
/ | 除 |
(25) Mysql 中支援的聚合函式(有的稱呼為:聚集函式)共有5個,如下表:
函式 | 說明 |
---|---|
MAX | 返回某列的最大值 |
MIN | 返回某列的最小值 |
SUM | 返回某列值之和 |
AVG | 返回某列的平均值 |
COUNT | 返回某列的行數 |
(26)
(27)
(28)
(29)
(30)