常用的SQL多表连接查询

常用的多表查询

a表(id,name)
b表(id,age)
常用的SQL多表连接查询_第1张图片

一、横向合并

添加到同一行中,列数增多

1. 内联

方法一:用where(带条件)连接两表
select * 
from a,b 
where 
	a.id = b.id 
	
方法二:用inner join 表名 on(带条件)连接两表
select * 
from a
inner join b 
	on a.id = b.id 

在这里插入图片描述

2. 左联

左联,顾名思义,以左表为主,右表为辅。(查询出来的行数为左表的行数)
即左表的数据全部查出来,右表的数据拼上去。
(先把a表的数值全部查出来)
(b表中,缺少数值时为空,如b表中id为2的这条数据(id,age)数值为空)
(b表中,多余的数值没有查出来,如b表中没有id为3的这条数据(id,age)没有查出来)

select * 
from a
left join b 
	on a.id = b.id 

在这里插入图片描述

3. 右联

同理,右联,以右表为主,左表为辅。(查询出来的行数为右表的行数)
即右表的数据全部查出来,左表的数据拼上去。
(先把b表的数值全部查出来)
(a表中,缺少数值时为空,如a表中id为2的这条数据(id,age)数值为空)
(a表中,多余的数值没有查出来,如a表中没有id为3的这条数据(id,age)没有查出来)

select * 
from a
right join b 
   on a.id = b.id 

在这里插入图片描述

二、纵向合拼

添加到同一列中,行数增多

使用union all来拼接(行数增加)(查询出来的字段要相同,如:编号,名字或年龄)
select 	id as 编号, name as 名字或年龄 from a
union all 
select 	id as 编号, age as 名字或年龄 from b 

常用的SQL多表连接查询_第2张图片

三、笛卡尔积

SQL语句上就是不加上其他的条件,直接把多张表拼起来
总的行数为a表的条数乘上b表的条数(2*2)
a表的每一条数据都与b表的每一条数据组合一次
(如查询出来的结构中,小光有18和19两个年龄,小丽也有18和19两个年龄)

select * from a,b 

常用的SQL多表连接查询_第3张图片
常用的SQL多表连接查询_第4张图片

你可能感兴趣的:(笔记,sql,java)