SQL を他のプログラミング言語と区別する最も明白な特徴は、コードが処理される順序です。ほとんどのプログラミング言語では、コードはコーディング順に処理されますが、SQL 言語では、最初に処理される句は FROM 句であり、SELECT ステートメントは最初に表示されますが、ほとんどの場合最後に処理されます。
各ステップで仮想テーブルが生成され、次のステップへの入力として使用されます。これらの仮想テーブルは、呼び出し元 (クライアント アプリケーションまたは外部クエリ) には使用できません。最後のステップで生成されたテーブルのみが呼び出し元に返されます。クエリで句が指定されていない場合、対応するステップはスキップされます。以下に、SQL Server 2000 および SQL Server 2005 に適用されるさまざまな論理手順を簡単に説明します。
Actipro CodeHighlighter (フリーウェア) によって作成されたコードの強調表示
-->(8)SELECT (9)DISTINCT (11)
(1) FROM [left_table]
(3) )
(2) ON
(4) WHERE
(5) GROUP BY
(6) WITH
(7) HAVING
(10)ORDER BY
論理クエリ処理ステージの概要 (実行順序)
FROM: FROM の最初の 2 つについて句 テーブルはデカルト積 (クロス結合) を実行して仮想テーブル VT1 を生成します
ON: VT1 に ON フィルターを適用します。
OUTER(JOIN): OUTER JOIN (CROSS JOIN または (INNER JOIN) に関連) が指定されている場合、保存されたテーブル: 左外部結合は左テーブルを予約テーブルとしてマークし、右外部結合は右テーブルを予約テーブルとしてマークします。完全外部結合 (両方のテーブルを保持テーブルとしてマーク) で一致しない行は、外部行として VT2 に追加され、FROM 句に 3 つ以上のテーブルが含まれている場合は、前の結合によって生成された結果テーブルが VT3 を生成します。すべてのテーブルが処理されるまで、次のテーブルに対して手順 1 から 3 を繰り返します。
WHERE フィルターを VT3 に適用します。
GROUP BY : GROUP を押します。 BY 句の列リストは、VT4 の行をグループ化して VT5 を生成します。HAVING:
SELECT: SELECT リストを処理して VT8 を生成します。
DISTINCT: VT8 から重複行を削除して VT9 を生成します。
ORDER BY: ORDER BY 句に従って VT9 の行を並べ替えます。 列リストを次のように並べ替えます。カーソル (VC10) を生成します。
TOP: VC10 の先頭から指定された数または割合の行を選択し、テーブル VT11 を生成し、呼び出し元に戻ります
注: ステップ 10、ORDER BY 句を押すと、列リストがソートされます。前のステップで返された行とカーソル VC10 を返します。このステップは、SELECT リストで列の別名を使用できる最初で唯一のステップです。代わりに有効なテーブルを返します。 SQL は集合理論に基づいており、コレクションは単にメンバーの論理的なコレクションであり、テーブルを並べ替えるクエリは、特定の値で整理されたデータを含むオブジェクトを返すことができます。 ANSI ではこのオブジェクトをカーソルと呼びます。このステップを理解することは SQL を正しく理解するための基礎となるため、ORDER BY 句を使用したクエリは使用できません。テーブル式には、ビュー、インライン テーブル値関数、サブクエリ、派生テーブル、および共有式が含まれます。たとえば、次のクエリは無効であり、エラー:
select *
from(select orderid,customerid from purposes order by orderid)
as d
以下のビューでもエラーが発生します
create view my_view
as
select *
fromorders
orderid による順序
SQL では、テーブル式で ORDER BY 句を含むクエリは許可されませんが、T-SQL には例外があります (TOP オプションを適用する)。
したがって、テーブル内の行に特定の順序を想定しないでください。つまり、行を順序付けする必要があることが確実でない限り、ORDER BY 句を指定しないでください。並べ替えにはコストがかかり、SQL Server は順序付けられたインデックス スキャンを実行するか、並べ替え演算子を使用する必要があります。
以上がSQL実行処理の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。