본문 바로가기

DataBase

Sub Query, 중첩 서브쿼리

서브쿼리란 하나의 쿼리문 안에 또 다른 쿼리가 들어있는 모습이다.

단일 쿼리만으로 어려운 쿼리에 사용된다. 다른 테이블에서 데이터 값을 조회한 후 조건을 사용 가능.

 

사용시 주의 사항

  1. 서브쿼리를 괄호로 감싸서 사용한다.
  2. 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다.
  3. 서브쿼리에서는 ORDER BY 를 사용하지 못한다.
  4. 서브쿼리 실행 후 메인 쿼리 실행
  5. 여러 서브쿼리 중첩 가능

서브쿼리가 사용가능한 구절

  1. SELECT 
  2. FROM 절
  3. WHERE 절
  4. HAVING 
  5. ORDER BY 절
  6. INSERT 문의 VALUES 절
  7. UPDATE 문의 SET 절

서브쿼리 비교 연산자 종류

연산자 종류 사용처
단일행 연산자 =, <, >, <=, >=, <>, != 단일행, 다중열
다중행 연산자 IN, NOT IN, EXISTS, ANY, ALL 다중행, 다중열

단일행 서브쿼리

말그대로 하나의 값을 가져와서 사용하는 서브쿼리이다. 주로 select나 where에서 사용이 된다.

[예제]

select first_name, last_name, job_id, salay
from employees
where department_id = (select department_id 
	from departments
	where department_name = "IT");

위의 쿼리문을 해석해보면  departments 테이블에서 department_name이 IT인 행의 department_id가 employees테이블의 department_id와 일치하는 first_name, last_name, job_id, salay를 보여준다.

SELECT *, (SELECT gender 
	FROM MEMBER B 
	WHERE B.mem_no = A.mem_no) AS gender
FROM ORDER A;

ORDER테이블의 모든 값을 보여주는데 추가로 MEMBER테이블의 mem_no와 ORDER테이블의 mem_no값이 일치하는 gender의 값도 gender라는 컬럼의 이름으로 추가로 보여준다.


다중행 서브쿼리

 

이번엔 하나의 값이 아닌 여러 값을 가져와서 사용되는 서브쿼리인 다중행 서브쿼리를 보자.

[예제]

select state_province, street_addrss
from locations
where country_id in (select country_id
			from countries
			where region_id = 3);

위의 쿼리를 해석하면, countries테이블에서 region_id가 3인 coutry_id가 location테이블의 country_id의 값에 포함되어 있다면 state_province, street_address를 보여준다.

select city, state_province, street_address
from location
where country_id in (select country_id
			from countries
			where region_id = (select region_id
					from reginons 
					where region_name = 'Europe'));

이번엔 서브쿼리 안에 또 다른 서브쿼리가 있는 모습이다.

regions테이블에서 region_name이 Europe인 region_id와 일치하는 countries테이블의 coutry_id를 포함한 location테이블의 city, stat_province, street_address를 보여준다.

'DataBase' 카테고리의 다른 글

VIEW  (0) 2023.03.22
서브 쿼리 종류  (0) 2023.03.22
[SQL] 집합 연산자. UINON UNION ALL  (0) 2023.03.21
[SQL] ORDER BY  (0) 2023.03.21
[SQL] 집계함수, GROUP BY, HAVING  (0) 2023.03.21