- SQL 句は、テーブルからレコードのセットまたはバンドルを取得するのに役立ちます。
- SQL 句は、テーブルの列またはレコードに条件を指定するのに役立ちます。
構造化照会言語で使用できるさまざまな句は次のとおりです。
- WHERE句
- 句ごとにグループ化
- Haveing 節
- 条項による順序
例を挙げて各条項を 1 つずつ見てみましょう。例ではクエリを記述するために MySQL データベースを使用します。
1. WHERE句
SQL の WHERE 句は、データ操作言語コマンドの 1 つである SELECT クエリで使用されます。 WHERE 句を使用すると、結果セットに表示される行数を制限できます。これは通常、レコードのフィルタリングに役立ちます。 WHERE 句の特定の条件を満たすクエリのみを返します。 WHERE句はSELECT、UPDATE、DELETE文などで使用されます。
SELECT クエリを使用した WHERE 句
アスタリスク記号は、テーブルからすべてのレコードのすべての列値を取得するために、SELECT クエリの WHERE 句とともに使用されます。
テーブルからすべてのレコードのすべての列値を取得するための選択クエリを使用した where 句の構文:
SELECT * FROM TABLENAME WHERE CONDITION;
要件に従って、選択した列のみを取得したい場合は、以下の構文を使用します。
SELECT COLUMNNAME1, COLUMNNAME2 FROM TABLENAME WHERE CONDITION;
次のデータを含む従業員テーブルについて考えてみましょう。
E_ID | 名前 | 給料 | 市 | 指定 | 入社の日 | 年 |
---|---|---|---|---|---|---|
1 | サクシ・クマリ | 50000 | ムンバイ | プロジェクトマネージャー | 2021-06-20 | 24 |
2 | テジャスウィニ・ナイク | 75000 | デリー | システムエンジニア | 2019-12-24 | 23 |
3 | アヌジャ・シャルマ | 40000 | ジャイプール | マネージャー | 2021-08-15 | 26 |
4 | アヌシュカ・トリパティ | 90000 | ムンバイ | ソフトウェアテスター | 2021-06-13 | 24 |
5 | ルチャ・ジャグタップ | 45000 | バンガロール | プロジェクトマネージャー | 2020-08-09 | 23 |
6 | ルトゥジャ・デシュムク | 60000 | バンガロール | マネージャー | 2019-07-17 | 26 |
7 | バヴィスカーの声 | 55000 | ジャイプール | システムエンジニア | 2021-10-10 | 24 |
8 | シェイクがいるよ | 45000 | プネ | ソフトウェアエンジニア | 2020-09-10 | 26 |
9 | スワティ・クマリ | 50000 | プネ | ソフトウェアテスター | 2021-01-01 | 25 |
10 | マユリ・パテル | 60000 | ムンバイ | プロジェクトマネージャー | 2020-10-02 | 24 |
十一 | シムラン・カンナ | 45500 | コールハープル | 人事部 | 2019-01-02 | 26 |
12 | シヴァニ・ワーグ | 50500 | デリー | ソフトウェア開発者 | 2016-09-10 | 25 |
13 | キラン・マヘシュワリ | 50000 | ナシック | 人事部 | 2013-12-12 | 23 |
14 | テジャル・ジャイン | 40000 | デリー | プロジェクトマネージャー | 2017-11-10 | 25 |
15 | モヒニ・シャー | 38000 | プネ | ソフトウェア開発者 | 2019-03-05 | 二十 |
例 1:
従業員の給与が 50000 を超える従業員のレコードをすべて取得するクエリを作成します。
クエリ:
mysql> SELECT * FROM employees WHERE Salary > 50000;
上記のクエリは、従業員の給与が 50000 を超える従業員のレコードをすべて表示します。給与が 50000 未満の場合は、条件に従って表示されません。
次の出力が得られます。
予想される出力どおり、従業員の給与が 50000 を超えるレコードのみが表示されます。従業員のテーブルには、指定された条件を満たすレコードが 6 つあります。
例 2:
従業員のレコードを更新するクエリを作成し、従業員の都市名がジャイプールである場合、更新された名前を「Harshada Sharma」として設定します。
クエリ:
mysql> UPDATE employees SET Name = 'Harshada Sharma' WHERE City = 'Jaipur';
上記のクエリは、従業員の名前を「Harshada Sharma」に更新します。従業員の都市はジャイプールです。
レコードが更新されたかどうかを確認するには、選択クエリを実行します。
jsonファイル
mysql> SELECT * FROM employees;
従業員のテーブルには、従業員の都市が「ジャイプール」であるレコードが 1 つだけあります。レコードの ID は 3 であり、指定された条件を満たします。したがって、指定された条件に従って、従業員 ID 3 の従業員の名前が「Harshada Sharma」に変更されます。
例 3:
従業員の入社日が「2013-12-12」である従業員のレコードを削除するクエリを作成します。
クエリ:
mysql> DELETE FROM employees WHERE Date_of_Joining = '2013-12-12';
上記のクエリは、入社日が「2013-12-12」である従業員の従業員詳細を削除します。
上記のクエリの結果を確認するために、選択クエリを実行します。
mysql> SELECT *FROM employees;
従業員のテーブルには、従業員の入社日が「2013-12-12」であるレコードが 1 つだけあります。レコードの ID は 13 であり、指定された条件を満たします。したがって、指定された条件に従って、従業員 ID 13 の従業員が従業員テーブルから削除されます。
2. 句によるグループ化
Group By 句は、類似した種類のレコードを構造化クエリ言語のグループに配置するために使用されます。構造化クエリ言語の Group by 句は、Select ステートメントとともに使用されます。 Group by 句は、SQL ステートメントの where 句の後に配置されます。 Group By 句は、集計関数 (max ()、min ()、avg ()、sum ()、count ()) とともに特別に使用され、1 つまたは複数の列に基づいて結果をグループ化します。
Group By 句の構文は次のとおりです。
SELECT * FROM TABLENAME GROUP BY COLUMNNAME;
上記の構文はテーブルからすべてのデータまたはレコードを選択しますが、クエリで指定された列名に基づいてグループ内のすべてのデータまたはレコードを配置します。
集計関数を使用した Group By 句の構文:
SELECT COLUMNNAME1, Aggregate_FUNCTION (COLUMNNAME) FROM TABLENAME GROUP BY COLUMNNAME;
例を使用して Group By 句を理解しましょう。
次のデータを含む従業員テーブルについて考えてみましょう。
E_ID | 名前 | 給料 | 市 | 指定 | 入社の日 | 年 |
---|---|---|---|---|---|---|
1 | サクシ・クマリ | 50000 | ムンバイ | プロジェクトマネージャー | 2021-06-20 | 24 |
2 | テジャスウィニ・ナイク | 75000 | デリー | システムエンジニア | 2019-12-24 | 23 |
3 | アヌジャ・シャルマ | 40000 | ジャイプール | マネージャー | 2021-08-15 | 26 |
4 | アヌシュカ・トリパティ | 90000 | ムンバイ | ソフトウェアテスター | 2021-06-13 | 24 |
5 | ルチャ・ジャグタップ | 45000 | バンガロール | プロジェクトマネージャー | 2020-08-09 | 23 |
6 | ルトゥジャ・デシュムク | 60000 | バンガロール | マネージャー | 2019-07-17 | 26 |
7 | バヴィスカーの声 | 55000 | ジャイプール | システムエンジニア | 2021-10-10 | 24 |
8 | シェイクがいるよ | 45000 | プネ | ソフトウェアエンジニア | 2020-09-10 | 26 |
9 | スワティ・クマリ | 50000 | プネ | ソフトウェアテスター | 2021-01-01 | 25 |
10 | マユリ・パテル | 60000 | ムンバイ | プロジェクトマネージャー | 2020-10-02 | 24 |
十一 | シムラン・カンナ | 45500 | コールハープル | 人事部 | 2019-01-02 | 26 |
12 | シヴァニ・ワーグ | 50500 | デリー | ソフトウェア開発者 | 2016-09-10 | 25 |
13 | キラン・マヘシュワリ | 50000 | ナシック | 人事部 | 2013-12-12 | 23 |
14 | テジャル・ジャイン | 40000 | デリー | プロジェクトマネージャー | 2017-11-10 | 25 |
15 | モヒニ・シャー | 38000 | プネ | ソフトウェア開発者 | 2019-03-05 | 二十 |
例 1:
従業員テーブルのすべてのレコードを表示し、結果を年齢列に基づいてグループ化するクエリを作成します。
クエリ:
mysql> SELECT * FROM employees GROUP BY Age;
上記のクエリは、employees テーブルのすべてのレコードを年齢列ごとにグループ化して表示します。
次の出力が得られます。
例 2:
従業員テーブルのすべてのレコードを役職と給与でグループ化して表示するクエリを作成します。
1ヶ月は何週間ですか
クエリ:
mysql> SELECT * FROM employees GROUP BY Salary, Designation;
上記のクエリは、従業員テーブルのすべてのレコードを表示しますが、給与と役職列ごとにグループ化されています。
次の出力が得られます。
集計関数を使用した Group By 句の例
例 1:
特定の職務に従事している従業員の数をリストし、結果を従業員の職務ごとにグループ化するクエリを作成します。
クエリ:
mysql> SELECT COUNT (E_ID) AS Number_of_Employees, Designation FROM employees GROUP BY Designation;
上記のクエリは、指定とその指定に従事する従業員のそれぞれの数を表示します。これらの結果はすべて、指定列によってグループ化されます。
次の出力が得られます。
予想される出力に従って、それぞれの従業員数を含む指定が表示されます。
例 2:
従業員の給与の合計を従業員の年齢ごとにグループ化して都市ごとに表示するクエリを作成します。
クエリ:
mysql> SELECT SUM (Salary) AS Salary, City FROM employees GROUP BY City;
上記のクエリは、まず各都市で働く給与の合計を計算し、次にそれぞれの給与を含む給与合計を年齢列ごとにグループ化して表示します。
次の出力が得られます。
期待した出力どおり、従業員が所属する都市に応じた従業員の給与の合計が表示されます。 2 人の従業員が同じ都市に所属する場合、それらは 1 つのグループになります。
3. Haveing 節:
テーブルの列に条件を設定する必要がある場合は、SQL の WHERE 句を使用します。ただし、その時点で Group By 句の列に条件を使用したい場合は、列の条件として Group By 句とともに HAVING 句を使用します。
構文:
TABLENAME GROUP BY COLUMNNAME HAVING CONDITION;
次のデータを含む従業員テーブルについて考えてみましょう。
C言語の文字列配列
E_ID | 名前 | 給料 | 市 | 指定 | 入社の日 | 年 |
---|---|---|---|---|---|---|
1 | サクシ・クマリ | 50000 | ムンバイ | プロジェクトマネージャー | 2021-06-20 | 24 |
2 | テジャスウィニ・ナイク | 75000 | デリー | システムエンジニア | 2019-12-24 | 23 |
3 | アヌジャ・シャルマ | 40000 | ジャイプール | マネージャー | 2021-08-15 | 26 |
4 | アヌシュカ・トリパティ | 90000 | ムンバイ | ソフトウェアテスター | 2021-06-13 | 24 |
5 | ルチャ・ジャグタップ | 45000 | バンガロール | プロジェクトマネージャー | 2020-08-09 | 23 |
6 | ルトゥジャ・デシュムク | 60000 | バンガロール | マネージャー | 2019-07-17 | 26 |
7 | バヴィスカーの声 | 55000 | ジャイプール | システムエンジニア | 2021-10-10 | 24 |
8 | シェイクがいるよ | 45000 | プネ | ソフトウェアエンジニア | 2020-09-10 | 26 |
9 | スワティ・クマリ | 50000 | プネ | ソフトウェアテスター | 2021-01-01 | 25 |
10 | マユリ・パテル | 60000 | ムンバイ | プロジェクトマネージャー | 2020-10-02 | 24 |
十一 | シムラン・カンナ | 45500 | コールハープル | 人事部 | 2019-01-02 | 26 |
12 | シヴァニ・ワーグ | 50500 | デリー | ソフトウェア開発者 | 2016-09-10 | 25 |
13 | キラン・マヘシュワリ | 50000 | ナシック | 人事部 | 2013-12-12 | 23 |
14 | テジャル・ジャイン | 40000 | デリー | プロジェクトマネージャー | 2017-11-10 | 25 |
15 | モヒニ・シャー | 38000 | プネ | ソフトウェア開発者 | 2019-03-05 | 二十 |
例 1:
従業員の名前、給与、従業員の最高給与が 40000 を超える都市を表示するクエリを作成し、結果を指定ごとにグループ化します。
クエリ:
mysql> SELECT Name, City, MAX (Salary) AS Salary FROM employees GROUP BY Designation HAVING MAX (Salary) > 40000;
次の出力が得られます。
上記の出力は、従業員の給与が 40000 を超える従業員の名前、給与、および都市が指定ごとにグループ化されていることを示しています。 (同様の呼称を持つ従業員は 1 つのグループに配置され、他の呼称を持つ従業員は別のグループに配置されます)。
例 2:
従業員の名前と従業員の給与の合計が 45000 を超える役職を表示し、結果を都市ごとにグループ化するクエリを作成します。
クエリ:
mysql> SELECT Name, Designation, SUM (Salary) AS Salary FROM employees GROUP BY City HAVING SUM (Salary) > 45000;
次の出力が得られます。
上記の出力は、従業員の名前、役職、および給与を示しています。都市ごとにグループ化された給与の合計が 45000 を超えています。 (都市が似ている従業員は 1 つのグループに配置され、都市が似ていない従業員は別個に配置されます)。
4. 条項による注文
SQL で何かを並べ替える場合は、ORDER BY 句を使用します。 SQL の ORDER BY 句は、テーブルの特定の列に基づいてデータを並べ替えるのに役立ちます。これは、ORDER BY 句を実行している特定の列に格納されているすべてのデータが並べ替えられることを意味します。対応する列の値が、前の手順で値を取得した順序で表示されます。
ご存知のとおり、並べ替えとは昇順または降順のいずれかを意味します。同様に、ORDER BY CLAUSE は、要件に従ってデータを昇順または降順に並べ替えます。データは常に昇順に並べ替えられます。 ASCキーワード ORDER by 句とともに使用され、 DESC キーワード レコードを降順に並べ替えます。
デフォルトでは、ソート順序について言及しなかった場合、SQL でのソートは ORDER BY 句を使用して ASCENDING 順に行われます。
レコードを並べ替えるための ORDER BY 句の例に進む前に、まず、例を理解しやすくするために構文を見ていきます。
asc および desc キーワードを使用しない ORDER BY 句の構文:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMNAME;
昇順にソートするための ORDER BY 句の構文:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME ASC;
降順にソートするための ORDER BY 句の構文:
SELECT COLUMN_NAME1, COLUMN_NAME2 FROM TABLE_NAME ORDER BY COLUMN_NAME DESC;
次のデータを含む従業員テーブルがあるとします。
E_ID | 名前 | 給料 | 市 | 指定 | 入社の日 | 年 |
---|---|---|---|---|---|---|
1 | サクシ・クマリ | 50000 | ムンバイ | プロジェクトマネージャー | 2021-06-20 | 24 |
2 | テジャスウィニ・ナイク | 75000 | デリー | システムエンジニア | 2019-12-24 | 23 |
3 | アヌジャ・シャルマ | 40000 | ジャイプール | マネージャー | 2021-08-15 | 26 |
4 | アヌシュカ・トリパティ | 90000 | ムンバイ | ソフトウェアテスター | 2021-06-13 | 24 |
5 | ルチャ・ジャグタップ | 45000 | バンガロール | プロジェクトマネージャー | 2020-08-09 | 23 |
6 | ルトゥジャ・デシュムク | 60000 | バンガロール | マネージャー | 2019-07-17 | 26 |
7 | バヴィスカーの声 | 55000 | ジャイプール | システムエンジニア | 2021-10-10 | 24 |
8 | シェイクがいるよ | 45000 | プネ | ソフトウェアエンジニア | 2020-09-10 | 26 |
9 | スワティ・クマリ | 50000 | プネ | ソフトウェアテスター | 2021-01-01 | 25 |
10 | マユリ・パテル | 60000 | ムンバイ | プロジェクトマネージャー | 2020-10-02 | 24 |
十一 | シムラン・カンナ | 45500 | コールハープル | 人事部 | 2019-01-02 | 26 |
12 | シヴァニ・ワーグ | 50500 | デリー | ソフトウェア開発者 | 2016-09-10 | 25 |
13 | キラン・マヘシュワリ | 50000 | ナシック | 人事部 | 2013-12-12 | 23 |
14 | テジャル・ジャイン | 40000 | デリー | プロジェクトマネージャー | 2017-11-10 | 25 |
15 | モヒニ・シャー | 38000 | プネ | ソフトウェア開発者 | 2019-03-05 | 二十 |
例 1:
従業員テーブルの従業員指定の昇順でレコードを並べ替えるクエリを作成します。
クエリ:
mysql> SELECT * FROM employees ORDER BY Designation;
ここの SELECT クエリでは、レコードを並べ替えるために ORDER BY 句が列 'Designation' に適用されていますが、昇順で並べ替えるために ORDER BY 句の後に ASC キーワードを使用しませんでした。したがって、asc キーワードを指定しない場合、デフォルトではデータは昇順でソートされます。
次の出力が得られます。
予想される出力どおり、レコードは従業員の指定の昇順で表示されます。
例 2:
従業員テーブルから従業員の名前と給与を昇順で表示するクエリを作成します。
クエリ:
mysql> SELECT Name, Salary FROM employees ORDER BY Salary ASC;
ここの SELECT クエリでは、レコードを並べ替えるために ORDER BY 句が「Salary」列に適用されます。 ASC キーワードを使用して従業員の給与を昇順に並べ替えました。
次の出力が得られます。
YouTubeビデオをvlcでダウンロード
すべてのレコードは従業員の給与の昇順で表示されます。
例 3:
クエリを作成して、employees テーブルに格納されている従業員名の降順でデータを並べ替えます。
クエリ:
mysql> SELECT * FROM employees ORDER BY Name DESC;
ここでは、ORDER BY 句と SELECT クエリを Name 列に適用してデータを並べ替えています。データを降順に並べ替えるために、ORDER BY 句の後に DESC キーワードを使用しました。
次の出力が得られます。
すべてのレコードが従業員名の降順で表示されます。