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를 조합하면 수많은 테이블이 있는 환경에서도 원하는 패턴의 테이블을 손쉽게 찾아낼 수 있습니다.