JOIN
RIGHT JOIN
- LEFT JOIN의 정반대로, 오른쪽 테이블을 기준으로 반환. (실무에서 거의 사용X)
CROSS JOIN
- 모든 가능한 조합(데카르트 곱)을 생성
- 테스트 데이터 생성이나 조건 확인 시 유용하나, 실무 활용도는 낮음
SELF JOIN
- 동일 테이블 내에서 데이터를 비교하거나 그룹화할 때 유용
- ex. 특정 조건을 만족하는 매칭 찾기
예시) 같은 연령대, 다른 성별에 속한 고객 간의 매칭 결과 조회하기 (중복 없이)
SELECT c1.연령대,
c1.고객ID AS 고객1_ID,
c1.이름 AS 고객1_이름,
c1.성별 AS 고객1_성별,
c2.고객ID AS 고객2_ID,
c2.이름 AS 고객2_이름,
c2.성별 AS 고객2_성별
FROM customers c1
INNER JOIN customers c2
ON c1.연령대 = c2.연령대
AND c1.성별 != c2.성별
AND c1.고객ID < c2.고객ID;
FULL OUTER JOIN
- MySQL에는 이 기능 제공하지 않음.
- 대신 Union으로 구현 가능
Key
- 데이터베이스에서 테이블의 각 행을 고유하게 식별하는 데 사용되는 칼럼
- 기본 키 Primary Key: 행을 유일하게 식별하는 칼러. NULL, 중복 불가
- 외래 키 Foreign Key: 다른 테이블의 기본키를 참조해 테이블 간 관계를 설정하는 칼럼
- 대체 키 Candidate Key: 기본 키로 선택 가능한 후보 칼럼
- 복합 키 Composite Key: 두 개 이상의 칼럼을 결합하여 만든 기본 키
UNION
UNION
- 여러 SELECT문의 결과를 수직으로 결합하면서 중복된 행 제거
- 조건) SELECT문의 칼럼 수와 데이터 형식이 동일해야 함
예시
SELECT 고객ID
FROM customers
WHERE 성별 = 'M'
UNION
SELECT 고객ID
FROM orders;
UNION ALL
- 여러 SELECT문의 결과를 수직으로 결합. 중복된 행 포함.
FULL OUTER JOIN 구현하기
- LEFT JOIN + UNION + RIGHT JOIN
SELECT c.고객ID, c.이름, p.결제ID, p.결제금액
FROM customers c
LEFT JOIN payments p
ON c.고객ID = p.고객ID
UNION
SELECT c.고객ID, c.이름, p.결제ID, p.결제금액
FROM customers c
RIGHT JOIN payments p
ON c.고객ID = p.고객ID;