はじめに
本記事は、SQLの基礎的な部分について記述します。
そういえば、SQLってなんだっけ?と恥ずかしながら疑問に思ったため記述します。
SQLとは
DBを操作する言語
です。
「Structured Query Language」の略
↑(追記)
コメント欄にて、略語ではないという参考サイトと指摘をいただきましたので、
ここで改めて訂正します。申し訳ありません。
Structured = 構造化
Query = 問い合わせ
by Google先生
私は、Rubyを使っているのでrails db:createコマンド
や、
Sequel Pro(シークエルプロ)を使用したデータの書き換えは行ってきました。
これらの操作は、
最終的にSQLという言語が実行されて実現する仕組み
になっており、
SQLを直接使用せずに、
「特定のコマンドの実行」や「GUI操作」を実現できます。
SQLによるデータベースの操作
データベースやテーブルに対して命令でき、大きく以下の3つに分類されます。
-
データを定義
「DDL(Data Definition Language)」 -
データを操作
「DML(Data Manipulation Language)」 -
データを制御
「DCL(Data Control Language)」
ターミナル上で入力。
# MySQLに接続
% mysql -u root
CREATE文
データベースやテーブルを作成できるSQLの文
mysql> CREATE DATABASE 《データベース名》;
今回は、データベース名をsqlcheck
としておきます。
mysql> CREATE DATABASE sqltest;
Query OK, 1 row affected (0.00 sec)
SHOW文
データベースやテーブルを一覧表示できるSQLの文
mysql> SHOW DATABASES;
mysql> SHOW DATABASES;
+------------------------+
| Database |
+------------------------+
| 省略 |
| sqlcheck |
| 省略 |
+------------------------+
36 rows in set (0.00 sec)
DROP文
データベースやテーブルを削除できるSQLの文
mysql> DROP DATABASE sqlcheck;
Query OK, 0 rows affected (0.02 sec)
# sqlcheckがちゃんとなくなっていることを確認
mysql> SHOW DATABASES;
USE文
どのデータベースを使用するのかを指定するSQLの文
# 先ほどsqlcheckを消したので再度作成します
mysql> CREATE DATABASE sqlcheck;
Query OK, 1 row affected (0.00 sec)
# sqlcheckを使うよ!と命令
mysql> USE sqlcheck;
Database changed
CREATE TABLE文
テーブルを作成するSQL文
Railsでは、
rails g model モデル名
してから、rails db:migrate
していましたが、
この裏では、CREATE TABLEというSQL文
が動いていたということですね。
MySQLで数値型や文字列型を定義する際は、以下のような型名を使用します。
- 型名:
INT
, 保存できる値:数字
- 型名:
VARCHAR(M)
, 保存できる値:最大M文字の文字列
以下なら、最大255文字の文字列が保存できるitemsテーブルを作成できる
mysql> CREATE TABLE items (id INT, name VARCHAR(255));
Query OK, 0 rows affected (0.01 sec)
# テーブルを見てみよう
mysql> SHOW TABLES;
+-------------------+
| Tables_in_sqltest |
+-------------------+
| goods |
+-------------------+
1 row in set (0.00 sec)
テーブルの構造確認
FROM句
対象となるテーブルを指定する際に使用するSQLの句
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)
カラム追加
ALTER文
データベースやテーブルを編集できるSQLの文
# 例.カラムを1つだけ追加する場合
mysql> ALTER TABLE テーブル名 ADD カラム名 カラムの型;
# 例.カラムを変更する場合
mysql> ALTER TABLE テーブル名 CHANGE 古いカラム名 新しいカラム名 新しいカラムの型;
# 例.カラムを削除する場合
mysql> ALTER TABLE テーブル名 DROP カラム名;
mysql> ALTER TABLE items ADD (price int, soldout int);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
# itemsテーブルを確認
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 | |
| soldout | int(11) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
以上です。
終わりに
SQLという言葉をよく耳にし、理解できていると思っておりましたが、不安でしたので復習しました。
知ってそうでちゃんと知ってないシリーズですね。
以下参考サイトです。
SQLの種類(DDL、DML、DCL)
明日も頑張ります!!