SQL コマンド 一覧まとめ

# データベース

|データベース|説明|
|---|---|
|SHOW DATABASES|データベースの一覧を確認する|
|CREATE DATABASE <データベース名>|データベースを作成する|
|USE <データベース名>|データベース名を指定する|
|DROP <データベース名>|データベースを削除する|

# テーブル

|テーブル|説明|
|---|---|
|SHOW TABLES|テーブルを表示する|
|SHOW COLUMNS FROM <テーブル名>|テーブル構造を確認する|
|CREATE TABLE|テーブルを作成する|
|DROP TABLE <テーブル名>|テーブルを削除する|
|INSERT INTO <テーブル名>(<カラム名>)VALUE(値)|レコードを追加する|
|ALTER TABLE <テーブル名> ADD COLUMN <カラム名>|カラムを追加する|
|DESC <テーブル名>|テーブルの構造を確認|
|UDATE <テーブル名> SET <カラム名> = 1 WHERE <カラム名> = 2|レコードを更新する|
|DELETE FROM <テーブル名> WHERE <カラム名> = 1|レコードを削除する|
|COMMIT|現在のトランザクションをコミットして確定する|
|ROLEBACK|現在のトランザクションをロールバックして取り消す|
|CREATE INDEX index_name on <テーブル名>(カラム名>)|インデックスを作成する|
|SELECT <カラム名> FROM <テーブル名>|データを抽出する|
|SHOW KEYS FROM <テーブル名>|プライマリキーを確認する|
|WHERE|特定の条件に絞り込んで抽出する|
|AS|列に対して別名を設定する|
|DISTINCT|重複を排除する|
|ORDER BY <カラム名>|昇順にする|
|ORDER BY <カラム名>　DESC|降順にする|
|LIMIT <レコード数>|取得するデータの数を指定する|
|LIKE|"%" 0文字以上の任意の文字列、　"_" 任意の1文字　で検索する|
|NOT LIKE|上記LIKEの逆を意味する|
|GROUP BY|条件を指定してグループ化する|
|HAVING|グループ化されたレコードから条件を指定して絞り込む|

# テーブルの削除

|コマンド|説明|
|---|---|
|DROP|テーブル内のオブジェクトを完全に削除する|
|TRUNCATE|テーブル内のレコードを完全に削除する。オートインクリメントの削除。|
|DELETE|テーブル内のデータを全削除または条件に一致したデータを削除。オートインクリメントは削除されない。|

https://qiita.com/masapiko/items/cd4aef791608ea919485

# データ型

下記は一例。

|数値型|文字列型|日付型・時刻型|
|---|---|---|
|INT|CHAR|DATE|
|FLOAT|varchar|TIME|

https://qiita.com/shuhoyo/items/07d28cec6babe788051d#varcharnmax%E5%9E%8B

# 属性

|属性|説明|
|---|---|
|NOT NULL|null を禁止する|
|AUTO_INCREMENT|自動採番にする|
|DEFAULT|デフォルトの値として指定したいもの|

# プライマリキーと外部キーとユニークキー

|キー|説明|
|---|---|
|PRIMARY KEY|プライマリキー|テーブルに登録するデータの中で、該当レコードを一意に特定することができる列のことでテーブル内で1つだけ設定できる|
|FOREIGN KEY (カラム名) REFERENCES <テーブル名>(<カラム名>)|外部キー|関連したテーブル間を結ぶために設定する列のことで、データの関連性と整合性を保証するために利用される|
|UNIQUE KEY|ユニークキー|重複した値を許さない列のことで、テーブル内で複数設定できる|

https://qiita.com/mokio/items/6a4a76c7d4c962860ea4

## 外部キー

|オプション|説明|
|---|---|
|ON DELETE CASCADE| 親テーブル/親レコードを削除するときに子テーブルの参照しているデータも削除される|
|ON DELETE RESTRICT| 親テーブル/親レコードを削除するときにエラーとなって、削除できないようにする|
|ON DELETE SET NULL| 親テーブル/親レコードを削除するときに子テーブルの参照しているデータがNULLとなる。|
|ON UPDATE CASCADE| 親テーブル/親レコードを削除するときに子テーブルの参照しているデータも更新される。|
|ON UPDATE RESTRICT| 親テーブル/親レコードを削除するときにエラーとなって、更新できないようにする
|ON UPDATE SET NULL| 親テーブル/親レコードを更新するときに子テーブルの参照しているデータがNULLとなる。|


# 文字コード

『デフォルトの文字コード』を『UTF-8』にして処理する

```
ENGINE=INNODB DEFAULT CHARSET=UTF8MB4; 
```


