软件测试|数据库的内连接,左连接,右链接分别是什么
mhr18 2024-09-21 19:06 20 浏览 0 评论
什么是数据库
数据库是一个以某种有组织的方式存储的数据集合,是存储和管理数据的仓库。本质上就是存储数据的文件系统。
用户在使用数据库的时候,不会直接去操作这些文件,而是使用了数据库厂商封装好的数据库软件,也就是数据库管理系统(DBMS)。
数据库管理系统对数据库进行统一管理和控制,保证数据库的安全性和完整性。平常所说的数据库,其实指的就是对应数据库的 DBMS,数据库管理系统。
使用数据库存储数据,用户可以非常方便对数据库中的数据进行增加,删除,修改及查询操作。
数据库可以分为关系型数据库和非关系型数据库。
关系型数据库产品包括 MySQL、Oracle、Postgres、SQLite 和 SQLServer。这几个数据库是目前行业里使用非常广泛的。其中最具有代表性的是 MySQL,它是使用最广泛的数据库。
这些关系型数据库都可以使用 SQL 语句进行操作。
非关系型数据库常见的有 MongoDB、Redis 等等。
什么是 SQL
SQL 是结构化查询语言(Structured Query Language) 的简称,是一种特殊目的的编程语言,用来存取数据以及查询、更新和管理关系数据库系统。
SQL 是所有关系型数据库的统一查询规范,所有的关系型数据库都可以使用 SQL,不过不同数据库之间的 SQL 语法会有一些区别。
SQL 可以分为以下几种类型
- 数据定义语言:简称 DDL(Data De?nition Language),用来定义数据库对象:数据库,表,列等。
- 数据操作语言:简称 DML(Data Manipulation Language),用来对数据库中表的记录进行更新。
- 数据查询语言:简称 DQL(Data Query Language),用来查询数据库中表的记录。
- 数据控制语言:简称 DCL(Daat Control Language),用来定义数据库的访问权限和安全级别, 以及创建用户。
在测试的场景中,更多的使用的是数据查询语言 DQL。
什么是表连接
关系型数据库中存放的,是一张一张的表,各个表之间是具有联系的。
数据库中的多个表间是如何建立联系的呢?
拿学生表和成绩表来举例。假设学生表的四列分别代表学号,姓名,出生日期和性别。成绩表的三列分别是学号,课程编号和成绩。
学生表 student
studentId | name | birthDate | sex |
001 | 哈利 | 1991-01-01 | 男 |
002 | 赫敏 | 1991-05-07 | 女 |
003 | 罗恩 | 1991-09-11 | 男 |
004 | 金妮 | 1996-11-15 | 女 |
成绩表 score
studentId | courseId | score |
001 | C0001 | 90 |
001 | C0002 | 95 |
002 | C0001 | 100 |
002 | C0003 | 99 |
002 | C0004 | 100 |
005 | C0002 | 92 |
两个表都有【studentId】,也就是说,它们是可以通过相同的列【studentId】关联起来。
如果要查询学生表中 studentId 为“001”号学生的成绩是多少,就可以在成绩表中查找 studentId 为“001”号的那一行,最后在成绩表里发现有 2 行数据的 studentId 都是“001” ,对应的就找到了该学生的两门课程的成绩。
所以关系型数据库里的【关系】,就是数据能够对应的匹配,它在关系数据库中被称为联结,英文名是 JOIN。
在数据查询的时候,如果要查询的数据分布在多张表中的时候,表连接(JOIN)在多个表中间通过一定的连接条件,使表之间发生关联进而能从多个表之间获取数据。
内链接,左连接与右连接
表连接中最常见的类型就是内连接、左连接和右连接。
连接类型 | 关键词 | 定义 |
内连接 | (INNER) JOIN | 获取两个表中字段匹配关系的记录 |
左连接 | LEFT (OUTER) JOIN | 获取左表所有记录,右表没有对应匹配的记录时显示为 NULL |
右连接 | RIGHT (OUTER) JOIN | 获取右表所有记录,左表没有对应匹配的记录时显示为 NULL |
内连接
获取两个表中字段匹配关系的记录,也就是两张表的交集。可以通过主外键关系做为条件来去除无用信息。
语法:
SELECT *
FROM <表名1> [表别名1]
INNER JOIN <表名2> [表别名2]
ON <表别名1>.<外键列>=<表别名2>.<主键列>;
拿学生表和成绩表来举例。查询有成绩的学生信息。
SQL 语句为
SELECT *
FROM student st
INNER JOIN score sc
ON st.studentId=sc.studentId;
查询结果为
左连接
先查询出左表,以左表为主,然后查询右表,右表中满足条件的显示出来,不满足条件的显示 NULL。
语法:
SELECT *
FROM <表名1> [表别名1]
LEFT [OUTER] JOIN <表名2> [表别名2]
ON <表别名1>.<外键列>=<表别名2>.<主键列>;
还是拿学生表和成绩表来举例。查询有信息的学生的成绩。
SQL 语句为
SELECT *
FROM student st
LEFT JOIN score sc
ON st.studentId=sc.studentId;
查询结果为
右连接
先把右表中所有记录都查询出来,以右表为主,然后查询左表,左表中满足条件的显示出来,不满足的显示 NULL。
语法:
SELECT *
FROM <表名1> [表别名1]
RIGHT [OUTER] JOIN <表名2> [表别名2]
ON <表别名1>.<外键列>=<表别名2>.<主键列>;
还是拿学生表和成绩表来举例。查询所有有成绩的学生信息。
SQL 语句为
SELECT *
FROM student st
RIGHT JOIN score sc
ON st.studentId=sc.studentId;
查询结果为
总结
数据库就是一个以某种有组织的方式存储的数据集合,是存储和管理数据的仓库。本质上就是存储数据的文件系统。
用户使用数据库管理系统(DBMS)对数据库进行统一管理和控制,保证数据库的安全性和完整性。平常说的数据库一般指代的就是数据库管理系统。
关系型数据库,比如使用最广泛的 MySQL,可以使用 SQL 结构化查询语句来进行数据库的操作。
关系型数据库中多表查询中比较常见的表连接形式分别为内连接、左连接和右连接。
- 内连接:通过关键字 (INNER) JOIN 获取两个表中字段匹配关系的记录。可以通过主外键关系做为条件来去除无用信息。
- 左连接:通过关键字 LEFT JOIN 获取左表所有记录。也就是先查询出左表,以左表为主,然后查询右表,右表中满足条件的显示出来,不满足条件的显示 NULL。
- 右连接:通过关键字 RIGHT JOIN 获取右表所有记录。也就是先把右表中所有记录都查询出来,以右表为主,然后查询左表,左表中满足条件的显示出来,不满足的显示 NULL。
相关推荐
- 一文带您了解数据库的行列之争:行式与列式存储的异同
-
数据库存储格式是数据库管理系统中一个至关重要的方面,它直接影响到数据的组织和检索效率。在数据库中,有两种主要的存储格式,即行式存储和列式存储。这两者采用截然不同的方法来组织和存储数据,各自具有一系列优...
- NL2SQL(三)开源项目怎么选:talk is cheap, show me the code!
-
老规矩,先看效果下面的demo来自试用的SuperSonic,将会在下面详细介绍:大模型时代Text-to-SQL特点随着基于LLM技术的发展,RAG/AIAgent/Fine...
- JDK25长期支持版九月降临:18项王炸功能全解析
-
Java要放大招啦!9月份推出的JDK25长期支持版已经锁定18个超能力,从稳定值到结构化并发,还有Linux系统下的"预知未来"性能分析!下面我用打游戏的术语给你们掰扯明白:1、飞...
- OceanBase 推出单机版 高度兼容MySQL和Oracle
-
【环球网科技综合报道】3月27日,独立数据库厂商OceanBase正式发布单机版产品。据悉,这一产品基于自主研发的单机分布式一体化架构设计,具备极简数据库架构和高度兼容性,为中小规模业务提供兼具性能与...
- 黄远邦:应对7月1日闰秒对Oracle数据库影响
-
由于今年7月1日全世界会多出一秒,这可能对时间敏感的IT系统造成较大影响。中亦科技数据库团队对此问题做了深入的研究,并对用户系统提出了相应的解决方法及建议。中亦科技数据库产品总监黄远邦认为,闰秒调整会...
- MySQL数据库密码忘记了,怎么办?(mysql 数据库密码)
-
#头条创作挑战赛#MySQL数据库密码忘记了且没有其他可以修改账号密码的账户时怎么办呢?登录MySQL,密码输入错误/*密码错误,报如下错误*/[root@TESTDB~]#mysql-u...
- Chinese AI Talent in Spotlight as Nvidia and Meta Escalate Talent War
-
OntherightisBanghuaZhu,ChiefResearchScientistatNVIDIATMTPOST--SiliconValley’stoptech...
- 用Cursor开启JAVA+AI生涯(javascirpt怎么开启)
-
Cursor是基于VSCode开发的一款编辑器,支持多种语言的开发编辑。与传统的开发工具相比,它有多种优势:与AI无缝集成,响应速度快,占用内存小。但很多同学在"起步"过程中遇到了...
- 毕业十年了,自从做了开发用了很多软件,但距离写开发工具还很远
-
办公系统类:办公软件Word、Excel、PowerPoint三大必备技能+腾讯/金山在线文档解压缩操作:7-zip/winrar文件文本处理:Notepad++(文本编辑器正则表达式超级好...
- 盘点Java中最没用的知识⑤:这3个老古董你还在代码里“考古”?
-
一、Stack类:“继承Vector”的历史bug,为何成了性能拖油瓶?你是不是在学Java集合时,老师说过“栈结构用Stack类”?是不是在老代码里见过"newStack<>(...
- Gemini 2.5 Pro 0506发布,编程最强大模型, 碾压 Claude3.7 sonnent
-
一、Gemini2.5Pro(I/Oedition)发布1、为何叫I/Oedition?谷歌史上最强编程模型Gemini2.5Pro(I/Oedition)发布,具体型号是Gemin...
- 如何让无聊变得有趣(附本人大量美图)
-
文/图:金冬成在这条长300公里的公路上,我已经来回往返了无数次。3小时车程,一个人,想想都是多么无聊的一件事。其实,人生道路上,类似这种无聊的事情有很多很多。无聊的事情、枯燥的工作,往往让我们容易失...
- Oracle 推出 Java 24,增强 AI 支持和后量子加密
-
导读:Oracle宣布正式发布Java24,该语言增加了几个新功能,例如StreamGatherersAPI和Class-FileAPI的可用性,以及专门为AI推理和量子安全设计...
- 公司ERP突然变慢?“索引重建”这颗“药”可不能随便吃!
-
各位老板、IT小哥、财务小姐姐,有没有遇到过公司ERP系统突然卡顿得像“老爷车”,点个按钮半天没反应,急得直跺脚?这时候,可能有人会跳出来说:“我知道,重建一下数据库索引就好了!”听起来像个“神操作”...
- 基于Java实现,支持在线发布API接口读取数据库,有哪些工具?
-
基于java实现,不需要编辑就能发布api接口的,有哪些工具、平台?还能一键发布、快速授权和开放提供给第三方请求调用接口的解决方案。架构方案设计:以下是一些基于Java实现的无需编辑或只需少量编辑...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 一文带您了解数据库的行列之争:行式与列式存储的异同
- NL2SQL(三)开源项目怎么选:talk is cheap, show me the code!
- JDK25长期支持版九月降临:18项王炸功能全解析
- OceanBase 推出单机版 高度兼容MySQL和Oracle
- 黄远邦:应对7月1日闰秒对Oracle数据库影响
- MySQL数据库密码忘记了,怎么办?(mysql 数据库密码)
- Chinese AI Talent in Spotlight as Nvidia and Meta Escalate Talent War
- 用Cursor开启JAVA+AI生涯(javascirpt怎么开启)
- 毕业十年了,自从做了开发用了很多软件,但距离写开发工具还很远
- 盘点Java中最没用的知识⑤:这3个老古董你还在代码里“考古”?
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)