5.mysql多表查询
MYSQL多表查询
- MYSQL多表查询
- 1.多表关系
- 笛卡尔积
- 2. 多表查询概述
- 2.1 内连接
- 2.2 外连接
- 2.3自连接
- 联合查询union ,union all
- 2.4子查询
- 2.4.1标量子查询
- 2.4.2列子查询
- 2.4.3行子查询
- 2.4.4表子查询
MYSQL多表查询
create table student(id int auto_increment primary key COMMENT 'ID',name varchar(10) comment '姓名',no varchar(10) comment '学号'
)comment '学生表';insert into student values(null,'lisa','20001'),(null,'tracy','20002'),(null,'janms','20003'),(null,'qiaodan','20004');create table course(id int auto_increment primary key COMMENT 'ID',name varchar(10) comment '姓名'
)comment '课程表';insert into course values(null,'Java'),(null,'PHP'),(null,'Mysql'),(null,'Hadoop');create table student_course(id int auto_increment primary key COMMENT 'ID',studentid int not null comment '学生id',courseid int not null comment '课堂id',CONSTRAINT fk_courseid foreign key (courseid) REFERENCES course (id),CONSTRAINT fk_studentid foreign key (studentid) REFERENCES student(id)
)comment '学生课程中间表';insert into student_course values(null,1,2),(null,1,1),(null,2,1),(null,3,1);
1.多表关系
一对多:在多的一方设置外键,关联一的一方的主键
多对多:建立中间表,中间表包含两个外键,关联两张表的主键
一对多: 通常用于表结构拆分表,对应的拆分表字段任意一方设置unique外键,关联另一方的主键
笛卡尔积
select * from emp,dept
–多表查询,查询出结果的所有集合情况-笛卡尔积,消除无效的笛卡尔积,通过where条件关联字段筛选;
多表连查消除笛卡尔积
SELECT s.name,s.no,c.name from student s,student_course sc,course c where s.id=sc.studentid and c.id=sc.courseid;
2. 多表查询概述
-
连接查询
-
内连接:相当于查询A、B交集部分的数据
-
外连接
左外连接:查询左表所有数据,以及两张表交集部分数据
右外连接:查询右表所有数据,以及两张表交集部分数据
-
-
子查询
2.1 内连接
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件;
显示内连接
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件;
内连接查询的是两张表的交集部分
#隐式连接
select * 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;#显示连接
SELECT e.name,d.name from emp e inner join dept d on e.dept_id=d.id;
2.2 外连接
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
#左外连接
SELECT * from emp e left outer join dept d on e.dept_id=d.id;
#右外连接
SELECT d.*,e.* from emp e right outer join dept d on e.dept_id=d.id;
2.3自连接
SELECT 字段列表 FROM 表A 别名A INNER JOIN 表A 别名B ON 条件;
SELECT e2.name,e1.name from emp e1 inner join emp e2 on e1.id=e2.managerid
查询员工姓名,以及领导姓名;包括领导为空的员工
SELECT e2.name as '员工',e1.name from emp e2 left join emp e1 on e1.id=e2.managerid
联合查询union ,union all
union将多个查询结果联合起来
SELECT*FROM 表1
UNION ALL
SELECT*FROM 表1;
#union all直接合并结果
SELECT * from emp where salary <10000
union all
SELECT * from emp where age>32
结果
union查询结果进行去重
#union查询结果进行去重
SELECT * from emp where salary <10000
union
SELECT * from emp where age>32
对于联合查询的多张表的字段必须保持一致
2.4子查询
子查询:
- 标量子查询(查询结果为单个值)
- 列子查询(查询结果为一列)
- 行子查询(子查询结果为一行)
- 表子查询(子查询结果为多行多列)
概念:SQL语句中嵌套的SELECT语句,称为嵌套查询,又称子查询。
SELECT * FROM t1 WHRER column1=(SELECT column1* FROM t2);
子查询外部的语句可以是INSERT /UPDATE/DELETE/SELECT 的任何一个
2.4.1标量子查询
子查询返回结果是单个值(数字、字符串、日期等),最简单的形式
常用的操作:=、 <> 、> 、>= 、< 、 <=
2.4.2列子查询
列子查询:子查询的返回结果是一列(可以使多行)
常用的操作符:IN 、NOT IN 、ANY、SOME、ALL
操作符 | 描述 |
---|---|
IN | 在指定的集合范围内,多选一 |
NOT IN | 不在指定的集合范围内 |
ANY | 子查询列表内,有任意一个满足 |
SOME | 与some等同 |
ALL | 子查询返回的列表的所有值必须满足 |
列子查询
查询比财务部所有人工资都高的员工信息
1.查询财务人员工资
SELECT id from dept where name='财务部';SELECT salary from emp where dept_id= (SELECT id from dept where name='财务部');
2.比财务部人所有人工资都高SELECT * from emp where salary >all (SELECT salary from emp where dept_id= (SELECT id from dept where name='财务部'));
2.4.3行子查询
子查询的返回结果是一行(可以使多列)
常用的操作:=、 <>、IN、NOT IN
查询与张无忌薪资及直属领导相同的员工信息
1.先查询张无忌的薪资与直属领导
SELECT salary,managerid from emp where name='张无忌';
2.查询与张无忌薪资及领导一样的员工信息
SELECT * from emp where (salary,managerid)=(12500,1);
3.合并sql
SELECT * from emp where (salary,managerid)= (SELECT salary,managerid from emp where name='张无忌');
2.4.4表子查询
子查询返回的结果是多行多列
常用的操作符:IN
与张三与张财务薪资职位相同的员工信息
SELECT job,salary from emp where name='张三' or name='张财务';SELECT * from emp where (job,salary) in (SELECT job,salary from emp where name='张三' or name='张财务')
查询在2004-01-01之后入职的员工和对应的部门
1.先查询2004-01-01之后的员工信息
SELECT * from emp where entrydate>'2004-01-01'2.查询员工对应的部门 左连接包含2004-01-01之后入职没有部门的员工
SELECT e.* ,d.* from (SELECT * from emp where entrydate>'2004-01-01') e left join dept d on e.dept_id=d.id;
相关文章:

