Bir tablodaki tüm sütunları nasıl listeleyebilirim?


231

Çeşitli popüler veritabanı sistemleri için bir tablodaki tüm sütunları nasıl listelersiniz?


4
Kapatılan bir soru yazmak için bir rozet olmalı, ancak 100'den fazla upvotes alır :) OTOH, kabul edilen bir cevap olmaması şaşırtıcı değildir, çünkü birden fazla veritabanı soruyor, bu yüzden kapatma kararına katılmıyorum . Soru ve Cevapların burada olduğuna sevindim.
ToolmakerSteve

Yanıtlar:


255

MySQL için şunları kullanın:

DESCRIBE name_of_table;

Bu, SQL * Plus veya Oracle'ın SQL Developer'ı kullandığınız sürece Oracle için de geçerlidir.


16
Bu çözüm MSSQL değil MYSQL içindir
Hammad Khan

2
@dmvianna Bunun tüm Oracle için değil SQL * Plus için geçerli olduğunu düşünüyorum.
Tripp Kinetiği

DESCRIBE Tablo_adı_`` olmalıdır ;
beahacker

sqlite için - kullanım: pragma table_info (table_name) yani sqlite> pragma table_info (sütun1);
GyRo

Düzenleme, çünkü DESCRIBEbir Oracle PLSQL talimatı değil, bir SQL * Plus komutudur ve bu nedenle çoğu SQL IDE'de çalışmaz.
walen

117

Oracle için (PL / SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

MySQL için

SHOW COLUMNS FROM table_name

4
Muhtemelen Oracle sorgusunu column_id'e göre sipariş etmek istersiniz
David Aldridge

6
Oracle için de geçerlidir DESCRIBE name_of_table.
Pigueiras

<veritabanı_adı> kullanın; <table_name> içinde '<column_prefix>%' gibi sütunları göster; Yalnızca belirtilen önekle başlayan sütunları listelemenize izin verir. Elbette açılı parantezleri atlamak.
rstackhouse

user_tab_colssorgunuzda ne var ?
Jogi

@Jogi - Google "oracle user_tab_cols" - dahili olarak Oracle db.
ToolmakerSteve

103

MS SQL Server için:

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

9
Buradaki ilgi sütunu COLUMN_NAME olacaktır.
Buggieboy

4
Bu, birçok DBMS üzerinde çalışmalıdır. information_schema.columnssistem görünümü ANSI SQLstandardın ( link ) bir parçasıdır .
Bogdan Sahlean

4
iyi cevap ama yinelenen önlemek için kullanacağım:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
billynoah

Bu SQL-92 ANSI uyumludur ve tüm veritabanı motorlarında çalışması gerekir.
Gareth Davidson

39

(Krallığın en gelişmiş DDBB'si PostgreSQL Onuruna 5 yıl kaldı)

PostgreSQL'de:

\d table_name

Veya SQL kullanarak:

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

4
\ d tablo_adı olmalıdır. \ dt tablo_adı ilişkileri listeler.
l85m

36

Geç olduğunu biliyorum ama Oracle için bu komutu kullanıyorum:

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


Bunu Oracle'da denedim ve işe yaramadı. Sütun_adı yazdırıldı ancak başka bir şey yazdırılmadı. SELECT CAST (CHAR (40) OLARAK COLUMN_NAME) kullanmak zorunda kaldım || '' || DATA_TYPE güzel bir biçim almak ve birleştirme ile birden çok sütun elde etmek için.
Eamonn Kenny

27

SQL Server

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

veya

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

İkinci yol nedenle bir ANSI standardı ve gerektiği üzerinde çalışmak tüm ANSI uyumlu veritabanları.


Bunların hiçbiri MS SQL Server için yazıldığı gibi çalışmaz (veya en azından okuduğum gibi ima edilir). Her iki durumda da tablo adı sütunu adı etrafında herhangi bir şey olmadan saklar [ ], bu nedenle sorgu bunları kullanmamalı, yalnızca düz tablo adını kullanmalıdır. OP'nin amacı bu değilse, en azından bunun farkında olun.
JonBrave

1
@JonBrave - bu doğru, köşeli parantez "tablo adınızı buraya ekleyin" ima etmek için oradaydı :)
Russ Cam

Köşeli parantez olmak, " burada köşeli parantez içine tablo adınızı ekleyin (potansiyel olarak ayrılmış kelime nedeniyle) " olarak okudum ve sonra hiçbir eşleşme var :) Belki de BNF <Table Name>belirsizliği önlemek olurdu. Her neyse, yorumu yazarken --- her ihtimale karşı başkalarını uyarmanın hiçbir zararı olmadığını düşünmüş olabilirsiniz.
JonBrave

1
MSSQL için yalnızca tablo adı etrafında '[]' yoksa ve '' tırnak işaretleri gerekiyorsa çalışır.
18'de 21


12

Microsoft SQL Server Management Studio 2008 R2:

Bir sorgu düzenleyicide, tablo adı metnini (ör. Dbo.MyTable) vurgular ve ALT+ tuşuna basarsanız F1, sütun adlarının, türünün, uzunluğunun vb. Bir listesini alırsınız.

ALT+ F1vurguladığınız sırada bu siteye göredbo.MyTable yayınlanmaya eşdeğerdirEXEC sp_help 'dbo.MyTable'

BİLGİ_CHEMA.COLUMNS sorgulamak için varyasyonları çalışamıyor, bu yüzden bunun yerine bunu kullanın.


1
SSMS 2012'de çalışmadı. Btw, SQL Server Management Studio 2008 mi demek istediniz?
Hammad Khan

1
Evet, daha doğrusu Microsoft SQL Server Management Studio 2008 R2'yi kastetmiştim. Ben düzenleyeceğim.
Leslie Sage

4

SQL Server

Bir veritabanının kullanıcı tanımlı tüm tablolarını listelemek için:

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

Bir tablonun tüm sütunlarını listelemek için:

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

Heh? Bu sadece yanlış ... veritabanları için yalnızca USE kullanabilirsiniz ... Ve sorgu veritabanında tüm kullanıcı tanımlı tabloları döndürür, bu OP istediğini değil.
Maximilian Mayerl


3

SQL Server'daki diğerleri üzerinde sadece küçük bir düzeltme (şema öneki daha önemli hale geliyor!):

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

3

Misal:

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

Sadece kodum

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.