在本教學中,您將學習如何使用SQL SELECT
語句從單個表中查詢資料。
要查詢表中的資料,請使用SQL SELECT
語句。 SELECT
語句包含用於選擇列,選擇行,分組資料,連線表以及執行簡單計算的語法。
SELECT
語句是SQL中最複雜的命令之一,因此,在本教學中,我們將僅介紹基礎知識。
下面說明了從單個表中檢索資料的SELECT
語句的基本語法。
SELECT
column1, column2, column3, ...
FROM
table_name;
在此語法中,指定查詢SELECT
子句中的資料是使用逗號分隔列的列表,並在FROM
子句中指定表名。 在評估SELECT
語句時,資料庫系統首先計算FROM
子句,然後再計算SELECT
子句。
分號(;
)不是查詢的一部分。 通常,資料庫系統使用分號分隔兩個SQL查詢。 有關更多資訊,請檢視SQL語法。
如果要查詢表的所有列中的資料,可以使用星號(*
)運算子而不是列列表,如下所示。
SELECT
*
FROM
table_name;
請注意,SQL不區分大小寫。所以資料庫系統處理
SELECT
和select
都是相同操作。 但是,為了使SQL語句更具可讀性,我們將使用SQL關鍵字的大寫字母(如SELECT
和FROM
)和小寫字母(如表名和列名)等識別符號。
除了SELECT
和FROM
子句之外,SELECT
語句還可以包含許多其他子句,例如 -
ORDER BY
- 用於對結果集進行排序LIMIT
- 用於限制返回的行JOIN
- 用於查詢來自多個相關表的資料GROUP BY
- 用於根據一列或多列對資料進行分組HAVING
- 用於過濾分組您將在後續教學中瞭解這些子句的使用。
我們將使用範例資料庫中的employees
表進行演示。
要查詢表中的所有列,請使用星號(*
)而不是指定每列。 例如,以下語句從employees
表中檢索所有資料:
SELECT
*
FROM
employees;
執行上面範例程式碼,得到以下結果 -
+-------------+------------+-----------+---------------------------+----------------+------------+--------+--------+------------+---------------+
| employee_id | first_name | last_name | email | phone_number | hire_date | job_id | salary | manager_id | department_id |
+-------------+------------+-----------+---------------------------+----------------+------------+--------+--------+------------+---------------+
| 100 | Steven | Lee | [email protected] | 0532-86011111 | 1987-06-17 | 4 | 24000 | NULL | 9 |
| 101 | Neena | Wong | [email protected] | 0551-4243311 | 1989-09-21 | 5 | 17000 | 100 | 9 |
| 102 | Lex | Liang | [email protected] | 0571-87622362 | 1993-01-13 | 5 | 17000 | 100 | 9 |
| 103 | Alexander | Lee | [email protected] | 020-95105105 | 1990-01-03 | 9 | 9000 | 102 | 6 |
... ...
| 201 | Michael | Zhou | [email protected] | 010-67237328 | 1996-02-17 | 10 | 13000 | 100 | 2 |
| 202 | Pat | Zhou | [email protected] | 0755-28114518 | 1997-08-17 | 11 | 6000 | 201 | 2 |
| 203 | Susan | Zhou | [email protected] | 0755-83587526 | 1994-06-07 | 8 | 6500 | 101 | 4 |
| 204 | Hermann | Wu | [email protected] | 0513-83512816 | 1994-06-07 | 12 | 10000 | 101 | 7 |
| 205 | Shelley | Wu | [email protected] | 0898-31686222 | 1994-06-07 | 2 | 12000 | 101 | 11 |
| 206 | William | Wu | [email protected] | 022-26144822 | 1994-06-07 | 1 | 8300 | 205 | 11 |
+-------------+------------+-----------+---------------------------+----------------+------------+--------+--------+------------+---------------+
40 rows in set
使用星號(*
)運算子只能方便地通過SQL用戶端應用程式以互動方式查詢資料。 但是,如果在應用程式的嵌入語句中使用星號(*
)運算子,則可能存在一些潛在問題。
首先,因為表的結構將發展以適應新的業務需求,例如,可以新增新列並刪除現有列。 如果使用星號(*
)運算子並且未更改應用程式程式碼以使其與新表結構一起使用,則應用程式可能無法正常執行。
星號(*
)運算子的另一個問題是它可能會增加資料庫伺服器和應用程式之間傳輸的不必要資料,因為應用程式可能只需要表的部分資料。
SELECT
語句用於準確指定要以任何順序檢索資料的列,它不必按表中定義的順序排列。
例如,如果想要檢視所有員工的員工ID,名字,姓氏和雇用日期,則使用以下查詢:
SELECT
employee_id,
first_name,
last_name,
hire_date
FROM
employees;
請注意,結果集僅包含SELECT
子句中指定的四列。如下所示 -
+-------------+------------+-----------+------------+
| employee_id | first_name | last_name | hire_date |
+-------------+------------+-----------+------------+
| 100 | Steven | Lee | 1987-06-17 |
| 101 | Neena | Wong | 1989-09-21 |
| 102 | Lex | Liang | 1993-01-13 |
| 103 | Alexander | Lee | 1990-01-03 |
... ...
| 202 | Pat | Zhou | 1997-08-17 |
| 203 | Susan | Zhou | 1994-06-07 |
| 204 | Hermann | Wu | 1994-06-07 |
| 205 | Shelley | Wu | 1994-06-07 |
| 206 | William | Wu | 1994-06-07 |
+-------------+------------+-----------+------------+
40 rows in set
如前所述,SELECT語句用於執行簡單的計算。 例如,以下查詢使用FLOOR()
,DATEDIFF()
和CURRENT_DATE
函式計算員工的服務年份。要計算服務年份,將DATEDIFF()
函式的結果除以365
。FLOOR()
函式返回小於或等於數值表示式結果的最大整數。YoS
是下面表示式的列別名,用於在返回的結果集中顯示使用者友好的標題。
FLOOR(DATEDIFF(NOW(), hire_date) / 365)
完整的寫法如下所示 -
SELECT
employee_id,
first_name,
last_name,
FLOOR(DATEDIFF(NOW(), hire_date) / 365) AS YoS
FROM
employees;
執行上面查詢語句,得到以下結果 -
+-------------+------------+-----------+-----+
| employee_id | first_name | last_name | YoS |
+-------------+------------+-----------+-----+
| 100 | Steven | Lee | 31 |
| 101 | Neena | Wong | 29 |
| 102 | Lex | Liang | 26 |
| 103 | Alexander | Lee | 29 |
| 104 | Bruce | Wong | 27 |
| 105 | David | Liang | 21 |
| 106 | Valli | Chen | 20 |
| 107 | Diana | Chen | 19 |
| 108 | Nancy | Chen | 24 |
... ...
| 203 | Susan | Zhou | 24 |
| 204 | Hermann | Wu | 24 |
| 205 | Shelley | Wu | 24 |
| 206 | William | Wu | 24 |
+-------------+------------+-----------+-----+
40 rows in set
此查詢適用於MySQL。 如果使用SQL Server,則可以使用以下查詢:
SELECT
employee_id,
first_name,
last_name,
DATEDIFF(year, hire_date,CURRENT_TIMESTAMP)
FROM
employees;
通過上面範例和學習,您應該知道如何使用SQL SELECT
語句從單個表中查詢資料。