一、表的连接查询
数据查询中,经常需要提取两个或者多个表的数据,需要用表的连接来实现若干个表数据的联合查询。格式如下:
select 列名1, 列名2, 列名3, ......
from 表1, 表2, ......
where 连接条件
在SQL SERVER中,连接分为:内连接(INNER JOIN)和外连接(OUTER JOIN)两种类型。
1-1、内连接-INNER JOIN
内连接是最基本的连接,使用INNER JOIN关键字,不使用该关键字时,默认均为内连接。
内连接的分类:
- 等值连接
- 非等值连接
- 自连接
1、等值连接
所谓等值连接,是指表之间通过“等于”关系连接起来,产生一个连接临时表,然后对该临时表进行处理后生成最终结果。
示例:
2、非等值连接
表之间的连接关系不是“等于”,而是其他关系。
示例:
3、自连接
将同一个表进行连接,这种连接称为自连接。
示例:
1-2、外连接-OUTER JOIN
内连接的条件:
仅当至少有一个同属于两表的行符合连接条件时,内连接才返回行,所以内连接消除与另一个表中的任何行不匹配的行。
而外连接会返回FROM子句中提到的至少一个表或视图的所有行,只要这些行符合任何WHERE或HAVING搜索条件。
外连接的分类:
1、左外连接
左边表的所有行都要,右边表中匹配的行才要。
示例:
2、右外连接
右边表的所有行都要,左边表中匹配的行才要。
3、全外连接
此运算符包含两个表中的所有的行。
全外连接 = 左外连接 + 右外连接的综合。
1-3、子查询
1、一般子查询
select ? from 表名 where (select 子查询);
示例1:
示例2:
以上示例,子查询均返回一个结果。
当一个子查询的返回值为多行时,需要any、 all、 in、 not in选项。
示例3:
any关键字:符合其中一个结果值即可。
示例4:
2、相关子查询
在前面的示例中,每个子查询仅执行一次,在有的查询中,子查询不只执行一次。
示例1:显示成绩比该课程平均成绩高的学生的成绩表
示例2:
3、带EXISTS测试的子查询
示例1:
示例2: