MySQLにSELECT TOPコマンドは存在しない?LIMIT句で上位N件のレコードを取得する方法
MySQLに「SELECT TOP」コマンドは存在しない
SQL Serverでは、上位N件のレコードを取得するために「SELECT TOP」という構文が用意されています。しかし、MySQLにはTOPという概念は存在しません。その代わりに、LIMIT句を使用することで同じ結果を得ることができます。
例えば、上位2件のレコードを取得したい場合、SQL Serverでは「TOP 2」と記述しますが、MySQLでは「LIMIT 2」を使用します。
LIMIT句の基本構文
SELECT *FROM yourTableName ORDER BY yourColumnName DESC LIMIT 2;
サンプルテーブルで動作を確認してみよう
ここからは、実際にサンプルテーブルを作成し、LIMIT句の動きを具体的に見ていきましょう。
ステップ1:テーブルを作成する
まず、以下のクエリでテーブルを作成します。
mysql> create table Top2Demo
- > (
- > Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
- > Name varchar(20),
- > Age int
- > );
Query OK, 0 rows affected (0.91 sec)
ステップ2:レコードを挿入する
次に、INSERTコマンドを使ってテーブルにデータを追加していきます。
mysql> insert into Top2Demo(Name,Age) values('Larry',23);
Query OK, 1 row affected (0.13 sec)
mysql> insert into Top2Demo(Name,Age) values('Bob',21);
Query OK, 1 row affected (0.10 sec)
mysql> insert into Top2Demo(Name,Age) values('Sam',19);
Query OK, 1 row affected (0.14 sec)
mysql> insert into Top2Demo(Name,Age) values('David',25);
Query OK, 1 row affected (0.15 sec)
mysql> insert into Top2Demo(Name,Age) values('Carol',22);
Query OK, 1 row affected (0.39 sec)ステップ3:全レコードを表示する
SELECT文を実行して、テーブル内のすべてのレコードを確認してみましょう。
mysql> select *from Top2Demo;
実行結果は以下の通りです。
+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 1 | Larry | 23 |
| 2 | Bob | 21 |
| 3 | Sam | 19 |
| 4 | David | 25 |
| 5 | Carol | 22 |
+----+-------+------+
5 rows in set (0.00 sec)
LIMIT 2で上位2件のレコードを取得する
それでは本題です。「LIMIT 2」を使って、年齢(Age)が高い順に上位2件のレコードを取得するクエリは以下のようになります。
mysql> SELECT * FROM Top2Demo ORDER BY Age DESC LIMIT 2;
実行結果はこちらです。
+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 4 | David | 25 |
| 1 | Larry | 23 |
+----+-------+------+
2 rows in set (0.00 sec)
このように、ORDER BY Age DESCで年齢の降順に並べ替えた結果から、上位2件(David:25歳、Larry:23歳)だけが返されていることが分かります。
まとめ:MySQLでの「上位N件」取得はLIMIT句を使う
- MySQLにはSQL Serverの「TOP」に相当するコマンドは存在しない
- 代わりにLIMIT句を使えば同じことが実現できる
ORDER BYと組み合わせることで、「〜順に上位N件」という取得も可能
なお、LIMIT句は「OFFSET」と組み合わせれば、ページネーション(ページ送り)の実装にも活用できます。大量データから必要な件数だけ効率よく取り出したい場面で非常に便利なので、ぜひ使いこなしてください。
-
MySQLでカンマ区切りの値から特定の数値を含むレコードをすべて選択する方法
MySQLで特定の数値を含むレコードを抽出するには?カンマ区切りで保存された値の中に、特定の数値が含まれているレコードをすべて取得したい場合は、concat() 関数と LIKE 演算子を組み合わせて使用します。基本の構文は以下のとおりです。select *from yourTableName where concat(,, yourColumnName, ,) like %,yourValue,%;この方法のポイント単純に LIKE %4% とすると、「14」や「40」など意図しない数値までマッチしてしまう可能性があります。そこで、列の値の前後を concat() でカンマで囲むことで、「4
-
MySQLで特定の番号を含むレコードをすべて選択する方法|FIND_IN_SET()関数の使い方
MySQLで、カンマ区切りの値の中に特定の番号が含まれているレコードをすべて抽出したい場合は、FIND_IN_SET() 関数を使用します。この関数は、文字列リストの中から指定した値が何番目に存在するかを返し、見つからない場合は 0 を返します。そのため、結果が 0 より大きいかどうかを条件にすることで、目的の番号を含むレコードだけを取得できます。ここでは、実際にテーブルを作成して動作を確認してみましょう。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table demo73 -> ( -> interest_id v