Daily Develope

[DB] EXISTS / IN / JOIN 비교 본문

DB

[DB] EXISTS / IN / JOIN 비교

noggame 2022. 6. 23. 09:00
EXISTS

 

ㅇ 예시코드

SELECT I.InvoiceID, I.TotalDryItems, People.FullName
FROM Sales.Invoices I
  INNER JOIN [Application].People ON I.SalespersonPersonID = People.PersonID
WHERE EXISTS (SELECT 1 FROM vTop3SPs2013Q2 WHERE SalespersonPersonID = I.SalespersonPersonID)
  AND I.InvoiceDate BETWEEN '4/1/2013' AND '6/30/2013'
  AND I.TotalDryItems >= 4;

 

ㅇ 장점

  • 구현이 쉽고, 가독성이 좋음
  • 조건에 해당하는 데이터가 있으면 검사 종료 (IN / JOIN 은 전체 검사)

 

ㅇ 단점

  • 데이터의 존재 여부만 알 수 있어, 적용 범위가 제한적

 

 


IN

 

ㅇ 예시코드

SELECT Invoices.InvoiceID, Invoices.TotalDryItems, People.FullName
FROM Sales.Invoices
  INNER JOIN [Application].People ON Invoices.SalespersonPersonID = People.PersonID
WHERE SalespersonPersonID IN (SELECT SalespersonPersonID FROM vTop3SPs2013Q2)
  AND InvoiceDate BETWEEN '4/1/2013' AND '6/30/2013'
  AND TotalDryItems >= 4;

 

ㅇ 장점

  • 가독성이 좋음
  • 일반적인 사용에서는 EXIST / JOIN에 비해 빠름

 

ㅇ 단점

  • "WHERE {value} IN " 구간에서 필요한 value의 수가 다수일 경우 사용 불가 (1개일 때만 사용가능)
  • 조건에 해당하는 데이터가 여러개인 경우에도, 하나의 결과만 반환

 


JOIN

 

ㅇ 예시코드

SELECT I.InvoiceID, I.TotalDryItems, People.FullName
FROM Sales.Invoices I
  INNER JOIN [Application].People ON I.SalespersonPersonID = People.PersonID
  INNER JOIN vTop3SPs2013Q2 ON I.SalespersonPersonID = vTop3SPs2013Q2.SalespersonPersonID
WHERE InvoiceDate BETWEEN '4/1/2013' AND '6/30/2013'
  AND TotalDryItems >= 4;

 

ㅇ 장점

  • 여러 테이블의 데이터 비교 가능
  • 조건에 해당하는 데이터가 여러개인 경우에도 사용 가능

 

ㅇ 단점

  • OUTER JOIN의 경우 비교적 느림

 

 

'DB' 카테고리의 다른 글

[PSQL] postgresql 명령어 정리  (0) 2022.09.27
[DB] Table 외래키 제약 조건  (0) 2022.08.10
[MySQL] CLI  명령  (0) 2022.04.03
[MySQL] 백어 및 복구  (0) 2022.01.07
[MariaDB] 기본 명령어  (0) 2022.01.07
Comments