개요
MySQL에서는 하나의 쿼리만으로 길이가 서로 다른 부분 문자열을 추출하고, 그 결과를 하나로 합쳐서 표시할 수 있습니다. 이 작업에는 SUBSTR() 함수와 UNION ALL 연산자를 함께 활용합니다.
테이블 생성 및 데이터 준비
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable856(Title text);
Query OK, 0 rows affected (0.89 sec)
insert 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable856 values('Introduction to MySQL');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable856 values('Java in depth');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable856 values('C++ with Data Structure');
Query OK, 1 row affected (0.17 sec)select 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable856;
위 쿼리는 다음과 같은 출력을 생성합니다.
+-------------------------+
| Title |
+-------------------------+
| Introduction to MySQL |
| Java in depth |
| C++ with Data Structure |
+-------------------------+
3 rows in set (0.00 sec)
SUBSTR()과 UNION ALL을 활용한 쿼리 실행
다음은 길이가 다른 부분 문자열을 표시하고 UNION ALL을 사용하여 두 결과를 결합하는 쿼리입니다.
mysql> select substr(Title,1,12) from DemoTable856
UNION ALL
select substr(Title,1,4) from DemoTable856;
위 쿼리는 다음과 같은 출력을 생성합니다.
+--------------------+
| substr(Title,1,12) |
+--------------------+
| Introduction |
| Java in dept |
| C++ with Dat |
| Intr |
| Java |
| C++ |
+--------------------+
6 rows in set (0.03 sec)
결과 해석
첫 번째 SELECT 문은 각 제목에서 앞 12글자를 추출하고, 두 번째 SELECT 문은 앞 4글자를 추출합니다. UNION ALL은 중복을 제거하지 않은 채 두 결과 집합을 그대로 이어 붙이기 때문에 총 6개의 행(3개 + 3개)이 반환됩니다. 만약 중복된 값을 제거한 결과가 필요하다면 UNION ALL 대신 UNION을 사용하면 됩니다. 이처럼 SUBSTR()과 UNION ALL을 조합하면 단일 쿼리로 다양한 길이의 문자열 조각을 손쉽게 조회할 수 있습니다.