# 演算子

## 比較演算

|比較演算子|	説明|
|---|---|
|<|	小なり|
|>|	大なり|
|<=|	以下|
|>=|	以上|
|=|	等しい|
|<> もしくは !=|	等しくない|

## 論理演算子

|論理演算子|	説明|
|---|---|
|AND|と|
|OR もしくは IN(<値A>,<値B>)|もしくは|
|BETWEEN <範囲A> AND <範囲B>|AからBの範囲|

## 四則演算子

|四則演算子|	説明|
|---|---|
|+|加算|
|-|減算|
|*|乗算|
|/|除算|
|DIV|除算(整数値の返却)|
|&|剰余|
|MOD|剰余|

# 関数

## 関数(数値)

|関数(数値)|説明|
|---|---|
|ABS()| 絶対値を算出する|
|ROUND()| 四捨五入をする|
|CELING()| 数値よりも大きい整数のうち最小のもの|
|FLOOR()| 指定した数値以下の最大の整数を取得する |
|TRUNCATE()| 小数点以下を指定すて表示する|
|COUNT()| データ数を数える|
|SUM()| データの合計を算出する|
|AVG()| データの平均を算出する
|MAX()| データの最大を算出する
|MIN()| データの最小を算出する|

## 関数(文字列)

|関数(文字列)|説明|
|---|---|
|CONCAT()|文字列を連結する|
|LOWER()|小文字にする|
|UPPER()|大文字にする|
|REPLACE()|特定の文字を変換する|
|INSERT()|文字列を指定し特定の文字に変換する|
|LPAD()|文字列が○文字になるように左側を埋める|
|RPAD()|文字列が○文字になるように右側を埋める|
|REPEAT()|指定した分だけ文字を返す|

## 関数(保持列)

|関数(保持列)|説明|
|---|---|
|LENGTH()|バイト数を数える|
|CHAR_LENGTH()|文字数を数える|

## 関数(日付)

|関数(日付)|説明|
|---|---|
|CURRENT_DATE()|現在の日付を表示する|
|CURRENT_TIME()|現在の時刻を表示する|
|CURRENT_TIMESTAMP()|現在の日付と時刻を表示する|
|DATEDIFF()|日付の差分を算出する|
|TIMEDIFF()|時刻の差分を算出する|
|TIMESTAMPDIFF()|日時の差分を算出する|
|DAYNAME()|曜日を抽出する|
|MONTH()|月をを抽出する|
|YEAR()|年を抽出する|
|DAY()|日を抽出する|
|DAYOFMONTH()|経過月を出力する|
|DAYOFYEAR()|経過年を出力する|
|DAYOFWEEK()|経過週を出力する|
|DATE_FORMAT()|指定のフォーマットで整形し文字列を取得する|
|CONVERT_TZ()|タイムゾーンを変更する|

## 関数(その他)

|関数(その他)|説明|
|---|---|
|DATABASE()|現在利用しているデータベースを表示する|
|CURRENT_USER()|現在利用しているユーザー名を表示する|
|VERSION()|SQLバージョンを表示する|
|CHARSET()|文字セットを確認する|
|DEFAULT()|デフォルト値を確認する|
|CAST()|別のデータ型に変換する|
|CONVERT()|別のデータ型に変換する|

# JOIN

|JOIN|説明|
|---|---|
|INNER JOIN|内部結合|
|LEFT JOIN|左外部結合|
|RIGHT JOIN|右外部結合|
|FULL JOIN|完全外部結合|
|CROSS JOIN|クロス結合|
|SELF JOIN|自己結合|
|UNION|SELECTの結果を縦に結合する（重複排除有）|
|UNION ALL|SELECTの結果を縦に結合する（重複排除無）|

```sql
SELECT 
    *
FROM
    <テーブル名1>
        INNER JOIN
    <テーブル名2> ON <テーブル名1>.<カラム> = <テーブル名2>.<カラム>
```

```sql
SELECT 
    *
FROM
    <テーブル名>
UNION
SELECT 
    *
FROM
    <テーブル名>
```

# ビュー

複数のテーブルを使った複雑なSQLでも、ビューを一度作っておけば何度でも同じSQLが使える。

|コマンド|説明|
|---|---|
|CREATE VIEW|ビューを作成する|
|DROP VIEW|ビューを削除する|


```sql:ビュー作成
CREATE VIEW <ビュー名> AS <実行したいSQL文>
```

```sql:ビュー実行
SELECT 
    *
FROM
    <ビュー名>;
```

```sql:ビュー削除
DROP VIEW <ビュー名>
```