一、外连接:
1、外连接概念:多表查询时,至少返回一个表里的所有记录,根据匹配条件有选择性的返回另一张表的记录(即两表交集的部分)
2、外连接分类及语法
1)左外连接
语法:SELECT <字段列表> FROM <表1> LEFT [OUTER] JOIN <表2> ON <连接条件>
2)右外连接
语法:SELECT <字段列表> FROM <表1> RIGHT [OUTER] JOIN <表2> ON <连接条件>
3、例:
以下查询示例 所用表关系示意图
1)在MyServer数据库查询所有员工,要求包含部门名称
A:使用左外连接
USEMyServer GOSELECTE.*,D.D_Name FROMEmployee E LEFTOUTERJOINDepartment D ONE.D_Id=D.D_Id GO
B:使用右外连接
USEMyServer GOSELECTE.*,D.D_Name FROMDepartment D RIGHTJOINEmployee E ONE.D_Id=D.D_Id --OUTER可省略GO
4、外连接的特点:
1)参与外连接的表有主从之分;
2)以主表的每行数所匹配从表的数据列,将符合条件的数据直接返回到结果集中,对哪些不符合条件的列,将被填上NULL值再返回到结果集中;
3)左连接与右连接可进行互换,只需变化表的位置即可,通常是用左连接更多。
二、自连接:
1、自连接概念:故名思义,就是自己跟自己进行连接,即可用内连接查询,也可用外连接查询,但表必须要使用别名。
2、语法:
1)内连接方式:
SELECT * FROM <表名1 AS 别名1>INNER JOIN <表名1 AS 别名2﹥ON <连接条件>...
2)外连接方式:
SELECT * FROM <表名1 AS 别名1> LEFT JOIN <表名1 AS 别名2﹥ON <连接条件>...
3、例:
1)查询员工表里员工对应的上司,包含员工姓名、上司姓名两字字段
USEMyServer GOSELECTA.E_Name 员工姓名,B.E_Name 上司姓名 FROMEmployee A JOINEmployee B ONA.E_Lea=B.E_Id GO
查询结果
2)查询员工表里所有员工对应的上司,包含员工姓名、上司姓名两字字段
USEMyServer GOSELECTA.E_Name 员工姓名,B.E_Name 上司姓名 FROMEmployee A LEFTJOINEmployee B ONA.E_Lea=B.E_Id GO