本文主要说明MySQL中对表进行联结的方法,其中主要包括
INNER JOIN
,LEFT JOIN
,RIGHT JOIN
,FULL JOIN
几个关键字的讲解。
I、上帝视角看联结
1、联结就是将来自两个或多个表的行结合起来,这就要求需要联结的表拥有相同的列,这引出了外键的概念:
外键为某个表中的一列,它包含另一个表的主键值,定义了两个表的关系。
2、表的基本联结可以采用以下几种方式:
·使用WHERE ...=...
的方式;
·使用JOIN
关键字(其中包括INNER JOIN
, LEFT JOIN
,RIGHT JOIN
);
II、WHERE ...=...
2.1 使用WHERE ...=...联结两个表
如下面例子,我们利用外键vend_id来联结vendors表与products表:
# test1 WHERE ...=...
> SELECT vend_name, prod_name, prod_price FROM vendors, products
WHERE vendors.vend_id = products.vend_id;
2.2 使用WHERE ...=... AND ...=...联结多个表
如下面例子,利用不同的外键可以联结不同的表:
# test2
> SELECT prod_name, vend_name, prod_price, quantity FROM orderitems, products, vendors
WHERE products.vend_id = vendors.vend_id
AND orderitems.prod_id = products.prod_id
III、INNER JOIN
1、INNER JOIN
称为内部联结,其返回的是两个表中的公有部分:
2、其语法为:
# INNER JOIN
> SELECT column_name(s) FROM table1 INNER JOIN table2
ON table1.column_name = table2.column_name;
3、例题
IV、LEFT JOIN
1、LEFT JOIN
关键字从左表返回所有的行,即使右表中没有匹配,如果右表中没有匹配,则返回NULL:
2、其语法为:
# LEFT JOIN
> SELECT columns_name(s) FROM table1 LEFT JOIN table2
ON table1.columns_name = table2.columns_name;
3、例题:
V、 RIGHT JOIN
1、RIGHT JOIN
与LEFT JOIN
类似,从右表返回所有的行,即使左表中没有匹配。如果左表中没有匹配,则结果为NULL:
2、其语法为:
# RIGHT JOIN
> SELECT column_name(s) FROM table1 RIGHT JOIN table2
ON table1.column_name = table2.column_name;
VI、FULL OUTER JOIN
1、FULL OUTER JOIN
关键字只要左表和右表其中一个行中存在匹配,则返回行,相当于集合了LEFT JOIN
与RIGHT JOIN
的结果:
2、其语法为:
# FULL OUTER JOIN
> SELECT column_name(s) FROM table1 FULL OUTER JOIN table2
ON table1.column_name = column_name;
【参考】
[1] 《MySQL必知必会》
[2] 菜鸟教程SQL
网友评论