LoginSignup
4
2

More than 1 year has passed since last update.

【SQL】RDB操作をMySQL環境で実践

Last updated at Posted at 2022-10-18

はじめに

今回は、SQLによるデータベース操作について、まとめます。
最後に無料でSQLが学べるサイトを紹介しています。

※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。

この記事の目的

以下内容についてアウトプット

  • SQLの基礎知識
  • SQLの書き方

この記事の内容

  1. SQLとRDBについて
  2. 基礎文法
  3. 実践的な文法

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の学習サイト(無料)です。

4
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2