STUDENT 表包含我学校数据库中的学生列表
LIBRARY_BOOK 表包含当前与任何学生一起使用的每本书的信息。
每个学生一次只允许携带一本书。
我想知道
每位 7 年级学生的图书馆图书。
我使用的是 Microsoft SQL Server 2008 R2
我有几个看起来几乎相似但行为方式不同的查询。
查询 1:
Select *
FROM STUDENT ST
LEFT JOIN LIBRARY_BOOK LB
ON ST.Student_Id = LB._Student_ID
WHERE ST.Class = 7
Run Code Online (Sandbox Code Playgroud)
查询 2:
Select *
FROM STUDENT ST
LEFT JOIN LIBRARY_BOOK LB
ON ST.Student_Id = LB._Student_ID
AND ST.Class = 7
Run Code Online (Sandbox Code Playgroud)
查询 3:
Select *
FROM STUDENT ST
LEFT JOIN LIBRARY_BOOK LB
ON ST.Student_Id = LB._Student_ID
AND ST.Class = 7
WHERE ST.Class = 7
Run Code Online (Sandbox Code Playgroud)
有人可以解释这些查询在输出和性能方面的区别吗?
查询1会告诉你所有的记录从student一个Class值7,然后任何相关的Library_Book,如果它们存在的记录。
查询 2 将显示 中的所有记录student,以及相关Library_Book记录(如果它们存在)并且匹配行中的studentaClass为 7。
查询3会告诉你所有的记录student有Class7个值,以及相关的Library_Book记录,如果存在的话。
我希望查询 1 和查询 3 会给你相同的结果,而查询 2 会给你更多的行。
如果不了解您的表结构、数据分布、索引和 RDBMS,则无法谈论性能。我不希望它们有很大不同,因为你的过滤器都是一样的。