SQL

出典: フリー百科事典『ウィキペディア(Wikipedia)』
SQL
パラダイム 宣言型
登場時期 1974年
設計者 レイモンド・F・ボイス英語版
ドナルド・D・チェンバリン
最新リリース SQL:2023 / 2023年6月1日[1]
テンプレートを表示
SQLクエリ(UPDATE文)

SQLStructured Query Language[2][3][ˈɛs kjuː ˈɛl] ( )[2][ˈsiːkwəl] ( )[4] (RDBMS) 

SQL使RDBFSQLThe Third Manifesto - 

SQL[]


SQL1986 (RDBMS) 

ANSIISOSQL86SQL89SQL92SQL:1999SQL:2003SQL:2006SQL:2008SQL:2011SQL:2016SQL:2023SQL

1986
通称 別称 説明 規格
1986年 SQL86 SQL87 ANSIによって発表された最初の規約。1987年にISOによって批准された。 ANSI X3.135-1986
ISO 9075:1987[注釈 1]JIS X 3005:1987
1989年 SQL89   マイナーバージョン。 ISO 9075:1989
ANSI X3.135-1989 [注釈 2]JIS X 3005:1990
1992年 SQL92英語版 SQL2 メジャーバージョン ISO/IEC 9075:1992
ANSI X3.135-1992[注釈 1]JIS X 3005:1995
1995年 SQL/CLI   コールレベルインターフェース (Call Level Interface)
業界標準になった ODBC API のインタフェースに相当する機能を国際標準化した規格
1996年 SQL/PSM   永続格納モジュール (Persistent Storage Module)
一般的にストアドプロシージャと呼ばれる機能を国際標準化した規格
1999年 SQL:1999英語版
(SQL99)
SQL3 RDBMSのための完全な言語になることを目指した仕様[注釈 3] ISO/IEC 9075:1999

JIS X 3005-1:2002、JIS X 3005-2:2002

2003年 SQL:2003英語版  
  • SQL/MM (マルチメディア: フレームワーク、全文検索、空間データ (Spatial)、静止画像)
  • SQL/MED (外部データ管理: 非関係データ (順編成ファイル階層型データベースなど) や他社の関係データをSQLでアクセスするための規格)
  • SQL/OLB (オブジェクト言語バインディング: SQLJを標準化する。Javaプログラムに埋め込むSQL文)
  • XML関連の機能
  • ウィンドウ関数
  • 順序(シーケンス)の標準化と識別キー列に対する値の自動生成を行う列仕様の導入 (ID型)

(See Eisenberg et al.: SQL:2003 Has Been Published.)

2008年 SQL:2008英語版   ISO/IEC 9075-2:2008
JIS X 3005-1:2014
2011年 SQL:2011英語版   ISO/IEC 9075-2:2011
JIS X 3005-2:2015
2016年 SQL:2016英語版   ISO/IEC 9075-2:2016
2023年 SQL:2023英語版 ISO/IEC 9075-2:2023

SQLとオンライン処理[編集]


SQL

SQL[]


SQL

SQLSQLSQL(Embedded SQL/ESQL) ANSI

CAPIOpen Database Connectivity(ODBC) ANSIODBCSQL/CLI

LINQC# contextual keyword SQL

SQL[]


SQLODBCSQL

 () (I/O) 

SQLSQL:1999 (SQL99)  (SQL/PSM) 

 (RDBMS) SQL

SQLSQL/PSMRDBMS

SQL/PSM (DB2, MySQL)

RDBMS

PL/SQL (Oracle, DB2)

Transact-SQL (Adaptive Server Enterprise, Microsoft SQL Server)

PL/pgSQL (PostgreSQL)

PSQL (Firebird, InterBase)

SQL[]


SQL (RDBMS) SQLRDBMSSQLODBCJDBCAPISQL

SQL;Oracle Database  SQL*PlusPL/SQL/ Sybase/SQL Serverisql/osqlSQLGO;SQLSQL

SQL[]

[]


SQL3

 (DDL: data definition language)

 (DML: data manipulation language)

 (DCL: data control language)

SQLSQLSQL  (RDBMS)  (DBMS) 

コマンド文法[編集]

データ定義言語[編集]

  • CREATE (データベースオブジェクト(表、インデックス、制約など)の定義)
  • DROP (データベースオブジェクトの削除)
  • ALTER (データベースオブジェクトの定義変更)

