SQL教學
SQL RDBMS概念
SQL簡介
SQL NOT NULL約束
SQL DEFAULT約束
SQL唯一約束
SQL主鍵
SQL外鍵
SQL CHECK約束
SQL示例數據庫
SQL索引約束
SQL NULL值
數據庫 - 第一範式(1NF)
數據庫 - 第二範式(2NF)
數據庫 - 第三範式(3NF)
SQL RDBMS數據庫
SQL語法
SQL數據類型
SQL操運算符
SQL算術運算符
SQL比較運算符
SQL邏輯運算符
SQL表達式
SQL創建數據庫(CREATE DATABASE)
SQL丟棄或刪除數據庫(DROP DATABASE)
SQL選擇數據庫(SELECT Database, USE語句)
SQL創建表(CREATE Table)
SQL從現有表創建表
SQL刪除表(DROP或DELETE Table)
SQL INSERT INTO插入查詢
SQL SELECT查詢語句
SQL WHERE子句
SQL AND和OR運算符
SQL UPDATE更新查詢
SQL DELETE刪除查詢
SQL LIKE子句
SQL TOP,LIMIT,ROWNUM子句
SQL ORDER BY排序子句
SQL GROUP BY(分組)
SQL Distinct關鍵字
SQL排序結果
SQL約束
SQL Join聯接
SQL INNER JOIN(內部連接)
SQL LEFT JOIN(左連接)
SQL RIGHT JOIN(右連接)
SQL FULL JOIN(全連接)
SQL自連接
SQL笛卡爾或交叉連接
SQL UNION子句/操作符
SQL INTERSECT子句
SQL EXCEPT子句
SQL別名語法
SQL索引
SQL ALTER TABLE(修改表)
SQL TRUNCATE TABLE(截斷表)
SQL View(視圖)
SQL Having子句
SQL事務
SQL通配符運算符
SQL日期函數
SQL ADDDATE()函數
SQL ADDTIME()函數
SQL CONVERT_TZ()函數
SQL CURDATE()函數
SQL CURRENT_DATE()函數
SQL CURTIME()函數
SQL CURRENT_TIME()函數
SQL CURRENT_TIMESTAMP()方法
SQL DATE(expr)函數
SQL DATEDIFF()方法
SQL DATE_ADD()和DATE_SUB()方法
SQL DATE_FORMAT()函數
SQL DATE_SUB()方法
SQL DAY()函數
SQL DAYNAME()函數
SQL DAYOFMONTH()函數
SQL DAYOFWEEK()函數
SQL DAYOFYEAR()函數
SQL EXTRACT()函數
SQL FROM_DAYS()函數
SQL FROM_UNIXTIME()函數
SQL HOUR()方法
SQL LAST_DAY()函數
SQL LOCALTIME和LOCALTIME()函數
SQL LOCALTIMESTAMP和LOCALTIMESTAMP()函數
SQL MAKEDATE()函數
SQL MAKETIME()函數
SQL MICROSECOND()函數
SQL MINUTE()函數
SQL MONTH()函數
SQL MONTHNAME()函數
SQL NOW()函數
SQL PERIOD_ADD()函數
SQL PERIOD_DIFF()函數
SQL QUARTER()函數
SQL SECOND()函數
SQL SEC_TO_TIME()函數
SQL STR_TO_DATE()函數
SQL SUBDATE()函數
SQL SUBTIME()函數
SQL SYSDATE()函數
SQL TIME()函數
SQL TIMEDIFF()函數
SQL TIMESTAMP()函數
SQL TIMESTAMPADD()函數
SQL TIMESTAMPDIFF()函數
SQL TIME_FORMAT()函數
SQL TIME_TO_SEC()函數
SQL TO_DAYS()函數
SQL UNIX_TIMESTAMP()函數
SQL UTC_DATE()函數
SQL UTC_TIME()函數
SQL UTC_TIMESTAMP()函數
SQL WEEK()函數
SQL WEEKDAY()函數
SQL WEEKOFYEAR()函數
SQL YEAR()函數
SQL YEARWEEK()函數
SQL臨時表
SQL克隆表
SQL子查詢
SQL使用序列(自動遞增)
SQL DISTINCT重複處理
SQL注入
SQL實用函數
SQL MAX()函數
SQL MIN()函數
SQL AVG()函數
SQL SUM()函數
SQL SQRT()函數
SQL RAND()函數
SQL CONCAT()函數
SQL數值函數
SQL ABS()函數
SQL ACOS()函數
SQL ASIN(X)函數
SQL ATAN(X)函數
SQL ATAN2()函數
SQL BIT_AND()函數
SQL BIT_COUNT()函數
SQL BIT_OR()函數
SQL CEIL()函數
SQL CONV()函數
SQL COS()函數
SQL COT()函數
SQL DEGREES()函數
SQL EXP(X)函數
SQL FLOOR(X)函數
SQL FORMAT(X,D)函數
SQL GREATEST()函數
SQL INTERVAL()函數
SQL LEAST()函數
SQL LOG()函數
SQL LOG10(X)函數
SQL MOD()函數
SQL OCT(N)函數
SQL PI()函數
SQL POW()函數
SQL RADIANS()函數
SQL ROUND()函數
SQL SIGN(X)函數
SQL SIN(X)函數
SQL SQRT(X)函數
SQL STD()函數
SQL TAN(X)函數
SQL TRUNCATE()函數
SQL字符串函數
SQL ASCII(str)函數
SQL BIN(N)函數
SQL BIT_LENGTH()函數
SQL CHAR()函數
SQL CHAR_LENGTH()函數
SQL CHARACTER_LENGTH()函數
SQL字符串CONCAT()函數
SQL CONCAT_WS()函數
SQL CONV(N,from_base,to_base)函數
SQL ELT()函數
SQL EXPORT_SET()函數
SQL FIELD()函數
SQL FIND_IN_SET()函數
SQL FORMAT()函數
SQL HEX()函數
SQL INSERT()函數
SQL INSTR()函數
SQL LCASE()函數
SQL LEFT()函數
SQL LENGTH()函數
SQL LOAD_FILE()函數
SQL LOCATE()函數
SQL LOWER()函數
SQL LPAD()函數
SQL LTRIM()函數
SQL MAKE_SET()函數
SQL MID()函數
SQL OCT()函數
SQL OCTET_LENGTH()函數
SQL ORD()函數
SQL POSITION()函數
SQL QUOTE()函數
SQL REGEXP模式
SQL REPEAT()函數
SQL REPLACE()函數
SQL REVERSE()函數
SQL RIGHT()函數
SQL RPAD()函數
SQL SOUNDEX()函數
SQL SPACE()函數
SQL STRCMP()函數
SQL SUBSTRING()函數
SQL SUBSTRING_INDEX()函數
SQL TRIM()函數
SQL UCASE()函數
SQL UNHEX()函數
SQL UPPER()函數

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

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語句從單個表中查詢數據。