SQLとは、データベースを操作する言語です。
海外での発音は「シーケル」に近いのですが、日本ではそのまま「エスキューエル」と呼ばれることが多いようです。
目次
SQLの種類にはDML、DDL、DCLの3種あり
SQLには、大きく分けて、DML、DDL、DCLの3種類があります。
- DML(data definition language) データを操作する
- DDL(data definition language) データや構造を定義する
- DCL(data control language) データを制御する
DML データを操作するステートメント
- INSERT データを挿入します。
- UPDATE データを更新します。
- DELETE テーブルから特定のデータを削除します。
- SELECT テーブルから条件にしたがってデータを取得します。
プログラマがSQLと言えば、これを指します。
これらの言語ステートメントは、大量データの挿入、更新などに時間がかかります。そのため、insertやupdateの機能を模倣した専用の外部コマンド(インポート、エクスポートコマンド)や、トランザクションを伴わない大量削除コマンド(truncate)などが用意されているケースもあります。
DDL データや構造を定義するステートメント
- CREATE データベースオブジェクトを定義します。
- DROP データベースオブジェクトを削除します。
- ALTER データベースオブジェクトを変更します。
データベースオブジェクトには、データベース本体、表領域、テーブル、トリガー、インデックスなどが含まれます。
最近のDBMSでは、エクスポートコマンドで出力形式をDDLとしてファイル保存する機能があり、稼働しているデータベースからCREATEステートメントやALTERステートメントを生成するものも多いです。
DCL データを制御するステートメント
- GRANT 権限を付与します。
- REVOKE 権限を剥奪します。
- SET TRANSACTION トランザクションモードを設定します。
- BEGIN トランザクションを開始します。
- COMMIT トランザクションを確定します。
- ROLLBACK トランザクションを取り消し、データをロールバック(巻き戻し)します。
- SAVEPOINT ロールバック地点を任意に設定します。
- LOCK テーブルやレコードなどをロック(占有)して他者から変更されないようにします。
分類によっては、トランザクション関連のステートメントをTCL(Transaction Control Language)とするケースもあります。
SQLの規格、最新はSQL:2016
ANSIとISOが定めた標準SQLです。
頻繁に更新されていて、定めた年代を取って、SQL86、SQL89、SQL92、SQL:1999、SQL:2003、SQL:2006、SQL:2008、SQL:2011、SQL:2016があります。最新の標準SQLはSQL:2016。
ただし、対応は各社バラバラで、どのDBMSがどの規格に準拠しているか明記している資料はほとんどありません。
PostgreSQLが唯一、SQL標準への準拠状況を一覧にして公開しているくらいです。
これらの規格の中でも、SQL92は別名SQL2と呼ばれ、DML、DDL、DCLがひと通り定義されています。
また、SQL:1999(SQL99)は別名SQL3と呼ばれ、リカーシブルクエリやOLAP対応、ユニオン、カーソル操作の強化などSQLがRDBMSのための完全な言語になることを目指した規格です。
SQL92とSQL99が大きな節目だと覚えておくと良いでしょう。
RDBMSのシェアは、OracleとMicrosoftが圧倒
2019年時点で、メンテナンスやサポートが継続されているRDBMSを紹介します。大きく分けてオープンソース系と商用系があります。
オープンソースのRDBMSは以下の通り。ただし、IngresやMySQLなど有償での商用サポートがある場合も。
- Ingres
- PostgreSQL
- MySQL
- Firebird
- SQLite
商用のRDBMS製品は以下の通り。
- Oracle Database
- IBM DB2
- IBM Informix Dynamic Server
- SAP Sybase Adaptive Server Enterprise
- Microsoft SQL Server
- InterBase
なお、アメリカでのRDBMSのランキングは以下のとおりです。
- Oracle
- MySQL
- Microsoft SQL Server
- PostgreSQL
- IBM Db2
参考)DB-Engines Ranking 2019年10月のデータより
3位のMicrosoft SQL Serverと、PostgreSQLの間には大きな差があるため、実質上位3つの圧勝と考えてよいでしょう。
MySQLはオープンソースですがOracleが買収して権利を持っています。そのため、RDBMSはOracleとMicsoftの2強となっています。
SQLの独自拡張 共通で使える関数は30%程度
SQLの標準規格は存在するものの、各社での独自拡張も多く存在しています。
このため「Oracleでは動くけど、SQL Serverだと動かない」といったSQLの方言も多数存在します。特にSQL内で使える関数は、引数なども含めて共通で使えるのは全体の30%ほどと言われています。
各社の独自拡張のうち、特に有名なものは以下の通りです。
- PL/SQL Oracleの独自拡張
- T-SQL Microsoftの独自拡張
- PL/pgSQL PostgreSQLの独自拡張
- PSQL Firebird/Interbaseの独自拡張
PL/SQLは、圧倒的シェアを持つOracleデータベースの独自拡張です。もともとプログラム的な処理ができないSQLを、手続き可能(Procedual Language)に拡張することで「PL/SQL」と命名されています。
SQL内でif分岐やforループなどの制御構造を組み込むことができるんですね。FETCHループでカーソルを使って1件づつデータを処理することも可能です。
PL/SQLは、あまりにシェアが大きいため、なるべく互換性をもたせようとしている組織・会社もあります。例えば、PostgreSQLのPL/pgSQLはPL/SQLを参考に実装されていますし、IBMのDB2はOracleからの移行が容易なようにV9.7からPL/SQLをサポートしています。
T-SQL(Transact-SQL)は、PL/SQLと同じくMicrosoft社がSQLに制御構造を持たせた独自拡張。PL/SQLとは真っ向勝負と言って良いほど異なる拡張をしています。
本来、SQLはデータの操作のみをおこない、if分岐やループ処理はプログラム上でおこなうモジュール性が重要と言われていました。SQLにプログラミング的な要素を持たせることには批判もあります。
しかし、2大勢力のPL/SQLとT-SQLが制御構造を取り込んでいるため、開発者としては使うしかないのが現状です。
まとめ
- SQLには、DML、DDL、DCLの3種あり
- SQL標準規格はSQL92とSQL99が大きな節目
- SQL標準に比較的準拠しているのは、PostgreSQL
- SQL独自拡張の2大シェアは、PL/SQLとTransact-SQL