LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

快速学会SQL中的子查询用法

admin
2024年3月28日 22:53 本文热度 15

子查询是SQL查询中一个强大的工具,它允许我们将一个查询语句嵌套在另一个查询语句中,从而执行更为复杂的数据检索操作。在子查询的结构中,通常将外层的查询称为主查询,而被嵌套在内的查询则称为子查询。子查询的结果往往作为主查询的条件来使用,使用时需要用括号将其括起来。


子查询不仅可以在WHERE子句中使用,以过滤主查询的结果,还可以灵活地应用于SELECT、FROM、HAVING等子句中,从而提供更为细致和灵活的数据处理功能。这使得子查询在处理复杂数据查询需求时显得尤为有用,尤其是在面对SQL自身语法限制时,子查询往往能够成为解决问题的关键所在。


测试数据如下:



 01. 

WHERE子句中使用子查询


在SQL查询中,子查询是嵌套于其他查询中的独立查询。执行时,系统会先计算子查询并返回结果,通常与WHERE子句结合使用,作为筛选条件,以实现复杂而精准的数据检索。


倘若,我们想要查找工资比文静高的所有员工,首选我们需要找到文静的工资

SELECT salary FROM employees WHERE name = '文静'

查询结果如下:

然后在主查询中以这个值作为where的筛选条件,得到终数据。

SELECT *   
FROM employees   
WHERE salary > (SELECT salary FROM employees WHERE name = '文静');

在这个语句中,子查询 (SELECT salary FROM employees WHERE name = '文静') 首先被执行,返回“文静”的工资。然后,这个工资值被用作外部查询 WHERE salary > ... 的条件,以找出所有工资高于这个值的员工。


查询结果如下:



 02. 

SELECT子句中使用子查询


子查询还可以与SELECT语句结合使用,将结果作为列展示。此外,当使用聚合函数(如SUM、COUNT、AVG等)时,由于它们会将多条记录聚合为一条,可能会导致其他数据细节的丢失。这时,通过结合子查询,我们可以在SELECT中同时展示聚合数据和其他细节,丰富结果集内容。


举个栗子:我们需要查询每个员工的姓名、工资以及所有员工的平均工资。我们尝试使用以下SQL语句。

SELECT name,salary,Max(salary) FROM employees

执行这条SQL语句会报错,因为不能在同一SELECT语句中同时选择聚合列(MAX(salary))和非聚合列(name和salary),除非这些非聚合列都包含在GROUP BY子句中,但是这样写,会将多个行的结果组合成单个输出行,这时我们可以使用子查询来实现。

SELECT  
 e.name,  
 e.salary,  
 (SELECT AVG(salary) FROM employees) AS avg_salary  
FROM  
 employees e;

在上面的语句中,子查询 (SELECT AVG(salary) FROM employees) 计算了 employees 表中所有员工的平均工资,然后这个值作为 avg_salary 被添加到结果集的每一行中。外部查询则选择了每个员工的 name 和 salary,并且每行都附带有这个计算出的 avg_salary 值。查询结果如下:



 03. 

FROM子句中使用子查询


在SQL中,当子查询与FROM子句结合使用时,子查询的结果集被视为一个临时的、虚拟的“表”。这个虚拟表可以像其他任何表一样在SELECT语句中进行查询。需要注意,在FROM后面的子查询,必须要添加别名,否则会报错。


假设我们想找出每个部门的平均工资,并列出高于该平均工资的员工。我们可以使用子查询在 FROM 子句中来完成。

SELECT e1.*  
FROM employees e1  
INNER JOIN (  
    SELECT department, MAX(salary) AS max_salary  
    FROM employees  
    GROUP BY department  
) e2 ON e1.department = e2.department AND e1.salary = e2.max_salary;

子查询通过GROUP BY子句按部门分组,并使用MAX()函数找到每个部门的最高薪水。然后,外部查询使用INNER JOIN将员工表与子查询的结果连接起来,以获取与每个部门最高薪水匹配的员工记录。


查询结果如下:

关于SQL 中的子查询用法,本次分享就到这了。


该文章在 2024/3/28 22:53:35 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved