標準SQLとSQLの歴史!SQLの互換性と規格化の流れを解説
thumb_historyofstandardsql_01
標準SQLとSQLの歴史!SQLの互換性と規格化の流れを解説
アンドエンジニア編集部
2023.12.28
この記事でわかること
SQLは、RDBMSの操作に必要なデータベース操作言語です
SQLには、RDBMS製品化の過程でそれぞれの実装に違いから「方言」が存在します
標準SQLは、ANSIやISOにより制定された規格で、改定により互角性が高まっています

標準SQLとSQLの歴史

img_historyofstandardsql_01

SQLとは、データベース操作言語と呼ばれ、RDBMSの操作に必要な言語を表します。一般的なプログラミング言語では言語仕様が決まっており、互換性が確保されています。SQLはそれぞれRDBMSに固有な実装が施されており、SQL文の記述に違いを持つ「方言」が存在する特色を持ちます。

ここでは、SQLの登場の経緯を歴史から振り返っていきます。

SQLとは?概要・できること・プログラミング言語との違いを解説

DBMSの登場

SQLを学ぶために、前提となる管理システムであるDBMS(DataBase Management System)を学んでいきます。

現在のコンピュータは、1940年代中頃から1950年代まで躍進的な進歩により開発が進みました。1960年代には磁気ディスクの登場により、記録媒体は磁気テープから磁気ディスクへと遷移したことで、シーケンシャルアクセスからランダムアクセスの利便性が高まりました。

そこでデータ管理の必要性から階層型データモデルやネットワーク型データモデルが登場し、1960年代後半から1970年代にかけて標準化が進みました。このデータ管理のシステムをDBMSと呼び、さらにシステム化が進んでいきました。

RDBMSの登場

階層型データモデルやネットワーク型データモデルのDBMSが使用されていくなか、エドガー・フランク・コッドは執筆した論文”A Relational Model of Data for Large Shared Data Banks”を1970年に発表しました。この論文では、リレーショナルの概念を定義し、現在の基礎となるRDBMSの条件を提唱しています。

RDBMSは、リレーショナルデータベースマネジメントシステム(Relational DataBase Management System)という英語の頭文字から取った略語で、データベースの管理システムを指します。

対象となるデータベースは、リレーショナルデータベース(RDB、関係データベース)です。RDBを実際にシステムに実装したものをRDBMSと呼びます。

なおエドガー・フランク・コッドは、IBMで磁気ディスクシステムの開発を担当しており、1969年にはRDBMSの理論を先行してIBM社内に共有しています。しかしながら、これまでの実装と異なるためIBM自体の実装は進まず、商用化はOracleに先を越された経緯があります。

SQLの登場

RDBMSの理論を提唱したエドガー・フランク・コッドは、1970年代に勤務先のIBMでRDBを実装するためにSystem Rプロジェクトを立ち上げました。しかしエドガー・フランク・コッド自身はそのプロジェクトに深く関与できず、リレーショナルではない独自言語SEQUEL言語(シークェル)が開発されました。

その後名称登録の重複により、同じ読み方のSQL(エスキューエル、シークェル)に改称され、現在の呼称が定着していきました。現在では、SQLは「Structured Query Language」の略として広く認知されています。

IBMの実装と並行して開発を行ったOracleは、商用化に先行した企業です。その際参考にした論文は登場後すぐに開発に着手したことから、IBMが策定したSQLと違いを持ち、その後互換性維持の観点から違いは「方言」として独自性を持つものとして継続提供されていきました。

SQLの入門編:初心者から経験者まで役立つSQL情報を掲載!
SQLでできることとは?活用例・種類・難易度・将来性を解説

標準SQLの規格化の要素

img_historyofstandardsql_02

SQLはリレーショナルデータベースで用いられることから、標準SQLの規格化においてはデータ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)について作業が進められました。

