如何通过 SQL 查询在 table 中显示所有列及其数据类型
How to display all columns and its data type in a table via SQL query
我正在尝试从名为 'meta' 的 table 中打印列名称,我还需要它的数据类型。
我试过这个查询
SELECT meta FROM INFORMATION_SCHEMA.TABLES;
但它抛出一个错误,指出没有可用的信息模式。你能帮帮我吗,我是 SQL 的初学者。
编辑:
select tables.name from tables join schemas on
tables.schema_id=schemas.id where schemas.name=’sprl_db’ ;
此查询为我提供了数据库 'sprl_db'
中的所有 table
您可以使用 the monetdb
catalog:
select c.name, c.type, c.type_digits, c.type_scale
from sys.columns c
inner join sys.tables t on t.id = c.table_id and t.name = 'meta';
因为你正在使用 monetDB
你可以使用 sys.columns
sys.columns
它将 return 与 table 列相关的所有信息
您还可以查看 Schema, table and columns 文档以获取 monetDB
在 sql 服务器中我们得到这样的 exec sp_columns TableName
如果我理解正确,您需要查看您(或其他用户)定义的名为 meta
的 table 的列和类型?
至少有两种方法可以做到这一点:
首先(正如@GMB在) you can query the SQL catalog: https://www.monetdb.org/Documentation/SQLcatalog/TablesColumns
中提到的
SELECT * FROM sys.tables WHERE NAME='meta';
+------+------+-----------+-------+------+--------+---------------+--------+-----------+
| id | name | schema_id | query | type | system | commit_action | access | temporary |
+======+======+===========+=======+======+========+===============+========+===========+
| 9098 | meta | 2000 | null | 0 | false | 0 | 0 | 0 |
+------+------+-----------+-------+------+--------+---------------+--------+-----------+
1 tuple
所以这得到了关于tablemeta
的所有相关信息。我们最感兴趣的是列 id
的值,因为它唯一标识了 table.
(请注意,此 ID 在您的系统中可能会有所不同)
获得此信息后,我们可以使用此 table id 查询列 table:
SELECT * FROM sys.columns WHERE table_id=9098;
+------+------+------+-------------+------------+----------+---------+-------+--------+---------+
| id | name | type | type_digits | type_scale | table_id | default | null | number | storage |
+======+======+======+=============+============+==========+=========+=======+========+=========+
| 9096 | i | int | 32 | 0 | 9098 | null | true | 0 | null |
| 9097 | j | clob | 0 | 0 | 9098 | null | true | 1 | null |
+------+------+------+-------------+------------+----------+---------+-------+--------+---------+
2 tuples
由于您只对列的名称和类型感兴趣,因此可以按如下方式修改此查询:
SELECT name, type FROM sys.columns WHERE table_id=9098;
+------+------+
| name | type |
+======+======+
| i | int |
| j | clob |
+------+------+
2 tuples
您可以将上面的两个查询与连接结合起来:
SELECT col.name, col.type FROM sys.tables as tab JOIN sys.columns as col ON tab.id=col.table_id WHERE tab.name='meta';
+------+------+
| name | type |
+======+======+
| i | int |
| j | clob |
+------+------+
2 tuples
如果您使用 MonetDB 的 mclient 实用程序,获取此信息的第二种也是首选方法是使用 mclient 的 describe 元命令。当不带参数使用时,它会显示已在当前数据库中定义的 table 的列表,当它被赋予 table 的名称时,它会打印其 SQL 定义:
sql>\d
TABLE sys.data
TABLE sys.meta
sql>\d sys.meta
CREATE TABLE "sys"."meta" (
"i" INTEGER,
"j" CHARACTER LARGE OBJECT
);
您可以使用 \?
元命令查看 mclient 中所有元命令的列表:
sql>\?
\? - show this message
\<file - read input from file
\>file - save response in file, or stdout if no file is given
\|cmd - pipe result to process, or stop when no command is given
\history - show the readline history
\help - synopsis of the SQL syntax
\D table - dumps the table, or the complete database if none given.
\d[Stvsfn]+ [obj] - list database objects, or describe if obj given
\A - enable auto commit
\a - disable auto commit
\e - echo the query in sql formatting mode
\t - set the timer {none,clock,performance} (none is default)
\f - format using renderer {csv,tab,raw,sql,xml,trash,rowcount,expanded,sam}
\w# - set maximal page width (-1=unlimited, 0=terminal width, >0=limit to num)
\r# - set maximum rows per page (-1=raw)
\L file - save client-server interaction
\X - trace mclient code
\q - terminate session and quit mclient
对于MySQL:
SELECT column_name,
data_type
FROM information_schema.columns
WHERE table_schema = ’ yourdatabasename ’
AND table_name = ’ yourtablename ’;
输出:
+-------------+-----------+
| COLUMN_NAME | DATA_TYPE |
+-------------+-----------+
| Id | int |
| Address | varchar |
| Money | decimal |
+-------------+-----------+
我正在尝试从名为 'meta' 的 table 中打印列名称,我还需要它的数据类型。
我试过这个查询
SELECT meta FROM INFORMATION_SCHEMA.TABLES;
但它抛出一个错误,指出没有可用的信息模式。你能帮帮我吗,我是 SQL 的初学者。
编辑:
select tables.name from tables join schemas on
tables.schema_id=schemas.id where schemas.name=’sprl_db’ ;
此查询为我提供了数据库 'sprl_db'
中的所有 table您可以使用 the monetdb
catalog:
select c.name, c.type, c.type_digits, c.type_scale
from sys.columns c
inner join sys.tables t on t.id = c.table_id and t.name = 'meta';
因为你正在使用 monetDB
你可以使用 sys.columns
sys.columns
它将 return 与 table 列相关的所有信息
您还可以查看 Schema, table and columns 文档以获取 monetDB
在 sql 服务器中我们得到这样的 exec sp_columns TableName
如果我理解正确,您需要查看您(或其他用户)定义的名为 meta
的 table 的列和类型?
至少有两种方法可以做到这一点:
首先(正如@GMB在
SELECT * FROM sys.tables WHERE NAME='meta';
+------+------+-----------+-------+------+--------+---------------+--------+-----------+
| id | name | schema_id | query | type | system | commit_action | access | temporary |
+======+======+===========+=======+======+========+===============+========+===========+
| 9098 | meta | 2000 | null | 0 | false | 0 | 0 | 0 |
+------+------+-----------+-------+------+--------+---------------+--------+-----------+
1 tuple
所以这得到了关于tablemeta
的所有相关信息。我们最感兴趣的是列 id
的值,因为它唯一标识了 table.
(请注意,此 ID 在您的系统中可能会有所不同)
获得此信息后,我们可以使用此 table id 查询列 table:
SELECT * FROM sys.columns WHERE table_id=9098;
+------+------+------+-------------+------------+----------+---------+-------+--------+---------+
| id | name | type | type_digits | type_scale | table_id | default | null | number | storage |
+======+======+======+=============+============+==========+=========+=======+========+=========+
| 9096 | i | int | 32 | 0 | 9098 | null | true | 0 | null |
| 9097 | j | clob | 0 | 0 | 9098 | null | true | 1 | null |
+------+------+------+-------------+------------+----------+---------+-------+--------+---------+
2 tuples
由于您只对列的名称和类型感兴趣,因此可以按如下方式修改此查询:
SELECT name, type FROM sys.columns WHERE table_id=9098;
+------+------+
| name | type |
+======+======+
| i | int |
| j | clob |
+------+------+
2 tuples
您可以将上面的两个查询与连接结合起来:
SELECT col.name, col.type FROM sys.tables as tab JOIN sys.columns as col ON tab.id=col.table_id WHERE tab.name='meta';
+------+------+
| name | type |
+======+======+
| i | int |
| j | clob |
+------+------+
2 tuples
如果您使用 MonetDB 的 mclient 实用程序,获取此信息的第二种也是首选方法是使用 mclient 的 describe 元命令。当不带参数使用时,它会显示已在当前数据库中定义的 table 的列表,当它被赋予 table 的名称时,它会打印其 SQL 定义:
sql>\d
TABLE sys.data
TABLE sys.meta
sql>\d sys.meta
CREATE TABLE "sys"."meta" (
"i" INTEGER,
"j" CHARACTER LARGE OBJECT
);
您可以使用 \?
元命令查看 mclient 中所有元命令的列表:
sql>\?
\? - show this message
\<file - read input from file
\>file - save response in file, or stdout if no file is given
\|cmd - pipe result to process, or stop when no command is given
\history - show the readline history
\help - synopsis of the SQL syntax
\D table - dumps the table, or the complete database if none given.
\d[Stvsfn]+ [obj] - list database objects, or describe if obj given
\A - enable auto commit
\a - disable auto commit
\e - echo the query in sql formatting mode
\t - set the timer {none,clock,performance} (none is default)
\f - format using renderer {csv,tab,raw,sql,xml,trash,rowcount,expanded,sam}
\w# - set maximal page width (-1=unlimited, 0=terminal width, >0=limit to num)
\r# - set maximum rows per page (-1=raw)
\L file - save client-server interaction
\X - trace mclient code
\q - terminate session and quit mclient
对于MySQL:
SELECT column_name,
data_type
FROM information_schema.columns
WHERE table_schema = ’ yourdatabasename ’
AND table_name = ’ yourtablename ’;
输出:
+-------------+-----------+
| COLUMN_NAME | DATA_TYPE |
+-------------+-----------+
| Id | int |
| Address | varchar |
| Money | decimal |
+-------------+-----------+