데이터베이스에서 중복 데이터를 필터링하는 방법은 다양하지만, JOIN을 활용하면 효과적으로 중복 데이터를 제거할 수 있습니다. 이번 포스트에서는 JOIN을 사용하여 중복 데이터를 필터링하는 방법에 대해 알아보겠습니다.
1. 중복 데이터 확인하기
먼저, 중복 데이터를 확인하기 위해 데이터베이스의 원본 테이블을 살펴봅니다. 아래는 예시로 사용할 테이블의 구조입니다.
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
INSERT INTO users (id, name, email) VALUES
(1, 'John Doe', 'john.doe@example.com'),
(2, 'Jane Doe', 'jane.doe@example.com'),
(3, 'John Smith', 'john.smith@example.com'),
(4, 'Jane Smith', 'jane.smith@example.com'),
(5, 'John Doe', 'john.doe@example.com'); -- 중복 데이터
위의 예시에서는 users
테이블에 중복된 name
과 email
정보를 갖는 데이터가 한 건 포함되어 있습니다.
2. JOIN을 사용한 중복 데이터 필터링
중복 데이터를 필터링하기 위해선 원본 테이블과 중복된 데이터를 비교할 테이블을 JOIN하여 일치하는 값을 필터링할 수 있습니다.
다음은 중복 데이터를 필터링하는 SQL 쿼리입니다.
SELECT DISTINCT u.id, u.name, u.email
FROM users u
JOIN (
SELECT name, email
FROM users
GROUP BY name, email
HAVING COUNT(*) > 1
) d ON u.name = d.name AND u.email = d.email;
위의 쿼리에서는 users
테이블을 u
로 테이블 별칭을 지정하고, 중복된 name
과 email
을 가지는 데이터를 필터링하기 위해 users
테이블을 name
과 email
로 그룹화한 서브쿼리를 d
로 테이블 별칭을 지정합니다. 그리고, u.name
과 d.name
, 그리고 u.email
과 d.email
이 일치하는 값을 선택합니다.
3. 결과 확인하기
위의 SQL 쿼리를 실행하면 중복된 데이터가 필터링된 결과를 얻을 수 있습니다. 아래는 위 예시의 결과입니다.
+----+-----------+-----------------------+
| id | name | email |
+----+-----------+-----------------------+
| 1 | John Doe | john.doe@example.com |
| 2 | Jane Doe | jane.doe@example.com |
+----+-----------+-----------------------+
중복된 데이터인 John Doe는 한 건만 선택되어 결과에 포함되었습니다.
마무리
JOIN을 사용하여 중복 데이터를 필터링할 수 있습니다. 이를 통해 데이터베이스의 데이터를 정리하고 중복을 방지할 수 있습니다. JOIN 쿼리에 익숙해지고 효과적으로 중복 데이터를 제거하여 데이터의 일관성과 정확성을 유지하는 것이 중요합니다.