mysql迫切内连接_Mysql多表查询

一、表连接查询

1.1 多表查询的分类

3810416a64961b11a8aae553b99f8653.png

1.1.1 内连接查询

* 隐式内连接:使用where条件消除无用数据

* 语法:SELECT 字段列表 FROM 左表, 右表 WHERE 条件

小贴士:

* 笛卡尔积:

* 有两个集合A,B,取这两个集合的所有组成情况。

* 要完成多表查询,需要消除无用的数据

* 如何消除笛卡尔积现象的影响?

* 增加where条件进行筛选,过滤掉没有用的数据。

* 显示内连接:使用INNER JOIN ... ON语句,INNER可以省略

* 语法:SELECT 字段列表 FROM 左表 [INNER] JOIN 右表 ON 条件

* 迫切内连接:使用INNER JOIN FETCH ... ON语句,INNER可以省略

* 语法:SELECT 字段列表 FROM 左表 [INNER] JOIN FETCH 右表 ON 条件

注意:隐式内连接和显示内连接的区别

* 隐式内连接先查询数结果集(即先进行笛卡尔积运算,生成一个新的表格。),再根据where条件筛选数据。因为表的数据量大,效率低、耗内存。

* 显示内连接在查询数据时,会根据on后面的条件进行数据筛选,逐条匹配。不会产生笛卡尔积现象,效率高。

1.1.2 外连接查询

* 左外连接:使用LEFT OUTER JOIN ... ON,OUTER可以省略

* 语法:SELECT 字段列表 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件

* 结果集:查询的是左表所有数据以及其交集部分,若交集部分没有数据,则显示NULL。

* 迫切左外连接:使用LEFT OUTER JOIN FETCH ... ON语句,OUTER可以省略

* 语法:SELECT 字段列表 FROM 左表 LEFT [OUTER] JOIN FETCH 右表 ON 条件

* 结果集:查询的是左表所有数据以及其交集部分,若交集部分没有数据,则显示NULL。

* 右外连接:使用RIGHT OUTER JOIN ... ON,OUTER可以省略

* 语法:SELECT 字段列表 FROM 左表 RIGHT [OUTER] JOIN 右表 ON 条件

* 结果集:查询的是右表所有数据以及其交集部分,若交集部分没有数据,则显示NULL。

小贴士:

* 什么是迫切?

* 及时将两个关联对象进行相互引用

* 为什么没有迫切右外连接?

* 因为封装的时候是以左对象为主键,右对象保全。所以若左对象为null,将右对象赋值给null是不合理的。

1.1.3 查询关联表的所有数据(扩展)

使用Union 和 Union All 操作符进行表数据的合并,使用前提是表或者查询的字段数、列表名称/类型相同。

Union 和 Union All 的区别:

Union        在表链接后会对所产生的结果进行排序运算,删除重复的记录再返回合并结果。

Union All       只是简单的将两个结果合并后返回。因不需去重,所以效率高于union。

1.2 子查询

1.2.1 概述

查询中嵌套查询,即一个查询的结果作为另一个查询的条件,称嵌套查询为子查询。

1.2.2 子查询用法

子查询需用小括号括起来。

(此处省略一万字... ...)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值