เป็นเรื่องที่ยุ่งยากลำบากใจสำหรับผู้ดูแลระบบฐานข้อมูล ที่มี table จำนวนมาก ทำให้การจดจำโครงสร้างตารางนั้นแทบเป็นไปไม่ได้ วิธีที่จะทำให้ค้นหาที่มาที่ไป หรือ ชื่อของคอลั่มที่เราต้องการ อาจจะทำเป็น data dictionary เอาไว้ เพื่อค้นหา แต่มันก็ไม่ได้ง่ายนะ และหากมีการเปลี่ยนแปลงใน database แล้ว แต่ไม่กลับมาแก้ไขใน data dic มันก็จะไม่มีความหมาย อีกวิธีหนึ่งที่นิยมใช้กันก็คือ query ใน information_schema
ที่มีทั้งใน SQL Server, PostgreSQL และ MySQL โดยใช้คำสั่ง SQL ดังนี้
SQL Server
SELECT DISTINCT
T.TABLE_TYPE AS table_type,
C.TABLE_NAME AS table_name,
C.COLUMN_NAME AS column_name,
C.DATA_TYPE AS column_type,
C.CHARACTER_MAXIMUM_LENGTH AS column_length
FROM
INFORMATION_SCHEMA.COLUMNS AS C
LEFT JOIN INFORMATION_SCHEMA.TABLES AS T ON T.TABLE_CATALOG = C.TABLE_CATALOG
AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
AND T.TABLE_NAME = C.TABLE_NAME
WHERE
LOWER ( C.COLUMN_NAME ) LIKE '%YOUR_KEYWORD_HERE%'
ORDER BY
T.TABLE_TYPE,
C.TABLE_NAME,
C.COLUMN_NAME;
PostgreSQL
SELECT DISTINCT
T.table_type AS table_type,
T.table_name AS table_name,
C.column_name AS column_name,
C.data_type AS column_type,
C.character_maximum_length AS column_length
FROM
information_schema.tables T
INNER JOIN information_schema.columns C ON C.table_name = T.table_name
AND C.table_schema = T.table_schema
WHERE
T.table_schema NOT IN ( 'information_schema', 'pg_catalog' )
AND LOWER ( C.column_name ) LIKE '%YOUR_KEYWORD_HERE%'
ORDER BY
T.table_type,
T.table_name,
C.column_name;
MySQL or MariaDB
SELECT DISTINCT
T.TABLE_TYPE AS table_type,
C.TABLE_NAME AS table_name,
C.COLUMN_NAME AS column_name,
C.COLUMN_TYPE AS column_type,
C.CHARACTER_MAXIMUM_LENGTH AS column_length
FROM
INFORMATION_SCHEMA.COLUMNS AS C
LEFT JOIN INFORMATION_SCHEMA.TABLES AS T ON T.TABLE_CATALOG = C.TABLE_CATALOG
AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
AND T.TABLE_NAME = C.TABLE_NAME
WHERE
LOWER( C.COLUMN_NAME ) LIKE '%YOUR_KEYWORD_HERE%'
ORDER BY
T.TABLE_TYPE,
C.TABLE_NAME,
C.COLUMN_NAME
เปลี่ยน YOUR_KEYWORD_HERE
เป็นคำที่ต้องการค้นหา เท่านี้เราก็จะได้ พิมพ์เป็นตัวเล็กทั้งหมดได้ เนื่องจากเราค้นหาโดยเทียบ function lower() แล้ว เพื่อกันชื่อคอลั่มที่เป็นตัวอักษรใหญ่บ้าง เล็กบ้าง
- table_type : จะมี BASE TABLE และ VIEW
- table_name : คือตารางที่พบชื่อคอลั่ม ตามที่เราค้นหา
- column_name : คือชื่อคอลั่มที่ตรงกับที่ค้นหา
- column_type : คือประเภทของข้อมูล
- column_length : ขนาดของข้อมูลสูงสุด
Note:
หลัก ๆ ให้ดูตาราง INFORMATION_SCHEMA.COLUMNS
กับ INFORMATION_SCHEMA.TABLES
คู่กัน มันจะบอกข้อมูลของตารางและคอลั่ม อย่างละเอียดไว้อยู่แล้ว