4.1 制限

SQL クエリが返すデータが多すぎることが予想される場合は、事前に最大数を制限できます。結局のところ、テーブルには数千、さらには数百万の行が含まれる場合があります。

SQL では、 を使用してクエリの結果の行数を非常に簡単に制限できますLIMIT。このキーワードは SQL クエリの最後で使用され、次のようになります。

LIMIT quantity

ストアの製品のリストが含まれる製品テーブルに対してクエリを作成してみましょう。しかし、私たちのストアは非常に成功しており、多くの商品を販売しているため、答えの最初の 10 行だけを取得したいと考えています。そのリクエストは次のようになります。

SELECT * FROM product
LIMIT 10

そして、次のクエリ結果が得られます。

ID 名前 ブランド 価格 カウント
1 テーブル イケア 20.00 15
2 椅子 イケア 5.00 45
3 ソファー イケア 80.00 10
4 ベッド イケア 75.00 10
5 クローゼット ボッシュ 125.00 15
6 シェルフ シェルフ 25.00 114
7 テレビ LG 350.00 4
8 ランプ LG 15.00 100
9 ドレッサー イケア 99.00 10
10 ボッシュ 199.00 10

ここでは、最初の 5 行のみをリクエストします。そのリクエストは次のようになります。

SELECT * FROM product
LIMIT 5

次のクエリ結果が得られます。

ID 名前 ブランド 価格 カウント
1 テーブル イケア 20.00 15
2 椅子 イケア 5.00 45
3 ソファー イケア 80.00 10
4 ベッド イケア 75.00 10
5 クローゼット ボッシュ 125.00 15

4.2 オフセット

前回は、サーバー応答の行数を制限する方法を学びました。そして今では、product テーブルから数千行の代わりに、最初の 10 行を取得してユーザーに表示できるようになりました。それは完璧です。しかし、2 番目の 10 行を表示するにはどうすればよいでしょうか? そして3番目は?

LIMIT 20または と書くとLIMIT 30、サーバーはそれぞれ 20 行と 30 行を返しませんか?

この場合のために、SQL にはOFFSETサーバーに応答で N 行をスキップするように要求できる特別なキーワードがあります。このキーワードは SQL クエリの最後 ( の後LIMIT) で使用され、次のようになります。

OFFSET quantity

product テーブルにクエリを作成し、レコード 11 から 15 を取得してみます。つまり、サーバーに 5 行を返すように要求していますが、最初に応答の最初の 10 行をスキップします。そのリクエストは次のようになります。

SELECT * FROM product
LIMIT 5
OFFSET 10

次のクエリ結果が得られます。

ID 名前 ブランド 価格 カウント
十一 アームチェア ボッシュ 44.00 8
12 植木鉢 スマートフラワー 99.00 9
13 イケア 100.00 10

サーバーは 3 行のみを返しました。つまり、テーブルには合計 13 行があったことになります。サーバーは最初の 10 をスキップし、次の 5 を返しました。

4.3 個別の選択

もう 1 つの便利なキーワードは ですDISTINCT。テーブル内に重複レコードがあり、重複を削除したい場合に使用されます。

テーブル内の重複はどこから来たのでしょうか? テーブルには重複がないかもしれませんが、クエリの結果としては簡単です。販売しているすべての製品のブランドを返すクエリを作成してみましょう。そのリクエストは次のようになります。

SELECT brand FROM product

次のクエリ結果が得られます。

ブランド
イケア
イケア
イケア
イケア
ボッシュ
ボッシュ
LG
LG
イケア
ボッシュ
ボッシュ
スマートフラワー
イケア

このテーブルには重複した行があることが簡単にわかります。重複がないことを確認するため、キーワード を使用する必要がありますDISTINCT。修正されたリクエストは次のようになります。

SELECT DISTINCT brand
FROM product

次のクエリ結果が得られます。

ブランド
イケア
ボッシュ
LG
スマートフラワー

良くなったね。そうではありませんか?;)

4.4 注文方法

そして最後に並べ替えに入りました。クエリの結果を並べ替えるには、キーワード を使用する必要がありますORDER BY。厳密に言えば、これらは 2 つの単語ですが、本質は重要ではありません。2 つの単語、1 つの演算子。

これは、キーワード の後でWHERE、 と の前にLIMIT記述する必要がありますOFFSETORDER BYの後に記述するとLIMIT、SQL サーバーは単にエラーを返します。

一般に、この演算子は次のようになります。

ORDER BY column order

ここで、column はテーブル/ソート結果内の列の名前です。そしてその順序はソート順です。

並べ替え順序には次の 3 つのタイプがあります。

  • ASC(昇順から) - 昇順;
  • DESC(降順から) - 降順;
  • 指定されていません - 使用されますASC

価格で昇順に並べ替えられた製品のリストを返すクエリを作成してみましょう。そのリクエストは次のようになります。

SELECT * FROM product
ORDER BY price ASC
LIMIT 10

次のクエリ結果が得られます。

ID 名前 ブランド 価格 カウント
2 椅子 イケア 5.00 45
8 ランプ LG 15.00 100
1 テーブル イケア 20.00 15
6 シェルフ ボッシュ 25.00 114
十一 アームチェア ボッシュ 44.00 8
4 ベッド イケア 75.00 10
3 ソファー イケア 80.00 10
12 植木鉢 スマートフラワー 99.00 9
9 ドレッサー イケア 99.00 10
13 イケア 100.00 10

ソート順を指定しない場合も同じ結果が得られます。単語はスキップされますASC

4.5 複数の列にわたる ORDER BY

演算子をORDER BY使用すると、結果を複数の列で並べ替えることができます。これは、最初の列に多くの重複要素がある場合に非常に役立ちます。この演算子の一般的な形式は次のとおりです。

ORDER BY column 1 order 1, column 2 order 2, column 3 order 3

つまり、最初の列で並べ替えた後、近くに同じ値が複数ある場合、それらは 2 番目の列で並べ替えられ、以下同様になります。

製品をブランド別に、また同じブランドの製品を番号の降順に並べ替えるクエリを作成してみましょう。そのリクエストは次のようになります。

SELECT * FROM product
ORDER BY brand ASC, count
DESC

次のクエリ結果が得られます。

ID 名前 ブランド 価格 カウント
6 シェルフ ボッシュ 25.00 114
5 クローゼット ボッシュ 125.00 15
10 ボッシュ 199.00 10
十一 アームチェア ボッシュ 44.00 8
2 椅子 イケア 5.00 45
1 テーブル イケア 20.00 15
9 ドレッサー イケア 99.00 10
13 イケア 100.00 10
4 ベッド イケア 75.00 10
3 ソファー イケア 80.00 10
8 ランプ LG 15.00 100
7 テレビ LG 350.00 4
12 植木鉢 スマートフラワー 99.00 9

テーブルをよく見てください。行はブランド名 (アルファベット順) で並べ替えられており、同じブランド名の行は製品番号の降順 (最後の列) で並べ替えられています。