본문 바로가기
MYSQL

[MYSQL] 서브쿼리 위치, 메인쿼리와의 관계성, 반환 결과에 따른 SQL 용어

by Johnny's 2023. 6. 26.

서브쿼리 위치에 따른 SQL 용어

서브쿼리(subquery)란 쿼리 안의 보조쿼리를 가리키는 용어

가장 바깥쪽의 SELECT 문인 메인쿼리(main query)를 기준으로 내부에 SELECT문을 추가로 작성해서 서브쿼리를 생성

작성하는 위치는 크게 SELECT 절, FROM 절, WHERE 절로 구분

 

 

 

스칼라 서브쿼리

메인쿼리의 SELECT 절 내부에 하나의 숫자나 문자, 기호 등을 출력하는 SELECT 문

메인쿼리의 SELECT 절에는 최총 출력하려는 열들이 나열되므로, 출력 데이터 1건과 스칼라 서브쿼리의 결과 건수가 일치해야 함. 즉, 스칼라 서브쿼리의 결과값은 1행 1열의 구조로 출력이 되어야 함

스칼라 서브쿼리는 출력되는 데이터 건수가 1건이어야 하므로 집계함수(max,min,avg,sum,count 등)가 자주 쓰임

 

인라인 뷰

메인쿼리의 FROM 절 내부에 작성한 또 다른 SELECT 문

인라인 뷰의 결과는 내부적으로 메모리 또는 디스크에 임시 테이블을 생성하여 활용

 

중첩 서브쿼리

메인쿼리의 WHERE 절 내부에 작성한 또 다른 SELECT 문

WHERE 절에서 서브쿼리를 추가하여 비교 연산하기 위해 중첩 서브쿼리 사용

보통 비교연산자( =, <, >, <=, >=, <>, !=), IN, EXISTS, NOT IN, NOT EXISTS 문

 

메인쿼리와의 관계성에 따른 SQL 용어

서브쿼리는 그 자체가 독립적인 형태로 존재할 수도 있고 메인쿼리와 끈끈한 관계를 유지하며 존재할 수 있음

 

비상관 서브쿼리

비상관 서브쿼리(non correlated subquery)는 메인쿼리와 서브쿼리 간에 관계성이 없음을 의미

서브쿼리가 독자적으로 실행된 뒤 메인쿼리에게 그 결과를 던져주는 형태

즉, 서브쿼리 실행  → 메인쿼리 실행

상관 서브쿼리

상관 서브쿼리(correlated subquery)는 메인쿼리와 서브쿼리 간에 관계성이 있음을 의미

상관 서브쿼리는 SELECT 절에 작성하는 스칼라 서브쿼리와 WHERE 절에 작성하는 중첩 서브쿼리일 때 발생

 

메인쿼리 실행(학생.학번 데이터 가져오기) → 서브쿼리 실행(지도교수.학번 = 학생.학번) → 다시 메인쿼리 실행한 뒤 결과 출력(SELECT * FROM 학생 ~) 

 

반환 결과에 따른 SQL 용어

서브쿼리의 결과 유형은 수치적 기준으로 구분할 수 있음

- 단순히 1건의 행 데이터만 반환하는 경우

- 2개 이상의 행 데이터를 반환하는 경우

- 2개 이상의 행과 열 데이터를 반환하는 경우

 

단일행 서브쿼리

단일행 서브쿼리(single-row subquery)서브쿼리 결과가 1건의 행으로 반환되는 쿼리

메인쿼리의 조건절에서는 =,<,> 등의 연산자와 비교

단일행 서브쿼리는 주로 SELECT 절에서 사용하는 스칼라 서브와 동일하다고 볼 수 있음

 

다중행 서브쿼리

다중행 서브쿼리(multiple-row subquery)서브쿼리 결과가 여러 건의 행으로 반환되는 쿼리

메인쿼리의 조건절에서는 IN 구문으로 서브쿼리에서 반환되는 값들을 받음

 

다중열 서브쿼리

다중열 서브쿼리(multiple-column subquery)서브쿼리 결과가 여러 개의 열과 행으로 반환되는 쿼리

메인쿼리의 조건절에서는 IN 구문과 함께 서브쿼리에서 반환될 열들을 동일하게 나열해 서브쿼리 결과를 받음

 

* 참고

- 업무에 바로쓰는 SQL 튜닝(도서) - 2장 SQL 튜닝 용어를 직관적으로 이해하기

 

댓글