MySQL基本コマンド一覧まとめ


大文字小文字が混ざっていることに関しては、気にしないで下さい。
間違いがあれば、編集リクエストをお願いします！
 
##MySQLの起動
`mysql -u ユーザー名;`

`mysql -u root;`
（ユーザー名：root）
  
`mysql -u root -p;`
（パスワード付きログイン）

##MySQL起動時にパスワードを付与
`set password for root@localhost=password('設定したいパスワード');`
（ユーザー名：root、サーバ：localhost）

##データベースを作成
`CREATE DATABASE データベース名;`

##データベースに権限を付与

`grant all on （データベース名）.* to 'dbuser'@'localhost' identified by '設定したいパスワード';`
（ユーザー名：dbuser、サーバ：localhost）

##使うデータベースを切り替える
`USE データベース名;`

##現在のデータベースを確認
`SELECT DATABASE();`

##データベースの中身（一覧）を確認
`SHOW DATABASES;`


##データベースを削除
`DROP DATABSE データベース名;`

##テーブルを作成
`CREATE TABLE テーブル名(
カラム名 型 その他,
カラム名 型 その他
);`

例：

```sql:sample.sql
create table item_category (
category_id int auto_increment not null primary key,
category_name varchar(256) not null 
);
```

##テーブルを削除
`DROP TABLE テーブル名;`

##テーブルの定義を確認
`DESC テーブル名;`

##テーブルに値（データ）を挿入
`INSERT INTO テーブル名（カラム名,カラム名,...）VALUES(データ, データ),(データ,'データ');`

例：
`insert into item_category(category_id, category_name) values (1,”家具”), (2,”飲料”), (3,”食品”);`

##作ったテーブルを見る
`show tables;`　（全てのテーブル）

##テーブルの構造を見る
`DESC テーブル名;`
`show columns from テーブル名;`

##値（データ）を更新
`UPDATE [テーブル名] SET [COLUMN名] = '新しい値';`
`UPDATE user SET name = '新しい名前';`

##値（データ）を削除
`DELETE FROM [テーブル名] WHERE カラム名 = 値;`

例：
`DELETE FROM user WHERE id = 10;`


##外部キー制約の確認
`SHOW CREATE TABLE テーブル名;`

##外部キー制約の追加
`alter table テーブル名 add foreign key (カラム名) references 外部キーを付与したいテーブル名(カラム名);`

例：
`alter table item_list add foreign key (category_id) references item_category(category_id);`

##テーブル作成と同時に主キー、外部キー制約を追加 

```
CREATE TABLE テーブル名(
test_no INT NOT NULL,
minitest VARCHAR(20),
time INT,
classroom_id VARCHAR(10),
PRIMARY KEY(test_no),
FOREIGN KEY(classroom_id) REFERENCES classrooms(classroom_id)
);
```

##テーブル結合（内部結合）
```
SELECT
	テーブル名.カラム名,（続く）
FROM
	テーブル名 INNER JOIN 結合したいテーブル名
	ON テーブル名.列名 = テーブル名.列名;
```

例：shopテーブルとitemテーブル、item_idが主キーと外部キーの場合

```
SELECT
  shop.shop_name,
  shop.item_id, 
  item.item_name, 
  item.price, 
  shop.quantity 
FROM
  shop INNER JOIN item 
ON
  shop.item_id = item.item_id;
```

##テーブル結合（外部結合）

```
$ SELECT
	テーブル名.カラム名,（続く）
FROM
	テーブル名 LEFT (OUTER) JOIN 結合したいテーブル名
	ON テーブル名.列名 = テーブル名.列名;
```	
OUTERはつけても、つけなくてもOK。

##サブクエリ
SELECT文の中にSELECT文を使う検索

```
SELECT
	テーブル名1.カラム名,
	テーブル名1.カラム名,
	テーブル名2.カラム名,
	テーブル名3.カラム名,
	テーブル名3.カラム名
  FROM
  　テーブル名2 INNER JOIN テーブル名3
  　ON テーブル名1.カラム名 = テーブル名2.カラム名
  WHERE
  　テーブル名3.カラム名 IN (
  　	SELECT カラム名
  　	FROM カラム名
  　	WHERE 検索したいカラム名 = 値
  );
```

例：

```
SELECT
 students.student_name,
 students.company_name,
 tests.minitest,
 testData.times,
 testData.test_date,
 testData.score
FROM tests
INNER JOIN testData
 ON tests.test_no = testData.test_no
INNER JOIN students
 ON testData.student_no = students.student_no
WHERE
	testData.student_no IN (
	SELECT student_no
	FROM students
	WHERE student_name = '鈴木一郎'
);
```

##エイリアス
テーブルにSQL内でのみ扱える別名をつける

```
SELECT
	A.カラム名,
	B.カラム名,
	C.カラム名
  FROM
  	Aをつけたいテーブル名 A INNER JOIN Bをつけたいテーブル名 B
  		ON A.カラム名 = B.karamumei
  	INNER JOIN Cをつけたいテーブル名   C
  		ON B.カラム名 = C.カラム名;
```

例：

```
select
 s.student_name,
 s.company_name,
 t.minitest,
 td.times,
 td.test_date,
 td.score
from tests as t inner join testData as td
 on t.test_no = td.test_no
inner join (
 select student_no, student_name, company_name
 from students
 where student_name = '鈴木一郎'
) s
on td.student_no = s.student_no;
```

##ソート（並び替え）

```
SELECT * FROM テーブル名 ORDER BY カラム名 ASC（DESC）;
```

昇順：ASC
降順：DESC

##グルーピング（指定したカラムでまとめる）
`SELECT カラム名 FROM テーブル名 GROUP BY カラム名;`

##集約関数（計算した結果を表示、合計や平均、最大値など）
`SELECT MAX（カラム名） FROM テーブル名;`

##あいまいな検索（ワイルドカード）
`SELECT * FROM テーブル名 WHERE カラム名 LIKE '%テスト%';`

カラムからテストとつくデータを抽出
%と_が使える
1. 部分一致
2. 前方一致
3. 後方一致