SELECT 语句
SELECT 语句从数据库中检索数据并以查询结果的形式将它们返回给我们。
SELECT 语法
SELECT [ ALL | DISTINCT ] { 字段1,字段2,……} –查询字段
[ INTO 临时表 ]
FROM { 表名 | 视图 | 子查询 }
[ WHERE 查询条件 ] –选择记录
[ GROUP BY 字段1,字段2,…… ] –分组查询
[ HAVING 分组查询条件 ] –分组搜索条件
[ ORDER BY 字段1,字段2,…… ] –排序查询结果
{} 是必须的,如查询字段,表名 | 视图 | 子查询
| 是可选的,可以用 ALL 或 DISTINCT,或都不用
[] 是可选的参数,如 WHERE 子句
SELECT 代码实例
--显示所有员工的名字和姓氏
SELECT first_name, last_name
FROM employee;
SQL 不区分大小写,但为了坚持一致的编码标准并使代码更具可读性,将 SQL 关键字(如代码中的 SELECT 和 FROM 大写,其他非关键字(如代码中的 first_name 和 last_name)小写。养成一个很好的编码标准受益匪浅,特别是在复杂的查询语句中。
--使用公式 COUNT(*)
SELECT COUNT(*) ...;
--使用表达式 first_name || ' ' || last_name 和 salary * 0.3,公式 LENGTH(first_name)
SELECT first_name || ' ' || last_name, salary * 0.3, LENGTH(first_name) ... ;
--使用子查询 SELECT AVG(age) FROM employee),查询多字段 first_name 和 last_name
SELECT first_name, last_name, (SELECT AVG(age) FROM employee) ...
SELECT 关键字
- SELECT 和 FROM:除非是查询静态值(如 SELECT 2 等),否则一个 SELECT 语句必需的两个关键字是 SELECT 和 FROM,其中 FROM 指定数据源,可以是表、视图或子查询
--查询静态值
SELECT 2;
SELECT 'SQL';
--表
SELECT first_name, last_name
FROM employee;
--视图
SELECT *
FROM v_employee;
--子查询
SELECT first_name, last_name
FROM (
SELECT *
FROM employee
WHERE last_name = 'Kent'
) e1;
- DISTINCT:如果查询的选择列表中包含一个表的主键,那么每个查询结果记录将是唯一的,否则可能出现重复的记录;当出现重复的记录时,使用关键字 DISTINCT 来消除重复的查询记录
--显示所有员工的名字和姓氏
SELECT first_name, last_name
FROM employee;
| first_name | last_name |
|Zhou|Kent|
| Lin| Cherry |
| Zhou| Kent|
| Pan| Tim|
--显示所有员工的名字和姓氏,重复的名词和姓氏( Zhou Kent)会被消除
SELECT DISTINCT first_name, last_name
FROM employee;
| first_name | last_name |
|Zhou|Kent|
| Lin| Cherry |
| Pan| Tim|
- WHERE:在选择查询结果的某些记录时使用 WHERE 子句
--查询员工Id大于3的所有员工的名字和姓氏
SELECT first_name, last_name
FROM employee
WHERE employee_id > 3
--查询员工Id大于3,并且姓氏为 Zhou 的所有员工的名字和姓氏
SELECT first_name, last_name
FROM employee
WHERE employee_id > 3 AND first_name = 'Zhou'
- INTO:INTO 子句是 SQL Server 中的一个可选子句,允许您使用查询结果填充表。这在数据库或应用程序的开发过程中非常有用。
--把以上查询结果存到临时表 temp_employee 中,以便后面使用。
SELECT first_name, last_name
INTO #temp_employee
FROM employee
WHERE employee_id > 3;
--从临时表#temp_employee 中检索数据
SELECT *
FROM #temp_employee
- GROUP BY:GROUP BY 子句用于使用聚合函数(如前面的 COUNT 或 AVG 等),并指定要让这些聚合函数计算的值
--统计所有员工人数
SELECT COUNT(*)
FROM employee;
--按部门汇总,统计每个部门的员工人数
SELECT dept_id, COUNT(*)
FROM employee
GROUP BY dept_id;
- HAVING:像可以使用 WHERE 子句来选择和排除参与查询的各条记录一样,也可以使用 HAVING 子句来选择和排除记录组,它的格式与 WHERE 类似
--按部门汇总,统计每个部门的员工人数,并且每个部门的员工数至少两个
SELECT dept_id, COUNT(*)
FROM employee
GROUP BY dept_id
HAVING COUNT(*) > 2;
- ORDER BY:指定查询结构的显示顺序
--按姓氏升序排序
SELECT first_name, last_name
FROM employee
ORDER BY first_name ASC;
SELECT 语句的执行顺序
SELECT 语句没有按照其编写的顺序进行处理。数据库按特定顺序处理子句。了解 SELECT 语句的执行顺序有助于编写高效的查询语句
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- HAVING
- SELECT
- DISTINCT
- ORDER BY
SELECT 使用总结
SELECT 语句是一种常见的 SQL 语句,它可以像从表中选择几列一样简单,也可以包括联接、函数和分组等复杂的查询方式,甚至还可以使用子查询和其他更高级的功能。