10、MySQL——子查询

news2024/10/2 20:22:40

目录

一、子查询

1、子查询出现的位置

2、子查询结果集的形式

二、实例演示 

1、查询工资高于JONES的员工 

1.1  分析

1.2  代码

2、查询与SCOTT同一部门的员工

2.1  分析

2.2  代码

3、工资高于30号部门所有人的员工信息

3.1  分析

3.2  代码

4、查询工作和工资与MARTIN完全相同的员工信息 

4.1  分析

4.2  代码

5、查询员工编号为7788的员工名称、员工工资、部门名称、部门地址

 6、自连接:自己连接自己,起别名

6.1  求7369员工编号、姓名、经理编号和经理姓名

 6.2  求各个部门薪水最高的员工所有信息


一、子查询

一个select语句中包含另一个完整的select语句。

--->子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。 

1、子查询出现的位置

(1)Where之后,作为被查询的条件之一;

        当子查询出现在where后作为条件时,还可以使用如下关键字:

--->ANY

--->ALL

(2)FROM之后,做表。 

2、子查询结果集的形式

--->单行单列(用于条件)

--->单行多列(用于条件)

--->多行单列(用于条件)

--->多行多列(做表)

二、实例演示 

创建两张表并添加数据:

CREATE DATABASE mysql10;
USE mysql10;
CREATE TABLE emp(
empno INT COMMENT '员工编号',
ename VARCHAR(50) COMMENT '员工姓名',
job VARCHAR(50) COMMENT '员工工作',
mgr INT COMMENT '领导编号',
hiredate DATE COMMENT '入职日期',
sal DECIMAL(7,2)COMMENT '月薪',
comm DECIMAL(7,2) COMMENT '奖金',
deptno INT COMMENT '部门编号'
);

INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);

USE mysql10;
CREATE TABLE dept(
deptno INT COMMENT '部门编码',
dname VARCHAR(14) COMMENT '部门名称',
loc VARCHAR(13) COMMENT '部门所在地点'
);

INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept VALUES(20, 'RESEARCH', 'DALLAS');
INSERT INTO dept VALUES(30, 'SALES', 'CHICAGO');
INSERT INTO dept VALUES(40, 'OPERATIONS', 'BOSTON');

1、查询工资高于JONES的员工 

1.1  分析

先查询JONES的工资:

SELECT sal FROM emp WHERE ename='JONES';

再把JONES的工资作为条件去查询工资高于JONES的员工:

SELECT * FROM emp WHERE sal>(JONES的工资); 

1.2  代码

SELECT * FROM emp WHERE sal>(SELECT sal FROM emp WHERE ename='JONES'); 

2、查询与SCOTT同一部门的员工

2.1  分析

先查询SCOTT的部门:

SELECT deptno FROM emp WHERE ename='SCOTT';

再查询和SCOTT同部门的员工:

SELECT * FROM emp WHERE deptno=(SCOTT的部门); 

2.2  代码

SELECT * FROM emp WHERE deptno=(SELECT deptno FROM emp WHERE ename='SCOTT'); 

3、工资高于30号部门所有人的员工信息

查询条件:工资高于30部门所有人工资,其中30部门所有人工资是子查询。高于所有需要使用all关键字。

--->子查询形式为多行单列(当子查询结果集形式为多行单列时可以使用ALL或ANY关键字)

3.1  分析

第一步:查询30部门所有人的工资:

SELECT sal FRON emp WHERE deptno=30; 

第二步:查询高于30部门所有人的工资:

SELECT * FROM emp WHERE sal>ALL(30部门所有人的工资); 

3.2  代码

SELECT * FROM emp WHERE sal>ALL(SELECT sal FROM emp WHERE deptno=30); 

4、查询工作和工资与MARTIN完全相同的员工信息 

4.1  分析

第一步:查询MARTIN的工作和工资

SELECT job,sal FROM emp WHERE ename='MARTIN';

第二步:查询出与MARTIN工作和工资相同的员工

SELECT * FROM emp WHERE (job,sal) IN (MARTIN的工作和工资); 

4.2  代码

SELECT* FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='MARTIN'; 

5、查询员工编号为7788的员工名称、员工工资、部门名称、部门地址

无需子查询;

查询列:员工名称、员工工资、部门名称、部门地址;

