【ORDER BY句とLIMIT句】#7 Webディレクター見習いが知識ゼロからSQLを学ぶ


こんにちは! 　saku-chanです!
このアカウントは、社会人1年目のWebディレクター見習い(初心者)がSQLを学ぶ成長記録になっています。
ひよっこから成長する過程を残し、ついでに皆さんからアドバイスを頂けたら良いな! 私と同じように知識ゼロからSQLを始める人の一つの指針になればいいな!という思いで作成しました。
ちなみに、ブログを含め記事などを書いた経験がないため読みづらい部分も多々あるかと思いますが、そこも含めて皆さまアドバイス頂けると嬉しいですmm

◆記事の内容は、**SQL初心者の自分が、同じような初心者の方でも理解しやすいように心がけながら、SQLの基本に関して学んだことを懇切丁寧に**記載しています◆

##目次
- [はじめに](https://qiita.com/saku-chan/items/c5970e6af275a00798fc#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)
- [ORDER BY句とは](https://qiita.com/saku-chan/items/c5970e6af275a00798fc#order-by%E5%8F%A5%E3%81%A8%E3%81%AF)
- [LIMIT句とは](https://qiita.com/saku-chan/items/c5970e6af275a00798fc#limit%E5%8F%A5%E3%81%A8%E3%81%AF)
- [まとめ](https://qiita.com/saku-chan/items/c5970e6af275a00798fc#%E3%81%BE%E3%81%A8%E3%82%81)
- [最後に](https://qiita.com/saku-chan/items/c5970e6af275a00798fc#%E6%9C%80%E5%BE%8C%E3%81%AB)

##はじめに
今回はSQLのSELECT文を構成する`ORDER BY句`と`LIMIT句`について勉強したことを記載します！
どちらも簡単なので、さくっといきます!
初めてSQLを勉強する方(プログラミング経験自体がなくてもOK)が気軽に読んでいただける記事になっています^^
ではスタート!

⇒[前回の記事【HAVING句】はこちら](/saku-chan/items/30de684ae6d0d8aae084)
⇒[前々回の記事【GROUP BY句】はこちら](/saku-chan/items/951d36e75bfce3fbcb1f)

⇒[記事一覧](/saku-chan/items/48d36b6ad60d63206a18)

##ORDER BY句とは
`ORDER BY句`は並び替えのために使用します。

具体例で説明していきますね!

今回使用するテーブルはこちらです。

Table名：quiz_2

|number|area | team_name|points|
|:-------------:|:-------------:|:------------:|:------------:|
|01| 東京| スマイル |2|
|02| 大阪|  たこ焼き |3|
|03|  東京 |  乃木坂 |1|
|04| 福岡 |  わんちーむ  |3|
|05|大阪 | しらんけど|7|
|06|  東京 |  ガールズ4 |3|
|07| 愛知| しゃちほこ  |4|

このテーブルに対して以下のクエリを実行すると、

```sql
SELECT area,team_name,points
FROM quiz_2 
ORDER BY points DESC
;
```

このようにpointsでソートされた結果を得ることが出来ます。

|area | team_name|points|
|:-------------:|:------------:|:------------:|
|大阪 | しらんけど|7|
| 愛知| しゃちほこ  |4|
| 大阪|  たこ焼き |3|
| 福岡 |  わんちーむ  |3|
|  東京 |  ガールズ4 |3|
| 東京| スマイル |2|
|  東京 |  乃木坂 |1|

ちなみに、`DESC`で降順を指定しています。
なので`DESC`を記載しない場合は昇順に並びます。
(`ASC`と記載しても昇順に並べることが出来ます。)

また、複数のカラムの値によって順番を変更することも可能です!
例えば下記のテーブルを使用してクエリを実行した時、

Table名：quiz_3

|number|area | team_name|points_1|points_2|
|:-------------:|:-------------:|:------------:|:------------:|:------------:|
|01| 東京| スマイル |2|4|
|02| 大阪|  たこ焼き |3|0|
|03|  東京 |  乃木坂 |1|3|
|04| 福岡 |  わんちーむ  |3|5|
|05|大阪 | しらんけど|7|6|
|06|  東京 |  ガールズ4 |3|2|
|07| 愛知| しゃちほこ  |4|3|

```sql
SELECT area,team_name,points
FROM quiz_3 
ORDER BY points_1 DESC,points_2 DESC
;
```

以下のように、先に記述したpoints_1で降順に並べた後points_2でさらに降順に並べることが出来ます。

|number|area | team_name|points_1|points_2|
|:-------------:|:-------------:|:------------:|:------------:|:------------:|
|05|大阪 | しらんけど|7|6|
|07| 愛知| しゃちほこ  |4|3|
|04| 福岡 |  わんちーむ  |3|5|
|06|  東京 |  ガールズ4 |3|2|
|02| 大阪|  たこ焼き |3|0|
|01| 東京| スマイル |2|4|
|03|  東京 |  乃木坂 |1|3|

<br>
さらに、`ORDER BY句`は`WHERE句`や`GROUP BY句`とも併用できるんです!
例えば`GROUP BY句`と一緒に使用した場合を例にあげてみます。

Table名：quiz_2

|number|area | team_name|points|
|:-------------:|:-------------:|:------------:|:------------:|
|01| 東京| スマイル |2|
|02| 大阪|  たこ焼き |3|
|03|  東京 |  乃木坂 |1|
|04| 福岡 |  わんちーむ  |3|
|05|大阪 | しらんけど|7|
|06|  東京 |  ガールズ4 |3|
|07| 愛知| しゃちほこ  |4|

上記のテーブルに対してareaごとの平均pointsを知りたい時、下記のようにクエリを記述します。

```sql
SELECT area,
　　　　AVG(points) AS 平均得点
FROM quiz_2 
GROUP BY area
ORDER BY 平均得点
;
```

結果は以下の通りです。

|area |平均得点|
|:-------------:|:-------------:|
| 東京|2|
| 福岡|3|
| 愛知| 4|
| 大阪|5|

areaでグループ分けし、それぞれの平均得点昇順に並べることが出来ました!


##LIMIT句とは
`LIMIT句`は取得データを制限するために使用します。

Table名：quiz_2

|number|area | team_name|points|
|:-------------:|:-------------:|:------------:|:------------:|
|01| 東京| スマイル |2|
|02| 大阪|  たこ焼き |3|
|03|  東京 |  乃木坂 |1|
|04| 福岡 |  わんちーむ  |3|
|05|大阪 | しらんけど|7|
|06|  東京 |  ガールズ4 |3|
|07| 愛知| しゃちほこ  |4|

このテーブルに対して、下記のようなクエリを実行すると、

```sql
SELECT area,team_name,points
FROM quiz_2 
LIMIT 3
;
```

このような結果を得ることが出来ます。

|number|area | team_name|points|
|:-------------:|:-------------:|:------------:|:------------:|
|01| 東京| スマイル |2|
|02| 大阪|  たこ焼き |3|
|03|  東京 |  乃木坂 |1|

実際は7レコードあるもののうち、`LIMIT句`で指定した3レコード分だけを抽出することが出来ています。

テーブルの中身を確認したい時にSELECT句ですべてを指定してしまうと、データベースに負荷をかけてしまうことになるので、`LIMIT句`を使用して確認することが多いです。

以上です！笑

##まとめ
- `ORDER BY句`は並び替えのために使用する
- `DESC`は降順にしたい時に使用する
- `ORDER BY句`は`WHERE句`や`GROUP BY句`とも併用できる
- `LIMIT句`は取得データを制限するために使用する

##最後に
これで一旦SELECT文に使用される句について全てまとめ終わりました！
次回以降はテーブルの結合やサブクエリなど、引き続きSELECT文に関しての記事を作成していく予定です。
ただ、3月以降忙しくなるため記事作成が滞ると思われます、、><
ではまた次回!

⇒[記事一覧](/saku-chan/items/48d36b6ad60d63206a18)