[MYSQL] 개념 정리

BBakHye·2022년 12월 17일
0

🦁 AI SCHOOL 7기

목록 보기
48/52

[백문이불여일타] 데이터 분석을 위한 중급 SQL 노트 정리

📌 COUNT

SELECT COUNT(*) : NULL 값을 포함한 모든 카운트 값을 출력
SELECT COUNT(Column name) : NULL 값을 제외한 카운트 값을 출력
SELECT COUNT(DISTINCT Column name) : NULL 값을 제외하고 해당되는 컬럼의 카운트 값을 출력

📌 AVG

SELECT AVG(Visits) : NULL을 제외하고 계산
=> (1+2+3+5) / 4 = 2.75 

SELECT SUM(Visits)/COUNT(*) : SUM은 NULL 값을 포함 X, COUNT(*)NULL 값 포함
=> (1+2+3+5) / 5 = 2.2

💡 HAVING 은 GROUP BY의 결과물을 이용해서 출력을 하고싶을 때 사용

🖇 JOIN

: 관련성이 있는 두개 이상의 테이블을 이어 붙여 정보를 출력할 때 사용
=> 중복되는 정보들을 공간을 낭비하지 않고 효율적으로 저장하기 위한 방법

📌 INNER JOIN (교집합)

💡 INNER JOIN은 각 테이블에 있는 정보가 일치하는 경우에 해당 데이터만 출력

i.e. 주문번호로 두 테이블을 연결했을 때,
A테이블에는 주문번호가 1인 데이터가 있지만 B테이블에는 주문번호가 1이 없는 경우에는 주문번호 1에 해당하는 데이터는 출력되지 않는다.

SELECT *
FROM Users
	INNER JOIN Orders ON Users.Id = Orders.userId

Users 테이블의 Id와 Orders 테이블의 userId가 같은 경우, INNER JOIN을 사용해 하나의 테이블로 합쳐줄 수 있음

출처: https://sql-joins.leopard.in.ua/

SELECT * 
FROM TableA A
	 INNER JOIN TableB B ON A.key = B.key

💡 JOIN key로 사용해야하는 컬럼들의 이름이 다른 경우 ERD 사용
ERD(Entity Relationship Diagram): 테이블 간에 어떤 관계성이 있는지를 도식화 해놓은 방법론

📌 OUTER JOIN

: INNER JOIN을 제외한 나머지 JOINs

📌 LEFT JOIN

INNER JOIN과 달리 주문번호로 테이블을 연결했을 때 A테이블에는 주문번호 1이 있고, B테이블에는 없을 때도 주문번호 1에 해당하는 데이터 출력 가능 => 이 때, A테이블에 없는 정보는 NULL값으로 출력

출처: https://sql-joins.leopard.in.ua/

SELECT * 
FROM TableA A
LEFT JOIN TableB B ON A.key = B.key

A테이블을 기준으로 Join하고 A에 있는 정보는 모두 출력하고, A에는 없지만 B에는 있는 정보는 NULL로 출력

💡
RIGHT JOIN은 LEFT JOIN의 반대 개념이지만 현업에서 잘 사용하지 않음.

📌 FULL OUTER JOIN

출처: https://sql-joins.leopard.in.ua/

❗️ FULL OUTER JOIN이 MYSQL에서는 지원이 되지 않기 때문에 A테이블과 B테이블의 정보를 모두 보고 싶을 때는 UNION을 사용해 출력
i.e. Orders에는 있지만 Customers에는 없는 정보 (비회원 주문)까지 함께 출력하고 싶을 때 사용

# 고객정보는 있지만 주문정보가 없는 경우
SELECT *
FROM Customers
	LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
    
UNION
    
# 주문정보는 있지만 고객정보가 없는 경우
SELECT *
FROM Customers
	RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID

🖇 UNION

📌 UNION

: 두 개의 테이블을 연결할 때 중복값을 제외하고 출력 (DICTINCT와 같은 개념)

📌 UNION ALL

: 두 개의 테이블을 연결할 때 중복값을 포함해서 출력

profile
데이터 분석가가 되기 위한 기록 ✏️

0개의 댓글