连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接。
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。
内连接的连接查询结果集中仅包含满足条件的行,内连接是SQL Server缺省的连接方式,可以把INNER JOIN简写成JOIN,根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种;交叉连接的连接查询结果集中包含两个表中所有行的组合;外连接的连接查询结果集中既包含那些满足条件的行,还包含其中某个表的全部行,有3种形式的外连接:左外连接、右外连接、全外连接。对于三种链接的具体解释如下:
内连接:内连接是一种最常用的连接类型。内连接查询实际上是一种任意条件的查询。使用内连接时,如果两个表的相关字段满足连接条件,就从这两个表中提取数据并组合成新的记录,也就是在内连接查询中,只有满足条件的元组才能出现在结果关系中。内连接的语法如下:
Select * from table_1 as t1
inner join table_2 as t2
on t1.IDcol=t2.IDcol
交叉连接:即笛卡儿乘积,是指两个关系中所有元组的任意组合。一般情况下,交叉查询是没有实际意义的。交叉链接的语法如下:
Select * from table_1
cross join table_2
外连接:内连接的查询结果都是满足连接条件的元组。但有时我们也希望输出那些不满足连接条件的元组信息。比如,我们想知道每个学生的选课情况,包括已经选课的学生(这部分学生的学号在学生表中有,在选课表中也有,是满足连接条件的),也包括没有选课的学生(这部分学生的学号在学生表中有,但在选课表中没有,不满足连接条件),这时就需要使用外连接。外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接方式。
左外连接语法如下:
Select * from table_1 as t1
left outer join table_2 as t2
on t1.IDcol=t2.IDcol
右外连接语法如下:
Select * from table_1 as t1
right outer join table_2 as t2
on t1.IDcol=t2.IDcol
全外连接语法如下:
Select * from table_1 as t1
full outer join table_2 as t2
on t1.IDcol=t2.IDcol
资料来源:
Different Types of SQL Joins https://www.dotnettricks.com/learn/sqlserver/different-types-of-sql-joins
The Seven Types of SQL Joins https://teamsql.io/blog/?p=923
SQL - Using Joins https://www.tutorialspoint.com/sql/sql-using-joins.htm
SQL Joins Explained http://www.sql-join.com/sql-join-types/