MySQL 작업 중 특정 열(컬럼)이 포함된 테이블이 어떤 것들이 있는지 확인해야 할 때가 있습니다. 이럴 때 INFORMATION_SCHEMA.COLUMNS 뷰를 활용하면 간단하게 조회할 수 있습니다.
기본 조회 쿼리
다음 예시는 SAMPLE 데이터베이스에서 'email'이라는 열을 가진 테이블 목록을 조회하는 쿼리입니다.
mysql> SELECT DISTINCT TABLE_NAME
-> FROM INFORMATION_SCHEMA.COLUMNS
-> WHERE COLUMN_NAME IN('EMAIL')
-> AND TABLE_SCHEMA = 'SAMPLE';
+---------------+
| TABLE_NAME |
+---------------+
| employee |
| new_student |
+---------------+
2 rows in set (0.04 sec)
쿼리 구성 요소 살펴보기
- SELECT DISTINCT TABLE_NAME: 중복 없이 테이블 이름만 조회합니다.
- FROM INFORMATION_SCHEMA.COLUMNS: MySQL이 제공하는 메타데이터 뷰로, 모든 데이터베이스의 열 정보를 담고 있습니다.
- WHERE COLUMN_NAME IN('EMAIL'): 열 이름이 'EMAIL'인 행만 필터링합니다. 대소문자 구분은 서버 설정(collation)에 따라 달라질 수 있습니다.
- AND TABLE_SCHEMA = 'SAMPLE': 검색 범위를 SAMPLE 데이터베이스로 한정합니다. 이 조건이 없으면 서버의 모든 데이터베이스가 검색됩니다.
여러 개의 열로 검색하기
IN 절에 여러 열 이름을 나열하면 해당 열들 중 하나라도 포함하는 테이블을 한 번에 찾을 수 있습니다.
mysql> SELECT DISTINCT TABLE_NAME
-> FROM INFORMATION_SCHEMA.COLUMNS
-> WHERE COLUMN_NAME IN('EMAIL', 'PHONE')
-> AND TABLE_SCHEMA = 'SAMPLE';
이처럼 INFORMATION_SCHEMA를 활용하면 대규모 데이터베이스에서도 원하는 열을 가진 테이블을 빠르고 정확하게 찾을 수 있습니다.