SQLでできることとは?イチから学ぶデータベース操作【初心者向け】

  • 「SQLが気になるけど、ちょっと難しそうだな……」
  • 「SQLでできることや、特徴を詳しく知りたい……」

データベースを扱うにはSQLが欠かせないとは分かっていても、具体的にSQLでできることや、どのように便利なのかわからないエンジニアの方もいるのではないでしょうか。

そこで今回はSQL初心者の方に向けて、SQLでできることについて、具体的なデータベース操作方法とともにご紹介します。

SQLとは?

SQLは、データベースを操作する言語です。

データベースとは、ある特定の条件に当てはまるデータが、使いやすい形で整理されたデータ群のことです。「電話帳」のようなものを想像していただければ問題ありません。

ただ「データベースを操作する言語」と聞いても、「なぜ使うのか?」「何ができるか?」がよくわからない方もいるでしょう。

そこでまず、以下について解説します。

  • SQLを学習するメリット
  • SQLの種類

SQLを学習するメリット

以下でSQLを学習するメリットを2つご紹介します。

  • データ検索・更新・削除などが簡単にできる
  • 管理データとレポートデータを分けられる

 1. データ検索・更新・削除などが簡単にできる

GoogleスプレッドシートやExcelなどでデータ管理をしていて、以下のような悩みを持ったことはありませんか?

  • 欲しいデータを抽出してグラフ・レポートを作るのに、多くの時間がかかる
  • データが増えるにつれて作業時間も増え、データメンテナンスが大変になっている

SQLを使えば、欲しいデータをサクッと抽出できます。またデータ更新も高速なので、データメンテナンスも楽になるのです。

 2. データ一覧から欲しいデータを欲しいときだけ抽出できる

データ管理をしやすくするための「管理データ一覧」の項目と、レポートに使う「レポートデータ一覧」の項目をそれぞれ別に作っているケースはよくあるでしょう。

  • 管理データ:細かいレベルでデータを表示
  • レポートデータ:一部データのみサマリー結果を表示

ただ同じデータを使うなら、余計なシートを増やしたくないはずです。レポートを出すときだけ、管理データから一部のデータを抽出して、レポートデータを作っている方もいるのではないでしょうか。でも、面倒ですよね……。

SQLを使えば、データ一覧から「欲しいデータを抽出するスクリプト」が作れます。

一度作ってしまえば欲しいデータを一瞬で取得できるので、わざわざ別にレポートデータのシートを作る必要がありません。

SQLの種類

SQLの種類は、大きく分けて以下の4つです。

  • DML(データ操作言語)
  • DDL(データ定義言語)
  • DCL(データ管理言語)
  • トランザクション制御

1. DML(データ操作言語)

DMLは、データベースのレコード(データ)を操作する文法です。
DMLでは、以下のような操作ができます。

  • SELECT:レコード検索
  • INSERT:レコード挿入
  • UPDATE:レコード更新
  • DELETE:レコード削除

具体的な書き方は、後ほど解説しますね。

2. DDL(データ定義言語)

DDLは、データベース・テーブルを定義する文法です。

データベースは、以下のようなデータ構造になっています。

データベース・テーブル・レコードの関係性

▲データベース・テーブル・レコードの関係性

データベースの中に複数のテーブルがあり、テーブルの中にレコードとしてデータが入っています。

Excelのブックの中にシートがあり、シートの中にセルがあるのと似ていますね。

そこでDDLは、以下の操作ができます。

  • CREATE:データベース・テーブルの新規作成
  • ALTER:データベース・テーブル定義変更
  • DROP:データベース・テーブルの削除

「部署テーブル」「ユーザ一覧テーブル」「請求データ一覧テーブル」のように、データのまとまりをテーブルとして作成するイメージです。

3. DCL(データ管理言語)

DCLは、データの権限を操作するための文法です。

だれでもデータ更新ができてしまうと、セキュリティ事故につながってしまう可能性があるります。それを防ぐために、データベースではアカウントごとに操作権限を設定できるのです。

たとえば、「データ検索可 、 更新&削除不可」のように更新できないようにしたり、テーブル単位で検索できる範囲を狭めたりできます。

DCLでは、以下の操作ができます。

  • GRANT:権限の追加
  • REVOKE:権限の削除

権限を管理するときは必須になるので、覚えておきましょう。

4. トランザクション制御

