SQLite - JOINS: 마스터링 더 아트 오브 콤바이닝 테이블
안녕하세요, 미래의 데이터베이스 마에스트로们! 오늘 우리는 SQLite의 가장 흥미롭고(때로는 무서운) 측면 중 하나에 빠져들어가 볼 것입니다: JOINS. 초보자이시라도 걱정 마세요; 이 튜토리얼이 끝나면 프로처럼 테이블을 조인할 수 있을 것입니다!
JOINS 소개
深淵으로 뛰어들기 전에, 우리가 JOINS이 필요한 이유에 대해 이야기해 보겠습니다. 대규모 생일 파티를 준비하는 상상해 봅시다(누구나 좋은 파티를 좋아하지 않나요?). 손님 이름 목록과 그들의 좋아하는 케이크 맛 목록이 각각 하나씩 있습니다. 모두가 좋아하는 케이크를 먹을 수 있도록 두 목록을 결합할 수 있다면 얼마나 좋을까요? 데이터베이스에서 JOINS은 exactamente 이렇게 작동합니다 - 다른 테이블의 정보를 의미 있는 방식으로 결합하는 데 도움을 줍니다.
이제 SQLite에서 사용할 수 있는 세 가지 주요 JOINS 유형을 탐구해 보겠습니다:
- CROSS JOIN
- INNER JOIN
- OUTER JOIN
CROSS JOIN: 파티 믹서
CROSS JOIN은 무엇인가요?
CROSS JOIN은 파티에서 모든 사람이 서로 어울리는 것과 같습니다. 하나의 테이블의 각 행을 다른 테이블의 모든 행과 결합합니다. 데이터베이스에서는 "여러분, 모두 서로 만나세요!"라고 말하는 것과 같습니다.
CROSS JOIN 문법
SELECT * FROM table1 CROSS JOIN table2;
CROSS JOIN 예제
우리의 파티 계획을 위해 두 개의 간단한 테이블을 만들어 보겠습니다:
CREATE TABLE guests (
guest_id INTEGER PRIMARY KEY,
guest_name TEXT
);
CREATE TABLE cakes (
cake_id INTEGER PRIMARY KEY,
cake_flavor TEXT
);
INSERT INTO guests (guest_name) VALUES ('Alice'), ('Bob'), ('Charlie');
INSERT INTO cakes (cake_flavor) VALUES ('Chocolate'), ('Vanilla'), ('Strawberry');
이제 CROSS JOIN을 사용해 보겠습니다:
SELECT guests.guest_name, cakes.cake_flavor
FROM guests CROSS JOIN cakes;
이 쿼리는 다음과 같은 결과를 생성합니다:
guest_name | cake_flavor |
---|---|
Alice | Chocolate |
Alice | Vanilla |
Alice | Strawberry |
Bob | Chocolate |
Bob | Vanilla |
Bob | Strawberry |
Charlie | Chocolate |
Charlie | Vanilla |
Charlie | Strawberry |
각 손님은 모든 케이크 맛과 결합됩니다. 마치 모든 사람이 모든 케이크를 맛보는 것처럼!
CROSS JOIN을 사용할 때
CROSS JOIN은 실제 사용 사례에서 거의 사용되지 않습니다. 왜냐하면 매우 큰 결과 집합을 생성할 수 있기 때문입니다. 하지만 조합이나 테스트 데이터 생성에 유용합니다.
INNER JOIN: 완벽한 매칭
INNER JOIN은 무엇인가요?
INNER JOIN은 같은 춤을 추는 춤搭档를 찾는 것과 같습니다. 두 테이블 간의 관련된 열을 기반으로 행을 결합합니다.
INNER JOIN 문법
SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;
INNER JOIN 예제
우리의 파티 계획 시나리오를 수정해 보겠습니다. 이제 손님과 그들의 케이크 선호도가 있습니다:
CREATE TABLE guests (
guest_id INTEGER PRIMARY KEY,
guest_name TEXT,
preferred_cake_id INTEGER
);
CREATE TABLE cakes (
cake_id INTEGER PRIMARY KEY,
cake_flavor TEXT
);
INSERT INTO guests (guest_name, preferred_cake_id) VALUES
('Alice', 1), ('Bob', 2), ('Charlie', 3), ('David', 1);
INSERT INTO cakes (cake_flavor) VALUES
('Chocolate'), ('Vanilla'), ('Strawberry');
이제 INNER JOIN을 사용해 손님과 그들의 선호 케이크를 매칭해 보겠습니다:
SELECT guests.guest_name, cakes.cake_flavor
FROM guests INNER JOIN cakes ON guests.preferred_cake_id = cakes.cake_id;
이 쿼리는 다음과 같은 결과를 생성합니다:
guest_name | cake_flavor |
---|---|
Alice | Chocolate |
Bob | Vanilla |
Charlie | Strawberry |
David | Chocolate |
완벽합니다! 각 손님은 선호하는 케이크 맛과 매칭됩니다.
INNER JOIN을 사용할 때
INNER JOIN은 가장 흔하게 사용되는 JOINS 유형입니다. 두 테이블에 일치하는 값을 가지는 데이터를 검색하고 싶을 때 사용합니다.
OUTER JOIN: 누구도 빠뜨리지 않기
OUTER JOIN은 무엇인가요?
OUTER JOIN은 파티에서 누구도 외롭지 않게 만드는 것과 같습니다. 하나 이상의 테이블에서 모든 행을 반환하며, 다른 테이블에서 일치하는 행이 없어도 됩니다.
다음과 같은 세 가지 종류의 OUTER JOIN이 있습니다:
- LEFT OUTER JOIN
- RIGHT OUTER JOIN (SQLite에서는 지원되지 않음)
- FULL OUTER JOIN (SQLite에서 직접 지원되지 않음)
우리는 SQLite에서 가장 흔히 사용되는 LEFT OUTER JOIN에 집중하겠습니다.
LEFT OUTER JOIN 문법
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.column = table2.column;
LEFT OUTER JOIN 예제
손님 중 케이크 선호도가 없는 사람을 추가해 보겠습니다:
INSERT INTO guests (guest_name, preferred_cake_id) VALUES ('Eve', NULL);
이제 LEFT OUTER JOIN을 사용해 보겠습니다:
SELECT guests.guest_name, cakes.cake_flavor
FROM guests LEFT OUTER JOIN cakes ON guests.preferred_cake_id = cakes.cake_id;
이 쿼리는 다음과 같은 결과를 생성합니다:
guest_name | cake_flavor |
---|---|
Alice | Chocolate |
Bob | Vanilla |
Charlie | Strawberry |
David | Chocolate |
Eve | NULL |
Eve는 선호하는 케이크가 없지만 결과에 포함됩니다. 이것이 LEFT OUTER JOIN의 마법입니다!
OUTER JOIN을 사용할 때
OUTER JOIN은 하나의 테이블에서 모든 레코드를 포함하고, 다른 테이블에서 일치하는 레코드가 있든 없든 상관없을 때 사용합니다.
결론
이제 SQLite JOINS의 fascinante 세계로 첫 걸음을 내딛었습니다. 연습이 완벽을 만들어 준다는 것을 기억하세요, 그러니 이 쿼리들을 실험해 보지 마세요!
여기 우리가 다루었던 JOIN 유형의 빠른 참고 표입니다:
JOIN 유형 | 사용 사례 |
---|---|
CROSS JOIN | 모든 행을 모든 다른 행과 결합 |
INNER JOIN | 조건을 기반으로 행 매칭 |
LEFT JOIN | 왼쪽 테이블의 모든 행을 포함, 가능한 경우 매칭 |
테이블을 계속 조인하고, 곧 데이터베이스 파티의 별이 되시겠습니다! 행복한 쿼리 작성을 기원합니다!
Credits: Image by storyset