MySQL - Distinct 절: 독특성의 힘을 밝혀내다
안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 MySQL의 세계로 여행을 떠나 특별한 기능인 DISTINCT 절을 탐구해보겠습니다. 프로그래밍에 처음이라면 걱정하지 마세요 - 저는 친절한 안내자가 되어 이 주제를 단계별로 설명해드리겠습니다. 그럼 좋아하는 음료를 한 잔 마시며 함께 빠져보겠습니다!
MySQL DISTINCT 절은 무엇인가요?
상상해봅시다. 파티에서 다양한 음료가 제공되고 있다고 치면, 각 개별 콜라 캔을 세는 것은 아니겠죠? "콜라"라는 이름을 한 번만 기록할 것입니다. MySQL에서 DISTINCT 절이 하는 일도 바로 그와 같습니다 - 데이터베이스 테이블에서 고유한 값을 식별하고检索합니다.
DISTINCT 절은 SELECT 문에서 중복된 행을 결과 집합에서 제거하는 데 사용됩니다. 마치 클럽의 VIP 경비원처럼, 동일한 손님 그룹에서 하나의 대표만 허용합니다.
간단한 예제를 보겠습니다:
SELECT DISTINCT column_name
FROM table_name;
이 쿼리는 지정된 열에서 모든 고유한 값을 반환합니다.
실제 세계의 예제
가정해봅시다. 다음과 같은 데이터를 가진 employees
테이블이 있습니다:
id | name | department |
---|---|---|
1 | Alice | Sales |
2 | Bob | Marketing |
3 | Carol | Sales |
4 | David | IT |
5 | Eve | Marketing |
우리 회사의 모든 다른 부서를 알고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT DISTINCT department
FROM employees;
이렇게 하면 다음과 같이 됩니다:
department |
---|
Sales |
Marketing |
IT |
중복을 깨끗하게 제거하는 것을 보셨죠? 이게DISTINCT의 마법입니다!
DISTINCT 절과 COUNT() 함수
이제DISTINCT와 또 다른 유용한 함수 COUNT()를 결합해보겠습니다. 이 동적인 듀오는 열에서 고유한 값의 수를 계산할 수 있게 해줍니다.
SELECT COUNT(DISTINCT column_name)
FROM table_name;
이전 예제를 사용하면, 우리 회사의 다양한 부서가 몇 개인지 알고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT COUNT(DISTINCT department)
FROM employees;
이렇게 하면 다음과 같이 됩니다:
COUNT(DISTINCT department) |
---|
3 |
"우리는 몇 가지 아이스크림 맛을 제공하나요?" 하는 것과는 달리, "우리는 몇 개의 아이스크림을 판매했나요?" 하는 질문과 같습니다.
여러 열에 대한 DISTINCT
이제 흥미로운 부분으로 넘어가겠습니다. DISTINCT는 여러 열에 대해 동시에 작동할 수 있습니다. 그것은 열의 조합을 단일 단위로 취급하여 고유한 값을 식별합니다.
SELECT DISTINCT column1, column2
FROM table_name;
employees
테이블을 확장해보겠습니다:
id | name | department | city |
---|---|---|---|
1 | Alice | Sales | New York |
2 | Bob | Marketing | Chicago |
3 | Carol | Sales | New York |
4 | David | IT | Boston |
5 | Eve | Marketing | Chicago |
6 | Frank | Sales | Boston |
모든 고유한 부서-도시 조합을 알고 싶다면 다음과 같이 사용할 수 있습니다:
SELECT DISTINCT department, city
FROM employees;
이렇게 하면 다음과 같이 됩니다:
department | city |
---|---|
Sales | New York |
Marketing | Chicago |
IT | Boston |
Sales | Boston |
"Sales"가 다른 도시에서 두 번 나타나는 것을 보세요.
NULL 값과 DISTINCT
여기 재미있는 사실이 있습니다: DISTINCT의 세계에서 NULL은 고유한 값으로 간주됩니다. 열에 여러 개의 NULL 값이 있더라도 DISTINCT는 하나의 NULL만 반환합니다.
employees
테이블을 수정해보겠습니다:
id | name | department | project |
---|---|---|---|
1 | Alice | Sales | Alpha |
2 | Bob | Marketing | NULL |
3 | Carol | Sales | Beta |
4 | David | IT | NULL |
5 | Eve | Marketing | Alpha |
다음을 실행하면:
SELECT DISTINCT project
FROM employees;
이렇게 됩니다:
project |
---|
Alpha |
NULL |
Beta |
테이블에 두 개의 NULL 값이 있었지만 하나의 NULL만 반환됩니다.
클라이언트 프로그램을 사용한 DISTINCT 절
이제 배운 지식을 실践에 바로 적용해보겠습니다. MySQL 클라이언트 프로그램을 사용하는 예제를 보겠습니다. 이 원칙은 모든 MySQL 클라이언트에 적용됩니다.
먼저 employees
테이블을 생성해보겠습니다:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
project VARCHAR(50)
);
INSERT INTO employees VALUES
(1, 'Alice', 'Sales', 'Alpha'),
(2, 'Bob', 'Marketing', NULL),
(3, 'Carol', 'Sales', 'Beta'),
(4, 'David', 'IT', NULL),
(5, 'Eve', 'Marketing', 'Alpha');
이제 배운 쿼리를 시도해보겠습니다:
-
모든 고유한 부서를 가져오기:
SELECT DISTINCT department FROM employees;
-
고유한 프로젝트의 수를 계산하기:
SELECT COUNT(DISTINCT project) FROM employees;
-
모든 고유한 부서-프로젝트 조합 가져오기:
SELECT DISTINCT department, project FROM employees;
이를 MySQL 클라이언트에서 시도해보세요, DISTINCT 절이 마법을 부릴 때를 지켜보세요!
결론
이제DISTINCT의 세계를 여행을 마치고 돌아왔습니다. 기본적인 사용에서 더 복잡한 응용까지 다양한 방법으로 DISTINCT 절을 배웠습니다. DISTINCT는 데이터를 정리하고, 중복을 제거하여 깨끗한 정보를 제공하는 유용한 도구입니다.
MySQL의 여정을 계속하면서 DISTINCT를 신뢰할 수 있는 도구로 사용할 것입니다. 대규모 데이터셋을 다루고 고유한 값을 빠르게 식별할 때 특히 유용합니다.
Keep practicing, stay curious, and before you know it, you'll be writing complex queries with the confidence of a seasoned database pro. Until next time, happy querying!
Credits: Image by storyset