[SQL] 서브쿼리에 대해 _ SUBQUERY
서브쿼리(Subquery)란?
SQL문에서 메인쿼리
내부에 포함되는 또 다른 쿼리
를 의미한다. 서브쿼리는 메인 쿼리의 일부분으로서, 데이터를 검색, 필터링, 비교하는 데 사용된다. 서브쿼리는 괄호( )
로 둘러싸여 있으며,SELECT문을 통해 데이터를 반환
한다.
✍️ 예제 테이블
(Grade)
Id | Name | Subject | Score |
---|---|---|---|
1 | 김철수 | 수학 | 85 |
2 | 이영희 | 수학 | 90 |
3 | 박지민 | 영어 | 75 |
1 | 김철수 | 영어 | 80 |
2 | 이영희 | 과학 | 95 |
3 | 박지민 | 수학 | 85 |
비상관 서브쿼리(Uncorrelated Subquery)
비상관 서브쿼리는
메인 쿼리와 독립적으로 실행
되는 서브쿼리이다. 즉, 서브쿼리는 메인 쿼리와 데이터를 공유하지 않으며, 메인 쿼리의 실행에 영향을 받지 않는다. 비상관 서브쿼리는 일반적으로 한 번만 실행되며, 그 결과는 메인쿼리에서 사용된다.
1
2
3
SELECT *
FROM TableA
WHERE id IN (SELECT id FROM TableB); -- subquery
💡 추가 연산자
연산자 | 의미 |
---|---|
ALL | 서브쿼리의 모든 결과에 대해 ~ 하다. |
ANY | 서브쿼리의 하나 이상의 결과에 대해 ~ 하다. |
비상관 서브쿼리 사용 예시
1
2
3
SELECT * FROM Grade
WHERE Score > ALL (
SELECT Score FROM Grade WHERE Name = '박지민');
박지민의
모든
성적 보다 높은 모든 학생의 성적을 출력(즉, MAX보다 높은), 만약 ‘ANY’ 사용시 하나 이상의 성적 보다 높은 모든 학생을 출력(즉, MIN보다 높은)한다.
Id | Name | Subject | Score |
---|---|---|---|
2 | 이영희 | 수학 | 90 |
2 | 이영희 | 과학 | 95 |
상관 서브쿼리(Correlated subquery)
상관 서브쿼리는 메인 쿼리의 데이터에 의존하는 서브쿼리
이다. 즉, 서브 쿼리가 메인 쿼리의 결과에 따라 달라진다. 서브쿼리 내부에서 메인 쿼리의 테이블을 참조하는 경우, 이를 상관 서브 쿼리라고 한다. 상관 서브쿼리는 메인 쿼리의 각 행에 대해 실행되므로, 일반적으로 비상관 서브쿼리보다 성능이 느릴 수 있다.
1
2
3
SELECT a.*
FROM TableA a
WHERE EXISTS (SELECT 1 FROM TableB b WHERE a.id = b.id);
💡 추가 연산자
연산자 | 의미 |
---|---|
EXISTS | 서브쿼리가 하나 이상의 행을 반환하는 경우 참(True)를 반환 |
NOT EXISTS | 서브쿼리가 단 한개의 행도 반환하지 않을 때 참(True)를 반환 |
상관 서브쿼리 사용예시
1
2
3
4
5
6
7
SELECT g.*
FROM Grade g
WHERE g.Score > (
SELECT AVG(gg.Score)
FROM Grade gg
WHERE gg.Id = g.Id
);
각 학생이 수강하는 과목 중에서 평균 성적보다 높은 성적을 받은 과목들을 찾는 쿼리
Id | Name | Subject | Score |
---|---|---|---|
1 | 김철수 | 수학 | 85 |
2 | 이영희 | 과학 | 95 |
3 | 박지민 | 수학 | 85 |
This post is licensed under CC BY 4.0 by the author.