0

0

完全掌握mysql多表操作

WBOY

WBOY

发布时间:2022-03-28 13:48:22

|

2371人浏览过

|

来源于CSDN

转载

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了多表操作的相关问题,包括了多表关系、外键约束、多表联合查询、内连接查询和外连接查询等等,希望对大家有帮助。

完全掌握mysql多表操作

推荐学习:mysql教程

多表关系

一对一(一般是合并表),
一对多/多对一(部门和员工),
多对多(学生和课程)--用中间表

外键约束概念

专门用于多表关系的约束
通过主表的主键来控制从表的外键

外键约束:

1、主表必须已经存在,或者正在创建
2、必须要给主表设置主键列
3、主键不能包括空值,但是外键可以包括空值
4、在主表的表名后面指定的列明或者列名的组合。 这个列或列的组合必须是主表的主键或者候选键
5、外键中列的数目必须和主键中列的数目相同
6、外键中列的数据类型必须和主键中对应列的数据类型相同

• 创建外键约束 foreign key
在创建表之前添加外键约束
在这里插入图片描述

在创建表之后添加外键约束

在这里插入图片描述

验证外键约束的作用

1、数据插入:
要先给主表添加约束
从表添加约束要依赖于主表,主表没有的数据不能添加
在这里插入图片描述

2、数据删除
主表的数据被从表依赖时,不能删除,否则可以删除
从表的数据可以任意删除

eg:

delete from dept where deptno = '1001';-----不可以删除(被依赖了)delete from dept where deptno = '1004';
------可以删除delete from emp where eid = '7';  -----可以删除

删除外键约束

删除之后,表与表之间就没有关系了
语法:

alter table 表名字 drop foreign key 外键约束名alter table emp2 drop foreign key emp2_fk;

在这里插入图片描述

• 多对多关系-构建外键约束
A表的一行对应B表的多行,B表的一行对应A表的多行,这时候需要再重新建立一个中间表,记录表关系
在这里插入图片描述

注意:
修改和删除时,中间从表可以随便删除和修改,但是两边从表手主表依赖的数据不能删除或者修改。

多表联合查询(非常重要)

• 概念
就是同时 查询两个或者两个以上的表,因为有时候用户在查看数据的时候,需要显示的数据来自多张表

• 数据准备
注意:
外键约束只对数据的增删改起作用,对于数据查询没有影响

• 交叉连接查询 select * from A ,B;---会产生冗余数据

1、交叉连接查询返回返回被连接的两个表所有数据行的笛卡尔积
2、笛卡尔集可以理解为一张表的每一行去和另外一张表的任意一行进行匹配
3、假如A表有 m 行数据,B表有 n 行数据,则返回 m * n 行数据
4、笛卡尔积会产生很多冗余的数据,后期的其他查询可以在该集合的基础上进行条件筛选

内连接查询

求的是两个表之间的交集
在这里插入图片描述

inner 可以省略

隐式内连接(SQL92标准):

select * from A,B where 条件;

显式内连接(SQL99标准);

select * from A inner join B on 条件
---查询每个部门的所属员工  //隐式内连接
select* from dept3,emp3 where dept3.deptno = emp3.dept_id;  //这样写标准

还可以给表起别名,如;

易企CMS1.8
易企CMS1.8

易企CMS:国内首款完全基于SEO友好性开发的营销型企业网站系统,让企业网络营销从此易如反掌。 本程序特征:100%开发源代码,免费开源;后台管理操作简单易行;模板div+css标准设计,符合w3c标准,兼容主流浏览器;开发语言和数据库:PHP+Mysql。 本程序亮点:从基础代码开发起完全符合SEOWHY理论的SEO规范,力图实现国内首款对SEO最友好的企业网站开源程序,为企业网络营销的巨大成功

下载
select* from dept3  a ,emp3 b  where a.deptno = b.dept_id;
	---查询每个部门的所属员工  
	//显式内连接select *from dept3 inner join emp3  on dept3.deptno = emp3.dept_id;  
	//这样写标准

还可以给表起别名,如;

select *from dept3 a join emp3 b on a.deptno = b.dept_id;

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

外连接查询

分为:(outer可以 省略)
左外连接left outer join

select* from A left outer join B on 条件;

右外连接right outer join

select* from A right outer join B on 条件;

满外连接full outer join

select* from A full outer join B on 条件;

注意:
Oracle 里面有 full join ,可是在mysqlfull join 支持的不好,我们可以使用 union来达到目的
在这里插入图片描述

----外连接查询
----查询哪些部门有员工,哪些部门没有员工

use mydb3;select* from dept3 left outer join emp3 on dept3.deptno =emp3.dept_id;

----查询哪些员工有对应的部门,哪些没有

select* from dept3 right outer join emp3 on dept3.deptno =emp3.dept_id;

----使用 union 关键字实现左外连接和右外连接的并集

select* from dept3 left outer join emp3 on dept3.deptno=emp3.dept_idunionselect* from dept3 right outer join emp3 on dept3.deptno =emp3.dept_id;

在这里插入图片描述

----外连接查询
----查询哪些部门有员工,哪些部门没有员工

usemydb3;select* from dept3 a left outer join emp3 b on a.deptno = b.dept.idselect* from dept3 a left join emp3 b on a.deptno = b.dept_id;

----外连接多个表

select* from Aleft join B on 条件1left join C on 条件2left join D on 条件3;

在这里插入图片描述

----查询哪些员工有对应的部门,哪些没有

select * from dept3 a right outer join emp3 b on a.deptno = b.dept_id;select* from dept3 a right join emp3 b on a.deptno = b,dept_id;select*from Aright joinB on条件1,right joinC on条件2,right joinD on条件3;

在这里插入图片描述

----实现满外连接: full join
----使用 union 关键字实现左外连接和右外连接的并集
----select * from dept3 a full join emp3 b on a.deptno = b.dept_id; --不能执行

----union是将两个查询结果上下拼接,并去重

select* from dept3 a left join emp3 b on a.deptno = b.dept_idunionselect* from dept3 a right join emp3 b on a.deptno = b.dept_id

----union all 是将两个查询结果上下拼接,不去重

select* from dept3 a left join emp3 b on a.deptno = b.dept_idunion allselect* from dept3 a right join emp3 b on a.deptno= b.dept_id

在这里插入图片描述

• 基本子查询
• 子查询关键字-ALL
• 子查询关键字-ANY ,SOME
• 子查询关键字-IN
• 子查询关键字-EXISTS
• 自关联查询

推荐学习:mysql视频教程

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

12

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

4

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

18

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 815人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号