开始MySQL之路——外键关联和多表联合查询详细概述

news2024/9/24 13:13:19

多表查询和外键关联

实际开发中,一个项目通常需要很多张表才能完成。例如,一个商城项目就需要分类表,商品表,订单表等多张表。且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表方面的知识。

多表关系

MySQL多表之间的关系可以概括为:

一对一关系
  • 一个学生只有一张身份证;一张身份证只能对应一学生。

  • 在任一表中添加唯一外键,指向另一方主键,确保一对一关系。

  • 一般一对一关系很少见,遇到一对一关系的表最好是合并表。

一对多/多对一关系

部门和员工

分析:一个部分有多个员工,一个员工只能对应一个部门,实际原则:在多的一方建立外键,指向一的一方。

多对多关系

学生和课程

分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择,原则:多对多关系实际需要借助第三张中间表。中间表至少包含两个字段,将多对多的关系,拆成一对多的关系,中间表至少要有两个外键,这两个外键分别指向原来的那张两张表的主键

 

外键约束

介绍

MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

外键用来建立主表与从表的关联关系,为两个表的数据简历连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果,桃子,李子,西瓜等4种水果,那么,你来到水果摊要买水果只能选择苹果,桃子,李子和西瓜,其它的水果都是不能购买的。

特点

定义一个外键时,需要遵循下列规则:

  1. 主表必须已经存在于数据库中,或者是当前正在创建的表。

  2. 必须为主表定义主键。

  3. 主键不能包含空值,但允许在外键中出现空值。也就是说,只有外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

  4. 在主键的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

  5. 在外键中的数目必须和主键的主键中列的数目相同。

  6. 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

创建外键约束-第一种方式

方式一:在创建表时设置外键约束

在create table语句中,通过foreign key关键字来指定外键,具体的语法格式如下:

[constraint<外键名>] foreign key 字段名[,字段名2,...] references<主键名> 主键列1 [,主键列2,...]

实现:

create database mydb3;
use mydb3;
-- 创建部门表
create table if not exists dept(
  depton varchar(20) primary key, -- 部门号
  name varchar(20) --部门名字
);

方式1-在创建表时设置外键约束

create table if not exists emp(
eid varchar(20) primary key,-- 员工编号
ename varchar(20), -- 员工名字
age  int,-- 员工年龄
dept_id varchar(20), --员工所属部门
constaraint emp_fk foreign key(dept_id) references dept(deptno) -- 外键约束
);

代码实现

外键约束
create database mydb3;
use mydb3;

创建部门表
create table if not exists dept(
   deptno varchar(20) primary key, -- 部门编号
   name varchar(20) -- 部门名字
);

创建员工表,并创建外键约束 -方式1
[constraint<外键名> ] foreign key 字段名 [,字段名2,...] references<主表名> 主键列1[,主键列2,...]

create table if not exists emp(
eid varchar(20) primary key, -- 员工编号
ename varchar(20),-- 员工姓名
age int ,-- 员工年龄
dept_id varchar(20), -- 员工所属部门
constraint emp_fk foreign key (dept_id) references dept(deptno)
);

创建外键约束-第二种方式

外键约束也可以在修改表时添加,但是添加外键约束的前提是:才表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。

alter table <数据表名> add constarint <外键名> foreign key(<列名>) references <主表名>(<列名>);

在外键约束下的数据操作

删除外键约束

多对多关系

多表联合查询

 

内连接查询

 

外连接查询

子查询

①:基本子查询

②:all关键字

③:Any和some

④:in

⑤:Exists

自关联查询

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

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

相关文章

第四方支付平台和聚合支付有什么区别?

第四方支付平台和聚合支付有什么区别&#xff1f; 聚合支付和第四方支付平台是移动支付领域的两种常见支付方式。它们在实际应用中有许多相似之处&#xff0c;给人们的生活带来了便利。然而&#xff0c;这两种支付方式也有本质的区别。我将从不同的角度对它们进行比较和分析。 …

找风景类视频素材就上这5个网站

免费高清的风景视频素材&#xff0c;我推荐你去这几个网站下载&#xff0c;赶紧收藏起来~ 菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富&#xff0c;网站主要还是以设计类素材为主&#xff0c;高清视频素材也很多&#xff0c;像风景、植…

回归预测 | MATLAB实现TSO-ELM金枪鱼群优化算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现TSO-ELM金枪鱼群优化算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现TSO-ELM金枪鱼群优化算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效…

java八股文面试[JVM]——垃圾回收器

jvm结构总结 常见的垃圾回收器有哪些&#xff1f; CMS&#xff08;Concurrent Mark Sweep&#xff09; 整堆收集器&#xff1a; G1 由于整个过程中耗时最长的并发标记和并发清除过程中&#xff0c;收集器线程都可以与用户线程一起工作&#xff0c;所以总体上来说&#xff0c;…

【Unity】拖拽放置模型时 为什么出现有时候有紧贴地面和有时候随机再空中的情况

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

骨传导耳机对大脑有影响吗?骨传导耳机有什么副作用

先上结论&#xff0c;骨传导耳机对大脑没有影响。骨传导耳机使用的是骨传导技术&#xff0c;声音是通过头骨骨头和颌骨给内耳传递的&#xff0c;而不是通过传统的空气传播。 简单来说&#xff0c;骨传导技术使用人类骨骼结构和声学原理来传递声音&#xff0c;这种现象我们也很常…

深入剖析Kubernetes之Kubernetes的本质

