MySQL - Left Join: 초보자 가이드

안녕하세요, 데이터베이스 열정가 되고자 하는 여러분! 오늘 우리는 MySQL의 fascinatings한 세계로 뛰어들어 그 중 하나의 가장 유용한 기능인 Left Join을 탐구해보겠습니다. 프로그래밍 초보자라고 걱정하지 마세요 - 저는 여러분을 단계별로 안내해드릴 것입니다. 수업을 통해 수많은 학생들을 가르친 경험을 바탕으로 말입니다. 따뜻한 커피(또는 차, 당신의 취향에 따라)를 한 잔 마시고, 이 흥미로운 여정에 함께 동행해 주세요!

MySQL - Left Join

Left Join이란?

Left Joins의 구체적인 내용에 접근하기 전에 간단한 비유로 시작해보겠습니다. 파티를 계획하고 있다고 상상해보세요. 친구들의 이름이 적힌 한 개의 목록과 그들의 좋아하는 음료가 적힌 다른 한 개의 목록이 있습니다. Left Join은 이 두 개의 목록을 결합하여 친구 목록에 있는 모든 사람이 포함되도록 하지만, 그들의 좋아하는 음료를 모르는 사람들도 포함시킵니다.

MySQL 용어로는, Left Join은 두 개의 테이블을 관련된 열을 기준으로 결합하여 왼쪽 테이블(쿼리에서 처음 언급된 테이블)의 모든 레코드를 유지하고, 오른쪽 테이블의 일치하는 레코드를 가져옵니다. 오른쪽 테이블에 일치하는 레코드가 없다면, 결과는 해당 열에 NULL 값을 포함합니다.

이제 이를 실제로 어떻게 작동하는지 보겠습니다!

Left Join의 기본 문법

MySQL에서 Left Join의 일반 문법은 다음과 같습니다:

SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;

이 문법이 무서워 보일 수 있지만, 예제를 통해 단계별로 설명해드리겠습니다.

MySQL Left Join 실제 사용

이제 간단한 두 개의 테이블을 만들어 작업해보겠습니다: employeesdepartments.

CREATE TABLE employees (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50),
dept_id INT
);

CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(50)
);

INSERT INTO employees VALUES
(1, 'Alice', 1),
(2, 'Bob', 2),
(3, 'Charlie', NULL),
(4, 'David', 3);

INSERT INTO departments VALUES
(1, 'HR'),
(2, 'IT'),
(4, 'Finance');

이제 이 두 개의 테이블을 Left Join으로 결합해보겠습니다:

SELECT e.emp_id, e.emp_name, d.dept_name
FROM employees e
LEFT JOIN departments d
ON e.dept_id = d.dept_id;

이 쿼리는 다음과 같은 결과를 생성합니다:

emp_id emp_name dept_name
1 Alice HR
2 Bob IT
3 Charlie NULL
4 David NULL

여기서 무엇이 일어나고 있는지 분해해보겠습니다:

  1. Alice와 Bob은 각자의 부서와 일치합니다.
  2. Charlie는 부서가 없습니다(employees 테이블의 dept_id가 NULL입니다), 그래서 dept_name은 NULL입니다.
  3. David의 dept_id는 3이지만, departments 테이블에 존재하지 않기 때문에 dept_name도 NULL입니다.
  4. 모든 직원이 포함됩니다, 부서가 일치하지 않은 사람들도 포함됩니다.

여러 테이블을 Left Join으로 결합

현실 세계의 상황에서는 종종 두 개 이상의 테이블을 결합해야 합니다. projects 테이블을 추가해보겠습니다:

CREATE TABLE projects (
project_id INT PRIMARY KEY,
project_name VARCHAR(50),
dept_id INT
);

INSERT INTO projects VALUES
(1, 'Website Redesign', 2),
(2, 'Employee Survey', 1),
(3, 'Cost Cutting', 4);

이제 세 개의 테이블을 모두 결합해보겠습니다:

SELECT e.emp_name, d.dept_name, p.project_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id
LEFT JOIN projects p ON d.dept_id = p.dept_id;

이 쿼리는 다음과 같은 결과를 줍니다:

emp_name dept_name project_name
Alice HR Employee Survey
Bob IT Website Redesign
Charlie NULL NULL
David NULL NULL

우리는 이전의 조인을 기반으로 하여 추가적인 정보를 더해갑니다. 이는 파티 계획에 비유하면, 친구들과 그들의 좋아하는 음료뿐만 아니라 좋아하는 게임도 알 수 있게 되는 것입니다!

Left Join과 WHERE 절

때로는 결과를 더욱 제한하고 싶을 수 있습니다. WHERE 절이 여기서 유용하게 사용됩니다. 예를 들어, 할당된 부서가 없는 모든 직원을 찾고 싶다면:

SELECT e.emp_id, e.emp_name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id
WHERE d.dept_id IS NULL;

이 쿼리는 다음과 같은 결과를 줍니다:

emp_id emp_name dept_name
3 Charlie NULL
4 David NULL

이 쿼리는 "친구 목록에 있는 사람 중 누가 좋아하는 음료가 기록되지 않았는가?"하는 질문과 같습니다.

클라이언트 프로그램을 사용한 Left Join

우리는 원시 SQL 쿼리를 살펴왔지만, 실제로는 클라이언트 프로그램을 사용하여 MySQL과 상호작용할 것입니다. mysql-connector 라이브러리를 사용한 Python 스크립트에서 Left Join을 사용하는 방법을 보겠습니다:

import mysql.connector

# 연결 설정
conn = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdbname"
)

cursor = conn.cursor()

# Left Join 실행
query = """
SELECT e.emp_name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id
"""

cursor.execute(query)

# 결과 가져오기 및 출력
for (emp_name, dept_name) in cursor:
print(f"Employee: {emp_name}, Department: {dept_name if dept_name else 'Not Assigned'}")

# 연결 닫기
cursor.close()
conn.close()

이 스크립트는 MySQL 데이터베이스에 연결하고, Left Join 쿼리를 실행한 후 결과를 친절한 형식으로 출력합니다. 이는 친구들과 그들의 좋아하는 음료를 매칭해주는 로봇 비서와 같은 것입니다!

결론

이제 여러분은 MySQL Left Joins의 세계를 여행한 경험을 가지게 되었습니다. 기본 개념에서 더 복잡한 상황까지 다루었습니다. Left Joins은 여러분의 SQL 도구箱에서 매우 강력한 도구입니다. 여러 테이블의 데이터를 결합하면서 주요 테이블의 레코드를 잃지 않도록 보장합니다.

MySQL을 계속 탐구하면서 Left Joins이 유용하게 사용될 많은 상황을 만나게 될 것입니다. Left Joins은 다양하고 유용하며, 처음에는 조금 어렵게 느껴질 수 있지만, 익숙해지면 매우 유용하게 활용할 수 있습니다.

계속 연습하고, 호기심을 유지하며, 다양한 쿼리를 실험해보세요. 얼마 지나지 않아 테이블 조인을 마스터하고, 친구들에게 데이터베이스 마법사로 인정받을 수 있을 것입니다!

Happy querying, 그리고 여러분의 조인이 항상 성공하길 바랍니다!

Credits: Image by storyset