SQL中的交叉查询、内连接和左外连接、右外连接查询的区别
customer表
id | company_name | category_id |
1 | 公司a | 1 |
2 | 公司b | 2 |
3 | 公司c | 5 |
4 | 公司d | 6 |
category表
id | category_name |
1 | 普通客户 |
2 | VIP客户 |
3 | 海外客户 |
4 | 无效客户 |
-- 交叉查询,查到很多错误的数据,这个错误数据的集合叫笛卡尔积
SELECT * FROM customer,category;
-- 隐式内连接,查得满足条件的数据
SELECT * FROM `customer`,category WHERE `customer`.category_id=category.id;
-- 显示内连接,查得满足条件的数据
SELECT * FROM `customer` INNER JOIN category ON `customer`.category_id=category.id;
-- 左外连接,以left左边的表为标准,右表没有则补NULL
SELECT * FROM `customer` LEFT OUTER JOIN category ON `customer`.category_id=category.id;
-- 右外连接,以right右边的表为标准,左表没有这补NULL
SELECT * FROM customer RIGHT JOIN `category` ON `customer`.category_id=category.id;
总结:
内连接:显示左边右边共有的
左外连接:左边有的,右边没有补NULL
右外连接:右边有的,左边没有补NULL