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

MySQLで最初と最後の行を除外して、それ以外のすべての行を取得する方法

MySQLで最初と最後の行を除外して、それ以外のすべての行を取得する方法

MySQLでテーブルの最初と最後の行を除外し、それ以外のすべての行を取得するには、サブクエリとMIN()関数・MAX()関数を組み合わせて使用します。この記事では、実際のサンプルコードを使いながら手順をわかりやすく解説します。

サンプルテーブルの作成

まず、以下のSQL文を実行してテーブルを作成します。

mysql> create table DemoTable1917
    (
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentCode int,
    StudentMarks int
    );
Query OK, 0 rows affected (0.00 sec)

レコードの挿入

次に、INSERTコマンドを使用してテーブルにレコードを挿入します。

mysql> insert into DemoTable1917(StudentCode,StudentMarks) values(78,95);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1917(StudentCode,StudentMarks) values(78,96);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1917(StudentCode,StudentMarks) values(78,97);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1917(StudentCode,StudentMarks) values(78,98);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1917(StudentCode,StudentMarks) values(78,99);
Query OK, 1 row affected (0.00 sec)

テーブル内の全レコードを確認

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from DemoTable1917;

上記のクエリを実行すると、以下のような出力が得られます。

+-----------+-------------+--------------+
| StudentId | StudentCode | StudentMarks |
+-----------+-------------+--------------+
|         1 |          78 |           95 |
|         2 |          78 |           96 |
|         3 |          78 |           97 |
|         4 |          78 |           98 |
|         5 |          78 |           99 |
+-----------+-------------+--------------+
5 rows in set (0.00 sec)

最初と最後の行を除外するクエリ

ここからが本題です。以下のクエリを実行すると、最初と最後の行を除いたすべての行を取得できます。

mysql> select * from DemoTable1917
    where StudentId NOT IN
    (
    (
    select min(StudentId) from DemoTable1917 where StudentCode=78),
    (select max(StudentId) from DemoTable1917 where StudentCode=78)
    ) and StudentCode=78;

このクエリを実行すると、以下のような結果が得られます。

+-----------+-------------+--------------+
| StudentId | StudentCode | StudentMarks |
+-----------+-------------+--------------+
|         2 |          78 |           96 |
|         3 |          78 |           97 |
|         4 |          78 |           98 |
+-----------+-------------+--------------+
3 rows in set (0.00 sec)

クエリの仕組み

このクエリのポイントは以下の通りです。

  • MIN()関数:StudentIdの最小値(最初の行)を取得します。
  • MAX()関数:StudentIdの最大値(最後の行)を取得します。
  • NOT IN句:取得した最小値と最大値に該当する行を除外します。

実行結果を見ると、StudentIdが1(最小値)と5(最大値)の行が除外され、中間の3行だけが取得できていることがわかります。なお、サブクエリ内に「where StudentCode=78」という条件を加えることで、特定のグループごとに最初と最後の行を除外することも可能です。

  1. MySQLのテーブルからすべての行を削除する方法【TRUNCATE・DROP・DELETEの使い分け】

    MySQLでテーブル内のすべての行(レコード)を削除したい場合、主にTRUNCATE文またはDROP文を使用します。また、DELETE文でも同様の操作は可能ですが、その場合はWHERE句ですべての行を指定する必要があります。 TRUNCATEとDELETEの違い TRUNCATE文とDELETE文はどちらもテーブルの構造自体は残すため、削除後も同じテーブルにデータを再挿入できます。ただし、すべての行を削除する目的であれば、DELETE文よりもTRUNCATE文を使う方が一般的に推奨されます。 その理由は以下の通りです。 高速性: TRUNCATEはテーブルを一度削除して再作成する仕組みのため

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected