• MySQL 子查询(多表查询 三)


    概念

    SQL语句中嵌套select语句,称为嵌套查询,又称子查询,它可以在查询过程中使用其他查询的结果。

    基本语法:

    select * from t1 where column1 = ( select column1 from t2 );

    子查询外部的语句可以是insert/ update/ delete/ select的任何一个(实现更精确的操作)。

    基本分类

    根据子查询结果不同--主要分类

    1. 标量子查询(子查询结果为单个值)
    2. 列子查询(子查询结果为一列)
    3. 行子查询(子查询结果为一行)
    4. 表子查询(子查询结果为多行多列)

    根据子查询位置--分类

    1. where之后
    2. from之后
    3. select之后

    标量子查询

    子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。
    常用的操作符:=    <>(不等于符号)   >   >=   <   <=

    基本语法:

    1. select 列名
    2. from 表名
    3. where 列名 操作符 (子查询语句);

    示例:

    1. -- 查询员工表中年龄最大的员工的姓名和年龄。
    2. select name, age
    3. from employees
    4. where age = (select max(age) from employees);

    1. -- 根据 "销售部" 部门id, 查询员工信息
    2. select name 员工姓名,department_id 归属部门
    3. from employees
    4. where department_id = (select id from departments where name = '销售部');

    列子查询

    子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
    常用的操作符:

    操作符作用
    in在指定的集合范围之内,多选一
    not in不在指定的集合范围之内
    any子查询返回列表中,有任意一个满足即可(任一)
    some与any等同,使用some的地方都可以使用any
    all子查询返回列表的所有值都必须满足(所有)

    in、not in与any、some、all的使用区别:

    in操作符本身就表示等值比较,不能加上"="之类的操作符使用

    any操作符本身没有比较,需要加上" < "之类的操作符才能使用

    基本语法:

    1. select 列名
    2. from 表名
    3. where 列名 操作符 (子查询语句);

    示例:

    操作一般分为两步:先列出子查询,然后添加到外部操作内部(这样无论是编写,还是查错都十分方便)

    1. -- 1.先建立子查询:查询两个部门id
    2. select id
    3. from departments
    4. where name = '销售部' or name = '市场部';
    5. -- 2.再将子查询添加到外部操作:根据部门id查询员工
    6. select *
    7. from employees
    8. where department_id in (select id from departments where name = '销售部' or name = '市场部');
    1. -- 1.查询各个部门平均年龄
    2. select department_id 部门, avg(age) 平均年龄
    3. from employees
    4. group by department_id;
    5. -- 2.查询员工表中年龄大于 所有部门 平均年龄的员工的姓名和年龄
    6. select name,age
    7. from employees
    8. where age > all (select avg(age) from employees group by department_id);

    行子查询

    子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
    常用的操作符:= 、<> 、in、not in

    基本语法:

    1. select 列名
    2. from 表名
    3. where (列1, 列2, ...) 操作符 (子查询语句);

    示例

    1. -- 查询员工表中与某个员工年龄和性别完全相同的员工的姓名和邮箱
    2. select name, email
    3. from employees
    4. where (age, gender) = (select age, gender from employees where name = '李白');

    表子查询

    子查询返回的结果是多行多列,这种子查询称为表子查询。
    常用的操作符:in

    基本语法

    1. select 列名
    2. from 表名
    3. where (列1, 列2, ...) 操作符 (子查询语句);

    示例

    1. -- 1.查询两个员工年龄和部门
    2. select age, department_id
    3. from employees
    4. where name = '李白' or name = '张三';
    5. -- 2.查询员工中哪些人年龄和部门与这两个之一相同
    6. select *
    7. from employees
    8. where (age,department_id) in
    9. ( select age, department_id from employees where name = '李白' or name = '张三' );

    上一篇:MySQL 连接查询(多表查询 二)

    下一篇:

  • 相关阅读:
    php 反射
    cubemx工程更换同系列stm32芯片型号
    在矩池云上使用R和RStudio
    什么是云计算?云计算简介
    大数据开发是做什么的?怎样入门?
    Android13冻结进程分析:如何提高设备性能和用户体验
    LeetCode216. Combination Sum III
    2022中国小微企业SaaS白皮书 | 爱分析报告
    [回归指标]R2、PCC(Pearson’s r )
    十四天学会C++之第四天(面向对象编程基础)
  • 原文地址:https://blog.csdn.net/DU9999999/article/details/133308716