• 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 连接查询(多表查询 二)

    下一篇:

  • 相关阅读:
    P1080 [NOIP2012 提高组] 国王游戏
    getchar函数设置为非阻塞
    asp.net学校门户网站系统VS开发sqlserver数据库web结构c#编程计算机网页项目
    【Vue+NodeJS】vue路由及NodeJS环境搭建(Windows版)
    【Android】Hilt比Android好在哪里
    springboot对接rabbitmq并且实现动态创建队列和消费
    在指定目录下建立conda虚拟环境后发现没有环境名(激活失败)的解决办法
    DNSlog快速注入
    Linux系统中如何使用tslib库实现触摸功能
    Maven配置环境变量
  • 原文地址:https://blog.csdn.net/DU9999999/article/details/133308716