任务5.2 多表数据查询
如果我们需要同时查看学生的基本信息及其选课信息就需要用到两张表S(学生表)和SC(选课表)的数据,这时就需要进行多表查询。多表查询需要将表进行连接。
如果多表查询时未加表连接条件则会出现如图所示结果。该连接称为交叉连接,交叉连接的结果称为笛卡儿积。笛卡儿积结果中列数是两张表列数之和,行数是两张表行数之积。
笛卡儿积的结果对于我们来讲是没有意义的,我们需要对表加上连接条件。表连接分为内连接和外连接两种方式。命令也有SQL Server和ANSI标准语法两种写法,其中ANSI标准语法是通用的。
SQL Server语法格式:
SELECT 列名或表达式,……
FROM 表1,表2,……
WHERE 连接条件1 AND 连接条件2 ……
ANSI语法格式:
SELECT 列名或表达式,……
FROM 表1 JOIN 表2 ON 连接条件1
JOIN 表3 ON 连接条件2……
1.内连接
内连接包括有等值连接、自然连接、不等连接、自连接等连接方式。
1)等值连接:连接条件为两个字段值相等,可以是不同字段值相等。
【例5-24】查询S(学生表)中学生的基本信息及SC(选课表)中该生
相关选课信息。我们分别用两种语法实现该查询。
2)自然连接:自然连接时特殊的等值连接,它要求连接条件必须是公
共字段相等,且结果集中没有重复列。而等值连接结果集中可以有重
复列。
【例5-25】用自然连接方式查询S(学生表)中学生“李勇”的基本
信息及SC(选课表)中该生的选课信息。只需在【例5-23】基础上去
掉重复字段SNO即可。
3)比较连接:连接条件使用比较运算符。即连接条件不用等号。
【例5-27】为每位教师查询一下非自己讲授的课程。
4)自连接:把一张表模拟成两张表,自己和自己进行连接查询。
【例5-28】查询所有年龄比刘晨小的学生姓名、性别、出生日期和
刘晨的出生日期。
2.外连接外连接包括左外连接(LEFT JOIN)、
右外连接(RIGHT JOIN)和全外连接(FULL JOIN)三种。
内连接主要查询两张表中匹配的记录,外连接可以查询两张表中所有
匹配和非匹配的记录。外连接只有ANSI标准语法格式。
1)左外连接(LEFT JOIN):查询JOIN关键字左边表中所有的记录及
右边表中匹配的记录,如果右边表没有匹配记录,则相应字段显示为
空值。
2)右外连接(RIGHT JOIN):查询JOIN关键字右边表中所有的记录
及左边表中匹配的记录,如果左边表没有匹配记录,则相应字段显示
为空值。
3)全外连接(FULL JOIN):显示两张表中所有匹配和非匹配记录。
非匹配记录的相应字段为空值。