データ操作言語[編集]

  • INSERT INTO (行データもしくは表データの挿入)
  • UPDATE 〜 SET (表を更新)
  • DELETE FROM (表から特定行の削除)
  • SELECT 〜 FROM 〜 WHERE (表データの検索、結果集合の取り出し)
    • 後述する「動的SQL」でのSELECT文には、一度の実行で1行の結果を取得する「単一行SELECT文」と、カーソルにより複数行の結果を取得する「カーソルSELECT文」がある。

列名と値を、対で指定

INSERT INTO 表名(列名1,列名2) VALUES(1,2)

を構成するすべての列に値を格納する場合は、列名の記述を省略可能

INSERT INTO 表名 VALUES (1, 2)

他表のデータを検索して格納

INSERT INTO 表名1 SELECT 列名1, 列名2 FROM 表名2 

更新

UPDATE 表名
 SET 列名2=2, 列名3=3
 WHERE 列名1=1

削除

DELETE FROM 表名
 WHERE 列名1=1

1行以上の検索

SELECT *
 FROM 表名
 WHERE 列名1 BETWEEN 1 AND 2
 ORDER BY 列名1

1行だけの検索

SELECT *
 INTO 受け取り変数 
 FROM 表名
 WHERE 列名1=1

取得行数を指定した検索

SELECT *
 FROM 表名
 LIMIT 取得行数

データ制御言語[編集]

  • GRANT (特定のデータベース利用者に特定の作業を行う権限を与える)
  • REVOKE (特定のデータベース利用者からすでに与えた権限を剥奪する)
  • SET TRANSACTION (トランザクションモードの設定(並行トランザクションの分離レベル (ISOLATION MODE) など))
  • BEGIN (トランザクションの開始)
  • COMMITトランザクションの確定)
  • ROLLBACK (トランザクションの取り消し)
  • SAVEPOINT (任意にロールバック地点を設定する)
  • LOCK (表などの資源を占有する)

カーソル定義・操作[編集]


SELECT1 SQL
  • DECLARE CURSOR (カーソル定義)
  • OPEN (カーソルのオープン)
  • FETCH (カーソルのポインタが指し示す位置の行データを取得し、ポインタを一行分進める。)
  • UPDATE (カーソルのポインタが指し示す位置の行データを更新する)
  • DELETE (カーソルのポインタが指し示す位置の行データを削除する)
  • CLOSE (カーソルのクローズ)
カーソル宣言例[編集]
DECLARE CR1 CURSOR FOR
 SELECT CLMA, CLMB, CLMC
  FROM TBL1
  WHERE CLMA BETWEEN :V開始値 AND :V終了値

※V開始値、V終了値は、埋め込み変数あるいはホスト変数と呼ばれ、埋め込みSQLの場合は、プログラム中のBEGIN DECLARE SECTIONEND DECLARE SECTIONの間で宣言する。

カーソルのオープン例[編集]
OPEN CR1

※カーソルのオープン前に、V開始値、V終了値には値を設定しておく。

行の取り出し例[編集]
FETCH CR1 INTO :V列A, :V列B, :V列C

検索条件に合致した行をすべて取り出すには、「データなし」になるまでFETCHを繰り返す。

※V列A, :V列B, :V列C は、埋め込み変数あるいはホスト変数と呼ばれ、埋め込みSQLの場合は、プログラム中のBEGIN DECLARE SECTIONEND DECLARE SECTIONの間で宣言する。

取り出した行の更新例

UPDATE TBL1
 SET CLMB=CLMB+1, CLMC=:V列C更新値
 WHERE CURRENT OF CR1

FETCHで位置付けた行を更新するには、UPDATE文でWHERE CURRENT OF カーソル名を指定する。

※V列C更新値は、埋め込み変数あるいはホスト変数と呼ばれ、埋め込みSQLの場合は、プログラム中のBEGIN DECLARE SECTIONEND DECLARE SECTIONの間で宣言する。

取り出した行の削除例

DELETE FROM TBL1
 WHERE CURRENT OF CR1

FETCHで位置付けた行を削除するには、DELETE文でWHERE CURRENT OF カーソル名を指定する。

カーソルのクローズ例

CLOSE CR1

動的SQL[編集]

