データベース、SQL・MySQLの基礎（データの登録〜並び替えて参照）

##テーブルへデータの登録
テーブルが用意できたら、次はテーブルへデータを登録する。
データの登録はINSERTを利用する。構文は次の通り。

```sql
INSERT INTO テーブル名(
  カラム名1,
  カラム名2,
  カラム名3
)VALUES(
  データ1,
  データ2,
  データ3
);
```

上記を踏まえ、早速テーブルにデータを登録する。

```sql
INSERT INTO languages(
  Id,
  language,
  purpose,
  use
)VALUES(
  1,
  'Java',
  '業務システム',
  'バックエンド'
);
```

尚、INSERTは一度で複数のデータを登録する事も可能。

```sql
INSERT INTO languages(
  Id,
  language,
  purpose,
  use
)VALUES(
  2,
  'SQL',
  'データベース',
  'バックエンド'
),(
  3,
  'HTML',
  'テキスト',
  'フロントエンド'
),(
  4,
  'CSS',
  '装飾',
  'フロントエンド'
);
```

##データの参照
テーブルに登録できたデータを参照したい時に使用。
参照するにはSELECTを使用。構文は以下の通り。

```sql
SELECT カラム名 FROM テーブル名
```
テーブルのデータを全て参照する場合は以下を使用。

```sql
SELECT * FROM languages
```
カラムを指定して参照する場合は以下を使用。

```sql
SELECT language FROM languages
```

##データの更新
テーブルのデータを更新するために使用。UPDATEを使用する。構文は以下の通り。

```sql
UPDATE テーブル名 SET
  列名1 = データ1,
  列名2 = データ2,
  列名3 = データ3
WHERE
  更新するレコードを特定する条件
```
構文の中にある「WHERE」という句は、条件を指定するためのもの。
「WHERE以降のレコードを特定する条件」は「WHERE句」と呼ばれ、たとえば、「IDが1のレコードを更新する」というときに利用する。
WHERE句を指定しないことも可能。指定しない場合は、すべてのレコードが更新される。
全データを一律同じ値にするということは稀なので、通常はUPDATE文にはWHERE句を付ける。

```sql
UPDATE languages SET
  purpose = 'アプリケーション'
WHERE
  Id = 1;
```

##データの削除
データの削除をしたい時に使用。DELETEを使用する。構文は以下の通り。

```sql
DELETE FROM テーブル名 WHERE 削除するレコードを特定する条件
```
DELETE文もUPDATE文と同様で、WHERE句で削除対象となるレコードを指定して削除を行う。
WHERE句がない場合は、全データが削除されるので注意。

例えば、Idが１のデータを削除する場合は以下のようになる。

```sql
DELETE FROM authors WHERE Id = 1;
```

##色々なSELECT文
SELECTはWHERE句を追記し条件を追加することで、色々な参照を行える。
> =　 ⇨ 等価
> <> ⇨ 非等価
> &gt; ⇨ より大きい
> < ⇨ より小さい
> &gt;= ⇨ 以上
> <= ⇨ 以下
> AND ⇨ 論理積。両方が成り立つ
> OR ⇨ 論理和。どちらかが成り立つ
> NOT ⇨ 論理否定
> LIKE ⇨ 対象のフィールドがパターンに一致
> BETWEEN x AND y ⇨ 対象のフィールドがxとyの範囲内
> IN ⇨ 対象のフィールドが式の一覧の1つに一致
> なつめ% ⇨ 〜で始まる
> %そうせき ⇨　〜で終わる
> %めそう% ⇨ 〜を含む

LIKEは正規表現の簡易版のようなもの。
「%」は「任意のゼロ文字以上の文字列」「_」は「任意の1文字」に相当する。
「%」をつける位置によって「前方一致検索」「後方一致検索」「部分一致検索」と呼ぶことがある。




##様々な条件のSELECT文

```sql
SELECT * FROM authors;
SELECT * FROM authors WHERE id = 1;
SELECT * FROM authors WHERE id <> 1;
SELECT * FROM authors WHERE id > 1;
SELECT * FROM authors WHERE 1 <= id AND id < 2;
SELECT * FROM authors WHERE 2 <= id OR id <= 1;
SELECT * FROM authors WHERE NOT(2 <= id OR id <= 1);
SELECT * FROM authors WHERE name LIKE '%エンド%';
SELECT * FROM authors WHERE name LIKE '%_a_%';
SELECT * FROM authors WHERE name LIKE '%_y%';
SELECT * FROM authors WHERE id BETWEEN 1 AND 2;
SELECT * FROM authors WHERE id IN (1, 4);
```

##並び替えて参照
通常のSELECT文の実行結果で得られるデータの順序は決まっておらず、得られるデータ自体は同じでも厳密には順序は決まっていない。
参照するデータのソート順を指定するためには「ORDER BY句」を利用する。
WHERE句が条件を指定するように、ORDER BY句はソート順を指定する。構文は以下の通り。

```sql
SELECT 
  カラム1,
  カラム2,
  カラム3
FROM
  テーブル名
ORDER BY
  ソートに利用するカラム1 ASC or DESC,
  ソートに利用するカラム2 ASC or DESC,
  ソートに利用するカラム3 ASC or DESC
```
昇順(たとえば、1,2,3...という順)でソートしたい場合はASCを指定し、
その逆の降順(たとえば、10,9,8...という順)でソートしたい場合はDESCを指定する。
ASCもDESCも記述しない場合は昇順(ASC)になる。

languagesテーブルをid順でソートする場合は、次のSQLを実行する。

```sql
/*１から順番にソート*/
SELECT * FROM languages ORDER BY Id;

/*4から順番にソート*/
SELECT * FROM languages ORDER BY Id DESC;
```
また、複数条件をかけてソートすることも可能。

```sql
SELECT * FROM authors ORDER BY language, id;
```
多くのDBでは、日本語を含む文字列は読み仮名順でソートすることはできない。
とくに漢字を含む場合には、日本語を含む文字列でのソートは期待できない。
日本語でソートする場合には仮名のカラムを用意し、仮名のカラムでソートすること。


＜前回の記事＞

・データベース、SQL・MySQLの基礎
https://qiita.com/TaikiTkwkbysh/items/8efc5faf8da2062a8a95

・データベース、SQL・MySQLの基礎（テーブルの作成から削除）
https://qiita.com/TaikiTkwkbysh/items/8efc5faf8da2062a8a95

＜次回の記事＞
・データベース、SQL・MySQLの基礎（カラムの別名取得~シーケンス番号）
https://qiita.com/TaikiTkwkbysh/items/6bd3b6e873f33fbd898e