簡介
MySQL是一種廣泛使用的開源關系型資料庫管理系統,它提供了許多功能強大的SQL查詢語句,其中最常用且最重要的是SELECT語句。SELECT語句用于從資料庫表中檢索資料,并根據給定的條件傳回所需的結果集。在本文中,我們将深入探讨MySQL SELECT語句的各個方面,并提供一些示例來說明其用法。
基本文法
SELECT 的文法格式如下:
sql複制代碼SELECT
{* | <字段列名>}
[
FROM <表 1>, <表 2>…
[WHERE <表達式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator> <expression>}…]]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
]
各條子句的含義如下:
- {*|<字段列名>}包含星号通配符的字段清單,表示所要查詢字段的名稱。
- <表 1>,<表 2>…,表 1 和表 2 表示查詢資料的來源,可以是單個或多個。
- WHERE <表達式>是可選項,如果選擇該項,将限定查詢資料必須滿足該查詢條件。
- GROUP BY< 字段 >,該子句告訴 MySQL 如何顯示查詢出來的資料,并按照指定的字段分組。
- [ORDER BY< 字段 >],該子句告訴 MySQL 按什麼樣的順序顯示查詢出來的資料,可以進行的排序有升序(ASC)和降序(DESC),預設情況下是升序。
- [LIMIT[<offset>,]<row count>],該子句告訴 MySQL 每次顯示查詢出來的資料條數。
下面先介紹一些簡單的 SELECT 語句,關于 WHERE、GROUP BY、ORDER BY 和 LIMIT 等限制條件,後面我們會一一講解。
查詢表中所有字段
查詢所有字段是指查詢表中所有字段的資料。MySQL 提供了以下 2 種方式查詢表中的所有字段。
- 使用“*”通配符查詢所有字段
- 列出表的所有字段
- 使用“*”查詢表的所有字段
SELECT 可以使用“*”查找表中所有字段的資料,文法格式如下:
sql複制代碼SELECT * FROM 表名;
使用“*”查詢時,隻能按照資料表中字段的順序進行排列,不能改變字段的排列順序。
示例如下:
sql複制代碼mysql> use test_db;
Database changed
mysql> SELECT * FROM employees;
+----+--------+---------+------+------+--------+------------+
| id | name | dept_id | age | sex | height | join_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)
注:一般情況下,除非需要使用表中所有的字段資料,否則最好不要使用通配符“*”。雖然使用通配符可以節省輸入查詢語句的時間,但是擷取不需要的列資料通常會降低查詢和所使用的應用程式的效率。使用“*”的優勢是,當不知道所需列的名稱時,可以通過“*”擷取它們。
- 列出表的所有字段
SELECT 關鍵字後面的字段名為需要查找的字段,是以可以将表中所有字段的名稱跟在 SELECT 關鍵字後面。如果忘記了字段名稱,可以使用 DESC 指令檢視表的結構。
有時,由于表的字段比較多,不一定能記得所有字段的名稱,是以該方法很不友善,不建議使用。
查詢 tb_students_info 表中的所有資料,SQL 語句還可以書寫如下:
sql複制代碼SELECT id,name,dept_id,age,sex,height,join_date FROM employees;
雖然列出表的所有字段的方式比較靈活,但是查詢所有字段時通常使用“*”通配符。使用“*”這種方式比較簡單,尤其是表中的字段很多的時候,這種方式的優勢更加明顯。當然,如果需要改變字段顯示的順序,可以選擇列出表的所有字段。
查詢表中指定的字段
查詢表中的某一個字段的文法格式為:
sql複制代碼SELECT < 列名 > FROM < 表名 >;
- 查詢單個字段
查詢 employees表中 name 列所有員工的姓名,SQL 語句和運作結果如下所示。
sql複制代碼mysql> SELECT name FROM employees;
+--------+
| name |
+--------+
| Dany |
| Green |
| Henry |
| Jane |
| Jim |
| John |
| Lily |
| Susan |
| Thomas |
| Tom |
+--------+
10 rows in set (0.00 sec)
輸出結果顯示了 employees 表中 name 字段下的所有資料。
- 查詢多個字段内容
使用 SELECT 聲明可以擷取多個字段下的資料,隻需要在關鍵字 SELECT 後面指定要查找的字段名稱,不同字段名稱之間用逗号“,”分隔開,最後一個字段後面不需要加逗号,文法格式如下:
sql複制代碼SELECT <字段名1>,<字段名2>,…,<字段名n> FROM <表名>;
示例:
從 employees 表中擷取 id、name 和 height 三列,SQL 語句和運作結果如下所示。
sql複制代碼mysql> SELECT id,name,height
-> FROM employees;
+----+--------+--------+
| 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)
輸出結果顯示了 employees 表中 id、name 和 height 三個字段下的所有資料。
總結
SQL是一個非常強大且靈活的查詢語言,可以根據不同的需求進行多樣化的資料檢索和操作。在實際應用中,根據具體的業務場景和資料結構,你可以根據這些基本用法進行更複雜的查詢操作。要熟練掌握SQL,需要不斷練習并深入了解資料庫的表設計和索引優化等知識。
擷取更多技術資料,請點選!> 霍格沃茲測試開發學社|免費學習資料大放送,助你事半功倍! - 公衆号 - 測試人社群