5.mysql多表查询
MYSQL多表查询 MYSQL多表查询1.多表关系笛卡尔积 2. 多表查询概述2.1 内连接2.2 外连接2.3自连接联合查询union ,union all 2.4子查询2.4.1标量子查询2.4.2列子查询2.4.3行子查询2.4.4表子查询 MYSQL多表查询 create table student(id int auto_increment primary …...

【前端面试】挖掘做过的nextJS项目(上)
为什么使用nextJS 需求: 快速搭建宣传官网 1.适应pc、移动端 2.基本的路由跳转 3.页面渲染优化 4.宣传的图片、视频资源的加载优化 5.seo优化 全栈react web应用、 tailwind css原子工具的支持,方便书写响应式ui app router(React 服务器组件)支持服务器渲…...
【Unity-UGUI】UGUI知识汇总
目录 前言1 UGUI系统原理2 事件系统2.1 EventSystem2.2 InputModules2.3 Raycasters2.4 协作 3 UGUI系统的组件3.1 Image和RawImage3.2 Mask和RectMask2D 扩展UI穿透问题 前言 记录一些最近学到的有关UGUI的知识。 参考 知乎:6千字带你入门UGUI源码 书籍ÿ…...
JavaScript性能测试:策略、工具与实践
在Web开发中,性能测试是确保应用程序达到预期响应速度和处理能力的关键步骤。JavaScript作为构建交互式Web应用的核心语言,其性能直接影响用户体验。本文将详细介绍如何使用JavaScript进行性能测试,包括性能测试的基本概念、测试类型、工具、…...

嵌入式软件开发学习一:软件安装(保姆级教程)
资源下载: 江协科技提供: 资料下载 一、安装Keil5 MDK 1、双击.EXE文件,开始安装 2、 3、 4、此处尽量不要安装在C盘,安装路径选择纯英文,防止后续开发报错 5、 6、 7、弹出来的窗口全部关闭,进入下一步&a…...
SpringMVC学习中遇到的不懂注解记录
文章目录 Autowrite 和 ResourceQualifier 和 PrimaryPathVariableController、Service、Repository 和 Component Autowrite 和 Resource 我们先讲讲 Autowrite 注解 吧。 public class StudentService3 implements IStudentService {//Autowiredprivate IStudentDao studentD…...
Java面试题--分布式锁
分布式锁 你说一下什么是分布式锁 分布式锁是在分布式/集群环境中解决多线程并发造成的一系列数据安全问题.所用到的锁就是分布式锁,这种锁需要被多个应用共享才可以,通常使用Redis和zookeeper来实现。 分布式锁有哪些解决方案 常用的三种方案 基于…...

一文讲清数据平台与数据中台的关系与区别
前言 如果您是IT领域或者数据领域的从业者,一定对IT行业“创造”概念的能力深有体会,也一定经常被看起来名称相似,但又不同的各种概念绕的云里雾里,摸不着头脑。今天我们要讨论的是数据平台和数据中台两个概念,您是不…...
Android的Service和Thread的区别
Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。 Android Service是组件,既不能说它是单独的进程也不能说它是单独的线程。 如果非要从通俗的语言层面来理解的话,姑且将其理解为对象。这个Service对象本身作为应用程序的一部分与它的…...

经纬恒润亮相第四届焉知汽车年会,功能安全赋能域控
8月初,第四届焉知汽车年会在上海举行。此次年会围绕当下智能电动汽车的热点和焦点,聚焦于智能汽车场景应用、车载通信、激光雷达、智能座舱、功能安全、电驱动系统等多个领域,汇聚了来自OEM、科技公司、零部件供应商、测试认证机构、政府院校…...
掌握JavaScript单元测试:最佳实践与技术指南
单元测试是软件开发过程中的关键环节,它帮助开发者确保代码的每个独立部分按预期工作。在JavaScript开发中,进行单元测试不仅可以提高代码质量,还可以加快开发速度,因为它们为代码更改提供了安全网。本文将详细介绍如何使用JavaSc…...

spring boot 古茶树管理系统---附源码19810
目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2古茶树管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2经济可行性分析 2.1.3操作可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 …...
00067期 matlab中的asv文件
今天在编写代码的过程中,发现自动生成.m文件的同名文件.asv,特此发出疑问?下面是解答: 有时在存放m文件的文件夹中会出现*.asv asv 就是auto save的意思,*.asv文件的内容和相应的*.m文件内容一样,用记…...

JMeter高效管理测试数据-参数化
文章目录 1.什么是参数化2.定义变量3.CSV数据文件设置 1.什么是参数化 在JMeter中,参数化是一种常用的技术,用于使测试场景更加灵活和动态。通过参数化,你可以让JMeter在每次请求中使用不同的值,这在模拟真实用户行为或测试不同输…...
python学习之writelines
在Python中,writelines() 是一个方法,它属于文件对象,用于将字符串列表写入到文件中。这个方法接受一个序列(如列表或元组)作为参数,序列中的每个元素都是要写入的一行文本。 ### 函数定义: p…...

STM32学习笔记13-FLASH闪存
FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程读写FLASH的用途: 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在…...

UIButton的UIEdgeInsetsMake属性(setTitleEdgeInsets,setImageEdgeInsets)
一.UIEdgeInsetsMake的四个属性 UIEdgeInsetsMake 有四个属性,依次是 Top,left,bottom,right [Btn setTitleEdgeInsets:UIEdgeInsetsMake( top, left, bottom, right)]; 四个属性的默认值为0,拿其中一个left属性来聊, 你可以理解为文字距离Btn左边界的“位移”是0, 如果…...

子网掩码是什么?
子网掩码(Subnet Mask)是用于划分网络的一个32位的二进制数,用于指示IP地址中哪些位用于网络标识,哪些位用于主机标识。 在IPv4网络中,IP地址由32位二进制数组成,通常表示为四个十进制数,每个数…...
SQLALchemy 数据的 CRUD 操作
SQLALchemy 数据的 CRUD 操作 导入必要的模块创建数据库引擎创建会话CRUD 操作创建(Create)读取(Read)更新(Update)删除(Delete)过滤条件使用 `filter` 方法使用 `filter_by` 方法总结聚合函数使用ORM接口使用SQL表达式语言注意关闭会话注意事项SQLAlchemy 是一个流行的…...

reactFiberLane
Lane (车道模型) 英文单词lane翻译成中文表示"车道, 航道"的意思, 所以很多文章都将Lanes模型称为车道模型 Lane模型的源码在ReactFiberLane.js, 源码中大量使用了位运算(有关位运算的讲解, 首先引入作者对Lane的解释(相应的 pr), 这里简单概括如下: Lane类型被定义…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...