【MySQL进阶之路】oracle 9i的经典测试雇员信息表案例——多表查询

news2024/9/29 5:26:43

目录

引言

笛卡尔积

自连接

子查询

单行子查询

多行子查询

多列子查询

在from子句中使用子查询

合并查询


个人主页:东洛的克莱斯韦克-CSDN博客

引言

在数据库的实际开发中,多表查询是一项非常基础且重要的技能。它允许你将来自不同表的数据结合起来,以满足复杂的业务需求。多表查询主要通过几种方式实现,包括但不限于连接(JOIN)、子查询(Subquery)、联合(UNION)等

本文会配合案例,深入探讨多表查询

准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表) EMP员工表 DEPT部门表 SALGRADE工资等级表 如何显示每个部门的平均工资和最高工资

员工表emp

部门表dept

工资表salgrade

笛卡尔积

笛卡尔积(Cartesian product)是数学和数据库理论中的一个重要概念,尤其是在关系数据库管理系统(RDBMS)中。当两个或多个表进行连接(join)但没有指定任何连接条件时,就会生成笛卡尔积。

在数据库术语中,如果表A有M行,表B有N行,那么A和B的笛卡尔积将是一个包含M*N行的新表,这个新表中的每一行都是通过将A中的每一行与B中的每一行进行组合而得到的。结果表中的列是原始表列的简单并集。

显示部门号为10的部门名,员工名和工资

select ename, sal,dname from EMP, DEPT where EMP.deptno=DEPT.deptno and
DEPT.deptno = 10;

显示各个员工的姓名,工资,及工资级别

select ename, sal, grade from EMP, SALGRADE where EMP.sal between losal and
hisal;

自连接

将一张表看作两个或多个逻辑表,并通过它们之间的共同字段进行连接。这种操作允许我们在同一张表内比较或组合不同行的数据。

如果不指定连接条件,自连接将生成一个笛卡尔积,即表中每一行与其他所有行的组合。这通常不是我们想要的结果,因为它会产生大量无关的数据。

显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号--empno)

select leader.empno,leader.ename from emp leader, emp worker where
leader.empno = worker.mgr and worker.ename='FORD';

子查询

子查询(Subquery)是嵌入在其他SQL语句(通常是SELECT、INSERT、UPDATE或DELETE语句)中的SELECT语句。这种查询允许我们将一个查询的结果用作另一个查询的条件或数据源。子查询也被称为嵌套查询或内部查询,因为它们被嵌入在另一个查询(外部查询)中。

单行子查询

显示SMITH同一部门的员工

select * from EMP WHERE deptno = (select deptno from EMP where
ename='smith');

多行子查询

in关键字;查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自 己的

select ename,job,sal,deptno from emp where job in (select distinct job from
emp where deptno=10) and deptno<>10;

all关键字;显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

select ename, sal, deptno from EMP where sal > all(select sal from EMP where
deptno=30);

any关键字;显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门 的员工)

select ename, sal, deptno from EMP where sal > any(select sal from EMP where
deptno=30);

多列子查询

查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

select ename from EMP where (deptno, job)=(select deptno, job from EMP
where ename='SMITH') and ename <> 'SMITH';

在from子句中使用子查询

子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。

显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

select ename, deptno, sal, format(asal,2) from EMP,
(select avg(sal) asal, deptno dt from EMP group by deptno) tmp
where EMP.sal > tmp.asal and EMP.deptno=tmp.dt;

查找每个部门工资最高的人的姓名、工资、部门、最高工资

select EMP.ename, EMP.sal, EMP.deptno, ms from EMP,
(select max(sal) ms, deptno from EMP group by deptno) tmp
where EMP.deptno=tmp.deptno and EMP.sal=tmp.ms;

显示每个部门的信息(部门名,编号,地址)和人员数量

select DEPT.deptno, dname, mycnt, loc from DEPT,
(select count(*) mycnt, deptno from EMP group by deptno) tmp
where DEPT.deptno=tmp.deptno;

合并查询

