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

단일 MySQL 쿼리로 길이가 다른 부분 문자열을 표시하고 UNION ALL로 결과 결합하기

개요

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을 조합하면 단일 쿼리로 다양한 길이의 문자열 조각을 손쉽게 조회할 수 있습니다.