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

在这里插入图片描述

个人简介: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.mzph.cn/news/147022.shtml

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

相关文章

新加坡服务器搭建网站出现PHP错误怎么处理?

当您在新加坡服务器上搭建 PHP 网站时&#xff0c;显示错误信息是非常重要的。PHP 错误的及时检测和解决有助于提高网站的稳定性和安全性。以下是一些步骤&#xff0c;帮助您在新加坡服务器上实现这一目标&#xff1a; 步骤 1&#xff1a;编辑 PHP 配置文件 打开您的新加坡服务…

使用Pandas进行时间重采样,充分挖掘数据价值

大家好&#xff0c;时间序列数据蕴含着很大价值&#xff0c;通过重采样技术可以提升原始数据的表现形式。本文将介绍数据重采样方法和工具&#xff0c;提升数据可视化技巧。 在进行时间数据可视化时&#xff0c;数据重采样是至关重要且非常有用的&#xff0c;它支持控制数据的…

5、OpenCV介绍、环境搭建及实战

这一部分介绍下 OpenCV 以及它的安装和使用,因为后面一些文章中的示例代码会基于OpenCV的库做开发。 什么是OpenCV? OpenCV 是一个被广泛使用的开源计算机视觉库,它提供了大量的传统图像处理算法和基于深度学习的计算机视觉算法,以及用于图像和视频处理的方法。 OpenCV 的…

ControlNet原理及应用

《Adding Conditional Control to Text-to-Image Diffusion Models》 目录 1.背景介绍 2.原理详解 2.1 Controlnet 2.2 用于Stable Diffusion的ControlNet 2.3 训练 2.4 推理 3.实验结果 3.1 定性结果 3.2 消融实验 3.3 和之前结果比较 3.4 数据集大小的影响 4.结…

Vite 启动默认只能访问localhost解决方法

事情的经过是因为我需要测试本地项目的接口,然后因为burp默认不抓取localhost,127.0.0.1 .而且我也不想去修改burp. 所以我通过本地IP地址访问项目, 发现项目无法访问。 默认启动 所以特此记录一下。 在本地项目的package.json 中需要运行的脚本后 添加 --host即可。 具体如下…

spring给静态成员注入 你试过吗?

给静态成员注入 你试过吗? public class TempDataTransformUtilDto {Autowiredprivate static ICityCascadeService cityCascadeService;private static CstShareEmpMapper cstShareEmpMapper;private static PubUserInfoMapper pubUserInfoMapper; }如果ICityCascadeService…

Java重写和重载的区别,

Java中的重写&#xff08;Override&#xff09;和重载&#xff08;Overload&#xff09;都是面向对象编程的重要概念&#xff0c;它们的区别如下&#xff1a; 在定义上&#xff1a; 重载是在同一个类中定义多个方法&#xff0c;它们的方法名相同但参数不同。 重写是子类重新定义…

C++ 继承和派生

继承和派生 一个新类从已有的类那里获得其已有特性&#xff0c;这种现象称为类的继承。 从父类产生一个子类&#xff0c;称为派生。 基类与派生类的关系&#xff1a;派生类是基类的具体化&#xff0c;而基类是派生类的抽象。 定义基类和派生类 定义基类 例&#xff1a;一个…

rabbitMQ的扇出模式(fanout发布订阅)的生产者与消费者使用案例

扇出模式 fanout 发布订阅模式 生产者 生产者发送消息到交换机&#xff08;logs&#xff09;,控制台输入消息作为生产者的消息发送 package com.esint.rabbitmq.work03;import com.esint.rabbitmq.RabbitMQUtils; import com.rabbitmq.client.Channel;import java.util.Scanne…

使用FP8加速PyTorch训练

现代的人工智能硬件架构(例如&#xff0c;Nvidia Hopper, Nvidia Ada Lovelace和Habana Gaudi2)中&#xff0c;FP8张量内核能够显著提高每秒浮点运算(FLOPS)&#xff0c;以及为人工智能训练和推理工作负载提供内存优化和节能的机会。 在这篇文章中&#xff0c;我们将介绍如何修…

Arduino驱动LM35线性温度传感器(温湿度传感器)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 LM35半导体的温度传感器,可以用来对环境温度进行定性的检测。LM35半导体温度传感器是美国国家半导体公司生产的线性温度传感器。其测温范围是-40℃到150℃,灵敏度为10mV/℃,输出电压与温度成正比。

<C++> 反向迭代器

我们知道正向迭代器的设计&#xff1a;begin迭代器指向第一个数据&#xff0c;end迭代器指向最后一个数据的下一个位置 。移向下一个数据&#xff0c;解引用得到数据的值&#xff0c;并根据容器储存方式的不同&#xff0c;容器有不同类型的迭代器。 注意&#xff1a;rbegin迭代…

c语言:模拟实现qsort函数

qsort函数的功能&#xff1a; qsort相较于冒泡排序法&#xff0c;不仅效率更快&#xff0c;而且能够比较不同类型的元素&#xff0c;如&#xff1a;浮点数&#xff0c;结构体等等。这里我们来模拟下qsort是如何实现这一功能的&#xff0c;方便我们对指针数组有一个更深层次的理…

龙芯 操作系统选择和安装

龙芯3a5000及之后的cpu底层架构已经从mips64el改为了loongarch64 所以这里分了2种来说明&#xff0c;分别对应3a4000之前的和3a5000之后的 龙芯的系统安装难点在于操作系统的选取和引导 一、烧录工具 制作安装盘使用常规的烧录工具是不行滴&#xff0c;会提示没有\boot\initrd…

webpack的安全保障是怎么做的?

文章目录 前言Webpack 内容安全策略后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;webpack &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;感…

阿里云linux升级新版本npm、nodejs

在阿里云服务器上编译部署NextJS工程发现 alibaba linux默认yum install npm安装的版本太低, 使用以下方式升级node、npm新版本。 1、卸载现有版本 yum remove nodejs npm -y2、安装新版本 sudo yum install https://rpm.nodesource.com/pub_21.x/nodistro/repo/nodesource-…

STM32的启动流程

1、STM32上电启动的主要步骤 a、初始化堆栈指针sp_initial_sp&#xff0c;初始化PC指针pcReset_Handler。 b、初始化中断向量表。 c、配置系统时钟。 d、调用 C 库函数_main 初始化用户堆栈&#xff0c;然后进入 main 函数。 2、STM32的三种启动模式 复位后&#xff0c;在 S…

从底层原理看Android的序列化是如何实现的

对于Java的序列化&#xff0c;我们可以认为是在数据传输的时候的一套协议或者是一个标准&#xff0c;因为Java存在自己特定的一个数据结构&#xff08;class&#xff09;&#xff0c;举个例子 data class User(val name: String,val age: Int )User是一个对象&#xff0c;我们…

产品经理必备技能:如何快速锁定种子用户群体?

大家好&#xff0c;我是小米&#xff0c;一名热爱技术、热衷分享的90后小青年。今天我们要探讨的话题是一个在产品经理面试中经常被问到的问题&#xff1a;“产品上线后的种子用户该如何获取&#xff1f;”作为一个热爱挑战、乐于探讨的小伙伴&#xff0c;我将和大家分享一些我…

一、MySQL.pratice.search

MySQL是一种常用的关系型数据库管理系统&#xff0c;广泛应用于各种Web应用程序中。在编程中&#xff0c;使用MySQL进行数据操作是非常常见的操作。在MySQL中&#xff0c;查询是最常用的操作之一&#xff0c;可以查询整个表或者根据特定的条件查询数据。 文章目录 一、查询&am…