⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询

news2024/12/23 3:22:19

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

内连接、外连接、自连接、子查询、多表查询

  • ⑧MySQL数据库查询
    • 1. 多表关系
    • 2. 多表查询
      • 🚀内连接 —— INNER JOIN
      • 🚀左外连接 —— LEFT OUTER JOIN
      • 🚀右外连接 —— RIGHT OUTER JOIN
      • 🚀自连接 —— JOIN
      • 🚀联合查询 —— UNION、UNION ALL
      • 🚀子查询(嵌套查询)


⑧MySQL数据库查询


1. 多表关系

多表关系

  • 一对一 :在任意一方加入外键,关联另一方的主键,并设置外键为唯一(UNIQUE)。
  • 一对多(多对一) :在的一方建立外键,指向的一方的主键。
  • 多对多 :建立第三张表作为中间表,中间表至少包含两个外键,分别关联双方主键



2. 多表查询

多表查询

  • 在多张表中查询数据。
  • 笛卡尔积:两个集合,集合A 与 集合B中元素的所有组合情况,在多表查询时需要使用WHERE关键字JOIN ON关键字消除笛卡尔积。

🚀内连接 —— INNER JOIN

连接查询 —— 内连接

  • 内连接:

    • ①隐式内连接

      • SELECT 字段列表 FROM1,2 WHERE 连接条件...;
        
    • ②显示内连接

      • SELECT 字段列表 FROM1 [INNER] JOIN2 ON 连接条件...;
        
  • == 内连接查询的是两张表交集的部分 ==

  • 在这里插入图片描述

    • -- 演示:
      
      -- 查询员工姓名,以及关联的部门名称(隐式内连接)
      -- 表:员工表emp、部门表dept
      SELECT emp.name,dept.name 
      FROM emp,dept 
      WHERE emp.dept_id = dept.id;
      
      -- 查询员工姓名,以及关联的部门名称(显示内连接)
      -- 表:员工表emp、部门表dept
      SELECT emp.name,dept.name 
      FROM emp INNER JOIN dept ON emp.dept_id = dept.id;
      
      



🚀左外连接 —— LEFT OUTER JOIN

连接查询 —— 左外连接

  • 外连接 —— 左外连接:

    • 查询表1所有数据,包含表1和表2交集部分的数据。

      • SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 连接条件...;
        
    • -- 演示:
      
      -- 查询emp表所有数据,以及对应部门信息(dept表数据)
      -- 左外连接实现
      SELECT emp.*,dept.name 
      FROM emp LEFT JOIN dept 
      ON emp.`dept_id` = dept.`id`;
      



🚀右外连接 —— RIGHT OUTER JOIN

连接查询 —— 右外连接

  • 外连接 —— 右外连接:

    • 查询表2所有数据,包含表1和表2交集部分的数据。

      • SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 连接条件...;
        
  • -- 演示:
    
    -- 查询emp表所有数据,以及对应部门信息(dept表数据)
    -- 右外连接实现
    SELECT emp.*,dept.name 
    FROM dept RIGHT JOIN emp 
    ON emp.`dept_id` = dept.`id`;
    



🚀自连接 —— JOIN

连接查询 —— 自连接

  • 自连接:

    • ①自连接查询,可以是内连接查询,也可以是外连接查询

      • SELECT 字段列表 FROM1 别名A JOIN1 别名B ON 连接条件...;
        
    • -- 演示
      
      -- 查询emp表员工 及其 所属领导的名字
      -- 使用内连接
      SELECT e1.`name` 员工,e2.`name` 领导
      FROM emp e1 JOIN emp e2 ON e1.`managerid` = e2.`id`;
      
      -- 查询emp表员工 及其 所属领导的名字,如果员工没有领导,也需要查询出来
      -- 使用外连接
      SELECT e1.`name` 员工,e2.`name` 领导
      FROM emp e1 LEFT JOIN emp e2 ON e1.`managerid` = e2.`id`;
      



🚀联合查询 —— UNION、UNION ALL

联合查询

  • UNION查询就是把多次查询的结果合并,行程新的结果集

    • -- 使用UNION,对结果去重
      -- 使用UNION ALL,不对结果去重
      -- 要求联合的多个查询字段列表的 类型与数量 需要保持一致
      SELECT 字段列表 FROM 表A ...
      UNION [ALL]
      SELECT 字段列表 FROM 表B ...;
      
  • -- 演示
    
    -- 查询薪资低于5000 以及 年龄大于50的员工
    -- 使用UNION,对结果去重
    -- 使用UNION ALL,不对结果去重
    SELECT * FROM emp WHERE emp.`salary` < 5000
    UNION
    SELECT * FROM emp WHERE emp.`age` > 50;
    



🚀子查询(嵌套查询)

