SQLチートシート

### データ操作言語（Data Manipulation Language）


システムの主要機能4要素　CRUD 


- SELECT（データの検索）
- INSERT（データの追加）
- UPDATE（データの更新）
- DELETE（データの削除）

### データ定義言語（Data Definition Language）

- CREATE（テーブルの作成）
- ALTER（テーブルの設定変更）
	- RENAME TO(テーブル名変更)
	- DROP COLUMN(カラムの削除)
	- ADD(カラムの追加)
	- MODIFY(カラムの定義の変更)
	- CHANGE COLUMN(カラムの名前・場所定義の変更)
	- DROP PRIMARY KEY
- DROP（テーブルの削除）
- TRUNCATE（テーブルデータの削除）
	- DELETEとTRUNCATEの違い

	ロールバック不可能、早い、ディスク領域解放される


	- ハイウォーターマーク( テーブルにどこまでレコードが入っているか示すマーク)

### データ制御言語（Data Control Language）

- GRANT（権限付与）  
- REVOKE（権限剥奪）

# ??

- SHOW（データベースの一覧を表示）　
- USE（使用するデータベースの選択）；
- SELECT（利用中のDB名を表示する）　
- DISCRIBE（テーブル定義の確認）　
- DISTINCT(重複削除)
- ORDER BY(昇順、降順)
	- ASC
	- DESC
- LIMIT,OFFSET(指定した行数だけ取り出す、指定した行数を飛ばして取り出す)
- WHERE
	- 条件式で比較した結果、真となるレコードに絞り込む
	- AND,OR (両方、どちらか)
	- NOT(否定)
	- 3値論理
		- True,False,Null
	- NULL(値が不明)
		- IS NULL,IS NOT NULL
		- NULLの評価結果は特殊なので注意
		- NULLを使用しないデータベース設計を徹底する
	- BETWEEN,NOT BETWEEN(指定した範囲のレコードを取り出す)
	- IN,NOT IN(複数の値のいずれかに合致したものを取り出す)
	- ANY(取得した値のリストと比較して、いずれかが真のものを取り出す)
	- ALL(取得した値のリストと比較して、全てが真のものを取り出す)
	- LIKE,NOT LIKE( あいまい検索)
		- % 任意の0文字以上の文字列
		- _  任意の１文字

# 算術演算子

- 文字列の連結
	- MySQLは「concat」 でその他のデータベースは「||」
	- 日付のカラム+2 をすると書式は少し変わるが、日数を増やすことは可能

# 集合演算子

- UNION(和集合、重複行は１つにまとめる)
- UNION ALL(和集合、重複行は重複したまま)
- EXCEPT(差集合)
- INTERSECT(積集合、共通する行だけ表示)

# 日付に関する関数

- NOW()  (現在の日付+ 時分秒も)
- CURDATE()  (現在の日付)
- DATA_FORMAT(date,’%Y/%m/%d/ %H:%i:%S’)  (フォーマット表示)

# 文字列関数

- LENGTH(バイト数)
- CHER_LENGTH(文字数)

# 集計関数

|       | 数値型 | 文字列型        | 日付型     |
| ----- | --- | ----------- | ------- |
| SUM   | 合計値 | ×           | ×       |
| MIN   | 最小値 | 並び替えて最初の文字列 | 最も古い日付  |
| MAX   | 最大値 | 並び替えて最後の文字列 | 最も新しい日付 |
| AVG   | 平均値 | ×           | ×       |
| COUNT | 行数  | 行数          | 行数      |



NULLが含まれてた場合　SUM,MIN,MAX,AVGは無視　COUNT *指定の場合はNULLを含んでカウント


- GROUP BY(グループ化)
	- CASE文も使える
- HAVING(グループ化して集計したものに対して絞り込み)

# その他関数


COALESCE( 最初に登場するNULLでない値を返す関数)

# 特殊文字系

- コメント

　#または- - 

　複数は　/* */


- クォート

シングルクォート、ダブルクォートを使いたい時は、それぞれを二つ記述する

「あ”い」と表示したかったら「あ””い」と書く


- あ
- あ

実行順

# SELECTの後ろ

- TRIM,LTRIM,RTRIM( 両側、左側、右側から空白を除去する)
- REPLACE(文字列を置換する)
- SUBSTRING,SUBSTR(文字列から一部を抽出する)
- REVERSE(文字列を逆順にする)
- UPPER,LOWER(文字列を全て大文字、小文字)
- IF(条件式の判定から、真の場合、偽の場合で表示内容を変える) 
- CASE(複数の条件式の判定から、条件に応じて表示内容を変える)
	- ORDER BYでも使える
	- NULLを使う時は　IS NULL
- AS (カラムやテーブルに別名をつける)

	　　

# 数学関数

- ROUND(小数点1桁を四捨五入)
	- ROUND (3.14,-1) → 0,   ROUND (3.14,1) →3.1  
- FLOOR(切り捨て)
- CEILING(切り上げ)
- POWER(べき乗計算をする)
	- POWER (2,4)     2×2×2×2 
- RAND(0~1までのランダム値を取得する)
	- FLOOR(RAND()*10) → 0~9　例)0.385→3.85 →4

# 副問い合わせ


SELECTの結果を別のSELECTで使う

メインクエリ(主問い合わせ)とサブクエリ( 副問い合わせ)


- IN
- IN(複数)
- 集計関数と使う
- FROMの対象をテーブル名ではなくSELECT文にする
- SELECTの行の１つにする
- CASE

# EXISTS(相関副問い合わせ)


他のテーブルに値の存在する行のみ抽出する


- EXISTSとNOT EXISTS
- EXISTSはNULLを取得しない
- NOT EXISTSはNULLを取得

# JOIN(結合)

カラム同士が等しいレコード同士をテーブル間で結合(UNIONは行だった)


- INNER JOIN(一致)
- LEFT JOIN(左の全て、右は紐づかないものはNULL)
- RIGHT JOIN(右の全て、左は紐づかないものはNULL)
- FULL OUTER JOIN(左右の全レコード、紐づかないものはNULL)
- 自己連結(同じテーブル)
- CROSS JOIN(交差連結)

# WITH

一時的なテーブルを作成して可動性の高い構文にする

# ウィンドウ関数

一部の行に対して、集計した結果を表す


- OVER()
- PARTITION BY(行を分割してグループ化し、各グループに対して、WINDOW関数)
- ORDER BY(行を並び替えて、パーテションの初めから現在地までをフレームとして集計)
- ROW BETWEEN(現在の行を基準として、集計する対象のフレームを変更)
- UNBOUNDED,n PRECEDING CURRENT ROW

# SQLの実行順序


1. FROM,JOIN
2. WHERE
3. GROUP BY
4. 集計関数
5. HAVING
6. ウィンドウ関数
7. SELECT
8. DISTINCT
9. UNION
10. ORDER BY
11. OFFSET
12. LIMIT