数据库-MySQL基础(9)-多表关系

news/2024/5/19 5:14:48/文章来源:https://blog.csdn.net/qq_64691289/article/details/127158931

目录

概述

1、一对多

2、多对多

3、一对一

多表查询概述

多表查询分类

1、连接查询

2、子查询


概述

项目开发中,在进行数据库表结构关系设计时,会根据业务需求及业务模块之间的关系,分析设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系,基本上分为三种:

—— 一对多(多对一)

—— 多对多

—— 一对一

1、一对多

案例:部门与员工的关系

关系:一个部门对应多个员工,一个员工对应一个部门

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


2、多对多

案例:学生与课程之间的关系

关系:一个学生可以选修多门课程,一门课程也可以供给多个学生选择

实现:建立第三张中间表,中建表至少包含俩个外键,分别关联俩方主键

 SQL建立中间表

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,'黛丽丝',2000100101),(null,'谢逊','2000100102'),(null,'殷天正','2000100103'),(null,'韦一笑','2000100104');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 comment '主键' primary key ,student int not null comment '学生id',courseid int not null comment '课程id',constraint fk_courseid foreign key (courseid) references course(id),constraint fk_student foreign key (student) references student(id)
)comment '学生课程中间表';
insert into student_course values (null,1,1),(null,1,2),(null,1,3),(null,2,2),(null,2,3),(null,3,4);


3、一对一

案例:用户与用户详情的关系

关系:一对一关系,多用于单表拆分,,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率

实现:在任意一方加入外键,关联另一方的主键,并且设置外键为唯一的(NUIQUE)

拆分后

 代码 

create table tb_user(id int auto_increment primary key comment '主键ID',name varchar(10)comment '姓名',age int comment '年龄',gender char(1) comment '1:男,2:女',phone char(11)comment '手机号'
)comment '用户基本信息表';create table tb_user_edu(id int auto_increment primary key comment '主键ID',degree varchar(20)comment '学历',major varchar(50) comment '专业',primaryschool varchar(50) comment '小学',middleschool varchar(50)comment '中学',university varchar(50) comment '大学',userid int uniquef comment'用户ID',constraint fk_userid foreign key (userid) references tb_user(id)
)comment '用户教育信息表';

insert into tb_user(id,name,age,gender, phone) values(null,'黄渤',45,'1',' 18800001111'),(null,'冰冰',35,'2', '18800002222'),(null,'码云',55,'1','18800008888 '),(null,'李彦宏',50,'1','18800009999' );insert into tb_user_edu(id,degnee, major,primaryschool,middleschool,university,userid) values
(null,'本科','舞蹈','静安区第一小学','静安区第一中学','北京舞蹈学院',1),
(null,'硕士','表演','朝阳区第一小学','朝阳区第一中学','北京电影学院',2),
(null,'本科','英语','杭州市第一小学','杭州市第一中学','杭州师范大学',3),
(null,'本科','应用数学','阳泉第一小学','阳泉区第一中学','清华大学' ,4);

 


 

多表查询概述

概述:指从多张表中查询数据

笛卡尔积:笛卡尔积是指在数学中,俩个集合A 和 B集合的所有组成情况 。(在多表查询中,需要消除无效的迪卡尔积)

 

 案例:

使用上篇文章所用的表格emp和demp

emp表

 dept表

 输入

--多表查询--笛卡尔积
select  * from emp,dept;

后表会出现这中情况

 

 解决方案

select  * from emp,dept where emp.dept_id = dept.id;

 


多表查询分类

1、连接查询

    内连接:相当于查询A、B交集的部分数据

    外连接:左外连接:查询左表所有数据,以及俩张表交集部分的数据

                   右外连接:查询右表所有数据,以及俩张表交集部分的数据

   自连接:当前表与自身表的连接查询,自连接必须使用表别名

2、子查询

当前只有一张表,但是这张表会与自身进行连接查询

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

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

相关文章

5、android 数据存储(2)(数据库SQLite:SQLiteDatabase)

1、数据库管理器SQLiteDatabase SQLiteDatabase是SQLite的数据库管理类,它提供了若干操作数据表的API,常用的方法有3类: 1. 管理类,用于数据库层面的操作。 openDatabase:打开指定路径的数据库。 isOpen&#xff1a…

机器学习之学习曲线绘制Python-skleran

学习曲线作用: 学习曲线是什么?简单来说,就是用学习曲线(learning curve)来判断模型状态:过拟合还是欠拟合。 学习曲线定义: 学习曲线是根据不同训练集大小,模型在训练集和验证集上的得分变化曲线。 学…

虚拟机搭建Redis 远程密码可访问,并且后台运行

