본문 바로가기
학부 전공/DB

subquery

by 장어진 2021. 6. 19.

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

'학부 전공 > DB' 카테고리의 다른 글

SQL Grouping & Having  (0) 2021.06.19
Join Eexpression in SQL2  (0) 2021.06.19
SQl 집합 연산(합집합, 교집합, 차집합)  (0) 2021.06.19
SQL join사용하기  (0) 2021.06.19
SQL NULL Value & Ordering  (0) 2021.06.19