在SQL中,当我们需要合并多个SELECT语句的执行结果时,可以使用集合操作符UNIONUNION ALL。这两个操作符都允许我们将两个或多个SELECT语句的结果集合并成一个结果集,但它们之间有一些关键的区别。

UNION操作符用于合并两个或多个SELECT语句的结果集,并自动去除重复的行。这意呀着,如果两个结果集中有完全相同的行(基于所有选择的列的值),那么这些行在最终的结果集中只会出现一次。

UNION不同,UNION ALL操作符用于合并两个或多个SELECT语句的结果集,但它不会去除重复的行。如果两个结果集中有相同的行,那么这些行在最终的结果集中都会出现。

将工资大于2500或职位是MANAGER的人找出来

select ename, sal, job from EMP where sal>2500 union
 select ename, sal, job from EMP where job='MANAGER';

将工资大于25000或职位是MANAGER的人找出来

select ename, sal, job from EMP where sal>2500 union all
 select ename, sal, job from EMP where job='MANAGER';

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

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

相关文章

【git bash编码错误解决方案】启动conda环境时报错,其他terminal却正常

&#x1f50e;嘿&#xff0c;这里是慰慰&#x1f469;&#x1f3fb;‍&#x1f393;&#xff0c;会发各种类型的文章&#xff0c;智能专业&#xff0c;从事前端&#x1f43e; &#x1f389;如果有帮助的话&#xff0c;就点个赞叭&#xff0c;让我开心一下&#xff01;&#x1f…

Java中的IO流-最全最基础的IO流概述和简介

IO流简介 IO是什么 Java中的IO流是用于处理数据输入和输出的核心机制。通过应用IO流可以使Java程序能够与外部世界&#xff08;如磁盘文件、网络、硬件设备等&#xff09;进行数据交互。IO流的全称为输入/输出流&#xff08;Input/Output Stream&#xff09;&#xff0c;它是…

【Python】函数的定义和调用、形参和实参、函数的返回值、多元赋值、全局和局部变量

文章目录 函数的定义函数的调用形参和实参函数的返回值一个 return多个 return多元赋值 变量作用域函数内的变量全局变量和局部变量修改全局变量 函数的定义 函数的定义&#xff1a;分配任务 def 函数名(形参列表):函数体return 返回值def&#xff1a;define&#xff0c;定义…

2024“钉耙编程”中国大学生算法设计超级联赛(8)

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;彩笔ACMer一枚。 &#x1f3c0;所属专栏&#xff1a;杭电多校集训 本文用于记录回顾总结解题思路便于加深理解。 不是哥们&#xff0c;怎么我tm什么都不会。 &#x1f4e2;&…

计算机Java项目|基于SpringBoot的医院药品管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

大象机械臂myCobot 280 JN 2023和D435i相关环境配置

目录 一、安装Google拼音输入法二、安装CUDA 10.2三、安装conda管理环境四、配置D435i相机SDK五、安装realsense-ros 大象机器人的这款机械臂&#xff0c;用的Jetson nano做的主控&#xff0c;给的系统的ubuntu20&#xff0c;默认python版本是3.8。并且没有配置CUDA&#xff0c…

记录|SPC理解+SPC的监控看板

目录 前言一、Dashboard1.1 分布图1.2 控制图I-MR控制图&#xff1a;单值极差控制图Xbar-R图&#xff1a;均值极差控制图 1.3 趋势图 二、Xbar-R控制图判断异常的条件Xbar控制图R控制图 三、均值极差控制图【Xbar-R】3.1 基础理解XbarR最终绘制的Xbar-R图 3.2 如何看图看图顺序…

Linux下安装python与pip源配置(详细教程)

文章目录 Linux下安装python前置准备解压数据编译安装配置环境变量方式1&#xff1a;设置软连接方式2&#xff1a;添加PATH PIP源配置系统设置pip源临时设置pip源 问题解决缺少zlib包 Linux下安装python 前置准备 # 下载地址 https://www.python.org/ftp/python/3.6.8/# wget…

高精度夹治具的使用技巧和注意事项

