はじめに
今回は、SQLによるデータベース操作について、まとめます。
最後に無料でSQLが学べるサイトを紹介しています。
※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。
この記事の目的
以下内容についてアウトプット
- SQLの基礎知識
- SQLの書き方
この記事の内容
- SQLとRDBについて
- 基礎文法
- 実践的な文法
1. SQLとRDBについて
SQLとは
Structured Query Language(ストラクチャード クエリ ランゲージ)
の略。(クエリは、問い合わせなどの意味を持ちます。)
RDBを操作するための言語 であり、データベースに与える命令は以下3つの目的に分類できます。
-
データ定義言語 - DDL(Data Definition Language)
- データの作成・削除・変更
-
データ操作言語 - DML(Data Manipulation Language)
- データの検索・取得・登録・更新・削除
-
データ制御言語 - DCL (Data Control Language)
- データベースに対して行なった変更の確定・取消
- 操作の権限を設定
RDBとは
リレーショナルデータベース(関係データベース)の略。
複数のテーブルによって構成されたデータベースの管理方式 のこと。
データを複数の表(テーブル)で管理し、それぞれの関係を定義することにより、複雑なデータを処理することができる。
2. 基礎文法
■ CREATE文
データベースやテーブルを作成する。
rails db:migrate
の裏側では、CREATE TABLE文によってテーブルとカラムが作成されている。
/* データベースを作成 */
mysql> CREATE DATABASE データベース名;
/* テーブルを作成 */
mysql> CREATE TABLE テーブル名 (カラム名1 カラム名1の型, カラム名2 カラム名2の型, …);
/* 例 */
mysql> CREATE TABLE items (id INT, name VARCHAR(255));
■ DROP文
データベースやテーブルを削除する。
/* データベースを削除 */
mysql> DROP DATABASE データベース名;
■ ALTER文
データベースやテーブルを編集する。
/* カラムを追加 */
mysql> ALTER TABLE テーブル名 ADD (カラム名1 カラム名1の型, カラム名2 カラム名2の型...);
/* カラムを変更 */
mysql> ALTER TABLE テーブル名 CHANGE 古いカラム名 新しいカラム名 新しいカラムの型;
/* カラムを削除 */
mysql> ALTER TABLE テーブル名 DROP 削除したいカラム名, DROP 削除したいカラム名...;
■ USE文
どのデータベースを使用するか指定する。
テーブルを操作する場合、「どのデータベースにあるテーブル」を選択する必要がある。
指定しなかった場合・・・ERROR 1046 (3D000): No database selected
/* データベースを選択 */
mysql> USE データベース名;
■ SHOW文
データベースやテーブルを一覧表示する。
FROM句
は、対象となるテーブルを指定する際に使用する。
/* データベースを表示 */
mysql> SHOW DATABASES;
/* テーブルを表示 */
mysql> SHOW TABLES;
/* テーブルの構造を表示 */
mysql> SHOW columns FROM テーブル名;
■ INSERT文
テーブルにデータを登録する。
INTO句, VALUES句
と組み合わせて使用する。
/* 全てのカラムにデータを登録 */
mysql> INSERT INTO VALUES(値1, 値2, 値3);
/* 指定のカラムのみデータを登録する */
mysql> INSERT INTO テーブル名(カラム名1, カラム名2) VALUES(値1, 値2);
■ UPDATE文
データを更新する。
SET句, WHERE句
と組み合わせて使用する。
mysql> UPDATE テーブル名 SET 変更内容 WHERE 条件;
■ DELETE文
データを削除する。
FROM句, WHERE句
と組み合わせて使用する。
mysql> DELETE FROM テーブル名 WHERE 条件;
■ SELECT文
データを取得する。
*(ワイルドカード)
は、「全てのパターンにマッチするもの」を意味する。
/* テーブルから全てのカラムを取得 */
mysql> SELECT * FROM テーブル名;
/* テーブルから指定のカラムを取得 */
mysql> SELECT カラム名 FROM テーブル名;
3. 実践的な文法
データ検索について
-
WHERE句
条件にによって制限したデータを取得する。 -
LIKE句
WHERE句+LIKE句
で文字列検索を行う。 -
AND演算子
複数条件に合ったデータを取得する。 -
OR演算子
複数の条件のうち、1つ以上を満たしたデータを取得する。 -
NOT演算子
条件以外のデータを取得する。 -
BETWEEN句
BETWEEN句+AND演算子
で上限と下限を設定し、範囲に含まれているデータを取得する。 -
IN演算子
1つのカラムに対しリストを指定し、特定の条件が含まれるデータを取得する。
/* LIKE句 */
mysql> SELECT * FROM テーブル名 WHERE カラム名 LIKE '検索文字';
/* AND演算子 */
mysql> SELECT * FROM テーブル名 WHERE 条件1 AND 条件2;
/* OR演算子 */
mysql> SELECT * FROM テーブル名 WHERE 条件1 OR 条件2;
/* NOT演算子 */
mysql> SELECT * FROM テーブル名 WHERE NOT 条件1;
/* BETWEEN演算子 */
mysql> SELECT * FROM テーブル名 WHERE カラム名 BETWEEN 下限 AND 上限;
/* IN演算子 */
mysql> SELECT * FROM テーブル名 WHERE カラム名 IN(値1, 値2...):
データ検索の応用
-
JOIN句
指定したテーブルのカラムの値が一致するデータを元に、各テーブルのレコードを結合する。
書き方:FROM テーブル名 JOIN テーブル名 ON 値1 = 値2;
-
CONCAT関数
複数の文字列を連結する。
書き方:CONCAT(文字列1, 文字列2...)
-
GROUP BY句
特定のデータをグループ化する。
書き方:GROUP BY カラム名
-
COUNT関数
データの総量をカウントする。
書き方:COUNT(カラム名)
-
サブクエリ
ある検索結果を利用し、別のSQL文を発行する仕組みのこと。
/* テーブルを結合しデータを取得 */
mysql> SELECT *FROM shifts s JOIN users u ON s.user_id = u.id;
/* 文字列を連結 */
CONCAT(文字列1, 文字列2, ……)
/* 特定の日に誰がどのくらいシフトに入ったか? */
mysql> SELECT
CONCAT(last_name, first_name) "名前",
COUNT(*) "コマ数"
FROM shifts s
JOIN users u ON s.user_id = u.id
WHERE date = "2015-07-01"
GROUP BY user_id;
=> +-----------------+-----------+
| 名前 | コマ数 |
+-----------------+-----------+
| 白坂拓実 | 1 |
| 松田里帆 | 2 |
| 舘林丈二 | 1 |
+-----------------+-----------+
/* 特定の日にシフトに入ってなかった人は? */
mysql> SELECT *
FROM users
WHERE id NOT IN (
SELECT user_id
FROM shifts
WHERE date = "2015-07-01"
);
参考
SQLの学習サイト(無料)です。