Jak wyświetlić wszystkie kolumny w tabeli?

231

Jak wyświetlić wszystkie kolumny w tabeli dla różnych popularnych systemów baz danych?

MattGrommes
źródło
4
Powinna być plakietka do napisania pytania, które zostanie zamknięte, ale otrzyma ponad 100 głosów pozytywnych :) OTOH, nic dziwnego, że nie ma akceptowanej odpowiedzi, ponieważ pyta o wiele baz danych, więc nie zgadzam się z decyzją o zamknięciu . Cieszę się, że pytania i odpowiedzi są tutaj.
ToolmakerSteve

Odpowiedzi:

255

W przypadku MySQL użyj:

DESCRIBE name_of_table;

Działa to również w przypadku Oracle, o ile korzystasz z SQL * Plus lub Oracle SQL Developer.

Dave
źródło
16
To rozwiązanie jest przeznaczone dla MYSQL, a nie MSSQL
Hammad Khan
2
@dmvianna Nie sądzę, że musi to dotyczyć całej Oracle, ale SQL * Plus.
Tripp Kinetics,
Powinien to być DESCRIBE nazwa_tabeli``;
beahacker
dla sqlite - użyj: pragma table_info (nazwa_tabeli) tj. sqlite> pragma table_info (kolumna1);
GyRo
Edycja, ponieważ DESCRIBEnie jest instrukcją Oracle PLSQL, ale poleceniem SQL * Plus i jako taka nie działa w większości IDE SQL.
wal
117

Dla Oracle (PL / SQL)

SELECT column_name
FROM user_tab_cols
WHERE table_name = 'myTableName'

Dla MySQL

SHOW COLUMNS FROM table_name
MattGrommes
źródło
4
Prawdopodobnie zechcesz zamówić zapytanie Oracle według column_id
David Aldridge,
6
Dla Oracle jest również ważny DESCRIBE name_of_table.
Pigueiras
użyj <nazwa_bazy_danych>; pokaż kolumny w <nazwie_tabeli> jak „<przedrostek_kolumny>%”; Pozwoli ci wymienić tylko kolumny zaczynające się od podanego prefiksu. Oczywiście pomijając nawiasy kątowe.
rstackhouse
co jest user_tab_colsw twoim zapytaniu?
Jogi,
@ Jogi - Google „oracle user_tab_cols” - wbudowany w Oracle db.
ToolmakerSteve
103

W przypadku MS SQL Server:

select * from information_schema.columns where table_name = 'tableName'
Jeff Meatball Yang
źródło
9
Interesująca kolumna to COLUMN_NAME.
Buggieboy
4
Powinno to działać na wielu systemach DBMS. information_schema.columnswidok systemu jest częścią ANSI SQLstandardu ( link ).
Bogdan Sahlean
4
dobra odpowiedź, ale aby uniknąć duplikatów, select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
użyłbym
Jest to zgodne z SQL-92 ANSI i powinno działać we wszystkich silnikach baz danych.
Gareth Davidson
39

(5 lat później, na cześć PostgreSQL, najbardziej zaawansowanego DDBB Królestwa)

W PostgreSQL:

\d table_name

Lub używając SQL:

select column_name, data_type, character_maximum_length
    from INFORMATION_SCHEMA.COLUMNS 
    where table_name = 'table_name';
Earizon
źródło
4
powinna być \ d nazwa_tabeli. \ dt nazwa_tabeli wyświetla relacje.
l85m
36

Wiem, że jest późno, ale używam tego polecenia dla Oracle:

select column_name,data_type,data_length from all_tab_columns where TABLE_NAME = 'xxxx' AND OWNER ='xxxxxxxxxx'
ka_lin
źródło
Próbowałem tego w Oracle i to nie działało. Nazwa kolumny została wydrukowana, ale nic więcej. Musiałem użyć SELECT CAST (COLUMN_NAME AS CHAR (40)) || „” || DATA_TYPE, aby uzyskać ładny format i uzyskać wiele kolumn z konkatenacją.
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'

lub

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

Drugi sposób to standard ANSI i dlatego powinien działać na wszystkich bazach danych zgodnych z ANSI.

Russ Cam
źródło
Żadne z nich nie działa tak, jak napisano (lub przynajmniej implikowano, jak czytałem) dla MS SQL Server. W obu przypadkach kolumna z nazwą tabeli przechowuje nazwę bez żadnego [ ]otoczenia, więc zapytanie nie może ich używać, tylko zwykła nazwa tabeli. Jeśli nie taki był plan PO, to przynajmniej bądź tego świadomy.
JonBrave,
1
@JonBrave - to prawda, nawiasy kwadratowe miały sugerować „wstaw tutaj nazwę tabeli” :)
Russ Cam
Będąc nawiasami kwadratowymi, czytam to jako „ wstaw nazwę tabeli w nawiasach kwadratowych (z powodu potencjalnie zarezerwowanego słowa) tutaj ”, a następnie nie znalazłem żadnych dopasowań :) Być może BNF <Table Name>uniknąłby dwuznaczności. W każdym razie, zdałem sobie sprawę, że mogłeś tak postąpić, kiedy napisałem komentarz - nie szkodzi ostrzec innych na wszelki wypadek.
JonBrave
1
Działa tylko w przypadku MSSQL, jeśli nie ma „[]”, a wokół nazwy tabeli potrzebne są cudzysłowy.
XV zatwierdzony
14

MS SQL Server:

sp_columns [tablename]

Bryan
źródło
12

Microsoft SQL Server Management Studio 2008 R2:

W edytorze zapytań, jeśli podświetlisz tekst nazwy tabeli (np. Dbo.MyTable) i naciśniesz ALT+ F1, otrzymasz listę nazw kolumn, typów, długości itp.

ALT+ F1gdy już zaznaczyłeś, dbo.MyTablejest to odpowiednik działania EXEC sp_help 'dbo.MyTable' zgodnie z tą witryną

Nie mogę uzyskać różnych wariantów zapytań INFORMACJE_SCHEMA.COLUMNS do działania, więc używam tego zamiast tego.

Leslie Sage
źródło
1
Nie działał w SSMS 2012. Btw miałeś na myśli SQL Server Management Studio 2008?
Hammad Khan
1
Tak, a ściślej miałem na myśli Microsoft SQL Server Management Studio 2008 R2. Będę edytować.
Leslie Sage,
4

SQL Server

Aby wyświetlić listę wszystkich zdefiniowanych przez użytkownika tabel bazy danych:

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

Aby wyświetlić wszystkie kolumny tabeli:

use [databasename]
select name from syscolumns where id=object_id('tablename')
Mircea Grelus
źródło
Heh To jest po prostu złe ... możesz użyć USE tylko do baz danych ... A zapytanie zwraca wszystkie tabele zdefiniowane przez użytkownika w bazie danych, co nie jest tym, czego chciał OP.
Maximilian Mayerl
4

Dla SQL Server

sp_help tablename
Luv
źródło
3

Wystarczy niewielka korekta pozostałych w SQL Server (prefiks schematu staje się coraz ważniejszy!):

SELECT name
  FROM sys.columns 
  WHERE [object_id] = OBJECT_ID('dbo.tablename');
Aaron Bertrand
źródło
3

Przykład:

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

Tylko mój kod

Matthew Lowe
źródło