학부 전공/DB

subquery

장어진 2021. 6. 19. 15:08

subquery

이제 메인인 subquery에 대해 다뤄보겠다. subquery join이 수행하는 대부분을 수행할 수 있고 거의 동일하다고 한다. 하나의 질의 안에 다른 질의가 포함되어 있는 형태를 의미하며 예시를 표현하면 이와 같다.

SELECT name FROM MovieExec

WHERE certNo = (SELECT producerCNo FROM Movie

 WHERE title = ‘Star Wars’);  

 

빨간색 부분이 main query, 파란 부분이 subquery이다. 하지만 certNo = () 여기서 ()부분이 결과가 하나만 나와야 하고 여러 개가 나올 경우 = 부분이 달라져야한다고 한다. 실제로 fcdb에는 Star Wars 영화가 두 개 존재하여 다음과 같은 에러를 마주할 수 있다.

서브쿼리 에러 
하나만 있는 영화로 변경해 결과 확인

Tuple Comparision

(title, year) = (movieTitle, movieYear)

Is equivalent to

Title = movieTitle AND year = movieYear

 

(title, year) > (movieTitle, movieYear)

Is equivalent to

Title > movieTitle OR (title = movieTitle AND year > movieYear)

 

이제 subquery를 예를 들어 풀어보겠다. 예시 질문이 Harrison Ford가 출연한 영화의 감독의 이름을 찾아라이다. 그러면 다음과 같이 subquery를 활용할 수 있다.

SELECT name

FROM MovieExec

WHERE certNo IN

 (SELCET producerCNo

  From Movie

  WHERE (title, year) IN

   (SELECT movieTitle, movieYear

    FROM StarsIn

    WHERE starName = ‘Harrison Ford’));

728x90
댓글수0