DBの扉をノックしたばかりのど新人がSQL(DML)を学んだまとめ
2020年やってやるぞ精神のみなさんこんにちは。 この度、コンサルティング事業部から開発室へと移動したスーパーど新人坂本です。
今回はこの数日間で学んだSQLの基礎について、メモがてらここに刻んでおきます。
SQLって何よ
SQL(Structured Query Language)とはデータを表形式の構造で管理するデータベース(リレーショナルデータベース)の操作・定義・制御などを行う言語。
ただ一口にSQLといっても、SQLには大きく、
- DDL(データを定義する言語)
- DML(データを操作する言語)
- DCL(データを制御する言語)
という3つの方言があるらしい。
で、今回僕はこのうちのDMLについて学んだので、今回はそれを以下にメモっておきます。
DMLについて
DMLの正式名称はData Manipulation Language(そのままやん)。 DMLでは以下4つの文を用いてデータベースのテーブル・レコードを操作する。
- SELECT(データの取得)
- INSERT(データの追加)
- UPDATE(データの更新)
- DELETE(データの削除)
また、SQLでは以下のようにコメントを残す。
-- ほげほげほげ(--の後に半角スペース)
1. SELECT(データの取得)
SELECT文 == データベースに格納されたテーブルからデータを取得(抽出)する。
select
name -- 取得したいカラム名
from
table_name -- テーブル名
where
hoge, -- 条件1
and fuga -- 条件2(条件が複数の場合は文頭にand)
group by
column_names -- グループ化したいカラム名
having
hogehogehoge -- 絞り込む条件
上記の実行順序は以下のとおり。
- FROM : 対象テーブルから全データを取得
- WHERE : 条件に一致するレコードを絞り込む
- GROUP BY : グループ化(まとめる)
- HAVING : 集計結果から絞り込み
- 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;
まとめ
僕自身まだまだふわっとした理解なので、もう少しスキルが身についたらこの記事を更新しようと思います。
では。