データベースのデータは、一度書き換えてしまうとバックアップから復元しないと戻せません。そのためデータ更新前に結果を確認してから、更新するのが一般的です。

その際に使用するのが、トランザクション制御です。おおもとのデータを変えずに、更新結果だけを確認したいときに使います。

トランザクション制御は以下のような流れで実行します。

  1. トランザクション開始
  2. データ更新用SQLを実行
  3. データ更新結果を確認
  4. 結果が問題なければトランザクションなしで再実行
  5. 大元のデータが正しく変わっていることを確認

手順3でデータ更新結果が間違っていても、トランザクション制御をかけているのでおおもとのデータに影響はありません。

たとえば、データベースのひとつである『MySQL』でトランザクション制御するときは、以下のようにコードを書きます。

BEGIN;

-- データ更新処理を書く

-- データ検索処理を書く

ROLLBACK;

上記コードを実行して一旦確認してから、「BEGIN;」「ROLLBACK;」を外して再実行すれば、おおもとのデータが書き換わります。

SQLでできること

SQLの種類だけでは、具体的なデータ操作イメージが湧かない方もいるでしょう。

そこで次は、SQLでできることを以下の2つに分けて解説します。

  • データベース・テーブル操作
  • レコード操作

SQLでできること1:データベース・テーブル操作

DDLでも少し解説しましたが、SQLではデータベースとテーブルの操作ができます。

データベースのテーブルは、以下のように複数列でできています。

データベースのテーブルデータイメージ

▲データベースのテーブルデータイメージ

上記はExcelで作っていますが、No、ユーザID、ユーザ名、部署コード、部署名などの列がありますよね。

このように、SQLではテーブルの列名を決めてテーブルを作ったり、テーブルの列名を変更したりできるのです。

具体的な書き方は、後ほど解説しますね。

SQLでできること2:レコード操作

SQLはデータベースやテーブル操作だけでなく、レコード操作もできます。

たとえば、データを挿入・データ更新をする処理を以下のように行えます。

▲テーブルにデータ挿入した例

▲テーブルにデータ挿入した例

テーブルのデータを変更した例

▲テーブルのデータを変更した例

条件を指定すれば、データの検索や挿入、更新、削除ができます。

SQLで効率化できる業務 3事例

「SQLの概要やできることはわかったけど、具体的にどんな業務が効率化できるんだろう……」と思った方もいるのではないでしょうか。

そこで次に、SQLで効率化できる業務を3つご紹介します。

1. データ検索や加工が高速で行える

SQLの魅力は、データ検索や加工が高速で行えることです。

Excelでもデータ検索や加工はできますが、複雑な関数をいれたり、データ量が多くなったりしてくると操作が重たくなりますよね。

また抽出条件が複雑だと、データを絞り込んで欲しい情報をまとめるだけで時間がかかります。

しかしSQLを使えば、たった数秒でデータ検索や加工ができるのです。

2. 夜間にデータ更新を予約できる

SQLはその場でコードを書いて実行するだけでなく、実行タイミングを制御できます。

そのため夜間にデータ更新を予約することも可能です。

毎日溜まるデータをサマリーデータとしてまとめる業務を、夜間の予約実行に切り替えれば、業務の手間を減らせます。

3. 管理するデータとは別に見せ方を変更できる

管理しやすいデータ構造と、見たいデータが一致しないケースはよくあります。

SQLを使えば、元のデータを変えずに表示データを変えられるのです。

たとえば以下のような複数テーブルを合体させて、欲しい情報だけ見れます。

3つのテーブルから見たいデータを絞り込む時の例

▲3つのテーブルから見たいデータを絞り込む時の例

部署名称は、組織改革に合わせて変更されるケースが多いですよね。そのため「部署テーブル」のように、部署だけの情報で管理しているところが多いのではないでしょうか。

ただ、一覧データで見せるときは「部署コード」は必ずしも必要ではないですよね。

むしろ部署名だけで良い時の方が多いはずです。SQLでは表示する項目を指定して、データ検索ができます。

見たいデータを簡単に作れるので、データ活用もしやすくなるのです。

SQLの実行環境を作る2つの方法

ここからは、SQLを書くための実行環境の作り方を2つ解説します。

実行環境は、大きく分けて以下の2つです。

  • Webで使えるサービスを利用する
  • パソコンにインストールする

Webで使えるサービスを利用する

