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

MySQL에서 특정 두 컬럼을 포함하는 모든 테이블 찾는 방법

MySQL에서 특정 두 컬럼을 포함하는 테이블 찾기

데이터베이스에 수십, 수백 개의 테이블이 존재할 때, 특정 컬럼 두 개를 동시에 가지고 있는 테이블만 골라내야 하는 경우가 종종 발생합니다. 이런 경우 MySQL의 information_schema.columns 뷰를 활용하면 손쉽게 해결할 수 있습니다.

information_schema.columns는 데이터베이스 내 모든 테이블의 컬럼 정보를 담고 있는 시스템 뷰입니다. 여기서는 예시로 첫 번째 컬럼 자리에 Id, 두 번째 컬럼 자리에 Name을 사용하겠습니다.

조회 쿼리 작성하기

아래 쿼리는 WHERE 절에서 찾고자 하는 컬럼 이름('Id', 'Name')을 지정하고, GROUP BY로 테이블별로 묶은 뒤, HAVING count(*) = 2 조건을 통해 두 컬럼을 모두 포함하는 테이블만 필터링합니다.

mysql> select table_name as TableNameFromWebDatabase
-> from information_schema.columns
-> where column_name IN ('Id', 'Name')
-> group by table_name
-> having count(*) = 2;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다. 아래 목록이 바로 'Id'와 'Name' 컬럼을 함께 가지고 있는 테이블들입니다.

+--------------------------+
| TableNameFromWebDatabase |
+--------------------------+
| student |
| distinctdemo |
| secondtable |
| groupconcatenatedemo |
| indemo |
| ifnulldemo |
| demotable211 |
| demotable212 |
| demotable223 |
| demotable233 |
| demotable251 |
| demotable255 |
+--------------------------+
12 rows in set (0.25 sec)

결과 검증하기

실제로 해당 테이블에 두 컬럼이 존재하는지 확인해 보겠습니다. DESC 명령어를 사용하면 테이블 구조를 간단히 살펴볼 수 있습니다.

mysql> desc demotable233;

아래 출력 결과에서 볼 수 있듯이, 해당 테이블에는 'Id'와 'Name' 컬럼이 실제로 존재합니다.

+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

이처럼 information_schema.columnsGROUP BY, HAVING 절을 조합하면 데이터베이스 전체를 일일이 뒤지지 않고도 원하는 컬럼 조합을 가진 테이블을 빠르게 찾아낼 수 있습니다.