当前位置: 首页 > news >正文

MySQL之多表查询—表子查询

一、引言

上一篇博客学习了行子查询。(看弹幕:同一张表用or,不同张表用union)


下面接着学习子查询当中的最后一种——表子查询。

  • 表子查询

1、概念

子查询返回的结果是多行多列,这种子查询称为表子查询。

2、常用的操作符

IN

3、注意

这个表子查询经常出现在 FROM 之后,

把表子查询返回的结果作为一张临时表,再和其它表进行联查操作。

接下来通过两个需求演示一下基本的用法。

二、操作

打开图形可视化工具 DataGrip 进行操作。

(0)员工表 emp 、部门表 dept

emp表

dept 表

(1)查询与员工 “ 必胜客 ”," 宋远桥 ”的职位和薪资相同的员工信息
1、分析(拆解需求)

先得去查询必胜客和宋远桥这两个员工的职位和薪资,再查询符合需求的员工信息

第一步

SELECT job,salary FROM emp WHERE name IN('必胜客','宋远桥'); /*这里用 OR 也行*/

第二步

2、实操

解决方法:我们使用 IN 

意思就是:

用 IN 就是在返回的这个多行多列表格当中选某一行,只要查询 SELECT 满足其中一行就查询出来

SELECT * FROM emp WHERE (job,salary) IN (SELECT job,salary FROM emp WHERE name IN('必胜客','宋远桥') );

(2)查询入职日期是 “ 2006-01-01 ” 之后的员工信息,及其部门信息
1、分析(拆解需求)

先查询出在指定入职时间之后的员工信息,再去查询这部分员工其对应的部门信息

第一步

SELECT * FROM emp WHERE entrydate > '2006-01-01';

2、实操

我们要把第一张查到的表作为一张 "临时表",去这里面查询对应的部门信息。

所以才有前面的:表子查询通常在 FROM 之后 

注意:这里还要用到左连接查询(因为防止有些字段为 NULL ,也要给他查询出来)

/* ON 后面接连接的条件 */
SELECT e.*,d.* FROM (SELECT * FROM emp WHERE entrydate > '2006-01-01') AS e LEFT JOIN dept AS d ON e.dept_id = d.id;

这上面的案例就用到了表子查询,它会把返回的表("临时表")作为一张表去联合其它表做一个联查操作表子查询返回的结果是多行多列的数据


这篇博客的内容就结束了。

http://www.lryc.cn/news/368277.html

相关文章:

  • Java 18风暴来袭:解锁编程新纪元
  • 文件操作(Python和C++版)
  • Git【版本控制命令】
  • 打字侠是一款PWA网站,如何下载到电脑桌面?
  • Scikit-learn使用步骤?使用场景?
  • MySQL 5.7详细下载安装配置教程(MySQL 5.7安装包)_mysql5.7的安装教程
  • 电阻十大品牌供应商
  • 深度学习复盘与论文复现C
  • 海洋日特别活动—深海来客——可燃冰
  • Web前端放图片位置:深入探索与最佳实践
  • leetcode-02-[977]有序数组的平方[209]长度最小的子数组[59]螺旋矩阵II
  • Spring Cloud Gateway CORS 跨域方案
  • 高考后志愿填报信息采集系统制作指南
  • Python使用Flask构建简单的web应用
  • 看似不同的事情,却是相同的坑
  • 在 Linux 系统上安装 Android NDK
  • SpringBoot的学习要点
  • vue3引入cesium和olcs
  • 代码随想录算法训练营第25天|回溯
  • Ajax 快速入门
  • 面试官:前端实现图片懒加载怎么做?这不是撞我怀里了嘛!
  • 每天学习一个Windows命令或Linux命令——seq
  • C++设计模式-中介者模式,游戏对象之间的碰撞检测
  • Rust-02-变量与可变性
  • mov指令中不允许的操作——汇编语言
  • Python进阶-部署Flask项目(以TensorFlow图像识别项目WSGI方式启动为例)
  • WooYun-2016-199433 -phpmyadmin-反序列化RCE-getshell
  • 社交“学习伙伴”:Meta Llama助力对话升级
  • LabVIEW 反向工程的实现与法律地位
  • Python怎么做单元测试