连接查询(交叉连接,内连接,外连接,自然连接)

创建一个学生表和一个课程表。先放出实验的表结构:

create table student(
id int,
name varchar(15),
gender varchar(15),
cid int
);
create table class(
cid int,
cname varchar(15)
);

插入数据:

insert into student values(1,"lilei","male",1),(2,"hanmeimei","male",2),(3,"jack","male",1),(4,"alice","female",4),(5,"lili","female",NULL); 
--这里特意创建了一个class中没有的4,以及一条cid为NULL值的记录。

insert into class values(1,"linux"),(2,"python"),(3,"java"),(5,"html5");
--这里特意创建了一个student中没有的5

查看数据:

1.交叉连接 cross join

不需要连接条件的连接。

交叉连接产生的结果就是笛卡儿积,左表的每一条记录都会与右表的所有记录连接并保留。

产生记录数 = A表记录数 × B表记录数

例如:

           select * from student cross join class;
或者:      select * from student,class;

产生20条记录。(截图不完整

总结:交叉连接没有实际数据价值,应尽量避免。

2.内连接 [inner] join

将两张表根据指定的条件连接起来,严格连接

内连接是将一张表中的每一条记录去另外一张表中根据条件匹配:匹配成功,保留连接数据;匹配失败,都不保留。

语法:左表 join 右表 on 连接条件

(不用on条件的时间,结果与交叉连接相同。)

例如:

SELECT * FROM student JOIN class ON student.cid = class.cid;

3.外连接 outer join

是一种不严格的连接方式

分为两种:左外连接(左连接)left join,右外连接(右连接)right join

外连接有主表和从表之分。左外连接左表为主表;右外连接右表为主表。  

外连接是将主表的记录去匹配从表的记录:匹配成功,记录保留;匹配失败,也保留,只是从表字段置空。

例如:

select * from student left join class on student.cid = class.cid;
select * from student right join class on student.cid = class.cid;

总结:外连接与内连接区别在于数据匹配失败的时候,外连接会保留一条记录(主表数据保留,从表数据置空)

4.自然连接 natural join

是一种自动寻找连接条件的连接查询。

  • 自然内连接:类似内连接,但不提供连接条件。
  • 自然外连接:类似外连接,但不提供连接条件。

例如:

select * from student natural join class;

select * from student natural left join class;

总结:自然连接根据相同的列名来匹配连接条件,并且会将两个表中列名相同的列合并为一个列。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值