JOIN
- 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것
- 기본키와 외래키 관계로 맺어져야하고, 일대다 관계를 형성해야한다.
- song 테이블
- girl_group 테이블
INNER JOIN(내부 조인)
- 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인 조건>
[WHERE 검색 조건]
#INNER JOIN을 JOIN이라고만 써도 INNER JOIN으로 인식합니다.
SELECT gg._id, gg.name, s.title FROM girl_group AS gg
JOIN song AS s ON s._id = gg.hit_song_id; # ON은 WHERE을 대신 사용해도 된다.
- girl_group 테이블에 없는 데이터는 나오지 않는다.
- INNER JOIN 대신 JOIN을 사용해도 된다.
- ON 대신 WHERE도 사용가능하다.
- ON 뒤에는 두 테이블이 결합하는 조건문
OUTER JOIN(외부 조인)
- 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다.
- LEFT OUTER JOIN
- 왼쪽 테이블의 모든 값이 출력되는 조인
- RIGHT OUTER JOIN
- 오른쪽 테이블의 모든 값이 출력되는 조인
- FULL OUTER JOIN
- 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인 조건>
[WHERE 검색 조건]
SELECT s._id, s.title, gg.name FROM girl_group AS gg
RIGHT OUTER JOIN song AS s ON s._id = gg.hit_song_id;
- 일치 하지 않는 값을 가지고 있더라도 song 테이블 기준으로 합치는 조인을 사용하여 표시 할 수 있다.
SELECT gg._id, gg.name, s.title
FROM girl_group AS gg
LEFT JOIN song AS s
ON s._id = gg.hit_song_id;
- LEFT OUTER 대신 LEFT나 RIGHT만 입력해도 같은 기능을 수행한다.
- A LEFT JOIN B = B RIGHT JOIN A
- 같지 않음을 표현하는 연산자
- !=
- ^=
- <>
- NOT 컬럼명 =
- ~보다 크지 않다.
- NOT 컬럼명 >
SELECT s._id, s.title, gg.name FROM girl_group AS gg
JOIN song AS s ON s._id <> gg.hit_song_id;
- song테이블의 _id 와 girl_group테이블의 hit_song_id가 다른 경우를 모두 출력
- 각 걸그룹의 히트곡인 경우를 제외하고 모든 경우의 수 출
CROSS JOIN(상호 조인)
- 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능
- 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수
- 카티션 곱(CARTESIAN PRODUCT)라고도 한다.
SELECT *
FROM <첫 번째 테이블>
CROSS JOIN <두 번째 테이블>
SELECT s._id, s.title, gg.name
FROM girl_group AS gg
CROSS JOIN song AS s;
SELECT s._id, s.title, gg.name
FROM girl_group AS gg, song AS s;
- 두 쿼리 모두 같은 결과가 만들어 진다.
SELF JOIN(자체 조인)
- 자기 자신과 조인
- 1개의 테이블만 사용
SELECT <열 목록>
FROM <테이블> 별칭A
INNER JOIN <테이블> 별칭B
[WHERE 검색 조건]
- boss _id를 통해서 boss의 name을 나타내는 테이블
SELECT c.name AS child, p.name AS parent FROM chicken_gate AS p
JOIN chicken_gate AS c ON p._id = c.boss;
'개발 > Database' 카테고리의 다른 글
사용자 권한 주기 (GRANT) (0) | 2024.02.07 |
---|---|
유니온(UNION), 서브 쿼리 (0) | 2024.02.06 |
외래 키 설정하기, 1NF (테이블 쪼개기) (1) | 2024.02.04 |
정규화(Normalization) (0) | 2024.02.04 |
키(Primary Key, Foreign Key)의 종류와 함수적 종속 (0) | 2024.02.04 |