MySQL基础笔记(4)-子查询

【MySQL】子查询 综合练习 【代码】【MySQL】子查询 综合练习。 阅读详情

MySql的子查询是多表查询的一个重要组成部分,常常和连接查询一起使用,是多表查询的基础,本文将带着大家学习常见的子查询相关知识以及一些例子用以巩固所学。


 

一、什么是子查询   

当一个查询是另一个查询的条件时,称之为子查询。子查询可以使用几个简单命令构造功能强大的复合命令。子查询最常用于SELECT-SQL命令的WHERE子句中。子查询是一个 SELECT 语句,它嵌套在一个 SELECT、SELECT…INTO 语句、INSERT…INTO 语句、DELETE 语句、或 UPDATE 语句或嵌套在另一子查询中。

二、建表语句

列出子查询练习需要用到的sql语句

-- /创建部门表/
CREATE TABLE dept(
deptno INT PRIMARY KEY,
dname VARCHAR(50),
loc VARCHAR(50)
);

-- /创建雇员表/
CREATE TABLE emp(
empno INT PRIMARY KEY,
ename VARCHAR(50),
job VARCHAR(50),
mgr INT,
hiredate DATE,
sal DECIMAL(7,2),
COMM DECIMAL(7,2),
deptno INT,
CONSTRAINT fk_emp FOREIGN KEY(mgr) REFERENCES emp(empno)
);

-- /创建工资等级表/
CREATE TABLE salgrade(
grade INT PRIMARY KEY,
losal INT,
hisal INT
);

-- /插入dept表数据/
INSERT INTO dept VALUES (10, '教研部', '北京');
INSERT INTO dept VALUES (20, '学工部', '上海');
INSERT INTO dept VALUES (30, '销售部', '广州');
INSERT INTO dept VALUES (40, '财务部', '武汉');

-- /插入emp表数据/
INSERT INTO emp VALUES (1009, '曾阿牛', '董事长', NULL, '2001-11-17', 50000, NULL, 10);
INSERT INTO emp VALUES (1004, '刘备', '经理', 1009, '2001-04-02', 29750, NULL, 20);
INSERT INTO emp VALUES (1006, '关羽', '经理', 1009, '2001-05-01', 28500, NULL, 30);
INSERT INTO emp VALUES (1007, '张飞', '经理', 1009, '2001-09-01', 24500, NULL, 10);
INSERT INTO emp VALUES (1008, '诸葛亮', '分析师', 1004, '2007-04-19', 30000, NULL, 20);
INSERT INTO emp VALUES (1013, '庞统', '分析师', 1004, '2001-12-03', 30000, NULL, 20);
INSERT INTO emp VALUES (1002, '黛绮丝', '销售员', 1006, '2001-02-20', 16000, 3000, 30);
INSERT INTO emp VALUES (1003, '殷天正', '销售员', 1006, '2001-02-22', 12500, 5000, 30);
INSERT INTO emp VALUES (1005, '谢逊', '销售员', 1006, '2001-09-28', 12500, 14000, 30);
INSERT INTO emp VALUES (1010, '韦一笑', '销售员', 1006, '2001-09-08', 15000, 0, 30);
INSERT INTO emp VALUES (1012, '程普', '文员', 1006, '2001-12-03', 9500, NULL, 30);
INSERT INTO emp VALUES (1014, '黄盖', '文员', 1007, '2002-01-23', 13000, NULL, 10);
INSERT INTO emp VALUES (1011, '周泰', '文员', 1008, '2007-05-23', 11000, NULL, 20);
INSERT INTO emp VALUES (1001, '甘宁', '文员', 1013, '2000-12-17', 8000, NULL, 20);

-- /插入salgrade表数据/
INSERT INTO salgrade VALUES (1, 7000, 12000);
INSERT INTO salgrade VALUES (2, 12010, 14000);
INSERT INTO salgrade VALUES (3, 14010, 20000);
INSERT INTO salgrade VALUES (4, 20010, 30000);
INSERT INTO salgrade VALUES (5, 30010, 99990);

三、子查询的使用格式

SELECT xxx WHERE XX =  (SELECT xx FROM XX)...

 四、子查询练习

1、查出教研部所有员工的姓名和工资

分析:需要查出的字段有员工姓名和工资,这两个字段都由emp表提供,所以只需要从emp中提取数据,但是emp表中只有一个部门编号deptno字段,所以还需要查出教研部的部门编号,这里是一个条件查询。

SELECT e.ename,e.sal FROM emp e WHERE e.deptno = (SELECT d.deptno FROM dept d WHERE d.dname = '教研部');

2、查出每个部门的名称以及所包含的员工数

