利用空閑時間花幾分鐘回顧一下 7.1 檢索數據 為了查詢出資料庫表中的行(數據),使用SELECE語句。 格式: 第一種寫法使用\ 通配符,會把表中行的列全部查詢出來,而不必取一一列出全部列。但是不推薦使用,這跟INSERT語句的規範寫法一樣。 使用\ 通配符,列的順序一般是列在表定義中出現的順序, ...
利用空閑時間花幾分鐘回顧一下
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>;
在單表時可能看不出什麼差別,但是在多表查詢時,並且是那種有相關聯的表,因為有可能兩張表會有相同的列名,所以需要使用完全限定的表名來區分。