8.MySQL复合查询

目录

  • 复合查询
    • 基本查询回顾
    • 多表查询 - 笛卡尔积
    • 自连接
    • 子查询
      • 单行子查询
      • 多行子查询
      • 多列子查询
      • 在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.mzph.cn/bicheng/57979.shtml

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

相关文章

HTML+JavaScript案例分享: 打造经典俄罗斯方块,详解实现全过程

在本文中,我们将深入探讨如何使用 JavaScript 实现经典的俄罗斯方块游戏。俄罗斯方块是一款广为人知的益智游戏,通过操纵各种形状的方块,使其在游戏区域内排列整齐,以消除完整的行来获得分数。 效果图如下: 一、游戏界面与布局 我们首先使用 HTML 和 CSS 来创建游戏的界面…

java智能物流管理系统源码(springboot)

项目简介 智能物流管理系统实现了以下功能: 智能物流管理系统的主要使用者分为管理员,顾客,员工,店主。功能有个人中心,顾客管理,员工管理,店主管理,门店信息管理,门店…

gin入门教程(4):路由与处理器

路由与处理器 在 Gin 框架中,路由和处理器是核心组成部分,负责将 HTTP 请求映射到相应的处理逻辑。 1. 定义路由 在 cmd/main.go 中,您可以定义不同的路由,例如: r.GET("/ping", func(c *gin.Context) {…

.NET 8 Web API从基础到提高全面示例

.NET 8 Web API从基础到提高全面示例 概述:1. 设置 .NET 8 Web API 项目概念使用 .NET CLI 创建新的 Web API 项目。这设置了一个基本的项目结构,包括启动和 WeatherForecast 控制器作为示例。Program.cs代码示例dotnet new webapi -n MyWebApi2. Prog…

查看Chrome安装路

谷歌Google浏览器查看安装路径,浏览器Google Chrome浏览器查看安装路径 chrome://version/ 来源:笔记云

如何训练SDXL,finetune,Docker,实战教程

启动容器: docker run -it --rm --gpus all --net host --shm-size=16g -v /root/xiedong:/root/xiedong kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-xformers-lora-train bash启动webui: cd /workspace/lora-scriptspython gui.py --host "0.0.0.0…

自动化桌面通知:使用Plyer库实现工作提醒

1. 引言 在日常工作中,我们经常需要设置各种提醒来帮助自己记住重要的事情。利用Python编程语言和plyer库,我们可以非常方便地创建一个自动化桌面通知系统,它可以在特定时间或周期性地向用户展示通知消息。 2. 安装Plyer库 在开始编码之前…

idea安装visualVm插件

idea 安装visualVM插件用于分析java程序, 1.在插件市场安装visualvm launcher 2.安装成功后,重启idea,此时启动按钮旁边有这两个按钮 3.需要在这里配置插件的visualvm位置 4.配置完后,点击启动

10.25学习

1.程序链接库 程序链接库(Library),通常简称为库,是程序设计中一种常用的代码组织方式。它包含了一组预先编写好的代码,这些代码可以被多个不同的程序调用,以实现特定的功能。使用链接库的主要目的包括&am…

已解决 django.db.utils.OperationalError: (1051, “Unknown table

报错信息: django.db.utils.OperationalError: (1051, "Unknown table bjybolg.tool_submission")python manage.py migrate --fake 命令用于告诉 Django 假装已经应用某个迁移,而不实际执行该迁移的操作。这通常在以下情况下非常有用&#x…

Layout 布局组件快速搭建

文章目录 设置主题样式变量封装公共布局组件封装 Logo 组件封装 Menu 菜单组件封装 Breadcrumb 面包屑组件封装 TabBar 标签栏组件封装 Main 内容区组件封装 Footer 底部组件封装 Theme 主题组件 经典布局水平布局响应式布局搭建 Layout 布局组件添加 Layout 路由配置启动项目 …

Linux: Shell编程入门

Shell 编程入门 1 ) Shell 概念 shell 是 在英语中 壳, 外壳的意思可以把它想象成嵌入在linux这样的操作系统里面的一个微型的编程语言不像C语言, C 或 Java 等编程语言那么完整,它可以帮我们完成很多自动化任务例如保存数据监测系统的负载等等,我们同样…

windows手动配置IP地址与DNS服务器以及netsh端口转发

在Windows系统中,配置主机的IP地址、子网掩码和网关地址可以通过以下步骤手动设置。这在某些情况下是必要的,例如当你需要确保网络接口使用特定的IP地址或网关时。 手动设置IP地址、子网掩码和网关地址的步骤 打开“网络和Internet设置”: 右…

【ArcGIS Pro实操第8期】绘制WRF三层嵌套区域

【ArcGIS Pro实操第8期】绘制WRF三层嵌套区域 数据准备ArcGIS Pro绘制WRF三层嵌套区域Map-绘制三层嵌套区域更改ArcMap地图的默认显示方向指定数据框范围 Map绘制研究区Layout-布局出图 参考 本博客基于ArcGIS Pro绘制WRF三层嵌套区域,具体实现图形参考下图&#xf…

从零开始学五笔(七):折区字根

讲解格式: 先介绍按键的区位号、口诀内容、口诀说明然后列每个字根能组成什么汉字,难拆字将用中括号标出 ‍ N 键 区位号:51 口诀:已半巳满不出己,左框折尸心和羽 说明: 已半巳满不出己:指…

掘金.数字魔法的加一操作(中等03)

import java.math.BigInteger;public class Main {public static int solution(int n, int k, String numStr) {//1.使用可变字符串StringBufferStringBuffer sb new StringBuffer(numStr);//2.循环k次for (int i 0; i < k; i) {//2.1 创建临时可变字符串 StringBuffer ne…

Python经典案例之简易计算器

先来看一段代码 # 定义函数 def add(x, y):"""相加"""return x ydef subtract(x, y):"""相减"""return x - ydef multiply(x, y):"""相乘"""return x * ydef divide(x, y):"…

CentOS 8修改Linux配置文件指定属性的值

1.前提&#xff1a; 存在test空文件&#xff08;test位于/etc/sysconfig/network-scripts目录&#xff09; 2.test文件插入内容&#xff1a; 1&#xff09;添加内容&#xff1a;IPADDR192.168.132.129 echo IPADDR192.168.132.129 | sudo tee -a /etc/sysconfig/network-sc…

Linux中级(DNS域名解析服务器)

一。产生原因1.IP地址&#xff1a;是互联网上计算机唯一的逻辑地址&#xff0c;通过IP地址实现不同计算机之间的相互通信&#xff0c;每台联网计算机都需要通过IP地址来互相联系和分别&#xff0c;但由于IP地址是由一串容易混淆的数字串构成&#xff0c;人们很难记忆所有计算机…

大数据治理平台建设规划方案(71页WORD)

随着信息化时代的到来&#xff0c;大数据已成为企业管理和决策的重要基础。然而&#xff0c;大数据的快速增长和复杂性给数据的管理和治理带来了巨大挑战。为了有效应对这些挑战&#xff0c;构建一个高效、稳定的大数据治理平台显得尤为重要。 文档介绍&#xff1a; 该平台旨在…