はじめてSQLを使う方にとって、始めやすさは重要ですよね。

「便利なことはわかったけど、いざ始めようとすると腰が重たいな……」と思わないためにも、はじめてSQLを学ぶ方は、サクッと使えるWebサービスがおすすめです!

paiza.io』を使えば、以下のたった2ステップですぐにSQL実行環境が用意できます。

1. paiza.ioをひらき、「コード作成を試してみる(無料)」ボタンをクリック

「コード作成を試してみる」をクリック

▲「コード作成を試してみる(無料)」をクリック(出典:paiza.io)

2. 言語選択タブをMySQLに変更

言語選択タブを「MySQL」に変更

▲言語選択タブを「MySQL」に変更(出典:paiza.io

「環境構築なしで、手軽にSQLをはじめてみたい!」という方におすすめです。

パソコンにインストールする

上記の方法を試そうとしても、「自社のデータを外部サービスに登録するのは怖い……」という方もいますよね。

そんなときは、パソコンにSQLの実行環境をインストールしましょう。

データベースにはいくつか種類がありますが、MySQLがおすすめです。インストーラをダウンロードして、画面に沿って進めるだけで簡単に環境構築ができます。

MySQLインストール | MySQLの使い方 – DBOnline」という環境構築記事をぜひ参考にしてみてください。

SQLで簡単なサンプルコードを書いてみよう

SQLの実行環境が用意出来たら、簡単なSQLを書いて動かしてみましょう。

今回は、以下の部署テーブルの作り方を解説します。

部署テーブルのイメージ

▲部署テーブルのイメージ

以下手順で、ひとつずつ解説しますね。

  1. テーブルの作成
  2. レコードの登録 + 検索

1. テーブルの作成

まずは、部署テーブルを新規作成します。

テーブルは、項目ごとに「データの型」を指定する必要があります。

テーブル名:dept_lists

列名(物理名) 列名(論理名) データ型
no No 整数型:Int
dept_code 部署コード 文字列型:VARCHAR
dept_name 部署名称 文字列型:VARCHAR

物理名は、SQLを書くときに使う英字の名前です。論理名はテーブルに登録はしませんが、わかりやすいように今回は載せています。

データの型は、以下の4種類があります。

  • 整数型
  • 浮動小数点数型
  • 日付型
  • 文字列型

入れる値とデータ型が合っているかどうか、確認してから入れるようにしましょう。

CREATE文でテーブル作成するSQLは以下のとおりです。

テーブル作成するSQL:

-- 部署テーブル作成

CREATE TABLE dept_lists (

 no INT,

 dept_code VARCHAR(50),

 dept_name VARCHAR(50)

);

-- テーブルの構造を表示するクエリ

DESC dept_lists;

実行結果:

| Field | Type | Null | Key | Default | Extra |

| --- | --- | --- | --- | --- | --- |

| no | int(11) | YES | | \N | |

| dept_code | varchar(50) | YES | | \N | |

| dept_name | varchar(50) | YES | | \N | |

「CREATE TABLE」の直後にテーブル名(dept_lists)を入力し、括弧の中でno(No)、dept_code(部署コード)、dept_name(部署名称)をそれぞれ「項目名 データ型」としてCREATE文を作っています。

その後、テーブルができたか確認するために「DESC dept_lists;」を入れています。CREATE文で作った定義が出ていればOKです。

2. レコードの登録 + 検索

次に、データを追加します。

データを挿入するときは、INSERT文を使います。INSERT文はデータ挿入しかできないので、挿入した結果を確認したいときはSELECT文を使用しましょう。

こちらも使い方を解説する前に、作ったコードと実行結果をお見せします。

レコードの登録・検索をするSQL:

-- レコード挿入
INSERT INTO dept_lists(no,dept_code,dept_name) VALUES('1','DD00001','第1開発部');
INSERT INTO dept_lists(no,dept_code,dept_name) VALUES('2','DD00002','第2開発部');
INSERT INTO dept_lists(no,dept_code,dept_name) VALUES('3','DD00003','第3開発部');
INSERT INTO dept_lists(no,dept_code,dept_name) VALUES('4','DD00004','第4開発部');
INSERT INTO dept_lists(no,dept_code,dept_name) VALUES('5','DD00005','第5開発部');

-- dept_listsのレコード検索
SELECT
  *
FROM
  dept_lists;

実行結果:

| no | dept_code | dept_name |

| ---: | --- | --- |

| 1 | DD00001 | 第1開発部 |

| 2 | DD00002 | 第2開発部 |

| 3 | DD00003 | 第3開発部 |

| 4 | DD00004 | 第4開発部 |

| 5 | DD00005 | 第5開発部 |

INSERT文は、以下のように1行ごとにデータ挿入文を作ります。

INSERT INTO テーブル名(列名1 , 列名2 , …… 列名n) VALUES(列1の値 , 列名2の値 , …… 列名nの値);

「ちょっと作り方が難しそう……覚えられるかな……」と不安な方は、「SQLのINSERT文をページ上で一瞬で簡単に自動生成できるWEBツール」を参考にしてみてください。

テーブル名や列名などの追加したいデータを以下のように入れるだけで、自動でINSERT文を作成できます。

ただ、行の最後にセミコロン(;)がつかないので、作成後はセミコロンをつけて利用しましょう。

SQLを実務で使う時の注意点

最後に補足として、SQLを実務で使うときの注意点を2つ解説します。

  • データ更新時はトランザクションを制御する
  • SQLを実行するデータベースを意識する

注意点1:データ更新時はトランザクション制御する

データ更新するときはいきなり更新するのではなく、トランザクション制御をするのがおすすめです。

先ほどのサンプルのデータを、以下のように更新する場合を考えてみましょう。

テーブルの変更イメージ

▲テーブルの変更イメージ

トランザクション制御しつつ更新する場合は、以下のように書きます。

トランザクション制御を行いつつデータを更新する場合は、以下のようにコードを書きます。

SQL:

-- トランザクション開始
BEGIN;

-- 部署コード「DD00004」の部署名を「第1営業部」に更新
UPDATE
  dept_lists
SET
  dept_name = '第1営業部'
WHERE
  dept_code = 'DD00004';

-- 部署コード「DD00005」の部署名を「第2営業部」に更新
UPDATE
  dept_lists
SET
  dept_name = '第2営業部'
WHERE
  dept_code = 'DD00005';

-- 変更後のデータを確認
SELECT
  *
FROM
  dept_lists;

-- 結果を確認したら戻す
ROLLBACK;

-- 変更前のデータを確認
SELECT
  *
FROM
  dept_lists;

実行結果(データ更新後):

| no | dept_code | dept_name |

| ---: | --- | --- |

| 1 | DD00001 | 第1開発部 |

| 2 | DD00002 | 第2開発部 |

| 3 | DD00003 | 第3開発部 |

| 4 | DD00004 | 第1営業部 |

| 5 | DD00005 | 第2営業部 |

実行結果(データ更新前):

| no | dept_code | dept_name |

| ---: | --- | --- |

| 1 | DD00001 | 第1開発部 |

| 2 | DD00002 | 第2開発部 |

| 3 | DD00003 | 第3開発部 |

| 4 | DD00004 | 第4開発部 |

| 5 | DD00005 | 第5開発部 |

BEGIN ~ ROLLBACKの中にあるSELECT文は、レコード更新後の結果が表示されています。ただ、ROLLBACKの後にあるSELECT文の結果は、変更前の結果になっていますよね。

トランザクション制御を行えば、このように更新結果を先に確認できるのです。

データの重要度に限らず、データの更新や削除を行うときは、トランザクション制御をしましょう。

注意点2:SQLを実行するデータベースを意識する

SQLは、SELECT文、INSERT文、UPDATE文、DELETE文などの基礎的な書き方はどのデータベースでも同じですが、データの条件指定に使う関数はデータベースによって異なります。

そのためより高度なSQLを書けるようになってきたら、「データベース名 + 調べたいこと」で書き方を調べて使うのがおすすめです。

「書いてあるコードをそのまま使ったのに動かない……」と無駄な時間を消費しないためにも、頭の片隅に置いておくと良いでしょう。

まとめ

今回は、SQLでできることについて解説しました。

SQLを使いこなせるようになると、データ管理や操作が圧倒的に効率化できます。

まずはWebですぐに使えるpaiza.ioを利用して、簡単なSQLを書くところから始めてみるのがおすすめです。

ぜひSQLを書いて、業務の効率化に役立ててみてください。

 

こちらもおすすめ!▼

SHARE

  • 広告主募集
  • ライター・編集者募集
  • WorkshipSPACE
エンジニア副業案件
Workship