エンジニアの副業は週1からでも可能?副業の例や探し方も解説
- ITエンジニア
- 副業
データベースを扱うにはSQLが欠かせないとは分かっていても、具体的にSQLでできることや、どのように便利なのかわからないエンジニアの方もいるのではないでしょうか。
そこで今回はSQL初心者の方に向けて、SQLでできることについて、具体的なデータベース操作方法とともにご紹介します。
目次
SQLは、データベースを操作する言語です。
データベースとは、ある特定の条件に当てはまるデータが、使いやすい形で整理されたデータ群のことです。「電話帳」のようなものを想像していただければ問題ありません。
ただ「データベースを操作する言語」と聞いても、「なぜ使うのか?」「何ができるか?」がよくわからない方もいるでしょう。
そこでまず、以下について解説します。
以下でSQLを学習するメリットを2つご紹介します。
GoogleスプレッドシートやExcelなどでデータ管理をしていて、以下のような悩みを持ったことはありませんか?
SQLを使えば、欲しいデータをサクッと抽出できます。またデータ更新も高速なので、データメンテナンスも楽になるのです。
データ管理をしやすくするための「管理データ一覧」の項目と、レポートに使う「レポートデータ一覧」の項目をそれぞれ別に作っているケースはよくあるでしょう。
ただ同じデータを使うなら、余計なシートを増やしたくないはずです。レポートを出すときだけ、管理データから一部のデータを抽出して、レポートデータを作っている方もいるのではないでしょうか。でも、面倒ですよね……。
SQLを使えば、データ一覧から「欲しいデータを抽出するスクリプト」が作れます。
一度作ってしまえば欲しいデータを一瞬で取得できるので、わざわざ別にレポートデータのシートを作る必要がありません。
SQLの種類は、大きく分けて以下の4つです。
DMLは、データベースのレコード(データ)を操作する文法です。
DMLでは、以下のような操作ができます。
具体的な書き方は、後ほど解説しますね。
DDLは、データベース・テーブルを定義する文法です。
データベースは、以下のようなデータ構造になっています。
データベースの中に複数のテーブルがあり、テーブルの中にレコードとしてデータが入っています。
Excelのブックの中にシートがあり、シートの中にセルがあるのと似ていますね。
そこでDDLは、以下の操作ができます。
「部署テーブル」「ユーザ一覧テーブル」「請求データ一覧テーブル」のように、データのまとまりをテーブルとして作成するイメージです。
DCLは、データの権限を操作するための文法です。
だれでもデータ更新ができてしまうと、セキュリティ事故につながってしまう可能性があるります。それを防ぐために、データベースではアカウントごとに操作権限を設定できるのです。
たとえば、「データ検索可 、 更新&削除不可」のように更新できないようにしたり、テーブル単位で検索できる範囲を狭めたりできます。
DCLでは、以下の操作ができます。
権限を管理するときは必須になるので、覚えておきましょう。
データベースのデータは、一度書き換えてしまうとバックアップから復元しないと戻せません。そのためデータ更新前に結果を確認してから、更新するのが一般的です。
その際に使用するのが、トランザクション制御です。おおもとのデータを変えずに、更新結果だけを確認したいときに使います。
トランザクション制御は以下のような流れで実行します。
手順3でデータ更新結果が間違っていても、トランザクション制御をかけているのでおおもとのデータに影響はありません。
たとえば、データベースのひとつである『MySQL』でトランザクション制御するときは、以下のようにコードを書きます。
BEGIN;
-- データ更新処理を書く
-- データ検索処理を書く
ROLLBACK;
上記コードを実行して一旦確認してから、「BEGIN;」「ROLLBACK;」を外して再実行すれば、おおもとのデータが書き換わります。
SQLの種類だけでは、具体的なデータ操作イメージが湧かない方もいるでしょう。
そこで次は、SQLでできることを以下の2つに分けて解説します。
DDLでも少し解説しましたが、SQLではデータベースとテーブルの操作ができます。
データベースのテーブルは、以下のように複数列でできています。
上記はExcelで作っていますが、No、ユーザID、ユーザ名、部署コード、部署名などの列がありますよね。
このように、SQLではテーブルの列名を決めてテーブルを作ったり、テーブルの列名を変更したりできるのです。
具体的な書き方は、後ほど解説しますね。
SQLはデータベースやテーブル操作だけでなく、レコード操作もできます。
たとえば、データを挿入・データ更新をする処理を以下のように行えます。
条件を指定すれば、データの検索や挿入、更新、削除ができます。
「SQLの概要やできることはわかったけど、具体的にどんな業務が効率化できるんだろう……」と思った方もいるのではないでしょうか。
そこで次に、SQLで効率化できる業務を3つご紹介します。
SQLの魅力は、データ検索や加工が高速で行えることです。
Excelでもデータ検索や加工はできますが、複雑な関数をいれたり、データ量が多くなったりしてくると操作が重たくなりますよね。
また抽出条件が複雑だと、データを絞り込んで欲しい情報をまとめるだけで時間がかかります。
しかしSQLを使えば、たった数秒でデータ検索や加工ができるのです。
SQLはその場でコードを書いて実行するだけでなく、実行タイミングを制御できます。
そのため夜間にデータ更新を予約することも可能です。
毎日溜まるデータをサマリーデータとしてまとめる業務を、夜間の予約実行に切り替えれば、業務の手間を減らせます。
管理しやすいデータ構造と、見たいデータが一致しないケースはよくあります。
SQLを使えば、元のデータを変えずに表示データを変えられるのです。
たとえば以下のような複数テーブルを合体させて、欲しい情報だけ見れます。
部署名称は、組織改革に合わせて変更されるケースが多いですよね。そのため「部署テーブル」のように、部署だけの情報で管理しているところが多いのではないでしょうか。
ただ、一覧データで見せるときは「部署コード」は必ずしも必要ではないですよね。
むしろ部署名だけで良い時の方が多いはずです。SQLでは表示する項目を指定して、データ検索ができます。
見たいデータを簡単に作れるので、データ活用もしやすくなるのです。
ここからは、SQLを書くための実行環境の作り方を2つ解説します。
実行環境は、大きく分けて以下の2つです。
はじめてSQLを使う方にとって、始めやすさは重要ですよね。
「便利なことはわかったけど、いざ始めようとすると腰が重たいな……」と思わないためにも、はじめてSQLを学ぶ方は、サクッと使えるWebサービスがおすすめです!
『paiza.io』を使えば、以下のたった2ステップですぐにSQL実行環境が用意できます。
1. paiza.ioをひらき、「コード作成を試してみる(無料)」ボタンをクリック
2. 言語選択タブをMySQLに変更
「環境構築なしで、手軽にSQLをはじめてみたい!」という方におすすめです。
上記の方法を試そうとしても、「自社のデータを外部サービスに登録するのは怖い……」という方もいますよね。
そんなときは、パソコンにSQLの実行環境をインストールしましょう。
データベースにはいくつか種類がありますが、MySQLがおすすめです。インストーラをダウンロードして、画面に沿って進めるだけで簡単に環境構築ができます。
「MySQLインストール | MySQLの使い方 – DBOnline」という環境構築記事をぜひ参考にしてみてください。
SQLの実行環境が用意出来たら、簡単なSQLを書いて動かしてみましょう。
今回は、以下の部署テーブルの作り方を解説します。
以下手順で、ひとつずつ解説しますね。
まずは、部署テーブルを新規作成します。
テーブルは、項目ごとに「データの型」を指定する必要があります。
テーブル名: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です。
次に、データを追加します。
データを挿入するときは、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を実務で使うときの注意点を2つ解説します。
データ更新するときはいきなり更新するのではなく、トランザクション制御をするのがおすすめです。
先ほどのサンプルのデータを、以下のように更新する場合を考えてみましょう。
トランザクション制御しつつ更新する場合は、以下のように書きます。
トランザクション制御を行いつつデータを更新する場合は、以下のようにコードを書きます。
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文の結果は、変更前の結果になっていますよね。
トランザクション制御を行えば、このように更新結果を先に確認できるのです。
データの重要度に限らず、データの更新や削除を行うときは、トランザクション制御をしましょう。
SQLは、SELECT文、INSERT文、UPDATE文、DELETE文などの基礎的な書き方はどのデータベースでも同じですが、データの条件指定に使う関数はデータベースによって異なります。
そのためより高度なSQLを書けるようになってきたら、「データベース名 + 調べたいこと」で書き方を調べて使うのがおすすめです。
「書いてあるコードをそのまま使ったのに動かない……」と無駄な時間を消費しないためにも、頭の片隅に置いておくと良いでしょう。
今回は、SQLでできることについて解説しました。
SQLを使いこなせるようになると、データ管理や操作が圧倒的に効率化できます。
まずはWebですぐに使えるpaiza.ioを利用して、簡単なSQLを書くところから始めてみるのがおすすめです。
ぜひSQLを書いて、業務の効率化に役立ててみてください。
こちらもおすすめ!▼
エクセルVBAでできること7選!超初心者から始める業務効率化入門
Workship MAGAZINE
【初心者向け】Google Apps Scriptでできること10選!自動化で業務効率を大幅UP
Workship MAGAZINE
データサイエンティストが学ぶべきプログラミング言語/データベース言語 9選
Workship MAGAZINE