본문 바로가기
Study/DB

DB - EXISTS 와 IN

by 멘탈은안녕하신가 2021. 1. 15.
728x90
반응형

A테이블

 

 

B테이블


      • EXISTS : 값이 존재하는지 확인 TRUE, FALSE 반환
        (
        서브쿼리를 사용해야 , 서브쿼리 내에서 JOIN 활용한다.
        JOIN 유사하지만 값의 유무를 확인할경우 사용)

 

      • IN : 값이 존재하는지 확인 해당 값을 반환
        (특정 값을 입력해도 )

 

      • EXISTS 활용방법
SELECT *
  FROM A
 WHERE EXISTS (SELECT 1
                 FROM B
                WHERE A.COL1 = B.COL1)

 

      • 결과

: EXISTS 비교하는 대상없이 서브쿼리의 비교 유무만을 확인한다.

서브쿼리절의 B테이블 COL1 A테이블 COL1 비교 조건을 통해 값이 존재할 경우 A테이블에서 존재하는 값을 출력한다.

----------------------------------------------------------------------------

 

      • NOT EXISTS 활용방법
SELECT *
  FROM A
 WHERE NOT EXISTS (SELECT 1
                     FROM B
                    WHERE A.COL1 = B.COL1)

 

      • 결과

: EXISTS 반대되는 값을 출력하며, NULL값이 존재할 경우 포함해서 출력한다.

----------------------------------------------------------------------------

 

      • IN 활용방법1
SELECT *
  FROM A
 WHERE A.COL1 IN (SELECT B.COL1
                    FROM B)

 

      • 결과

: A테이블의 COL1 존재하는 값과 일치하는 값이 B테이블 COL1 존재할 경우 해당 조건에 맞는 값을 출력한다.

----------------------------------------------------------------------------

 

      • IN 활용방법2
SELECT *
  FROM A
 WHERE A.COL1 IN (1,2)

 

      • 결과

: 처음에 언급한것 처럼 IN 서브쿼리가 아닌 특정 값을 입력할 있다.

----------------------------------------------------------------------------

 

      • NOT IN 활용방법1
SELECT *
  FROM A
 WHERE A.COL1 NOT IN (SELECT B.COL1
                        FROM B)

 

      • 결과

: IN 반대의 결과를 보여주지만, IN 반대값에 NULL 존재할경우 NULL 값은 포함하지 않고 출력한다.

----------------------------------------------------------------------------

 

      • NOT IN 활용방법2
SELECT *
  FROM A
 WHERE A.COL1 NOT IN (1,2)

 

      • 결과

: IN 마찬가지로 특정 컬럼과 일치하지 않는 특정 값을 넣을 있다, 마찬가지로 출력결과에 NULL값은 포함하지 않는다.

----------------------------------------------------------------------------

 

      • JOIN 비교
SELECT A.COL2
     , B.COL2
  FROM A
 INNER JOIN B
    ON A.COL1 = B.COL1

 

      • 결과

: EXISTS, IN 동일한 결과를 갖는다. 하지만 JOIN ON으로 묶는 조건에 따라 값이 달라진다.

----------------------------------------------------------------------------

 

      • LEFT OUTER JOIN 경우
SELECT A.COL2 AS TB1
     , B.COL2 AS TB2
  FROM A
  LEFT OUTER JOIN B
    ON A.COL1 = B.COL1

: LEFT OUTER JOIN 좌측에 위치하는, 그러니까 먼저 나온 테이블을 기준으로 비교한다는 의미로 A테이블을 기준으로 B테이블과 비교 조건을 통해 값을 출력하며, A테이블과 일치하는 값이 없을경우 A테이블의 값은 보여주고, B테이블의 값은 NULL 나타내어 전부 출력한다.

----------------------------------------------------------------------------

 

      • RIGHT OUTER JOIN 경우
SELECT A.COL2 AS TB1
     , B.COL2 AS TB2
  FROM A
 RIGHT OUTER JOIN B
    ON A.COL1 = B.COL1

 

: RIGHT OUTER JOIN 우측에 위치하는, 나중에 나온 테이블을 기준으로 하며 LEFT OUTER JOIN 반대의 출력결과를 보인다.

728x90
반응형

'Study > DB' 카테고리의 다른 글

DB - UNION과 UNION ALL  (0) 2021.01.15
DB - SELECT 시 순위 출력  (0) 2021.01.15
MYSQL - LIKE와 IN을 함께 사용하기  (0) 2021.01.15
MYSQL - 비밀번호가 다르다고 할 경우 해결방법  (0) 2021.01.15
MYSQL - my.ini 위치  (0) 2021.01.15

댓글