SELECT语句基础语法
SELECT语句是SQL中最基本和重要的查询命令,用于从数据库中检索数据。其最基础的结构由SELECT子句和FROM子句组成。SELECT子句指定要返回的列,而FROM子句指定要查询的表。
最简单的SELECT语句
最基本的SELECT语句格式为:SELECT 列名 FROM 表名。例如,从“员工”表中选择“姓名”列,可以写作:SELECT 姓名 FROM 员工。这将返回“员工”表中所有员工的姓名。
选择所有列
如果需要选择表中的所有列,可以使用星号()作为通配符。例如:SELECT FROM 员工。此语句将返回“员工”表中的所有行和所有列的数据。虽然方便,但在生产环境中建议明确指定列名以提高可读性和性能。
使用DISTINCT去除重复值
当列中包含重复数据,而我们只希望看到唯一不同的值时,可以使用DISTINCT关键字。例如:SELECT DISTINCT 部门 FROM 员工。这将返回“员工”表中所有不重复的部门名称。
过滤和排序数据
仅仅检索数据通常是不够的,我们经常需要根据特定条件过滤结果,并按照某种顺序进行排列。
使用WHERE子句过滤记录
WHERE子句用于提取那些满足指定条件的记录。其基本语法为:SELECT 列名 FROM 表名 WHERE 条件。例如,查询所有在“销售”部门的员工:SELECT FROM 员工 WHERE 部门 = '销售'。条件中可以使用的操作符包括比较运算符(如 =, <, >, <=, >=, <>)和逻辑运算符(如 AND, OR, NOT)。
使用ORDER BY排序结果
ORDER BY子句用于对结果集进行排序,可以按照一个或多个列进行升序(ASC)或降序(DESC)排列,默认是升序。例如,将员工按薪水降序排列:SELECT 姓名, 薪水 FROM 员工 ORDER BY 薪水 DESC。也可以按多列排序,如先按部门升序,再按薪水降序:SELECT 姓名, 部门, 薪水 FROM 员工 ORDER BY 部门 ASC, 薪水 DESC。
结合WHERE和ORDER BY
WHERE子句和ORDER BY子句可以结合使用,其中WHERE必须位于ORDER BY之前。例如,查询“研发”部门中薪水超过10000的员工,并按薪水降序排列:SELECT 姓名, 薪水 FROM 员工 WHERE 部门 = '研发' AND 薪水 > 10000 ORDER BY 薪水 DESC。
高级数据操作与聚合
随着对数据查询需求的深入,我们需要使用更高级的功能来汇总和分析数据。
使用聚合函数
SQL提供了聚合函数来对一组值执行计算并返回单个值。常见的聚合函数包括:COUNT()(计数)、SUM()(求和)、AVG()(平均值)、MAX()(最大值)、MIN()(最小值)。例如,计算公司员工总数:SELECT COUNT() FROM 员工。计算“销售”部门的平均薪水:SELECT AVG(薪水) FROM 员工 WHERE 部门 = '销售'。
使用GROUP BY分组数据
GROUP BY子句将具有相同值的行分组为摘要行,通常与聚合函数一起使用,来计算每个组的统计信息。例如,计算每个部门的员工数量:SELECT 部门, COUNT() AS 员工数 FROM 员工 GROUP BY 部门。此语句会为每个唯一的部门返回一行,显示该部门的员工数量。
使用HAVING子句过滤分组
HAVING子句用于对GROUP BY产生的分组进行过滤,因为WHERE关键字不能与聚合函数一起使用。HAVING的语法与WHERE类似。例如,找出员工数量超过5人的部门:SELECT 部门, COUNT() AS 员工数 FROM 员工 GROUP BY 部门 HAVING COUNT() > 5。
多表连接与子查询
现实世界的数据通常分布在多个表中,因此需要能够从多个表中组合数据的强大工具。
使用JOIN连接表
JOIN操作用于基于两个或多个表之间的相关列来组合行。最常见的类型是INNER JOIN(内连接),它返回两个表中匹配的行。例如,有一个“员工”表和一个“部门”表,可以通过部门ID连接它们以获取员工及其部门名称:SELECT 员工.姓名, 部门.名称 AS 部门名 FROM 员工 INNER JOIN 部门 ON 员工.部门ID = 部门.ID。
其他JOIN类型
除了INNER JOIN,还有LEFT JOIN(左连接,返回左表的所有行和右表的匹配行)、RIGHT JOIN(右连接,返回右表的所有行和左表的匹配行)和FULL JOIN(全连接,返回左右表中所有的行)。LEFT JOIN尤其常用,用于即使右表没有匹配也返回左表的所有行。
使用子查询
子查询(或内部查询)是嵌套在另一个SQL查询(外部查询)中的查询。子查询可以用于WHERE子句或FROM子句中。例如,找出薪水高于平均薪水的员工:SELECT 姓名, 薪水 FROM 员工 WHERE 薪水 > (SELECT AVG(薪水) FROM 员工)。相关子查询是引用了外部查询列的子查询,其执行依赖于外部查询。
数据操作与组合查询
除了查询,SELECT语句还可以与数据操作语句结合,或者将多个查询的结果组合起来。
使用INSERT INTO SELECT
INSERT INTO SELECT语句将一个表的数据复制到另一个表中。这可用于备份表或归档数据。例如,将2023年之前的订单归档到“历史订单”表:INSERT INTO 历史订单 (订单ID, 客户ID, 订单日期) SELECT 订单ID, 客户ID, 订单日期 FROM 订单 WHERE 订单日期 < '2024-01-01'。
使用UNION组合查询
UNION运算符用于合并两个或多个SELECT语句的结果集。每个SELECT语句必须拥有相同数量的列,且列的数据类型也必须相似。UNION会默认去除重复行,而UNION ALL会保留所有行(包括重复行)。例如,从“北京客户”表和“上海客户”表中获取所有不重复的客户姓名:SELECT 姓名 FROM 北京客户 UNION SELECT 姓名 FROM 上海客户。
900

被折叠的 条评论
为什么被折叠?



