[코드잇] SQL로 하는 데이터분석(2)

강윤채·2023년 3월 30일
0

SQL

목록 보기
2/2

🎇 테이블 조인을 통한 데이터 분석

✨ FOREIGN KEY(외래키)

  • 다른 테이블의 특정 row를 식별할 수 있게 해주는 컬럼

    참조를 하는 테이블 : '자식 테이블' - stock 테이블
    참조를 당하는 테이블 : '부모 테이블' - item 테이블

이상한 item-id 값을 추가하려 하면 오류가 발생한다.

✨ 테이블 조인

  • RIGHT OUTER JOIN : 오른쪽 테이블을 기준으로 조인
  • LEFT OUTER JOIN : 왼쪽 테이블을 기준으로 조인
  • INNER JOIN : 공통된 값 기준으로 조인(교집합)
  • AS : alias 테이블 명을 붙일 수 있다.
  • ON 테이블.컬럼 = 테이블.컬럼 : 비교할 컬럼
  • USING(컬럼) : 컬럼 이름이 같을 경우

💡 테이블 명 변경시 테이블이 써 있는 모든 자리에 이름을 변경해 주어야 한다.

FOREIGN KEY가 없더라도 조인은 가능하다. FOREIGN KEY가 있다면 LEFT OUTER JOIN 혹은 RIGHT OUTER JOIN이 INNER JOIN이 같은 결과를 나타 내지만, 그렇지 않은 경우에는 다른 3가지 모두 다른 결과 값이 나오기도 한다.

SELECT p.name AS name, COALESCE(s.sales_volume, '판매량 정보 없음') AS 판매량
    FROM pizza_price_cost AS p LEFT OUTER JOIN sales AS s 
    // AS를 이용해 s, p로 테이블 이름을 변경했다.
    ON p.id = s.menu_id;

✨ 결합연산과 집합연산

결합연산

  • 테이블을 가로방향으로 합치는 연산
  • LEFT(RIGHT) OUTTER(INNER) JOIN

집합연산

  • 테이블을 세로방향으로 합치는 연산
  • INTERSECT : A ∩ B
SELECT * FROM member_A
INTERSECT 
SELECT * FROM member_B
  • MINUS, EXCEPT : A - B 또는 B - A
SELECT * FROM member_A(member_B) 
MINUS
SELECT * FROM member_B(member_A)
  • UNION : A U B 중복되는 컬럼은 하나만 보여준다.

    • 서로 다른 종류의 테이블도, 조회하는 컬럼을 일치시키면 집합 연산이 가능하다.
    • UNION ALL : 중복되는 컬럼도 제거하지 않고 다 보여준다.
SELECT age, height FROM member_A
UNION
SELECT age, height FROM member_B

✨ 세개의 테이블 조인하기

SELECT
	i.name,
    r.star, r.comment,
    m.email
FROM
	item AS i LEFT OUTER JOIN review AS r
   	ON r.item_id = i.id
   LEFT OUTER JOIN member AS m
   	ON r.mem_id = m.id;

🎇 서브쿼리와 뷰를 활용한 데이터 분석

✨ 서브쿼리?

  • 전체 SQL문에서 일부를 이루는 또 다른 SQL문이다.
  • 괄호()로 묶어서 사용한다.

✨ 서브쿼리에 사용되는 키워드

  • IN : 포함된 다수의 값을 똑같은지 비교
  • ANY, SOME : ~중 하나라도 만족하면 TRUE
WHERE view_count > ANY(서브쿼리) 
//view_count가 ANY에 포함된 값 중 하나 이상의 값보다 크면 TRUE
  • ALL : 모두 만족해야 TRUE
WHERE view_count > ALL(서브쿼리) 
//view_count가 ALL에 포함된 모든 값 보다 크면 TRUE

0개의 댓글