SQL(连接表查询)

时间:2017-02-21 16:28:27

标签: sql

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)

两个查询之间有什么区别?

2 个答案:

答案 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

纠正我,如果我错了。谢谢!

相关问题