🤳 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 서브쿼리 장점?
- 서브쿼리는 쿼리를 구조화시키므로, 쿼리의 각 부분을 명확히 구분할 수 있게 해준다.
- 서브쿼리는 복잡한 JOIN이나 UNION과 같은 동작을 수행할 수 있는 또 다른 방법을 제공
- 서브쿼리는 복잡한 JOIN이나 UNION보다 더 읽기 편함 (가독성이 좋음)
🤳 Mysql 서브쿼리 주의할 점?
- 서브쿼리는 괄호()로 감싸서 사용해야한다.
- 서브쿼리는 단일, 복수, 비교 연산자와 함께 사용가능하다.
- 서브쿼리에서 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문에 나타나는 서브쿼리
- 하나의 레코드만 리턴이 가능하며, 두개 이상의 레코드는 리턴할 수 없다.
- 다른 테이블에서 값을 가져올때 사용
'Sql개발자' 카테고리의 다른 글
Mysql - union, union all 차이 (19) | 2022.12.21 |
---|---|
Mysql Auto Increment, Primary Key, Foreign Key 옵션 정리 (9) | 2022.12.08 |
SQL 튜닝의 정리 (2) | 2022.09.12 |
DBMS 와 RDBMS 개념 정리 (1) | 2022.09.11 |
MySql 유용한 시간 더하기 빼기 함수 (3) | 2022.07.20 |