ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SUBQUERY, IN, EXISTS
    데이터베이스 with MSSQL/SQL 입문 2022. 4. 6. 20:12

    1. 필요성

    --연봉이 역대급으로 높은 선수 추출('rodrial01')
    SELECT TOP 1 * 
    FROM salaries
    ORDER BY salary DESC
    
    -- 추출된 값('rodrial01')을 이용해서 한 번더 SELECT 사용
    SELECT *
    FROM players
    WHERE playerID = 'rodrial01'

    SELECT로 추출한 정보를 활용하여 한 번 더 추출하려고 할 때, SELECT를 두 번 사용 해야하는 불편함이 있는데 SUBQUERY는 이 과정을 하나로 줄일 수 있다.

     

    2. 단일행 사용

    SELECT *
    FROM players
    WHERE playerID = (SELECT TOP 1 playerID FROM salaries ORDER BY salary DESC)

    두 개중 하나의 SELECT를 WHERE조건 안에 집어 넣어서 한 번에 처리되게 하였다.

    하지만 조건에 TOP 1이 있어서 하나의 값만 반환이 되었던반면에

    TOP 20으로 고치면 여러 개의 값이 반환이 되어서 에러를 일으킨다.

     

    3. 다중행 사용 ( IN )

    SELECT *
    FROM players
    WHERE playerID IN (SELECT TOP 20 playerID FROM salaries ORDER BY salary DESC)

    WHERE 안의 조건을 TOP 20으로 고쳐서 여러 개의 값이 반환되게 수정하였다.

    이럴 때는 '='이 아니고 'IN'을 사용하면 각각의 반환값에 대해 중복값을 제거하여 데이터를 추출할 수 있다.

     

    4. EXISTS, NOT EXISTS

    -- 포스트 시즌 타격에 참여한 선수들 목록
    SELECT *
    FROM players
    WHERE playerID IN (SELECT playerID FROM battingpost)
    
    SELECT *
    FROM players
    WHERE EXISTS (SELECT playerID FROM battingpost WHERE battingpost.playerID = players.playerID)

    위의 두 개의 SELECT문은 같은 결과를 출력한다.

    EXISTS는 추출된 값이 존재하냐 안하냐를 따질 때 쓰인다.

    '데이터베이스 with MSSQL > SQL 입문' 카테고리의 다른 글

    인덱스(INDEX)  (0) 2022.04.08
    데이터베이스 작성(CREATE, ALTER, DROP)  (0) 2022.04.08
    INSERT, DELETE, UPDATE  (0) 2022.04.06
    GROUP BY, HAVING  (0) 2022.04.06
    집계함수  (0) 2022.04.06
Designed by Tistory.