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;

SQL中的交叉查询、内连接和左外连接、右外连接查询的区别

 -- 隐式内连接,查得满足条件的数据

SELECT * FROM `customer`,category WHERE `customer`.category_id=category.id;

SQL中的交叉查询、内连接和左外连接、右外连接查询的区别

-- 显示内连接,查得满足条件的数据

SELECT * FROM `customer` INNER JOIN category ON `customer`.category_id=category.id;

SQL中的交叉查询、内连接和左外连接、右外连接查询的区别

-- 左外连接,以left左边的表为标准,右表没有则补NULL

SELECT * FROM `customer` LEFT OUTER JOIN category ON `customer`.category_id=category.id;

SQL中的交叉查询、内连接和左外连接、右外连接查询的区别

-- 右外连接,以right右边的表为标准,左表没有这补NULL

SELECT * FROM customer RIGHT JOIN `category` ON `customer`.category_id=category.id;

SQL中的交叉查询、内连接和左外连接、右外连接查询的区别

总结: 

内连接:显示左边右边共有的

左外连接:左边有的,右边没有补NULL

右外连接:右边有的,左边没有补NULL