查询表:emp和dept,分析得出,不需要外连接(外连接的特性:某一行(或某些行)记录上会出现一半有值,一半为NULL值);

条件:员工编号为7788

 第一步:去除多表,只查一张表,这里去除部门表,只查员工表

SELECT ename,sal FROM emp WHERE empno=7788;

第二步:把第一步与deft做内连接查询,添加主外键条件去除无用笛卡尔积

SELECT e.ename,e.sal,d.dname,d.loc FROM emp e,dept d WHERE e.deptno=d.deptno AND empno=7788; 

第三步: 第二步中的dept表表示所有行所有列的一张完整的表,这里可以把dept替换成所有行,但只有dname和loc列的表,这需要子查询。

查询dept表中dname和loc两列,因为deptno会被作为条件,用来去除无用笛卡尔积,所以需要查询它。

SELECT dname,loc,deptno From dept;

第四步:替换第二步中的dept

SELECT e.ename,e.sal,d.dname,d.loc FROM emp e,(SELECT dname,loc,deptno FROM dept) d WHERE e.deptno=d.deptno AND e.empno=7788;

 6、自连接:自己连接自己,起别名

6.1  求7369员工编号、姓名、经理编号和经理姓名

SELECT e1.empno,e1.ename,e2.mgr,e2.ename FROM emp e1,emp e2 WHERE e1.mgr=e2.empno AND e1.empno=7369;

 

 6.2  求各个部门薪水最高的员工所有信息

SELECT * FROM emp e,(SELECT MAX(sal) maxsal,deptno FROM emp GROUP BY deptno) a WHERE e.deptno=a.deptno AND e.sal=a.maxsal;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mannose-OH|甘露糖-羟基|mannose-PEG-OH|甘露糖-聚乙二醇-羟基

mannose-OH|甘露糖-羟基|mannose-PEG-OH|甘露糖-聚乙二醇-羟基 羟基(oxhydryl)是一种常见的极性基团,化学式为-OH。羟基与水有某些相似的性质,羟基是典型的极性基团,与水可形成氢键,在无机化合物水溶液中以…

钙尔奇30周年以行动,力挺中国骨骼健康发展

启动行动力赋能新旅程 近日,2022年度西普会于中国海南博鳌盛大举行。以“构筑患者价值同心圆——二元发展驱动健康产业新增长”为主题,本届西普会的会议内容和参会主体全面升维,从全球视野到中国特色聚合优质资源、拓宽产业边界,…

vue项目中实际构建echarts拓扑关系图业务

vue项目中实际构建echarts拓扑关系图业务前言一、关系拓扑是什么?二、需求梳理三、封装关系图组件1.父组件引用2.测试数据引入3.封装关系子组件4.关系组件完整代码总结前言 由于现在echarts的利用率增强,需要用到拓扑图的设计,如果单纯针对e…

Ubuntu虚拟机安装

文章目录VMware添加虚拟机等待开机(需要一些时间安装系统)检查网络环境设置 Ubuntu 中文支持一些基础设置VMware添加虚拟机 文件——>新建虚拟机 下一步:安装程序光盘映像文件(iso) 设置主机名,用户名及…

reportportal 集成 robotframework 自动化执行及结果可视化

最近领导想了个需求,想把目前组内在linux平台上执行的自动化脚本搞成可视化,如果是web站点相关日志可视化倒是简单了,ELK就是不错的选择,大部分可视化项目这种的,可以做的开起来很炫。 我们这边是自己写的脚本&#x…

机器学习西瓜书-1-2章

学习目标: 概览机器学习西瓜书 1、2章 学习内容: 第一章 绪论 1.1 基本术语 1.2 假设空间 1.3 归纳偏好 1.4 发展历程 第二章 模型评估与选择 2.1 经验误差与过拟合 2.2 评估方法 2.3 性能度量 学习时间: 两天 学习产出: 第…

爱了爱了,20个好用到爆的 Python 函数

大家好,今天分享20个日常工作中必不可少的Python函数,这些函数平时看到的不多,但是它们使用起来倒是非常的方便,它们可以大幅度地提高工作效率。内容较长,欢迎收藏学习,喜欢点赞支持。 文章目录技术提升isi…

你以为的Java面试只是背答案?跳槽涨薪不还是得靠自己的技术

前言 Java面试当然不能只靠背答案,为了应付面试背完答案拿到offer只是进入了这个行业,后面的实操还是得看自己的技术!技术的挂钩当然和技术底层也是挂钩的。 这是我在工作、面试中学习并总结到的一些知识点,都是一些比较典型的、…