分析:要查出部门名称和员工数,我的做法是使用内连接,让部门表和员工表进行连接,然后筛选出员工部门ID和部门表ID相等的数据,筛选出部门名和使用COUNT()函数,然后根据部门名分组,这是最好的方法

SELECT d.dname ,COUNT(*)  FROM dept d INNER JOIN emp e ON d.deptno = e.deptno GROUP BY d.dname;

有朋友可能会问,为什么不用左外连接而用内连接呢?需求中不是要查询所有的部门吗?如果使用左外连接是可以查出所有的部门名称,但是假如没有员工与该部门相对应的话就会出现假数据,像这一条数据:

这条数据仍然会被查询出来,计入COUNT()函数中,显示该部门有1条数据,即1个员工,这是错误的

3、查出至少有四个个员工的部门。显示部门编号、部门名称、部门位置、部门人数

这个Sql有难度,是第2题的升级版,需要查询出特定字段并且封装成临时表temp进行查询

SELECT dept.dname,temp.num FROM dept INNER JOIN (SELECT deptno,COUNT(*) num FROM emp GROUP BY deptno) temp ON dept.deptno=temp.deptno WHERE temp.num >= 4 ;

4、列出薪金比谢逊高的所有员工

SELECT e1.ename FROM emp e1 WHERE e1.sal >(SELECT e2.sal FROM emp e2  WHERE e2.ename = '谢逊');

 5、列出所有员工的姓名及其直接上级的姓名

因为是查询所有员工,所以要用左连接,不能用内连接

SELECT e1.ename 员工姓名,e2.ename 上级姓名 FROM emp e1 LEFT OUTER JOIN emp e2 ON e1.mgr = e2.empno;

 6、列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称

目录

一、什么是子查询   

二、建表语句

三、子查询的使用格式

 四、子查询练习

1、查出教研部所有员工的姓名和工资

2、查出每个部门的名称以及所包含的员工数

3、查出至少有四个个员工的部门。显示部门编号、部门名称、部门位置、部门人数

4、列出薪金比谢逊高的所有员工

 5、列出所有员工的姓名及其直接上级的姓名

 6、列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称


SELECT e1.`empno`,e1.`ename`,d.deptno
FROM emp e1 LEFT OUTER JOIN emp e2
ON e1.`mgr` = e2.`empno` 
LEFT OUTER JOIN dept d
ON e1.`deptno` = d.`deptno`
WHERE e1.`hiredate` < e2.`hiredate`

