開発室ブログ

SQL

DBの扉をノックしたばかりのど新人がSQL(DML)を学んだまとめ

2020年やってやるぞ精神のみなさんこんにちは。 この度、コンサルティング事業部から開発室へと移動したスーパーど新人坂本です。

今回はこの数日間で学んだSQLの基礎について、メモがてらここに刻んでおきます。

SQLって何よ

SQL(Structured Query Language)とはデータを表形式の構造で管理するデータベース(リレーショナルデータベース)の操作・定義・制御などを行う言語。

ただ一口にSQLといっても、SQLには大きく、

  • DDL(データを定義する言語)
  • DML(データを操作する言語)
  • DCL(データを制御する言語)

という3つの方言があるらしい。

で、今回僕はこのうちのDMLについて学んだので、今回はそれを以下にメモっておきます。

DMLについて

DMLの正式名称はData Manipulation Language(そのままやん)。 DMLでは以下4つの文を用いてデータベースのテーブル・レコードを操作する。

  1. SELECT(データの取得)
  2. INSERT(データの追加)
  3. UPDATE(データの更新)
  4. DELETE(データの削除)

また、SQLでは以下のようにコメントを残す。

-- ほげほげほげ(--の後に半角スペース)

1. SELECT(データの取得)

SELECT文 == データベースに格納されたテーブルからデータを取得(抽出)する。

select 
    name -- 取得したいカラム名
from
    table_name -- テーブル名
where
    hoge, -- 条件1
    and fuga -- 条件2(条件が複数の場合は文頭にand)
group by 
    column_names -- グループ化したいカラム名
having
    hogehogehoge -- 絞り込む条件

上記の実行順序は以下のとおり。

  1. FROM : 対象テーブルから全データを取得
  2. WHERE : 条件に一致するレコードを絞り込む
  3. GROUP BY : グループ化(まとめる)
  4. HAVING : 集計結果から絞り込み
  5. SELECT : 指定したカラムだけを返す

データの取得方法

すべてのカラムを取得

select * -- 全てのカラムからレコードを取得
from
    table_name -- テーブル名;

一部のカラムだけ取得

select
    column_name -- カラム名
from
    table_name -- テーブル名;

複数のカラムを取得

select
    column_name1,
    column_name2
from 
    table_name -- テーブル名;

条件を指定する

select *
from
    table_name
where
    age >= 10; -- 10以上のデータ

条件を複数指定する

select *
from
    table_name
where
    hoge -- 条件1
    and fuga; -- 条件2

レコードの件数取得

select count(*) -- レコードをカウントする
from 
    table_name;

データを並び替えて取得

-- 昇順
select *
from
    table_name 
    order by column_name;

-- 降順
select *
from
    table_name 
    order by column_name desc;

-- 上位100件
select *
from
    table_name 
    order by column_name
    desc limit 100;

-- 下位100件数
select *
from
    table_name 
    order by column_name
    limit 100;

テーブルの結合

テーブルAとテーブルBをまとめるなど、複数のテーブルを連結することを結合とよび、結合方法には大きく、

  • 内部結合
  • 外部結合

の2種類がある。

内部結合は指定したカラムの値が一致するものだけを結合し、一致しないものは取得しないのに対し、外部結合は指定したカラムの値が一致するものを結合し、尚且つ一致しないものも取得できる。

-- 内部結合
select *
from 
    table1
    inner join table2 
        on table1.column_name = table2.column_name;

-- 外部結合(左結合)
select *
from 
    table1
    left join table2 
        on table1.column_name = table2.column_name;

-- 外部結合(右結合)
select *
from 
    table1
    right join table2 
        on table1.column_name = table2.column_name;

取得するカラムを条件分岐する

select
    column_name1,
    case -- カラムを条件分岐して出力
        when 条件1 then 出力1
        when 条件2 then 出力2
        else 出力3
    end as column_name2
from
    table_name;

2. INSERT(データの追加)

既存のテーブルにレコードを追加する命令。
カラム数と追加する値数が同じでないとエラー。

insert into -- 追加宣言
    table_name(
        column_name1, -- 追加したいカラム
        column_name2 -- 追加したいカラム
    )
    values(
        value1, -- 追加したい値
        value2  -- 追加したい値
    );

3. UPDATE(データの更新)

既存のデータを更新する命令。

-- 基本形
update
    テーブル名
set
    更新処理
where
    条件(更新したいフィールドなど)

以下例

-- rankカラムのデータに+1する(idが10のレコードのみ)
update
    table_name
set
    rank = rank + 1
where
    id = 10;

4. DELETE(データの削除)

既存のテーブルからデータを削除する命令。

-- 基本形

delete
from
    テーブル名
where
    条件;

-- idカラムの値が100以上のデータだけ削除

delete
from
    table_name
where
    id >= 100;

まとめ

僕自身まだまだふわっとした理解なので、もう少しスキルが身についたらこの記事を更新しようと思います。

では。

RecentPost