初歩的なSQLコマンドをまとめてみました。

# はじめに
**明日の訓練所でのテスト対策**で、SQLコマンドを整理してみました。投稿数稼ぎです。
とってもとっても初歩的なので、将来データベース忘れた時には役立つかもしれません。
なのでチートシートなんて名乗れません、そんな程度です。
あとPHPもテスト範囲に含まれているので、そっちの方もいずれ投稿しようと思っています。
Linux、HTML、JavaScript、PHP、JAVAと、この４ヶ月で詰め込んで来たので、もうどれがどうだったか。。。
XAMPPをインストールしての授業だったので、MariaDBです。
MariaDBのサイトの『[A Quick SQL Cheat Sheet](https://mariadb.com/kb/en/basic-sql-statements/)』を自分用に簡単にまとめてみました。
英語に苦しくなってきた時はこっちの『[MySQL5.6リファレンスマニュアル 第13章SQLステートメントの構文](https://dev.mysql.com/doc/refman/5.6/ja/sql-syntax.html)』を見てました。
## データベースオブジェクトの操作

### 作成
~~~SQL
-- データベースの作成
CREATE (OR REPLACE) DATABASE db_name;
-- テーブルの作成 PRIMARYとUNIQUEは最後に記述してもカラムの都度でもいい。
CREATE (OR REPLACE) TABLE tbl_name (create_definition,...,PRIMARY KEY(coi_name) UNIQUE KEY(col_name));
-- ビューの作成
CREATE (OR REPLACE) VIEW view_name AS select_statement;
-- インデックスの作成
CREATE (OR REPLACE) INDEX index_name;

# Columnの追加（作成）
/* CREATE COLUMN はナイよテーブルを先に作っちゃってて、後から追加する時。
１個ずつしか追加できない。(コレ間違い　出来る。)
*/
ALTER TABLE tbl_name ADD col_name column_definition,[FIRST|AFTER col_name];

/* create_definition */
{col_name column_definition}　 #index_definitionとかperiod_definitionとか省略 
/* column_definition */
data_type [NOT NULL|NULL][UNIQUE|PRIMARY KEY][COMMENT 'string']　#もっとあるけど省略
~~~
data_typeはいっぱいあるので、[Data Types](https://mariadb.com/kb/en/data-types/)を参照。



### 変更
~~~SQL
-- データベースの変更
#ALTER DATABASEはあるけど。。。使わないな
#RENAME DATABASEはナイ 新しくデータベース作ってコピーするとか。。。面倒らしい
-- テーブルとカラムの変更・追加
RENAME TABLE old_tbl_name TO new_tbl_name;
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition; #カラムの名前と定義の変更
ALTER TABLE tbl_name MODIFY col_name colmun_definition; #カラムの定義の変更
ALTER TABLE tbl_name ADD col_name column_definition; #カラムの追加
--　ビューの変更
ALTER VIEW view_name AS select_statement;
~~~
### 表示
~~~SQL
--データベースの表示
SHOW DATABASES;
--テーブルの表示
SHOW TABLES; #データベース内のテーブル一覧
SHOW CREATE TABEL　tbl_name; #テーブルを作るときのCREATE TABLE文
{DESCRIBE|DESC}　tbl_name; #テーブルの構造
SHOW COLUMNS　FROM tbl_name; 
--ビューの表示
SHOW CREATE VIEW view_name;#ビューを作るときのCREATE VIEW文
--インデックスの表示
SHOW {INDEX | INDEXES | KEYS} FROM tbl_name [FROM db_name];
~~~
### 削除
~~~SQL
-- データベースの削除
DROP DATABASE db_name;
-- テーブルの削除
DROP TABLE tbl_name;
-- ビューの削除
DROP VIEW view_name;
-- インデックスの削除
DROP INDEX index_name;
~~~

## レコードの操作
~~~SQL
--追加
INSERT INTO tbl_name(col_names,...) VALUES(values,...); 
INSERT INTO tbl_name VALUES([values|null],...); 
--更新
UPDATE tbl_name SET col_name = value,[col_name = value],...[WHERE where_condition];
--置換
REPLACE [INTO] tbl_name VALUES([values|null],...);
--削除
DELETE FROM tbl_name WHERE where_condition;
~~~
## テーブル結合
~~~SQL
--UNION
SELECT * FROM tbl_1 UNION tbl_2;　#重複なし
SELECT * FROM tbl_1 UNION ALL tbl_2; #重複あり
--内部結合
SELECT * FROM tbl_1 INNER JOIN tbl_2 ON tbl_1.col = tbl_2.col;
--外部結合
SELECT * FROM tbl_1 LEFT OUTER JOIN tbl_2 ON tbl_1.col = tbl_2.col; #tbl_1全部とtbl_2の共通部分
SELECT * FROM tbl_1 RIGHT OUTER JOIN tbl_2 ON tbl_1.col = tbl_2.col; #tbl_1の共通部分とtbl_2の全部
--
~~~

## ユーザー関係
~~~SQL
-- 作成
CREATE (OR REPLACE) USER user_name IDENTIFIED BY password;
-- 変更
RENAME USER old_user_name TO new_user_name;
ALTER USER IDENTIFIED BY new_password;
-- 表示
SHOW CREATE USER user_name
--削除
DROP USER user_name;
~~~

## まとめ
　ほんとサラッとしか習ってない印象です。
まちがいも多々あると思います、明日のテストには間に合いませんが、後学のためにもご教示くださいますと助かります。
自分でも気がついたらちょこちょこ直していきます。

　あらためて、SQLを調べてみて、アレこんなの習ったっけ？てのがありました。
ユーザー関係はほとんど触れてませんでしたし、UPDATEなんで怪しいもんです。。。
なかなか普段は自分でデータベースを作ることが無いので、課題を見つけて作ってみないと理解は深まりませんね。