반응형
--6)ANY 연산자
--값을 서브 쿼리에 의해 반환된 값 집합과 비교한다. ANY 연산자는 서브쿼리의 값이 어떠한 값이라도
--만족을 하면 조건이 성립된다.
SELECT TITLE, LENGTH
FROM FILM F
WHERE LENGTH >= ANY --영화 분류별 사영시간이 가장 긴 영화의 제목
( --및 상영시간을 구함.
SELECT MAX(LENGTH) --영화 분류별 상영시간이 가장 긴 상영시간을 구함
FROM FILM A, FILM_CATEGORY B
WHERE A.FILM_ID = B.FILM_ID
GROUP BY B.CATEGORY_ID
);
--ANY가 없다면?SQL에러가 발생한다.
--이경우에 서브쿼리의 반환되는 집합은 단 한건이어야 한다.
SELECT TITLE, LENGTH
FROM FILM F
WHERE LENGTH >=
(
SELECT MAX(LENGTH)
FROM FILM A, FILM_CATEGORY B
WHERE A.FILM_ID = B.FILM_ID
GROUP BY B.CATEGORY_ID
);
--=ANY의 사용(IN과 동일)
SELECT TITLE, LENGTH
FROM FILM F
WHERE LENGTH = ANY --영화 분류별 싱영시간이 가장 긴 영화의 제목
( --및 상영시간을 구함.
SELECT MAX(LENGTH) --영화 분류별 상영시간이 가장 긴 상영시간을 구함
FROM FILM A, FILM_CATEGORY B
WHERE A.FILM_ID = B.FILM_ID
GROUP BY B.CATEGORY_ID
);
SELECT TITLE, LENGTH
FROM FILM F
WHERE LENGTH IN --영화 분류별 상영시간이 가장 긴 영화의 제목
( --및 상영시간을 구함.
SELECT MAX(LENGTH) --영화 분류별 상영시간이 가장 긴 상영시간을 구함
FROM FILM A, FILM_CATEGORY B
WHERE A.FILM_ID = B.FILM_ID
GROUP BY B.CATEGORY_ID
);
--7)ALL 연산자
--값을 서브 쿼리에 의해 반환된 값 집합과 비교한다.
--서브쿼리의 모든 값이 만족을 해야만 조건이 성립된다.
SELECT TITLE, LENGTH
FROM FILM F
WHERE LENGTH >= ALL --영화 분류별 상영시간이 가장 긴 영화의 모든 상영시간
( --보다 크거나 같아야만 조건 성립
SELECT MAX(LENGTH) --영화 분류별 상영시간이 가장 긴 상영시간을 구함
FROM FILM A, FILM_CATEGORY B
WHERE A.FILM_ID = B.FILM_ID
GROUP BY B.CATEGORY_ID
);--상영시간이 가장 긴 영화는 185인 것을 알 수 있다.
SELECT ROUND(AVG(LENGTH),2) --영화 상영 길이의 평균 값
FROM FILM F GROUP BY RATING; --평가 기준으로
SELECT FILM_ID, TITLE, LENGTH
FROM FILM F
WHERE LENGTH > ALL --평가기준 평균값들보다
( --상영시간이 긴 영화정보 출력
SELECT ROUND(AVG(LENGTH),2)
FROM FILM
GROUP BY RATING
)
ORDER BY LENGTH ;
--7)EXISTS 연산자
--서브쿼리 내에 집합이 존재하는지 존재여부만을 판단한다.
--존재 여부만을 판단하므로 연산 시 부하가 줄어든다
--정말 많이 사용. 중요중요중요
SELECT FIRST_NAME, LAST_NAME
FROM CUSTOMER C --고객중에서
WHERE
EXISTS ( --지불내역이
SELECT 1 --여기서 1은 TRUE값인듯
FROM PAYMENT P
WHERE P.CUSTOMER_ID = C.CUSTOMER_ID
AND P.AMOUNT >11 --11달러 추가한 고객이있는지
)
ORDER BY FIRST_NAME, LAST_NAME ;
--해당 집합이 존재하기만 하면 더이상 연산을 멈추므로 성능상 유리함
--NOT EXISTS연산자
SELECT FIRST_NAME, LAST_NAME
FROM CUSTOMER C --고객중에서
WHERE
NOT EXISTS ( --지불내역이
SELECT 1
FROM PAYMENT P
WHERE P.CUSTOMER_ID = C.CUSTOMER_ID
AND P.AMOUNT >11 --11달러 추가한적이 없는
)
ORDER BY FIRST_NAME, LAST_NAME ;
반응형
'DataBase' 카테고리의 다른 글
[postgreSQL] [분석함수] AVG() (0) | 2021.09.15 |
---|---|
[postgreSQL] [그룹함수] GROUPING SETS, ROLLUP, CUBE (0) | 2021.09.15 |
[postgreSQL] 서브 쿼리 종류 (0) | 2021.09.14 |
[postgreSQL] INTERSECT, EXCEPT (0) | 2021.09.14 |
[postgreSQL][집합연산자] UNION, UNION ALL (0) | 2021.09.14 |
댓글