首页 > 其他分享 >相关子查询

相关子查询

时间:2022-08-14 12:12:29浏览次数:41  
标签:employees 查询 employee department 相关 id SELECT

相关子查询:

  • 相关子查询执行流程:

                           如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,

                           并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次,

                           这样的子查询就称之为 关联子查询 。相关子查询按照一行接一行的顺序执行,

                           主查询的每一行都执行一次子查询。

 

 

# 回顾:查询员工中工资大于公司平均工资的员工的last_name,salary和其department_id
SELECT last_name,salary,department_id
FROM employees
WHERE salary>(
               SELECT AVG(salary)
       FROM employees
            );

#查询员工中工资大于本部门平均工资的员工的last_name,salary和其department_id
#方式1:
SELECT last_name,salary,department_id
FROM employees e1
WHERE salary>(
               SELECT AVG(salary)
FROM employees
WHERE department_id=e1.`department_id`
            );

#查询员工的id,salary,按照department_name 排序
SELECT employee_id,salary
FROM employees e
ORDER BY (
          SELECT department_name
  FROM departments d
  WHERE e.`department_id`= d.`department_id`
);
#结论:在SELECT中,除了GROUP BY 和 LIMIT 之外,其它位置都可以声明子查询!

 

#若employees表中employee_id与job_history表中employee_id相同的数目不小于2,输出这些相同
#id的员工的employee_id,last_name和其job_id
SELECT employee_id,last_name,job_id
FROM employees e
WHERE 2<=(
           SELECT COUNT(*)
FROM job_history j
WHERE e.`employee_id`= j.`employee_id`
);

 

  • EXISTS 与 NOT EXISTS关键字:

           关联子查询通常也会和 EXISTS操作符一起来使用,用来检查在子查询中是否存在满足条件的行。

            如果在子查询中不存在满足条件的行:

                                                   条件返回 FALSE

                                                   继续在子查询中查找

                                                   如果在子查询中存在满足条件的行:

                                                   不在子查询中继续查找

                                                   条件返回 TRUE

          NOT EXISTS关键字表示如果不存在某种条件,则返回TRUE,否则返回FALSE。

#EXISTS 与 NOT EXISTS关键字

#查询公司管理者的employee_id,last_name,job_id,department_id信息
#方式1:自连接
SELECT DISTINCT mgr.employee_id,mgr.last_name,mgr.job_id,mgr.department_id
FROM employees emp JOIN employees mgr
ON emp.manager_id=mgr.employee_id;
#方式2:子查询
SELECT employee_id,last_name,job_id,department_id
FROM employees
WHERE employee_id IN(
                   SELECT DISTINCT manager_id
                    FROM employees
);
#方式3:使用EXISTS
SELECT employee_id,last_name,job_id,department_id
FROM employees e1
WHERE EXISTS (
             SELECT *
FROM employees e2
WHERE e1.`employee_id`=e2.`manager_id`
)
 
#查询departments表中,不存在于employees表中的部门的department_id和department_name
#方式1:
SELECT d.department_id,d.department_name
FROM departments d LEFT JOIN employees e
ON e.`department_id`= d.`department_id`
WHERE e.`department_id` IS NULL;

#方式2:
SELECT department_id,department_name
FROM departments d
WHERE NOT EXISTS(
           SELECT *
FROM employees e
           WHERE d.department_id=e.department_id

)

 

标签:employees,查询,employee,department,相关,id,SELECT
From: https://www.cnblogs.com/zjwcoblogs/p/16585175.html

相关文章

  • Yii2多表关联查询(hasOne、hasMany、join、joinwith)
    表结构现在有客户表、订单表、图书表、作者表,客户表Customer(idcustomer_name)订单表Order(idorder_namecustomer_idbook_id)图书表(idbook_nameauthor_id)作者表......
  • JVM总结——类文件相关
    类文件内容魔数主次版本号常量池访问标志类索引、父类索引与接口索引集合字段表集合方法表集合属性表集合什么是属性表集合字段表和方法表分别用于描述一个字......
  • 【SQL】查询存在于一个表而不存在于另外一个表的数据
    需求描述:A、B两表,找出ID字段中,存在A表,但是不存在B表的数据。1、方法一(推荐):逻辑相对复杂,但是速度最快~执行时间:0.570秒~select*fromBwhere(selectcount(1)asnu......
  • eslint相关问题
    env中的es版本和parserOptions.ecmaVersion的区别?"env":{"es2021":true},"parserOptions":{"ecmaVersion":es2021}parserOptions.ecmaVersion指示您......
  • 单行子查询
     单行子查询:#单行子查询:#操作符:=!=> >= < <=#题目:查询工资大于149号员工工资的员工信息SELECTsalaryFROMemployeesWHEREsalary>(       S......
  • Arthas基础和JVM相关命令-jad/watch/jvm/sysprop/sysenv/vmoption/getstatic/ognl
    1.jad:反编译指定已加载类的源码jadcom.lyb.web.mySpringBoot.thread.ThreadAppendData 2.watch:函数执行数据观测watchorg.apache.lucene.util.RamUsageEstim......
  • 子查询
     子查询:子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL4.1开始引入。SQL中子查询的使用大大增强了SELECT查询的能力,因为很多时候查询......
  • C语言指针的使用运算与数组相关编程实例
    指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。本......
  • 常见docker命令(二)-容器生命周期相关
    dockerrun命令主要参数-d后台运行,返回容器id-i以交互模式运行,通常与-t连用-t为容器重新分配一个伪输入终端,通常与-i连用-P(大写)随机端口映射,容器内部端口随机映射到......
  • 常见docker命令(三)-容器操作相关
    dockerexec-在容器中执行命令以交互模式进入mynginx容器的bash控制台dockerexec-itmynginxbash以交互模式在mynginx容器中执行/test.shdockerexec-itmynginx/bin/......