Skip to content

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左表字段不显示