SQL SELECT

摘要:在本教程中,您将学习如何使用 SQL SELECT 语句从单个表查询数据。

SQL SELECT 语句简介

SQL SELECT 语句从一个或多个表中选择数据。下面显示的从单个表中选择数据的 SELECT 语句的基本语法。

SELECT 
    select_list
FROM
    table_name;Code language: SQL (Structured Query Language) (sql)

在此语法中

  • 首先,在 SELECT 子句中指定表中用逗号分隔的列列表。
  • 然后,在 FROM 子句中指定表名称。

在评估 SELECT 语句时,数据库系统会首先评估 FROM 子句,然后再评估 SELECT 子句。就好像是从表中选择这些列中的数据。

分号 (;) 并不是查询的一部分。数据库服务器使用它来分隔两个 SQL 语句。

例如,如果您执行两个 SQL SELECT 语句,则需要使用分号 (;) 来分隔它们。如需了解更多信息,请查看 SQL 语法

如果您想查询表中的所有列的数据,可以使用星号 (*) 运算符,而不是指定所有列名

SELECT * FROM table_name;

SQL 不区分大小写。因此,SELECTselect 关键字具有相同的含义。

按照惯例,我们将 SQL 关键字(如 SELECTFROM)使用大写字母,而将标识符(如表和列名称)使用小写字母。此惯例使 SQL 语句更具可读性。

SQL SELECT 语句示例

我们将出于演示目的使用 示例数据库 中的 employees 表。

employees_table

1) SQL SELECT - 从所有列中选择数据的示例

以下示例使用 SQL SELECT 语句从 employees 表中的所有行和列获取数据

SELECT * FROM employees;Code language: SQL (Structured Query Language) (sql)

试试看

下面显示了数据库服务器返回的结果集。就像一个包含带标题的行和列的电子表格

+-------------+-------------+-------------+-----------------------------------+--------------+------------+--------+----------+------------+---------------+
| employee_id | first_name  | last_name   | email                             | phone_number | hire_date  | job_id | salary   | manager_id | department_id |
+-------------+-------------+-------------+-----------------------------------+--------------+------------+--------+----------+------------+---------------+
|         100 | Steven      | King        | [email protected]       | 515.123.4567 | 1987-06-17 |      4 | 24000.00 |       NULL |             9 |
|         101 | Neena       | Kochhar     | [email protected]     | 515.123.4568 | 1989-09-21 |      5 | 17000.00 |        100 |             9 |
|         102 | Lex         | De Haan     | lex.de [email protected]       | 515.123.4569 | 1993-01-13 |      5 | 17000.00 |        100 |             9 |
|         103 | Alexander   | Hunold      | [email protected]  | 590.423.4567 | 1990-01-03 |      9 |  9000.00 |        102 |             6 |
|         104 | Bruce       | Ernst       | [email protected]       | 590.423.4568 | 1991-05-21 |      9 |  6000.00 |        103 |             6 |
|         105 | David       | Austin      | [email protected]      | 590.423.4569 | 1997-06-25 |      9 |  4800.00 |        103 |             6 |
|         106 | Valli       | Pataballa   | [email protected]   | 590.423.4560 | 1998-02-05 |      9 |  4800.00 |        103 |             6 |
|         107 | Diana       | Lorentz     | [email protected]     | 590.423.5567 | 1999-02-07 |      9 |  4200.00 |        103 |             6 |
|         108 | Nancy       | Greenberg   | [email protected]   | 515.124.4569 | 1994-08-17 |      7 | 12000.00 |        101 |            10 |
...Code language: plaintext (plaintext)

SELECT * 被读作选择星号。选择星号仅对临时查询有用。

对于应用程序开发,您应该避免使用选择星号,原因如下。

选择星号返回表中所有列的数据。通常,应用程序不需要所有列的数据,而只需要一列或几列。

如果您使用选择星号,则数据库需要更多时间从磁盘读取数据并将其传输到应用程序。如果表包含许多列和大量数据,则经常会导致性能不佳。

