数据库学习记录(二)多表设计与多表查询

一对多

一对多时候,一张表内的一个数据可能对应着其他表内的多个数据,例如一个部门内有多个员工,但是公司里不只一个部门,也不止一个员工,这个时候就是一对多的情况,这个时候可以绑定一个外键,让同一个部门内的员工与该部门实现绑定(该外键叫物理外键,不推荐使用,会影响数据库的使用效率和操作灵活性,一般在开发中使用逻辑外键处理该类问题

多对多

多对多表示一张表内的一个数据对应着另一张表内的多个数据,另一张表内的一个数据也对应着这张表内的多个数据,例如学生选课 ,一个学生能选多门课,而一门课也能被多个学生所选,所以这时候就需要一个中间表来解决这个问题,将一个学生的id键绑定给中间表的学生id上,课程绑定给中间表的课程id,这样就能实现多个学生对应多门课程,多门课程对应多个学生。

多表查询 

多表查询主要是在多表查询之后加上限制条件从而得到我们想要的数据

内连接

相当于查询下图的A,B之间的交集

隐式内连接主要是将限制条件写在where之后,从而实现多表查询数据的目的,例如:我需要在员工表和部门表中查询所有员工的姓名以及对应的部门信息 ,如下:

-- 查询员工的姓名,及其所属的部门名称
select tb_dept.name,tb_emp.name from tb_emp,tb_dept where tb_dept.id = tb_emp.job;

显式内连接就是将from后面的表信息用join相关字段进行替换,并在最后添加上on加连接条件

还是上面的例子,sql语句如下:

-- 使用内连接
select tb_dept.name,tb_emp.name from tb_emp inner join tb_dept  on tb_dept.id = tb_emp.dept_id;

 外连接(需要谁完全显示就将谁设置为相关连接的相关表)

左外连接就是会完全包括左边的数据,右外连接就是会完全包含右边的数据,所以在使用相关外连接时需要注意哪些数据是被完全包含的

左外连接就会显示所有的左边表的数据,且与右边表与之对应,如果左表没有与右表对应的数据,会自动将全部左表的数据打印出,右表相关数据显示为空 ,如下:

而同理,右外连接就是会显示所有的右边表的数据,如果右表中有左表没有对应的数据,则会将没有相关对应的左表数据显示为空

再例如我想查询员工表里的所有员工名字,以及对应的部门信息,但员工表内存在没有部门的员工,这时就将员工表作为左连接的左表,部门表作为左连接的右表,这时员工就算没有被分配部门,因为员工表是左连接的左表,所以所有的员工姓名会显示出,没有分配部门的员工部门为空

-- 使用左外连接查询所有员工的姓名,和对应的部门
select e.name,d.name from tb_emp e left join tb_dept d on e.dept_id = d.id

同理,我想查询所有部门的名字,即使部门里没有员工,也能被查询到,这个时候能将部门表作为左连接的左表或者右连接的右表,这样也能完全显示部门名字,这样的话也能将相关的数据完全显示在数据库的查询界面中。 

-- 使用右连接查询所有部门的名字,和对应的员工姓名
select e.name,d.name from tb_emp e right join tb_dept d on e.dept_id = d.id

子查询

子查询主要是sql语句的嵌套

就是先将一部分限制使用查询语句查出,再通过替代的方式将该部分语句放入查询语句中 

列子查询

例如:我需要查询教研部下的所有员工信息,因为我在员工表中保存部门是以数字的形式,那么我首先需要先在部门表中查询到教研部对应的数字,再在员工表里去查询部门为该数字的员工信息,此时就可以使用嵌套查询来结合这两个步骤,代码具体实现如下:

-- 查询教研部下所有员工的信息select * from tb_emp where dept_id = (select id from tb_dept where name = '教研部');

如果需要多个查询限制的嵌套的话,需要使用in关键字来确定相关限制,因为=只能匹配一个限制条件,所以需要使用in来确定是否在一个范围中,如下:这样的话就能实现在一个限制条件范围内进行带有多个限制条件的查询

-- 查询教研部和咨询部所有的员工信息
select * from tb_emp where dept_id in (select id from tb_dept where name = '教研部'or name = '咨询部');

行子查询

例如在多个查询要求时,我们可以将多个条件绑定到一起进行查询,例如要求查询员工表里入职时间与工作职位与韦一笑相同的员工信息,先查询韦一笑的入职时间和工作职位,再查询员工表里与这些信息相匹配的员工信息。这样可以只执行一次子查询就能查询到相关的职工信息

-- 只出现一次的行子查询
select * from tb_emp where (entrydate,job) = (select entrydate,job from tb_emp where name = '韦一笑');

表查询

表查询返回的是多行多列,可以理解为一个临时表,使用代码如下,先将部分限制查询条件使用了之后,将查询出来的数据当表使用

-- 表子查询,查询入职日期是“2006-01-01'之后的员工信息,及其部门名称select e.*,d.name from (select * from tb_emp where entrydate>'2006-01-01')e , tb_dept d where e.dept_id = d.id;

总结:

在实际开发中,经常使用多表查询,而不是简单的单一表查询,所有在一些查询操作中,多思考各个表之间的关系,以及题目的要求(例如分别对某个属性,表示就需要将表中的数据根据该属性进行分组),这样的话才能写出切合题目要求的查询语句。

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

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

相关文章

Linux 磁盘的一生

注意:实验环境都是使用VMware模拟 ​ 磁盘接口类型这里vm中是SCSI,扩展sata,ide(有时间可以看看或者磁盘的历史) ​ 总结:磁盘从有到无—类似于建房子到可以住 ————————————————————————————————————…

php laravel 二维码

public function qr($url,$name2,$inpath){require_once(dirname(__FILE__) . /../../../Library/phpqrcode/phpqrcode.php);$errorCorrectionLevel L;//容错级别$matrixPointSize 10;//生成图片大小$QRcode new \QRcode() ;$QRcode->png($url, $inpath.$name2, $errorCor…

YOLOv5改进系列:Efficientrep结构助力涨点

一、论文理论 本文提出一种硬件友好的卷积神经网络结构,该结构类似于repvgg。在衡量网络效率时,经常使用Flops或者参数量,这些衡量指标对于硬件计算能力和内存带宽不敏感。因此,如何设计一个神经网络架构,使其有效地利用硬件计算能力和内存带宽是至关重要的。 论文地址:…

@Autowired详解

请直接看原文: Autowired注解详解——超详细易懂-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- Autowired详解 要搞明白Autowired注解就是要了解它是什么?有…

C++入门(下)

文章目录 1:引用1.1:引用概念1.2:引用的特性.1.2.1:引用在定义时必须初始化1.2.2:一个变量可以有多个引用1.2.3:引用一旦引用一个实体,再不能引用其他实体. 1.3:应用场景1.3.1:做参数1.3.2:做返回值1.3.2.1:传值返回1.3.2.2:传引用返回(错误示范)1.3.2.3:传引用返回(正确示范) …

如何在Ubuntu使用宝塔部署Emlog网站并发布到公网实现任意浏览器访问

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总结 前言 博客作为使…

springboot Thymeleaf模版引擎使用

1.引入依赖 <!--thymeleaf视图引擎--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> html中要声明约束&#xff0c;这样就可以使用themelraf视…

探索 PostgreSQL 的外部数据包装器和统计函数

PostgreSQL 因其稳定性和可扩展性而广受青睐&#xff0c;为开发人员和数据管理员提供了许多有用的函数。在这些函数中&#xff0c;file_fdw_handler、file_fdw_validator、pg_stat_statements、pg_stat_statements_info 以及 pg_stat_statements_reset 是其中的重要函数&#x…

MySOL数据库管理

数据库基本操作 库和表 数据库–>数据表–>行&#xff08;记录&#xff09;&#xff1a;用来描述一个对象的信息列&#xff08;字段&#xff09;&#xff1a;用来描述对象的一个属性常用的数据类型 int整型float单精度浮点 4字节32位double双精度浮点 8字节64位char固…

3d模型变形动画怎么做---模大狮模型网

要制作3D模型的变形动画&#xff0c;你可以通过使用动画软件(如Blender、Maya、3ds Max等)中的变形工具和技术来实现。以下是一般的步骤来制作3D模型的变形动画&#xff1a; 创建基础模型&#xff1a;首先&#xff0c;在3D建模软件中创建或导入你想要进行变形的基础模型。这个基…

LeetCode 刷题 --- 快速幂

前言&#xff1a; 幂运算是一种常见的运算&#xff0c;求取a^n,最容易想到的方法便是通过循环逐个累乘&#xff0c;其复杂度为O(n)&#xff0c;这在很多时候是不够快的&#xff0c;所以我们需要一种算法来优化幂运算的过程。 快速幂&#xff0c;二进制取幂&#xff08;Binary…

JUC并发编程(五)

1、java内存模型 Java内存模型&#xff08;Java Memory Model&#xff0c;JMM&#xff09;是Java编程语言中用于处理并发编程的一组规则和规范。它定义了Java程序中多线程之间如何交互以及内存如何被共享和访问的规则。它定义了主内存&#xff0c;工作内存的抽象概念&#xff0…

一文让你简单了解跨境电商需要购买堡垒机的几大原因

随着互联网技术的快速发展&#xff0c;跨境电商蓬勃发展&#xff0c;但发展过程中网络安全问题日益凸显。因此不少跨境电商企业购买了堡垒机。这是为什么呢&#xff1f;一文让你简单了解跨境电商需要购买堡垒机的几大原因。 一文让你简单了解跨境电商需要购买堡垒机的几大原因 …

代码随想录day26(2)二叉树:二叉搜索树中的众数(leetcode501)

题目要求&#xff1a;给定一个有相同值的二叉搜索树&#xff08;BST&#xff09;&#xff0c;找出 BST 中的所有众数。结点左子树中所含结点的值小于等于当前结点的值&#xff0c;结点右子树中所含结点的值大于等于当前结点的值。 思路&#xff1a;如果不考虑二叉搜索树&#…

TCP机械臂控制

通过w(红色臂角度增大)s&#xff08;红色臂角度减小&#xff09;d&#xff08;蓝色臂角度增大&#xff09;a&#xff08;蓝色臂角度减小&#xff09;按键控制机械臂 注意&#xff1a;关闭计算机的杀毒软件&#xff0c;电脑管家&#xff0c;防火墙 1&#xff09;基于TCP服务器…

博途PLC 高速计数器复位功能块(HC_Reset)

高速计数器的使用和编码器应用请参考下面文章链接: 1、普通开关计米功能块(博途高速计数器应用) https://rxxw-control.blog.csdn.net/article/details/132354435https://rxxw-control.blog.csdn.net/article/details/1323544352、S7-1200PLC编码器转速测量功能块(高速计数…

含“AI”量上涨,智能模组SC208系列助力智慧零售全场景高质发展

AI正重塑智慧零售产业&#xff0c;加速零售在采购、生产、供应链、销售、服务等方面改善运营效率和用户体验。零售行业经历了从线下到线上再到全渠道融合发展过程&#xff0c;“提质、降本、增效、高体验”是亘古不变的商业化与智能化方向。含“AI”量逐渐上涨的智慧零售正经历…

Git——IDEA中的使用详解

目录 Git1、IDEA中配置Git2、将本地项目推送到远程仓库2.1、创建项目远程仓库2.2、初始化本地仓库2.3、连接远程仓库2.4、提交到本地仓库2.5、推送到远程仓库 3、克隆远程仓库到本地4、基本操作4.1、代码提交到暂存区4.2、暂存区代码提交到本地库4.3、推送到远程仓库4.4、撤销本…

leetCode刷题 18. 四数之和

目录 注意&#xff1a;正常提交后有问题。 1. 思路 2. 解题方法 2.1 排序数组 2.2 双指针遍历 3. 复杂度 4. Code 题目&#xff1a; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], …

TouchGFX之性能测量

TouchGFX Core开放了几个信号&#xff0c;可用于测量性能。 当这些信号在内部触发时&#xff0c;用户可在应用程序中同步触发单个GPIO&#xff0c;从而实现“渲染时间”和其他有用信号的可视化。 信号在GPIO.hpp中定义 /* 用于操作GPIO的接口类&#xff0c;以便在目标硬件上进…