MySQL 多表连接查询

交叉连接

特点:

又称“笛卡尔乘积”

将多张表中的数据行一 一对应连接在一起,结果集的数据行数相当于多张表数据行数“相乘”后的结果

语法格式:

select  字段列表   from  表1,表2,表3...... [where  连接条件1  and  连接条件2  ...]

注释:

  1. 示例中不使用“表名.列名”来标识字段来自于哪张表,可以使用为表起别名来简化书写

  2. 表的别名是在from关键字后面定义的,在select语句中任何子句中都可以使用别名

select可以实现两张表以上表的连接查询,其创建规则与两个表连接相同,只是在where条件中增加一个and复合条件

内连接(常用之一)

特点:

使用比较运算符对表间公共字段的数据进行比较操作,并得出表中与连接条件相匹配的数据行,组合成新的结果集(只有满足条件的记录才能出现在结果集中)

语法格式:

SELECT …. FROM 表1 [INNER] JOIN 表2 on <表达式>

内连接分为三种:等值连接,自然连接,不等连接

等值连接:

特点:

  1. 至少一个同属于两表的行符合连接条件时,内连接才会返回行
  2. 返回的结果集是两个表中所有相匹配的数据,舍弃不匹配的数
自连接

在一些特殊环境下,对同一张表进行连接查询

语法格式:

select  ...... from 表1 别名1 
inner   join   表1  别名2  on  别名1.字段1=别名2.字段2  

外连接(常用之一)

特点:

对多张表进行外连接查询时,结果集将返回from子句中提到的至少一个表的所有的行

外连接和内连接的异同点:

内连接只返回匹配的数据行,而外连接则会至少保留一张表中全部数据;至于保留哪张表数据,取决于左外连接还是右外连接

左外连接

特点:

  1. 左外连接的结果集包括left join子句中指定的左表的所有行,而不仅仅是联接列所匹配的行
  2. 如果右表没有匹配行,则在相关联的结果集行中右表的所有选择列均为空值

语法格式:

SELECT .... FROM table_1  Left [OUTER] JOIN table_2 ON <表达式>

右外连接

语法格式:

SELECT .... FROM table_1 RIGHT [OUTER] JOIN table_2 ON <表达式>

全外连接

语法格式:

SELECT ... FROM table_1 Full JOIN table_2 ON <表达式>

注释:

全外连接又被称为完整外连接,它除了包括匹配行之外,还包括join关键字左右表中不匹配的数据行,其中,左表或右表中缺少的属性值用NULL表示

MySQL不支持全外连接,适用于Oracle和SQLServer

UNION

特点:

  1. UNION 操作符:UNION 操作符返回两个查询的结果集的并集,去除重复记录
  2. UNION ALL操作符:返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重

语法格式:

SELECT  column , . . .  FROM  table_1
UNION   [ALL]
SELECT  column , . . .  FROM  table_2

注释:

  1. 合并查询结果
  2. 可以给出多条SELECT语句,并将它们的结果组合成单个结果集
  3. 合并时,两个表对应的列数和数据类型必须相同,并且相互对应
  4. 各个SELECT语句之间使用UNION或UNION ALL关键字分隔

注意:

执行UNION ALL语句时所需要的资源比UNION语句少。

如果明确知道合并数据后的结果数据 不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值