赞
踩
实现从两个或两个以上表中检索数据且结果集中出现的列
来自于两个或两个以上表中的检索操作被称为连接技术。
在 SQL Server中,连接操作又可以分为内连接、自连接、外连接、交叉连接等。
内连接把两个表中的数据连接生成第三个表,第三个表中仅包含那些满足连接条件的数据行。
内连接使用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
连接操作也可以在同一张表内进行自身连接,即将同一个表的不同行连接起来。
自连接必须为表指定两个别名,使之在逻辑上成为两张表。
从“teaching”库中查询同名学生的信息。
SELECT * FROM student a INNER JOIN student b ON a.sname=b.sname
AND a.sno<>b.sno
<>是不相等的意思
自己的理解:
左外连接:连接的时候,左边的表部分行
可能没有连接上,然后把这部分保留到结果集中,没有的属性为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
交叉连接也被称为笛卡尔积连接,包含所连接的两个表中所有行的全部组合。
交叉连接使用CROSS JOIN关键字。交叉连接没有实际意义,但是理解外连接和内连接的基础。
自己的理解:
左边是n行,右边是n行,则结果集为n*n行
查询所有学生可能的选课情况。
SELECT a.*,b.cno,b.score
FROM student a CROSS JOIN sc b
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。