MySQL で指定したカラム名を持つテーブルを検索する

既存のデータベースに対して、カラム名を指定してテーブルを検索したいような時ありませんか?

ここでは、MySQL で指定したカラム名を持つテーブルを検索する方法をご説明します。


指定したカラム名を持つテーブルを検索する

MySQL で指定したカラム名を持つテーブルを検索するは INFORMATION_SCHEMA.COLUMNS テーブルが使えます。

INFORMATION_SCHEMA テーブルは MySQL サーバのデータベース、テーブル、カラムなどの情報が参照できるテーブルです。


INFORMATION_SCHEMA.COLUMNS テーブルを使って、カラム名を指定してテーブルを検索するクエリーは次の通りです。

SELECT 	TABLE_NAME,
		COLUMN_NAME
FROM 	INFORMATION_SCHEMA.COLUMNS 
WHERE 	TABLE_SCHEMA = 'データベース名'
		AND COLUMN_NAME = 'カラム名'
ORDER BY TABLE_NAME,
		 COLUMN_NAME;

例えば、school_db という名前のデータベースの student_id というカラムを持つテーブルを検索したい時は次のようにできます。

SELECT 	TABLE_NAME,
		COLUMN_NAME
FROM 	INFORMATION_SCHEMA.COLUMNS 
WHERE 	TABLE_SCHEMA = 'school_db'
		AND COLUMN_NAME = 'student_id'
ORDER BY TABLE_NAME,
		 COLUMN_NAME;

[実行結果]

MySQL で指定したカラム名を持つテーブルを検索する 1

school_db データベースの exam_results テーブルと students テーブルに student_id カラムがありました。


もちろん LIKE を使って、以下のようにカラム名の一部を指定して検索することも可能です。

SELECT 	TABLE_NAME,
		COLUMN_NAME
FROM 	INFORMATION_SCHEMA.COLUMNS 
WHERE 	TABLE_SCHEMA = 'データベース名'
		AND COLUMN_NAME LIKE '%カラム名の一部%'
ORDER BY TABLE_NAME,
		 COLUMN_NAME;

例えば、school_db データベースに name が含まれるカラム名を持つテーブルを検索したい時は次のようにできます。

SELECT 	TABLE_NAME,
		COLUMN_NAME
FROM 	INFORMATION_SCHEMA.COLUMNS 
WHERE 	TABLE_SCHEMA = 'school_db'
		AND COLUMN_NAME LIKE '%name%'
ORDER BY TABLE_NAME,
		 COLUMN_NAME;

[実行結果]

MySQL で指定したカラム名を持つテーブルを検索する 2

school_db データベースの name が含まれるカラム名を持つテーブルが取得できています。


テーブル名だけが取得したい場合は以下のように SELECT DISTINCT TABLE_NAME とすることで取得できます。

SELECT 	DISTINCT TABLE_NAME
FROM 	INFORMATION_SCHEMA.COLUMNS 
WHERE 	TABLE_SCHEMA = 'school_db'
		AND COLUMN_NAME LIKE '%name%'
ORDER BY TABLE_NAME;

[実行結果]

MySQL で指定したカラム名を持つテーブルを検索する 3


以上、MySQL で指定したカラム名を持つテーブルを検索する方法をご説明しました。

© 2024 MySQL 入門