| SQL(構造化クエリ言語) | |
|---|---|
| パラダイム | 宣言的 |
| 家族 | クエリ言語 |
| デザイン: | ドナルド・D・チェンバリンレイモンド・F・ボイス |
| 開発者 | ISO/IEC JTC 1(合同技術委員会1)/ SC 32(小委員会32) / WG 3(作業部会3) |
| 初登場 | 1973 (1973年) |
| 安定版リリース | SQL:2023 / 2023年6月 (2023年6月) |
| タイピングの規律 | 静的、強い |
| OS | クロスプラットフォーム |
| Webサイト | www.iso.org/標準/76583.html |
| 主要な実装 | |
| 多くの | |
| 方言 | |
| 影響を受けた | |
| データログ | |
| 影響を受けた | |
| CQL、LINQ、SPARQL、 SOQL 、PowerShell、[ 1 ] JPQL、jOOQ、N1QL、GQL | |
| |
| SQL(ファイル形式) | |
|---|---|
| ファイル名拡張子 | .sql |
| インターネットメディアの種類 | |
| 開発者 | ISO / IEC |
| 初回リリース | 1986 (1986年) |
| フォーマットの種類 | データベース |
| 標準 | ISO/IEC 9075 |
| オープンフォーマット? | はい |
| Webサイト | www.iso.org/標準/76583.html |
| この記事は構造化クエリ言語に関するシリーズの一部です。 |
構造化照会言語( SQL ) ( / ˌ ɛ s ˌ k j u ˈ ɛ l / SQLと発音されます 。または/ ˈ s iː k w ə l /と発音されます)ⓘ「続編」) [ 4 ] [ 5 ]は、特にリレーショナルデータベース管理システムにおいて、データ管理に使用されるドメイン固有言語です構造化データ処理に有用です。
1970年代に導入されたSQLは、 ISAMやVSAMといった従来の読み書きAPIに比べて、主に2つの利点がありました。まず、 1つのコマンドで複数のレコードにアクセスするという概念を導入しました。次に、レコードへのアクセス方法(インデックスの有無など)を指定する必要がなくなりました。
もともとリレーショナル代数とタプルリレーショナル計算に基づいていたSQLは、多くの種類の文で構成されており、[ 6 ]非公式にはサブ言語に分類され、一般的にはデータクエリ言語(DQL)、データ定義言語(DDL)、データ制御言語(DCL)、データ操作言語(DML)と呼ばれています。[ 7 ]
SQLの適用範囲には、データクエリ、データ操作(挿入、更新、削除)、データ定義(スキーマの作成と変更)、データアクセス制御が含まれます。SQLは本質的に宣言型言語(4GL)ですが、手続き型要素も含まれています。
SQLは、エドガー・F・コッドのリレーショナルモデルを採用した最初の商用言語の一つでした。このモデルは、コッドが1970年に発表した影響力のある論文「大規模共有データバンクのためのリレーショナルデータモデル」で説明されています。[ 8 ]コッドが説明したリレーショナルモデル に完全に準拠しているわけではないにもかかわらず、SQLは最も広く使用されるデータベース言語となりました。[ 9 ] [ 10 ]
SQLは1986年に米国規格協会(ANSI)の標準規格となり、 1987年には国際標準化機構(ISO)の標準規格となりました。 [ 11 ]それ以来、この標準規格は複数回改訂され、より多くの機能が追加され、共通の拡張機能が組み込まれました。標準規格が存在するにもかかわらず、既存の実装は事実上すべてSQLに完全に準拠しておらず、ほとんどのSQLコードは、異なるデータベースシステムに移植する前に少なくとも何らかの変更が必要です。
SQLは、1970年代初頭にエドガー・F・コッド[ 12 ]からリレーショナルモデルについて学んだ後、ドナルド・D・チェンバレンとレイモンド・F・ボイスによってIBMで最初に開発されました。 [ 13 ]このバージョンは当初SEQUEL(Structured English Query Language)と呼ばれ、 IBMサンノゼ研究所のグループが1970年代に開発したIBMのオリジナルの準リレーショナルデータベース管理システムであるSystem Rに格納されたデータを操作および取得するために設計されました。[ 13 ]
チェンバレンとボイスがリレーショナルデータベース言語に初めて取り組んだのはSQUARE(Specifying Queries in A Relational Environment)でしたが、下付き/上付き表記法が使いにくかったため、使いにくかったです。1973年にサンノゼ研究所に移った後、彼らはSQUAREの続編の開発に着手しました。[ 12 ]元の名称であるSEQUELは、Ingresのクエリ言語であるQUELをもじったものと広く考えられていますが、[ 14 ]後に「SEQUEL」が英国のホーカー・シドレー・ダイナミクス・エンジニアリング・リミテッド社の商標であったため、母音を削除してSQLに変更されました。 [ 15 ] SQLという名称は後にStructured Query Language(構造化クエリ言語)の頭字語となりました。[ 16 ]
IBMは顧客のテストサイトでSQLをテストし、システムの有用性と実用性を判断した後、System Rプロトタイプに基づいてSystem/38、SQL/DS、IBM Db2などの商用製品の開発を開始し、それぞれ1979年、1981年、1983年に市販されました。[ 17 ] IBMの承認により、業界はQUELなどの代替手段からSQLに移行しました。[ 18 ]
1970年代後半、リレーショナル・ソフトウェア社(現オラクル社)は、コッド、チェンバリン、ボイスが提唱した概念の可能性に着目し、独自のSQLベースのRDBMSを開発しました。これは、米国海軍、中央情報局(CIA)、その他の米国政府機関への販売を狙ったものでした。1979年6月、リレーショナル・ソフトウェア社は、 VAXコンピュータ向けにSQLの商用実装として初めてOracle V2(バージョン2)を発表しました。
1986年までに、ANSIとISOの標準化団体は「データベース言語SQL」の言語定義を正式に採用しました。この標準規格の新版は、1989年、 1992年、1996年、1999年、 2003年、2006年、 2008年、2011年、 [ 12 ] 2016年、そして最近では2023年に発行されました。[ 19 ]
| SQL言語の改訂 |
|---|
SQLの実装はベンダー間で互換性がなく、必ずしも標準に完全に準拠しているわけではありません。特に、日付と時刻の構文、文字列の連結、NULL比較の大文字と小文字の区別はベンダーによって異なります。PostgreSQL [ 20 ]とMimer SQL [ 21 ]は標準に準拠するよう努めていますが、PostgreSQLはすべてのケースで標準に準拠しているわけではありません。たとえば、PostgreSQLで引用符で囲まれていない名前を小文字に変換することは、引用符で囲まれていない名前を大文字に変換することになっているSQL標準[ 22 ]と互換性がありません。 [ 23 ]したがって、標準によれば、は と同等であり、 と同等ではありません。 FooFOOfoo
一般的なSQL実装では、DATEやTIMEデータ型といった標準SQLの基本機能のサポートが省略されているのが一般的です。最も顕著な例であり、また商用および独自仕様のSQL DBMSとして最も普及しているものとしては、Oracle( は、[ 24 ] [ 25 ]DATEのように動作し、 型を持たない)[ 26 ]とMS SQL Server(2008年バージョン以前)が挙げられます。その結果、SQLコードを変更せずにデータベースシステム間で移植することはほとんど不可能です。 DATETIMETIME
データベース システム間の移植性が欠如している理由はいくつかあります。
SQLは1986年にANSIによってSQL-86 [ 28 ]として標準として採用され、1987年にはISOによって標準として採用されました。 [ 11 ]これはISO/IEC JTC 1、情報技術、小委員会SC 32、データ管理および交換によって保守されています。
1996年まで、米国国立標準技術研究所(NIST)のデータ管理標準プログラムは、SQL DBMSのSQL標準への準拠を認定していました。現在では、ベンダー各社が自社製品の準拠を自己認証しています。[ 29 ]
オリジナルの標準では、「SQL」の公式発音は頭字語/ˌɛ sˌ k juːˈɛ l /(「ess cue el 」)であると宣言されていました。[ 9 ]それにもかかわらず、多くの英語圏のデータベース専門家(ドナルド・チェンバレン自身を含む[ 30 ])は、 / ˈ s iː k w əl /(「sequel」)という頭字語のような発音を使用しており、 [ 31 ]これは言語のプレリリース開発名「SEQUEL」を反映しています。[ 13 ] [ 15 ] [ 30 ] SQL標準は、いくつかの改訂を経ています。
| 年 | 公式規格 | 通称 | コメント |
|---|---|---|---|
| 1986 1987 | ANSI X3.135:1986 ISO/IEC 9075 :1987 FIPS PUB 127 | SQL-86 SQL-87 | ANSIによって最初に公式化され、FIPS PUB 127 として採用されました。 |
| 1989 | ANSI X3.135-1989 ISO/IEC 9075:1989 FIPS PUB 127-1 | SQL-89 | 整合性制約を追加したマイナーリビジョンがFIPS PUB 127-1として採用されました。 |
| 1992 | ANSI X3.135-1992 ISO/IEC 9075:1992 FIPS PUB 127-2 | SQL-92 SQL2 | メジャーリビジョン(ISO 9075)、エントリレベルSQL-92、FIPS PUB 127-2として採用 |
| 1999 | ISO/IEC 9075:1999 | SQL:1999 SQL3 | 正規表現マッチング、再帰クエリ(推移閉包など)、トリガー、手続き型およびフロー制御ステートメントのサポート、非スカラー型(配列)、および一部のオブジェクト指向機能(構造化型など)、Java への SQL の埋め込み( SQL/OLB)とその逆(SQL/JRT) のサポートが追加されました。 |
| 2003 | ISO/IEC 9075:2003 | SQL:2003 | XML関連機能 ( SQL/XML )、ウィンドウ関数、標準化されたシーケンス、自動生成された値を持つ列 (ID 列を含む) を導入しました。 |
| 2006 | ISO/IEC 9075-14:2006 | SQL:2006 | 第14部を追加し、SQLをXMLと併用する方法を定義しています。SQLデータベースへのXMLデータのインポートと保存、データベース内でのXMLデータの操作、そしてXMLと従来のSQLデータの両方をXML形式で公開する方法を定義しています。さらに、アプリケーションは、ワールドワイドウェブコンソーシアム(W3C )が公開したXMLクエリ言語であるXQueryを使用して、SQLコードにクエリを統合し、通常のSQLデータとXML文書に同時にアクセスできるようになります。[ 32 ] |
| 2008 | ISO/IEC 9075:2008 | SQL:2008 | カーソル定義外でのORDER BYを合法化する。INSTEAD OFトリガー、TRUNCATE文、[ 33 ] FETCH句 を追加する。 |
| 2011 | ISO/IEC 9075:2011 | SQL:2011 | 時間データ(PERIOD FOR)を追加しました[ 34 ](詳細については、時間データベース#履歴を参照してください)。ウィンドウ関数とFETCH句の機能強化。[ 35 ] |
| 2016 | ISO/IEC 9075:2016 | SQL:2016 | 行パターンマッチング、多態的テーブル関数、文字列フィールドに格納された JSONデータに対する操作を追加します。 |
| 2019 | ISO/IEC 9075-15:2019 | SQL:2019 | パート15、多次元配列(MDarray型と演算子)を追加します |
| 2023 | ISO/IEC 9075:2023 | SQL:2023 | データ型 JSON (SQL/Foundation) を追加します。パート 16、プロパティ グラフ クエリ (SQL/PGQ) を追加します。 |
この規格は、一般的にISO/IEC 9075-n:yyyy Part n: title という形式で表記されます。あるいは、短縮形としてISO/IEC 9075と表記されます。関心のある方は、ISO、 [ 36 ] IEC、またはANSIから規格文書を購入できます。一部の古い草案は無料で入手できます。[ 37 ] [ 38 ]
ISO/IEC 9075は、ISO/IEC 13249: SQL マルチメディアおよびアプリケーション パッケージといくつかの技術レポートによって補完されます。
SQL 言語は、次のようないくつかの言語要素に細分化されます。
SQLは、リレーショナルデータベースに含まれるデータに対するクエリを実行するという特定の目的のために設計されています。SQLは、CやBASICのような命令型プログラミング言語ではなく、集合ベースの宣言型プログラミング言語です。ただし、標準SQLの拡張機能により、フロー制御構造などの手続き 型プログラミング言語機能が追加されています。
標準SQL/PSM拡張機能と独自SQL拡張機能に加えて、他の言語とのDBMS統合を通じて、多くのSQLプラットフォームで手続き型およびオブジェクト指向プログラミングが利用できます。SQL標準では、SQLデータベースでJavaコードをサポートするためにSQL/JRT拡張機能(Javaプログラミング言語のSQLルーチンと型)が定義されています。Microsoft SQL Server 2005は、SQLCLR (SQL Server共通言語ランタイム)を使用してデータベースでマネージド.NETアセンブリをホストしますが、以前のバージョンのSQL Serverは主にCで記述されたアンマネージド拡張ストアドプロシージャに制限されていました。PostgreSQLでは、 Perl、Python、Tcl、JavaScript(PL/V8)、Cなど、さまざまな言語で関数を記述できます。[ 40 ]
言語としてのSQLの代替と、リレーショナルモデル自体の代替を区別する必要があります。以下は、SQL言語の代替として提案されているリレーショナルモデルです。リレーショナルモデルの代替については、 ナビゲーションデータベースとNoSQLを参照してください。
分散リレーショナルデータベースアーキテクチャ(DRDA)は、1988年から1994年にかけてIBM内の作業グループによって設計された。DRDAは、ネットワーク接続されたリレーショナルデータベースが連携してSQL要求を満たすことを可能にする。[ 42 ] [ 43 ]
対話型ユーザーまたはプログラムは、ローカルRDBに対してSQL文を発行し、リモートRDBからデータとステータスインジケータのテーブルを応答として受け取ることができます。SQL文はコンパイルされ、リモートRDBにパッケージとして保存され、パッケージ名で呼び出されることもあります。これは、複雑で高頻度のクエリを発行するアプリケーションプログラムを効率的に動作させる上で重要です。特に、アクセス対象のテーブルがリモートシステムにある場合に重要です。
DRDAのメッセージ、プロトコル、および構造コンポーネントは、分散データ管理アーキテクチャによって定義されています。DRDAに基づく分散SQL処理は、現代の分散SQLデータベース とは異なります。
SQLは、その理論的基礎であるリレーショナルモデルとタプル計算からいくつかの点で逸脱しています。リレーショナルモデルではテーブルはタプルの集合ですが、SQLではテーブルとクエリ結果は行のリストです。同じ行が複数回出現する可能性があり、行の順序はクエリ(例えば、句LIMIT)で使用できます。批評家は、SQLは厳密に元の基礎に立ち返る言語に置き換えられるべきだと主張しています。例えば、ヒュー・ダーウェンとCJ・デイト著『第三の宣言』 (2006年、 ISBN 978-4-873-2555)を参照してください。 0-321-39942-0)。
初期の仕様では、主キーなどの主要な機能はサポートされていませんでした。結果セットに名前を付けることはできず、サブクエリも定義されていませんでした。これらは1992年に追加されました。[ 12 ]
合計型の欠如は、SQLのユーザー定義型を十分に活用するための障害となっていると言われています。例えば、JSONのサポートは、2016年に新しい標準によって追加される必要がありました。[ 44 ]
Nullの概念は議論の対象となっている。Nullマーカーは値の欠如を示し、整数列の0やテキスト列の空文字列とは異なる。Nullの概念はSQLにおける3値論理を強制するものであり、これは一般的な3値論理の具体的な実装である。[ 12 ]
もう一つのよくある批判は、重複行を許容することであり、 Pythonなどの言語との統合が困難になるという点です。これらの言語のデータ型は、解析とモジュール性の欠如という点で、データの正確な表現を困難にする可能性があるからです[ 12 ]。これは通常、テーブル内の行を一意に識別する1つ以上の列を持つ主キーまたは一意制約を宣言することで回避されます。
オブジェクトとリレーショナル間のインピーダンス不一致に似た意味で、宣言型 SQL 言語と、SQL が通常埋め込まれている手続き型言語との間に不一致が発生します。
SQL 標準では、3 種類のデータ型が定義されています(SQL/Foundation の 4.1.1 章)。
構築型ARRAYは、、(参照)、またはのいずれかです。ユーザー定義型は、MULTISET独自のコンストラクタ、オブザーバ、ミューテーター、メソッド、継承、オーバーロード、上書き、インターフェースなどを持つオブジェクト指向言語のクラスに相当します。定義済みデータ型は、実装によって本質的にサポートされています。 REFROW
CHAR)VARCHAR)CLOB)NCHAR)NCHAR VARYING)NCLOB)BINARY)VARBINARY)BLOB)NUMERIC、DECIMAL、SMALLINT、INTEGER)BIGINTFLOAT、、)REALDOUBLE PRECISIONDECFLOAT)DATE、TIME、TIMESTAMP)INTERVAL)「SEQUEL」という名称は誰かの弁護士からその人のものだという手紙を受け取ったため、当初の名称「SEQUEL」を「SQL」に変更しました。Structured Query Language(構造化照会言語)の頭文字をとってSQLに短縮し、製品はSQL/DSとして知られていました。
は標準規格への準拠を誇りとしています。SQL実装はANSI-SQL:2008標準に厳密に準拠しています。
各
値について、世紀、年、月、日、時、分、秒の情報を保存します。
DATE日時データ型は
…
DATE以下のSQL/DSおよびDB2データ型の列は、対応するOracleデータ型がないため、定義しないでください。...
TIMESQL (一般的な「sequel」ではなく、「ess cue ell」と正しく発音します)...