動的SQLは、通常SQL文をRDBMSに対して送信の度にデータベースエンジンで実行可能な内部中間コードに翻訳する作業を事前に行うことによって、翻訳済みSQLコードを再度利用してSQL解析のオーバーヘッドを削減することと、SQL文をソースコードで固定せずにデータベースへのアクセス毎に構文を書き換えたい場合に、有用である。データ操作言語 (DML) ももちろん実行できるが、データ定義言語 (DDL) のようにデータベース製品の機能アップによって新しい命令が追加されるものは、プリプロセッサの対応作業が重荷になるため、ほとんどのデータベース製品ではDDL文は動的SQLにて実行することが一般的となっている。

  • PREPARE (文字列で与えたSQL文を解析・翻訳する)
  • EXECUTE (PREPAREで翻訳したSQL文を実行する)
パラメタなし
PREPARE PRESQL FROM 'DELETE FROM TBL1 WHERE CLMA=1'
  ↓
EXECUTE PRESQL

パラメタあり(1回のPREPAREで、EXECUTEの繰り返し実行が可能)
PREPARE PRESQL FROM 'DELETE FROM TBL1 WHERE CLMA=? AND CLMB=?'
 ↓
EXECUTE PRESQL USING :XCLMA,:XCLMB

埋め込みSQL[編集]

もともとカーソルは、埋め込みSQLでホスト言語(母言語)から結果集合を取得するために、都合のよい方法として考えられたものである。データベースと通信するためのリソースの割り当て確保や解放、1行ごとにホスト言語のループ処理で取得するための命令 (FETCH) などがある。

  • ALLOCATE (DEALLOCATE) DESCRIPTOR (データベースとホスト言語(母言語)間での通信領域の確保と解放。)
  • WHENEVER (エラー発生時の振る舞いを定義)
  • SQLSTATE (SQL文実行後の状態が保存される領域)
EXEC SQL INCLUDE SQLCA         END-EXEC.
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
77  XPARM              PIC X(3).
01  XTBL1.
  03  XCLMA            PIC X(3).
  03  XCLMB            PIC X(10). 
01  XTBL2.
  03  XCLM1            PIC S9(5) COMP-3.
  03  XCLM2            PIC S9(9) COMP.
EXEC SQL END   DECLARE SECTION END-EXEC.

    EXEC SQL
     DECLARE CR1 CURSOR FOR
      SELECT CLMA, CLMB FROM TBL1
       WHERE CLMA>=:XPARM
       ORDER BY CLMA
    END-EXEC.

    EXEC SQL WHENEVER SQLERROR GO TO ERR--PROC END-EXEC.

*   SQLの静的実行(カーソル操作例)
    MOVE  'ABC'    TO  XPARM.
    EXEC SQL OPEN CR1          END-EXEC.
    PERFORM TEST BEFORE
     UNTIL SQLCODE NOT = ZERO 
      EXEC SQL
       FETCH CR1 INTO :XCLMA, :XCLMB 
      END-EXEC
      IF SQLCODE = ZERO
       データ検索時の処理
       END-IF
    END-PERFORM.
    IF SQLCODE = 100
     EXEC SQL CLOSE CR1          END-EXEC
    END-EXEC.
*   SQLの動的実行(?パラメタ使用)
    EXEC SQL
     PREPARE PRESQL FROM
      'INSERT INTO TBL2 (CLM1, CLM2) VALUES(?, ?)'
    END-EXEC.
    MOVE ZERO       TO  XCLM2.
    PERFORM TEST AFTER
     VARYING XCLM1 FROM 1 BY 1
     UNTIL XCLM1 >= 10
      EXEC SQL
       EXECUTE PRESQL USING :XCLM1, :XCLM2
      END-EXEC
    END-PERFORM.
    GOBACK.
ERR--PROC.
    例外処理

3値論理[編集]


 SQL2 (TRUE, FALSE) 3 (TRUE, FALSE, UNKNOWN) 3Fortran 

[]


 Oracle 9i  CONNECT BY SQL 

主な SQL[編集]

脚注[編集]

注釈[編集]

  1. ^ a b 標題はいずれも Database Language SQL
  2. ^ 標題はいずれも Database Language SQL with Integrity Enhancement
  3. ^ 非スカラー型とオブジェクト指向機能については、いくらか論議を呼ぶことになり、いまだ広く支持されていない。

出典[編集]



(一)^ : 2023626, : 202361, : SQL:2023 is out, URL: https://peter.eisentraut.org/blog/2023/06/01/sql-2023-is-out

(二)^ abSQL  - . 2014614IT

(三)^ SQL vsPostgreSQL. 2024413

(四)^ SQL  - . 2014614DBM

(五)^ SQL:2008 now an approved ISO International Standard - Sybase Blog - Glenn Paulley - Id Rather Play Golf

参考文献[編集]

関連項目[編集]