Course_info
表:
----------------------------------------------- COURSE_ID COURSE_NAME COURSE_DURATION ---------- -------------------- --------------- 6 SQL 3 7 PF 12 8 JAVA 13 9 C 2 0 UNIX 4
FACULTY_INFO
表:
------------------------------------------------------------- FACULTY_ID FACULTY_NAME LOCATION EXPERIENCE ---------- -------------------- -------------------- ---------- 1 ABC DELHI 10 2 DEF NOIDA 4 3 GHI GGN 2 4 JKL HYD 1 5 MNO GOA 25
Paper_info
表:
FACULTY_ID COURSE_ID DIFFICULTY_LEVEL NO_OF_PAPER SUBMITTED ---------- ---------- -------------------- ----------- 1 8 DIFFICULT 1 2 9 STANDARD 5 3 8 DIFFICULT 2 4 7 STANDARD 5 5 7 STANDARD 8
现在查询是检索没有提交论文的course_id
。
此查询:
select c.course_id
from course_info c, paper_info p
where c.course_id <> p.course_id;
给出:
COURSE_ID ------------- 6 8 7 9 0 (But 6,7 are not present in course_id of paper_info)
第二次查询:
select c.course_id
from course_info c, paper_info p
where c.course_id not in (select course_id from paper_info);
输出:
0 6 (Working fine)
两个查询之间有什么区别?
答案 0 :(得分:0)
两者之间的区别在于第二个查询将排除paper_info中的course_id。第一个查询将在两个表之间进行比较,并包括那些满足您条件的表。
例如: 带有course_id 8的Course_info与paper_info相等(有关系),其中course_id等于8.因此,由于你的where子句,该关系不会包含在你的结果中。
然而,course_info中的course_id 8不等于paper_info中的course_id 9。因此,将包括该关系。这就是为什么你在第一个查询中看到9。
你应该做的是在c.course_id = p.course_id上的左连接,其中p.course_id为空
答案 1 :(得分:0)
&LT;&GT;在sql中意味着&#34;不等于&#34;。
基本上在比较两个表达式时,如果左操作数返回TRUE&#34; Not Equal To&#34;右操作数。否则为FALSE。记住:在任何有效的表达中。两个表达式都必须具有可隐式转换的数据类型。
在上面的示例中,Course_Info表中的每个COURSE_ID将与Paper_Info表中的每个COURSE_ID进行比较。因为右手表达式不是单个整数值。它是Paper_Info表的所有COURSE_ID的集合,每次比较一个。所以我认为输出将如下所示
6 6 6 6 6 7 7 7 8 8 8 9 9 9 9 0 0 0 0 0
纠正我,如果我错了。谢谢!