数据库多表连接查询的实现⽅式
连接查询
连接查询是关系数据库中最主要的查询,主要包括⾃连接、内连接、外连接和交叉连接。通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的⼀个标志。在关系数据库管理系统中,表建⽴时各数据之间的关系不必确定,常把⼀个实体的所有信息存放在⼀个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给⽤户带来很⼤的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进⾏查询。
内连接的连接查询结果集中仅包含满⾜条件的⾏,内连接是SQL Server缺省的连接⽅式,可以把INNERJOIN简写成JOIN,根据所使⽤的⽐较⽅式不同,内连接⼜分为等值连接、⾃然连接和不等连接三种;交叉连接的连接查询结果集中包含两个表中所有⾏的组合;外连接的连接查询结果集中既包含那些满⾜条件的⾏,还包含其中某个表的全部⾏。
1.
交叉连接即笛卡⼉乘积,是指两个关系中所有元组的任意组合。⼀般情况下,交叉查询是没有实际意义的。
例如:如果希望得到学⽣表和选课表两个关系模式的乘积,查询语句为
SELECT * FROM学⽣表CROSS JOIN选课表
2.
内连接是⼀种最常⽤的连接类型。内连接查询实际上是⼀种任意条件的查询。使⽤内连接时,如果两个表的相关字段满⾜连接条件,就从这两个表中提取数据并组合成新的记录,也就是在内连接查询中,只有满⾜条件的元组才能出现在结果关系中。
例如:要查询每个已经选课的学⽣的情况,查询语句为
SELECT * FROM学⽣表INNER JOIN选课表ON学⽣表.学号=选课表.学号
3.
等值连接:在连接条件中使⽤等于号(=)运算符⽐较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
不等连接:在连接条件使⽤除等于运算符以外的其它⽐较运算符⽐较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<;和<>。
⾃然连接:在连接条件中使⽤等于(=)运算符⽐较被连接列的列值,但它使⽤选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
4.
如果在⼀个连接查询中,涉及到的两个表都是同⼀个表,这种查询就称为⾃连接查询。同⼀张表在FROM字句中多次出现,为了区别该表的每⼀次出现,需要为表定义⼀个别名。⾃连接是⼀种特殊的内连接,它是指相互连接的表在物理上为同⼀张表,但可以在逻辑上分为两张表。
例如:要求检索出学号为20210的学⽣的同班同学的信息,查询语句为
SELECT学⽣表 * FROM学⽣表JOIN学⽣表AS学⽣表1ON学⽣表.班级=学⽣表1.班级
WHERE学⽣表1.学号='20210'
5.
内连接的查询结果都是满⾜连接条件的元组。但有时我们也希望输出那些不满⾜连接条件的元组信息。⽐如,我们想知道每个学⽣的选课情况,包括已经选课的学⽣(这部分学⽣的学号在学⽣表中有,在选课表中也有,是满⾜连接条件的),也包括没有选课的学⽣(这部分学⽣的学号在学⽣表中有,但在选
课表中没有,不满⾜连接条件),这时就需要使⽤外连接。外连接是只限制⼀张表中的数据必须满⾜连接条件,⽽另⼀张表中的数据可以不满⾜连接条件的连接⽅式。sql语句怎么查询两张表的数据
左外连接(LEFTOUTER JOIN)
如果在连接查询中,连接管⼦左端的表中所有的元组都列出来,并且能在右端的表中到匹配的元组,那么连接成功。如果在右端的表中,没能到匹配的元组,那么对应的元组是空值(NULL)。这时,查询语句使⽤关键字LEFT OUTERJOIN,也就是说,左外连接的含义是限制连接关键字右端的表中的数据必须满⾜连接条件,⽽不关左端的表中的数据是否满⾜连接条件,均输出左端表中的内容。
例如:要查询所有学⽣的选课情况,包括已经选课的和还没有选课的学⽣,查询语句为
SELECT学⽣表.学号,姓名,班级,课程号,成绩 FROM学⽣表LEFT OUTER JOIN选课表ON学⽣表.学号=选课表.学号
左外连接查询中左端表中的所有元组的信息都得到了保留。
右外连接(RIGHTOUTERJOIN)
右外连接与左外连接类似,只是右端表中的所有元组都列出,限制左端表的数据必须满⾜连接条件,⽽不管右端表中的数据是否满⾜连接条件,均输出表中的内容。
例如:同上例内容,查询语句为
SELECT学⽣表.学号,姓名,班级,课程号,成绩
FROM学⽣表RIGHTOUTERJOIN选课表ON学⽣表.学号=选课表.学号
右外连接查询中右端表中的所有元组的信息都得到了保留。
全外连接(FULL OUTER JOIN)
全外连接查询的特点是左、右两端表中的元组都输出,如果没能到匹配的元组,就使⽤NULL来代替。
例如:同左外连接例⼦内容,查询语句为
SELECT学⽣表.学号,姓名,班级,课程号,成绩 FROM学⽣表FULL OUTER JOIN选课表ON学⽣表.学号=选课表.学号
全外连接查询中所有表中的元组信息都得到了保留。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。