今天学习的SQL连接查询主要分三个,即内连接,左外连接,右外连接。
对于个人理解来说,用数学中的集合来理解可能会更好的理解,比如说连接查询中的内连接可以理解为数学集合中的交集,
举个例子来说现在有两个集合 q(1,2,3,4,5) 和 p(2,3,4,5,6),则它们的交集为 w(2,3,4,5), 集合q和集合p当作两个表,那交集w就相当于它们内连接后的结果。
左外连接则可以理解为集合q和交集w的并集 即q∪w=(1,2,3,4,5),右外连接也是同一个道理。
下面用一个简单例子来演示一下:首先创建了两个简单的表
#商品分类表commodity_1
create table commodity_1(
id int primary key , # 商品分类类型的编号
cname varchar(30), # 商品分类的名称
cid int # 某商品的编号
);
# 商品表commodity_2
create table commodity_2(
sid int primary key , # 商品的编号
sname varchar(30) # 商品的名称
);
# 插入一些数据
insert into commodity_1 values (1,'日常生活用品',4),(2,'零食区',5),(3,'粮食区',6);
insert into commodity_1 values (4,'饮料区',8);
insert into commodity_2 values (4,'桶'),(5,'旺仔小馒头'),(6,'油');
insert into commodity_2 values (7,'自行车');
内连接
# 内查询
# 内连接关键字: inner join ... on
# 显式内连接格式: select * from 左表 inner join 右表 on 关联条件;
# 隐式内连接格式: select * from 左表 , 右表 where 关联条件;
注意: 左表和右表没有特殊含义,只是在前面是左表,在后面的是右表
# 例子
select id,cname,commodity_2.sname from commodity_1 inner join commodity_2 on commodity_1.cid=commodity_2.sid;
结果
左外连接
# 左连接
# 内连接关键字: left outer join ... on
# 左外连接格式: select * from 左表 left outer join 右表 on 关联条件;
# 例子
select id,cname,commodity_2.sname from commodity_1 left join commodity_2 on commodity_1.cid=commodity_2.sid;
结果
(获取所有的商品分类和对应的商品,没有的null补全)
右外连接
# 内连接关键字: right outer join ... on
# 左外连接格式: select * from 左表 right outer join 右表 on 关联条件;
# 例子
select id,cname,commodity_2.sname from commodity_1 right join commodity_2 on commodity_1.cid=commodity_2.sid;
结果
以上就是上述三个连接查询的内容啦
还是小白新一个,如有不对的地方或者理解有误,欢迎指正。