[개념은 호옹~, 실습 빡]
SQL 데이터 분석, 활용!
참고사이트:
서브쿼리 (Feat. 카페매출)
서브쿼리. 무엇?
서브쿼리:
쿼리 속에 존재하는 또 다른 쿼리로서,
먼저 수행된 쿼리의 결과를 갖고
다시 쿼리를 수행하는 문법
- 수학점수가 평균보다 높은 학생을
찾는다고 가정 -
1) 먼저 수학점수의 평균을
서브 쿼리로 계산해 볼 수 있다
그 결과를 기준으로
학생 정보를 필터링 할 수 있다
이떄, 먼저 수행되는 안 쪽 쿼리가
서브쿼리이다
그 결과를 이용하는 바깥 쪽 쿼리는
메인쿼리이다
- 서브쿼리가 쓰이는 위치 -
각자의 위치에 따라 형태의 제약이 있다
- SELECT 절 -
1행 1열의 단일값만 사용할 수 있다
- FROM절, JOIN절 -
행과 열의 크기는 상관이 없지만,
반드시 별칭을 붙여줘야 한다
- WHERE 절 -
사용자의 연산자에 따라
서브쿼리의 결과 크기가 제한된다
1행 1열의 단일 값 또는
N행 1열이 될 수 있다
SELECT 절 서브쿼리
- SELECT 절 서브쿼리 사용-
최대 가격과의 차이 찾기:
최대 가격과의 차이가 테이블에 존재하지 않으므로
기존 가격 PRICE 에서 가장 비싼 값을 뺴서 구한다
PRICE - 5800
1) 음료 전체를 조회해서 데이터 확인을 먼저 해준다
2) 음료명 / 가격 / 최대가격과의 차이를 구해준다
최대 가격과의 차이는
beverages 에 존재하지 않기 때문에
직접 계산해줘야 함
PRICE - 가장비싼값
\만약, 5800원을 알고있지 못하는 경우엔,
직접 넣지 말고 쿼리를 통해 계산한다
5800 원이 하단의 서브 쿼리를 통해서
계산이 된다
계산된 결과를 괄호 안에 넣어주고,
메인쿼리 작동시켜준다
서브쿼리 작성 시 주의:
세미콜론(;) 을 넣어주면 안된다
SELECT 안 쪽의 서브쿼리는
반드시 1행 1열의 값을 받아내야한다
FROM 절 서브쿼리
한 번 음료를 주문할 때
보통 음료가 몇 개씩 주문되는지 계산하기
ORDER_ID가 1번인 건
COUNT가 1이니까
1번 음료에는 하나의 음료만 주문되는 것이다
2번은 7개
ORDER_ID 를 기준으로
그룹화 해서
각각의 그룹별로 집계를 구해준다
14번은 11개
그룹 별 SUM에서 집계한 내용을 갖고
평균을 구한다
(AVG 집계함수 사용)
결과가 3.27 이 나오게 해주면 됨
이 데이터를 갖고 다시 집계해서
평균을 구한다
평균 구하기 위해 위와 같이쓰면
에러 발생:
집계함수는 중첩해서 사용 불가
FROM 절 서브쿼리 사용하기
SUM으로 집계한 걸
다시 한번 AVG 집계한다
서브쿼리는 세미콜론이 없어야 함
FROM 절 안에 세미콜론 X
FROM 절의 서브쿼리는
반드시 별칭을 달아줘야 하므로
AS 를 사용한다
평균 구하기
JOIN 절 서브쿼리
- JOIN 절 서브쿼리 활용 -
주문개수는
우측 표 COUNT를
집계해갖고
만들 수 있음
그룹화와 집계
결과를 음료명에다가 붙여주면 된다
자몽에이드의 NULL 값을 0 값으로 출력하는 방법:
묶어서 COALESCE 라는 함수를 넣어줌
TOTAL_COUNT 값이 NULL 인 경우에 나올 값을
쉼표 뒤에 넣어준다
WHERE 절 서브쿼리
1) 우측의 음료 테이블 갖고 평균값을 먼저 구한다
2) 평균값을 갖고 필터링을 해 준다
3) 평균으로 서브쿼리를 먼저 구한다음
괄호안에 (????) 넣어준다
서브쿼리와 IN, ALL, ANY 연산개요
WEHRE 절 서브쿼리:
단순비교를 통한 서브쿼리 필터
단일 값 또는 단 COLUNM 이어야 함
IN, ALL, ANY:
단일 열이 가능한 경우
단일 값이 COLUNM 이어야 함
IN 연산:
포함 여부를 검사
서브쿼리가 단일 컬럼 A,B,C를 갖고왔다면
성적이 A,B,C 인 학생만 필터링한다
ALL 연산:
모두를 만족하는 걸 찾아준다
서브쿼리가 단일 열 80, 72, 68 을 갖고왔다면
메인쿼리는 이걸 갖고
비교연산을 ALL과 함께 수행한다
수학점수가 이들 모두보다 큰 학생만 필터링 해 줌
ANY 연산:
하나라도 만족하면 된다
서브쿼리 값이 단일열 80, 72, 68 일 때
메인쿼리는 하나만이라도 작은 것을 갖고온다
서브쿼리와 IN 연산
두 쿼리를 조합해서
판매량 상위 3개 음료 조회하기
우측의 주문내역 테이블 갖고
상위 3개 음료 찾아준다
1) 음료 별 데이터 그룹화
2) 상위 3개의 음료 정보를 추출하고
3) 그걸로 각각의 ID와 음료명 추출
서브쿼리와 ALL 연산
가격 뽑아와서
메인쿼리에 삽입해주면 된다
뽑아온 거 갖고
그 가격보다 모두 작은 값을 기준으로
데이터를 필터링 함
서브 쿼리와 ANY 연산
'> 프로그래밍 언어 > SQL' 카테고리의 다른 글
[SQL] Oracle 11 & SQL developer 설치 방법 (0) | 2023.03.30 |
---|---|
[SQL 데이터 분석, 활용!] 섹션 6. 그룹화의 집계 (2) | 2023.02.16 |
[SQL 데이터 분석, 활용!] 섹션 4. 테이블 조인 (0) | 2023.02.14 |
[SQL 데이터 분석, 활용!] 섹션 2. 일대다, 다대다 관계 (0) | 2023.02.13 |
[SQL 데이터 분석, 활용!] 섹션 1. 일대다 관계 (0) | 2023.02.13 |