Mysql数据库DQL查询语言之表连接(联合查询)

表连接

关系字段:两表中有关联关系的字段

\关系字段:两表之间存在关系的字段

  • 什么是表连接?

    • 当我们的查询结果需要从多张表中获取时,此时应该让表之间建立连接,同时获取数据

内连接

  • 特点:同时对连接双方做约束,双方只有符合连接条件的数据才会进行显示

select 表名.列名, 表名.列名,...
from 表名1 inner join 表名2
on 连接条件  -- 两表间的关系字段
-- 查询员工的id、工资与部门名称
    -- 第一步:确定数据来自于哪些表
    -- 第二步:确定两表之间的关系字段
    -- 书写表连接完成查询操作
​
select  e.employee_id 员工id,e.salary 员工工资,d.department_name  -- 基于连接结果进行查询操作
from employees e inner join departments d -- 起别名,方便后续书写
on e.department_id=d.department_id -- 关系字段:员工表的部门id=部门表的部门id

from-->join on:确定数据来源

select:查询操作

左外连接

  • 特点:左表中的数据无论如何都会显示,右表中的数据只有符合连接条件才会显示

select 表名.列名, 表名.列名,...
from 左表 left outer join 右表
on 连接条件  -- 两表间的关系字段
-- 使用左外连接显示员工信息及其部门信息
select e.*,d.*
from employees e left outer join departments d -- 员工信息无论如何都会显示,部门信息符合连接条件才会显示
on e.department_id=d.department_id

右外连接

  • 特点:右表中的数据无论如何都会显示,左表中的数据只有符合连接条件才会显示

select 表名.列名, 表名.列名,...
from 左表 right outer join 右表
on 连接条件  -- 两表间的关系字段
-- 使用右外连接显示部门信息及对应员工信息
select  e.*,d.*
from employees e right outer join departments d
on e.department_id=d.department_id

连接关键字中的inner、outer可以省略

全外连接(了解)

  • 特点:对双方都不做约束

  • 作用:将两个查询结果进行合并

查询结果1 union 查询结果2
  • 使用:

    1. 合并双方字段数目、内容必须一致

    2. union关键字可以去重

    3. union all 不会对结果去重

-- 查询员工表所有信息
select employee_id,first_name,salary from employees
union all -- 合并,不去重
-- 查询员工表所有信息
select employee_id,first_name,salary from employees

自连接

  • 特点:是特殊的表连接,参与连接的是同一张表

  • 使用:

    • 表中的两个字段为关系字段,作为连接条件

      -- 按照指定要求查询员工信息:员工id,员工姓名,直接领导的id,直接领导的姓名
      select e1.employee_id 员工id,e1.first_name 员工姓名,e1.manager_id 领导id,e2.first_name 领导姓名
      from employees e1 left join employees e2 -- e1:员工信息  e2:领导信息
      on e1.manager_id=e2.employee_id  -- 连接条件:员工的领导id=领导的员工id
    • 连接双方判断同一字段,作为连接条件

      -- 查询工资相同的员工id及其工资
      select e1.employee_id,e1.salary,e2.employee_id,e2.salary
      from employees e1 left join employees e2 -- 连接参与比较的两个员工
      on e1.salary=e2.salary -- 两个员工的工资相同
      where e1.employee_id>e2.employee_id
  1. 如果查询字段来自于多张表,内连接或左外连接

  2. 如果查询字段来自于一张表并且来自同一行数据,则简单查询|子查询

  3. 如果查询字段来自于一张表但是不来自于同一行数据。则自连接

多表连接

  • 特点:同时从多张表中获取数据

select 表名.列名, 表名.列名,...
from 表1 left join 表2
on 连接条件  -- 表1和表2的关系字段
left join 表3
on 连接条件  -- 表1和表3的关系字段|表2和表3的关系字段
-- 查询员工id,员工姓名,所属部门id,部门名称,部门所在城市
select e.employee_id,e.first_name,d.department_id,d.department_name,l.city
from employees e left join departments d  -- 先让员工表和部门表建立连接
on e.department_id=d.department_id  -- 员工的部门id=部门的id
left join locations l  -- 再让地址表参与连接
on d.location_id=l.location_id  -- 部门表的地址id=地址表的id

实际开发中,不建议表连接超过3张表,否则会有性能问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot集成mybatis时idea控制台中文乱码问题解决

在application.yml中配置好映射文件打印数据库日志文件时,控制台出现乱码的情况解决如下 问题 在执行查询操作的时候,查询时可以查看是没有问题的,但是控制台乱码了 解决 在File-Setting-Editor-File Encodings中设置如图所示就可以了 现在…

打 jar 包运行 在windows 平台控制台和日志 乱码解决

--拒絕鷄巴囉嗦,直接解決問題 我们在Windows下运行jar包时,常常会出现乱码,主要分为dos窗口输出的日志中出现乱码和程序返回数据出现乱码。 dos窗口输出的日志中出现乱码 执行如下命令,将控制台输出编码改为UTF8: ch…

c++文件操作(2)-- 按照指定格式读写文件

目录 按照指定格式写文件 代码说明: 按照指定格式读文件 -- 解析一定格式的字符串 代码说明: 注意: 问: 为什么使用getline()? 按照指定格式写文件 在实际开发中,我们以一定的格式写入文件当中。 其实就是使用stringstream类对…

