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’));
'학부 전공 > 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 |