SQL Select語句

在本教程中,您將學習如何使用SQL SELECT語句從單個表中查詢數據。

1. 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不區分大小寫。所以數據庫系統處理SELECTselect都是相同操作。 但是,爲了使SQL語句更具可讀性,我們將使用SQL關鍵字的大寫字母(如SELECTFROM)和小寫字母(如表名和列名)等標識符。

除了SELECTFROM子句之外,SELECT語句還可以包含許多其他子句,例如 -

  • WHERE - 用於根據指定條件過濾數據
  • ORDER BY - 用於對結果集進行排序
  • LIMIT - 用於限制返回的行
  • JOIN - 用於查詢來自多個相關表的數據
  • GROUP BY - 用於根據一列或多列對數據進行分組
  • HAVING - 用於過濾分組

您將在後續教程中瞭解這些子句的使用。

2. SQL SELECT語句示例

我們將使用示例數據庫中的employees表進行演示。

SQL Select語句

3. SQL SELECT - 查詢所有列示例

要查詢表中的所有列,請使用星號(*)而不是指定每列。 例如,以下語句從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客戶端應用程序以交互方式查詢數據。 但是,如果在應用程序的嵌入語句中使用星號(*)運算符,則可能存在一些潛在問題。

首先,因爲表的結構將發展以適應新的業務需求,例如,可以添加新列並刪除現有列。 如果使用星號(*)運算符並且未更改應用程序代碼以使其與新表結構一起使用,則應用程序可能無法正常運行。

星號(*)運算符的另一個問題是它可能會增加數據庫服務器和應用程序之間傳輸的不必要數據,因爲應用程序可能只需要表的部分數據。

4. SQL SELECT - 查詢特定列

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

5. SQL SELECT - 執行簡單的計算

如前所述,SELECT語句用於執行簡單的計算。 例如,以下查詢使用FLOOR()DATEDIFF()CURRENT_DATE函數計算員工的服務年份。要計算服務年份,將DATEDIFF()函數的結果除以365FLOOR()函數返回小於或等於數值表達式結果的最大整數。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語句從單個表中查詢數據。