等值连接、自然连接和内连接之间的区别

引言

假设有这样四个表student、teacher、score和course它们的定义如下:

create table student(
    学号 int primary key,
    姓名 varchar(20)
);
create table teacher(
    工号 int primary key,
    姓名 varchar(20)
);
create table course(
    课号 int primary key,
    课名 varchar(20),
    教师 int references teacher(工号)
);
create table score(
    学号 int references student(学号),
    课号 int references course(课号),
    成绩 int
);

 

若要完成以下任务:

  • 任务1:连接course和score(按课号相同的策略连接) [course和score符合条件的只有314行,交叉连接有1000行]
  • 任务2:连接teacher和course(按工号和教师相同的策略) [teacher和course符合条件的只有10行,交叉连接有200行]

1.等值连接(join on)

任务1

select *
from score join course
on score.课号=course.课号;

0a8ab9d9bf634954935d47f9a0618740.png

 任务2

SELECT *
FROM teacher JOIN course
ON teacher.`工号`=course.`教师`;

dc736cb68fd943899bdb30f59cdaa3de.png

2.自然连接(natural join) 

SELECT *
FROM score natural JOIN course;

74d8f191149c49b4977d1ea220a1a5b7.png

SELECT *
FROM teacher NATURAL JOIN course;

c1d3158b4671493997547fe5113bde3c.png

[注意]natural join不能加on

SELECT *
FROM teacher NATURAL JOIN course
ON teacher.`工号`=course.`教师`;

188e1869fc2b4206aedf6dee8d131b93.png

3.内连接(inner join on)

SELECT *
FROM score INNER JOIN course
ON score.`课号`=course.`课号`;

0097d8a7f1e04e43b263f3c7bea98e6b.png

SELECT *
FROM teacher INNER JOIN course
ON teacher.`工号`=course.`教师`;

f783eb0d484d4257a314a6cc8d402d15.png

[总结]

  • 内连接和等值连接效果一样,只是叫法不一样
  • 在运算的两个联系中,如果两个联系有公共属性(同名属性),则自然连接会去除其中一个联系的共有属性,只留下另一个的共有属性,等值连接和内连接则会保留两者的共有属性
  • 在运算的两个联系中,如果两个联系没有公共属性(同名属性),则自然连接的笛卡儿积的结果一样。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值