【vite】找不到模块“vite”或其相应的类型声明

今天在用vite搭建项目时,在vite.config.ts文件中 ts报错找不到模块“vitejs/plugin-vue”或其相应的类型声明。 原因:项目中缺少了相应的依赖包或 TypeScript 类型声明。可以按照以下步骤进行检查: 1. 确保安装了相应的依赖包 如果在pack…

Unity中URP下获取额外灯数量

文章目录 前言一、SimpleLit下额外灯数量的获取1、在 SimpleLit 下,先获取了额外灯的数量2、对其进行循环计算每一个额外灯3、GetAdditionalLightsCount在这里插入图片描述 二、GetAdditionalLightsCount实现了什么1、_AdditionalLightsCount.x2、unity_LightData.y…

Tarjan 算法(超详细!!)

推荐在 cnblogs 上阅读 Tarjan 算法 前言 说来惭愧,这个模板仅是绿的算法至今我才学会。 我还记得去年 CSP2023 坐大巴路上拿着书背 Tarjan 的模板。虽然那年没有考连通分量类似的题目。 现在做题遇到了 Tarjan,那么,重学,开…

防御课程—华为USG6000V1的配置实验(一)

实验拓扑: 实验分析 由实验拓扑图需求分析可知我们在生产区和办公区需要用到子接口技术 实验配置 在Cloud1上配置 在DMZ区域配置 在server1上配置在server2上配置在防火墙上进行的配置 由实验拓扑图可知防火墙与DMZ区域相连的接口为GigabitEthernet1/0/0接口 …

初识SpringBoot

SpringBoot以约定大于配置的核心思想,默认帮我们进行了很多设置,简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架 。 创建的包一定要在项目主程序入口…

【排序算法】C语言实现归并排序,包括递归和迭代两个版本

文章目录 🚀前言🚀归并排序介绍及其思想🚀递归实现🚀迭代实现 🚀前言 大家好啊!阿辉接着更新排序算法,今天要讲的是归并排序,这里阿辉将讲到归并排序的递归实现和迭代实现&#xff…

CPU中的算术逻辑单元(ALU)

ALU有2个单元,1个算术单元和1个逻辑单元 算数单元 1 bit加法 半加器 由一个异或门(XOR)和与门(AND)两个逻辑门构成,异或门表示无进位加法(sum),而与门表示进位&…

k-Wave仿真例程:创建超声换能器并绘制声场分布

k-Wave介绍 k-Wave软件是为了模拟超声波在1D、2D或3D中的传播。 应用示例包括: - 均匀和非均匀介质中的传播 - 模拟各种类型的传感器 - 模拟多普勒效应 - 衍射、折射和反射 - 光声、超声成像 - 波束合成、成像重建 - 模拟弹性波 安装k-Wave 安装k-Wave需要几个步…

基于springboot+vue的小徐影城管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

移动端测试如何学,超详细的APP测试攻略送上

前言 随着手机应用市场发展的逐渐成熟,手机APP已经渗透到人们的吃穿住行生活,比如手机支付APP、通讯APP、各大应用软件等,关于手机APP安全性能的重要性不言而喻。 鉴于此,做好手机APP测试对于软件开发方把控产品质量有着重要意义…

计算机408真的很难吗❓|深度分析+实操上岸规划

在下面这篇文章中,LUCEN详细分析了24考研的难度以及25考研人该怎么办 24考研计算机很难!25考研你就这么干 如果你对于计算机考研择校有任何疑问,那么下面这篇文章一定能够帮助你: 计算机择校指南,内含300所院校 如…

Linux命令-top

1、top命令简介 top命令是linux系统常用命令之一,能够实时显示系统各个进程的资源占用情况,类似于windows系统的任务管理器。 需要注意的是:top命令监控的最小单位是进程,如果想监控更小单位时,就需要用到ps或者nets…

代码评审——随机数Random问题

问题描述: 为了获取唯一值,经常会依赖产生随机数来保证唯一性。在获取随机数时,如果使用错误的方法,会比较低效。 可以参考以下代码: public static String geneRundomNo(){Random rnew Random();int numr.nextInt(…

springboot114基于多维分类的知识管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的基于多维分类的知识管理系统 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章…

Server-Sent Events(SSE)简单实现实时通信

Server-Sent Events(SSE)是一种基于HTTP的实时通信协议,它允许服务器向客户端推送信息。相比于传统的轮询方式,SSE 提供了更加轻量级和实时的通信机制。在本文中,我们将深入浅出地介绍如何简单实现 Server-Sent Events…

在上海做程序员这么多年,退休后我的工资是多少?

大家好,我是拭心。 最近看到一个很可惜的事:有个阿姨在深圳缴纳了 12 年社保,第 13 年家里突然有事不得不回老家,回去后没再缴纳社保,结果退休后无法领退休工资,还得出来打工赚钱。 之所以这样&#xff0…

STL常用容器—stack与queue容器(栈与队列)

STL常用容器—stack与queue容器(栈与队列) stack容器1. stack容器模型图2. stack 基本概念3. stack 常用接口 queue 容器1. queue 容器模型图2. queue 基本概念3. queue 常用接口 参考博文1:<C> stack与queue容器概念模…