Loading

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。但是可以通过左外和右外求合集来获取全外连接的查询结果。
posted @ 2019-11-16 11:27  古典派  阅读(71)  评论(0编辑  收藏  举报