서브쿼리

Daeun Kim·2022년 11월 8일
0

SQL

목록 보기
12/31

다른 쿼리의 결과를 사용한 쿼리를 만드는 등, 쿼리 속의 쿼리

SELECT student, grade
FROM test_scores
WHERE grade > (SELECT AVG(grade) FROM test_scores)

엑셀과 유사하게 쿼리를 쿼리 내의 값으로 활용하려면 서브쿼리 (쿼리 내의 쿼리)에 괄호를 쳐줘야 한다.
괄호처리한 쿼리가 먼저 실행된 후 전체 쿼리가 실행된다.

EXISTS 오퍼레이터를 활용해서 서브 쿼리에서 행의 존재를 확인할 수 있다.
=> 말이 어려운데, EXIST 오퍼레이터로 서브쿼리 전체를 WHERE의 대상 조건값으로 삼을 수 있어서, 특정 열 중에 있는지 확인하는 IN 과는 달리 서브쿼리로 뽑힌 데이터 어딘가에 있다면 EXIST 하다고 판단하는 오퍼레이터이다.

SELECT 행이름
FROM 테이블이름
WHERE EXIST (SELECT 행이름 FROM 테이블이름 WHERE 조건값)

SELECT first_name,last_name FROM customer AS c
WHERE EXISTS
(SELECT customer_id FROM payment AS p
WHERE p.customer_id=c.customer_id AND amount>11)

SELECT first_name,last_name FROM customer AS c
WHERE customer_id IN
(SELECT customer_id FROM payment AS p
WHERE p.customer_id=c.customer_id AND amount>11)

2/3번 모두 결과값은 동일하나, IN을 사용한 3번의 경우 추출값이 정확히 서브쿼리의 어떤 열에 있을지를 확인하여 추출하지만,
EXISTS를 사용한 2번의 경우 추출값이 서브쿼리 어딘가에 있다면 추출되는 듯 하다.

IN은 열 대상값을 로 가지지 못한다 (3번에서 customer_id를 으로 바꾸면 추출이 실패함)

profile
공부하는 것들을 적는 블로그.

0개의 댓글