SQLite 데이터베이스에 대한 테이블의 열 목록을 어떻게 얻을 수 있습니까?


102

테이블의 열 목록을 검색하려고합니다. 데이터베이스는 SQLite의 최신 릴리스 (3.6, 저는 믿습니다)입니다. SQL 쿼리로이 작업을 수행하는 코드를 찾고 있습니다. 열과 관련된 메타 데이터에 대한 추가 보너스 포인트 (예 : 길이, 데이터 유형 등)

답변:


134

당신이 찾고있는 것을 데이터 사전이라고합니다. sqlite에서는 sqlite_master 테이블 (또는 뷰?)을 쿼리하여 모든 테이블 목록을 찾을 수 있습니다.

sqlite> create table people (first_name varchar, last_name varchar, email_address varchar);
sqlite> select * from sqlite_master;
table|people|people|2|CREATE TABLE people (first_name varchar, last_name varchar, email_address varchar)

열 정보를 얻으려면 다음 pragma table_info(table_name)문을 사용할 수 있습니다 .

sqlite> pragma table_info(people);
0|first_name|varchar|0||0
1|last_name|varchar|0||0
2|email_address|varchar|0||0

pragma 문에 대한 자세한 내용은 설명서를 참조하십시오 .


5
큰! 이제이 작업은 명령 줄 외부에서 어떻게 수행됩니까? 내 자신의 C 프로그램에서 어떻게 수행됩니까?
Aaron Bratcher 2013 년

Objective-c에서 위와 동일하게 구현하는 방법
Nag Raj

2
@Nag, SQLite는 이러한 명령을 일반 SQL로 처리하고 그에 따라 처리하고 결과 집합을 반환해야한다고 생각합니다.
Bryan Kyle

sqlite에는 대신 점 바로 가기가 select * from 있습니까?
jiggunjer

select * from table을 사용하면 테이블에서 얼마나 많은 레코드가 수백만 레코드의 결과를 가질 수 있는지 알 수없고 시간과 회수가 걸릴 수 있습니다. "제한 1"또는 이와 유사한 것을 추가해야합니다.
가이 Dafny

55

다음은 간단한 방법입니다.

.schema <table>

4
이것이 정말로 답이되어야합니다.
Ehtesh Choudhury

19
@EhteshChoudhury 아니요, 질문은 SQL 쿼리를 요구하며 이것은 하나가 아닙니다.
jazzpi

25

질문은 오래되었지만 다음은 아직 언급되지 않았습니다.

많은 경우에 또 다른 편리한 방법은 다음과 같이 헤더를 켜는 것입니다.

sqlite> .headers on

그때,

sqlite> SELECT ... FROM table

출력 상단에 선택한 모든 필드 (*를 선택하면 모두)를 보여주는 헤드 라인이 표시됩니다.


내 생각에 실제 문제는 sqlite3가 기본적으로 쿼리 헤더를 제공하지 않는다는 것이 옳다고 생각 합니다 . 테이블이 너무 길어서 터미널에 표시 할 수없는 경우 예를 들어 LIMIT 5. ;마지막에 잊지 마세요 .
fralau

16

sqlite 셸로 이동하십시오.

$ sqlite3 path/to/db.sqlite3

그리고 그냥

sqlite> .schema

그리고 당신은 모든 것을 얻을 것입니다.


1
질문은 SQL 쿼리를 찾고 있습니다.
Erica

13

다음은 현재 데이터베이스의 모든 테이블과 열을 나열하는 SELECT 문입니다.

SELECT m.name as tableName, 
       p.name as columnName
FROM sqlite_master m
left outer join pragma_table_info((m.name)) p
     on m.name <> p.name
order by tableName, columnName
;

감사! 당신이 당신의 변경 경우 스키마에 의해 주문할 수 ORDER BY에를 tableName, p.cid.
mrm

7

이것은 열과 함께 모든 테이블을 나열하는 쿼리이며 OP 요청에 따라 각 열에 대해 얻을 수있는 모든 메타 데이터를 보너스 포인트로 나열합니다.

SELECT
  m.name AS table_name, 
  p.cid AS col_id,
  p.name AS col_name,
  p.type AS col_type,
  p.pk AS col_is_pk,
  p.dflt_value AS col_default_val,
  p.[notnull] AS col_is_not_null
FROM sqlite_master m
LEFT OUTER JOIN pragma_table_info((m.name)) p
  ON m.name <> p.name
WHERE m.type = 'table'
ORDER BY table_name, col_id

pragma_table_info쿼리 작업 방법을 보여준 @David Garoutte에게 감사드립니다 .

이 쿼리를 실행하여 모든 테이블 메타 데이터를 확인합니다.

SELECT * FROM sqlite_master WHERE type = 'table'

1

위를 바탕으로 한 번에 모두 할 수 있습니다.

sqlite3 yourdb.db ".schema"

그러면 효과적으로 열 목록 인 테이블을 생성 할 수있는 SQL이 제공됩니다.


0

오랜 시간 이었지만 너무 늦지 않았습니다. TCL과 통역사로 비슷한 질문을했고 여러 번 검색 한 결과 나에게 좋은 것을 찾지 못했습니다. 그래서 나는 당신의 DB가“메인”이라는 것을 알고 PRAGMA를 기반으로 무언가를 제안합니다.

db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }

그리고 목록을 얻기 위해 배열 사용

set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.