8.MySQL复合查询

news2024/11/26 8:38:59

目录

  • 复合查询
    • 基本查询回顾
    • 多表查询 - 笛卡尔积
    • 自连接
    • 子查询
      • 单行子查询
      • 多行子查询
      • 多列子查询
      • 在from中使用子查询
    • 合并查询
      • union
      • union all
  • 表的内连和外连
    • 内连接
    • 外连接
      • 左外连接
      • 右外连接

复合查询

前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够。我们还需要了解符合查询

基本查询回顾

我们操作的表还是基于orcale 9i的经典测试表
在这里插入图片描述

1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J
在这里插入图片描述

2.按照部门号升序而雇员的工资降序排序
在这里插入图片描述

3.使用年薪进行降序排序
在这里插入图片描述

4.显示工资最高的员工的名字和工作岗位
最高工资可以聚合函数得出,得到最高工资,再去找这些员工是谁
在这里插入图片描述
这样写太粗糙了,不简洁,所以还有一种写法:
sql语法允许在sql语句的where子句的表达式中,再执行一条select查询,这叫做子查询。先执行内部的(),再执行外部的语句
在这里插入图片描述

5.显示工资高于平均工资的员工信息
在这里插入图片描述

6.显示每个部门的平均工资和最高工资
在这里插入图片描述

7.显示平均工资低于2000的部门号和它的平均工资
在这里插入图片描述

8.显示每种岗位的雇员总数,平均工资
在这里插入图片描述

多表查询 - 笛卡尔积

实际开发中往往数据来自不同的表,所以需要多表查询,以前我们from是跟一张表,实际上可以跟多张表。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE来演示如何进行多表查询
在这里插入图片描述

示例:

1.显示雇员名、雇员工资以及所在部门的名字
因为上面的数据来自EMP和DEPT表,因此要联合查询(笛卡尔积),什么是笛卡尔积?
a.从第一张表中选出第一条记录,和第二个表的所有记录进行组合
b.然后从第一张表中取第二条记录,和第二张表中的所有记录组合
c.不加过滤条件,得到的结果称为笛卡尔积
在这里插入图片描述
如何做笛卡尔积?
在这里插入图片描述
笛卡尔积本质就是将两张表变为了一张表,未来做数据查询的时候,还是可以和单表查询的方式进行查询。

我们发现,SMITH是20号部门的,但出现了10号部门的信息,这些的信息对于SMITH是没有用的,所以就可以将我们认为有意义的数据筛选出来

在这里插入图片描述

2.显示部门号为10的部门名,员工名和工资
在这里插入图片描述

3.显示各个员工的姓名,工资,及工资级别
在这里插入图片描述

自连接

上面讲的是将两个不同的表做笛卡尔积,那能不能将两个相同的表做笛卡尔积呢?
在这里插入图片描述
这里报错的原因是两个名字是相同的,后续操作这个表时,无法区别一个数据到底是哪个表里的数据,所以需要对表进行重命名。
在这里插入图片描述
对同一张表做笛卡尔积的行为叫做自连接。

示例:

显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号 – empno)
解决方案一:使用where子查询
在这里插入图片描述
解决方案二:自连接
在这里插入图片描述

子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

单行子查询

单行子查询是指子查询只返回单列,单行数据。

示例:

显示SMITH同一个部门的员工
在这里插入图片描述

多行子查询

多行子查询是指返回单列多行数据。

示例:

1.查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的
in关键字:某一列是否在某一个集合中
在这里插入图片描述

2.显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
all关键字:某一列与集合中的所有元素进行比较
在这里插入图片描述

显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)
any关键字:某一列与集合中的任意元素进行比较
在这里插入图片描述

多列子查询

多列子查询是指查询返回多个列数据的子查询语句
在这里插入图片描述

在from中使用子查询

截止目前为止,全部的子查询都是在where子句中充当判断条件,接下来子查询语句会出现在from子句中。

示例:

显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资
在这里插入图片描述

