SQLのdescは、データベースオブジェクトの定義情報を表示するコマンドです。
SQLのdescの構文
SQLのdescは、テーブルの定義情報詳細(describe)を表示するSQLです。また、order by descと記述すると、「降順(descending)にソート」という意味になります。どちらも略語はdescなのでややこしいですが、全く異なるSQLとなってます。
【関連記事】
▶SQLのdescはorder byソートの降順指定 テーブル定義表示もおこなう
Oracleのdescの構文
Oracleでは、descまたはdescribeでテーブルやビュー、ストアドプロシジャなどのデータベースオブジェクトの定義情報を確認することが可能です。
以下は、ビューEMP_DETAILS_VIEWの定義情報を確認する例です。
DESCRIBE EMP_DETAILS_VIEW Name Null? Type ----------------------------------------- -------- ---------------- EMPLOYEE_ID NOT NULL NUMBER(6) JOB_ID NOT NULL VARCHAR2(10) MANAGER_ID NUMBER(6) DEPARTMENT_ID NUMBER(4) LOCATION_ID NUMBER(4) COUNTRY_ID CHAR(2) FIRST_NAME VARCHAR2(20) LAST_NAME NOT NULL VARCHAR2(25) SALARY NUMBER(8,2) COMMISSION_PCT NUMBER(2,2) DEPARTMENT_NAME NOT NULL VARCHAR2(30) JOB_TITLE NOT NULL VARCHAR2(35) CITY NOT NULL VARCHAR2(30) STATE_PROVINCE VARCHAR2(25) COUNTRY_NAME VARCHAR2(40) REGION_NAME VARCHAR2(25)
テーブルまたはビューに対してdescを実行すると、カラム名、NULL許可、データ型を確認することができます。
SQL Serverのdescの構文
SQL Serverで、テーブル定義の詳細を表示するコマンドはdescではなく、sp_helpというストアドプロシジャとなっています。
参考)sp_help (Transact-sql) – SQL Server | Microsoft Docs
なお、sp_helpにはテーブルだけではなく、
MySQLのdescの構文
MySQLでは、descはshow columnsと同等の機能のシノニム(別名)です。
参考)MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.7.5.6 SHOW COLUMNS 構文
USE AdventureWorks2012; GO EXEC sp_help 'Person.Person'; GO
なお、データベースオブジェクトを指定せずに、単にsp_helpのみを実行するとデータベース内の全オブジェクトの情報を一覧表示します。以下は、masterデータベース内のオブジェクト一覧を返す例です。
USE master; GO EXEC sp_help; GO
PostgreSQLのdescの構文
PostgreSQLでは、テーブル定義を表示するdescに相当するSQLは用意されていません。代替として以下のようにinformation_schemaテーブルを直接参照する方法があります。
select column_name,data_type from information_schema.columns where table_name ='table_name';
また、PostgreSQLのコマンドpsqlのコマンド\dを指定することで、テーブル定義情報が表示されます。
psqlコマンドの\dは、対象がテーブル、ビュー、インデックス、または、シーケンスのみです。カラム名、データ型、 NULL許可、デフォルト値を表示します。
単に\dのみで、データベースオブジェクトの一覧を表示します。なお、\dtでテーブルのみに限定して一覧表示が可能です。
dvdrental=# \d List of relations Schema | Name | Type | Owner --------+----------------------------+----------+---------- public | actor | table | postgres public | actor_actor_id_seq | sequence | postgres public | actor_info | view | postgres public | address | table | postgres public | address_address_id_seq | sequence | postgres public | category | table | postgres public | category_category_id_seq | sequence | postgres public | city | table | postgres public | city_city_id_seq | sequence | postgres public | country | table | postgres public | country_country_id_seq | sequence | postgres public | customer | table | postgres public | customer_customer_id_seq | sequence | postgres public | customer_list | view | postgres public | film | table | postgres public | film_actor | table | postgres public | film_category | table | postgres : :
\d オブジェクト名指定で、オブジェクトの詳細情報を表示します。以下は、テーブルactorの定義情報を表示した例です。
dvdrental=# \d actor Table "public.actor" Column | Type | Modifiers -------------+-----------------------------+--------------------------------- ------------------------- actor_id | integer | not null default nextval('actor_ actor_id_seq'::regclass) first_name | character varying(45) | not null last_name | character varying(45) | not null last_update | timestamp without time zone | not null default now() Indexes: "actor_pkey" PRIMARY KEY, btree (actor_id) "idx_actor_last_name" btree (last_name) Referenced by: TABLE "film_actor" CONSTRAINT "film_actor_actor_id_fkey" FOREIGN KEY (act or_id) REFERENCES actor(actor_id) ON UPDATE CASCADE ON DELETE RESTRICT Triggers: last_updated BEFORE UPDATE ON actor FOR EACH ROW EXECUTE PROCEDURE last_u pdated() dvdrental=#
まとめ
- descは、データベースオブジェクトの定義情報を表示するコマンド
- order byとdescで、全く異なる機能のSQLとして動作する。
- descは各DBMSごとに実装方法が全く異なり、コマンド名も異なる場合もある