はじめに
基礎的なSQLコマンドは就職前に勉強しておいた方が良いと勧められた為、復習用としてまとめました。
SQLの使用方法
ターミナルでは、MySQLというRDBMSを使用してSQLを実行できます。
MySQLを使用するには、ターミナルからログインします。
# ホームディレクトリへ戻る
% cd
# MySQLに接続
% mysql -u root
-u root
というオプションで、ユーザーは「ルート」でログインするという意味になります。
ここでいうルートとは、MySQLであらかじめ用意されているユーザーのことです。
このユーザーのパスワードは空で設定されているため、ログインにパスワードは必要ありません。
# MySQLに接続すると以下のような表示になる
% mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 428
Server version: 5.6.47 Homebrew
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
以上のような画面が表示されたら準備OKです。
SQLはmysql>
の続きから、入力して実行ができます。
また、SQLはSequel Proでも使用できます。
SQLによるDB上の操作
SQL(Structured Query Language)
RDBの操作を行うための言語のこと。
SQLの主な命令
- データを定義する「DDL」
- データを操作する「DML」
- データを制御する「DCL」
※この記事では、DDLについてのみ、まとめております。
DDL(Data Definition Language)
データを定義するSQLです。以下のような命令文があります。
命令 | 機能 |
---|---|
CREATE | データベースやテーブルの作成 |
ALTER | データベースやテーブルの更新 |
DROP | データベースやテーブルの削除 |
各SQL文を実行してみる
SQLを使って、データベースを作成してみます。ここでの作業はターミナルを使用して行います。
CREATE文
- データベースやテーブルを作成できるSQLの文
-
CREATE DATABASE
文を実行すると、指定した名前のデータベースが作成できる
実行時には以下のようにデータベース名の指定が必要です。
mysql> CREATE DATABASE sqltest;
ちなみに、SQL文は小文字でも動作するようです。
ただし、SQL文と他の文字列が混ざると読み辛くなることから、大文字で記述することが一般的になります。
mysql> CREATE DATABASE sqltest;
Query OK, 1 row affected (0.00 sec)
以上のような表示があれば、正常にデータベースが作成されています。
あと、SQL文の終わりには必ずセミコロンを付ける必要があります。
もしセミコロンを忘れて実行した場合は、SQLがまだ続くものだとみなされ、以下のような矢印マーク->
が表示されます。
mysql> show databases
->
SHOW文
- データベースやテーブルを一覧表示できるSQLの文
-
SHOW DATABASES
文を実行すると、作成されているデータベースを一覧で表示できる
mysql> SHOW DATABASES;
+------------------------+
| Database |
+------------------------+
| 省略 |
| sqltest |
| 省略 |
+------------------------+
36 rows in set (0.00 sec)
コマンドを実行すると、以上のようなテーブルが一覧で表示されます。
DROP文
- データベースやテーブルを削除できるSQLの文
-
DROP DATABASE
文を実行すると、作成されているデータベースを削除できる
mysql> DROP DATABASE sqltest;
Query OK, 0 rows affected (0.02 sec)
# sqltestがないことを確認
mysql> SHOW DATABASES;
以上のように表示されていれば、削除は完了です。
念のため、SHOW DATABASES;を使用して削除されているか確認してみてください。
USE文
- どのデータベースを使用するのかを指定するSQLの文
-
USE 《database名》
と指定することでデータベースを選択する
テーブルを操作する場合は、はじめに「どのデータベースにあるテーブルか」を選択する必要があるため、USEを使います。
まずは、下記のようにCREATE
を実行してデータベースを作成します。
mysql> CREATE DATABASE sqltest;
Query OK, 1 row affected (0.00 sec)
続いてUSEを実行してデータベースを選択します。
mysql> USE sqltest;
Database changed
これで、作成したデータベースを使用できます。
次にデータを保存するためのテーブルを作成してみます。
データベースの作成のときと同様に、テーブルを作成する際はCREATE TABLE
文を使用します。
実行時には以下のようにテーブル名を指定する必要があります。
また、そのテーブルに作成するカラムの名前とそのカラムの型を指定できます。
以下の例をご参考ください。
mysql> CREATE TABLE テーブル名 (カラム名1 カラム名1の型, カラム名2 カラム名2の型, …);
今回は、商品の情報を保存することを想定し、"items"という名前のテーブルを作ります。
そして、テーブルには商品idを数値で保存するidカラムと、商品名を文字列で保存するnameカラムを作成します。
また、カラムを作成する場合には型の指定が必要です。
MySQLで数値型や文字列型を定義する際は以下のような型名を使用します。
型の名前 | 保存できる値 |
---|---|
INT | 数字 |
VARCHAR(M) | 最大M文字の文字列 |
カラムとその型を指定し、テーブルを作成します。
mysql> CREATE TABLE items (id INT, name VARCHAR(255));
Query OK, 0 rows affected (0.01 sec)
以上のようにコマンドを実行した結果、2段目のような表示であればSQL文が実行されています。
次に作成を確認するために、SHOW TABLES文
を使用し、テーブルの一覧を確認してみます。
mysql> SHOW TABLES;
+-------------------+
| Tables_in_sqltest |
+-------------------+
| items |
+-------------------+
1 row in set (0.00 sec)
上記のように、コマンドを実行し"Tables_in_sqltest"に"items"というテーブルが確認できれば、テーブルが正しく作成されたということになります。
FROM句
- 対象となるテーブルを指定する際に使用するSQLの句
以下のようにコマンドを実行し2行目以降の表示がでてくれば、正常に実行できています。
mysql> SHOW columns FROM items;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
これにより、itemsテーブルにはidとnameという2つのカラムがあることが確認できました。
ALTER文
- データベースやテーブルを編集できるSQLの文
-
ALTER TABLE
文を実行すると、テーブルに対してカラムの追加や削除ができる
# ALTERでカラム情報の更新
mysql> ALTER TABLE 《テーブル名》 操作
# カラムを1つだけ追加する場合
mysql> ALTER TABLE テーブル名 ADD カラム名 カラムの型;
# カラムを複数追加する場合
mysql> ALTER TABLE テーブル名 ADD (カラム名 カラムの型, ……);
ここでは"price"と"zaiko"という2つのカラムを、共に"int"型で作成してみます。
mysql> ALTER TABLE items ADD (price int, zaiko int);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
カラムを追加したので、テーブルの構造がどう変化したか確認してみます。
下記のようにカラムが追加されていれば成功となります。
mysql> SHOW columns FROM items;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| price | int(11) | YES | | NULL | |
| zaiko | int(11) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
カラムの追加ができたので、カラムの変更も行ってみます。
カラムの変更は、先ほどと同様にALTER TABLE
文を使用し、以下のような文法でSQL文を記述します。
先ほど"zaiko"というカラムを追加しましたが、他のカラムに合わせてカラム名を英語表記にするため、
"stock"という名前に変更しておきます。
以下のような表示であれば、正常に実行できています。
mysql> ALTER TABLE items CHANGE zaiko stock int;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
このとき、カラムの型は変更しなくても、再度記述をしなくてはなりません。
そのため、カラムの変更をするときはこの型の部分を間違えないように注意する必要があります。
先ほどと同様にカラムが変更されていることを確認します。
下記のように表示されていれば、正常に変更されています。
mysql> SHOW columns FROM items;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| price | int(11) | YES | | NULL | |
| stock | int(11) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
最後はALTER文を使いカラムを削除してみます。
mysql> ALTER TABLE items DROP stock;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
次にカラムが削除されていることを確認します。
以下のようにカラムがきちんと削除されていることを確認できれば成功です。
mysql> SHOW columns FROM items;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| price | int(11) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)