Rookiss Part5 데이터베이스 : SUBQUERY
🙇♀️SUBQUERY
🪐SUBQUERY
SubQuery (서브쿼리/하위쿼리)
-
SQL 명령문 안에 지정하는 하부 SELECT
-
연봉이 역대급으로 높은 선수의 정보를 추출
SELECT TOP 1 * FROM salaries ORDER BY salary DESC
– rodrial01
SELECT *
FROM players
WHERE playerID = 'rodrial01'
- 이것을 한 번에 하려면?
- 단일행 서브쿼리
SELECT * FROM players WHERE playerID = (SELECT TOP 1 playerID FROM salaries ORDER BY salary DESC)
- 다중행 IN 사용
- playerID = 단일값
- IN : ()안에 들어있는 값중에 아무거나, 중복해서 있으면 하나만 나옴
SELECT * FROM players WHERE playerID IN (SELECT TOP 20 playerID FROM salaries ORDER BY salary DESC)
-
서브쿼리는 WHERE에서 가장 많이 사용되지만, 나머지 구문에서도 사용 가능
SELECT (SELECT COUNT(*) FROM players) AS playerCount, (SELECT COUNT(*) FROM batting) AS battingCount;
- INSERT에서도 사용 가능
SELECT * FROM salaries ORDER BY yearID DESC
- INSERT INTO
INSERT INTO salaries VALUES (2022, 'KOR', 'NL', 'present', (SELECT MAX(salary) FROM salaries))
- INSERT SELECT
- 테이블끼리 이미 있는 데이터를 복사할 떄 유용
INSERT INTO salaries SELECT 2022, 'KOR', 'NL', 'present2', (SELECT MAX(salary) FROM salaries)
INSERT INTO salaries_temp
SELECT yearID, playerID, salary FROM salaries
SELECT *
FROM salaries_temp
🪐상관관계 서브쿼리
상관 관계 서브쿼리
- 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)
- EXISTS를 사용하면 확장성이 넓다 (WHERE을 사용하기 떄문에)