查找每个部门最高的人的姓名、工资、部门、最高工资
在这里插入图片描述

显示每个部门的信息(部门号,编号,地址)和人员数量
在这里插入图片描述

合并查询

在实际应用中,为了合并多个select的执行效果,可以使用集合操作符union,union all,这并不是笛卡尔积,这比笛卡尔积的效率要高,笛卡尔积是两个表的穷举,而这个就是单纯的属性相同的合并。

union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行

示例:

将工资大于2500或职位是MANAGER的人找出来
在这里插入图片描述

union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行
在这里插入图片描述

表的内连和外连

内连接

截止目前为止,我们前面学习的都是内连接。内连接实际上就是利用where子句对两种表形成的笛卡尔积进行筛选。

语法:

select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

这语法和我们之前做笛卡尔积 + where筛选是一样的,笛卡尔积本质上就是内连接的一种

示例:

显示SMITH的名字和部门名称
在这里插入图片描述

外连接

左外连接

如果联合查询,左侧的表完全显示我们就说是左外连接

语法:

select 字段名 from 表名1 left join 表名2 on 连接条件;

建两张表
在这里插入图片描述

查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来
在这里插入图片描述

右外连接

如果联合查询,右侧的表完全显示我们就说是右外连接

语法:

select 字段 from 表名1 right join 表名2 on 连接条件;

示例:

对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来
在这里插入图片描述

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

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

相关文章

正点原子阿尔法ARM开发板-IMX6ULL(十)——用CRT完成串口验证与DDR3/RGBLCD简述

文章目录 一、串口实验1.1 bsp_uart.c 二、DDR3三、关于RGBLCD 小唠叨: 我发现我学习效率上,看文本信息时候,获取信息是很快的,可能10分钟看个pdf比看30分钟的视频,效率来的更高一点。比如学python,应该多看…

整流器滤波电路

一、整流器滤波电路概述 整流器滤波电路的主要功能是将交流电(AC)转换为直流电(DC),并通过滤波器减少波动以输出稳定的直流电。其工作原理主要分为两个部分:整流部分和滤波部分。 二、整流电路 整流电路是…

AnaTraf | 网络性能监控与TCP响应时延:保障高效运维的核心要素

http://www.anatraf.com 网络作为业务运行的核心,直接影响着业务的连续性和用户体验。为了确保网络的高效性和稳定性,网络性能监控成为IT运维工作中的重要一环。TCP响应时延则是衡量网络性能的重要指标之一。本文将探讨如何通过网络性能监控和优化TCP响…

win10 有线网络变自带的wifi热点

① 首先确定自己的台式机或者笔记本带是否有无线网卡 win10查看无线网开 自带的wifi热点打不开——解决办法 ②win 搜索 “”移动热点“” 1: 打开热点 通过wlan 2: 编辑 热点名称密码即可 完成,有线网络变私人热点 手机 其他设备连接即可使用

图像分割-DeepLab

DeepLabV3源码链接:https://github.com/bubbliiiing/deeplabv3-plus-pytorch(打不开私信我获取) 一、简介 一般的模型如Unet一般用于医学领域,小目标,如细胞分割。 为了增大感受野(从而更好的获得全局特征…

Linux 基础io_理解文件系统_软硬链接_动静态库

一.磁盘 1.磁盘物理结构 盘片 磁盘可以有多个磁片,每个磁片有两个盘面,每个盘面都对应一个磁头,都可以存储数据。 磁道 扇区 磁道是指在盘面上,由磁头读写的数据环形轨道。每个磁道都是由一圈圈的圆形区域组成,数据…

操作系统期末|考研复习知识点汇总 - 持续更新

本文将根据个人学习进度对b站王道408课程以及题目考察的知识点进行整合,视频中详细的导图将会直接复用,并且将会对一些重点知识进行扩展以及一些思维导图的补充,目前第三章内容正在整理中…… 一:计算机系统概述 1.1操作系统概念…

