SQLite - JOINS: 마스터링 더 아트 오브 콤바이닝 테이블

안녕하세요, 미래의 데이터베이스 마에스트로们! 오늘 우리는 SQLite의 가장 흥미롭고(때로는 무서운) 측면 중 하나에 빠져들어가 볼 것입니다: JOINS. 초보자이시라도 걱정 마세요; 이 튜토리얼이 끝나면 프로처럼 테이블을 조인할 수 있을 것입니다!

SQLite - JOINS

JOINS 소개

深淵으로 뛰어들기 전에, 우리가 JOINS이 필요한 이유에 대해 이야기해 보겠습니다. 대규모 생일 파티를 준비하는 상상해 봅시다(누구나 좋은 파티를 좋아하지 않나요?). 손님 이름 목록과 그들의 좋아하는 케이크 맛 목록이 각각 하나씩 있습니다. 모두가 좋아하는 케이크를 먹을 수 있도록 두 목록을 결합할 수 있다면 얼마나 좋을까요? 데이터베이스에서 JOINS은 exactamente 이렇게 작동합니다 - 다른 테이블의 정보를 의미 있는 방식으로 결합하는 데 도움을 줍니다.

이제 SQLite에서 사용할 수 있는 세 가지 주요 JOINS 유형을 탐구해 보겠습니다:

  1. CROSS JOIN
  2. INNER JOIN
  3. 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이 있습니다:

  1. LEFT OUTER JOIN
  2. RIGHT OUTER JOIN (SQLite에서는 지원되지 않음)
  3. 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