2017-08-16 57 views
-5

1)查詢:SQL查詢上存在CLAUSE

SELECT INS_NAME 
    FROM INSTRUCTOR 
WHERE EXISTS(SELECT DEPT_NAME 
       FROM DEPARTMENT 
       WHERE DEPT_ID = INSTRUCTOR.DEPT_ID AND DEPT_BUILDING = 'JOHNS'); 

2)查詢:

SELECT INS_NAME 
    FROM INSTRUCTOR 
WHERE EXISTS(SELECT DEPT_NAME 
       FROM DEPARTMENT 
       WHERE DEPT_BUILDING = 'JOHNS'); 

代碼1和2產生不同的輸出,請幫助我明白其中的道理。

(講師TABLE)

ins_id ins_name dept_id ins_sal tax 
27  DHIRAJ 4  200 
28  RAHUL  4  500 
34  HIO  4  100 2 
90  SURYA  5  120 30 
33  VINNY  6  100 11 

(DEPARTMENT TABLE)

DEPT_BUILDING DEPT_NAME DEPT_ID 
THOMAS   BIO  4 
JOHNS   CHEM  5 
JOHNS   CSE  6 
+0

使用存在而不是聯接的任何理由? –

+1

你使用的是MySQL還是MS SQL Server?不要標記不涉及的產品。 – jarlh

+0

鮭魚,我只是測試了沒有其他不使用連接的原因。 –

回答

2

第二查詢返回從instructor表中的所有記錄,因爲有2個記錄在department表,其中DEPT_BUILDING='JOHNS'。因此exists()對每條記錄都返回true。

第一個查詢僅返回instructor表中的最後2條記錄,因爲exists()還測試了部門標識中的匹配,部門no 4沒有名爲johns的標識。

+0

是的,有所不同。謝謝 !! –