การใช้ INFORMATION_SCHEMA.COLUMNS แทน SHOW COLUMNS ใน MySQL
คำสั่ง SHOW COLUMNS ไม่สามารถใช้เป็นแหล่งข้อมูล (Data Source) ใน Subquery ได้โดยตรง แต่สามารถใช้ตาราง INFORMATION_SCHEMA.COLUMNS แทน ซึ่งให้ข้อมูลรายละเอียดมากกว่า
SELECT * FROM (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'yourTableName'
) anyAliasName;
ตัวอย่างการใช้งาน
สร้างตารางตัวอย่าง:
mysql> create table DemoTable (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName varchar(20),
StudentLastName varchar(20),
StudentAge int
);
คิวรีดึงข้อมูลโครงสร้างตาราง:
mysql> SELECT * FROM (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'DemoTable'
) tbl;
ผลลัพธ์ (แสดงคอลัมน์สำคัญ):
+---------------+--------------+-------------+------------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+-----------------+-------------+------------+----------------+---------------------------------+----------------+-----------------------+--------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | COLUMN_DEFAULT | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | CHARACTER_OCTET_LENGTH | NUMERIC_PRECISION | NUMERIC_SCALE | DATETIME_PRECISION | CHARACTER_SET_NAME | COLLATION_NAME | COLUMN_TYPE | COLUMN_KEY | EXTRA | PRIVILEGES | GENERATION_EXPRESSION | SRS_ID | +---------------+--------------+-------------+------------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+-----------------+-------------+------------+----------------+---------------------------------+----------------+-----------------------+--------+ | def | sample | DemoTable | StudentId | 1 | NULL | NO | int | NULL | NULL | 10 | 0 | NULL | NULL | NULL | int(11) | PRI | auto_increment | select,insert,update,references | NULL | NULL | | def | sample | DemoTable | StudentFirstName | 2 | NULL | YES | varchar | 20 | 60 | NULL | NULL | NULL | utf8 | utf8_general_ci | varchar(20) | | | select,insert,update,references | NULL | NULL | | def | sample | DemoTable | StudentLastName | 3 | NULL | YES | varchar | 20 | 60 | NULL | NULL | NULL | utf8 | utf8_general_ci | varchar(20) | | | select,insert,update,references | NULL | NULL | | def | sample | DemoTable | StudentAge | 4 | NULL | YES | int | NULL | NULL | 10 | 0 | NULL | NULL | NULL | int(11) | | | select,insert,update,references | NULL | NULL | +---------------+--------------+-------------+------------------+------------------+----------------+-------------+-----------+--------------------------+------------------------+-------------------+---------------+--------------------+--------------------+-----------------+-------------+------------+----------------+---------------------------------+----------------+-----------------------+--------+
ข้อดีของ INFORMATION_SCHEMA.COLUMNS:
- สามารถใช้ใน Subquery, JOIN, และ WHERE ได้อย่างเต็มที่
- ให้ข้อมูลเมตadata ครบถ้วน (Data Type, Length, Nullable, Default, Key, Extra, Privileges, ฯลฯ)
- เป็นมาตรฐาน SQL มาตรฐาน (ANSI SQL)
- สามารถกรองด้วย
TABLE_SCHEMA(ชื่อฐานข้อมูล) ได้