MySQL에서 도메인 이름을 정렬하려면 ORDER BY 절과 함께 SUBSTRING_INDEX() 함수를 사용하면 됩니다. 이 함수를 활용하면 도메인의 최상위 도메인(.com 등)과 서브도메인(www 등)을 기준으로 원하는 순서대로 데이터를 정렬할 수 있습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable670(DomainName text);
Query OK, 0 rows affected (0.77 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 도메인 이름 데이터를 입력합니다.
mysql> insert into DemoTable670 values('www.facebook.com');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable670 values('www.google.com');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable670 values('www.amazon.com');
Query OK, 1 row affected (0.19 sec)3. 전체 데이터 조회하기
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable670;
실행 결과는 다음과 같습니다.
+------------------+
| DomainName |
+------------------+
| www.facebook.com |
| www.google.com |
| www.amazon.com |
+------------------+
3 rows in set (0.00 sec)
4. 도메인 이름 정렬 쿼리 실행하기
다음은 MySQL에서 도메인 이름을 정렬하는 쿼리입니다.
mysql> select *from DemoTable670 order by SUBSTRING_INDEX(DomainName, '.', -2),SUBSTRING_INDEX(DomainName, '.', 2);
실행 결과는 다음과 같습니다.
+------------------+
| DomainName |
+------------------+
| www.amazon.com |
| www.facebook.com |
| www.google.com |
+------------------+
3 rows in set (0.00 sec)
SUBSTRING_INDEX() 동작 원리
위 쿼리가 어떻게 작동하는지 살펴보겠습니다.
- SUBSTRING_INDEX(DomainName, '.', -2): 구분자 '.'를 기준으로 오른쪽에서 두 번째 부분까지 문자열을 추출합니다. 예를 들어 'www.facebook.com'에서 'facebook.com'을 반환하므로, 최상위 도메인 기준으로 정렬됩니다.
- SUBSTRING_INDEX(DomainName, '.', 2): 구분자 '.'를 기준으로 왼쪽에서 두 번째 부분까지 문자열을 추출합니다. 'www.facebook'처럼 서브도메인 부분을 반환하며, 첫 번째 조건이 같을 때 추가 정렬 기준으로 사용됩니다.
이처럼 두 조건을 조합하면 도메인 확장자(.com, .net 등)를 우선으로 정렬한 뒤, 같은 확장자 내에서는 서브도메인 순으로 정렬할 수 있어 대량의 도메인 데이터를 관리할 때 매우 유용합니다.