SQL 子查询和连表
子查询
在一个查询中嵌套另一个查询,用于分表场景。例如 user 表和 photo 表通过 user_id 关联,想通过用户名查照片:
sql
SELECT * FROM `photo` WHERE `user_id` = (
SELECT id FROM `user` WHERE name = '小满'
);连表 JOIN
内连接
只返回两表都有匹配的行:
sql
SELECT * FROM `user`, `photo` WHERE `user`.`id` = `photo`.`user_id`;左连接 LEFT JOIN
左表(第一个表)为驱动表,右表无匹配则补 NULL:
sql
SELECT * FROM `user` LEFT JOIN `photo` ON `user`.`id` = `photo`.`user_id`;右连接 RIGHT JOIN
右表(第二个表)为驱动表,左表无匹配则忽略:
sql
SELECT * FROM `user` RIGHT JOIN `photo` ON `user`.`id` = `photo`.`user_id`;三种连接对比
| 类型 | 语法 | 无匹配处理 |
|---|---|---|
| 内连接 | WHERE a.id = b.a_id | 两表都不显示 |
| 左连接 | LEFT JOIN b ON a.id = b.a_id | 右表字段补 NULL |
| 右连接 | RIGHT JOIN b ON a.id = b.a_id | 左表字段不显示 |