在现代工业生产中&#xff0c;高精度夹治具扮演着至关重要的角色。它们能够确保工件在加工过程中的稳定性和精度&#xff0c;提高生产效率和产品质量。然而&#xff0c;要充分发挥高精度夹治具的优势&#xff0c;必须掌握正确的使用技巧和注意事项。以下是时利和整理的一些内容…

大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

关于lettuce的一次pipeline反向优化

起因是后台job对一批数据做大量的redis读写操作&#xff0c;为了提高job的执行速度&#xff0c;直接使用pipeline对一些不能批量读写的命令进行管道优化 简单介绍什么是lettuce Spring Boot自2.0版本开始默认使用Lettuce作为Redis的客户端&#xff08;注1&#xff09;。Lettu…

WEB渗透免杀篇-绕过

360白名单 需要足够的权限 360的扫描日志和设置白名单日志位置在&#xff1a;C:\Users[username]\AppData\Roaming\360Safe\360ScanLog 查看扫描日志内容可以查询到白名单文件 日志文件记录的是添加或移除白名单的时间、文件名、hash等信息&#xff0c;otc1为添加白名单&#…

SadTalker翻译与代码调试

文章目录 SadTalker原文翻译SadTalker&#xff1a;学习风格化音频驱动单幅图像说话人脸动画的真实 3D 运动系数Abstract1. Introduction2. Related Work3. Method3.1. Preliminary of 3D Face Model3.2. Motion Coefficients Generation through Audio3.3. 3D-aware Face Rende…

操作系统简介:设备管理

设备管理 1. 设备管理概述2. 设备管理技术通道技术DMA技术缓冲技术Spooling技术 3. 磁盘调度 设备管理是操作系统中最繁杂而且与硬件紧密相关的部分&#xff0c;不但要管理实际 I/O 操作的设备(如磁盘机、扫描仪、打印机、键盘和鼠标)&#xff0c;还要管理诸如设备控制器、DMA…

Linux信号机制探析--信号的处理

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f351;信号处理信号处理常见方式概览 &#x1f352;内核如何实现信号的捕捉 &#x1f34e;内核态与用户态操作系统是如何正常…

下载cmake操作步骤

cmake官网链接 cmake-3.30.2.tar.gz源代码官网下载链接

中国的人形机器人都有哪些出色的产品?

8月21日&#xff0c;2024世界机器人大会在北京亦庄正式开幕。本次大会共有169家企业集中展出了600余件机器人创新产品&#xff0c;人形机器人占比最大&#xff0c;大会还开设人形机器人专区&#xff0c;共亮相27款整机。 展会中多数人形机器人产品都偏向服务型&#xff0c;主要…

乾坤大挪移!将脚趾移到手指上,江山邦尔骨科医院成功完成一例断指再植手术

2024年6月中旬&#xff0c;家住江山贺村的何阿姨经历一次不小的意外。 那天天气晴朗&#xff0c;何阿姨准备把院子修缮修缮。操作切割工具时&#xff0c;何阿姨没有握稳&#xff0c;让工具一下子飞了出去——飞出去的瞬间&#xff0c;工具切掉了她的左手拇指&#xff0c;血流不…

网络安全大考,攻防演练驱动企业常态化安全运营升级!

当前&#xff0c;网络安全形势日益严峻&#xff0c;恶意软件、勒索软件肆虐&#xff0c;钓鱼攻击手段层出不穷&#xff0c;不断威胁企业数据安全与业务连续性。随着云计算、大数据、物联网等新兴技术的广泛应用&#xff0c;网络边界模糊化&#xff0c;攻击面急剧扩大&#xff0…

Qt (10)【Qt窗口 —— 如何在窗口中创建浮动窗口和状态栏】

阅读导航 引言一、如何在窗口中创建浮动窗口1. 浮动窗口的创建2. 设置停靠的位置 二、如何在窗口中创建状态栏1. 状态栏的创建2. 在状态栏中显示实时消息3. 在状态栏中显示永久消息4. 调整显示消息的位置&#xff0c;并加上进度条 引言 在上一篇文章中&#xff0c;我们一同探索…