涉及多个表的查询被称为连接查询。
T-SQL中,连接查询有两大类表示形式,一类是符合SQL标准连接谓词表示形式,另一类是T-SQL扩展的使用关键字Join的表示形式。
一,连接谓词表示
- 在select语句的where子句中使用比较运算符给出连接条件对表进行连接,这种表示形式称为连接谓词表示形式。
- 若选择的字段名在各个表中是唯一的,则可以省略字段名前的表名。
Ps:连接谓词中的两个列(即字段)称为连接字段,它们必须是可比的。
连接查询和子查询的区别:连接可以合并两个或多个表中数据,而带子查询的select语句的结果只能来自一个表,子查询的结果是用来作为选择结果数据时进行参照的。
使用连接查询和子查询的各个优势:使用子查询表示时可以将一个复杂的查询分解为一系列的逻辑步骤,条例清晰;而使用连接表示有执行速度快的优点。
二,Join表示
- T-SQL扩展以join关键字指定连接的表示方式,使表的连接运算能力得到增强。from子句的joined_table表示将多个表连接起来。
join关键字指定的连接有三种类型:
- 内连接(inner join) 内连接按照On所指定的条件合并两个表,返回满足条件的行。内连接是系统默认的,可以省略Inner关键字,使用内连接后仍可使用where子句指定条件。
- 外连接(outer join) 外连接的结果表不仅包括满足条件的行,还包括相应表中的所有行。可以省略outer关键字
- 交叉连接(cross join)将两个表进行笛卡尔积运算,结果表是由第一个表的每行与第二个表的每行拼接后形成的表。即结果表的行数等于两个表行数之积。
1、内连接
- 内连接可以用于多个表的连接
- 一个表与它自身进行连接,即自连接。何时使用自连接?若要一个表中查询具有相同列值的行,则可以使用自连接。使用自连接时需要为表指定;两个别名,且对所有列的引用均要用别名限定。
Ps:使用As选项为表指定别名,As也可以省略,直接给出别名。别名主要用在相关子查询及连接查询中。
举一个自连接使用的例子:有一张表:XS_KC学号、课程号、成绩),查找不同课程但成绩相同的学生的学号、课程号和成绩。
查询语句如下:select 学号、课程号、成绩
from XS_KC a join XS_KC b
on a.学号=b.学号 and a.成绩=b.成绩 and a.课程号!=b.课程号
2,外连接
- 外连接包括以下3种连接方式:
左外连接(left outer join):结果表中除了包括满足连接条件的行外,还包括左表的所有行。
右外连接(right outer join):结果表中除了包括满足连接条件的行外,还包括右表的所有行。
完全外连接(full outer join):结果表中除了包括满足连接条件的行外,还包括两个表的所有行。
- 外连接只能对两个表进行。
3,交叉连接
- 交叉连接不能有条件且不能带where子句。