서브쿼리

Feb 02, 2024
서브쿼리
 
서브쿼리란 하나의 쿼리문 내부에 또 다른 쿼리문이 있을 때를 말한다.
서브쿼리는 사용하는 위치에 따라서 종류가 달라진다.
 

1. 서브쿼리(where절)

 
where절에 사용하는 서브쿼리는 가장 일반적인 형태이다.
 
select id,username from user_tb where id = (select max(id) from user_tb); select max(id) from user_tb ; // = 3 일때, select username from user_tb where id = 3 ; // 새로운 사람이 가입하면 쿼리문을 수정해야됨.
 
select max(id) from user_tb 문은 user_tb 에서 가장 나중에 가입한 사람의 id(프라이머리키) 를 나타낸다. 이 쿼리문으로 받은 데이터를 다른 쿼리문에 넣으면 같은 값을 받을 수 있으나, 결과값이 달라질 때 마다 수정을 해야 한다. 서브쿼리를 사용해서 더욱 정확한 DB에 더 정확한 요청을 할 수 있다.
 
notion image
 

2. 인라인뷰 서브쿼리 (from절)

 
인라인 뷰는 쿼리 안에서 특정 데이터 집합을 생성하고, 이를 마치 테이블처럼 사용할 수 있게 해준다.
select 1 image_id ,count(*) love_count from love_tb where image_id = 1 union all // 쿼리문을 서로 합침. select 2,count(*) from love_tb where image_id = 2 union all select 3, count(*) from love_tb where image_id = 3
notion image
 
 
select * from ( select 1 image_id ,count(*) love_count from love_tb where image_id = 1 union all select 2,count(*) from love_tb where image_id = 2 union all select 3, count(*) from love_tb where image_id = 3 ) my_lobe_tb inner join image_tb im on im.id = my_lobe_tb.image_id ;
 
 
 
인라인뷰는 쿼리문을 묶어 하나의 테이블처럼 사용할 수 있다.
 
 
//인라인뷰 x select id, username, substr(email, 1, 4) my_email from user_tb where my_email = 'ssar'; // 이거는실행안됨 오내면 from 1, where 2 select 3 순으로 //진행되는데 my_email 은 별칭이라서 where 실행 시에 사용할 수 없음 //인라인뷰 o select * // 인라인 뷰를 사용하면 순서가 바껴서 from 실행 시에 my_email 을 사용할 수 있음. from ( select id, username, substr(email, 1, 4) my_email from user_tb ) tb where my_email = 'ssar';
notion image
 
인라인 뷰를 쓰는 이유 중 하나는 실행되는 순서를 바꿀 수 있어 별칭을 사용하기 좋다.
select 문에서 from 절, where절, select 절 순으로 실행되기 때문에, select 절에 별칭을 쓰면 where 절에서 별칭을 사용할 수 없다.
하지만 인라인뷰를 사용하면 from 절이 실행될 때 서브쿼리 내부의 select절이 실행되면서 별칭을 사용할 수 있다.
 
 

3. 스칼라 서브쿼리 (select절)

 
스칼라 서브쿼리는 select 절에 사용하는 서브쿼리로, 테이블의 명으로 추가되기 때문에 단일 행, 단일 형의 데이터로 이루어져야 한다.
 
select *, (select count(*) from love_tb where image_id = im.id ) from image_tb im;
 
notion image
 
스칼라 서브쿼리는 하나의 행으로 추가된다.
 
Share article

{CODE-RYU};