SQL、MySQL、SQL Serverでテーブル内の列を一覧表示する方法

2024-04-09

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


VistaDB の使用方法:サンプルコード、Visual Studio データツール、Entity Framework、LINQ

軽量で高速VistaDB は非常に軽量なデータベースエンジンであり、フットプリントが小さいため、メモリとディスク容量の少ないデバイスに最適です。また、非常に高速なパフォーマンスを提供し、多くの場合、他のデータベースよりも高速にクエリを実行できます。...


MySQL Workbenchを使用してMySQLデータベースのすべてのテーブルのレコード数を取得する方法

このチュートリアルでは、MySQLデータベースのすべてのテーブルのレコード数を取得する方法について解説します。方法コマンドラインツールを使用する 以下のコマンドを実行することで、すべてのテーブルのレコード数を取得できます。 SELECT TABLE_NAME...


Sequelize を使った Node.js での結合クエリの実行方法 - サンプルコード集

このチュートリアルでは、Sequelize を使用して Node. js で結合クエリを実行する方法を説明します。 以下のトピックを扱います。基本的な結合構文INNER JOIN、LEFT JOIN、RIGHT JOIN、および FULL OUTER JOIN...


PostgreSQLで空またはNULL値を確実にチェックして、データの信頼性を向上させる!

IS NULL演算子最も簡単な方法は、IS NULL演算子を使用することです。このクエリは、列名がNULL値であるすべてのレコードを返します。COALESCE関数は、NULL値を指定されたデフォルト値に置き換えるために使用できます。このクエリは、列名がNULL値の場合はデフォルト値を、そうでなければ列名の値を返します。...


データベース操作のレベルアップ!SQL、MySQL、MariaDBで既存の行から月の日付を自在に選択

このチュートリアルでは、SQL、MySQL、MariaDBを使用して、既存の表から特定の月のすべての日付を選択する方法について説明します。 具体的には、以下の内容を解説します。必要なライブラリと設定基本的なクエリの構文月の最初と最後の日付を取得する...


SQL SQL SQL SQL Amazon で見る



SQLクエリ、ツール、ビュー... あなたに合った方法でOracleデータベースの列名を抽出!

Oracleデータベースのテーブルから列名を取得するには、いくつかの方法があります。ここでは、最も一般的な方法であるSQLクエリと、Oracle SQL Developerを使用した方法を紹介します。SQLクエリを使用して列名を取得するには、ALL_TAB_COLUMNSビューを使用します。このビューには、すべてのユーザーがアクセスできるすべてのテーブルの列に関する情報が含まれています。


SQLクエリとDESCRIBEコマンドを使いこなせ!Oracle列名フェッチの教科書

方法1:ALL_TAB_COLUMNSビューを使用するALL_TAB_COLUMNSビューは、すべてのユーザー表の列に関する情報を格納するOracleのビューです。このビューを使用して、特定の表の列名をフェッチするには、次のクエリを使用します。