1. 程式人生 > >Mysql必知必會之閱讀總結

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;

,表示返回從行數4開始的3行資料。其中第一個數是開始位置,第二個數是要檢索的函式。即LIMIT M,N(M:表示開始位置,N:表示要檢索返回的記錄數)。

變數 含義
行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)