MySQL_多表查询

news2024/12/26 11:09:10

多表查询

  1. 概述:多表查询就是多张表之间的查询。

    • 回顾:SELECT * FROM table_name

    • 多表查询 from 后面就得跟多张表。如:select * from emp,dept

      在这里插入图片描述

  2. 笛卡尔积:笛卡尔积在数学中,表示两个集合,集合 A 和集合 B的所有组成情况。

    在这里插入图片描述

  3. 如何在 sql 中去消除笛卡尔积尼?在sql 查询中,只需要加上一定的条件,就可以消除无效数据,消除笛卡尔积。

    • 比如,查询马云的时候,加上部门id 的条件,就可以消除其它无效数据

多表查询的分类

连接查询

  • 内连接查询(相当于查询我们集合的交集部分(C))

    在这里插入图片描述

内连接查询

  1. 注意:无法查询没有关联关系的数据
隐式内连接查询
  1. 语法:

    SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;
    
    
    
    SELECT * FROM emp,dept where emp.dept_id = dept.id
    

    在这里插入图片描述

显式内连接查询
  1. 语法

    SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;
    
    
    
    SELECT * FROM emp JOIN dept on emp.dept_id = dept.id;
    

    在这里插入图片描述

内连接查询的案例
  1. 查询每一个员工的姓名 , 及关联的部门的名称 (隐式内连接实现)

    • 表结构: emp , dept

    • 连接条件: emp.dept_id = dept.id

      SELECT emp.name ‘员工姓名’ ,dept.name ‘部门名称’ from emp,dept where emp.dept_id = dept.id;


      SELECT e.name ‘员工姓名’, d.name ‘部门名称’
      FROM emp e,dept d
      where e.dept_id = d.id;

    在这里插入图片描述

  2. 查询每一个员工的姓名 , 及关联的部门的名称 (显式内连接实现) — INNER JOIN …ON …

    • 表结构: emp , dept

    • 连接条件: emp.dept_id = dept.id

      SELECT e.name ‘员工姓名’,d.name ‘部门名称’
      FROM emp e JOIN dept d ON e.dept_id = d.id;

      SELECT e.name ‘员工姓名’,d.name ‘部门名称’
      FROM emp e INNER JOIN dept d ON e.dept_id = d.id;

  3. 注意:一旦起了别名,就不能用表直接使用,此时只能使用别名,inner 可以省略(不影响任何效果,开发中基本不使用)

    在这里插入图片描述

外连接查询

  1. 外连接查询分为左外连接和右外连接
左外连接
  1. 语法(包含左表的所有数据,也包含两张表交集的数据):

    SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;
    

    在这里插入图片描述

右外连接
  1. 语法(相当于查询右边表的所有数据,也包含两张表的交集部分):

    SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;
    

    在这里插入图片描述

外连接查询的案例
  1. 查询emp表的所有数据, 和对应的部门信息,由于需求中提到,要查询emp的所有数据,所以是不能内连接查询的,需要考虑使用外连接查询。

    • 表结构: emp, dept

    • 连接条件: emp.dept_id = dept.id

      SELECT e.*,d.* from emp e left join dept d on e.dept_id = d.id;

  2. 查询dept表的所有数据, 和对应的员工信息(右外连接)由于需求中提到,要查询dept表的所有数据,所以是不能内连接查询的,需要考虑使用外连接查询。

    • 表结构: emp, dept

    • 连接条件: emp.dept_id = dept.id

      SELECT e.*,d.* from emp e right join dept d on e.dept_id = d.id;
      SELECT e.*,d.* from dept d left join emp e on e.dept_id = d.id;

外连接查询注意
  1. 左外连接,右外连接可以相互替换(只不过是颠倒顺序的问题),在开发中,你任意使用,我偏向于喜欢左连接

自连接查询

  1. 概述:自己连接自己,也就是把一张表当成两张表来查询,自连接查询可以使用内连接或者外连接查询

  2. 语法(必须使用别名)

    SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;
    
自连接查询的案例
  1. 查询员工 及其 所属领导的名字

    SELECT   e.name '员工姓名' , ee.name '领导名称'  FROM emp e,emp ee where e.managerid = ee.id
    
  2. 查询所有员工 emp 及其领导的名字 emp , 如果员工没有领导, 也需要查询出来

    SELECT   e.name '员工姓名' , ee.name '领导名称'  FROM emp e left join emp ee on e.managerid = ee.id
    

联合查询

  • union查询

    • 把多次查询的结果合并起来,形成一个新的查询结果集
  • union all 查询

    • 将全部的数据直接合并到一起(union) 会去重
  • 语法

    SELECT 字段列表 FROM 表名 ...
    UNION [ALL]
    SELECT 字段列表 FROM 表名 ...
    
  • 要求:对于联合查询,必须保持查询的列长度一致,字段类型也需要保持一致

    在这里插入图片描述

