• Mysql查询操作 联合查询 子查询


    MySQL联合查询是指在一条SQL语句中使用UNION关键字将多个查询结果合并返回的操作。UNION查询能够将多条SELECT语句的结果合并成一个结果集,每个查询结果集的列数和列类型必须一致。

    语法格式如下:

    1. SELECT1, 列2, 列3 FROM1 WHERE 条件1
    2. UNION
    3. SELECT1, 列2, 列3 FROM2 WHERE 条件2

    联合查询将返回两个或多个查询的结果集,并且会自动去除重复的记录。

    UNION ALL关键字与UNION的作用类似,但不会自动去重,会返回所有的记录。

    MySQL子查询是指在一个查询内部嵌套了另一个完整的查询语句。子查询可以嵌套在SELECT、FROM、WHERE等子句中,用于获取一组数据用于父查询的条件或结果集。

           子查询是从内到外执行的,即先执行子查询,将其结果作为外层查询的一部分。子查询可以返回单个值、一行或多行数据,具体取决于子查询的语句和位置。

    子查询的语法格式如下:

    SELECT1, 列2, 列3 FROM1 WHERE 列A IN (SELECT 列A FROM2 WHERE 条件)

      子查询`(SELECT 列A FROM 表2 WHERE 条件)`嵌套在了主查询中的WHERE子句内部,并且主查询的条件使用了子查询的结果。子查询可以用于各种场景,例如作为过滤条件、计算字段、连接其他表等。使用子查询可以使查询语句更加灵活和复杂,能够处理更多的业务需求。

    需要注意的是,子查询的性能可能不如联合查询或使用临时表,因此在使用子查询时要注意性能优化的问题。

    MySQL的子查询可以分为以下几种类型:

    1. 标量子查询(Scalar Subquery):返回的结果集只有一行一列,通常用于作为父查询的条件或计算字段的取值。例如,获取某个表的最大值或最小值作为查询条件。子查询位于主查询的条件部分,并用括号括起来。子查询返回的结果集只能是一行一列,且通常用于比较运算符(如=、>, <等)的右侧。

    1. SELECT column_name
    2. FROM table_name
    3. WHERE column_name = (SELECT column_name FROM table_name WHERE condition);
    4. select * from emp where dept_id=(select id from dept where name='销售部');
    1. SELECT1, 列2, ...
    2. FROM1
    3. WHERE 列N 表达式 (SELECT 列M FROM2 WHERE 表达式);
    4. /*
    5. 首先查询 某某 的入职时间
    6. 查询指定入职日期之后的入职的员工的信息
    7. */
    8. select entrydate from emp where name='姓名';
    9. select * from emp where entrydate > '2006-12-05';
    10. select * from emp
    11. where entrydate > (select entrydate from emp where name='姓名');

    2. 列子查询(Row Subquery):返回的结果集有多行一列,通常用于作为父查询的条件使用IN、ANY、SOME等条件运算符。例如,查找在一个表的某个字段中存在于另一个表的某个字段中的所有行。

    1. /*查询比某一个部所有人工资都搞的员工信息*/
    2. /*查询所有财务部人员运功工资*/
    3. select id from dept where name = '具体的部门';
    4. select salary from emp where dept_id=查询出来的部门ID;
    5. select salary from emp where dept_id=(select id from dept where name = '具体的部门');
    6. /*比某一个部所有员工工资都高的员工信息 all都需要满足*/
    7. select * from emp
    8. where salary > all (select salary from emp where dept_id=(select id from dept where name = '具体的部门'));

    3. 行子查询(Column Subquery):返回的结果集有一行多列,通常用于查询某个表中的某个字段在另一个表中的多个字段的值。

    1. /*
    2. 行子查询
    3. 1.查询与某某员工的薪资及直属领导相同的员工信息
    4. */
    5. /*a 查询张无忌员工的薪资及其直属领导*/
    6. select salary,managerid from emp where name ='某员工';
    7. /*b 查询与某某员工 的薪资及其直属领导相同的员工信息*/
    8. select * from emp
    9. where (salary,managerid)=(62500,1);
    10. /*
    11. 内部子查询返回的一行多列 和前面的salary,managerid 匹配
    12. */
    13. select * from emp
    14. where (salary,managerid)=(select salary,managerid from emp where name ='某员工');

    4. 表子查询(Table Subquery):返回的结果集有多行多列,通常用于作为父查询的表来源,可以通过JOIN操作与其他表进行关联查询。

    1. /*表子查询*/
    2. /*查询与 某某员工1 某某员工2职位工资相同的员工*/
    3. /*首先查询 某某员工1 某某员工2的职位和薪资*/
    4. select job,salary from emp where name=' 某某员工1'or name=' 某某员工2';
    5. /*查询与 某某员工1 某某员工2 的职位和薪资相同的员工信息*/
    6. select * from emp where (job,salary)
    7. in (select job,salary from emp where name='某某员工1'or name=' 某某员工2');

  • 相关阅读:
    MyBatis-Plus中Service用法
    vue项目中的 env文件从何而来?什么是 process.env
    JavaScript 数据类型与运算符(上)
    Sentinel —实时监控
    当当网按关键字搜索dangdang商品 API
    Docker 数据管理
    vue+css动画 实现文字的上下轮播切换
    Office文件在线预览大全-Word文档在线预览的实现方法-OFD文档在线预览-WPS文件在线预览
    网址打包微信小程序源码 wap转微信小程序 网站转小程序源码 网址转小程序开发
    双非一本后端进字节跳动了,纯分享
  • 原文地址:https://blog.csdn.net/qq_32207665/article/details/139661698