7-SQL-join连接
(1) 内连接
关键字:inner join on
select * from a_table inner join b_table on a_table.a_id = b_table.b_id;
/*
执行结果如下:
| a_id | a_name | a_part | b_id | b_name | b_part |
| ———— ———————— ———————— —————— ——————— ———————|
| 2 | 李四 | 政治部 | 2 | 李四 | 政治部 |
| 3 | 王五 | 装备部 | 3 | 王五 | 装备部 |
*/
Note:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集部分
(2) 左连接(左外连接)
关键字:left join on / left outer join on
select * from a_table left join b_table on a_table.a_id = b_table.b_id;
/*
执行结果如下:
| a_id | a_name | a_part | b_id | b_name | b_part |
| ———— ———————— ———————— —————— ——————— ———————|
| 2 | 李四 | 政治部 | 2 | 李四 | 政治部 |
| 3 | 王五 | 装备部 | 3 | 王五 | 装备部 |
| 1 | 张三 | 司令部 | NULL | NULL | NULL |
| 4 | 赵六 | 后勤部 | NULL | NULL | NULL |
*/
Note:left join 是left outer join的简写,全称左外连接,是外连接的一种左(外)连接,
左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录,右表记录不足的地方均为NULL。
(3) 右连接(右外连接)
关键字: right join on / right outer join on
select * from a_table right outer join b_table on a_table.a_id = b_table.b_id;
/*
执行结果如下:
| a_id | a_name | a_part | b_id | b_name | b_part |
| ———— | —————— | —————— | ———— | ——————— ——————|
| 2 | 李四 | 政治部 | 2 | 李四 | 政治部 |
| 3 | 王五 | 装备部 | 3 | 王五 | 装备部 |
| NULL | NULL | NULL | 5 | 刘七 | 国防部 |
| NULL | NULL | NULL | 6 | 杨八 | 审计部 |
*/
Note:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。
与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
(4) 全(外)连接
关键字: FULL OUTER JOIN
SELECT
O.ID,
O.ORDER_NUMBER,
O.CUSTOMER_ID,
C.ID,
C.NAME
FROM
ORDERS O
FULL OUTER JOIN CUSTOMERS C ON C.ID = O.CUSTOMER_ID;
注意:MySQL是不支持全外的连接的,这里给出的写法适合Oracle和DB2。但是可以通过左外和右外求合集来获取全外连接的查询结果。