MySQL - Distinct 절: 독특성의 힘을 밝혀내다

안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 MySQL의 세계로 여행을 떠나 특별한 기능인 DISTINCT 절을 탐구해보겠습니다. 프로그래밍에 처음이라면 걱정하지 마세요 - 저는 친절한 안내자가 되어 이 주제를 단계별로 설명해드리겠습니다. 그럼 좋아하는 음료를 한 잔 마시며 함께 빠져보겠습니다!

MySQL - Distinct Clause

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');

이제 배운 쿼리를 시도해보겠습니다:

  1. 모든 고유한 부서를 가져오기:

    SELECT DISTINCT department FROM employees;
  2. 고유한 프로젝트의 수를 계산하기:

    SELECT COUNT(DISTINCT project) FROM employees;
  3. 모든 고유한 부서-프로젝트 조합 가져오기:

    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