DB 5일차 3(subquery)
2022. 12. 13. 10:52ㆍ코딩배움일지/DataBase
subquery
하나의 SQL 문에 포함되어 있는 또 다른 SQL 문을 말합니다.
서브쿼리 사용시 주의사항
1. 서브쿼리를 괄호로 감싸서 사용한다.
2. 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다.
3. 서브쿼리에서는 ORDER BY 를 사용하지 못한다.
사용 하는 곳
1. SELECT 절
2. FROM 절
3. WHERE 절
4. HAVING 절
5. ORDER BY 절
6. INSERT 문의 VALUES 절
7. UPDATE 문의 SET 절
서브 쿼리 분류
더보기
단일행
서브쿼리가 단일 행 비교 연산자(=, <, <=, >, >=, <>)와 함께 사용할 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 합니다.
다중행
서브쿼리의 결과가 2건 이상 반환될 수 있다면 반드시 다중 행 비교 연산자(IN, ALL, ANY, SOME)와 함께 사용해야 합니다.
INSERT INTO
board_mst
VALUE
(0,'제목1', '게시글 내용1', 0, 1),
(0,'제목2', '게시글 내용2', 0, 1),
(0,'제목3', '게시글 내용3', 0, 1),
(0,'제목1', '게시글 내용1', 0, 2),
(0,'제목2', '게시글 내용2', 0, 2),
(0,'제목3', '게시글 내용3', 0, 2),
(0,'제목4', '게시글 내용4', 0, 1),
(0,'제목5', '게시글 내용5', 0, 1),
(0,'제목6', '게시글 내용6', 0, 1),
(0,'제목4', '게시글 내용4', 0, 2),
(0,'제목5', '게시글 내용5', 0, 2),
(0,'제목6', '게시글 내용6', 0, 2);
SELECT
*
FROM
board_mst;
작가 가 몇개의 글을 작성하였나?
SELECT
writer_id,
COUNT(1)
FROM
board_mst
GROUP BY
writer_id;
서브 쿼리 (함부로 쓰리지마라 ㅈ된다.)
SELECT
*,
(SELECT COUNT(1) FROM board_mst bm2 WHERE bm2.writer_id = bm.writer_id)
FROM
board_mst bm;
서브쿼리는 컬럼값을 하나만 가져와야한다.
from 에서 쓰는 서브 쿼리
SELECT
*,
wc.writer_count
FROM
board_mst bm
LEFT OUTER JOIN (SELECT
writer_id,
COUNT(1) AS writer_count
FROM
board_mst
GROUP by
writer_id) wc ON (wc.writer_id = bm.writer_id);
from 에서 쓰는 서브 쿼리1
SELECT
bm.id,
bm.title,
bm.content,
bm.read_count,
bm.writer_id,
wc.writer_count
FROM
board_mst bm
LEFT OUTER JOIN (SELECT
writer_id,
COUNT(1) AS writer_count
FROM
board_mst
GROUP by
writer_id) wc ON (wc.writer_id = bm.writer_id);
from 안
join 을 통한 서브 쿼리가 효율 적이다. 결과는 같으나 이게 좋다.
'코딩배움일지 > DataBase' 카테고리의 다른 글
DB 6일차 2() (0) | 2022.12.14 |
---|---|
DB 6일차 1(서브쿼리) (0) | 2022.12.14 |
DB 5일차 2(group by) (0) | 2022.12.13 |
DB 5일차 1() (0) | 2022.12.13 |
DB 4일차 4() (0) | 2022.12.12 |