Sql简介 专题
专题目录
您的位置:database > Sql简介专题 > SQL Select语句
SQL Select语句
作者:--    发布时间:2019-11-20

在本教程中,您将学习如何使用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表进行演示。

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       | steven.lee@h3.com     | 0532-86011111  | 1987-06-17 |      4 | 24000  | null       |             9 |
|         101 | neena      | wong      | neena.wong@kaops.com      | 0551-4243311   | 1989-09-21 |      5 | 17000  |        100 |             9 |
|         102 | lex        | liang     | lex.liang@kaops.com       | 0571-87622362  | 1993-01-13 |      5 | 17000  |        100 |             9 |
|         103 | alexander  | lee       | alexander.lee@kaops.com   | 020-95105105   | 1990-01-03 |      9 | 9000   |        102 |             6 |
... ...
|         201 | michael    | zhou      | michael.zhou@h3.com   | 010-67237328   | 1996-02-17 |     10 | 13000  |        100 |             2 |
|         202 | pat        | zhou      | pat.zhou@h3.com       | 0755-28114518  | 1997-08-17 |     11 | 6000   |        201 |             2 |
|         203 | susan      | zhou      | susan.zhou@h3.com     | 0755-83587526  | 1994-06-07 |      8 | 6500   |        101 |             4 |
|         204 | hermann    | wu        | hermann.wu@h3.com     | 0513-83512816  | 1994-06-07 |     12 | 10000  |        101 |             7 |
|         205 | shelley    | wu        | shelley.wu@h3.com     | 0898-31686222  | 1994-06-07 |      2 | 12000  |        101 |            11 |
|         206 | william    | wu        | william.wu@h3.com     | 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语句从单个表中查询数据。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册