Join、Inner Join、Left Join、Right Join的区别
1.Join和inner Join一样,返回两张表关联字段共同存在的记录
2.Left Join,以左表为中心,返回左表(test1/a(别名))符合条件的记录和右表(test2/b(别名))与左表关联字段(on ?=?)相等的记录,没有则返回空
3.Right Joinn,以右表为中心,返回右表符合条件的记录,和左表与右表关联字段相等的记录,没有则返回
总结和注意事项:
1.从左到右依次执行:每个Left/Right Join都是基于前一步的结果集进行的
2.保留左/右表(取决于left或right join)所有数据,即使连接表中没有匹配的行,主表的数据仍会被保留,未匹配的字段显示为 NULL
示例: 有如上三表,要求查询所有用户及其订单和支付信息(即使没有订单或支付记录)
userid name 1 Alice 2 Bob 3 Carl
user用户表
order_id user_id product 101 1 手机 102 1 耳机 103 3 笔记本
order订单表
payment_id order_id amount 201 101 5000 202 103 8000
payment支付表
SQL如下:
SELECT
u.name AS 用户名,
o.product AS 订单商品,
p.amount AS 支付金额
FROM user u
LEFT JOIN order o ON u.user_id = o.user_id
LEFT JOIN payment p ON o.order_id = p.order_id;
用户名 订单商品 支付金额 Alice 手机 5000 Alice 耳机 NULL(无耳机订单) Bob NULL(Bob无订单) NULL Carl 笔记本 8000
执行结果