MySql学习4:多表查询

news2024/9/22 23:31:07

教程来源

黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括

多表关系

各个表结构之间存在各种关联关系,基本上分为三种:一对多(多对一)、多对多、一对一

一对多(多对一)
例如:部门与员工的关系。一个部门对应多个员工、一个员工对应一个部门(不考虑一个员工对应多个部门的情况)

实现:在多的一方建立外键,指向一的一方的主键

多对多
例如:学生与课程的关系。一个学生可以选修多门课程,一门课程也可以供多个学生选择

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两份主键
在这里插入图片描述
在这里插入图片描述
一对一
例如:用户与用户详情的关系。一对一关系多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率。

比如:提高查询性能,当一张表中数据过多时查询会变得缓慢;可以使数据库结构更清晰,每个表的结构更加简单

可以在任何一方加入外键,关联另一方的主键,并且设置外键为唯一的。
在这里插入图片描述

多表查询概述

指从多张表中查询数据。

笛卡尔积

在这里插入图片描述
笛卡尔积:指在数学中,两个集合A、B的所有组合情况。在多表查询时需要消除无效的笛卡尔积
在这里插入图片描述
分类

  • 连接查询

    • 内连接:相当于查询A、B交集的部分
    • 外连接:
      • 左外连接:查询左表所有数据,以及两张表交集部分数据
      • 右外连接:查询右表所有数据 ,以及两张表交集部分数据
    • 自连接:当前表与自身的连接查询,自连接必须使用表别名
  • 子查询

内连接

内连接查询的是两张表交集的部分

隐式内连接

select 字段 from 表1,2 where 条件

显示内连接

select 字段列表 from 表1 join 表2 on 连接条件

查询员工工号、姓名及所在部门的名称

// 隐式内连接
select emp.workno,emp.name,dept.dept_name  from emp,dept where emp.dept_id = dept.id;
// 显示外连接
select emp.workno,emp.name,dept.dept_name from emp join dept on emp.dept_id = dept.id;

在这里插入图片描述

外连接

左外连接

select 字段 from 表1 left join 表2 on 条件

查询emp表的所有数据,和对应的部门信息

select emp.*,dept.dept_name  from emp left join dept on emp.dept_id = dept.id;

在这里插入图片描述
这里与内连接的区别,假如有一个新员工刚入职还没有对应的部门,内连接是不会查询出该员工的信息,而左外连接会查询到该信息。

内连接是两边都要有;左外连接是左边都要有,右边可以不要有

右外连接

select 字段 from 表1 right join 表2 on 条件

查询dept的所有数据,和对应的员工表的信息

自连接

select 字段列表 from 表A join 表A 别名B  on 条件

自连接查询,可以是内连接查询,也可以是外连接查询。
例如,当表中的数据具有层级结构时,可以使用自连接来查询父子关系或者层级关系。比如,在员工表中查询员工的上级领导或者下属。

自连接可以帮助我们在同一表中进行比较和分析操作,解决一些复杂的查询需求。但是需要注意,在使用自连接时需要谨慎处理好连接条件,避免出现无限循环或者性能问题。

select emp.*,a.name  from emp join emp as a where emp.manager_id = a.id ;

在这里插入图片描述

联合查询

联合查询就是把多次查询的结果合并起来,形成一个新的查询结果集。比如,查询出薪资低于5000的员工和年龄大于60的员工。

关键字:union all union,后者是对前者的一个数据去重。

联合查询时多张表的列数必须保持一致、字段类型也需要保持一致。

select 字段列表 from a 条件
union 
select 字段列表 from b 条件

子查询

SQL中嵌套select语句,称为嵌套查询,又称子查询。

select * from t1 where column1 = (select column1 from t2)

子查询的外部语句可以是insertdeleteupdateselect中的任何一个

根据子查询的结果,可以分为:

  • 标量子查询,子查询结果是单个值
  • 列子查询,子查询的结果是一列
  • 行子查询,子查询的结果是一行
  • 表子查询,子查询的结果为多行多列

标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),这种子查询称为标量子查询。

常用的操作符有:><!==

查询出研发中心的所有员工信息:
1)先查询出研发中心的部门id
2)根据部门id查询员工信息

select * from emp where dept_id = (select id from dept where dept_name = '研发中心')

列子查询

