【初心者向け】SQL文の基礎まとめ

## はじめに

- 今回は改めてSQLについて学び直す機会があったので、SQLの基礎について書きたいと思います。

- 簡単なサンプルデータを使いつつ、解説とともに実行したデータを画像として貼っているので分かりやすくなっていると思います。

- 初心者の方で「SQLよく分からない」や「SQL知ってるけど学び直す機会を作ってもう一度知識を入れなおしておきたい」といった方向けに書きたいと思います。

## 実行環境

- [SQL Fiddle](http://sqlfiddle.com/)

※SQLが実行できる環境なら他のものでも問題ないです。

## 基本的なSQL文

- 下に簡単なサンプルデータを置いておきますので、試しながらやってみてください。

``` SQL:サンプルデータ
CREATE TABLE fruits
    (`id` int, `name` varchar(6), `price` int);
    
INSERT INTO fruits
    (`id`, `name`, `price`)
VALUES
    (01, 'apple', 150),
    (02, 'orange', 200),
    (03, 'kiwi', 350),
    (04, 'cherry', 400),
    (05, 'banana', 320),
    (06, 'grape', 550)
```

#### SELECT文

- SELECT文はデータベースからデータを取得するために使います。

```SQL:SELECT文
基本構文 SELECT 項目 FROM テーブル;

例 SELECT name FROM fruits;

```

- 例だとnameは項目でfruitsはテーブルとなるので、fruitsというテーブルからnameだけを取得してきます。(項目の部分を*(アスタリスク)にすることでデータを全て取得できるので試してみてください)

- このSQL文を実行すると以下の画像のようになります。
![SELECT.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594117/bf9d22ca-20fd-22ff-6348-72ca477754fb.png)

#### WHERE句

- このWHEREはSELECT文の後ろに記述して使います。これを使うことによって絞り込みができます。

- WHEREで使える比較演算子

| 比較演算子 | 説明 |
|:-:|:-:|
| =  | 等しい  |
| >  | 大きい  |
| <  | 小さい  |
| >= | 以上  |
| <= | 以下  |
| != | 等しくない  |
| <> | 等しくない  |

- WHEREで使える論理演算子

| 論理演算子 | 説明 |
|:-:|:-:|
| AND  | 2つの条件の両方が真  |
| OR   | 2つの条件のうち、どちらか一方が真 |
| NOT  | 式の結果を反転  |
| BETWEEN a AND b  | 対象がaとbの範囲内  |
| IN   | 対象が条件の1つに一致  |
| LIKE | 対象が条件に含まれる  |

```SQL:WHERE句
基本構文 SELECT 項目 FROM テーブル WHERE 条件;

例 SELECT name,price FROM fruits WHERE price >= 400;

```

- 例だとname,priceで名前と価格をfruitsというテーブルから取得し、WHEREで絞り込みをしてpriceが400以上のものだけを取得してきます。

- このSQL文を実行すると以下の画像のようになります。
![WHERE.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594117/72db7b6b-ad98-cbd3-ec0b-c92a3c2a4447.png)

#### DELETE文

- DELETE文はデータベースからデータを削除するために使います。

```SQL:DELETE文
基本構文 DELETE FROM テーブル WHERE 条件;

例 DELETE FROM fruits WHERE name = 'banana';
   SELECT name FROM fruits;

```

- 例だとfruitsというテーブルを取得し、WHEREで絞り込みをしてnameがbananaのものを削除します。

- このSQL文を実行してすると以下の画像のようになります。
![DELETE.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594117/453f02f0-32ec-33e7-ea82-4cef97c07381.png)

#### UPDATE文

- UPDATE文はデータベースのデータを更新するために使います。

```SQL:UPDATE文
基本構文 UPDATE テーブル SET 項目 = 値 WHERE 条件;

例 UPDATE fruits SET price = 600 WHERE name = 'orange';
   SELECT name,price FROM fruits;

```
- 例だとfruitsというテーブルを取得し、WHEREで絞り込みをしてnameがorangeのpriceを600に更新します。

- このSQL文を実行してすると以下の画像のようになります。
![UPDATE.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594117/2dfc86cc-87ad-2978-34bd-48df3d6fce35.png)

#### INSERT文

- INSERT文はデータベースにデータを追加するために使います。

```SQL:INSERT文
基本構文 INSERT INTO テーブル VALUES ('値','値','値'); 
//VALUESの値は追加したいデータによって変わります。

例 INSERT INTO fruits VALUES (07,'muscat',800);
   SELECT * FROM fruits;

```

- 例だとfruitsというテーブルを取得し、VALUESの中に記述した値をデータベースに追加します。

- このSQL文を実行してすると以下の画像のようになります。
![INSERT.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594117/d80619d2-8d3c-c55a-7031-de2fffddfc4b.png)

## データの並べ替え(ソート)

#### ORDER BY句

- ORDER BYはデータベースのデータを並べ替え(ソート)するために使います。

```SQL:ORDERBY
基本構文 SELECT 項目 FROM テーブル ORDER BY ソートしたい項目 ASC(昇順)かDESC(降順);
//昇順か降順を指定しなかった場合は昇順になります。

例 SELECT name,price FROM fruits ORDER BY price DESC;

```

- 例だとname,priceで名前と価格をfruitsというテーブルから取得し、ORDER BYでpriceを降順で並び替えます。

- このSQL文を実行してすると以下の画像のようになります。
![ORDERBY.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594117/7026fe5f-162f-75aa-aa1f-f3e2f0d02b30.png)

##データのグループ表示

#### GROUP BY句

- GROUP BYはデータベースのデータをグループ表示するために使います。

- GROUP BYでは下にあるサンプルデータを使用します。初めに使用していたサンプルデータに産地を追加で記述しています。

``` SQL:サンプルデータ
CREATE TABLE fruits
    (`id` int, `name` varchar(6), `price` int,`origin` varchar(8));
    
INSERT INTO fruits
    (`id`, `name`, `price`,`origin`)
VALUES
    (01,'apple', 150,'america'),
    (02,'orange', 200,'japan'),
    (03,'kiwi', 350,'america'),
    (04,'cherry', 400,'japan'),
    (05,'banana', 320,'france'),
    (06,'grape', 550,'japan');
```

```SQL:GROUPBY
基本構文 SELECT 項目 FROM テーブル GROUP BY グループにまとめる項目;

例 SELECT origin,SUM(price) FROM fruits GROUP BY origin;

```

- 例だとorigin,SUM(price)で産地とpriceの合計をfruitsというテーブルから取得し、GROUP BYでoriginの合計した価格を表示します。

- このSQL文を実行してすると以下の画像のようになります。
![GROUPBY.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594117/f27c1698-2a9a-06b0-3259-b2b1a201937d.png)

##テーブルの結合

テーブルの結合に関してはこの方の記事が分かりやすいので、下にリンクを貼らせていただきます。
[SQL素人でも分かるテーブル結合(inner joinとouter join)](https://qiita.com/naoki_mochizuki/items/3fda1ad6594c11d7b43c)

## 最後に

今回はSQL文の基礎を自分のアウトプットも兼ねてまとめました。
SQLは覚えることは多いですが、実際に手を動かしながら学んでいけばすぐに使えるようになると思います。
次回はまた何かしらのアウトプットか自分が興味のある面白そうな技術について書きたいと思っています。