子查询

  • 子查询:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询

    • SELECT * FROM1 WHERE 字段1 = (SELECT 字段1 FROM2);
      
    • 子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT

  • 子查询分类(根据子查询结果不同):

    • 标量子查询(子查询结果为单个值)

      • -- 演示
        
        -- ①标量子查询
        -- 1.查询“销售部”的所有员工信息
        SELECT * FROM emp 
        WHERE dept_id = (SELECT id FROM dept WHERE dept.`name` = '销售部');
        
        -- 2.查询在“方东白”之后入职的员工信息
        SELECT * FROM emp 
        WHERE entrydate > (SELECT entrydate FROM emp  WHERE NAME = '方东白');
        
    • 列子查询(子查询结果为一列)

      • 常见操作符:

        • IN:在指定的集合范围之内,多选一
        • NOT IN不在指定的集合范围之内。
        • ANY:子查询返回列表内,有任意一个满足即可
        • SOME与ANY相同,使用SOME的地方都可以使用ANY。
        • ALL:子查询返回列表的所有值都必须满足
      • -- 演示
        
        -- ②列子查询
        -- 1. 查询“销售部” 和 “市场部” 所有员工信息
        SELECT * FROM emp
        WHERE emp.`dept_id` IN(SELECT id FROM dept WHERE NAME IN('销售部','市场部'));
        
        -- 2. 查询比财务部所有人工资都高的员工信息
        SELECT * FROM emp 
        WHERE emp.`salary` > 
        	ALL(SELECT salary FROM emp WHERE dept_id = 
        		(SELECT id FROM dept WHERE dept.`name` = '财务部'));
        		
        -- 3. 查询比财务部 任意一人 工资高的员工信息
        SELECT * FROM emp 
        WHERE emp.`salary` > 
        	ANY(SELECT salary FROM emp WHERE dept_id = 
        		(SELECT id FROM dept WHERE dept.`name` = '财务部'));
        
    • 行子查询(子查询结果为一行)

      • -- 演示
        
        -- ③行子查询
        -- 查询与“张无忌” 薪资 以及 直属领导 相同的员工信息
        SELECT * FROM emp 
        WHERE (salary,managerid) = 
        (SELECT salary,managerid FROM emp WHERE NAME = '张无忌');
        
    • 表子查询(子查询结果为多行多列)

      • -- 演示
        
        -- ④表子查询
        -- 查询入职时间是“2006-01-01”之后入职的员工信息及其部门信息
        SELECT e.*,dept.name 
        FROM(SELECT * FROM emp WHERE emp.`entrydate` > '2006-01-01') e
        LEFT JOIN dept ON e.dept_id = dept.`id`;
        




在这里插入图片描述

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

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

相关文章

汽车ECU的虚拟化技术初探(三)--U2A虚拟化辅助功能分析1

目录 1.基本概述 1.1 U2A虚拟化辅助功能 1.2 U2A虚拟化使能和资源分配 2. U2A架构概述 3. CPU运行模式 3.1 虚拟化模式 3.2 限制运行模式 3.3 权限运行模式 3.4 CPU运行模式小结 4.小结 1.基本概述 1.1 U2A虚拟化辅助功能 在汽车ECU的虚拟化技术初探(二)-CSDN博客中…

MyBatis #{} 和 ${} 的区别

前言&#xff1a; #{} 和 ${} 的区别是 MyBatis 中一个常见的面试题&#xff0c;#{} 和 ${} 是MyBatis 中获取参数的两种方式&#xff0c;但我们在项目中大多数使用的都是 #{} 来获取参数&#xff0c;那么它们两个有什么区别呢&#xff1f; 区别 一. #{} 采用预编译 SQL&…

鸿蒙4.0开发笔记之DevEco Studio如何使用Previewer窗口预览器(一)

一、预览器作用 DevEco Studio预览器概况在HarmonyOS应用开发过程中&#xff0c;通过使用预览器&#xff0c;可以查看应用的UI效果&#xff0c;方便开发者实时查看应用的运行效果&#xff0c;随时调整代码。 二、打开Previewer预览器 1、正常启动 打开预览器的位置在DevEco…

Docker Swarm: 容器编排的力量和优势深度解析

文章目录 Docker Swarm的核心概念1. 节点&#xff08;Node&#xff09;2. 服务&#xff08;Service&#xff09;3. 栈&#xff08;Stack&#xff09; 使用Docker Swarm1. 初始化Swarm2. 加入节点3. 创建服务4. 扩展和缩减服务5. 管理栈6. 管理服务更新 Docker Swarm的优势深度解…

03.webpack中hash,chunkhash和contenthash 的区别

hash、contenthash 和 chunkhash 是通过散列函数处理之后&#xff0c;生成的一串字符&#xff0c;可用于区分文件。 作用&#xff1a;善用文件的哈希值&#xff0c;解决浏览器缓存导致的资源未及时更新的问题 1.文件名不带哈希值 const path require(path) const HtmlWebpac…

DMA原理和应用

