前提要述:參考書籍《MySQL必知必會》
7.1 檢索數據
爲了查詢出數據庫表中的行(數據),使用SELECE語句。
格式:
# 第一種
SELECT * FROM <table_name>;
# 第二種
SELECT field1,field2,... FROM <table_name>;
- 第一種寫法使用*通配符,會把表中行的列全部查詢出來,而不必取一一列出全部列。但是不推薦使用,這跟INSERT語句的規範寫法一樣。使用*通配符,列的順序一般是列在表定義中出現的順序,但有時候並不是這樣的,表的模式的變化(如添加或刪除列)可能會導致順序的變化。特別是像使用INSERT SELECT這樣的語句,可能會報錯,甚至可能會不會報錯但是數據插入錯誤的列。
- 推薦使用第二種,第二種查詢方式可以查詢表中行的全部列,也可以查詢表中行的單列或多列。
- 使用通配符注意事項:雖然使用通配符可能會省事,不用明確列出所需列,但檢索不需要的列通常會降低檢索和應用程序的性能。
例如:
- 單列查詢:
SELECT stu_name FROM student;
- 多列查詢:
SELECT stu_name, stu_sex FROM student;
- 查詢全部列:
SELECT * FROM student;
# 或(推薦)
SELECT stu_id, stu_name, stu_sex FROM student;
7.2 檢索不同的行
因爲在表中有時候需要進行去重操作,可以使用DISTINCT關鍵字,讓SELECT查詢的結果返回不同的值。
格式:
SELECT DISTINCT field1,field2,... FROM <stable_name>;
DISTINCT關鍵字的注意:
- 如果是單列,那麼使用該關鍵字會將該列作爲判斷去重的條件。
- 如果是多列,那麼會將該多列作爲判斷去重的條件。
- 使用這些單列或多列作爲去重條件,如果在表中都是不相同的,那麼就會將所有行都查出來。
7.3 限制結果
SELECT語句返回所有匹配的行。如果爲了返回第一行或前幾行,那麼可以使用LIMIT子句。
格式:
# 第一種(n爲整數)
SELECT field1,field2,... FROM <stable_name> LIMIT n;
# 第二種 (n,m爲整數, n>=0, m>=1)
SELECT field1,field2,... FROM <stable_name> LIMIT n,m;
解釋:
- 第一種寫法,對於查詢出的數據(行)只返回不多於n行。
- 第二種寫法,LIMIT後的n表示查詢的開始的位置,m表示要檢索的行數。即,從第n行開始查詢m行。
- LIMIT後n是從0開始的,所以檢索出來的第一行爲行0而不是行1。因此,LIMIT 1,1 是將檢索出第二行而不是第一行。
- 如果LIMIT指定要檢索的行數超過表中的行數,那麼MySQL將返回它能返回的那麼多行。
因爲有人會把LIMIT n,m的語法搞混,比如LIMIT 3,4 是從行4開始的3行還是從行3開始的4行?如上面所述,它的意思是從行3開始的4行。
所以,MySQL 5支持LIMIT的另一種代替語法:LIMIT 4 OFFSET 3,意思是從行3開始取4行。
7.4 使用完全限定的表名
到目前爲止SQL例子只通過列名引用列。也可能會使用完全限定的名稱來引用列(同時使用表明和列名),如下:
SELECT <stable_name>.field1,<stable_name>.field2,...
FROM <stable_name>;
在單表時可能看不出什麼差別,但是在多表查詢時,並且是那種有相關聯的表,因爲有可能兩張表會有相同的列名,所以需要使用完全限定的表名來區分。