联合查询的案例
  1. 将薪资低于 5000 的员工 , 和 年龄大于 50 岁的员工全部查询出来.

    select * from emp where salary < 5000 
        union 
    select * from emp where age > 50 
    
  2. 注意:使用 union all 不会去重,只是把两张表的结果集做一个逻辑合并

    在这里插入图片描述

子查询

  1. 概述,实质是一种嵌套查询,把查询出来的结果集作为新表来进行查询

  2. 语法:

    SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );
    
  3. 对于增删改查来说,都可以使用子查询的方式

  4. 分类

    • 标量子查询(查询出来的结果是单个值)
    • 列子查询(子查询的结果为一列)
    • 行子查询(子查询出来的结果是一行)
    • 表子查询(子查询查出来的结果是多行多列的)
  5. 查询位置

    • where
    • from
    • select

标量子查询

  1. 查询结果是单个值(数值,日期),常用一些操作位,= ,!=,>,<,>=,<=

  2. 案例:

    • 查询 “研发部” 的所有员工信息

      SELECT * FROM emp where dept_id = (SELECT id from dept where name = '研发部');
      
    • 查询在 “马云” 入职之后的员工信息

      SELECT * FROM emp where entrydate > (SELECT entrydate from emp where name = '马云');
      

列子查询

  1. 子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

    • 常用操作符

      • IN
      • NOT IN
      • ANY 有任意一个满足就行
      • SOME 有任意一个满足就行 ANY 和 SOME 可以替换
      • ALL 必须全部满足
  2. 案例:

    • 查询 “销售部” 和 “市场部” 的所有员工信息

      SELECT * FROM emp WHERE dept_id in (SELECT id FROM dept where name = '销售部' or name = '市场部');
      
    • 查询比 “财务部” 所有人工资都高的员工信息

      SELECT * FROM emp where salary > all(SELECT salary from emp where dept_id = (SELECT id from dept where name = '财务部'))
      
    • 查询比研发部其中任意一人工资高的员工信息

      SELECT * FROM emp WHERE salary > any(SELECT salary from emp where dept_id = (SELECT id from dept where name = '研发部'))
      

行子查询

  1. 概述:子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

  2. 常用操作符

    • =
    • !=
    • IN
    • NOT IN
  3. 案例:

    • 查询与 “谢世煌” 的薪资及直属领导相同的员工信息

      SELECT  * FROM emp where (managerid,salary) = (SELECT managerid,salary from emp where name = '谢世煌');
      

表子查询

  1. 概述:就是查询的结果返回多行多列,这种子查询就是表子查询

  2. 常用操作符

    • IN
  3. 案例

    • 查询与 “韩敏” , “蒋芳” 的职位和薪资相同的员工信息

      select * from emp where (job,salary) in ( SELECT job,salary from emp where name = '韩敏' or name = '蒋芳')
      
    • 查询入职日期是 “2006-01-01” 之后的员工信息 , 及其部门信息

      SELECT e.name '员工姓名' ,e.salary '薪资', d.name '部门名称' 
          FROM  (SELECT * FROM emp where entrydate > '2006-01-01') e
          LEFT JOIN dept d on  d.id = e.dept_id
      

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

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

相关文章

LeetCode--HOT100题(26)

目录 题目描述&#xff1a;142. 环形链表 II&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;142. 环形链表 II&#xff08;中等&#xff09; 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返…

聊聊无锁、匿名偏向锁、偏向锁、轻量级锁、重量级锁

锁的竞争可以理解是markword的竞争。 一、简介 本文做作为知识点的补充&#xff0c;有些情况并没有进行测试。 二、markword结构图 64位虚拟机markword结构图&#xff1a; 三、锁的多种状态 我们一般认为锁的状态是&#xff1a;无锁、偏向锁、轻量级锁、重量级锁&#xff…

SpringBoot 整合MyBatis

整合MyBatis 官方文档&#xff1a;http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/ Maven仓库地址&#xff1a;https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter/2.1.3 整合测试 导入 MyBatis 所需要的…

springboot工程集成前端编译包,用于uni-app webView工程,解决其需独立部署带来的麻烦,场景如页面->画布->图片->pdf

前端工程 访问方式 http://127.0.0.1:8080/context/frontEnd/index放行 public class SecurityConfig extends WebSecurityConfigurerAdapter { "/frontEnd/**",SysFrontEndController import lombok.extern.slf4j.Slf4j; import nl.basjes.shaded.org.springfram…

新零售智慧生态电商系统搭建,开源多用户商城系统开发(H5、Java)

搭建新零售智慧生态电商系统和开源多用户商城系统需要进行以下具体步骤&#xff1a; 1. 确定需求&#xff1a;首先明确系统的功能需求和技术要求&#xff0c;包括用户注册和登录、商品管理、购物车、订单管理、支付等功能。 2. 选择技术架构&#xff1a;确定使用的开发语言和…

C++笔记之将定时器加入向量并设置定时器的ID为i