子查询返回的结果是一列(可以是多列),这种子查询称为列子查询
常用的操作符有:innot inandsomeall

查询交付中心和研发中心的所有员工信息
1)查询出交付中心和研发中心的部门id
2)根据部门id查询员工信息

select * from emp where dept_id  in (select id from dept where dept_name in ('交付中心','研发中心'))

行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询
常用的操作符有:><!==

查询与秦一的性别相同的同部门员工信息
1)查询秦一的性别与部门id
2)根据性别和部门id查询员工信息

select * from emp where (sex ,dept_id) = (select sex ,dept_id  from emp where name = '秦一')

表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询

常用操作符:in

查询与秦一、李二的性别和部门相同的员工信息

select * from emp where (sex ,dept_id) in (select sex ,dept_id  from emp where name = '秦一' or name = '李二')

查询入职日期是2023-06-12之后的员工信息,及其部门信息

select e.*,d.* from (select * from emp where entrydata > '2023-06-12') as e 
left join dept as d on e.dept_id = d.id

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

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

相关文章

论文阅读 The Power of Tiling for Small Object Detection

The Power of Tiling for Small Object Detection Abstract 基于深度神经网络的技术在目标检测和分类方面表现出色。但这些网络在适应移动平台时可能会降低准确性&#xff0c;因为图像分辨率的增加使问题变得更加困难。在低功耗移动设备上实现实时小物体检测一直是监控应用的…

计网第四章(网络层)(四)

目录 一、IP数据报的发送和转发过程 发送&#xff1a; 1.直接交付和间接交付 如果判断源主机和目的主机是否在同一个网络中&#xff1f; 2.默认网关&#xff1a; 转发&#xff1a; 路由表&#xff1a; 一、IP数据报的发送和转发过程 发送&#xff1a; 由主机发送IP数据…

统信OS国产操作系统身份证读卡器社保卡读卡web网页开发使用操作流程

用于DONSEE系列身份证阅读器谷歌Chrome火狐Firefox插件&#xff0c;支持的型号有&#xff1a;EST-100、EST-100GS、EST-100G、EST-100U、EST-200G、EST-J13X等。 本方案无缝支持最新版本谷歌Chrome火狐Firefox等网页浏览器&#xff0c;支持H5、Vue、React、Node.js、Electron、…

Java“牵手”天猫商品销量API接口数据,天猫API接口申请指南

天猫平台商品销量接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取天猫商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品销量接口API是一种用于获取电商平台上商品销量数据的接口&#xff0c;通过…

mysql 命令行 执行sql文件

方法1 source source file.sql; file.sql : 绝对路径或 相对路径。 方法2 mysql -u xxx -p < file.sql 方法3 MySQLImport 工具 mysqlimport [options] database file_name 其中&#xff0c;database为要导入数据的数据库名&#xff0c;file_name为要导入的SQL文件名。还可以…

框架分析(5)-Django

框架分析&#xff08;5&#xff09;-Django 专栏介绍Django核心概念以及组件讲解模型&#xff08;Model&#xff09;视图&#xff08;View&#xff09;模板&#xff08;Template&#xff09;路由&#xff08;URLconf&#xff09;表单&#xff08;Form&#xff09;后台管理&…

【动态规划】1137. 第 N 个泰波那契数

Halo&#xff0c;这里是Ppeua。平时主要更新C&#xff0c;数据结构算法&#xff0c;Linux与ROS…感兴趣就关注我bua&#xff01; 文章目录 0. 题目解析1.算法原理1.1 状态表示1.2 状态转移方程1.3初始化1.4 填表顺序1.5 返回值 2.算法代码 &#x1f427; 本篇是整个动态规划的…

RT-Thread 时钟管理

时钟节拍 任何操作系统都需要提供一个时钟节拍&#xff0c;以供系统处理所有和时间有关的事件&#xff0c;如线程的延时、时间片的轮转调度以及定时器超时等。 RTT中&#xff0c;时钟节拍的长度可以根据RT_TICK_PER_SECOND的定义来调整。rtconfig.h配置文件中定义&#xff1a…

软件测试用例经典方法 |一文了解软件测试规范

软件测试规范是测试工作的依据和准则&#xff0c;在进行软件测试时&#xff0c;应在相关国标文件的要求和指导下完成测试工作&#xff0c;这样可以从根本上保证软件测试工作的质量&#xff0c;进而提升软件产品的质量。 一个完整的软件测试规范应该包括对规范本身的详细说明&a…

