SQL로 하는 데이터 분석 완강
[목차]
- 서브쿼리와 뷰를 활용한 유연한 데이터 분석
[서브쿼리]
- 서브쿼리 : SQL 문 안에 '부품'처럼 들어가는 SELECT 문 > 다른 SQL 문의 일부로 쓰이는 SELECT 문
ㄴ 전체 SQL 문을 outer query, 서브쿼리를 inner query
- SELECT 절에 있는 서브쿼리
- WHERE 절에 있는 서브쿼리
[ANY(SOME), ALL]
1. ANY(= SOME) : WHERE 절에서 사용될 때는, 서브쿼리의 결과에 있는 각 row의 값들 중 하나라도 조건을 만족하는 경우가 있으면 TRUE를 리턴한다
ex) WHERE view_count > ANY(서브쿼리)
2. ALL : 모든 경우에 대해서 해당 조건이 성립해야 TRUE를 리턴
[서브쿼리 기초 실습]
- 리뷰가 달리는 스테디 셀러 상품들의 리뷰 모니터링
SELECT *
FROM review
WHERE item_id IN
(
SELECT id
FROM item
WHERE registration_date < '2018-12-31'
);
[FROM 절에 있는 서브쿼리]
- FROM 절 뒤에도 서브쿼리 사용 가능 > derived table
- derived table에는 꼭 AILAS를 생성해야 함
*derived table : FROM 뒤에서 서브쿼리가 리턴하는 테이블 > Oracle이라는 DBMS에서는 이것을 inline view
[서브쿼리의 종류 총정리]
1. 단일값을 리턴하는 서브쿼리
: 단일값은 수학, 물리분야에서 스칼라라고 불림 > 이러한 서브쿼리를 스칼라 서브쿼리라 부름
: 스칼라 서브쿼리는 SELECT 절에서 하나의 컬럼처럼 WHERE 절에서 =,> 등 조건 표현식과 비교하는 값으로 쓸 수 있음
2. 하나의 column에 여러 row들이 있는 형태의 결과를 리턴하는 서브쿼리
: 이러한 서브쿼리는 IN, ANY(SOME), ALL 등의 키워드와 함께 쓸 수 있음
3. 하나의 테이블 형태의 결과(여러 column, 여러 row)를 리턴하는 서브쿼리
: 테이블 형태의 값을 리턴하는 서브쿼리 > derived table 일시적 탄생 > derived table에는 alias를 붙여줘야 한다는 규칙
서브쿼리 분류
- 비상관 서브쿼리(Non-correlated Subquery) : outer query와 상관 관계가 없는 서브쿼리 > 서브쿼리가 그것을 둘러싼 outer query와 별개로, 독립적으로 실행
- 상관 서브쿼리(Correlated Subquery) : outer query에 적힌 테이블 이름 등과 상관 관계를 갖고 있어서 그 단독으로는 실행되지 못하는 서브쿼리
ㄴ 한 테이블에서 어떤 특정 테이블에 연관된 row가 있는 것들만, 혹은 없는 것들만 추려낼 때는 상관 서브쿼리를 사용하고 그 앞에 EXISTS 또는 NOT EXISTS
[서브쿼리 종합 실습]
- 최고 가격, 리뷰의 평균 별점, 리뷰를 남긴 고유한 회원 이메일의 수
SELECT MAX(copang_report.price) AS max_price,
AVG(copang_report.star) AS avg_star,
COUNT(DISTINCT(copang_report.email)) AS distinct_email_count
FROM (
SELECT price,
star,
email
FROM item AS i INNER JOIN review AS r ON r.item_id = i.id
INNER JOIN member AS m ON r.mem_id = m.id
) AS copang_report;
[서브쿼리 vs 조인]
- 상관 서브쿼리 사용 결과와 조인을 통해서도 똑같은 결과 조회 가능
> 정답은 없으며, 분석 시 익숙하고 직관적인 것을 선택
> 수 많은 row가 있을 때는 두 가지 방법에서 속도 차이가 발생할 수 있음
[데이터 분석가의 자산, 뷰]
- 뷰 : 조인 등의 작업을 해서 만든 결과 테이블이 가상으로 저장된 형태 > 가상 테이블
ㄴ 테이블 : 테이블은 우리가 표 형식의 데이터가 실제 컴퓨터에 저장
ㄴ 뷰 : 표 형식으로 데이터를 본다는 점은 동일하나, 테이블처럼 그 내용이 실제 컴퓨터에 일일이 저장되어 있는 건 아님 > DBMS가 그 뷰를 생성하는 SQL문을 재실행하는 방식으로 가상의 테이블 생성
ㄴ three_tables_joined 라는 뷰를 사용할 때마다 AS 다음에 있는 빨간 박스 안의 SELECT 문이 재실행된다는 뜻
[뷰 활용의 장점]
1) 사용자에게 높은 편의성을 제공
2) 각 직무별 데이터 수요에 알맞은, 다양한 구조의 데이터 분석 기반을 구축
3) 데이터 보안을 제공 : 민감 정보가 담긴 컬럼을 제외하고 보여줄 수 있는 방법
[데이터베이스 현황 파악]
1. 존재하는 데이터베이스들 파악
2. 한 데이터베이스 안의 테이블(뷰도 포함)들 파악
3. 한 테이블의 컬럼 구조 파악
- DESCRIBE를 사용하면 테이블의 컬럼 구조만 깔끔하게 파악
4. Foreign Key(외래키) 파악
- 테이블들 간의 관계를 파악하려면 데이터베이스에 존재하는 Foreign Key들을 파악 필요
- 두 테이블의 각 컬럼 간에 Foreign Key 관계가 성립한다고 해도 관리자가 그것을 Foreign Key로 설정하지 않는 경우도 있음
'Learning > SQL' 카테고리의 다른 글
[SQL] SQL로 하는 데이터 분석 (3)_코드잇 (0) | 2024.01.23 |
---|---|
[SQL] SQL로 하는 데이터 분석(2)_코드잇 (0) | 2024.01.16 |
[SQL] SQL로 하는 데이터 분석(1)_코드잇 (0) | 2023.12.28 |
[SQL] 엑셀보다 쉬운 SQL_스파르타코딩클럽 (0) | 2023.09.17 |
[패스트캠퍼스: SQL 데이터 분석 첫걸음] Week 1 (3) (0) | 2023.08.06 |