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

MySQL LIKE 연산자로 특정 테이블 이름 조회하는 방법

MySQL에서 데이터베이스에 존재하는 테이블 중 특정 패턴과 일치하는 테이블 이름만 조회하고 싶다면 LIKE 연산자information_schema.tables 뷰를 함께 활용하면 됩니다. information_schema는 MySQL 서버의 메타데이터(테이블, 컬럼, 인덱스 등) 정보를 담고 있는 시스템 스키마로, 이를 조회하면 SHOW TABLES보다 더 유연한 조건 검색이 가능합니다.

기본 문법

LIKE 연산자를 사용해 특정 테이블 이름을 표시하는 기본 문법은 다음과 같습니다.

SELECT table_name AS `별칭`
FROM information_schema.tables
WHERE table_name LIKE '검색할값%';

여기서 %는 와일드카드 문자로, 임의의 문자열(0개 이상의 문자)에 해당합니다. 예를 들어 'DemoTable160_%'는 'DemoTable160'으로 시작하되 그 뒤에 어떤 문자가 하나 이상 붙는 모든 테이블 이름과 일치합니다.

실제 적용 예제

위 문법을 실제로 적용해 'DemoTable160'으로 시작하는 테이블 이름들을 조회해 보겠습니다.

mysql> SELECT table_name AS `DemoTable1600`
    -> FROM information_schema.tables
    -> WHERE table_name LIKE 'DemoTable160_%';

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+---------------+
| DemoTable1600 |
+---------------+
| demotable1600 |
| demotable1601 |
| demotable1602 |
| demotable1603 |
| demotable1604 |
| demotable1605 |
| demotable1606 |
| demotable1607 |
+---------------+
8 rows in set (0.01 sec)

결과 해설

출력 결과를 보면 'demotable160'으로 시작하는 총 8개의 테이블(demotable1600 ~ demotable1607)이 조회된 것을 확인할 수 있습니다. 별칭(Alias)을 지정했기 때문에 결과 컬럼의 헤더가 원래의 table_name 대신 지정한 별칭으로 표시됩니다.

참고 사항

  • information_schema.tables에는 현재 MySQL 서버의 모든 데이터베이스 테이블이 포함되어 있으므로, 특정 데이터베이스로 범위를 좁히려면 WHERE table_schema = '데이터베이스명' 조건을 추가하는 것이 좋습니다.
  • LIKE 연산자는 대소문자 구분 설정(collation)에 따라 동작이 달라질 수 있습니다. 기본 설정에서는 대소문자를 구분하지 않는 경우가 많습니다.
  • 테이블 이름의 중간 부분을 검색하려면 %테이블명%처럼 앞뒤에 와일드카드를 배치하면 됩니다.

이처럼 LIKE 연산자와 information_schema를 조합하면 수많은 테이블이 있는 환경에서도 원하는 패턴의 테이블을 손쉽게 찾아낼 수 있습니다.