[ 서브 쿼리 ] 문 학습하기
[ 서브 쿼리(subquery) 란?]
다른 쿼리 내부에 포함되어 있는 SELECT 문을 의미한다.
한 번의 SELECT안에서 결과 값을 모두 도출하지 못하는 경우 사용된다.
쿼리를 구조화시켜, 각 쿼리의 부분을 명확하게 구분할 수 있다.
서브 쿼리를 포함하고 있는 쿼리를 '외부 쿼리'라고 부르며,서브 쿼리는 '내부 쿼리'라고 부른다.서브 쿼리는 반드시 괄호 ( )로 표시해주어야 한다.
'서브 쿼리'는 'JAVA'의 'for' 문과 같이 또다시 '다른 서브 쿼리' 안에 포함될 수 있다.
[ 서브 쿼리(subquery) 예제 1 ]


서브 쿼리를 학습하기 위한 새로운 데이터베이스(subquery_study) 생성 후
'board_mst' 테이블 생성


'INSERT쿼리문으로 데이터 입력 >> 'board_mst' 테이블
👇각각의 글쓴이마다 몇 권의 책을 썼는가?👇


제일 마지막 행을 삭제하여
1번 작성자는 6권,
2번 작성자는 5권을 집필하였다.
모든 게시글에서 해당 작성자가
몇 권의 책을 써는지
데이터를 조회하고 싶은 경우
>> 서브 쿼리문을 사용한다.
SELECT 문에 서브 쿼리를 사용한 경우

첫 번째 SELECT에서 'board_mst bm' 테이블 전체 값을 출력한다.
두 번째 SELECT에서 'board_mst bm2'의 writer_id 값을 가지고 와서
첫 번째 출력한 writer_id와 같을 경우 그 writer_id의 카운터 값을 출력하여 준다.
SELECT가 계속 돌아가고 있다. (이중 For문과 같은 원리이다.)
>> 서브 쿼리는 값을 하나만 가지고 와야 한다.
👇결과 값👇



서브 쿼리 문인
SELECT writer_id, COUNT(1) FROM board_mst GROUP BY writer_id) 자체가
하나의 테이블이 된다.


위처럼 SELECT에 서브 쿼리를 쓰는 경우 데이터 트래픽이 많이 발생한다.
따라서 서브 쿼리를 JOIN문을 사용하는 것이 더 효율적이다.
>> 결과 값은 똑같이 나오지만 성능이 더 좋다.
>> 하지만 복잡한 JOIN, UNION 쿼리문 보다 서브 쿼리문이 읽기 더 쉽다.


쿼리 프로파일링 실행 시 해당 쿼리의 성능 지표나 통계를 확인할 수 있다.
>> SET profiling = 1; (쿼리 프로파일링 활성화)>> 프로파일링 할 쿼리문 실행(SELECT)>> SHOW profiles; 를 순차적으로 실행해주면 된다.
활성화는 한 번만 해도 되며 쿼리문 실행(SELECT)과 SHOW는반복할수록 지표와 통계가 늘어나는 것을 확인할 수 있다.
지금까지 데이터베이스의 [서브 쿼리] 문을 학습하였습니다.
다음 포스팅에서는 [서브 쿼리] 문을 MySQL Workbench 환경에서 작성해보겠습니다.
❤긴 글 읽어주셔서 감사드립니다❤
'웹개발 > 웹 개발[데이터베이스-MySQL]' 카테고리의 다른 글
| 데이터베이스 [MySQL - Workbench] 개발 환경 구축 (0) | 2022.12.20 |
|---|---|
| 데이터베이스 [서브쿼리] 2 (0) | 2022.12.20 |
| 데이터베이스 [HAVING, ORDER BY, LIMIT] 함수 (0) | 2022.12.19 |
| 데이터베이스 [Group By] 함수 (0) | 2022.12.19 |
| 데이터베이스 [JOIN] 함수 2 (0) | 2022.12.19 |