1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLの実行順序について簡単にまとめてみた

Posted at

クエリの構文順序(書き方)は必ずしも実行順序と一致しません。データベースがクエリを処理する際の内部的な手順は、次のようなステップで行われます。

SQLクエリの論理的な実行順序

  1. FROM句

    • まず、どのテーブルやデータソースからデータを取得するかが決定されます。必要なテーブルが結合されるのもこの段階です。
  2. ON句(結合条件)

    • 複数のテーブルが結合されている場合、ON句を使って結合条件が評価されます。JOINが行われる際の条件をここで定義します。
  3. JOIN句

    • 複数のテーブルがある場合、それらを結合(JOIN)します。INNER JOINLEFT JOINなどの結合がこのステップで処理されます。
  4. WHERE句

    • 結合が行われた後、WHERE句の条件で行のフィルタリングが行われます。指定された条件に一致する行だけが残ります。
  5. GROUP BY句

    • データを集計する際に、どの列を基準にグループ化するかが決まります。このステップでデータがグループ化され、グループごとの集計結果を生成する準備が進められます。
  6. HAVING句

    • グループ化されたデータに対して、さらに条件を指定してフィルタリングを行います。HAVING句は、GROUP BYによって生成されたグループに適用されます。
  7. SELECT句

    • このステップで、クエリで指定された列や式が評価されます。つまり、表示するカラムがここで決定されます。データの選択は、この段階で行われます。
  8. DISTINCT句

    • SELECTで取得する行の中から、重複を取り除くためにDISTINCTが実行されます。
  9. ORDER BY句

    • 最終的な結果セットを指定されたカラムや順序に従って並び替えます。
  10. LIMIT句

  • 結果セットの行数を制限するためのLIMIT句が適用され、表示されるデータの行数が決まります。

実行順序のイメージ

たとえば、以下のSQLクエリを考えてみましょう。

SELECT name, COUNT(*)
FROM employees
INNER JOIN departments ON employees.dept_id = departments.id
WHERE employees.salary > 5000
GROUP BY departments.name
HAVING COUNT(*) > 10
ORDER BY name ASC
LIMIT 5;

このクエリの実行順序は次の通りです:

  1. FROM: employeesdepartmentsテーブルを指定。
  2. JOIN: employees.dept_iddepartments.idINNER JOIN
  3. WHERE: employees.salary > 5000でフィルタリング。
  4. GROUP BY: 部門名でグループ化(departments.name)。
  5. HAVING: COUNT(*) > 10の条件を適用。
  6. SELECT: nameCOUNT(*)を選択。
  7. ORDER BY: nameで昇順にソート。
  8. LIMIT: 結果を上位5行に制限。

まとめ

SQLクエリは、SELECT文を記述する順番とは異なる順序で処理されます。まずデータの取得や結合を行い、その後フィルタリングやグループ化が行われ、最後に結果を選択してソート・制限する流れです。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?