MySQL编程笔记:子查询 子查询 子查询是指一个查询语句嵌套在另一个查询语句内部的查询。在 SELECT 子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件。 子查询中常用的操作符有ANY、SOME、ALL、EXISTS、IN,也可以使用比较运算符。子查询可以添加到 SELECT、UPDATE 和 DELETE 语句中,而且可以进行多层嵌套。 在条件表达式中产生标量的子查询 SELECT * FROM score WHERE id = (SELECT event_id FROM event WHERE d 阅读详情

相关推荐

MySQL的子查询学习及练习代码.txt

本txt文件包含MySQL数据库的子查询,附上练习代码,也有一些注释及讲解,虽然不多,但希望对有需要的童鞋有帮助。

3.Mysql子查询练习

子查询指一个查询语句嵌套在另一个查询语句内部的查询,内部的查询是外部查询的条件,这个特性从MySQL4.1开始引入子查询(内查询)在主查询之前执行完成子查询的结果被主查询(外查询)使用注意事项:子查询要包含在括号内将子查询放在比较条件的右侧单行操作符对应单行子查询,多行操作符对应多行子查询。

qq_44438941的博客 580

告别MATLAB依赖:手把手教你用Python实现GCC-PHAT时延估计(附完整代码与对比测试)

本文详细介绍了如何使用Python实现GCC-PHAT时延估计算法,替代传统的MATLAB依赖。通过完整的代码示例和性能对比测试,展示了Python在信号处理领域的强大能力,特别是在广义互相关和TDOA应用中的高效实现。文章还提供了实时音频处理和嵌入式部署的实用技巧,帮助工程师快速掌握这一关键技术。

weixin_42667269的博客 221

MySQL子查询篇(精选20道子查询练习题)

同样,如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部,这种嵌套的执行方式就称为相关子查询。子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行,那么这样的子查询叫做不相关子查询。from型的子查询子查询是作为from的一部分,子查询要用()引起来,并且要给这个子查询取别名,把它当成一张“临时的虚拟的表”来使用。先通过子查询获得工资最少的工资数,然后把这个当成筛选条件获取是谁的工资这么低。...

全网粉丝10W+、全栈领域优质创作者、掘金、阿里云等社区博客专家、专注于全栈领域和毕业项目实战 3405

Applied Energy期刊小白论文投稿模板-流程经验分享

Applied Energy期刊小白论文投稿模板-流程经验分享,Elsevier期刊(爱思唯尔)投稿流程

zzu_Flyer的博客 4万+

记录:N10激光雷达串口编程,将数据存进 SQLite,并进行 ROS2 - cartographer 单雷达建图

N10 系列采用 TOF(time of flight)测距原理,通过测量调制激光的发射、返回时间差来测量物体与传感器的相对距离。激光发射器发出调制脉冲激光,内部定时器开始 从t1时刻计算时间,当激光照射到目标物体后,部分能量返回,当雷达接收到返回的激光信号时,在t2时刻停止内部定时器计时,光速C,激光雷达到达物体的距离D为:经过N10系列激光雷达内嵌的信号处理单元的实时解算得到探测物体的距离值,结合高精度自适应角度测量模块输出的角度信息,可以得到量程内周围 360 度环境 的二维平面信息。

m0_74013893的博客 1096

mysql数据库之子查询练习

本文介绍 了子查询的练习(多表联查)。

努力是为了让自己不平庸。。。 994

从0到1:用Claude 3.7十日拿下教育部课题申报书(附可修改LaTeX模板)

🟣"作为教育部人文社科项目评审专家,请根据近三年立项数据分析,为[您的学科方向]领域推荐5个具有创新性且符合'十四五'规划的重点选题,要求选题体现交叉学科特征,并标注潜在理论突破点"🟣"根据前期研究基础,创建包含4个研究模块、12个关键节点的三维技术路线图,要求体现实验仿真-实证研究-理论建模的螺旋递进关系,并标注每个节点的预期成果形态"🟣"现在切换至教育部学科评审组组长模式,从选题价值、创新程度、研究可行性三个维度对本申报书进行盲审,生成包含9个扣分风险点的诊断报告及修改优先级排序"

智能AI让学术科研更容易 546

MySQL学习笔记4—子查询

DQL语言学习—数据查询语言 仅作为学习笔记,学习资源来源于B站视频:BV1xW411u7ax 6. 子查询 6.1 含义 嵌套在其他语句内部的select语句称为子查询或内查询,外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多,外面如果为select语句,则此语句称为外查询或主查询 6.2 分类 (1)按出现位置 select后面:仅支持标量子查询 from后面:表子查询 where或having后面: 标量子查询、列子查询、行子查询 exi

JakeSunJG的博客 143

ardupilot BMI088加速度陀螺仪学习

本节主要记录ardupilot 中BMI088传感器的学习过程,欢迎批评指正。BMI088是一款高性能6轴惯性传感器,由16位数字三轴±24g加速度计和16位数字三轴±2000°/ s陀螺仪组成。 BMI088允许高精度测量方向和沿三个正交轴的运动检测。BMI088具有高振动鲁棒性和3 x 4.5 x0.95mm³的小尺寸,是用于无人机和机器人应用等恶劣环境的高性能IMU中的独特产品。 BMI088专门设计用于有效抑制由于PCB上的共振或整个系统的结构而可能发生的振动。 除了高振动稳定性外,BMI088的出

陌城烟雨 2057

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

本文所属《从零开始跑通3DGS教程》系列文章; sfm重建的点云已经丢掉了尺度信息,并且坐标系跟图像数据有关(SFM初始化选择的图像),所以如果想恢复物理真实尺度,以及在想要的视角下渲染,那么需要对尺度和坐标系进行编辑修正,下文介绍如何使用CloudCompare修改坐标系和尺度

诺有缸的高飞鸟的博客 2872

mysql全局逻辑子查询,MySQL自学笔记4--where、from、exists型子查询

MySQL自学笔记使用MySQL 5.5以及MySQL自带命令客户端子查询定义:一个查询是另外一个查询的条件时,称为子查询。子查询就是在原有的查询语句中,嵌入新的查询,来得到想要的结果集。根据子查询的嵌入位置,可以分为三种子查询:where型子查询、from型子查询、exists型子查询where型子查询将内层查询的结果作为外出查询的比较条件 典型的语法:select * from table1N...

weixin_39630909的博客 343

微信小程序 - {“errMsg”:”requestPayment:fail banned”} 微信小程序调用wx.requestPayment支付失败返回错误(uniapp微信小程序微信支付报错)

{“errMsg”:”requestPayment:fail banned”},微信小程序调用wx.requestPayment报错requestPayment:fail banned,uni-app微信小程序wx.requestPayment支付报错requestPayment:fail banned,拉起小程序支付报错,iPhone苹果ios真机微信支付报错,Android安卓手机微信支付报错,支付报错,商户配置,签名验证,uniapp 小程序支付微信支付一场,设置过b2b类目,确认了商户号相关功能正常

🏆 前端领域优质创作者 3353

MySQL自学笔记4--where、from、exists型子查询

MySQL自学笔记 使用MySQL 5.5以及MySQL自带命令客户端 子查询 定义:一个查询是另外一个查询的条件时,称为子查询。子查询就是在原有的查询语句中,嵌入新的查询,来得到想要的结果集。根据子查询的嵌入位置,可以分为三种子查询:where型子查询、from型子查询、exists型子查询...

chisuochi8348的博客 327

手把手教你学Simulink--基于Simulink的机械臂工业装配任务仿真建模

特点高精度要求:装配过程通常需要非常高的位置精度。多步骤操作:一个完整的装配任务可能包含多个连续的子任务,如抓取零件、移动到特定位置、装配等。动态环境:工作环境可能是动态变化的,例如其他机器人或人员在同一空间内工作。挑战复杂性管理:需要处理复杂的运动学和动力学问题,以及可能的碰撞避免。实时性:某些应用场景下需要快速响应以保证生产效率。集成度:需要与其他系统(如传感器、PLC等)无缝集成。首先明确要模拟的装配任务内容。零件的位置和尺寸。装配顺序。

MHD0815的博客 240

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MySQL数据库笔记4——子查询、union及limit用法

1.子查询       select语句当中嵌套select语句,被嵌套的select语句是子查询。 子查询可以出现在: 2.where子句中使用子查询 案例:找出高于平均薪资的员工信息? select * from emm where sal>avg(sal); //错误写法,where后面不能直接使用分组函数 改正:select * from emp where sal>(select avg(sal) from emp); 3.

weixin_44384631的博客 563

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

mysql学习笔记4(SELECT的子查询),HAVING,GROUP BY

GROUP BY ,mysql子查询,相关子查询,多行子查询,HAVING

网络复习ing 1192

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

MYSQL学习笔记(七):新年第一篇之子查询

前言:子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从 MySQL 4.1 开始引入。在特定情况下,一个查询语句的条件需要另一个查询语句来获取,称为内层查询,内层查询语句的查询结果,可以为外层查询语句提供查询条件。其中,内层查询即子查询,外层查询即主查询,只是叫法不同而已。 这个案例中,很明显要先找到最低工资数,然后才能通过条件查询进行后面操作,而先找到最低工资,就是标量子查询。根据子查询返回的数据分类:简单来说,子查询可以返回一个标量(就一个值)、一个行、一个列或一个表。根据子查询和主查询之

羊小猪~~的博客 1451

mysql多表查询返回值_MySQL的多表查询和子查询4(笔记)

联结查询:事先将两张或多张表jion,根据join的结果进行查询 交叉联结:如果交叉A表和B表,那查询的结果是数据是A*B行,这种查询大多没用,自然联结(内联结):A表的每一条记录都在B表中有一条匹配的记录等值联结:把两张表的对应字段做等值关联条件比较:做条件判断,如:比较的.不过这种用的比较少外联结:A表的每一条记录不需要在在B表中有一条匹配的记录左外联结:只保留出现在左外联结运算(左边)之前...

weixin_39963255的博客 467

MySQL基础-子查询

子查询概念:子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较子查询的基本语法结构:说明:子查询(内查询)在主查询之前一次执行完成子查询的结果被主查询(外查询)使用子查询要包含在括号内建议将子查询放在比较条件的右侧,便于阅读。

~ 1万+

MySQL:子查询(全面详解)

本博主将用优快云记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

weixin_52533007的博客 1万+

MySQL子查询

一、子查询定义 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。 二、子查询的基本使用 1、子查询(内查询)在主查询之前一次执行完成。 2、子查询的结果被主查询(外查询)使用。 3、注意事项: (1)子查询要包含在括号内 (2)将子查询放在比较条件的右侧 (

qq_44111805的博客 4万+

MySQL——子查询用法

文章目录MySQL——子查询用法1、子查询概述2、子查询的使用2.1、单行子查询2.2、多行子查询2.3、相关子查询子查询练习题 MySQL——子查询用法 1、子查询概述 子查询简介 子查询指一个查询语句嵌套在另一个查询语句内部的查询,内部的查询是外部查询的条件,这个特性从MySQL4.1开始引入。 SQL中子查询的使用大大增强了SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

万里顾一程的博客 2万+
上一篇: MySQL基础笔记(3)-常用函数
下一篇: MySQL基础笔记(5)-常用子句分析
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值