問題:
MySQLの結果セットの行数を制限したい。
例:
私たちのデータベースには、student
id
列にデータがあります 、first_name
、last_name
、およびage
。
id | first_name | last_name | 年齢 |
---|---|---|---|
1 | スティーブン | ワトソン | 25 |
2 | リサ | アンダーソン | 19 |
3 | アリス | ミラー | 19 |
4 | メアリー | ブラウン | 25 |
5 | ルーシー | ワトソン | 25 |
6 | マイケル | ジャクソン | 22 |
生徒の氏名と年齢を選択しましょう。ただし、返される行は3行に制限してください。
解決策:
SELECT first_name, last_name, age FROM student LIMIT 3;
クエリの結果は次のとおりです。
id | first_name | last_name | 年齢 |
---|---|---|---|
1 | スティーブン | ワトソン | 25 |
2 | リサ | アンダーソン | 19 |
3 | アリス | ミラー | 19 |
ディスカッション:
LIMIT句は、結果セットの行数を制限します。これはSELECTステートメントで使用され、通常はステートメントの最後にあります。 (ORDER BYもLIMITの前にリストする必要があります。)
必要な引数は、表示する行数だけです。この例では、LIMIT3は3行を含む結果セットを生成しました。 OFFSET引数で特に指定しない限り、この関数は常に最初の nを返します。 クエリ要件を満たす行。
LIMITのオプションのOFFSET引数は、返される行の数を示す引数の前に配置されます。 LIMITによって返される最初の行の位置を示します(つまり、「0」は最初の行、1は2番目の行など)。オフセットと行数はコンマで区切られます。
オフセットがゼロであるため、クエリは前のクエリと同じレコードを返します。 (ゼロはデフォルトのオフセット値です。)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
これらのクエリでは、結果の行は順序付けられていません。並べ替えられた結果セットから3つの行を選択する場合は、ORDER BY:
を使用します。SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
ここでは、最初に年齢(降順)、姓、名の順に行を並べ替えています。オフセット値を使用して、返された2番目の行から開始し、結果を3行に制限します。
first_name | last_name | 年齢 |
---|---|---|
ルーシー | ワトソン | 25 |
スティーブン | ワトソン | 25 |
マイケル | ジャクソン | 22 |
このクエリは、最初に年齢列に従って行を降順で並べ替えます。次に、last_name
で並べ替えます およびfirst_name
昇順。表を見ると、最年長の生徒(スティーブン、ルーシー、メアリー)が25歳であることがわかります。ただし、メアリーは最初の行であり、オフセットが1であるため、省略されています(つまり、2番目の行から開始しています)。彼女の名はスティーブンの前に来るので、ルーシーが最初になりました。 (スティーブンとルーシーの姓は同じであるため、順序は名で決まります。)マイケルは22歳で、2番目に年長の学生であり、3行の最後が返されます。