これらの実装は、各社からRDBMSが製品化されていたため、それぞれ独自拡張がされていました。そのため、SQL構文やストアドプロシージャに各RDBMS製品の違いが見られる中、ANSI・ISOによって標準化が進められました。

対象となるデータ定義言語の概要

データ定義言語(DDL)は、データベース化するデータを定義するためのSQL言語です。CREATEによるデータベース、テーブル(表)、インデックス(索引)などの作成や、DROPによるデータベース、テーブル(表)、インデックス(索引)などの削除があります。

対象となるデータ操作言語の概要

データ操作言語(DML)は、データベースに対するデータの登録・更新・削除・検索を行うためのSQL言語です。SELECTによるデータの検索・抽出、INSERTによる行の追加・挿入、UPDATEによるデータの更新、DELETEによるレコード(行)の削除などがあります。

対象となるデータ制御言語の概要

データ制御言語(DCL)は、データベースに対するデータアクセス制御を行うためのSQL言語です。GRANTによる権限の付与やREVOKEによる権限の取り消しなどがあります。

DCLは、DDLやDMLと異なり直接データを定義したり操作したりするものではないですが、権限が付与されないと操作できないので必要なものです。

標準SQLの規格化

img_historyofstandardsql_03

SQLはデータベース操作言語であり、RDBMSの実装に依存する「方言」を持ちます。最初に商用版として市場投入されたOracle DatabaseやIBM SQL/DS(現IBM DB2ファミリー)をはじめ、その後登場したIngresやMicrosoft SQL Server、MySQLなどでも同様の違いが生じます。

この状態は、1986年の最初の規格統一まで長らく続いていましたが、ANSIやISOの標準化により標準SQLに従うことで統一を目指して多くの改正が続けられています。なお規格が制定されたとしても、RDBMSのベンダーがそれを採用するかは別の問題であり、現在も対応の度合いには違いがみられるのが実状です。

SQL Serverとは?基礎情報から構築までの手順を解説!
MySQL入門!世界で最も普及しているRDBMSを学んでみよう

SQL-86の規格概要

SQL-86は、最初にANSIによって規格化された標準SQLです。1986年に制定されましたが、1987年にISOに承認されたことからSQL-87とも呼ばれます。データ操作言語(DML)の仕様として、プログラミング言語からSQL文を呼び出すエンベデッドSQLの仕様化が図られました。

しかしながら、カバーする範囲が十分ではなく、標準化以降も「方言」の開発競争は収まらず、規格制定が継続することになります。

SQL-89の規格概要

FIPS 127-1で採用された、DEFAULTなどの整合性制約サポートを追加したマイナーバージョンです。SQL-89では、CREATE TABLEなどのデータ定義言語(DDL)の仕様が策定されました。日本語サポートも、国際規格団体に働きかけてJIS X 3005:1990に盛り込まれました。

SQL-92の規格概要

FIPS 127-2への対応を含む、大幅な機能拡張バージョンとなります。具体的にはデータ型の拡張、動的SQL、言語の直交性の改善、整合性機能拡張、外部結合、一時表、動的SQL、DDL拡張など各国語機能を含む多くの機能が盛り込まれました。

SQL:1999の規格概要

正規表現のマッチング、再帰的クエリ(推移的クロージャなど)、トリガー、手続き型およびフロー制御ステートメントのサポート、ノンスカラ型(配列)、一部のオブジェクト指向機能(構造化型など)、JavaでのSQL関数(SQL/OLBおよびSQL/JRT)のサポートが追加されました。

この仕様改定で、RDBMSとしての必要な仕様の多くがカバーされています。

SQL:2003以降の規格概要

SQL:2003以降は、市場が成熟するとともにオープンソース型のRDBMSや、NoSQLの登場など多様性が高まっている状態です。標準SQLの改定内容はそんなに多くありませんが、取扱いデータの種類に応じて拡張が進められています。

SQL:2003 XML関連機能(SQL/XML)、ウィンドウ関数、シーケンスの標準化、自動生成された値を持つカラムなどが追加されました。

