あなたはどっち派?ANSI-89 標準と ANSI-92 標準のメリット・デメリット

2024-04-08

SQL の ANSI-92 標準と ANSI-89 標準

ANSI-89 標準は、1989 年に制定された SQL の最初の標準です。この標準は比較的シンプルで、基本的なデータ操作機能のみを提供します。

ANSI-92 標準は、1992 年に制定された SQL の拡張版です。ANSI-89 標準の機能に加え、以下の機能が追加されました。

  • 外部結合
  • サブクエリ
  • 参照整合性

ANSI-92 標準は、ANSI-89 標準よりも機能が豊富で、より複雑なデータ操作が可能になりました。

ANSI-92 標準は、ANSI-89 標準よりも機能が豊富で、より複雑なデータ操作が可能であるにもかかわらず、ANSI-89 標準ほど広く採用されていません。

その理由は、以下のとおりです。

  • 多くのデータベース管理システム (DBMS) が、ANSI-92 標準のすべての機能をサポートしていない。
  • ANSI-92 標準の機能は、多くのアプリケーションにとって必要ない。
  • ANSI-89 標準は、ANSI-92 標準よりもシンプルで、学習しやすい。

これは、DBMS のサポート状況、アプリケーションのニーズ、学習曲線などの要因によるものです。

プログラミング例

以下の例は、ANSI-92 標準で追加された外部結合を使用する SQL クエリです。

SELECT *
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;

このクエリは、employees テーブルと departments テーブルを結合し、すべての従業員とその所属する部門情報を取得します。

ANSI-89 標準では、外部結合を使用できないため、このクエリを実行するには ANSI-92 標準が必要です。




ANSI-92 標準

SELECT *
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
SELECT employees.*, departments.*
FROM employees, departments
WHERE employees.department_id = departments.department_id;

ANSI-89 標準では、外部結合を使用できないため、上記のクエリのように WHERE 句を使用して結合条件を指定する必要があります。

ANSI-92 標準で追加されたその他の機能の例を以下に示します。

SELECT *
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

このクエリは、平均給与よりも高い給与を得ている従業員を取得します。

  • 型:
CREATE TABLE employees (
    employee_id INT,
    name VARCHAR(255),
    salary DECIMAL(10,2)
);

このクエリは、employees という名前のテーブルを作成し、従業員の ID、名前、給与を保存します。

ALTER TABLE employees
ADD FOREIGN KEY (department_id)
REFERENCES departments (department_id);

このクエリは、employees テーブルの department_id 列を departments テーブルの department_id 列と参照整合性で関連付けます。




機能ANSI-89 標準ANSI-92 標準
外部結合なしあり
サブクエリなしあり
なしあり
参照整合性なしあり
採用状況広く採用されている限定的に採用されている

ANSI-92 標準と ANSI-89 標準の違いを比較する方法は他にもあります。

  • 各標準の機能リストを比較する。
  • 各標準を使用して実行できるクエリを比較する。

sql join ansi-sql


pglogicalとDebeziumによるリアルタイムクロスデータベースクエリ

postgres_fdw は、PostgreSQL 9.1 以降で利用可能な公式の外国データラッパー (FDW) です。 FDW は、あたかもローカルテーブルであるかのように、リモートデータベースのテーブルにアクセスするための仕組みを提供します。 postgres_fdw を使用すると、以下のことができます。...


【初心者でも安心】Oracle SQL Developerで参照関係を簡単操作!3ステップガイド

Oracle SQL Developer を使用して、特定の表を参照する他の表を簡単に見つけることができます。 これを行うには、依存関係ビューと呼ばれる特別なビューを使用します。 依存関係ビューには、参照している表と参照されている表に関する情報が含まれています。...


Change Trackingを無効にしてEntity Frameworkのデータ挿入速度を劇的に向上させる

Bulk Insert を使用するEntity Framework Core 6.0 以降では、BulkInsert メソッドを使用して大量のデータを効率的に挿入できます。この方法は、従来の Add メソッドよりも大幅に高速なパフォーマンスを提供します。...


SQL Server Management Studio でクエリ結果をヘッダー付きで保存:3 つの簡単ステップ

CSV ファイルとして保存クエリを実行します。結果グリッドで、右クリックしてから **「結果をファイルに出力」**を選択します。「保存」 ダイアログボックスが開きます。「ファイル名」 に、保存するファイルの名前を入力します。「保存の種類」 で、**「CSV (コンマ区切り) (*.csv)」**を選択します。...


MariaDBで階層化されたコメントスレッドを表示する:CTEを使った再帰クエリの応用例

データベースで階層構造や循環構造を扱う場合、再帰クエリは非常に強力なツールとなります。再帰クエリは、自身を呼び出すことで、ネストされたデータ構造を効率的に処理することができます。MariaDBを含む多くのリレーショナルデータベース管理システム(RDBMS)では、再帰クエリを容易に実装するために、CTE(Common Table Expression)と呼ばれる機能を提供しています。CTEは、再帰クエリをより明確で読みやすく、メンテナンスしやすいモジュールとして定義することができます。...


SQL SQL SQL SQL Amazon で見る



SQLコーディング標準:読みやすく、保守しやすいコードを作るための指針

インデントと空白コードブロックをインデントして、構造を明確にする適切な空白を使って、コードを読みやすくする大文字と小文字予約語と関数は大文字で書くテーブル名、列名、変数は小文字で書く命名規則オブジェクトに分かりやすい名前をつける一貫性のある命名規則を使用する


INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOINの違い

MySQLのSELECTクエリは、データベースからデータを抽出する強力なツールです。複数のテーブルを結合することで、複数のテーブルから関連するデータをまとめて取得できます。結合の種類INNER JOIN: 両方のテーブルで共通する行のみを抽出します。