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

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

什么是数据库

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

用户在使用数据库的时候,不会直接去操作这些文件,而是使用了数据库厂商封装好的数据库软件,也就是数据库管理系统(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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
安全 Linux 网络安全
YashanDB数据库服务端SSL连接配置
YashanDB支持通过SSL连接确保数据传输安全,需在服务端生成根证书、服务器证书及DH文件,并将根证书提供给客户端以完成身份验证。服务端配置包括使用OpenSSL工具生成证书、设置SSL参数并重启数据库;客户端则需下载根证书并正确配置环境变量与`yasc_env.ini`文件。注意:启用SSL后,所有客户端必须持有根证书才能连接,且SSL与密码认证独立运行。
|
10月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
446 13
|
10月前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
1807 11
|
Java 测试技术 数据库
使用benchmarksql测试数据库处理能力
传统的OLTP业务,应用系统使用 java 开发,并且不建议使用存储过程,使用 benchmarksql 压测数据库最公平,既可以测试数据库性能,也可以测试JDBC驱动
1041 88
|
11月前
|
安全 网络安全 数据安全/隐私保护
解决SSH测试连接GitHub时出现“connection closed by remote host”的问题。
然后使用 `ssh -T git@ssh.github.com`来测试连接。
1149 0
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
2641 28
|
12月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
791 0