MySQL子查询写法与注意事项
子查询就是套在 SQL 里的 SQL。常用三种:WHERE 里的 IN、EXISTS,SELECT 里的标量子查询,FROM 里的临时表。
-- 有订单的用户
SELECT * FROM user WHERE id IN (SELECT user_id FROM orders);
-- 标量子查询,只能返回一行一列
SELECT name, (SELECT COUNT(*) FROM orders WHERE user_id=user.id) AS cnt FROM user;
-- EXISTS,外层每行判断一次
SELECT * FROM user u WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id=u.id);
注意:标量子查询返回多行会报错。IN 子查询别返回 NULL,容易踩坑。子查询里少用 ORDER BY,除非配 LIMIT。相关子查询逐行跑,数据大就慢,能 JOIN 就 JOIN。FROM 子查询必须起别名。
标签:MySQL,数据库,子查询
说点什么 0