SQL 里搞复杂筛选的时候,嵌套查询真的挺好用。尤其是你想查一部分数据,又得先从别的表查点东西出来再用,直接在WHERE
里塞个子查询就行。像那种“选修了课程 2 的学生”的需求,用个IN
嵌套搞定,语句清晰,逻辑也挺直观。
查询块就是完整的SELECT-FROM-WHERE
结构,嵌套查询就是在另一个查询的条件里再塞一个查询块。你会常见IN
、EXISTS
、=
这种用法,按场景灵活切换就对了。
比如查和“刘晨”一个系的学生,用个IN
的子查询就能搞定。再进一步,如果一个学生只能属于一个系,直接把IN
换成=
,效率还能提升点。这种小技巧,挺实用。
啦,有时候你也可以把子查询换成连接查询,效率会高一点。就像这个例子:
SELECT S1.Sno, S1.Sname, S1.Sdept
FROM Student S1, Student S2
WHERE S1.Sdept = S2.Sdept AND S2.Sname = '刘晨';
顺带提醒下:子查询不能加ORDER BY
,别写上去报错了还一脸懵。另外,如果子查询依赖外层的查询条件,那就是相关子查询,跑起来稍慢点,但逻辑上更灵活。
想多了解一点,可以看看这些链接:
如果你平时在写 SQL,偶尔会遇到那种多条件筛选、跨表查数据的需求,嵌套查询用得顺手真的省不少事。