MySQL에서 SHOW COLUMNS 명령의 결과는 직접 서브쿼리나 조인에 사용할 수 없습니다. 대신 INFORMATION_SCHEMA.COLUMNS 뷰를 활용하면 동일한 컬럼 정보를 일반 테이블처럼 다룰 수 있습니다. 이 방법을 사용하면 WHERE 절로 원하는 컬럼만 필터링하거나 다른 테이블과 조인하는 등 훨씬 유연한 작업이 가능합니다.
기본 문법
SELECT * FROM (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'yourTableName'
) anyAliasName;
서브쿼리 결과에는 반드시 별칭(alias)을 붙여야 한다는 점에 유의하세요.
예제 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> CREATE TABLE DemoTable
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName varchar(20),
StudentLastName varchar(20),
StudentAge int
);
Query OK, 0 rows affected (1.51 sec)
컬럼 정보를 데이터 소스로 조회하기
다음 쿼리는 SHOW COLUMNS와 동일한 정보를 유효한 데이터 소스 형태로 가져옵니다.
mysql> SELECT * FROM (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'DemoTable'
) tbl;
실행 결과
위 쿼리를 실행하면 DemoTable의 네 개 컬럼에 대한 상세 메타데이터가 반환됩니다. 주요 항목만 정리하면 다음과 같습니다.
| COLUMN_NAME | ORDINAL_POSITION | IS_NULLABLE | DATA_TYPE | COLUMN_TYPE | COLUMN_KEY | EXTRA |
|---|---|---|---|---|---|---|
| StudentId | 1 | NO | int | int(11) | PRI | auto_increment |
| StudentFirstName | 2 | YES | varchar | varchar(20) | - | - |
| StudentLastName | 3 | YES | varchar | varchar(20) | - | - |
| StudentAge | 4 | YES | int | int(11) | - | - |
전체 결과에는 이 외에도 TABLE_CATALOG, TABLE_SCHEMA, COLUMN_DEFAULT, CHARACTER_MAXIMUM_LENGTH, COLLATION_NAME, PRIVILEGES 등 다양한 스키마 정보가 포함됩니다.
활용 팁: 필요한 컬럼만 조회하기
모든 정보가 필요 없다면 SELECT 절에서 원하는 항목만 골라 조회하는 것이 좋습니다.
mysql> SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'DemoTable';
이렇게 하면 SHOW COLUMNS보다 간결하고 가독성 높은 결과를 얻을 수 있으며, 애플리케이션에서 동적으로 스키마 정보를 처리해야 할 때 특히 유용합니다.