MySQL教程66-資料表查詢語句
在MySQL中,可以使用 SELECT 語句來查詢資料。查詢資料是指從資料庫中根據需求,使用不同的查詢方式來獲取不同的資料,是使用頻率最高、最重要的操作。
SELECT 的語法格式如下:
SELECT {* | <欄位列名>} [ FROM <表 1>, <表 2>… [WHERE <表示式> [GROUP BY <group by definition> [HAVING <expression> [{<operator> <expression>}…]] [ORDER BY <order by definition>View Code] [LIMIT[<offset>,] <row count>] ]
其中,各條子句的含義如下:
{*|<欄位列名>}
包含星號萬用字元的欄位列表,表示所要查詢欄位的名稱。<表 1>,<表 2>…
,表 1 和表 2 表示查詢資料的來源,可以是單個或多個。WHERE <表示式>
是可選項,如果選擇該項,將限定查詢資料必須滿足該查詢條件。GROUP BY< 欄位 >
,該子句告訴 MySQL 如何顯示查詢出來的資料,並按照指定的欄位分組。[ORDER BY< 欄位 >]
[LIMIT[<offset>,]<row count>]
,該子句告訴 MySQL 每次顯示查詢出來的資料條數。
下面先介紹一些簡單的 SELECT 語句,關於 WHERE、GROUP BY、ORDER BY 和 LIMIT 等限制條件,後面會一一講解。
查詢表中所有欄位
查詢所有欄位是指查詢表中所有欄位的資料。MySQL 提供了以下 2 種方式查詢表中的所有欄位。
- 使用“*”萬用字元查詢所有欄位
- 列出表的所有欄位
1)使用“*”查詢表的所有欄位
SELECT 可以使用“*”查詢表中所有欄位的資料,語法格式如下:
SELECT * FROM 表名;
使用“*”查詢時,只能按照資料表中欄位的順序進行排列,不能改變欄位的排列順序。
例 1
從 tb_students_info 表中查詢所有欄位的資料,SQL 語句和執行結果如下所示。
mysql> use test_db; Database changed mysql> SELECT * FROM tb_students_info; +----+--------+---------+------+------+--------+------------+ | id | name | dept_id | age | sex | height | login_date | +----+--------+---------+------+------+--------+------------+ | 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 | | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 | | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 | | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 | | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 | | 6 | John | 2 | 21 | M | 172 | 2015-11-11 | | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 | | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 | | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 | | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 | +----+--------+---------+------+------+--------+------------+ 10 rows in set (0.26 sec)
結果顯示,使用“*”萬用字元時,將返回所有列,資料列按照建立表時的順序顯示。
注意:一般情況下,除非需要使用表中所有的欄位資料,否則最好不要使用萬用字元“*”。雖然使用萬用字元可以節省輸入查詢語句的時間,但是獲取不需要的列資料通常會降低查詢和所使用的應用程式的效率。使用“*”的優勢是,當不知道所需列的名稱時,可以通過“*”獲取它們。
2)列出表的所有欄位
SELECT 關鍵字後面的欄位名為需要查詢的欄位,因此可以將表中所有欄位的名稱跟在 SELECT 關鍵字後面。如果忘記了欄位名稱,可以使用 DESC 命令查看錶的結構。
有時,由於表的欄位比較多,不一定能記得所有欄位的名稱,因此該方法很不方便,不建議使用。
例 2
查詢 tb_students_info 表中的所有資料,SQL 語句還可以書寫如下:
SELECT id,name,dept_id,age,sex,height,login_date FROM tb_students_info;
執行結果和例 1 相同。
這種查詢方式比較靈活,如果需要改變欄位顯示的順序,只需調整 SELECT 關鍵字後面的欄位列表順序即可。
雖然列出表的所有欄位的方式比較靈活,但是查詢所有欄位時通常使用“*”萬用字元。使用“*”這種方式比較簡單,尤其是表中的欄位很多的時候,這種方式的優勢更加明顯。當然,如果需要改變欄位顯示的順序,可以選擇列出表的所有欄位。
查詢表中指定的欄位
查詢表中的某一個欄位的語法格式為:
SELECT < 列名 > FROM < 表名 >;
例 3
查詢 tb_students_info 表中 name 列所有學生的姓名,SQL 語句和執行結果如下所示。
mysql> SELECT name FROM tb_students_info; +--------+ | name | +--------+ | Dany | | Green | | Henry | | Jane | | Jim | | John | | Lily | | Susan | | Thomas | | Tom | +--------+ 10 rows in set (0.00 sec)
輸出結果顯示了 tb_students_info 表中 name 欄位下的所有資料。
使用 SELECT 宣告可以獲取多個欄位下的資料,只需要在關鍵字 SELECT 後面指定要查詢的欄位名稱,不同欄位名稱之間用逗號“,”分隔開,最後一個欄位後面不需要加逗號,語法格式如下:
SELECT <欄位名1>,<欄位名2>,…,<欄位名n> FROM <表名>;
例 4
從 tb_students_info 表中獲取 id、name 和 height 三列,SQL 語句和執行結果如下所示。
mysql> SELECT id,name,height -> FROM tb_students_info; +----+--------+--------+ | id | name | height | +----+--------+--------+ | 1 | Dany | 160 | | 2 | Green | 158 | | 3 | Henry | 185 | | 4 | Jane | 162 | | 5 | Jim | 175 | | 6 | John | 172 | | 7 | Lily | 165 | | 8 | Susan | 170 | | 9 | Thomas | 178 | | 10 | Tom | 165 | +----+--------+--------+ 10 rows in set (0.00 sec)
輸出結果顯示了 tb_students_info 表中 id、name 和 height 三個欄位下的所有資料。