티스토리 뷰
# 조인
관계형 데이터베이스는 "조인" 으로 테이블간 관계를 맺는다
- 1개 이상의 테이블에서 원하는 데이터를 조회하기 위해서 사용한다.
- 조인을 하기 위해서는 두 테이블간 연결고리를 할 컬럼이 존재해야 한다
- 일반적으로는 연결고리가 되는 컬럼은 두 테이블간 이름과 데이터 타입을 일치시킨다
# 내부 조인 (Inner Join)
순번 | 이름 | 주소 | 성별 |
1 | AAA | 서울 | 남 |
2 | BBB | 부산 | 남 |
3 | CCC | 서울 | 여 |
4 | DDD | 대구 | 남 |
5 | EEE | 대전 | 여 |
주소 | 비용 | 시간 |
서울 | 1000 | 1일 |
부산 | 2000 | 1일 |
제주 | 5000 | 2일 |
테이블 1과 테이블 2를 Inner Join한다고 하면
SELECT a.순번, a.이름, a.주소, a.성별,
b.주소, b.비용, b.시간
FROM table1 a, table2 b
WHERE a.주소 = b.주소
ORDER BY b.비용;
다음과 같이 결과가 나온다.
WHERE절의 조건을 만족하는 행만을 뽑아 출력한 것을 알 수 있다!
추가로 여기서 조건을 더하고 싶다면
SELECT a.순번, a.이름, a.주소, a.성별,
b.주소, b.비용, b.시간
FROM table1 a, table2 b
WHERE a.주소 = b.주소
AND a.성별 = '남'
ORDER BY b.비용;
WHERE 절 뒤에 AND 조건문으로 조건을 붙여주면 된다.
이러한 동등 연산자를 사용하는 방식 말고 ANSI 구문 방식이라는게 있다.
SELECT a.순번, a.이름, a.주소, a.성별,
b.비용, b.시간
FROM table1 a
INNER JOIN table2 b
ON a.주소 = b.주소
WHERE a.성별 = '남'
ORDER BY b.비용;
결과는 위랑 똑같으며,
"SELECT ~ FROM table1 a INNER JOIN table2 b ON [조건] WHERE ~ "
로 사용한다.
- 내부 조인은 두개 이상의 테이블도 계속 연결할 수 있다
(FROM ~ 과 WHERE절 사이에 INNER JOIN - ON - 문을 계속 붙여주면 된다)
# 외부 조인 (Outer Join)
1. LEFT OUTER JOIN
SELECT a.순번, a.이름, a.주소, a.성별,
b.비용, b.시간
FROM table1 a
LEFT JOIN table2 b
ON a.주소 = b.주소
ORDER BY b.비용;
- 왼쪽 테이블에 붙는다 / 테이블 2에 자료가 없으면 null로 처리
2. RIGHT OUTER JOIN
SELECT a.순번, a.이름, a.성별, a.주소,
b.주소, b.비용, b.시간
FROM table1 a
RIGHT JOIN table2 b
ON a.주소 = b.주소
ORDER BY b.비용;
- 오른쪽 테이블에 붙는다 / 테이블 1에 자료가 없으면 null로 처리
3. FULL OUTER JOIN
SELECT a.순번, a.이름, a.성별, a.주소,
b.주소, b.비용, b.시간
FROM table1 a
FULL OUTER JOIN table2 b
ON a.주소 = b.주소
ORDER BY b.비용;
- 모든 자료를 가져오는데 각 테이블에 없는 자료가 있으면 null로 처리
* 조인 조건이 주어지지 않으면 가능한 모든 조합에 대한 데이터를 출력한다
(이를 "카티션 곱" 이라고 함)
SELECT a.순번, a.이름, a.주소, a.성별,
b.주소, b.비용, b.시간
FROM table1 a, table2 b
--WHERE a.주소 = b.주소
--AND a.성별 = '남'
ORDER BY b.비용;
- 딱히 쓸 일은 없음
- 원하는 결과만 뽑아서 보고싶다면 조인 조건을 반드시 붙여줘야함!!
'SQL' 카테고리의 다른 글
MySQL 시작하기 (0) | 2022.03.15 |
---|---|
SQL 뽀개기 - 10 | 마무리 실습 (0) | 2021.08.23 |
SQL 뽀개기 - 8 | 서브쿼리 (0) | 2021.07.30 |
SQL 뽀개기 - 7 | 모델링 (0) | 2021.07.29 |
SQL 뽀개기 - 6 | 제약조건 (0) | 2021.07.24 |