7-SQL-join连接

时间:2022-05-16 02:48:08

(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。但是可以通过左外和右外求合集来获取全外连接的查询结果。