多表查询、子查询(嵌套)、合并查询

 目录

一、多表查询 

1、笛卡尔积

2、多表查询的过程

二、子查询(嵌套查询)

1、单行单列子查询

2、多行单列子查询

3、多行多列子查询

三、合并查询

1、union(取交集合并)

2、union all(取并集合并)


一、多表查询 

在查询的时候,我们可能需要查询多张表的数据,比如为了整理一张完整的学生信息表,我们可能需要同时查询学生表、班级表。

1、笛卡尔积

多表查询的结果不是像下面这样直接拼凑起来的

而是会发生笛卡尔积,表1的每一条记录都合表2形成一个记录块,最后将这些记录块拼凑在一起,就是多表查询的结果。由于笛卡尔积会产生相当大的数据量,多表查询时,需要搭配where子句来筛掉无效记录。

2、多表查询的过程

现在我们已经知道查询两个表时会发生笛卡尔积,那我们就先获取到笛卡尔积以后的结果。

我们实际需要的是学生和对应的成绩信息,学生表的result_id 对应 成绩表的 id,此时的筛选条件就是 result_id = id,其实就是以该条件在上述笛卡尔积结果的基础上筛选。

二、子查询(嵌套查询)

子查询指的是嵌入在其他sql语句中的select语句,也叫嵌套查询,根据select查询得到的记录数量,以及查询的字段个数,我们可以分为 单行 / 多行子查询、多列子查询。

1、单行单列子查询

顾名思义,单行子查询表示select查询到的记录数只有一行,单列表示仅查询一个字段。

在查询结果为单行单列的情况下,我们可以直接把这个查询结果作为其他select语句的筛选条件使用,注意字段类型需保持一致

2、多行单列子查询

多行单列子查询,其实可以看做是一个字段的集合,下面例子中的查询结果就可以看做是name字段的一个集合 ['唐三藏' , '孙悟空' , '猪悟能'] 

同样可以作为筛选条件使用,不过此时需要搭配 in 来使用

3、多行多列子查询

此时的查询结果完全可以看做是一个临时表

我们可以给查询结果起别名,来当做一个表来使用

 

三、合并查询

合并查询其实就是将两个select的执行结果合并为一个,虽说是合并,但也分为取交集还是取并集

1、union(取交集合并)

该操作符用于取得两个结果集的并集。当使用该操作符时,自动去掉结果集中的重复行

2、union all(取并集合并)

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值