📚 ERM (Entity-Relationship modeling)
- 개체(Entity)간의 관계(RelationShip)을 저장하는 모델링 기법
- 예를 들어 상품과 회원-주문-상품 세 개체가 있다고 할 때, 한 회원이 많은 주문을 할 수 있으므로 회원 <-> 주문 = 1 : N이고 주문 <-> 상품은 한 상품이 많이 주문될 수 있으므로 N : 1이다.
- 이 때 N과 1을 관계로 나타낼 때, 1은 개체의 고유한 식별변호(PRIMARY KEY)가 되고, N은 중복 데이터가 가능한 FOREIGN KEY를 의미한다.
JOIN
INNER JOIN
- INNER JOIN 쿼리는 여러 테이블의 공통 값을 통해 테이블을 결합한다.
SELECT [col] FROM [table1] AS [table_alias1]
INNER JOIN
[table2] AS [table_alias2]
ON [condition]
아래는 students 테이블이다.

아래는 orders 테이블이다.

그러면 두 테이블을 합쳐서 나타내보자.
SELECT * FROM students AS A INNER JOIN orders AS B ON A.name = B.name;

OUTER JOIN
- 매칭되지 않는 데이터도 조회한다.
- RIGHT, LEFT, FULL JOIN 세 가지가 존재한다.
- RIGHT는 오른쪽, LEFT는 왼쪽, FULL은 모든 테이블을 기준으로 조회한다.
LEFT JOIN 예제
왼쪽 students 테이블 기준 매칭되지 않는 값은 null, 나머지는 매칭되어 출력된다.

RIGHT JOIN 예제
오른쪽 orders 테이블은 1:N 관계라서 NULL 값이 없는 것을 확인할 수 있다.

mysql에는 FULL JOIN이 없다.
CROSS JOIN, SELF JOIN
- CROSS JOIN은 두 테이블의 행을 결합
- SELF JOIN은 한 테이블의 행과 다른 행들을 결합
CROSS JOIN 예제
A 테이블의 행 * B 테이블의 행만큼 나온다.

매칭되는 것끼리 그대로 이어붙이는 느낌.
SELF JOIN 예제

한 테이블의 행들을 조건 + 원래 행들 그대로 다 이어붙인다.