SQL:2006 SQLをXMLと共に使用するために、SQLのDBにXMLデータをインポートし、操作する方法を定義し、World Wide Web Consortium(W3C)が公開したXMLクエリ言語であるXQueryを使用して、アプリケーションのSQLコードにクエリを統合する方法も定義しました。

SQL:2008 カーソル定義外でのORDER BYを定義し、INSTEAD OFトリガ、TRUNCATE文、FETCH句を追加しました。

SQL:2011 時間データであるPERIOD FORを追加し、ウィンドウ関数とFETCH句を拡張しました。

SQL:2016 行パターンマッチ、多相テーブル関数、文字列フィールドに格納されたJSONデータの操作などを追加しました。

SQL:2019-2020 多次元配列(MDarray型および演算子)を追加しました。

SQL:2023 JSONデータ型(SQL/Foundation)、プロパティ・グラフ・クエリ(SQL/PGQ)を追加しました。

JSONとは?概要からJSONファイルフォーマットまで解説!

各RDBMSにおける標準SQLの対応状況とリファレンス

RDBMSはこれまでの製品との互換性を維持するための「方言」を提供するとともに、標準SQLの対応も進めています。標準SQLの対応状況は各社の製品の考え方によりますので、すべての標準規格が一律に実装されている訳ではありません。

RDBMSは各社の実装において「方言」があるため、それぞれの会社のSQLのコマンドや関数、演算子、ワイルドカードや記号などリファレンスマニュアルを参考にするといいでしょう。

Oracle Database Oracle Databaseは、製品リリースごとにドキュメントが完備されています。日本語情報は古いドキュメントに多く記載されていますので、参考にしましょう。

【参考】:Oracle Database ドキュメント 【参考】:Oracle Database 23cドキュメントサイト 【参考】:Oracle Database 19 SQL言語リファレンス: C Oracleと標準SQL

Microsoft SQL Server Microsoft SQL Serverは、独自のT-SQLと標準SQLのANSI SQLに対応しています。

【参考】:Microsoft SQL Server ドキュメント 【参考】:Microsoft SQL Server 技術ドキュメント

MySQL 標準SQLのANSI SQLの多くをカバーしています。動作モードをSQLモードで指定することができます。

【参考】:MySQL リファレンス: MySQL と標準 SQL との違い 【参考】:MySQL リファレンス: MySQL の標準への準拠 【参考】:MySQL リファレンス: サーバー SQL モード

IBM DB2 IBM DB2は、メインフレームから商用Unix、Linux、Windowsと多岐に渡りサポートされます。開発の歴史が長いので互換性を保って進化しています。

【参考】:IBM Db2 for z/OS 【参考】:IBM Db2 Linux, Unix and Windows 【参考】:IBM DB2 標準規格への準拠

PostgreSQL PostgreSQLは、標準SQLの大部分を忠実に実装しており、JSONにも対応しています。オープンソースで、無料で使用できる標準SQLのDBMSです。

【参考】:PostgreSQL Documentation 【参考】:PostgreSQL 15.4文書: 付録D SQLへの準拠

MySQLとは?特徴から使い方・学習方法まで詳しく解説!
PostgreSQL入門、複数のRDBMSを習得して更なる活躍を

これから学ぶ方は標準SQLから

img_historyofstandardsql_04

RDBMSには、それぞれの「方言」がありますが、基本的な構文や手続きは標準SQLに従っています。これからデータベースを学ぶ方は、現在多く利用されているリレーショナルデータベースをはじめに学ぶ機会が多いでしょう。

標準SQLを勉強することで、多くのRDBMSの基礎知識が得られるのでおすすめです。

SQLの勉強方法は?初心者におすすめの本や練習方法も解説
SQLの入門書を紹介!本の選び方やスキル習得のコツについても解説
SQLの資格6種!難易度や合格率は?データベースエンジニアの年収も紹介
気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT