涉及多个表的查询被称为连接查询。

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子句。

 

 

 

 

 

 

 

 

 

 

 

      

posted on 2012-10-18 09:45  @雨欣@  阅读(758)  评论(0编辑  收藏  举报