SQLを使ったことがないので、勉強メモを残します。
使用環境
-
windows10
-
MySQL8.0.24
基本操作
-
CREATE DATABASES:データベースの作成
-
SHOW DATABASES:データベースの一覧表示
-
CREATE TABLE:テーブル作成
-
SHOW CREATE TABLE:テーブルの表示
-
INSERT:テーブルにデータを挿入
-
SELECT:テーブルからデータを取得
-
UPDATE:データを上書き
-
DELETE:データを削除
-
ALTER:テーブルにカラムを追加
CREATE DATABASES
まず、テーブルを作る前に「PRACTICE」という名前のDATABASEを作成。
CREATE DATABASE [データベース名];
実行結果
mysql> CREATE DATABASE PRACTICE;
Query OK, 1 row affected (0.02 sec)
SHOW DATABASES
DATABASE一覧の表示。上記で作成した「practice」があることが確認できる。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| practice |
| sakila |
| sys |
| world |
+--------------------+
7 rows in set (0.00 sec)
CREATE TABLE
1.まず使用するデータベースを選択する。これを選択しないとテーブルの作成ができない。
USE [データベース名];
実行結果
mysql> USE PRACTICE;
Database changed
2.テーブルを作成する。今回はオプション無しで作成する。
CREATE TABLE [テーブル名] (
column1 [データ型] [その他オプション],
column2 [データ型] [その他オプション],
column3 [データ型] [その他オプション],
);
作成したのがこちらのTESTテーブル。
mysql> CREATE TABLE TEST(
-> ID INTEGER,
-> NAME TEXT,
-> ENGLISH INTEGER,
-> MATH INTEGER
-> );
Query OK, 0 rows affected (0.07 sec)
SHOW CREATE TABLE
前のCREATE TABLEで作成したテーブルを確認。
SHOW CREATE TABLE [テーブル名];
実行結果
mysql> SHOW CREATE TABLE TEST;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| TEST | CREATE TABLE `test` (
`ID` int DEFAULT NULL,
`NAME` text,
`ENGLISH` int DEFAULT NULL,
`MATH` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
INSERT
指定したテーブルにデータを挿入する。
INSERT INTO [テーブル名] ([column1], [column2], [column3]) VALUES ([値1], [値2], [値3]);
実行結果
mysql> INSERT INTO TEST (ID, NAME, ENGLISH, MATH) VALUES (1, 'RISA', 80, 90);
Query OK, 1 row affected (0.01 sec)
なお、以下のINSERT文(カラム指定なし)でもデータの挿入が可能。
mysql> INSERT INTO TEST VALUES (2, 'TARO', 75, 60);
Query OK, 1 row affected (0.01 sec)
SELECT
SELECT * FROM [テーブル名];
先ほどINSERTしたデータを確認。挿入したデータが登録されていることが確認できる。
mysql> SELECT * FROM TEST;
+------+------+---------+------+
| ID | NAME | ENGLISH | MATH |
+------+------+---------+------+
| 1 | RISA | 80 | 90 |
| 2 | TARO | 75 | 60 |
+------+------+---------+------+
2 rows in set (0.00 sec)
また、テーブルデータのカラムを指定して表示させる場合、以下の文で表示可能。
mysql> SELECT ID, NAME FROM TEST;
+------+------+
| ID | NAME |
+------+------+
| 1 | RISA |
| 2 | TARO |
+------+------+
2 rows in set (0.00 sec)
条件付きで表示させる場合は、以下の文で表示可能。
mysql> SELECT * FROM TEST WHERE ID = 1;
+------+------+---------+------+
| ID | NAME | ENGLISH | MATH |
+------+------+---------+------+
| 1 | RISA | 80 | 90 |
+------+------+---------+------+
1 row in set (0.00 sec)
UPDATE
UPDATE文はデータを更新するので、元のデータは消えてしまう。
WHERE句を使わずにデータを更新しようとすると、全てのデータを上書きしてしまう可能性あり。
今回は NAME = RISA の ENGLISH を 0 に上書きする。
UPDATE [テーブル名] SET [colum1] = [値1], [colum2] = [値2], ... WHERE [条件式];
mysql> UPDATE TEST SET ENGLISH = 0 WHERE NAME = "RISA";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
更新ができているか確認のためSELECT文を実行。NAME = RISA の ENGLISH を 0 に上書きできた。
mysql> SELECT * FROM TEST;
+------+------+---------+------+
| ID | NAME | ENGLISH | MATH |
+------+------+---------+------+
| 1 | RISA | 0 | 90 |
| 2 | TARO | 75 | 60 |
+------+------+---------+------+
2 rows in set (0.00 sec)
DELETE
DELETE文は条件を指定しないと、テーブル中の全てのレコードを削除してしまう。以下のようにWHERE句を組み合わせて、条件に当てはまるレコードだけを選択削除する。
元のデータは以下。
mysql> SELECT * FROM TEST;
+------+-------+---------+------+
| ID | NAME | ENGLISH | MATH |
+------+-------+---------+------+
| 1 | RISA | 0 | 90 |
| 2 | TARO | 75 | 60 |
| 3 | RENA | 65 | 100 |
| 4 | ASUKA | 80 | 80 |
+------+-------+---------+------+
4 rows in set (0.00 sec)
ここから ID = 4 のデータを削除する。
DELETE FROM [テーブル名] WHERE [条件式];
実行結果と確認のためSELECT文実行。ID = 4 のデータが削除されていることが確認できる。
mysql> DELETE FROM TEST WHERE ID = 4;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM TEST;
+------+------+---------+------+
| ID | NAME | ENGLISH | MATH |
+------+------+---------+------+
| 1 | RISA | 0 | 90 |
| 2 | TARO | 75 | 60 |
| 3 | RENA | 65 | 100 |
+------+------+---------+------+
3 rows in set (0.01 sec)
レコードまるごとではなく、特定のカラムのデータのみ削除したい場合は、UPDATE文を使う。
「指定したカラムのデータをNULLに上書きする」といった処理を行う。NULLは「何もない」という意味を表す。
UPDATE [テーブル名] SET [column1] = NULL WHERE [条件式]
ID = 3 の NAME を NULL にする。
mysql> UPDATE TEST SET NAME = NULL WHERE ID = 3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM TEST;
+------+------+---------+------+
| ID | NAME | ENGLISH | MATH |
+------+------+---------+------+
| 1 | RISA | 0 | 90 |
| 2 | TARO | 75 | 60 |
| 3 | NULL | 65 | 100 |
+------+------+---------+------+
3 rows in set (0.00 sec)
ALTER
テーブルにカラムを追加する場合、以下のALTER文で追加可能。
ALTER TABLE [テーブル名] ADD [column] [データ型]
カラム名「SOCIETY」、データ型「INTEGER」の列を追加した結果が以下。
追加されたカラムにはNULLが入っている。
mysql> ALTER TABLE TEST ADD SOCIETY INTEGER;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM TEST;
+------+------+---------+------+---------+
| ID | NAME | ENGLISH | MATH | SOCIETY |
+------+------+---------+------+---------+
| 1 | RISA | 0 | 90 | NULL |
| 2 | TARO | 75 | 60 | NULL |
| 3 | NULL | 65 | 100 | NULL |
+------+------+---------+------+---------+
3 rows in set (0.00 sec)
参考文献
以下の文献を参考にさせていただきました。ありがとうございます。