C笔记之将定时器加入向量并设置定时器的ID为i code review! 文章目录 C笔记之将定时器加入向量并设置定时器的ID为i关于代码中的void operator()() 运行 代码 #include <chrono> #include <iostream> #include <thread> #include <vector>// 定义定时…

shell脚本变量

shell脚本变量 1.变量概述1.1变量类型1.2变量的命令要求1.3 变量作用范围1.4几个符号作用 2.局部变量3.环境变量3.1系统内置环境变量 4. 只读变量5.位置变量6.预定义变量7.四个配置文件作用 1.变量概述 变量即在程序运行过程中它的值是允许改变的量变量是用一串固定的字符串去…

(docker)mysql镜像拉取-创建容器-容器的使用【个人笔记】

【容器的第一次创建】 容器的第一次创建&#xff0c;需要先下载镜像&#xff0c;从 镜像拉取 0、可以搜索镜像的版本 docker search mysql1、先拉取MySQL的镜像&#xff0c;默认拉取最新版&#xff0c;使用下面的命令拉取mysql镜像 docker pull mysql也可以指定mysql的版本…

日撸java_day60

文章目录 小结k近邻算法&#xff08;knn&#xff09;定义算法流程距离度量k值的选择总结 聚类定义k-means聚类步骤k-means算法小结 小结 k近邻算法&#xff08;knn&#xff09; 定义 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别…

Llms大模型中国开源项目大全(更新至2023-08-10)

一、前言 你了解中国ChatGPT相关开源项目的情况吗&#xff1f; 如果想要从事chatGPT相关项目的开发和研究&#xff0c;有哪些可以借鉴和开源项目&#xff1f; 中国的chatGPT开源项目发展如何&#xff0c;本文将给你带来答案。 二、项目概述 数据截至到&#xff1a;2023年8月1…

由于目标计算机积极拒绝,无法连接。 Could not connect to Redis at 127.0.0.1:6379

项目在启动时候报出redis连接异常 然后查看是redis 连接被计算机拒绝 解决方法 打开redis安装文件夹 先打开redis-servce.exe挂着&#xff0c;再打开redis-cli.exe 也不会弹出被拒接的问题了。而且此方法不用每次都去cmd里输入命令。

大连交通大学813软件工程考研习题

1.什么是软件生存周期模型?有哪些主要模型? 生存周期模型&#xff1a;描述软件开发过程中各种活动如何执行的模型。对软件开发提供强有力的支持&#xff0c;为开发过程中的活动提供统一的政策保证&#xff0c;为参与开发的人员提供帮助和指导&#xff0c;是软件生存周期模型…

【雕爷学编程】Arduino动手做(07)---旋转电位器模块之结构特点、作用、参数与测量

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

jstack 使用

.、用 ps -ef | grep -i java 命令&#xff0c;找出 Java|tomcat 进程 pid&#xff0c;用于查看全格式进程。 .、用 ps -aux | grep -i java 命令&#xff0c;找出 Java|tomcat 进程 pid&#xff0c;用于查看进程。.、用 top -Hp <pid> 命令&#xff0c;找出 CPU 占用最高…

【雕爷学编程】Arduino动手做(201)---搭建行空板开发环境之SSH连接

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

关于城市地下综合管廊运维火灾风险因素的探讨

安科瑞 华楠 摘要&#xff1a;随着城市基础设施的不断完善&#xff0c;地下综合管廊作为城市生命线工程得到了快速发展&#xff0c;综合管廊后期运维周期较长&#xff0c;如何有效保障管廊内各管线安全运行显得尤为重要。本文从地下综合管廊火灾的特点出发&#xff0c;根据燃烧…

【LeetCode】144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 144. 二叉树的前序遍历 144. 二叉树的前序遍历 题目&#xff1a; 给你二叉树的根节点 root &…

开放式耳机推荐品牌,开放式耳机评测

​在忙碌的生活中&#xff0c;音乐成为我们放松心灵、享受美好的方式之一。而一副出色的蓝牙耳机&#xff0c;则能为我们带来沉浸式的音乐体验&#xff0c;仿佛让我们置身于音乐的海洋中。不入耳佩戴设计&#xff0c;耳挂在耳朵上&#xff0c;更舒适稳固&#xff0c;也更加干净…

16通道AD采集FMC子卡推荐哪些?

FMC149是一款16通道65MHz采样率14位直流耦合AD采集FMC子卡&#xff0c;符合VITA57.1规范&#xff0c;可以作为一个理想的IO模块耦合至FPGA前端&#xff0c;16通道AD通过FMC连接器&#xff08;HPC&#xff09;连接至FPGA从而大大降低了系统信号延迟。 该板卡支持板上可编程采样…

Vue3 —— reactive 全家桶及源码学习

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 上一篇学习了 ref 全家桶&#xff0c;在此基础上一起学习下 reactive 全家桶 一、reactive 对比 ref ref 可以接收 所有类型&#xff0c;reactive 只…