• MYSQL08_子查询的概述、单行、多行、相关子查询


    ①. 子查询的概述

    • ①. 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入

    • ②. 子查询(内查询)在主查询(外查询)之前一次执行完成

    • ③. 子查询的结果被主查询(外查询)使用

    • ④. 子查询注意事项:

    1. 子查询要包含在括号内
    2. 将子查询放在比较条件的右侧
    3. 单行操作符对应单行子查询,多行操作符对应多行子查询
    # 谁的工资比Abel高
    #方式一: 
    SELECT salary FROM employees WHERE last_name = 'Abel'; 
    SELECT last_name,salary FROM employees WHERE salary > 11000;
    #方式二:自连接 
    SELECT e2.last_name,e2.salary FROM employees e1,employees e2 
    WHERE 
    e1.last_name = 'Abel' AND e1.`salary` < e2.`salary`
    #方式三:子查询 
    SELECT last_name,salary FROM employees 
    WHERE 
    salary > ( SELECT salary FROM employees WHERE last_name = 'Abel' );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • ⑤. 我们按内查询的结果返回一条还是多条记录,将子查询分为单行子查询 、 多行子查询
      在这里插入图片描述
    • ⑥. 我们按内查询是否被执行多次,将子查询划分为 相关(或关联)子查询和不相关(或非关联)子查询
    1. 子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行,那么这样的子查询叫做不相关子查询
    2. 如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部,这种嵌套的执行方式就称为相关子查询

    ②. 子查询 - 单行子查询

    • ①. 单行比较操作符
      在这里插入图片描述

    • ②. 子查询题目 - sql展示

    # (1).返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id和工资
    SELECT
    	last_name,
    	job_id,
    	salary 
    FROM
    	employees 
    WHERE
    	job_id = ( SELECT job_id FROM employees WHERE employee_id = 141 ) 
    	AND salary > ( SELECT salary FROM employees WHERE employee_id = 143 );
    # (2).返回公司工资最少的员工的last_name,job_id和salary
    SELECT
    	last_name,
    	job_id,
    	salary 
    FROM
    	employees 
    WHERE
    	salary = ( SELECT MIN( salary ) FROM employees );
    # (3).查询与141号或174号员工的manager_id和department_id相同的其他员工的employee_id, manager_id,department_id
    SELECT
    	employee_id,
    	manager_id,
    	department_id 
    FROM
    	employees 
    WHERE
    	manager_id IN ( SELECT manager_id FROM employees WHERE employee_id IN ( 174, 141 ) ) 
    	AND department_id IN ( SELECT department_id FROM employees WHERE employee_id IN ( 174, 141 ) ) 
    	AND employee_id NOT IN ( 174, 141 )
    # (4).查询最低工资大于50号部门最低工资的部门id和其最低工资
    SELECT
    	department_id,
    	MIN( salary ) 
    FROM
    	employees 
    GROUP BY
    	department_id 
    HAVING
    	MIN( salary ) > ( SELECT MIN( salary ) FROM employees WHERE department_id = 50 );
    # (5).显式员工的employee_id,last_name和location。其中,若员工department_id与location_id为1800 的department_id相同,则location为’Canada’,其余则为’USA 
    SELECT
    	employee_id,
    	last_name,
    	( CASE department_id WHEN ( SELECT department_id FROM departments WHERE location_id = 1800 ) THEN 'Canada' ELSE 'USA' END ) location 
    FROM
    	employees;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
  • 相关阅读:
    uni-app的生命周期
    【小程序源码】2022虎年背景全新UI头像框制作带安全检测
    Python 缓存库
    Alluxio完成C轮5000万美元融资,新设中国区总部力拓国内市场
    王庆友-架构的本质:如何打造一个有序的系统?
    聚水潭对接金蝶云星空数据方案
    「Redis数据结构」压缩列表(ZipList)
    RIPEMD算法:多功能哈希算法的瑰宝
    X11 Xlib截屏问题及深入分析一 —— 源码位置
    软件开发平台流辰信息如何为客户分忧解难?
  • 原文地址:https://blog.csdn.net/TZ845195485/article/details/125829387