解锁PDF权限密码

目录 背景: 定义与功能: 过程: 主要功能: 使用方式: 使用限制: 注意事项: 总结: 背景: 前段时间自己设置了PDF文件的许可口令,忘了口令导致自己无法编辑内容等,这…

7、Nodes.js包管理工具

四、包管理工具 4.1 npm(Node Package Manager) Node.js官方内置的包管理工具。 命令行下打以下命令: npm -v如果返回版本号,则说明npm可以正常使用 4.1.1npm初始化 #在包所在目录下执行以下命令 npm init #正常初始化,手动…

docker基础使用创建固定硬盘大小为40G的虚拟机

在docker中创建的服务器,匹配出容器id,服务器ip,服务器核数,服务器内存,服务器硬盘空间 for i in $(docker ps | grep -aiE web | awk {print $1});do echo $i; docker inspect $i|grep -aiE ipaddr|tail -1|grep -ai…

Spring Boot 依赖注入为 null 问题

目录 问题 省流 代码复现 TestService TestAspect TestController 源码分析 AbstractAutoProxyCreator CglibAopProxy Enhancer 问题 工作中,在负责的模块里使用 DubboService 注解注册了一个 dubbo 接口,给定时任务模块去调用。在自我调试阶…

使用Bert+BiLSTM+CRF训练 NER任务

使用的数据集在这里E-Commercial NER Dataset / 电商NER数据集_数据集-阿里云天池 针对面向电商的命名实体识别研究,我们通过爬取搜集了淘宝商品文本的标题,并标注了4大类,9小类的实体类别。具体类型及实体数量如下 针对面向电商的命名实体…

解决:如何在opencv中得到与matlab立体标定一样的矫正图?(python版opencv)

目的:采用一样的标定参数,matlab中和opencv中的立体矫正图像是一样的吗?不一样的话怎么让它们一样? 结论:不一样。后文为解决方案。 原因:注意matlab的标定结果在matlab中的用法和在opencv中的用法不一样&a…

OpenCv-01

使用opencv对图像进行一些简单的处理 首先知道自己的工作目录 import os cwdos.getcwd() 命名一张图片 my_imagelenna.png 获得图片路径 image_pathos.path.join(cwd,my_image) import cv2 imagecv2.imread(my_image) #imread()函数将图片转换为ndarray数组 image.sh…

大数据新视界 --大数据大厂之 Snowflake 在大数据云存储和处理中的应用探索

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

探索华为云DataArts Insight:数据智能的新引擎

在快速发展的数字化时代,数据已经成为企业最宝贵的资产。如何有效地管理和利用这些数据,以实现商业价值,是每个企业需要面对的重要挑战。华为云DataArts Insight平台应运而生,作为一款强大的数据智能解决方案,它帮助企…

STANFORD SR570 斯坦福 SR570 前置放大器

斯坦福(Stanford)STANFORD SR570前置放大器,作为音频与电子测量领域的璀璨明珠,以其无与伦比的性能与精湛的工艺,赢得了全球专业人士的广泛赞誉。这款前置放大器不仅是技术的集大成者,更是艺术与科学的完美…

论文学习 | 《电动汽车锂离子电池健康状态估计及寿命预测方法研究》

Hi,大家好,我是半亩花海。本文主要对上述论文《电动汽车锂离子电池健康状态估计及寿命预测方法研究》进行学习与阅读总结,便于后续科研进一步学习(纯小白自读汇总版)。总体感觉这篇有点偏向数理方面,不过后…

【动手学深度学习】8.2. 文本预处理(个人向笔记)

本节将解析文本的常见预处理步骤包括:将文本作为字符串加载到内存中。将字符串拆分为词元(如单词和字符)。建立一个词表,将拆分的词元映射到数字索引。将文本转换为数字索引序列,方便模型操作。 1. 读取数据集 我们下…

leetcode-73-矩阵置零

题解: 1、获取矩阵的行数M与列数N; 2、 代码实现: