突然接触庞大的数据库,在没有数据字典的情况下如何快速找到自己想要的字段?
- 背景
- 问题描述
-
- MySQL解决方法
-
- [1. 查询字段是否存在于数据库中的某个表中](#1. 查询字段是否存在于数据库中的某个表中)
- [2. 查询数据库中是否有备注与字段名字类似](#2. 查询数据库中是否有备注与字段名字类似)
- [3. 综合查询字段存在性及备注](#3. 综合查询字段存在性及备注)
- 示例
- SQLServer解决方法
-
- [1. 查询字段是否存在于数据库中的某个表中](#1. 查询字段是否存在于数据库中的某个表中)
- [2. 查询数据库中是否有备注与字段名字类似](#2. 查询数据库中是否有备注与字段名字类似)
- [3. 综合查询字段存在性及备注](#3. 综合查询字段存在性及备注)
- 示例
- Oracle解决方法
-
- [1. 查询字段是否存在于数据库中的某个表中](#1. 查询字段是否存在于数据库中的某个表中)
- [2. 查询数据库中是否有备注与字段名字类似](#2. 查询数据库中是否有备注与字段名字类似)
- [3. 综合查询字段存在性及备注](#3. 综合查询字段存在性及备注)
- 示例
背景
在很多公司,尤其是中小型的公司,他们可能并未维护数据字典,当初次接触这个庞大的数据库时,一定会面临找不到自己想要的字段的情况,为工作带来诸多不便。那么我们如何才能在没有数据字典的情况下,快速找到自己想要的字段呢?
答案就是利用数据库中的统计视图,这一类视图不管是在Oracle、MySQL或者SQLServer中都存在,基本大部分结构化数据库,都有这样的视图,它们记录着数据库的很多基础信息,我们利用这些视图,基本可以快速找到自己想要的字段。
问题描述
- 我知道某个字段的业务含义或者业务命名或者可能的字段名,我该如何找快速找到数据库中对应的表和字段呢?
MySQL解决方法
在MySQL中,您可以使用以下方法来查询某个字段是否存在于数据库中的某个表中,或者查询数据库中是否有备注(注释)与您要查询的字段名字类似。
1. 查询字段是否存在于数据库中的某个表中
您可以查询information_schema
数据库中的COLUMNS
表来检查字段是否存在于某个表中。
查询特定字段是否存在于某个数据库中的任意表:
sql
SELECT TABLE_NAME, COLUMN_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name' AND COLUMN_NAME = 'your_column_name';
查询特定字段是否存在于某个特定表中:
sql
SELECT TABLE_NAME, COLUMN_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name' AND COLUMN_NAME = 'your_column_name';
2. 查询数据库中是否有备注与字段名字类似
您可以查询information_schema
数据库中的COLUMNS
表,检查备注(注释)中是否包含特定的字段名字。
查询备注中包含特定字段名字的列:
sql
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name' AND COLUMN_COMMENT LIKE '%your_column_name%';
3. 综合查询字段存在性及备注
您可以结合上述查询,检查字段是否存在以及备注是否包含特定字段名字。
综合查询示例:
sql
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name'
AND (COLUMN_NAME = 'your_column_name' OR COLUMN_COMMENT LIKE '%your_column_name%');
示例
假设您要查询数据库my_database
中是否存在字段my_field
,或者备注中包含my_field
的字段,可以使用以下SQL语句:
sql
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'my_database'
AND (COLUMN_NAME = 'my_field' OR COLUMN_COMMENT LIKE '%my_field%');
通过这些查询,您可以有效地检查数据库中某个字段是否存在,以及备注中是否包含与字段名字类似的信息。根据实际需求进行调整和优化查询语句。
SQLServer解决方法
在SQL Server中,您可以使用系统视图和元数据表来查询某个字段是否存在于数据库中的某个表中,或者查询数据库中是否有备注(注释)与您要查询的字段名字类似。以下是具体的方法:
1. 查询字段是否存在于数据库中的某个表中
您可以查询INFORMATION_SCHEMA.COLUMNS
视图来检查字段是否存在于某个表中。
查询特定字段是否存在于某个数据库中的任意表:
sql
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'your_database_name' AND COLUMN_NAME = 'your_column_name';
查询特定字段是否存在于某个特定表中:
sql
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'your_database_name' AND TABLE_NAME = 'your_table_name' AND COLUMN_NAME = 'your_column_name';
2. 查询数据库中是否有备注与字段名字类似
您可以查询sys.columns
视图和sys.extended_properties
视图,检查备注(注释)中是否包含特定的字段名字。
查询备注中包含特定字段名字的列:
sql
SELECT
t.name AS table_name,
c.name AS column_name,
ep.value AS column_comment
FROM
sys.tables AS t
INNER JOIN
sys.columns AS c ON t.object_id = c.object_id
LEFT JOIN
sys.extended_properties AS ep ON t.object_id = ep.major_id AND c.column_id = ep.minor_id
WHERE
ep.name = 'MS_Description' AND ep.value LIKE '%your_column_name%'
ORDER BY
t.name, c.name;
3. 综合查询字段存在性及备注
您可以结合上述查询,检查字段是否存在以及备注是否包含特定字段名字。
综合查询示例:
sql
SELECT
t.name AS table_name,
c.name AS column_name,
ep.value AS column_comment
FROM
sys.tables AS t
INNER JOIN
sys.columns AS c ON t.object_id = c.object_id
LEFT JOIN
sys.extended_properties AS ep ON t.object_id = ep.major_id AND c.column_id = ep.minor_id
WHERE
(c.name = 'your_column_name' OR (ep.name = 'MS_Description' AND ep.value LIKE '%your_column_name%'))
ORDER BY
t.name, c.name;
示例
假设您要查询数据库my_database
中是否存在字段my_field
,或者备注中包含my_field
的字段,可以使用以下SQL语句:
sql
USE my_database;
SELECT
t.name AS table_name,
c.name AS column_name,
ep.value AS column_comment
FROM
sys.tables AS t
INNER JOIN
sys.columns AS c ON t.object_id = c.object_id
LEFT JOIN
sys.extended_properties AS ep ON t.object_id = ep.major_id AND c.column_id = ep.minor_id
WHERE
(c.name = 'my_field' OR (ep.name = 'MS_Description' AND ep.value LIKE '%my_field%'))
ORDER BY
t.name, c.name;
通过这些查询,您可以有效地检查数据库中某个字段是否存在,以及备注中是否包含与字段名字类似的信息。根据实际需求进行调整和优化查询语句。
Oracle解决方法
在Oracle数据库中,您可以使用数据字典视图来查询某个字段是否存在于数据库中的某个表中,或者查询数据库中是否有备注(注释)与您要查询的字段名字类似。以下是具体的方法:
1. 查询字段是否存在于数据库中的某个表中
您可以查询ALL_TAB_COLUMNS
视图来检查字段是否存在于某个表中。
查询特定字段是否存在于某个数据库中的任意表:
sql
SELECT TABLE_NAME, COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE COLUMN_NAME = 'YOUR_COLUMN_NAME';
查询特定字段是否存在于某个特定表中:
sql
SELECT TABLE_NAME, COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND COLUMN_NAME = 'YOUR_COLUMN_NAME';
2. 查询数据库中是否有备注与字段名字类似
您可以查询ALL_COL_COMMENTS
视图,检查备注(注释)中是否包含特定的字段名字。
查询备注中包含特定字段名字的列:
sql
SELECT TABLE_NAME, COLUMN_NAME, COMMENTS
FROM ALL_COL_COMMENTS
WHERE COMMENTS LIKE '%YOUR_COLUMN_NAME%';
3. 综合查询字段存在性及备注
您可以结合上述查询,检查字段是否存在以及备注是否包含特定字段名字。
综合查询示例:
sql
SELECT
c.TABLE_NAME,
c.COLUMN_NAME,
com.COMMENTS
FROM
ALL_TAB_COLUMNS c
LEFT JOIN
ALL_COL_COMMENTS com
ON
c.TABLE_NAME = com.TABLE_NAME AND c.COLUMN_NAME = com.COLUMN_NAME
WHERE
c.COLUMN_NAME = 'YOUR_COLUMN_NAME'
OR com.COMMENTS LIKE '%YOUR_COLUMN_NAME%';
示例
假设您要查询数据库中是否存在字段MY_FIELD
,或者备注中包含MY_FIELD
的字段,可以使用以下SQL语句:
sql
SELECT
c.TABLE_NAME,
c.COLUMN_NAME,
com.COMMENTS
FROM
ALL_TAB_COLUMNS c
LEFT JOIN
ALL_COL_COMMENTS com
ON
c.TABLE_NAME = com.TABLE_NAME AND c.COLUMN_NAME = com.COLUMN_NAME
WHERE
c.COLUMN_NAME = 'MY_FIELD'
OR com.COMMENTS LIKE '%MY_FIELD%';
通过这些查询,您可以有效地检查数据库中某个字段是否存在,以及备注中是否包含与字段名字类似的信息。根据实际需求进行调整和优化查询语句。