テーブルのすべての列をリストするにはどうすればよいですか?


231

さまざまな一般的なデータベースシステムで、テーブル内のすべての列をどのようにリストしますか?


4
クローズされる質問を書くためのバッジがあるはずですが、100以上の賛成票を受け取ります:) OTOH、それは複数のデータベースについて尋ねるので、受け入れられた回答がないことは当然のことです。 。質疑応答がここにあることをうれしく思います。
ToolmakerSteve

回答:


255

MySQLの場合、次を使用します。

DESCRIBE name_of_table;

これは、SQL * PlusまたはOracleのSQL Developerを使用している限り、Oracleでも機能します。


16
このソリューションは、MSSQLではなくMYSQL用です
Hammad Khan

2
@dmviannaこれは必ずしもすべてのOracleに当てはまるとは限りませんが、SQL * Plusに当てはまります。
Tripp Kinetics 2014

DESCRIBE name_of_table`` である必要があります。
beahacker '21 / 09/21

sqliteの場合-使用:pragma table_info(table_name)ie sqlite> pragma table_info(column1);
GyRo 2018年

編集DESCRIBEは、Oracle PLSQL命令ではなくSQL * Plusコマンドであるため、ほとんどのSQL IDEでは機能しません。
walen

117

Oracle(PL / SQL)の場合

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

MySQLの場合

SHOW COLUMNS FROM table_name

4
おそらく、Oracleクエリをcolumn_idで並べ替えたいと思います
David Aldridge

6
Oracleの場合も有効ですDESCRIBE name_of_table
ピゲイラス2013年

<database_name>を使用します。'<column_prefix>%'のように<table_name>に列を表示します。指定されたプレフィックスで始まる列のみを一覧表示します。もちろん山かっこは省略します。
rstackhouse 2014

user_tab_colsクエリには何がありますか?
Jogi

@Jogi-Google "oracle user_tab_cols"-Oracle dbへの組み込み。
ToolmakerSteve

103

MS SQL Serverの場合:

select * from information_schema.columns where table_name = 'tableName'

9
ここで重要な列はCOLUMN_NAMEです。
Buggieboy 2013年

4
これは多くのDBMSで機能するはずです。information_schema.columnsシステムビューはANSI SQL標準の一部です (リンク)。
Bogdan Sahlean 2013

4
良い答えが、私が使用する回避の重複に:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
billynoah

これはSQL-92 ANSIに準拠しており、すべてのデータベースエンジンで動作するはずです。
Gareth Davidson

39

(5年後、PostgreSQLの栄誉のために、王国で最も先進的なDDBB)

PostgreSQLの場合:

\d table_name

または、SQLを使用します。

select column_name, data_type, character_maximum_length
    from INFORMATION_SCHEMA.COLUMNS 
    where table_name = 'table_name';

4
\ d table_nameである必要があります。\ dt table_nameは関係をリストします。
l85m

36

遅いのはわかっていますが、Oracleには次のコマンドを使用します。

select column_name,data_type,data_length from all_tab_columns where TABLE_NAME = 'xxxx' AND OWNER ='xxxxxxxxxx'


私はこれをOracleで試しましたが、うまくいきませんでした。column_nameが出力されましたが、他には何も出力されませんでした。SELECT CAST(COLUMN_NAME AS CHAR(40))を使用する必要がありました|| '' || DATA_TYPEを使用して適切なフォーマットを取得し、連結で複数の列を取得します。
Eamonnケニー

27

SQLサーバー

SELECT 
    c.name 
FROM
    sys.objects o
INNER JOIN
    sys.columns c
ON
    c.object_id = o.object_id
AND o.name = 'Table_Name'

または

SELECT 
    COLUMN_NAME 
FROM 
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    TABLE_NAME  = 'Table_Name'

第二の方法は、ANSI規格であり、したがって、必要がある上で動作するすべての ANSI準拠のデータベース。


これらはどちらも、MS SQL Server用に記述された(または少なくとも暗黙的には)動作しません。どちらの場合も、テーブル名の列に格納名のない任意の[ ]クエリはそれらを使用してはならないので、その周りに、唯一のプレーンなテーブル名。それがOPの意図ではなかった場合は、少なくともこれに注意してください。
JonBrave

1
@JonBrave-そうです、角かっこは「ここにテーブル名を挿入することを意味するためにありました:)
Russ Cam

角かっこなので、「テーブル名を角かっこ内に(予約語が含まれている可能性があるため)ここに挿入します」と読みましたが、一致しませんでした:)おそらくBNF <Table Name>があいまいさを回避しているはずです。とにかく、私がコメントを書いたときにあなたがそれを意図しているのかもしれないことに気づきました-万が一のために他の人に警告することは害にはなりません。
JonBrave

1
'[]'がなく、引用符 ''がテーブル名の前後に必要な場合にのみ、MSSQLで機能します。
XValidated


12

Microsoft SQL Server Management Studio 2008 R2:

クエリエディターで、テーブル名(dbo.MyTableなど)のテキストを強調表示してALT+を押すとF1、列名、タイプ、長さなどのリストが表示されます。

ALT+ F1ハイライトしている間dbo.MyTableは、このサイトに従って実行するのと同じですEXEC sp_help 'dbo.MyTable'

INFORMATION_SCHEMA.COLUMNSのクエリのバリエーションを機能させることができないため、代わりにこれを使用します。


1
SSMS 2012では機能しませんでした。ところで、SQL Server Management Studio 2008のことですか。
Hammad Khan 2013

1
はい、より正確には、Microsoft SQL Server Management Studio 2008 R2を意味しました。編集します。
レスリーセージ

4

SQLサーバー

データベースのすべてのユーザー定義テーブルをリストするには:

use [databasename]
select name from sysobjects where type = 'u'

テーブルのすべての列をリストするには:

use [databasename]
select name from syscolumns where id=object_id('tablename')

えっ?これは間違っています...データベースに対してはUSEしか使用できません...そして、クエリはデータベース内のすべてのユーザー定義テーブルを返しますが、これはOPが必要とするものではありません。
Maximilian Mayerl、


3

SQL Serverの他の部分を少しだけ修正しました(スキーマのプレフィックスがより重要になっています)。

SELECT name
  FROM sys.columns 
  WHERE [object_id] = OBJECT_ID('dbo.tablename');

3

例:

select Table_name as [Table] , column_name as [Column] , Table_catalog as [Database], table_schema as [Schema]  from information_schema.columns
where table_schema = 'dbo'
order by Table_name,COLUMN_NAME

私のコードだけ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.