如何优雅的使用SQL数据库表之间的连接?

一:首先,我们要理解数据库的表连接方式有几种。

  • 内连接
  • 外连接(左连接、右连接、全连接)
  • 交叉连接

二:下面一个一个介绍他们的使用

先建立两个表,一个是学生表,另外一个是成绩表;

                                                    学生表:Student

StdNoStdNameStdAgeStdSexStdClass
001小白171
002小李182
003小蒋181
004小陈152

                                                   成绩表:Score

ScoreIDStdNoStdScore
100487
200292
300190
500598

1.内连接(inner join)

内连接是指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

内连接查询语法:select * from Student inner join Score on Student.StdNo = Score.StdNo

查询结果:

StdNoStdNameStdAgeStdSexStdClassScoreIDStdNoStdScore
001小白171300190
002小李182200292
004小陈152100487

 

2.外连接

外连接的连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。分为左外连接、右外连接和全外连接。

(1)左外连接(left join):左边表数据的行全部保留,右边表保留符合连接条件的行。

左外连接查询语法:select Student.*,Score.* from Student left join Score on  Student.StdNo = Score.StdNo

查询结果:

StdNoStdNameStdAgeStdSexStdClassScoreIDStdNoStdScore
001小白171300190
002小李182200292
003小蒋181NULLNULLNULL
004小陈152100487

(2)右外连接(right join):右边表数据的行全部保留,左边表保留符合连接条件的行。

 右外连接查询语法:select Student.*,Score.* from Student right join Score on  Student.StdNo = Score.StdNo

查询结果:

StdNoStdNameStdAgeStdSexStdClassScoreIDStdNoStdScore
001小白171300190
002小李182200292
004小陈152100487
NULLNULLNULLNULLNULL500598

(3)全外连接(full join):全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上。

全外连接查询语法:select Student.*,Score.* from Student full join Score on  Student.StdNo = Score.StdNo

查询结果:

StdNoStdNameStdAgeStdSexStdClassScoreIDStdNoStdScore
001小白171300190
002小李182200292
003小蒋181NULLNULLNULL
004小陈152100487
NULLNULLNULLNULLNULL500598

3.交叉连接(cross join)

交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

在此例中,Student表有4行,Score表有4行。笛卡尔积返回4*4=16行记录。查询语句没有on条件,可以用where限制。

交叉连接查询语法:select Student.*,Score.* from Student cross join Score

查询结果:

StdNoStdNameStdAgeStdSexStdClassScoreIDStdNoStdScore
001小白171100487
001小白171200290
001小白171300192
001小白171500598
002小李182100487
002小李182200290
002小李182300192
002小李182500598
003小蒋181100487
003小蒋181200290
003小蒋181300192
003小蒋181500598
004小陈152100487
004小陈152200290
004小陈152300192
004小陈152500598

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值