1、关闭系统防火墙 操作指令备注查看防火墙状态systemctl status firewalld / firewall-cmd --state暂时关闭防火墙systemctl stop firewalld永久关闭防火墙(禁用开机自启)systemctl disable firewalld下次启动,才生效暂时开启防火墙systemctl start firewalld永久开启防火墙(…

基于python+django框架+Mysql数据库的校园新生报到系统设计与实现

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于python的校园新生报到系统,整体网站系统基于B/S架构,技术上使用基于python的Django框架来实现;通过后台添加设置校园信息、录入和管理校园资讯、校园风光、学校分院信…

Linux 用户管理 文件目录指令 时间日期指令 搜索查找类 解压压缩类

目录 用户管理 添加用户: 指定/修改密码 删除用户 查询用户信息指令 切换用户 查看当前用户/登录用户 用户组 修改用户的组 用户和组相关文件 指定运行级别1 指定运行级别2 找回root密码 帮助指令 文件目录指令 文件目录类 pwd 指令 ls 指令 cd 指令 mkdir指…

Android Automotive(五) CarService

Android Automotive(五) CarService CarService是Android Automotive在系统框架层的核心服务。它类似SystemServer在服务内部管理着数十个子服务。 启动流程 CarService是由SystemServer启动的,启动流程如下。 SystemServer 启动CarServi…

【GNN从入门到精通】第一章 图的基本知识

文章目录一、图的表示1.1 什么是图?二、图的特征2.1 子图2.2 连通分量2.3 接通图2.3.1 无向图连通图2.3.2 有向连通图2.4 最短路径2.5 图直径三、图中心性3.1 度中心性3.2 特征向量中心性3.3 中介中心性3.4 连接中心性四、网页排序算法4.1 PageRank4.2 HITS4.3 例子…

游程描述的任意区域最小旋转矩形算法实现

效果 采用游程描述了多个区域,经过算法计算,找到最小包围矩形。 白色是指定的区域,黄色是该区域的最小旋转矩形。 算法原理 有时候算法不一定很高深,只要把道理点破,实现起来很简单,难的是最开始的算法构思过程。 区域最小旋转矩形的算法原理也很简单:将区域从0到90…

Dapper 在继承层次结构中处理数据

Dapper 包含一项功能,用于处理可能逐行映射到不同类型的数据。在处理使用Table Per Hierarchy存储模式的继承层次结构时,此功能特别有用,即一个表用于表示层次结构中的所有类。“鉴别器”列用于区分类型。 以下类定义表示基于抽象Contract类型的继承层次结构。还定义了三种派…

16.python实现线性单元和梯度下降-10月4日编程作业-Relu函数

目录 课堂笔记 代码实现1 运行结果1 代码实现2 评定一个学生的综合绩点 运行结果2 小结 课堂笔记 代码实现1 from cgi import print_environ from functools import reduce import numpy as np#定义感知器类 class perceptron(object):#感知器初始化函数(参数个数&…

ASP.NET Core--项目基础与搭建

文章目录项目基础与搭建创建项目ViewImports.cshtmlappsettings.json执行顺序Program.cs类startup.cs类项目基础与搭建 创建项目 ViewImports.cshtml ViewImports文件可以影响文件夹层次结构中的所有视图 ViewImports文件是我们可以编写代码并放置通用指令以引入我们的视图所需…

数据结构 - 单链表

文章目录一、单链表1.单链表的定义1.1概念介绍2.如何用代码来定义一个单链表*知识点3.单链表的插入删除未完待续...一、单链表 1.单链表的定义 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的&…

Halcon快速入门笔记3

read_image (Image, ‘surface_scratch’) invert_image (Image, ImageInverted) get_image_size (ImageInverted, Width, Height) gen_sin_bandpass (ImageBandpass, 0.4, ‘none’, ‘dc_center’, Width, Height) fft_generic (ImageInverted, ImageFFT, ‘to_freq’, -…

【JavaWeb】前置知识:CSS与JavaScript知识汇总

本文被 系统学习JavaWeb 收录,点击订阅 写在前面 大家好,我是黄小黄!经过上一篇 从Html入门JavaWeb 的学习,想必大家对标签都有了一定的认识。本文将通过案例,讲解CSS与JavaScript的基础知识,文章内容比较…

SSM+Vue个人健康管理系统 个人健康档案系统 个人健康信息管理系统Java

SSM+Vue个人健康管理系统 个人健康档案系统 个人健康信息管理系统Java💖🔥作者主页:计算机毕设老哥🔥 💖精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻Java实战项目专栏 Python实战项目专栏 安卓实战项目专栏 微信小程序实战项目专栏目录Java实战项…

【数据结构从0到1】第九篇:图

文章目录一、图的基本概念二、图的存储结构2.1 邻接矩阵2.2 邻接表三、图的遍历3.1 图的广度优先遍历3.2 图的深度优先遍历四、最小生成树4.1 Kruskal算法4.2 Prim算法五、最短路径5.1 单源最短路径--Dijkstra算法5.2 单源最短路径--Bellman-Ford算法5.3 多源最短路径--Floyd-W…

基于Java开发的五子棋游戏APP设计与实现

目录 一、项目概述 1 (一)安卓游戏发展趋势 1 (二)开发安卓游戏的意义 1 二、项目需求分析 2 (一)功能需求分析 2 (二)性能需求分析 2 (三)可行性分析 3 &…

【点云处理】点云法向量估计及其加速(1)

点云法向量是3D点云一个极其重要的几何表面特征,众多的点云处理算法都依赖精确的法向量估计,例如点云分割,点云去噪等。在自动驾驶领域,面对特殊场景我们主要依赖点云法向量进行场景分割。估计点云法向量需要得到该点的邻域内点&a…

nodejs+vue+elementui幼儿园管理系统python java php

本设计主要分为学生家长,管理员和教师三个角色,其中学生家长功能有注册登查看幼儿信息,查看缴费信息,申请请假,查看体检信息等;教师的功能有登陆系统,对自己的幼儿学生,班级&#xf…

谷粒商城 集群篇 (二) --------- K8s 集群安装

目录一、kubeadm二、前置要求三、部署步骤四、环境准备五、安装环境1. 安装 docker① 卸载 docker② 安装 Docker-CE③ 配置 docker 加速④ 启动 docker & 设置 docker 开机自启2. 添加阿里云 yum 源3. 安装 kubeadm,kubelet 和 kubectl六、部署 k8s-master1. m…