文章目录 Kubernetes的本质 Kubernetes的本质 Kubernetes 项目在 Borg 体系的指导下&#xff0c;体现出了一种独有的“先进性”与“完备性”&#xff0c;而这些特质才是一个基础设施领域开源项目赖以生存的核心价值。 Kubernetes 项目的架构&#xff0c;跟它的原型项目 Borg 非…

Python中的API构建指南:在Flask中进行API开发

原文&#xff1a;Python中的API构建指南&#xff1a;在Flask中进行API开发 - 知乎 如何实现从一个软件与另一个软件的通信交互&#xff1f;就像我们的APP&#xff0c;如何实现微信支付、苹果支付&#xff1f; 其实&#xff0c;我们只需要一个API。 API&#xff08;应用程序编…

【二叉树入门指南】链式结构的实现

【二叉树入门指南】链式结构的实现 一、前置说明二、二叉树的遍历2.1前序遍历2.2中序遍历2.3 后序遍历 三、以前序遍历为例&#xff0c;递归图解四、层序遍历五、节点个数以及高度等5.1 二叉树节点个数5.2二叉树叶子节点个数5.3 二叉树第k层节点个数5.4 二叉树查找值为x的节点5…

黑客资料(基本概念,漏登平台,kali安装)

黑客资料 1.基本概念 1.1安全三要素 1.2 渗透测试 在拥有授权的前提下&#xff0c;模拟黑客的攻击手段进行测试&#xff0c;也被称为道德黑客 1.3 渗透测试的意义 1.4 渗透测试的流程 1.5 确定目标 这个确定目标&#xff0c;主要对范围进行测试&#xff0c;对那些设备&#…

【线程池】线程池拒绝策略还有这个大坑(二)

目录 踩坑代码 后果展示 原因 小结 概要 上文我们聊了聊阻塞队列&#xff0c;有需要的小伙伴可以去瞅瞅【线程池】换个姿势来看线程池中不一样的阻塞队列&#xff08;一&#xff09;_走了一些弯路的博客-CSDN博客 这波我们一起来研究下线程池的拒绝策略。 你肯定要说了&a…

odejs+vue+elementui个人图片电子相册网站_84ds3

系统阐述的是使用智能化电子相册系统的设计与实现&#xff0c;对于nodejs、B/S结构、MySQL进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了vue.js框架和MySQL数据库技术搭建系统的整体架构。利…

gitcode中删除已有的项目

镜像地址&#xff1a; https://www.jianshu.com/p/504c1418adb7?v1693021320653 扩展阅读 如何在GitLab中删除一个项目 https://www.codenong.com/cs106866762/ 简介&#xff1a; 如何在GitLab中删除一个项目 最近GIT上建了太多项目。想清一下&#xff0c;就在网上查了查…

27台光刻机,ASML做出了选择,无法割舍中国市场

日前ASML公布的业绩显示二季度它对中国市场的光刻机出货量环比猛增两倍多至27台&#xff0c;显示出ASML对中国市场的重视&#xff0c;为何在荷兰决定自9月1日起限制对中国供应先进芯片设备之时&#xff0c;ASML却突然加大了对中国的光刻机供货力度呢&#xff1f; ASML虽然垄断着…

Ruoyi微服务启动流程

1、执行sql 执行sql ry-quarty.sql ry_2023706.sql 到ry-cloud 数据库 2、下载nacos 修改配置文件 修改连接地址 启动nacos 看到下面的配置文件即为成功 修改配置文件里面的数据库连接信息 3、修改nacos 为单机启动 4、启动项目即可 nacos自取 链接: https://pan.baidu…

如何提高企业的维修效率?智能维修设备管理系统有什么作用?

随着工业4.0的不断发展&#xff0c;智能维修设备管理系统已经成为了企业提高维修效率、降低维修成本、优化资源利用的重要工具。本文将介绍智能维修设备管理系统的优势以及推荐使用“的修”平台设备管理系统的理由。 一、智能维修设备管理系统的优势   智能维修设备管理系统通…

PHP8函数的引用和取消-PHP8知识详解

今天分享的是php8函数的引用和取消&#xff0c;不过在PHP官方的参考手册中&#xff0c;已经删除了此类教程。 1、函数的引用 在PHP8中不管是自定义函数还是内置函数&#xff0c;都可以直接简单的通过函数名调佣。函数的引用大致有下面3种&#xff1a; 1.1、如果是PHP的内置函…

暑期习题练习 C语言

编程能力小提升&#xff01; 前言一、转义字符二、重命名与宏定义三、三目运算符四、计算日期到天数转换五、计算字符串长度六、宏定义应用七、const常量八、C语言基础九、const常量&#xff08;二&#xff09;十、符号运算十一、记负均正十二、SWITCH&#xff0c;CASE十三、错…

阿桂天山的技术小结:Flask+UEditor实现图片文件上传富文本编辑

话不多说,有图有源码 先看效果: 1.前端html页面index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><script src"{{ url_for(static,filenameueditor/ueditor.config.js) }}"></script…

pytest执行顺序,不要迷恋pytest-order

所以说pytest的执行顺序是默认编写的顺序来执行的 笔者在编写场景化测试用例时 test_违规告警_未报备空进重出.py 使用了order 序号1-12来进行排序 test_违规告警_未报备重进空出.py 使用了order 序号1-12来进行排序&#xff0c;执行时导致先会执行两个文件夹中order1的用例造成…