MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのLIMITで最初と最後の行レコードを取得する方法を解説

MySQLでは、LIMIT句とUNIONを組み合わせることで、テーブルの最初の行と最後の行のレコードを1つのクエリで簡単に取得できます。この記事では、実際にサンプルテーブルを作成しながら、その手順をわかりやすく解説します。

1. サンプルテーブルの作成

まず、従業員情報を格納するテーブルを作成します。以下のCREATE TABLE文を実行してください。

mysql> create table FirstAndLastDataDemo
    -> (
    -> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> EmployeeName varchar(20),
    -> EmployeeAge int
    -> );
Query OK, 0 rows affected (0.59 sec)

このテーブルは、自動採番されるEmployeeId(主キー)、従業員名を格納するEmployeeName、年齢を格納するEmployeeAgeの3つのカラムで構成されています。

2. テストデータの挿入

次に、INSERT文を使ってレコードを挿入していきます。

mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('John',23);
Query OK, 1 row affected (0.15 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Bob',13);
Query OK, 1 row affected (0.11 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Larry',24);
Query OK, 1 row affected (0.14 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Sam',14);
Query OK, 1 row affected (0.18 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Mike',31);
Query OK, 1 row affected (0.10 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('James',18);
Query OK, 1 row affected (0.16 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Maxwell',28);
Query OK, 1 row affected (0.17 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('David',27);
Query OK, 1 row affected (0.12 sec)
mysql> insert into FirstAndLastDataDemo(EmployeeName,EmployeeAge) values('Chris',22);
Query OK, 1 row affected (0.19 sec)

これで合計9件のレコードが登録されました。

3. 登録データの確認

SELECT文ですべてのレコードを表示して確認しましょう。

mysql> select *from FirstAndLastDataDemo;

実行結果は以下の通りです。

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 1          | John         | 23          |
| 2          | Bob          | 13          |
| 3          | Larry        | 24          |
| 4          | Sam          | 14          |
| 5          | Mike         | 31          |
| 6          | James        | 18          |
| 7          | Maxwell      | 28          |
| 8          | David        | 27          |
| 9          | Chris        | 22          |
+------------+--------------+-------------+
9 rows in set (0.00 sec)

4. LIMITとUNIONで最初と最後の行を取得する

ここからが本題です。最初の行と最後の行を同時に取得するには、2つのSELECT文をUNIONで結合します。ポイントは次の通りです。

  • 最初の行LIMIT 1で先頭の1件を取得
  • 最後の行LIMIT 8,1のように「オフセット8から1件」を指定することで、9件目(最終行)を取得

実際のクエリは以下のようになります。

mysql> (SELECT *from FirstAndLastDataDemo LIMIT 1)
    -> UNION
    -> (SELECT *from FirstAndLastDataDemo LIMIT 8,1);

実行すると、最初と最後の行だけが表示されます。

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 1          | John         | 23          |
| 9          | Chris        | 22          |
+------------+--------------+-------------+
2 rows in set (0.00 sec)

補足:LIMIT構文と注意点

LIMIT オフセット, 件数という書き方では、オフセット分の行をスキップしてから指定した件数を取得します。今回の例では全9件中8行をスキップしているため、9行目(最終行)が取得できる仕組みです。

なお、LIMIT単体では並び順が保証されないため、意図した順序で最初と最後を取得したい場合は、各SELECT文にORDER BYを明示的に指定しておくと安全です。また、総行数が事前にわからない場合は、ORDER BY EmployeeId DESC LIMIT 1のように降順ソートと組み合わせる方法も有効です。

  1. MySQLで最大・最小の給与行を選択するクエリの書き方

    MySQLで最大・最小の給与行を取得する方法テーブルから給与が最も高い行と最も低い行を同時に取得したい場合は、サブクエリとMIN()関数・MAX()関数を組み合わせます。さらに、最大値と最小値の両方を一度に扱うためにUNION ALLを使用します。ここでは、テーブル作成から結果確認までの手順をサンプルコードとともに解説します。1. サンプルテーブルの作成まず、従業員名と給与を格納するテーブルを作成しましょう。mysql> create table DemoTable    -> (    -> E

  2. MySQLでSELECT文を使ってレコードを挿入する方法

    MySQLでSELECT文を使用したレコード挿入の基本MySQLでは、INSERT INTO SELECT文を使うことで、別のテーブルからSELECT文で取得したデータをそのまま新しいテーブルに挿入できます。この方法は、テーブル間でのデータコピーや、条件に合致するレコードだけを抽出して登録したい場合に非常に便利です。ここでは、実際の手順をサンプルコードとともに詳しく解説していきます。ステップ1:元となるテーブルを作成するまず、データのコピー元となるテーブル「DemoTable1」を作成します。mysql> create table DemoTable1