FilmID FilmName YearMade |
1 My Fair Lady 1964 |
FilmID FirstName LastName |
1 Rex Harrison |
1 Audrey Hepburn |
FilmID FilmName YearMade FirstName LastName |
1 My Fair Lady 1964 Rex Harrison |
1 My Fair Lady 1964 Audrey Hepburn |
1、INNER JOIN
Inner Join 是最常用的JOIN类型。虽然都是基于一个或多个公共字段来把记录匹配到一起,但Inner Join只返回进行联结的字段上匹配的记录。现在我们对表做些
Inner Join 会得到什么结果。下面是Films表:
FilmID FilmName YearMade |
1 My Fair Lady 1964 2 Unforgiven 1992 |
FilmID FirstName LastName |
1 Rex Harrison 1 Audrey Hepburn 2 Clint EastWood 5 Humphrey Bogart |
FilmID FilmName YearMade FirstName LastName |
1 My Fair Lady 1964 Rex Harrison 1 My Fair Lady 1964 Audrey Hepburn 2 Unforgiven 1992 Clint EastWood |
2、OUTER JOIN
先来看看 Outer Join 的语法
Select <要查询的字段> From <Left 资料表>
<Left | Right> [Outer] Join <Right 资料表> On <Join 规则>
语法中的 Outer 是可以省略的, 例如你可以用 Left Join 或是 Right Join, 在本质上, Outer Join 是 inclusive, 叫它做包容性吧! 不同于 Inner Join 的排他性, 因此在 Left Outer Join 的查询结果会包含所有 Left 资料表的资料。对Films表和Actors表做Left Outer Join的结果如下:(以FilmID相等作为on的条件)
FilmID FilmName YearMade FirstName LastName |
1 My Fair Lady 1964 Rex Harrison 2 Unforgiven 1992 Clint EastWood |
FilmID FilmName YearMade FirstName LastName |
1 My Fair Lady 1964 Rex Harrison 2 Unforgiven 1992 Clint EastWood 5 NULL NULL Humphrey Bogart |
Full Outer Join (全外连接)则包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
3、CROSS JOIN
Cross Join用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。数据集合中一的每个行都要与数据集合二中的每一个行分别组成一个新的行。例如,如果第一个数据源中有5个行,而第二个数据源中有4个行,那么在它们之间进行交叉连接就会产生20个行。人们将这种类型的结果集称为笛卡尔乘积。大多数交叉连接都是由于错误操作而造成的;但是它们却非常适合向数据库中填充例子数据,或者预先创建一些空行以便为程序执行期间所要填充的数据保留空间。在交叉连接中没有on条件子句。