SQL、MySQL、SQL Serverでテーブル内の列を一覧表示する方法
SQL、MySQL、SQL Serverでテーブル内のすべての列を一覧表示するには、いくつかの方法があります。ここでは、それぞれのデータベースでよく使用される方法を説明します。
共通事項
どの方法を使用する場合でも、以下の点に注意する必要があります。
- 大文字と小文字は区別されます。
- テーブル名が存在する必要があります。
- 権限を持っている必要があります。
方法
DESCRIBEコマンド
SQL
DESCRIBE table_name;
MySQL
DESCRIBE table_name;
SQL Server
DESCRIBE table_name;
例
DESCRIBE customers;
出力例
+-----------------+--------------------------+------+--------+---------------------------------------------------+
| Field | Type | Null | Key | Default |
+-----------------+--------------------------+------+--------+---------------------------------------------------+
| customer_id | int(11) | NO | PRI | NULL |
| first_name | varchar(50) | YES | | NULL |
| last_name | varchar(50) | YES | | NULL |
| email | varchar(100) | YES | | NULL |
| phone_number | varchar(20) | YES | | NULL |
| created_at | datetime | NO | | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
| updated_at | datetime | NO | | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
+-----------------+--------------------------+------+--------+---------------------------------------------------+
INFORMATION_SCHEMA テーブルの使用
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_name';
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_name';
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_name';
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'customers';
customer_id
first_name
last_name
email
phone_number
created_at
updated_at
SHOW COLUMNSコマンド
SHOW COLUMNS FROM table_name;
SHOW COLUMNS FROM customers;
Field Type Null Default Extra
customer_id int(11) NO auto_increment
first_name varchar(50) YES
last_name varchar(50) YES
email varchar(100) YES
phone_number varchar(20) YES
created_at datetime NO CURRENT_TIMESTAMP
updated_at datetime NO CURRENT_TIMESTAMP
mysqlshowコマンド
mysqlshow database_name table_name;
mysqlshow test customers;
+-----------------+---------+
| Field | Type |
+-----------------+---------+
| customer_id | int(11) |
| first_name | varchar(50) |
| last_name | varchar(50) |
| email | varchar(100) |
| phone_number | varchar(20) |
| created_at | datetime |
| updated_at | datetime |
+-----------------+---------+
補足
- 上記以外にも、各データベースで独自の方法を提供している場合があります。
- 列の詳細な情報(データ型、デフォルト値、制約など)を取得したい場合は、DESCRIBEコマンドやINFORMATION_SCHEMAテーブルを使用するのがおすすめです。
- シンプルに列名を一覧表示したい場合は、SHOW COLUMNSコマンドやmysqlshowコマンドを使用するのが便利です。
DESCRIBE customers;
+-----------------+--------------------------+------+--------+---------------------------------------------------+
| Field | Type | Null | Key | Default |
+-----------------+--------------------------+------+--------+---------------------------------------------------+
| customer_id | int(11) | NO | PRI | NULL |
| first_name | varchar(50) | YES | | NULL |
| last_name | varchar(50) | YES | | NULL |
| email | varchar(100) | YES | | NULL |
| phone_number | varchar(20) | YES | | NULL |
| created_at | datetime | NO | | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
| updated_at | datetime | NO | | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
+-----------------+--------------------------+------+--------+---------------------------------------------------+
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'customers';
customer_id
first_name
last_name
email
phone_number
created_at
updated_at
SHOW COLUMNS FROM customers;
Field Type Null Default Extra
customer_id int(11) NO auto_increment
first_name varchar(50) YES
last_name varchar(50) YES
email varchar(100) YES
phone_number varchar(20) YES
created_at datetime NO CURRENT_TIMESTAMP
updated_at datetime NO CURRENT_TIMESTAMP
mysqlshow test customers;
+-----------------+---------+
| Field | Type |
+-----------------+---------+
| customer_id | int(11) |
| first_name | varchar(50) |
| last_name | varchar(50) |
| email | varchar(100) |
| phone_number | varchar(20) |
| created_at | datetime |
| updated_at | datetime |
+-----------------+---------+
説明
上記のコードは、いずれも customers
という名前のテーブル内のすべての列を一覧表示します。
DESCRIBE
コマンドは、列名だけでなく、データ型、デフォルト値、制約などの情報も取得できます。INFORMATION_SCHEMA
テーブルは、データベース内のすべてのテーブルと列に関する情報を取得できます。SHOW COLUMNS
コマンドは、列名とデータ型のみを取得できます。mysqlshow
コマンドは、テーブルの構造とデータの一部を取得できます。
- 上記のコードは、あくまでも例です。使用するデータベースやテーブル名に合わせて変更する必要があります。
- 列名を区別したい場合は、
COLUMN_NAME
の代わりに*
を使用できます。
SQL、MySQL、SQL Serverでテーブル内のすべての列を一覧表示するその他の方法
FOR XML PATH 句を使用する
SELECT *
FOR XML PATH('Columns')
FROM customers;
<Columns>
<Column Name="customer_id" Type="int" />
<Column Name="first_name" Type="varchar(50)" />
<Column Name="last_name" Type="varchar(50)" />
<Column Name="email" Type="varchar(100)" />
<Column Name="phone_number" Type="varchar(20)" />
<Column Name="created_at" Type="datetime" />
<Column Name="updated_at" Type="datetime" />
</Columns>
OPENQUERY 関数を使用する
SELECT *
FROM OPENQUERY('AdventureWorks2019', 'SELECT * FROM Production.Customers FOR XML PATH(''Columns'')');
<Columns>
<Column Name="CustomerID" Type="int" />
<Column Name="FirstName" Type="nvarchar(50)" />
<Column Name="LastName" Type="nvarchar(50)" />
<Column Name="Email" Type="nvarchar(50)" />
<Column Name="Phone" Type="nvarchar(20)" />
<Column Name="ModifiedDate" Type="datetime" />
<Column Name="CreateDate" Type="datetime" />
</Columns>
動的SQLを使用する
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'
SELECT c.name
FROM sys.columns c
WHERE c.object_id = OBJECT_ID(''dbo.customers'')
';
EXEC sp_executesql @sql;
customer_id
first_name
last_name
email
phone_number
created_at
updated_at
上記の方法は、いずれもSQL Serverでのみ使用できます。
FOR XML PATH
句は、XML形式で列情報を取得します。OPENQUERY
関数は、別のデータベースにあるテーブルに対してクエリを実行できます。- 動的SQLは、クエリ文字列を動的に生成することができます。
- 列名を区別したい場合は、XML または動的SQLで適切な処理を行う必要があります。
これらの方法は、より高度な方法ですが、状況によっては役立つ場合があります。
sql mysql sql-server