近年、ビジネスの現場でデータ活用が重要視され、データ分析の需要が高まっていますが、データ分析を行うにはデータベースを活用する必要があります。そして、SQLはシステム開発で圧倒的なシェアを持つデータベース「RDB(リレーショナルデータベース)」を操作するためのデータベース言語で、データベース言語のなかでも最も普及しているデータベース言語です。これを1つ覚えることで大半のデータベースを扱えるようになります。
本記事ではそんなデータベースの基本から特徴や具体的活用の仕方について解説していきます。
SQLとは?
「SQL」とは、「Structured Query Language」の略称で、和訳は「構造化された問い合わせ言語」となります。 SQLはRDB(リレーショナルデータベース)を操作するためのデータベース言語であり、厳密にはプログラミング言語ではありません。
SQLは、データベースへのデータ登録や挿入されているデータの検索、書き換えといった操作ができ、そういった操作が必要なシステムの開発には必ず必要になってきます。SQL文としてプログラミング言語内に組み込んで使う場合が多く、簡単なコマンドで実行できて非常に扱いやすい言語です。
皆さんが利用しているオンライン上のサービスの多くには、型の異なるデータが集められたデータベースに保存されています。データベースに格納されているデータは、DBMS(DataBase Management System)を利用して管理されます。そのなかでも、リレーショナル型のデータベースを管理するシステムが「RDBMS(Relational DataBase Management System)」データベースには多くのデータが保存されていますが、SQLを使うことで効率的に操作をすることが可能になります。
1970年代にIBMによって開発されたSQLは、ISOで国際標準化されており、どのデータベースでもほとんど同じように操作できます。有名なデータベースとしてはオープンソースのMySQLやPostgreSQL、Oracle社のOracle Database、Microsoft社のMicrosoft SQL Server/Accessなどがあります。
SQLとセットで覚えておきたい「データベース」
データベースとは、データを管理しやすいよう、整理されたデータの集まりです。
電子媒体だけがデータベースというわけではなく、紙媒体の電話帳やSNSの連絡先一覧などもデータベースに該当します。
ここからはSQLについてより詳しく解説します。
SQLには3つのポイントがあげられます。
データベースを操作するのに必要な「データベース言語」
先述のとおり、データベースはデータの集合体を格納した箱のようなものです。
その箱に格納されたデータに対して、データベース言語というデータベース専用の言語を使用することでデータを検索、データの追加、更新、削除などの操作をします。
SQLとは、そのデータベース言語の一つです。
「RDB」という種類のデータベースを操作する
SQLは、データベースを操作するための専用言語と前述しましたが、正確には、「RDB(リレーショナルデータベース)という種類のデータベースを操作するための専用言語」がSQLです。
データベースには、データ構造やデータの関連付けの違いによって以下の3つに区分されます
・階層型データベース
1つのノードから下に複数のノードが派生するツリー状に構成されており、あるノードへのルートが限定的であるため速度が早くなるというメリットがある一方で複数の親ノードを持ちたい場合に重複登録を行う必要があることやデータの追加や削除を行った場合はルートを再登録する必要があるというデメリットがあります。
・ネットワーク型データベース
ノードが網状に構成されており、1つの子ノードが複数の親ノードを持つことができるため、階層型データベースで難点となっている重複登録を避けられます。
ネットワーク型データベースの「ネットワーク」は、そのようにノードの繋がりが網目状になるところから由来しています。
しかし、階層型ネットワークと同様にプログラムがデータ構造に依存してしまうというデメリットがあります。
・リレーショナル型のデータベース
エクセルのように列と行といった表形式で構成されており、カラム(列)に「従業員名」「住所」「電話番号」といった項目を設け、行に各データを入力していきます。
従来型のデメリットであった「柔軟なデータの取り扱い」を可能にし、プログラムの幅を広げられましたが、プログラムが複雑化しやすい点や、それによる処理速度の遅延がデメリットです。
現在、最も普及しているデータベースであり、データベースといえばリレーショナルデータベースを指すことが多いです。
RDBでは、集めたデータを決まった定義で並べたテーブルのことを「データテーブル」と呼びます。
RDBの例としては、会社内の社員名簿をイメージするとわかりやすいでしょう。
たとえば、「株式会社テックマニア」という会社の中に、会社全体の社員名簿や部署別に必要なデータを並べた名簿といった用途別に数種類の社員名簿があるとします。
それらすべての名簿を集めた箱が「データベース」であり、特定の条件で並べた名簿一つ一つが「データテーブル」です。
プログラムを動かすことはできない
SQLだけでは、プログラムを動かすことができません。
C言語やPython、Javaなどは、プログラム言語と呼ばれ、コンピュータプログラムを動かすために必要な言語であるのに対し、SQLはデータベースの操作に特化した言語なので、SQL単独ではデータベースから抽出した結果をファイルに書き出すことも、画面に表示させることもできません。
プログラミング言語は、コンピュータに対してループや条件分岐などを組み合わせて繰り返し処理、複雑な処理などを命令できます。
それに対してSQLはデータベースに対してしか命令できませんし、その命令方法もとてもシンプルです。
基本的にデータベースに対して一行程度の命令文をコマンドへ打ち込むと、実行されるという方式で、これを対話型と呼びます。
連続した操作や複雑な操作を行いたい場合は他のプログラミング言語の記述の中に、SQLの文を埋め込むことで命令を実行でき、これを埋め込み型といいます。
このようにデータベース言語は、用途の限られた簡潔な言語であり、それぞれが持つ役割は大きく異なることを覚えておきましょう。
SQLを学ぶ上で覚えておきたい用語
テーブル
リレーショナル型のデータベースでは、各データが項目ごとに表形式で整理されて格納されています。データの種類やプログラムを考慮してテーブルを複数持つことが多く、Excelに例えると、データベースはブック、テーブルはシートに相当します。
カラム
表(テーブル)のうち、列に相当するのが「カラム」です。各項目を属性といいます。
レコード
「テーブル」と「カラム」が、データの保管場所を指す用語でしたが、レコードはデータそのものを指します。ただ、同時に、列(カラム)に対して行を意味する「ロウ」と同じ意味で使われることもあります。
フィールド
レコードを構成する要素を指します。フィールドは、Excelでいうところの「セル」に相当します。ここまで、カラム、レコード、フィールドの関係はというと「複数のレコードの同じ項目のフィールドの集まりがカラム 」となります。
主キー(プライマリーキー)
主キーはレコードのうち、レコードを識別する役割のあるカラムです。会社で例えるところの、「社員番号」などで、これを主キーにすることで、同姓同名の社員がいても社員番号で社員を識別・管理できます。
リレーション
リレーションとは、レコードの集まりを指す用語です。RDB型データベースではデータ1件を1つの行に記録するため、概念としてはリレーションとテーブルは同義です。混同しやすい用語に「リレーションシップ」がありますが、テーブル同士の関係を示します。
トランザクション
トランザクションとは、処理単位を指します。複数のデータ更新をまとめて実行することをいいます。
データの更新頻度が高い場合、個別に処理を実行すると、それだけデータベースに不整合が起こる可能性が高まります。こういった事態を防ぐために複数のデータ更新をまとめて実行します。
コミット
コミットとは、トランザクションの処理を確定させることを指します。データ更新に必要なすべての処理が完了してからトランザクションがコミットされます。
ロールバック
ロールバックとは、トランザクション処理を取り消すことです。データ更新に失敗した場合、元の状態に戻しますが、これを「ロールバック処理」といいます。ロールバック処理することで、トランザクション開始前の状態に戻ります。
SQLでできること
- データベースやテーブルの作成・変更・削除
データベースはデータベースの中に複数のテーブルがあり、そのテーブルの中にさらに複数のレコードがあるようにイメージしてください。 - データの取得・登録・更新・削除・検索
テーブルの作成後は基本的にデータ操作になります。
SQLとNoSQLの違いは?
昨今では、NoSQLという単語を耳にする機会も増えてきています。名前が似ているので、SQLとNoSQLは、同じものと考えている人もいるかもしれません。しかし、ドキュメントタイプのMongoDBなどといったNoSQLとSQLは、異なります。SQLは、構造化されたリレーショナルデータベース、一方で、NoSQLは、ノンリレーショナルデータベースと言われる構造化されていないデータベース管理システムだからです。
SQLとNoSQLは、別物であると留意しておきましょう。
データベース言語とプログラミング言語
SQLは、データを操作できるデータベース言語です。データベース言語は、JavaやPHP、Pythonなどといったプログラミング言語とは異なります。
プログラミング言語は、コンピュータを動かすための言語です。繰り返し、分岐といったシンプルな命令から繰り返しや分岐等を組み合わせた複雑な処理を命令できます。
一方で、データベース言語は、データベース内の操作を命令する言語です。データベース言語は、1970年代に開発され、開発者だけでなく、データベースの管理者やデータアナリストが使う言語で、世界標準の言語となります。
SQLの種類
SQLは、データベースを制御・操作する際に使い分ける必要があり、用途別に3つに分類することができます。
データ定義言語(Data Definition Language)
データ定義言語はDDLと略され、RDBを構成するデータテーブルの作成、削除、定義の変更などの処理を行う際に使用します。
SQLには、データベースのテーブルを作成、設定変更、そして、削除などがあります。DDLは、これら命令に対応しています。
定義の命令文には、以下の4つがあります。
DDLの主なSQL命令
・CREAT:データテーブルを作成する
・ALTER:データテーブルの定義変更をする
・JOIN:複数のデータテーブルを結合する
・DROP:データテーブルを削除する
通常の開発エンジニアの業務では、あまり使うことはありません。しかし、データベースを管理する業務に携わるエンジニアにとっては、必須です。データベースエンジニア志望の方は、覚えておきましょう。
データ操作言語(Data Manipulation Language)
データ操作言語はDMLと略され、データテーブルに格納するデータの追加、検索、更新、削除などの処理を行う際に使用します。
SQLの操作には、検索、追加、更新、削除と、一般的なWEBアプリケーションの機能として、備わっているCRUD(Create/Read/Update/Delete)に対応しています。
代表的な命令文には、以下の4つがあります。
DMLの主なSQL命令
・INSERT:データテーブルにデータを追加する
・SELECT:データテーブルの格納データを検索する
・UPDATE:データテーブルの格納データを更新する
・DELETE:データテーブルの格納データを削除する
エンジニアとして、働く時にも、SQLを使う機会もよくあります。その時に、DMLは、最も使用する頻度が高いので、覚えておきましょう。
データ制御言語(Data Control Language)
データ制御言語はDMLと略されます。
DDLやDMLがデータテーブルや格納データを操作するためのSQLであるのに対し、DCLはそれらのサポート的な機能があるSQLです。操作と定義を誰もが利用できるとなると、誰でもデータを変更することができます。そこで、DCLは、制御するためのSQL命令文となります。
DCLの主なSQL命令
・GRANT:アクセス権限の付与
・REVOKE:アクセス権限の解除
開発エンジニアでは、使うことがありませんが、データベースを管理する業務に携わりたいエンジニアは、必須の命令文です。テーブル単位、ユーザー単位で、DMLやDDLの利用を制限できます。
SQLの具体例
ここからはSQLの基本操作としてDDL、DMLのSQL文を事例に沿ってご説明します。
前述した株式会社テックマニアにて部署新設に伴い、新しい名簿作成が必要になったと仮定します。
≪事例≫
株式会社テックマニアで、「新規事業部」の新設にあたり、部署新設に当たり所属社員の名簿作成が必要となった。
名簿構成
社員番号 | 氏名 | 入社年月日 | 住所 |
0001 | 田中一郎 | 20210101 | 東京都港区××××××× |
0002 | 山田二郎 | 20220401 | 東京都渋谷区××××××× |
0003 | 佐藤三郎 | 20231001 | 東京都渋谷区××××××× |
1.データテーブルの作成(CREATE)
名簿構成に従って新規事業室のデータテーブルを作成します。
データテーブルの作成するCREATE文では、テーブル名、テーブルを構成するカラム名、データ形式を指定します。
なお、SQL文の終わりは「;」で区切る決まりになっており、「CREATE~;」までが一文として認識されています。
【実行コード】
CREATE TABLE 新規事業部
(社員番号 数値型,氏名 文字型,入社年月日 日付型,住所 文字型);
「新規事業室」テーブルが構築されました。
カラム名 | 社員番号 | 氏名 | 入社年月日 | 住所 |
データ形式 | 数値型 | 文字型 | 日付型 | 文字型 |
2.データの追加(INSERT)
作成したデータテーブルに、新規事業部の社員を登録します。
データ追加を行うINSERT文では、社員1人分を1行のSQL文とします。
【実行コード】
INSERT INTO 新規事業部
VALUES(0001,'田中一郎','20210101','東京都港区×××××××');
INSERT文を実行後、新規事業部のデータテーブルに、「田中さん」の社員データが追加されます。
社員番号 | 氏名 | 入社年月日 | 住所 |
0001 | 田中一郎 | 20210101 | 東京都渋谷区××××××× |
以降、同じように新規事業部に所属する社員をINSERT文で実行していきます。
3.データの検索(SELECT)
まず、データベース上にある全てのデータを検索してみます。以下のSQLの命令文を使って、実行します。
【実行コード】
SELECT 1 FROM 新規事業部;
【実行結果】
社員番号 | 氏名 | 入社年月日 | 住所 |
0001 | 田中一郎 | 20210101 | 東京都港区××××××× |
0002 | 山田二郎 | 20220401 | 東京都渋谷区××××××× |
0003 | 佐藤三郎 | 20231001 | 東京都渋谷区××××××× |
次に、新規事業部の社員を登録したデータテーブルから、条件に一致する社員を検索します。
データ検索を行うSELECT文では、「WHERE」以降に検索条件を指定すると、特定のデータが存在するか検索することもできます。
社員番号が0002の社員を検索します。
【実行コード】
SELECT 1 FROM 新規事業部 WHERE 社員番号 = '0002';
【実行結果】
社員番号 | 氏名 | 入社年月日 | 住所 |
0002 | 山田二郎 | 20220401 | 東京都渋谷区××××××× |
以上のように、抽出条件を変更すると、簡単に必要なデータを検索することができます。
【SQL入門1】WHEREで検索条件を指定する方法を解説
4.データの更新(UPDATE)
新規事業部の社員を登録したデータテーブルで、住所変更があった社員データを更新します。
データ更新を行うUPDATE文では、「WHERE」以降で更新対象の社員の検索条件を指定し、「SET」に更新情報を設定します。
社員番号が0002の住所を「東京都千代田区」に更新します。
【実行コード】
UPDATE 新規事業部 SET 住所 = '東京都千代田区×××××××' WHERE 社員番号 = '0002';
【実行結果】
SELECT 1 FROM 新規事業部 WHERE 社員番号 = '0002';
社員番号 | 氏名 | 入社年月日 | 住所 |
0002 | 山田二郎 | 20220401 | 東京都千代田区××××××× |
5.データの削除(DELETE)
新規事業部の社員を登録したデータテーブルから、社員データを削除します。
データ削除を行うDELETE文では、「WHERE」以降でデータ削除対象の社員の検索条件を指定します。
退職する佐藤さんの社員データを削除します。
【実行コード】
DELETE FROM 新規事業部 WHERE 社員番号 = '0003';
【実行結果】
SELECT 1 FROM 新規事業部;
社員番号 | 氏名 | 入社年月日 | 住所 |
0001 | 田中一郎 | 20210101 | 東京都港区××××××× |
0002 | 山田二郎 | 20220401 | 東京都渋谷区××××××× |
6.データテーブルの削除(DROP)
佐藤さんの退職に伴い、新規事業部を解散することになったので新規事業部のデータテーブルを削除します。
データテーブルを削除するDROP文では、削除対象のデータテーブル名を指定します。
DROP TABLE 新規事業部;
上記のDROP文を実行すると、新規事業部のデータテーブルは格納データごと削除されるため、操作は慎重に行う必要があります。
そのため、SQLを使用する際は、SELECT文しか使えない一般権限と、SQLのすべての機能が使用できる上位権限を持つことが一般的です
SQL学習におすすめなサイト
さらにSQLを勉強したいという人へ、無料で手軽に勉強できるオンラインサイトを2つご紹介します。
SQL攻略
SQL攻略はオンライン上にて、SQLを日本語で学習できるサービスです。SQLの基本を無料で学習できます。ITパスポートや基本情報技術者試験を受験しようと考えている人は、試験対策としても使えます。
W3School
SQLについて、基本を学べます。英語となりますが、DeepLなどを使いながら、英語の勉強も兼ねて、取り組むのも良いでしょう。
SQLの実際の業務でも使うSQLの基礎、そして、最後に、ちょっとした練習をできるので、おすすめです。
最後に
ここまでSQLについて基礎知識から具体例まで解説してきましたが、いかがでしたか?
SQLは、データの集合体であるデータベースをコントロールするための言語です。SQLは、プログラミング言語と異なります。しかし、プログラミング言語の記述のなかでSQLの埋め込み、操作することができます。
世の中には数多くのWebシステムが存在していますが、大半のWebシステムにはデータベースが使用されており、エンジニアとして働く場合、使用する場面がよくあります。つまりデータベース言語でもっとも普及しているSQLが扱えれば、それだけ多くのデータベースを扱えるということです。データを扱えれば、業務スピードも高まることも期待でき、ビジネスおいて大きなメリットがあるでしょう。また、世界的にも標準言語であり、一度覚えると、とても便利です。
SQLをマスターするコツは、実際に書いてみることです。書籍やインターネット上の記事を読むだけでなく、実際にSQLを書いてみることをおすすめします。SQLの中でもDMLは最も利用される場面が多いため、最初に、DMLの使い方から身につけることをおすすめします。
▼複数条件の指定
【SQL入門】IN句の使い方やサブクエリの活用方法を解説
▼抽出条件の範囲指定
【SQL入門3】between演算子で抽出する範囲を指定する
▼データの存在判定
【SQL】EXISTSの使い方をサンプルコードで解説
▼レコード数の取得
【SQL】COUNT関数でレコード数をカウント!意味と使い方を解説
▼データのグループ化
【SQL】GROUP BY句を5分で習得!集計関数ごとの使い方を解説
▼データの並び替え
【SQL入門】ORDER BY句の使い方、複数条件の並び替えについて解説
▼テーブル結合
【SQL入門】JOINでテーブル結合!種類と使い方を解説
▼データ削除
【SQL】データ削除「DELETE文」の使い方。全件削除・複数テーブル参照も解説
▼データ検索
【SQL】データの曖昧検索「LIKE句」の使い方!完全一致・部分一致・否定形も解説
▼関連記事