本教程将介绍SQL Server SELECT语句的基础知识,重点介绍如何针对单个表进行查询。
SQL Server SELECT语句简介
数据库表是存储数据库中所有数据的对象。 在表中,数据按行和列格式逻辑组织,类似于电子表格(Excel)。
在表中,每行代表一个唯一记录,每列代表记录中的一个字段。 例如,customers
表包含客户数据,如客户标识号,名字,姓氏,电话,电子邮件和地址信息,如下所示:
SQL Server使用模式对表和其他数据库对象进行逻辑分组。 在示例数据库(bb_stores
)中,有两个模式:sales
和production
。 sales
模式将所有与销售相关的表分组,而production
模式将所有与生产相关的表分组。
要从表中查询数据,请使用SELECT
语句。 以下是SELECT
语句的最基本形式:
SELECT
select_list
FROM
schema_name.table_name;
在上面语法中,
- 首先,
select_list
指定要在SELECT
子句中查询数据的逗号分隔列的列表。 - 其次,
schema_name.table_name
是在FROM
子句中指定源表及其模式名称。
处理SELECT语句时,SQL Server首先处理FROM
子句,然后处理SELECT
子句,即使SELECT子句首先出现在查询中也是一样。
SQL Server SELECT语句示例
下面将使用示例数据库中的customers
表进行演示。
1. SQL Server SELECT检索表部分列示例
以下查询查找所有客户的名字和姓氏:
SELECT
first_name,
last_name
FROM
sales.customers;
执行上面查询语句,得到以下结果 -
查询的结果称为结果集。
以下语句返回所有客户的名字,姓氏和电子邮件:
SELECT
first_name,
last_name,
email
FROM
sales.customers;
执行上面查询语句,得到以下结果:
2. SQL Server SELECT从表中检索所有列的示例
要从表的所有列获取数据,可以指定选择列表中的所有列。 还可以使用SELECT *
作为速记来减少一些书写:
SELECT
*
FROM
sales.customers;
执行上面查询语句,得到以下结果:
SELECT *
对于检查不熟悉表的列和数据非常有用,它对即席查询也很有帮助。
但是,由于以下主要原因,不应将SELECT *
用于实际生产代码:
- 首先,
SELECT *
经常检索比应用程序需要运行的数据更多的数据。它会导致不必要的数据从SQL Server传输到客户端应用程序,从而花费更多时间使数据通过网络传输并减慢应用程序的速度。 - 其次,如果为表添加了一个或多个新列,则
SELECT *
只检索包含新添加的列的所有列,这些列不打算在应用程序中使用,这可能会导致应用程序崩溃。
3. SQL Server SELECT - 对结果集进行排序
要根据一个或多个条件筛选行,请使用WHERE
子句。在此示例中,查询返回位于CA
的客户。如以下示例所示:
SELECT
*
FROM
sales.customers
WHERE
state = 'CA';
执行上面查询语句,得到以下结果:
当WHERE子句可用时,SQL Server按以下顺序处理查询的子句:FROM
,WHERE
和SELECT
。要基于一个或多个列对结果集进行排序,请使用ORDER BY
子句,如以下示例所示:
SELECT
*
FROM
sales.customers
WHERE
state = 'CA'
ORDER BY
first_name;
执行上面查询语句,得到以下结果:
在此示例中,ORDER BY
子句按名字按升序对客户进行排序。在这种情况下,SQL Server按以下顺序处理查询的子句:FROM
,WHERE
,SELECT
和ORDER BY
。
4. SQL Server SELECT - 将行分组为组示例
要将行分组,请使用GROUP BY
子句。 例如,以下语句将返回位于CA
的所有客户以及每个城市的客户数量。参考以下查询语句:
SELECT
city,
COUNT (*)
FROM
sales.customers
WHERE
state = 'CA'
GROUP BY
city
ORDER BY
city;
执行上面查询语句,得到以下结果:
在这种情况下,SQL Server按以下顺序处理子句:FROM
,WHERE
,GROUP BY
,SELECT
和ORDER BY
。
5. SQL Server SELECT - 过滤分组示例
要根据一个或多个条件筛选组,请使用HAVING
子句。以下示例返回CA
州拥有10个以上客户的城市:
SELECT
city,
COUNT (*)
FROM
sales.customers
WHERE
state = 'CA'
GROUP BY
city
HAVING
COUNT (*) > 10
ORDER BY
city;
执行上面查询语句,得到以下结果:
请注意,WHERE
子句在HAVING
子句筛选器分组时筛选行。
在本教程中,学习了如何使用SQL Server SELECT
语句从单个表中查询数据。