2) SQL SELECT - 从特定列选择数据

要从特定列中选择数据,可以在 SELECT 语句的 SELECT 子句后指定列列表。

例如,以下从 employees 表中所有行的员工 ID、名字、姓氏和雇佣日期选择数据

SELECT 
    employee_id, 
    first_name, 
    last_name, 
    hire_date
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

试试看

现在,结果集仅包括 SELECT 子句中指定的四列

+-------------+-------------+-------------+------------+
| employee_id | first_name  | last_name   | hire_date  |
+-------------+-------------+-------------+------------+
|         100 | Steven      | King        | 1987-06-17 |
|         101 | Neena       | Kochhar     | 1989-09-21 |
|         102 | Lex         | De Haan     | 1993-01-13 |
|         103 | Alexander   | Hunold      | 1990-01-03 |
|         104 | Bruce       | Ernst       | 1991-05-21 |
|         105 | David       | Austin      | 1997-06-25 |
|         106 | Valli       | Pataballa   | 1998-02-05 |
|         107 | Diana       | Lorentz     | 1999-02-07 |
|         108 | Nancy       | Greenberg   | 1994-08-17 |
|         109 | Daniel      | Faviet      | 1994-08-16 |
|         110 | John        | Chen        | 1997-09-28 |
...Code language: plaintext (plaintext)

3) SQL SELECT - 执行简单计算

以下示例使用 SELECT 语句获取名字、姓氏、薪资和新薪资

SELECT 
    first_name, 
    last_name, 
    salary, 
    salary * 1.05
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

表达式 salary * 1.05 将 5% 加到每位员工的薪资上。默认情况下,SQL 使用表达式作为列标题

+-------------+-------------+----------+---------------+
| first_name  | last_name   | salary   | salary * 1.05 |
+-------------+-------------+----------+---------------+
| Steven      | King        | 24000.00 |    25200.0000 |
| Neena       | Kochhar     | 17000.00 |    17850.0000 |
| Lex         | De Haan     | 17000.00 |    17850.0000 |
| Alexander   | Hunold      |  9000.00 |     9450.0000 |
| Bruce       | Ernst       |  6000.00 |     6300.0000 |
| David       | Austin      |  4800.00 |     5040.0000 |
| Valli       | Pataballa   |  4800.00 |     5040.0000 |
| Diana       | Lorentz     |  4200.00 |     4410.0000 |
| Nancy       | Greenberg   | 12000.00 |    12600.0000 |
...Code language: plaintext (plaintext)

要为表达式或列指定别名,请按如下所示指定 AS 关键字后跟列别名

expression AS column_aliasCode language: SQL (Structured Query Language) (sql)

例如,以下SELECT语句使用new_salary作为salary * 1.05表达式的列别名

SELECT 
    first_name, 
    last_name, 
    salary, 
    salary * 1.05 AS new_salary
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

输出

+-------------+-------------+----------+------------+
| first_name  | last_name   | salary   | new_salary |
+-------------+-------------+----------+------------+
| Steven      | King        | 24000.00 | 25200.0000 |
| Neena       | Kochhar     | 17000.00 | 17850.0000 |
| Lex         | De Haan     | 17000.00 | 17850.0000 |
| Alexander   | Hunold      |  9000.00 |  9450.0000 |
| Bruce       | Ernst       |  6000.00 |  6300.0000 |
| David       | Austin      |  4800.00 |  5040.0000 |
| Valli       | Pataballa   |  4800.00 |  5040.0000 |
| Diana       | Lorentz     |  4200.00 |  4410.0000 |
| Nancy       | Greenberg   | 12000.00 | 12600.0000 |

摘要

  • 使用 SQL SELECT 语句从表中选择数据。
  • 要从表中选择数据,请在FROM子句中指定表名,并在SELECT子句中指定一个列列表。
  • SELECT *是表中SELECT所有列的速记。
本教程有帮助吗?