SELECT
ID,
FISH_NAME,
LENGTH
FROM
FISH_INFO AS FI
JOIN
FISH_NAME_INFO AS FNI
USING(FISH_TYPE)
WHERE FISH_TYPE IN
(
SELECT FISH_TYPE
FROM FISH_INFO
GROUP BY FISH_TYPE
HAVING LENGTH = MAX(LENGTH)
)
ORDER BY ID
IN 연산자는 WHERE 절에서 사용되며, 여러 값을 비교할 때 특히 유용합니다. 서브쿼리는 주 쿼리 내에서 다른 쿼리를 실행하는 것으로, 서브쿼리의 결과를 주 쿼리에서 사용할 수 있습니다.
📌 사용법
SELECT column_name(s)
FROM table_name
WHERE column_name IN (subquery);
📌 예시
SELECT *
FROM orders
WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');
위 쿼리는 'USA'에 거주하는 고객들의 주문만을 조회합니다. 이때, 서브쿼리는 'USA'에 거주하는 고객들의 customer_id를 반환합니다.
SELECT *
FROM orders
WHERE (customer_id, order_date) IN (SELECT customer_id, MAX(order_date) FROM orders GROUP BY customer_id);
서브쿼리는 orders 테이블에서 각 고객별로 가장 최근의 주문일을 찾아서 그룹화합니다. 이 서브쿼리는 customer_id를 그룹화한 후, 각 그룹의 최대(MAX) order_date를 반환합니다. 즉, 각 고객의 가장 최근 주문일을 찾습니다.
메인 쿼리는 orders 테이블에서 모든 열을 선택하는데, 이때 서브쿼리의 결과와 일치하는 주문을 선택합니다. 이 일치 여부는 주문의 customer_id와 order_date가 서브쿼리의 결과와 동일한지를 기준으로 합니다. 즉, 각 고객의 가장 최근 주문일과 동일한 주문을 선택합니다.
따라서 이 쿼리는 각 고객의 최신 주문에 해당하는 행들을 반환합니다.
📌주의사항