大家好,这依然是一篇学习笔记,仅供个人学习

本篇文章内容较短,不喜勿喷,谢谢

前言

在运用数据库查询信息的时候,我们通常不会只使用一张表去记录信息,而是用很多不同的表去记录不同的信息,但是如果想查询某一个人的信息,就得去不同的表挨个检索,这是极其不方便的,因此本篇的多表查询就可以一次性把多个表格的信息查询出来,方便了我们查询的操作

多表查询基础—内(外)连接

内连接和外连接是两种多表查询的常用方式

我们先来展示没有这两种方式的“多表查询”

所谓“多表查询”按照字面意思就是一次性查询多个表,但是单纯按照字面意思查询的话会出现许多错误:下面直接查询这两个表

若没有用于筛选的条件,那么就会产生两个表之间的“笛卡尔积”

可以看到,同一个员工出现了多次,按照常理来讲,一个员工是附属于一个部门的,但是这里由于没有添加限制条件,强行把两个表结合到了一块,因此会产生许多的错误的数据

因此,为了避免两张表产生笛卡尔积,我们再查询的时候要使用内(外)连接的方式

内连接

刚刚讲完直接查询两张表,那么程序会直接产生这两张表的笛卡尔积,那么内连接的工作其实本质上就是“去除多组数据连接的笛卡尔积”,连接数据之间的“交集部分”

举个例子:两组数据123、456,我们的目标是连接这两组数据(颜色相同的药连接在一起),如果直接查询两张表,那么组合结果就是3*3=9条数据,但是实际上只有15 26 34 这三条数据,那想要查询结果是这三条数据,那就要运用到内连接的“连接条件的筛选”,那这里连接条件就是“颜色相同”

因此,内连接的基础语法我们可以这样定义:

select *from a join b on 筛选条件

其中a b 是两组数据(数据可以是一张表,临时数据)

例如刚刚的例子:

on后面的筛选条件就是两个数据之间的“连接条件”

查询结果

分清楚“连接条件on”和“筛选结果条件where”

举个例子:

where后的条件是连接之后筛选显示结果的条件

内连接总结

外连接

其实外连接本质上就是特殊的“内连接”,都是查询多组数据然后使用连接条件把这些该连接得到数据连接起来,只不过外连接有着“展示某一组数据的全部内容”

简介如下

对于刚刚的例子,使用外连接查询出来的结果是这样的:

外连接总结

这里继续强调一下连接条件on和筛选条件where不要混用!!!

子查询(嵌套查询)

其实这两个名字都是不错的,本质上就是一个大语句嵌套一个子语句,其中子语句呈现的是查询的数据结果,这个数据可以是一个标量、一列数据、一行数据、或者是一张表

写这种嵌套语句的具体步骤就是如上图所示,拆分需求,逐条写sql语句,最后结合sql语句

这里面的很多操作其实都是逻辑类的操作,接下来举几个例子方便理解

标量子查询

即子语句返回的结果是一个标量

对于这个完整的步骤,它的子语句就是查询最早的入职时间:查询出来为标量

列子查询

子语句结果

行子查询

子语句查询结果

表子查询

查询出来是一张临时表

子语句查询结果

细看语句,其实这里就是用到了内连接,只不过这次数据对象是一张表和另一张临时表

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