Kafka 消息过期策略(时间相关参数)

Kafka 消息过期策略(时间相关参数) 标记delete时效 (CDH配置项)log.retention.ms (Kafka offset配置)retention.ms 标记delete的真删底层文件 delete.delay.ms log.segmetn.delete 背景:在不需要重启kafka的情况下&a…

QA特辑|剪得断,理不乱,一场直播解开关联网络与反团伙欺诈谜团

11月 10 日下午15:00 第九期《关联网络技术在业务安全中的应用》正式开讲。顶象数据科学家翼龙详尽的介绍了关联网络在反团伙欺诈中的作用,深度剖析了关联网络的技术框架、关联网络的图谱构建以及关联网络的复杂算法,为反团伙欺诈提供了重要的参考。 直播…

6.jeecg的pom结构

1.父pom parent为springboot 1.子模块部分 包括base-core、demo、system三个 air为自己新建 2.maven仓库部分 3.dependencies 这个是主动引入的依赖,子pom会继承 4.dependencyManagement 这个有点多,主要作用是先把依赖添加进来,但是…

python安装 learn2learn库 || 在线安装方式或者本地安装

文章目录1. 去github下载完整安装包(或本文的百度网盘)2. 安装C依赖库3 本地安装4 在线安装(不想本地安装 看这儿!)1. 去github下载完整安装包(或本文的百度网盘) github连接 https://github.c…

死磕宠物食品安全,京东你凭什么?

出品| 大力财经 文 | 魏力 京东第一个站出来,破局宠物食品行业乱象。 济南女孩刘小姐很在乎宠物的饮食安全,每次换的新狗粮或者买的新零食,她都要先尝一尝,鉴定一下是否符合自家狗狗食用。随着家人式养宠的到来,宠物…

deb包格式实例详解

本文简介及包格式部分内容节选自: deb_百度百科 一、简介 DEB是Debian软件包格式的文件扩展名,跟Debian的命名一样,DEB也是因Debra Murdock而得名,她是Debian创始人Ian Murdock的太太。 Debian包是Unixar的标准归档&#xff0…

LeetCode第 91 场双周赛题解

目录2465. 不同的平均值数目2466. 统计构造好字符串的方案数2467. 树上最大得分和路径2468. 根据限制分割消息2465. 不同的平均值数目 模拟一下即可 class Solution { public:int distinctAverages(vector<int>& nums) {set<double>st;sort(nums.begin(),nums…

Intellij各个功能小件的样子

文章目录资料ControlsButtonBuilt-in buttonSplit buttonCheckboxCombo boxDescription textDrop-down listGot It tooltipGroup headerInput fieldLinkNotificationsBallonBannerProgress indicatorsLoaderProgress barProgress textRadio buttonScrollbarSearch fieldTableTa…

CSAPP实验记录(2)--------- Bomb

实验简介 本实验需要拆除一个“二进制炸弹”&#xff0c;“二进制炸弹”是一个可执行目标程序。运行时&#xff0c;它会提示用户键入6个不同的字符串。如果其中任何一个错误&#xff0c;炸弹就会“爆炸”。必须通过逆向工程和汇编语言知识&#xff0c;推导出六个字符串分别是什…

Linux权限管理

修改权限-chmod 通过chmod指令&#xff0c;可以修改文件或者目录的权限 第一种方式 - 变更权限 u:所有者 g:所有组 o:其他人 a:所有人 chmod urwx,grx,ox 文件目录名 chmod ow …

条件随机场CRF(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 本文是作者学习CRF后的笔记。 最近更新时间&#xff1a;2022.11.15 最早更新时间&#xff1a;2022.11.15 条件随机场CRF是适宜于顺序预测任务的判别模型&#xff0c;可用于命名实体识别、词性标注等。 文章目录1. linear-chain CRF2. CRF目标…

使用TensorRT量化ResNet50网络(PTQ)

深度学习正在彻底改变行业提供产品和服务的方式。 这些服务包括用于计算机视觉的对象检测、分类和分割&#xff0c;以及用于基于语言的应用程序的文本提取、分类和摘要。 这些应用程序必须实时运行。 大多数模型都采用浮点 32 位算法进行训练&#xff0c;以利用更大的动态范…