我有3個表格。下面是結構:選擇其他表中缺少記錄的有效方法
student
(id int, name varchar(20)
)course
(course_id int, subject varchar(10)
)student_course
(st_id int, course_id int
) - >包含誰爲一療程
招收現在,我希望學生的名字寫一個查詢來找出沒有參加任何課程的學生。我可以看出,有多種方法可以獲取這些信息。你能否讓我知道哪一個是最有效率的,也是爲什麼。另外,如果有其他更好的執行方法,請告訴我。
db2 => select distinct name from student inner join student_course on id not in (select st_id from student_course)
db2 => select name from student minus (select name from student inner join student_course on id=st_id)
db2 => select name from student where id not in (select st_id from student_course)
在此先感謝!
我不知道爲什麼你會短語它作爲「連接vs正常」 - 根據我的經驗,*大多數*查詢至少包含一個連接。這就是說,我不會使用你的第一個例子,因爲它並不是真的以任何理智的方式使用連接(另一方面,「左連接」將是一個值得列入的列表)。但是關於SQL效率的大多數問題往往會更多地歸結爲可用的索引,而不會做太奇怪的事情(例如您的第一個查詢) –
感謝您的回覆Damien!我同意第一個查詢實際上太奇怪了,幾乎沒有任何意義......我只是想探索選項。 – neha