サブクエリを使ってMySQLのEmployeeテーブルから最大給与と2番目に大きい給与を取得する方法
サブクエリ(副問い合わせ)を利用すると、Employeeテーブルから最大給与と2番目に大きい給与を簡単に取得できます。この記事では、テーブルの作成からデータの挿入、サブクエリによる上位2つの給与の抽出まで、手順を追ってわかりやすく解説します。
1. テーブルを作成する
まず、従業員情報を格納するためのテーブルを作成します。テーブル作成用のクエリは以下のとおりです。
mysql> create table EmployeeMaxAndSecondMaxSalary
-> (
-> EmployeeId int,
-> Employeename varchar(20),
-> EmployeeSalary int
-> );
Query OK, 0 rows affected (0.88 sec)
2. レコードを挿入する
次に、INSERTコマンドを使ってテーブルに複数のレコードを挿入します。
mysql> insert into EmployeeMaxAndSecondMaxSalary values(1,'John',34566); Query OK, 1 row affected (0.20 sec) mysql> insert into EmployeeMaxAndSecondMaxSalary values(2,'Bob',56789); Query OK, 1 row affected (0.17 sec) mysql> insert into EmployeeMaxAndSecondMaxSalary values(3,'Carol',44560); Query OK, 1 row affected (0.26 sec) mysql> insert into EmployeeMaxAndSecondMaxSalary values(4,'Sam',76456); Query OK, 1 row affected (0.29 sec) mysql> insert into EmployeeMaxAndSecondMaxSalary values(5,'Mike',65566); Query OK, 1 row affected (0.14 sec) mysql> insert into EmployeeMaxAndSecondMaxSalary values(6,'David',89990); Query OK, 1 row affected (0.19 sec) mysql> insert into EmployeeMaxAndSecondMaxSalary values(7,'James',68789); Query OK, 1 row affected (0.12 sec) mysql> insert into EmployeeMaxAndSecondMaxSalary values(8,'Robert',76543); Query OK, 1 row affected (0.13 sec)
3. テーブルの全レコードを確認する
SELECT文を使って、テーブル内のすべてのレコードを表示して確認しましょう。
mysql> select *from EmployeeMaxAndSecondMaxSalary;
実行結果は以下のとおりです。
+------------+--------------+----------------+ | EmployeeId | Employeename | EmployeeSalary | +------------+--------------+----------------+ | 1 | John | 34566 | | 2 | Bob | 56789 | | 3 | Carol | 44560 | | 4 | Sam | 76456 | | 5 | Mike | 65566 | | 6 | David | 89990 | | 7 | James | 68789 | | 8 | Robert | 76543 | +------------+--------------+----------------+ 8 rows in set (0.00 sec)
4. サブクエリで最大給与と2番目に大きい給与を取得する
それでは、サブクエリを使用して最大給与と2番目に大きい給与を取得してみましょう。クエリは以下のとおりです。
mysql> select (select max(EmployeeSalary) from EmployeeMaxAndSecondMaxSalary) MaximumSalary,
-> (select max(EmployeeSalary) from EmployeeMaxAndSecondMaxSalary
-> where EmployeeSalary not in(select max(EmployeeSalary) from
EmployeeMaxAndSecondMaxSalary)) as SecondMaximumSalary;
クエリの仕組み:
- 1つ目のサブクエリは、MAX()関数によってテーブル全体の中で最も高い給与を返します。
- 2つ目のサブクエリは、NOT IN句で最大値を除外した上で再度MAX()関数を適用することにより、2番目に大きい給与を算出しています。
実行結果として、上位2つの給与が表示されます。
+---------------+---------------------+ | MaximumSalary | SecondMaximumSalary | +---------------+---------------------+ | 89990 | 76543 | +---------------+---------------------+ 1 row in set (0.00 sec)
このように、サブクエリとMAX()関数、NOT IN句を組み合わせることで、最大値だけでなく2番目に大きい値もシンプルなクエリで柔軟に取得できます。
-
MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法
あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82 -> (
-
MySQLデータベースの作成と使い方を徹底解説!初心者向け基本ステップ
MySQLデータベース操作の基本ステップMySQLのインストールが完了し、SQL文の入力方法を理解したら、いよいよデータベースへアクセスできるようになります。ここでは、データベース内のテーブルからデータを取得するまでの一連の手順を順番に見ていきましょう。サーバーへの接続データベースの作成テーブルの作成テーブルへのデータ投入テーブルからのデータ取得既存のデータベースを確認する新しいデータベースを作成する前に、まず環境にすでに存在するデータベースを把握しておくことが重要です。以下のクエリを実行することで、現在利用可能なデータベースの一覧を確認できます。クエリmysql> SHOW DATAB