inner join、outer join和cross join的区别详解
时间: 2023-08-17 18:11:24 浏览: 71
inner join、outer join和cross join是SQL中常用的三种表连接方式。
1. Inner Join(内连接):
内连接是根据两个表之间的共同字段将它们连接起来,只返回符合连接条件的行。内连接返回的结果集中只包含那些在两个表中都存在的记录。
示例:
```sql
SELECT *
FROM table1
INNER JOIN table2 ON table1.id = table2.id;
```
上述示例中,通过将table1和table2按照id字段进行内连接,返回的结果集中只包含那些在table1和table2中都有相同id的记录。
2. Outer Join(外连接):
外连接是根据两个表之间的共同字段将它们连接起来,并返回符合连接条件的所有行,同时对于不符合连接条件的行,用NULL值填充。
外连接分为左外连接、右外连接和全外连接。
- 左外连接(Left Outer Join):返回左表中所有的记录以及符合连接条件的右表中的记录。
示例:
```sql
SELECT *
FROM table1
LEFT OUTER JOIN table2 ON table1.id = table2.id;
```
上述示例中,通过将table1和table2按照id字段进行左外连接,返回的结果集中包含table1中所有的记录以及那些在table2中有相同id的记录。
- 右外连接(Right Outer Join):返回右表中所有的记录以及符合连接条件的左表中的记录。
示例:
```sql
SELECT *
FROM table1
RIGHT OUTER JOIN table2 ON table1.id = table2.id;
```
上述示例中,通过将table1和table2按照id字段进行右外连接,返回的结果集中包含table2中所有的记录以及那些在table1中有相同id的记录。
- 全外连接(Full Outer Join):返回左表和右表中所有的记录。
示例:
```sql
SELECT *
FROM table1
FULL OUTER JOIN table2 ON table1.id = table2.id;
```
上述示例中,通过将table1和table2按照id字段进行全外连接,返回的结果集中包含table1和table2中所有的记录。
3. Cross Join(笛卡尔积):
交叉连接是将两个表中的每一行与另一个表中的每一行进行组合,返回的结果集的行数等于两个表中行数的乘积。
示例:
```sql
SELECT *
FROM table1
CROSS JOIN table2;
```
上述示例中,通过将table1和table2进行交叉连接,返回的结果集中包含table1中的每一行与table2中的每一行的组合。
综上所述,inner join根据连接条件返回两个表中符合条件的记录,outer join根据连接条件返回两个表中符合条件以及不符合条件的记录,并用NULL值填充不符合条件的部分,而cross join则是返回两个表中所有记录的组合。