mysql 关联查询_mysql连接查询和联合查询

一、连接查询和联合查询基本知识

(一)连接查询

若一个查询同时涉及两个或两个以上的表,则称之为连接查询,连接查询可分为内连接、外连接和交叉连接。

1.内连接

内连接使用比较运算符对两个表中的数据进行比较,并列出与连接条件匹配的数据行,组合成新的纪录。结果只保留满足条件的记录。

关键字:inner join on

基本语法:select a.列1,a.列2,...,a.列n,b.列1,b.列2,...,b.列n from a inner join b on 条件;

2.外连接

外连接的返回结果中不仅包含符合连接条件的行,还会包括左表、右表或两个表中的所有数据行,这三种情况分别称为左连接,右连接,和全连接(mysql没有全连接,要实现全连接可用左连接+UNION+右连接实现)。

①左连接

左表保持不动,右表在右侧滑动,用右表匹配左表。结果保留左表的所有行,右表中不匹配的行默认填充为空值NULL。

关键字:left join on

基本语法:select a.列1,a.列2,...,a.列n,b.列1,b.列2,...,b.列n from a left join b on 条件;

②右连接

右表保持不动,左表在左侧滑动,用左表匹配右表。结果保留右表的所有行,左表中不匹配的行默认填充为空值NULL。

关键字:right join on

基本语法:select a.列1,a.列2,...,a.列n,b.列1,b.列2,...,b.列n from a right join b on 条件;

3.交叉连接

交叉连接的返回结果是被连接的两个表中的所有数据行的笛卡儿积,也就是返回第一个表中符合查询条件的数据行乘以第二个表中符合查询条件的数据行数。从结果看,就是两个表中所有数据的组合,在实际开发中,一般不会使用交叉连接,而是使用具体的条件,对数据进行有目的的查询,加了where条件的交叉连接返回结果与内连接一致。

关键字:cross join [where 条件]

基本语法:select a.列1,a.列2,...,a.列n,b.列1,b.列2,...,b.列n from a cross join b [where 条件],使用时cross join 可省略即select a.列1,a.列2,...,a.列n,b.列1,b.列2,...,b.列n from a b [where 条件];

(二)联合查询

关键字:union/union all

union与union all的区别:union会把多个查询语句的结果合并后去重,union all会保留所有的查询结果。

二、查询举例

下图为商品表和品牌表数据。

0fa262b2bf7d2304b91b865bfed8a879.png

(一)连接查询

1.内连接:查询所有商品的商品名、品牌名、商品价格以及商品数量。

a31e375f62829bc84a76ec0b3c29a32e.png

2.外链接

2.1左连接:查询所有品牌旗下的商品信息;

1110af4fed0bd12dc4df8c94e71e4712.png

2.2右连接:查询所有品牌旗下的商品信息;

58fe9f7c6ea17f41d9cba2164eb1b93b.png

3.交叉连接:查询所有商品的商品名、品牌名、商品价格以及商品数量。

8a720702c9bf0bf400e34b3f496265a6.png

(二)联合查询

下图为会员表数据

8ae68b27941cf37ebae704da424e22e5.png

查询会员表中的重庆、杭州的会员姓名并合并。

1.union

1f60fc7ab30c6aada361faa139104555.png

2.union all

eacf472aa74a0ec0e7f15d9723bb8c60.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值