Python(.pyc)反编译:pycdc工具安装与使用

本文将介绍如何将python的.pyc文件反编译成源码&#xff0c;以便我们对源码的学习与改进。pycdc工具安装 下载地址&#xff1a; 1、Github地址&#xff1a;https://github.com/zrax/pycdc &#xff0c;下载后需要使用CMake进行编译。 2、已下载好及编译好的地址&#xff1a;ht…

Java多线程(十二)

目录 一、多线程环境使用哈希表 1.1 HashTable 1.2 ConcurrentHashTable 二、ConcurrentHashMap和Hashtable、HashMap 的区别 一、多线程环境使用哈希表 HashMap 本身就是线程不安全的&#xff0c;所以在多线程的环境下可以使用&#xff1a;HashTable、 ConcurrentHashMap 1.…

Mysql中explain执行计划信息中字段详解

Mysql中explain执行计划信息中字段详解 1. 获取执行计划2. 字段含义2.1 id2.2 select_type2.3 table2.4 partitions2.5 type2.6 possible_keys2.7 key2.8 ley_len2.9 ref2.10 rows2.11 extra 1. 获取执行计划 explain select * from t1; --或 desc select * from t1;2. 字段含…

Pandas数据分析教程-数据清洗-扩展数据类型

pandas-02-数据清洗&预处理 扩展数据类型1. 传统数据类型缺点2. 扩展的数据类型3. 如何转换类型文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清洗的常用方法:包括缺失值、重复值、异常值处理,数据类型统计,分…

23款奔驰GLE450轿跑升级原厂外观暗夜套件,战斗感满满的

升级的方案基本都是替换原来车身部位的镀铬件&#xff0c;可能会有人问&#xff1a;“难道直接用改色膜贴黑不好吗&#xff1f;”如果是贴膜的话&#xff0c;第一个是颜色没有那么纯正&#xff0c;这些镀铬件贴黑的技术难度先抛开不说&#xff0c;即使贴上去了&#xff0c;那过…

Mac电脑系统应该用什么软件进行优化清理?

作为一枚资深的Windows系统使用者&#xff0c;小编刚刚转向Mac系统的怀抱时&#xff0c;各种不适应&#xff0c;Windows系统中普遍使用的360清理软件目前暂时没有Mac版本的&#xff0c;这就让小编很是头疼了&#xff0c;大家的Mac都是用的什么清理软件呢&#xff1f; 经过一番…

Notion团队协作魔法:如何玩转数字工作空间?

Notion简介 Notion已经成为现代团队协作的首选工具之一。它不仅仅是一个笔记应用&#xff0c;更是一个强大的团队协作平台&#xff0c;能够满足多种工作场景的需求。 Notion的核心功能 Notion提供了丰富的功能&#xff0c;如文档、数据库、看板、日历等&#xff0c;满足团队的…

USB接口发展历程大全

1996年&#xff0c;由英特尔、微软、ibm等多家公司联合设计的usb标准问世&#xff0c;键盘、鼠标、智能手机以及打印机等等大多使用usb标准来实现供电和数据传输。 usb接口从诞生之初就是为了实现通用这个目的。在usb诞生之前&#xff0c;键盘、鼠标多使用ps二接口&#xff0c…

Doris异常处理

1、decimal 字段异常 修改为 2、连接超时 Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure The last packet successfully received from the server was 1,068 milliseconds ago. The last packet sent successfully to the ser…

kali开启SSH服务(简单无比)

1.切换到管理员用户&#xff1a; su root 提示输入root密码 2.启动SSH服务 命令为&#xff1a; /etc/init.d/ssh start 或者 systemctl start ssh 3.查看SSH服务状态是否正常运行&#xff0c;命令为&#xff1a; /etc/init.d/ssh status 图片仅供参考&#xff1a;

一文了解BFD技术:实现故障快速检测!

一、概诉 BFD提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制&#xff0c;有以下两大优点&#xff1a; 1.对相邻转发引擎之间的通道提供轻负荷、快速故障检测。 2.用单一的机制对任何介质、任何协议层进行实时检测。 BFD是一个简单的“Hello”协议。两个…