-
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