关系型数据库多表联合查询

关联查询是日常工作中常用的查询方式,关联查询sql编写的思路一般如下:1、先确定所连接的表,2、再确定所要查询的字段,3、确定连接条件以及连接方式(表连接分类: 内连接、外连接、交叉连接、自连接)

1、内连接:[inner] join on
分类:等值连接、非等值连接
(1)等值连接: 指使用等号"=“比较两个表的连接列的值,相当于两表执行笛卡尔后,取两表连结列值相等的记录(自然连接是一种特殊的等值连接)
SQL语法格式:
语法1:select 字段 from 表1 [inner] join 表2 on 表1.字段1=表2.字段1;
说明:内连接中的inner join 和 join 是等价的!但是建议为了程序的可读性尽量不要省略inner!
语法2:select 字段 from 表1,表2 where 表1.字段1=表2.字段1;
(2)非等值连接:指使用”>“或”<"比较两个表的连接列的值,相当于两表执行笛卡尔后,取一个表大于或小于另一个表的连结列值的记录
SQL语法格式:
语法1:select 字段 from 表1 [inner] join 表2 on 表1.字段1>或<表2.字段1;
语法2:select 字段 from 表1,表2 where 表1.字段1>或<表2.字段1;

2、外连接
分类:左外连接、右外连接、全外连接
(1)左外连接:left outer join
连接效果:查询结果包含左、右两个表需要查询的全部行,左侧的表中的全部数据都会被显示出来,但是右侧表的数据,只有和左侧匹配上的数据才会被查询出来!否则显示为null
SQL语法格式:
语法1:select 字段 from 表1 left outer join 表2 on 表1.字段1=表2.字段1...
语法2(oracle中的写法): select 字段 from 表1 left outer join 表2 where 表1.字段1=表2.字段1(+);
(2)右外连接:right outer join
连接效果:查询结果包含左、右两个表需要查询的全部行,右侧的表中的全部数据都会被显示出来,但是左侧表的数据,只有和右侧匹配上的数据才会被查询出来!否则显示为null
SQL语法格式:
语法1:select 字段 from 表1 right outer join 表2 on 表1.字段1=表2.字段1...
语法2(oracle中的写法):select 字段 from 表1 left outer join 表2 where 表1.字段1(+)=表2.字段1;
(3)全外连接:full/all outer join,查询结果包含左、右两个表需要查询的全部行,对应字段没有值显示null,mysql中没有全外关联,但可以用union连接左外关联和右外关联达到同样的效果
SQL语法格式:select 字段 from 表1 full outer join 表2 on 表1.字段1=表2.字段1;

3、交叉连接
左表中的每一行与右表中的所有行组合,也叫表与表之间做笛卡尔积查询
SQL语法格式:(无条件查询)
语法1:select * from 表1 cross join 表2;
语法2:select * from 表1, 表2;

4、自连接
当前表与自身的连接查询,关键点在于虚拟化出一张表,即给自身的表定义一个别名
SQL语法格式:select B.* from 表1 as A, 表1 as B where A.字段 = B.字段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里有阳光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值