软件测试|数据库的内连接,左连接,右链接分别是什么

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 软件测试|数据库的内连接,左连接,右链接分别是什么

什么是数据库

数据库是一个以某种有组织的方式存储的数据集合,是存储和管理数据的仓库。本质上就是存储数据的文件系统。

用户在使用数据库的时候,不会直接去操作这些文件,而是使用了数据库厂商封装好的数据库软件,也就是数据库管理系统(DBMS)。

数据库管理系统对数据库进行统一管理和控制,保证数据库的安全性和完整性。平常所说的数据库,其实指的就是对应数据库的 DBMS,数据库管理系统。

使用数据库存储数据,用户可以非常方便对数据库中的数据进行增加,删除,修改及查询操作。

数据库可以分为关系型数据库和非关系型数据库。

关系型数据库产品包括 MySQL、Oracle、Postgres、SQLite 和 SQLServer。这几个数据库是目前行业里使用非常广泛的。其中最具有代表性的是 MySQL,它是使用最广泛的数据库。

这些关系型数据库都可以使用 SQL 语句进行操作。

非关系型数据库常见的有 MongoDB、Redis 等等。

什么是 SQL

SQL 是结构化查询语言(Structured Query Language) 的简称,是一种特殊目的的编程语言,用来存取数据以及查询、更新和管理关系数据库系统。

SQL 是所有关系型数据库的统一查询规范,所有的关系型数据库都可以使用 SQL,不过不同数据库之间的 SQL 语法会有一些区别。

SQL 可以分为以下几种类型

  • 数据定义语言:简称 DDL(Data Definition 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。
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
24天前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
122 68
|
20天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
33 3
|
27天前
|
关系型数据库 MySQL 数据库连接
DBeaver如何连接一个数据库
【10月更文挑战第27天】DBeaver 是一款功能强大的通用数据库管理工具,支持多种主流数据库。本文介绍了使用 DBeaver 连接数据库的基本步骤,包括下载安装、创建新连接、选择数据库类型、配置连接参数、测试连接以及最终连接到数据库。详细的操作指南帮助用户轻松管理和操作数据库。
136 9
|
20天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
19 1
|
20天前
|
Java 数据库连接 数据库
Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销
本文深入探讨了Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销,显著提升了系统的响应速度和吞吐量。文章介绍了连接池的工作原理,并以HikariCP为例,展示了如何在Java应用中使用连接池。通过合理配置和优化,连接池技术能够有效提升应用性能。
34 1
|
29天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
78 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
27 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
23天前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
48 0
|
1月前
|
Oracle Java 关系型数据库
使用DataGrip链接达梦数据库
使用DataGrip链接达梦数据库
63 0