Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 동일한 데이터가 여러 레코드에 걸쳐 있는 행 선택하기 – JOIN 활용법

MySQL JOIN을 사용하면 특정 열에 동일한 데이터가 두 개 이상의 레코드에 존재하는 행을 손쉽게 조회할 수 있습니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
(
   UserId int,
   UserName varchar(20)
);
Query OK, 0 rows affected (0.54 sec)

2단계: 레코드 삽입

insert 명령어를 사용해 테이블에 레코드를 삽입합니다.

mysql> insert into DemoTable values(10,'John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(11,'Sam');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values(12,'Larry');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(13,'David');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(14,'Larry');
Query OK, 1 row affected (0.10 sec)

3단계: 테이블 데이터 확인

select 명령어로 테이블의 전체 레코드를 확인합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+--------+----------+
| UserId | UserName |
+--------+----------+
| 10     | John     |
| 11     | Sam      |
| 12     | Larry    |
| 13     | David    |
| 14     | Larry    |
+--------+----------+
5 rows in set (0.00 sec)

위 결과에서 'Larry'라는 이름이 UserId 12와 14, 즉 두 개의 레코드에 중복되어 있는 것을 확인할 수 있습니다.

4단계: 중복 데이터가 있는 행 조회

다음은 특정 열에 동일한 데이터가 두 개 이상의 레코드에 존재하는 행을 선택하는 쿼리입니다.

mysql> SELECT DISTINCT tbl1.*
FROM DemoTable tbl1
JOIN DemoTable tbl2
on tbl2.UserId <> tbl1.UserId
AND tbl2.UserName=tbl1.UserName;

실행 결과는 다음과 같습니다.

+--------+----------+
| UserId | UserName |
+--------+----------+
| 14     | Larry    |
| 12     | Larry    |
+--------+----------+
2 rows in set (0.14 sec)

쿼리 동작 원리

이 쿼리는 같은 테이블(DemoTable)을 tbl1tbl2라는 두 개의 별칭으로 조인하는 셀프 조인(Self Join) 기법을 사용합니다. 조인 조건은 다음 두 가지입니다.

  • tbl2.UserId <> tbl1.UserId : 자기 자신을 제외한 서로 다른 레코드끼리만 비교합니다.
  • tbl2.UserName = tbl1.UserName : UserName 값이 동일한 경우에만 매칭합니다.

마지막으로 DISTINCT를 사용해 중복된 결과 행을 제거함으로써, 동일한 이름을 가진 모든 레코드를 깔끔하게 출력할 수 있습니다. 이 방식은 이메일, 사용자명 등 고유해야 하는 값의 중복 여부를 점검할 때도 유용하게 활용됩니다.