目录 1.什么是DMA 2.DMA的意义 3.DMA搬运的数据和方式 4.DMA 控制器和通道 5.DMA通道的优先级 6.DMA传输方式 7.DMA应用 实验一: 内存到内存搬运 CubeMX配置&#xff1a; ​编辑用到的库函数&#xff1a; 代码实现思路&#xff1a; 实验二: 内存到外设搬运 CubeMX…

html-网站菜单-点击显示导航栏

一、效果图 1.点击显示菜单栏&#xff0c;点击x号关闭&#xff1b; 2.点击一级菜单&#xff0c;展开显示二级&#xff0c;并且加号变为减号&#xff1b; 3.点击其他一级导航&#xff0c;自动收起展开的导航。 二、代码实现 <!DOCTYPE html> <html><head>&…

Apache Doris (五十四): Doris Join类型 - Bucket Shuffle Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

场景交互与场景漫游-osgGA库(5)

osgGA库 osgGA库是OSG的一个附加的工具库&#xff0c;它为用户提供各种事件处理及操作处理。通过osgGA库读者可以像控制Windows窗口一样来处理各种事件 osgGA的事件处理器主要由两大部分组成&#xff0c;即事件适配器和动作适配器。osgGA:GUIEventHandler类主要提供了窗口系统的…

swin unetr的3D语义分割

基于monai库。其实我不是很喜欢这种&#xff0c;可扩展性太差了&#xff0c;除非说你想快速在自己的数据集上出结果。但是它的transform可以对3d医学图像增强操作&#xff0c;比torch的transform强一点&#xff0c;因为它的数据增强输入是&#xff08;x,y,z&#xff09;h,w,d格…

竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

文章目录 1 简介2 传统机器视觉的手势检测2.1 轮廓检测法2.2 算法结果2.3 整体代码实现2.3.1 算法流程 3 深度学习方法做手势识别3.1 经典的卷积神经网络3.2 YOLO系列3.3 SSD3.4 实现步骤3.4.1 数据集3.4.2 图像预处理3.4.3 构建卷积神经网络结构3.4.4 实验训练过程及结果 3.5 …

FPGA基础以太网

以太网数据通信 物理层&#xff1a;网线网卡&#xff08;PHY芯片&#xff09; 数据链路层&#xff1a;Mac层(数据有效传输&#xff09; 如图所示&#xff1a;FPGA中的Mac层中的MII接口负责控制PHY芯片&#xff0c;PHY芯片通过网线与PC端进行以太网数据传输。 FPGA中&#xff…

linux高级篇基础理论四(rsync,inotify,squid,KVM虚拟机)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…

利用NVIDIA DALI读取视频帧

1. NVIDIA DALI简介 NVIDIA DALI全称是NVIDIA Data Loading Library&#xff0c;是一个用GPU加速的数据加载和预处理库&#xff0c;可用于图像、视频和语音数据的加载和处理&#xff0c;从而为深度学习的训练和推理加速。 NVIDIA DALI库的出发点是&#xff0c;深度学习应用中…

springboot引入redisson分布式锁及原理

1.引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version> </dependency>2.配置类创建bean /*** author qujingye* Classname RedissonConfig* Description TOD…

相关系数和协方差的关系与区别

相关系数和协方差都是用来衡量两个变量之间关系的统计量&#xff0c;它们在描述变量之间的线性关系上提供了一些信息。下面是它们的关系与区别&#xff1a; 关系&#xff1a; 相关系数的计算涉及到协方差。相关系数等于协方差除以两个变量的标准差的乘积。具体而言&#xff0c…

深度优化数据库性能:Linux 内核参数调整解析

点击上方蓝字关注我 数据库服务器性能的优化是每个IT团队关注的焦点之一。除了数据库引擎的优化之外&#xff0c;合理调整操作系统的内核参数也是提高数据库性能的关键。本文将解析一些常见的 Linux 内核参数&#xff0c;以及它们在数据库服务器优化中的作用和建议的值。 1. 参…

Django学习日志07

多表查询&#xff08;跨表查询&#xff09; 子查询&#xff1a;分步查询 链表查询&#xff1a;把多个有关系的表拼接成一个大表(虚拟表) inner join left join 展示左表所有数据数据&#xff0c;右表展示符合查询条件的数据&#xff0c;查询不到的用null填充 …

工程建设智慧施工云平台源码 智慧工地平台源码

智慧工地平台源码 工程建设智慧施工云平台源码 技术框架&#xff1a;微服务架构JavaSpring Cloud UniApp MySql 智慧工地平台是一种智慧型、系统性的工地信息化解决方案&#xff0c;它把现代信息技术融入到建设工程管理中&#xff0c;协调各方资源&#xff0c;优化施工过程&…

LeetCode题 338比特位计数,20有效的括号,415字符串相加

目录 338比特位计数 题目要求&#xff1a; 解题思路&#xff1a; 1、暴力穷举 代码&#xff1a; 2、N&&#xff08;N - 1&#xff09;公式求解 代码&#xff1a; 3、奇偶数性质解法&#xff1a; 代码&#xff1a; 20有效的括号 题目要求&#xff1a; 解题思路 …