Sql개발자

Mysql Subquery 개념 정리!

martinooo 2022. 12. 9. 11:23

🤳 Mysql 서브쿼리(subquery) 란?


서브쿼리(subquery)란 하나의 SQL 문 안에 포함되어 있는 또 다른 SQL문을 말한다.

첨 select 문이 메인쿼리이고 from (select) 문이 서브쿼리가 된다.

select *
from prem_board
where 1 = 1
and b_no = (
	select bc_seq
	from prem_board_comment
	group by bc_seq
    limit 1
)
order by b_no desc

🤳 Mysql 서브쿼리 장점?


  1. 서브쿼리는 쿼리를 구조화시키므로, 쿼리의 각 부분을 명확히 구분할 수 있게 해준다.
  2. 서브쿼리는 복잡한 JOIN이나 UNION과 같은 동작을 수행할 수 있는 또 다른 방법을 제공 
  3. 서브쿼리는 복잡한 JOIN이나 UNION보다 더 읽기 편함 (가독성이 좋음)

🤳 Mysql 서브쿼리 주의할 점?


  1. 서브쿼리는 괄호()로 감싸서 사용해야한다.
  2. 서브쿼리는 단일, 복수, 비교 연산자와 함께 사용가능하다.
  3. 서브쿼리에서 ORDER BY를 사용하지 못한다.

🤳 Mysql 서브쿼리 사용 가능 한 곳?


  • SELECT
  • FROM
  • WHERE
  • HAVING
  • ORDER BY
  • INSERT
  • UPDATE

🤳 Mysql 서브쿼리 위치에 따른 명칭


1. 단일행 서브쿼리 (single row subquery)

select *
from prem_board
where 1 = 1
and b_no = (
	select bc_seq
	from prem_board_comment
	group by bc_seq
    limit 1
)
order by b_no desc

 

where절에 나타나는 subquery

  • 단일행 subquery는 값이 하나여야된다. 

 

2. 다중행 서브쿼리 (multiple row subquery)

select *
from prem_board
where 1 = 1
and b_no in (
	select bc_seq
	from prem_board_comment
	group by bc_seq
)
order by b_no desc
;

where절에 나타나는 subquery

  • In 연산자로 다중으로 결과값을 출력할 수 있다.

 

3. 인라인 뷰 서브쿼리 (inline row subquery)

select count(a.cnt)
from (
	select count(*) as cnt
	from prem_board_comment
	group by bc_seq
) a;

from절에 나타나는 subquery

  • from 절에 사용되는 인라인 뷰 서브쿼리는 AS별칭을 지정해 주어야한다.

 

4. 스칼라 서브쿼리 (inline row subquery)

select b_no,
       (select count(pbc.bc_no) from prem_board_comment pbc where pb.b_no = pbc.bc_seq	
from prem_board pb
where 1 = 1
and pb.b_no = 1
order by pb.b_no desc
;

select문에 나타나는 서브쿼리 

  • 하나의 레코드만 리턴이 가능하며, 두개 이상의 레코드는 리턴할 수 없다.
  • 다른 테이블에서 값을 가져올때 사용