3. 连接查询:inner join、left join、right join 、full join、cross join

实现从两个或两个以上表中检索数据结果集中出现的列来自于两个或两个以上表中的检索操作被称为连接技术。
在 SQL Server中,连接操作又可以分为内连接、自连接、外连接、交叉连接等。



1. 内连接【inner join】(即我们常用 ——>where+列相等)

内连接把两个表中的数据连接生成第三个表,第三个表中仅包含那些满足连接条件的数据行。
内连接使用INNER JOIN连接运算符,并且使用ON关键字指定连接条件。
内连接是一种最常用的连接方式,所以JOIN关键字前面可以省略连接类型,默认为内连接。

内连接的语法格式:

在这里插入图片描述

inner join例子1:

查询每个学生的姓名、课程号和成绩。 
USE teaching 
SELECT student.sname, sc.cno, sc.score
FROM student INNER JOIN sc ON student.sno=sc.sno


也可以利用下面的语句来实现:    
SELECT student.sname, sc.cno, sc.score
FROM student,sc
WHERE  student.sno=sc.sno

注意:当从多个表中查询的列名相同时,列名前必须加表名。

inner join例子2:

查询“计算机”专业的学生所选课程的平均分。
SELECT b.cno, avg(b.score) as 平均分
FROM student a  INNER JOIN sc b
ON a.sno=b.sno 
where a.specialty='计算机' 
GROUP BY b.cno



2. 自连接【inner join】(即我们常用 ——>where+列相等)

连接操作也可以在同一张表内进行自身连接,即将同一个表的不同行连接起来。
自连接必须为表指定两个别名,使之在逻辑上成为两张表。

从“teaching”库中查询同名学生的信息。

SELECT * FROM student a  INNER JOIN student b  ON a.sname=b.sname
AND a.sno<>b.sno

<>是不相等的意思



3. 外连接【left join、right join 、full join】

自己的理解:
左外连接:连接的时候,左边的表部分行可能没有连接上,然后把这部分保留到结果集中,没有的属性为null
右外连接:连接的时候,右边的表部分行可能没有连接上,然后把这部分保留到结果集中,没有的属性为null

ppt上:
左外连接:对连接条件中左边的表不加限制;
右外连接:对右边的表不加限制;
全外连接: 对两个表都不加限制,所有两个表中的行都会包括在结果集中。

在这里插入图片描述

左外连接left join 例子:

在“teaching”库中查询每个学生及其选修课程的成绩情况(含未选课的学生信息)。

SELECT student.*,sc.cno,sc.score
FROM student LEFT JOIN sc
ON student.sno=sc.sno


查询所有男生的选课信息,包括没选课的男生。
SELECT student.*,sc.cno,sc.score
FROM student LEFT JOIN sc
ON student.sno=sc.sno 
where ssex='男'

全连接 full join例子:

查询每个学生及其选修课程的情况(含未选课的学生信息及未被选修的课程信息)SELECT course.*,sc.score,student.sname, student.sno
FROM course FULL JOIN sc ON course.cno=sc.cno 
FULL JOIN student  ON student.sno=sc.sno

在这里插入图片描述



4. 交叉连接【cross join】

交叉连接也被称为笛卡尔积连接,包含所连接的两个表中所有行的全部组合。
交叉连接使用CROSS JOIN关键字。交叉连接没有实际意义,但是理解外连接和内连接的基础。

自己的理解:
左边是n行,右边是n行,则结果集为n*n行

查询所有学生可能的选课情况。
SELECT a.*,b.cno,b.score
FROM student a CROSS JOIN sc b
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你说的白是什么白_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值