在 SQL 中,“查多个表”通常有以下几种常见方式,具体用哪种取决于表之间的关系和你想要的结果形式。
只返回两个表都匹配的数据
SELECT a.id, a.name, b.order_id
FROM users a
INNER JOIN orders b
ON a.id = b.user_id;
✅ 适用:用户和订单、学生和成绩等有对应关系的表
返回左表全部,右表没有就为 NULL
SELECT a.id, a.name, b.order_id
FROM users a
LEFT JOIN orders b
ON a.id = b.user_id;
✅ 适用:查“所有用户,有没有订单都可以”
和 LEFT JOIN 相反
SELECT a.id, b.order_id
FROM users a
RIGHT JOIN orders b
ON a.id = b.user_id;
SELECT *
FROM A
FULL JOIN B
ON A.id = B.id;
(MySQL 可用 UNION 实现)
SELECT *
FROM users, orders
WHERE users.id = orders.user_id;
⚠️ 容易写成笛卡尔积,不建议新项目使用
SELECT *
FROM users
WHERE id IN (
SELECT user_id FROM orders
);
✅ 适用:先查一个表,再用结果查另一个
表结构要一致
SELECT name FROM table1
UNION
SELECT name FROM table2;
✅ 适用:多个表结构相同(如分表)
SELECT u.name, o.order_id, p.product_name
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN products p ON o.product_id = p.id;
| 场景 | 推荐方式 |
|---|---|
| 表有关联 | JOIN |
| 表无关联但结构相同 | UNION |
| 条件依赖另一张表 | 子查询 |
| 要“全量 + 关联” | LEFT / RIGHT JOIN |
如果你愿意,可以把表结构或具体需求发给我,我可以直接帮你写 SQL ✅
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。