🙇‍♀️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을 사용하기 떄문에)

태그:

카테고리:

업데이트: