MySQL DQL 構文
DQL 構文の概要
DQL (データクエリ言語) ステートメントは、データベースからデータを取得するために使用される言語です。これは、データベース内のデータの更新、挿入、削除ではなく、主にデータ クエリとデータ分析に使用されます。DQL ステートメントは通常、特定の条件下でデータを取得し、集計計算、並べ替え、フィルター処理、結合などの操作を実行するために使用されます。
DQL ステートメントの主な目的は、データベースからデータを取得してクエリを実行し、特定の要件に従ってデータを分析して処理することです。DQL ステートメントを柔軟に使用することで、さまざまなデータ クエリと分析のニーズに応え、有用な情報と洞察を抽出できます。
DQL の基本的なクエリ構文
-
クエリステートメント (SELECT):
-
クエリ ステートメント (SELECT) は、データベース テーブルから必要なデータ行を取得するために使用されます。次に、クエリ ステートメントの詳細な説明を示します。
-
プロトタイプ: SELECT カラム 1、カラム 2、… FROM テーブル名 WHERE 条件
-
パラメータ:
- 列 1、列 2、...: クエリ対象の列名、オプションのパラメーター。列が指定されていない場合は、テーブル内のすべての列のデータが返されます。
- テーブル名: データをクエリするデータベース テーブルの名前。
- 条件: 取得するデータ行の条件 (オプションのパラメーター) を指定します。条件を満たすデータ行のみが取得されます。
-
オプション:
- 条件に基づいて、条件を満たすデータ行を取得できます。
- 条件を指定しない場合は、テーブル内のすべての行が取得されます。
- キーワード ORDER BY を使用して、クエリ結果の並べ替え順序を指定できます。
- キーワード DISTINCT を使用すると、重複した結果を除外できます。
例:
列名 id、name、および age を含む学生情報を格納する「students」という名前のテーブルがあるとします。20 歳以上の学生の名前と年齢を取得し、名前の昇順に並べ替えたいと考えています。クエリ文は次のとおりです。SELECT name, age FROM students WHERE age >= 20 ORDER BY name;
このステートメントは、「students」テーブルから年齢 20 以上の学生の名前と年齢を取得し、名前の昇順に並べ替えます。
-
DQL の高度な構文
除了基本的SELECT语句,DML语句SELECT还提供了一些扩展功能和选项,用于更灵活和精确地检索所需的数据。下面是一些常用的扩展功能:
-
条件フィルター:
-
プロトタイプ: SELECT カラム 1、カラム 2、… FROM テーブル名 WHERE 条件
-
パラメータ:
- 列 1、列 2、…: 必要なデータを返すために選択する列名または式を指定します。
- テーブル名: データをクエリするデータベース テーブルの名前。
- 条件: フィルタリングするデータ行の条件を指定し、返された行が条件に基づいて要件を満たしているかどうかを判断します。条件は、比較演算子 (=、<、>、IN、BETWEEN など) と論理演算子 (AND、OR、NOT など) を使用して組み合わせることができます。
-
オプション:
- WHERE 句は、FROM 句の後、GROUP BY 句または ORDER BY 句の前に指定する必要があります。
- 複数の条件を組み合わせ、論理演算子で接続して、より複雑な条件付きフィルターを構築できます。
例:
- 等号 (=) 演算子:
SELECT * FROM table WHERE column = value;
例:このクエリは、テーブル内の年齢が 25 歳のすべての顧客情報を
SELECT * FROM customers WHERE age = 25;
返します。customers
- 小なり (<) 演算子:
SELECT * FROM table WHERE column < value;
例:このクエリは、テーブル内の価格が 50 未満のすべての製品情報を
SELECT * FROM products WHERE price < 50;
返します。products
- 大なり (>) 演算子:
SELECT * FROM table WHERE column > value;
例:このクエリは、テーブル内の合計金額が 1,000 を超えるすべての注文情報を
SELECT * FROM orders WHERE total_amount > 1000;
返します。orders
- IN 演算子:
SELECT * FROM table WHERE column IN (value1, value2, ...);
例:このクエリは、テーブル内の ID 1、2、および 3 を持つ顧客情報を
SELECT * FROM customers WHERE id IN (1, 2, 3);
返します。customers
- BETWEEN 演算子:
SELECT * FROM table WHERE column BETWEEN value1 AND value2;
例:このクエリは、2021 年 1 月 1 日から 2021 年 1 月 31 日までの注文日を持つテーブル内の注文情報を
SELECT * FROM orders WHERE order_date BETWEEN '2021-01-01' AND '2021-01-31';
返します。orders
- AND 論理演算子:
SELECT * FROM table WHERE condition1 AND condition2;
例:このクエリは、価格が 50 より低く、在庫が 0 より大きいテーブル内の製品情報を
SELECT * FROM products WHERE price < 50 AND stock > 0;
返します。products
- OR 論理演算子:
SELECT * FROM table WHERE condition1 OR condition2;
例:このクエリは、テーブル内の 18 歳未満または 65 歳以上の顧客に関する情報を
SELECT * FROM customers WHERE age < 18 OR age > 65;
返します。customers
- 論理演算子ではありません:
SELECT * FROM table WHERE NOT condition;
例:このクエリは、テーブル内のステータスが「完了」以外のすべての注文情報を
SELECT * FROM orders WHERE NOT status = 'Completed';
返します。orders
- エイリアスの定義:
-
AS キーワードを使用して選択した列の別名を指定すると、よりわかりやすい列名が結果に表示されます。エイリアスは、列名または式に AS キーワードを使用して定義できます。例: SELECT カラム名 AS エイリアス FROM テーブル名。
-
-
並べ替え:
-
並べ替えは、DML ステートメント SELECT で一般的に使用される拡張関数であり、特定の列または式に従ってクエリ結果を昇順 (ASC) または降順 (DESC) に並べ替えることができます。並べ替えると、結果をよりよく理解して分析できるように、必要に応じてデータが正しい順序に並べられます。並べ替えの詳細な手順は次のとおりです。
-
プロトタイプ: SELECT カラム 1、カラム 2、… FROM テーブル名 ORDER BY カラム 1 [ASC|DESC]、カラム 2 [ASC|DESC]、…
-
パラメータ:
- 列 1、列 2、…: 並べ替える列名または式。並べ替え順序を定義するために使用されます。複数の列を指定して列の順序で並べ替えることができます。
- テーブル名: データをクエリするデータベース テーブルの名前。
- ASC: 昇順の並べ替え方法を指定します (オプション、デフォルトの並べ替え方法)。
- DESC: 降順ソート方法を指定します (オプション)。
-
オプション:
- ORDER BY 句は、SELECT ステートメントの FROM 句の後、GROUP BY 句の前に指定する必要があります。
- 1 つ以上の列をカンマで区切って並べ替えることができます。
- ASC または DESC キーワードを使用して並べ替え方法を指定できます。デフォルトは昇順です。
例:
学生情報を保存する「students」という名前のテーブルがあるとします。このテーブルには、名前、年齢、学年の列名が含まれています。学生情報を年齢による昇順に並べ替え、同じ年齢の場合は名前による昇順に並べ替えたいと考えています。並べ替えられたクエリ ステートメントは次のとおりです。SELECT name, age, grade FROM students ORDER BY age ASC, name ASC;
このクエリは、「students」テーブルから生徒の名前 (name)、年齢 (age)、学年 (grade) を選択し、年齢 (昇順) と名前 (昇順) の順に並べ替えます。まず学生を年齢に従って昇順に並べ替え、次に同じ年齢の場合は名前に従って昇順に並べ替えます。
-
-
-
ページングクエリ:
-
ページ分割されたクエリは、DML ステートメント SELECT で一般的に使用される拡張関数です。これを使用すると、クエリ結果で返されるデータ行の数を制限して、大規模なデータ セット内のページにデータを表示したり、結果セットのサイズを制限したりできます。ページ分割されたクエリにより、大量のデータを簡単に参照して表示できます
-
以下は、MySQL のページ分割されたクエリの構文の例です。
SELECT 列1, 列2, ... FROM 表名 LIMIT 起始行索引, 每页行数;
- パラメータ:
- Column1、Column2、…: 必要なデータを返すために選択する列名または式。
- テーブル名: データをクエリするデータベース テーブルの名前。
- 開始行インデックス: 開始行のインデックス位置を指定します。通常は、データベースに応じて最初の行 0 または 1 として表されます。
- ページあたりの行数: ページごとに返されるデータの行数を指定します。
例:
列名 id、name、および age を含む学生情報を格納する「students」という名前のテーブルがあるとします。各ページに 10 個のデータを表示し、3 ページ目のデータを取得したいと考えています。ページング クエリのクエリ ステートメントは次のとおりです。SELECT id, name, age FROM students LIMIT 20, 10;
このクエリは、「students」テーブルから学生の ID、名前、年齢を選択し、戻り値を行 21 (つまり、3 ページのデータ) から始まる 10 行に制限します。
- パラメータ:
-
-
集計関数:
-
集計関数は、結果セットの要約、計算、統計を作成するために DML ステートメント SELECT で使用される関数です。集計関数を使用すると、合計、平均、最大、最小などの計算など、選択した列または式に対して統計操作を実行できます。一般的に使用される集計関数とその関数は次のとおりです。
- SUM: 指定された列の合計を計算します。
SELECT SUM(column) FROM table;
例:
SELECT SUM(sales) FROM orders;
「orders」テーブルの売上列の合計が計算されます。- COUNT: 指定した列の行数をカウントします(NULL値を除く)。
SELECT COUNT(column) FROM table;
例:
SELECT COUNT(*) FROM customers;
「customers」テーブルの合計行数をカウントします。- AVG: 指定された列の平均を計算します。
SELECT AVG(column) FROM table;
例:
SELECT AVG(price) FROM products;
「products」テーブルの価格列の平均値が計算されます。- MAX: 指定された列の最大値を返します。
SELECT MAX(column) FROM table;
例:
SELECT MAX(quantity) FROM inventory;
「在庫」テーブルの数量列の最大値が返されます。- MIN: 指定された列の最小値を返します。
SELECT MIN(column) FROM table;
例:
SELECT MIN(age) FROM employees;
「employees」テーブルの年齢列の最小値が返されます。
-
-
グループ合計:
-
グループ化合計は、DML ステートメント SELECT で一般的に使用される拡張関数であり、指定された列または式に従ってグループ化し、各グループに集計関数を適用し、各グループの統計値を計算できます。グループ化された合計を通じて、クエリ結果の特定のカテゴリに従って要約されたデータを取得できます。以下は、グループ化合計の詳細な説明です。
-
プロトタイプ: SELECT カラム 1、カラム 2、…、集計関数 (カラム) FROM テーブル名 GROUP BY カラム 1、カラム 2、…
-
パラメータ:
- Column1、Column2、…: 選択に使用される列名または式。
- 集計関数 (列): 適用される集計関数 (SUM、COUNT、AVG、MAX、MIN など)。
- テーブル名: データをクエリするデータベース テーブルの名前。
- GROUP BY 列 1、列 2、…: 指定した列または式に従ってグループ化し、各グループ化の集計計算結果を計算します。
-
オプション:
- GROUP BY 句は、SELECT ステートメントの FROM 句の後に置き、WHERE 句の前に置く必要があります。
- 必要に応じて、グループ化基準として複数の列または式を指定し、複数のグループ化基準をカンマで区切ることができます。
- グループ化された結果セットでは、各グループに同じグループ化値を持つ行が含まれます。
例:
販売注文を格納する「orders」という名前のテーブルがあるとします。このテーブルには、order_id、customer_id、および order_total という列名が含まれています。注文を customer_id でグループ化し、各顧客の注文合計を計算したいと考えています。グループ化された合計のクエリ ステートメントは次のとおりです。SELECT customer_id, SUM(order_total) AS total_amount FROM orders GROUP BY customer_id;
このクエリは、「orders」テーブルから customer_id を選択し、SUM 関数を使用して各顧客の注文合計を計算します。GROUP BY 句を使用して、customer_id に基づいて order テーブルをグループ化し、各グループに集計計算が適用されるようにします。
-
-
-
接続クエリ:
-
結合クエリ (Join) は、DML ステートメント SELECT の一般的な操作であり、複数のテーブルを関連付け、共有列の値に基づいて複数のテーブルからデータを取得するために使用されます。結合クエリでは、複数のテーブルから関連データを取得して、より豊富で包括的なクエリ結果を得ることができます。次に、接続クエリの詳細を説明します。
-
プロトタイプ: SELECT カラム 1、カラム 2、… FROM テーブル 1 JOIN テーブル 2 ON テーブル 1. カラム = テーブル 2. カラム WHERE 条件
-
パラメータ:
- Column1、Column2、…: 必要なデータを返すために選択する列名または式。
- 表 1、表 2: 接続するデータベーステーブルの名前。
- ON 表 1.列 = 表 2.列: 接続条件を指定します。つまり、表 1 と表 2 の間に関連する列を指定します。
- WHERE 条件: オプション。特定の条件を満たすデータ行をさらにフィルタリングするために使用されます。
-
オプション:
- 接続クエリでは、INNER JOIN、LEFT JOIN、RIGHT JOIN などのさまざまな接続タイプを使用できます。ニーズに応じて適切な接続タイプを選択してください。
- 接続条件は接続を指定するためのキーです。接続条件は ON 句を使用して指定されます。通常、接続はテーブル 1 とテーブル 2 の間の列間の等価関係によって確立されます。
例:
注文情報と顧客情報を保存する 2 つのテーブルがあるとします。「orders」テーブルには列 order_id、customer_id、および order_total が含まれ、「customers」テーブルには列 customer_id と customer_name が含まれます。注文情報と各注文に対応する顧客名をクエリしたいのですが、クエリ文は次のとおりです。SELECT orders.order_id, orders.order_total, customers.customer_name FROM orders JOIN customers ON orders.customer_id = customers.customer_id;
このクエリ ステートメントは、内部結合 (INNER JOIN) を使用して、customer_id 列に基づいて「orders」テーブルと「customers」テーブルを関連付けます。同じ customer_id 値を共有する注文レコードと顧客レコードは、ON 句で結合条件を指定することによって関連付けられます。このようにして、クエリ結果には注文情報 (order_id、order_total) と対応する顧客名 (customer_name) が含まれます。
-
-
-
DQL構文の記述順序
DQL (データクエリ言語) ステートメントを記述する場合、構文は通常次の順序で記述されます。
-
SELECT 句: データベースから取得する列を指定します。
-
FROM 句: データ クエリのソース テーブルまたはビューを指定します。
-
WHERE 句: オプション。特定の条件でデータをフィルタリングするために使用されます。
-
GROUP BY 句: オプション。指定した列でグループ化するために使用されます。
-
HAVING 句: オプション。グループ化された結果を条件付きでフィルタリングするために使用されます。
-
ORDER BY 句: オプション。指定した列で結果を並べ替えるために使用されます。
-
LIMIT 句: 他のすべての句の後に、クエリ結果の数を制限するために使用されます。
DQL ステートメントを作成するときは、特定のニーズに応じて、WHERE 句、GROUP BY 句、HAVING 句、および ORDER BY 句を作成するかどうかを決定できます。これらの句の順序は、クエリの論理関係に従って調整できます。最終的なクエリ結果は、記述された DQL ステートメントに基づいて返されます。
DQL 構文の実行順序
DQL (データクエリ言語) ステートメントの実行順序は次のとおりです。
-
FROM 句: まず、データベース管理システム (DBMS) は、FROM 句で指定されたデータ テーブルまたはビューを取得します。
-
WHERE 句: 次に、DBMS は FROM 句によって返されたデータをフィルタリングし、WHERE 句で定義された条件に基づいて条件を満たす行を除外します。
-
GROUP BY 句: GROUP BY 句が存在する場合、DBMS は GROUP BY 句で指定された列に従ってフィルタリングされたデータをグループ化します。
-
HAVING 句: HAVING 句が存在する場合、DBMS は、HAVING 句で定義された条件に基づいて、グループ化されたデータをさらにフィルタリングします。
-
SELECT 句: DBMS は、SELECT 句で指定された列に基づいて、フィルタリングおよびグループ化されたデータから必要な列データを抽出します。
-
ORDER BY 句: ORDER BY 句がある場合、DBMS は ORDER BY 句で指定された列に従って結果を並べ替えます。
-
LIMIT 句: 最後に、LIMIT 句が存在する場合、DBMS は LIMIT 句で指定された数に基づいて返される結果セットの数を制限します。
上記は一般的な DQL ステートメントの実行順序ですが、実際の実行順序は DBMS に最適化された実行プランやクエリの処理方法によって異なる場合があることに注意してください。DBMS は、インデックスや内部並べ替えなどを使用してクエリのパフォーマンスを向上させるなど、可能な限りクエリを最適化します。したがって、実際の実行の効率を向上させるために実行順序を調整することができます。
要約する
DQL は、データベース データのクエリと取得を行うための重要なツールです。豊富な機能と柔軟性を備えており、さまざまなクエリ要件に応じて条件フィルタリング、並べ替え、集計計算などの操作を実行できます。DQL を合理的に使用すると、データ分析や意思決定支援のためにデータベースから有用なデータを抽出できます。