MacでのMySQL入門

# MacでのMySQL入門

# セットアップ
流れは以下の通りとなる。
1. インストール
2. MySQLへサインイン
3. DBを選択


## インストール
```
$ brew install mysql
```

上手く起動しなかった場合は /usr/local/var/mysql/マシン名.err というファイルがあるというファイルがあるため、ログをチェックする。

## MySQLの起動
```
$ mysql.server start
```

## MySQLの停止（終了）
```$ mysql.server stop```

バッテリーを消耗しやすいため使用していない時は停止させておいた方がよい

## MySQLの再起動
```
$ mysql.server restart
```

## localhostのMySQLにサインインする
```
$ mysql -u root
```

## 作成済みのDBの中から使用するDBを選択する
```
$ use {DB名}
```



参考URL：<https://qiita.com/akiko-pusu/items/aef52b723da2cb5dc596#%E8%B5%B7%E5%8B%95%E3%81%AE%E7%A2%BA%E8%AA%8D%E3%82%92%E3%81%99%E3%82%8B>

# 基本操作
DB選択後はSQLを使ってDBを操作していく。
## DB作成
```
$ create dateabase {DB名}; 
```

## 作成済みDB確認
```
$ SHOW DATABASES;
```

## テーブル作成
以下のような形式のテーブルを作成する。

|  id  |  name  | point |
| ---- | ---- | --- |
|  1  |  山田  | 80 | 
|  2  |  鈴木  | 90 |
|  3  |  加藤  | 60 |
|  4  |  田中  | 70  |


```
mysql > create table {テーブル名}
  -> (
  -> id int not null auto_increment,
  -> name varchar(16) not null,
  -> point int not null,
  -> primary key (id)  
  -> );
 ```

↓の順番で値を入力している。

「カラム名 データ型 カラムにNULLを許すかどうか」

「autoincrement」は自動で値を増やして欲しいときに設定する。

「primary key」はレコード全体から一つのデータを特定できる列のこと。()内にカラム名を入れて設定する。

## 作成済みテーブルの確認
```
$ SHOW TABLES;
```


## データ追加
```
$ INSERT INTO {テーブル名} VALUES ('1','山田','80') 
```

## データ更新
```
$ UPDATE SET {テーブル名} SET {カラム名} = 値, {カラム名} = 値 WHERE id={更新したい番号}  
```

where以降は更新したい条件を付ける。

複数の条件を指定する際にはANDやORで接続する。

条件を()で囲むと囲まれた条件は優先され先に条件指定される。

WHERE句で利用出来る演算子：
<https://rfs.jp/sb/sql/s03/03_2-2.html>


## 削除
```
$ DELETE FROM {テーブル名} WHERE {条件} 
```

## データ取得
```
$ SELECT * FROM {テーブル名} 
```

*は全てのカラムを選択しているという意味。

必要なカラムが決まっていれば、カラムを指定することで指定カラムデータのみ取得することが可能。


# 検索の絞り込み
WHERE句の演算子によって条件を絞り込むことが出来る。

以下は絞り方の方法となる。


## AND
```
$ SELECT * FROM {テーブル名} WHERE 条件 AND 条件
```

## OR
```
$ SELECT * FROM {テーブル名} WHERE 条件 OR 条件
```

## NULL指定
```
$  SELECT * FROM {テーブル名} WHERE {カラム名} IS NULL
```

## NULLでない指定
```
$ SELECT * FROM {テーブル名} WHERE {カラム名} IS NOT NULL
```

## LIKE文：ワイルドカード絞り込み
「%」は任意の0文字以上の文字列、「_」は任意の一文字としてワイルドカード指定検索が出来る。

```
$ SELECT * FROM {テーブル名} WHERE name LIKE '%'
```

```
$ SELECT * FROM {テーブル名} WHERE name LIKE '_田'
```


## BETWEEN演算子：範囲内に値が収まっているかの判定
```
$ SELECT * FROM {テーブル名} WHERE {カラム名} BETWEEN {下限} AND {上限}
```

## IN演算子：指定のカラムの値が合致する部分を抽出
```
$ SELECT * FROM {テーブル名} WHERE {カラム名} IN (値1,値2,....)
```

## NOT IN演算子：値が合致しない部分を抽出
```
$ SELECT * FROM {テーブル名} WHERE {カラム名} NOT IN (値1,値2,....)
```

## ANY演算子：値リストのそれぞれと比較していずれかが真なら真
```
$ SELECT * FROM {テーブル名} WHERE {カラム名} =< ANY(値1,値2,...)
```

## ALL演算子：値リストのそれぞれと比較して全てが真なら真
```
$ SELCT * FROM {テーブル名} WHERE {カラム名} =< ALL(値1,値2,...)
```


# 検索結果の加工
## DISTINCT：重複行削除
```
$ SELECT DISTICT {カラム名} FROM {テーブル名}
```

## ORDER BY：結果を並び替える
ASC：昇順、DESC：降順

```
$ SELECT * FROM {テーブル名} ORDER BY {カラム名} DESC
```

## LIMIT：取得行数の指定
OFFSETを指定すると指定した行+1行目から行を抽出する。省略した場合OFFSETは0となるため、省略することも可能。

```
$ SELECT * FROM {テーブル名} ORDER BY {カラム名} LIMIT 2 3
```

上記はOFFSET=2,LIMIT=3で指定した記述のため3行目から取得を行い5行目まで取得するという書き方となっている。

## UNION：和集合
```
$ SELECT  {カラム名} FROM {テーブル1} UNION SELECT {カラム名} FROM {テーブル2}
```

## EXCEPT：差集合
```
$ SELECT {カラム名} FROM {テーブル1} EXCEPT SELECT {カラム名} FROM {テーブル2}
```

## INTERSECT：差集合
```
$ SELECT {カラム名} FROM {テーブル1} INTERSECT {カラム名} FROM {テーブル2}
```

# 演算子と関数
## CASE演算子：条件によって値を設定する演算子
```
SELECT {カラム名}
    CASE
        WHEN {条件} THEN {条件を満たしたら設定する値}
        ELSE {条件を満たさなかったら設定する値} 
    END
FROM {テーブル名};
 ```

## LENGTH：文字数を取得する関数
```
$ SELECT {カラム名} , LENGTH({カラム名}) AS {取得した値の列の任意の列名} FROM {テーブル名}
```

## TRIM：指定の文字列から空白を除去
```
$ SELECT {カラム名}, TRIM({カラム名}) AS {取得した値の列の任意の列名} FROM {テーブル名}
```

## REPLACE：指定の文字列の一部を置換する
```
$ UPDATE {カラム名} SET {テーブル名} = REPLACE({テーブル名,'置換前','置換後'})
```

## SUBSTRING：文字列の一部を抽出する
```
$ SELECT * FROM {テーブル名} WHERE SUBSTRING({カラム名},1,2) LIKE '%田%'
```

１〜３文字目に「田」があるものだけを抽出

## ROUND：指定桁で四捨五入
```
$ SELECT {カラム名},ROUND(カラム名,{指定桁}) AS {取得した値の列の任意の列名} FROM {テーブル名}
 ```

## TRUNC：小数点以下の指定桁で切り捨てる
```
$ SELECT {カラム名},TRUNC({カラム名},{指定桁}) AS  {取得した値の列の任意の列名} FROM {テーブル名}
```