内连接和左外连接有什么区别?MySQL 怎样实现全外连接?
先自己想一想,再看参考要点
参考要点
- 内连接(INNER JOIN)只返回两张表中满足连接条件的行,条件写在 ON 中,也可以写成 FROM 两张表并在 WHERE 中用等值条件连接
- 外连接保留没有关联的行,左外连接保留左表中没有匹配的行,右表的列为 NULL,例如列出所有顾客的订单,包括还没有下过订单的顾客
- MySQL 不支持 FULL OUTER JOIN,可以用 UNION ALL 合并左外连接的结果和右外连接中左表没有匹配的行(WHERE 左表主键 IS NULL),直接用 UNION 合并两个外连接会把相同的行去重,可能少行
- 很多子查询可以改写为连接,MySQL 8.0 会把 IN 子查询自动转换为半连接,两种写法快慢以 EXPLAIN 为准