1、内连接: 只连接匹配的行,所以可能丢失数据。[只匹配]
2、左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行。[左全右匹配]
3、右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行。[右全左匹配]
4、全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
5、交叉连接: 笛卡尔积
1.内连接(inner join):是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。将两个表中存在连接关系的字段中符合连接关系的那些记录
SQL实例:
1 | select fieldlist from table1 [ inner ] join table2 on table1. column =table2. column |
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
2.外连接(分为左连接和右连接):即除了返回符合连接条件的结果之外,还要返回左表(左连接)或者右表(右连接)中不符合连接条件的结果,相对应的使用NULL对应。
左(外)连接(left inner):显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全。左外连接返回那些存在于左表而右表中却没有的行,再加上内连接的行。
SQL实例:
1 | select courses.cno, max (coursename), count (sno) from courses LEFT JOIN grades ON courses.cno=grades.cno group by courses.cno |
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
右(外)连接(right inner):显示全部右边表中的所有项目,即使其中有些项中的数据未填写完全。右外连接返回那些存在于左表而右表中却没有的行,再加上内连接的行。
SQL实例:
1 | select courses.cno, max (coursename), count (sno) from courses RIGHT JOIN grades ON courses.cno=grades.cno group by courses.cno |
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
3.全连接(full inner):将两个表中存在连接关系的字段的所有记录取出形成记录集的连接,两边表中的内容全部显示(因为全连接无论是否符合连接条件都将会取出查询提到了的表中的字所有字段,所以意义不大)
4.联合查询(union/union all)
union 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,union 内部的 select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 select语句中的列的顺序必须相同
参考博客: