FBI BLOG

ブログ記事

最終更新日: 2025.02.17

【初心者向け】データベース(DB)とSQLの基本

初心者向け データベース(DB)とSQLの基本

目次

データベース(DB)やSQLは、私たちの日常生活で広く使用されているツールです。
例えば、オンラインショッピングでの商品検索や、ソーシャルメディアでの投稿表示など、多くのウェブサービスの裏側でSQLが使われています。これらのサービスは、大量のデータから必要な情報を素早く取り出すために活用されています。

データベースとは?

情報を効率的に管理するためのシステム

データベース(DB)は「整理された情報の集まり」で、情報を効率的に管理するためのシステムです。企業や組織は、データベースを使って情報の保存、検索、更新を容易に行います。

データベースを利用するメリット3つ

データベースを利用するメリットは主に以下の3つです。

  • データの共有管理ができる
  • データの取り出し・並び替え等が容易に行える
  • データとアプリケーションプログラムが分離しているため、特定の業務と切り離して管理することができる

データベース管理システム(DBMS)|OracleやMySQL

データベース管理システム(DBMS)は、データベースを管理し、データの操作やアクセスを調整するソフトウェアです。代表的なDBMSにはOracleMySQLがあります。これらのシステムは、データの安全性と効率的な管理を実現します。

ただし、データのアクセス制御や、データの矛盾を防ぐ管理を行う必要があります。

データベースモデルの種類

データベースのモデルは、大きく分けて以下の4つです。

  • 階層型
  • ネットワーク型
  • リレーショナル型
  • NoSQL

その中で現在、最も一般的に使用されているのは「リレーショナル型データベース」(Relational Database:RDB)です。

RDB(リレーショナル型データベース)とは?

リレーショナル型データベースは、行と列の2次元の表(テーブル)で構成するデータの集合です。
のことをレコードのことをフィールド(カラム)と言います。
列(カラム)は各項目、行はデータのレコードを表します。

リレーショナル型データベース
行(レコード)・列(カラム)・フィールド・テーブルの説明

RDBの特徴|リレーションと2次元の表の集合

リレーショナル型データベースでは、すべてのデータを表形式で表現します。
表は列と行で構成され、列は必ず1つの意味を持ちます。

代表的なRDBMS

リレーション型のDBのDBMSをRDBMSと言います。代表的なRDBMSは以下です。

  • Oracle社のOracle
  • Microsoft社のSQL Server
  • IBM社のDB2
  • OSSのMySQL PostgreSQL SQLite

福岡情報ビジネスセンターでよく利用するのは、DB2、SQL Server、MySQLです。

1.Oracle

Oracleは、商用のRDBとして初めてリリースされたデータベースです。商用アプリケーション用データベースの中では、最大のシェアを誇ります。

2.DB2

DB2は、Oracle同様に長い歴史を持つRDBMSで、大規模システムなど商用で使われています。
RDBを提唱したのはIBMですが、商用としてリリースするのはOracleが先立ちました。
一昔前まではIBM i(AS400)などのオフコン上でしか動作しませんでしたが、2015年にIBM Cloudで利用できるようになりました。(DB2 on Cloud)

3.SQL Server

SQL Serverは、Windows Serverで構築する環境では高いシェアを有しています。
環境がWindowsでGUIのため、扱いやすいです。.Net系で構築された業務システムやWebシステムのデータベースとして利用されることが多いです。

4.MySQL

OSSの中では最も使われている代表的なRDBMSです。
サンマイクロシステムズに買収され、サンマイクロシステムズがOracleに買収されたため、ライセンス元がOracleとなっています。ライセンスの解釈が幅広いです。
MySQLによく似たMariaDBというRDBMSも存在します。

DBの選定方法3つ

データベース(DB)の選定方法は主に以下の3つです。

1.旧システムの有無

旧システムの使用しているDBによって選定します。

2.パッケージ化するのか

パッケージ化する場合、商用利用可のDBを買う必要があります。

3.使用する言語の指定

言語とDBの相性で選定します。
例)RPGはDB2、PHPはMySQL/PostgreSQL、.Net系はSQLServerなど

DBの基本構造

データベースの(DB)の基本構造は、DBの中にスキーマという部屋があり、その中にテーブル(表)が格納されている、というイメージです。
※DBによって異なります(MySQLではスキーマ=データベース)

データベースの基本構造

テーブルの「キー」

テーブルでは、レコードを一意に識別するためのフィールドとして、キーを設定することができます。

主キー

レコードを一意に識別できるフィールドを主キーといいます。一意に表せるフィールドが複数ある場合は、1つのフィールドだけ主キーとして選びます。
他のキーは代替キー(代理キー)と呼ばれます。

主キーの説明
主キーとは、そのキーを指定すれば1つの行を特定できるキーを指す

複合キー

1つのフィールドではなく、2つ以上のフィールドの組み合わせで1つのレコードを識別できる場合、そのフィールドを組み合わせて主キーとして使用できます。これを複合キーといいます。

社員名だけの指定では、同姓同名がいるため一意のレコードが識別できない。そのため、社員名と生年月日を複合キーとして定義している。

外部キー

あるテーブルに対して、他のテーブルの主キーをフィールドとして持たせます。その持たせたフィールドを外部キーといいます。

外部キーの図解

フィールドの制約・データ型

フィールドには、格納するデータの方の定義や制約をかけることができます。

代表的な型

代表的な型説明
数値型数値のためのデータ型。整数・浮動小数点・符号の有無などを設定
文字列型アルファベット・記号・数字など任意の文字列のためのデータ型
日付・時刻型日付のみ・時刻のみ・日付と時刻のように、日付と時刻を入れる型
ブール値型真または偽のブール値を入れる型
ビット型上記以外の画像や音声・プログラムなどのデータを入れる型(バイナリ型とも呼ばれる)

フィールド制約

フィールド制約とは、フィールドに設定できる値に制限を設けることです。

制約説明
NOT NULLNULLを設定できないようにする
UNIQUE同じ値を設定できないようにする
DEFAULT値が設定されないときに、設定した値を初期値とする
PRIMARY KEY主キーとする(主キー制約)
FOREIGN KEY外部キーとする(外部キー制約)

主キー制約
一意である。NULLを許容しない。

外部キー制約
参照先のカラムにある値のみ設定できる。

INDEX(索引)

インデックスとは

インデックスとは、DB上のデータを効率よく検索するための機能(索引)です。
インデックスを使用すると、目的のデータを取得する時間を短くすることができます。インデクスを張っていない状態では、フルテーブルスキャンが行われています。
インデックスを使用することで、データベースの容量は増えます。

インデックスの種類

複合インデックス
1つのテーブルに複数のインデックスを張る

ユニークインデックス
データの登録時にデータがユニークであるかを確認するためのインデックス

トランザクション

トランザクションとは、データベースにおいて作業を完了するための1連の作業単位のことです。

トランザクションは、ユーザーが明示的にSQLのCOMMITコマンドを実行することで終了します。COMMITコマンドを実行してトランザクションを終了すると、そのトランザクションで行った変更内容が完全にデータベースで確定します。

すなわち、COMMIT前のトランザクションの変更内容は未確定のため、ROLLBACKコマンドで取消が可能です。

SQLとは?

データベースとやり取りするための言語

SQL(Structured Query Language)とは、データベースとやり取りするための言語です。RDBMSに対しての全ての処理は、SQLを使用します。

SQLは処理の内容によって4つに分類することができます。

要素説明
DML(データ操作)SELECT(データの検索)、INSERT(データの追加)、UPDATE(データの更新)、DELETE(データの削除)
DDL(データ定義)CREATE(表の作成)、ALTER(表の変更)、DROP(表の削除)
トランザクション制御COMMIT(データ変更の確定)、ROLLBACK(データ変更の取消)
DCL(データ制御)GRANT(ユーザ権限の追加)、REVOKE(ユーザ権限の削除)

基本的な操作として、データの取得(SELECT)追加(INSERT)更新(UPDATE)削除(DELETE)があります。これらのコマンドを使えば、データベースを簡単に操作できます。

実践的なSQLの使用方法

実践的なSQLの使い方には、複数のテーブルを結びつける方法(JOIN)や、特定の条件でデータを選ぶ方法(WHERE句)があります。これらの技術を使うことで、データベースから必要な情報を効率よく取り出すことができます。

1.CREATE(テーブル作成)

テーブルを作成するときは、CREATE文を使用します。

CREATE文

2.DROP(テーブル削除)

テーブルを削除するときは、DROP文を使用します。

DROP TABLE テーブル名 ;

3.ALTER(テーブル列操作)

テーブルの列の変更、削除、追加などを行うときは、ALTER文を使用します。

列の変更
ALTER TABLE テーブル名
 ALTER COLUMN 列名 データ型 制約

列の削除
ALTER TABLE テーブル名 DROP COLUMN 列名

列の追加
ALTER TABLE テーブル名
 ADD COLUMN 列名 データ型 制約

4.SELECT(テーブルデータ検索)

テーブルのデータを検索するときは、SELECT文を使用します。

SELECT 列名 FROM テーブル名
WHERE 条件
GROUP BY グループ化列
HAVING 条件
ORDER BY ソート列 ソート順

5.列と表の指定(SELECT FROM)

SELECT FROM

出席番号と氏名を取り出す場合
SELECT 学生番号,氏名 FROM 成績表

  • 取得したい列名を書く
  • 複数ある場合は「,」区切りで書く

すべての成績(すべてのデータ)を取り出す場合
SELECT * FROM 成績表

  • テーブルのすべての列がほしい場合は「*」を使用する

学籍番号と合計点(国語と数学と英語の和)を取り出す場合
SELECT 学生番号,(国語 + 数学 + 英語) AS 合計点 FROM 成績表

  • 数値ならば「列名 + 列名」で和を出力することができる
  • 「AS 新列名」で、新列名としてデータを取得することができる

6.条件の指定(WHERE)

WHERE 条件

B組の学生の国語の点を取り出す場合
SELECT 学生番号,氏名,国語 FROM 成績表
WHERE クラス = ‘B組’

  • WHERE句に条件を指定する
  • 文字列を指定する場合は、「’」で囲む

国語と英語がともに70点以上を取り出す場合
SELECT 学生番号,氏名 FROM 成績表
WHERE 国語 >= 70 AND 英語 >= 70

  • 条件には、「=,>=,>,<=,<,!=,<>」を指定することができる
  • 複数の条件ANDまたはORで結びつけることができる

7.ソートの指定(ORDER BY)

ORDER BY

A組の学生の国語の点が高い順に学生番号と氏名を取り出す場合
SELECT 学生番号,氏名 FROM 成績表
WHERE クラス = ‘A組’
ORDER BY 国語 DESC

  • ORDRE BY句に並び替えに使用する列を書く
  • 複数の列を指定した場合は、先に指定した列から順に並び替えを判断する
  • 列の後ろに「ASC」で昇順「DESC」で降順を指定できる(何もつけないと昇順)

8.関数の指定(SUM,AVG,MAX,MIN,COUNT)

関数の指定(SUM,AVG,MAX,MIN,COUNT)

成績表の学生人数を取り出す場合
SELECT COUNT(*) AS 人数 FROM 成績表

  • 「COUNT(*)」で該当する行の件数を取得することができる

国語の平均点を取り出す場合
SELECT AVG(国語) AS 国語平均 FROM 成績表

  • 「AVG(列名)」で列名の平均値を取得することができる
  • 他にも「SUM(列名)」で合計「MAX(列名)」で最大値「MIN(列名)」で最小値を取得することができる

9.グループ化(GROUP BY)

グループ化(GROUP BY)

成績表のクラス毎の学生人数を取り出す場合
SELECT クラス,COUNT(*) AS 人数 FROM 成績表
GROUP BY クラス

  • GROUP BY句に書いた列名で、同一の値を持つ行のグループができる
  • グループ化した列と、関数以外の列はSELECT句で指定できない

国語の平均点が70点以下のクラスを取り出す場合
SELECT クラス FROM 成績表
GROUP BY クラス HAVING AVG(国語) <= 70

  • グループを条件で絞り込むならば、HAVING句を使用する

10.条件指定に関する応用(BETWEEN)

条件指定に関する応用(BETWEEN)

英語が70点以上80点未満の学生を取り出す場合
SELECT 学生番号,氏名 FROM 成績表
WHERE 英語 BETWEEN 70 AND 79

  • 「BETWEEN 下限値 AND 上限値」という形式で下限値から上限値の範囲を指定できる(下限値、上限値は範囲に含まれる)

11.条件指定に関する応用(LIKE)

条件指定に関する応用(LIKE)

名前に山を含む学生の氏名を取り出す場合
SELECT 学生番号,氏名 FROM 成績表
WHERE 氏名 LIKE ‘%山%’

  • 「列名 LIKE ‘文字パターン’」で、特定の文字列を含むという条件にできる
  • 文字列パターンは、例えばABCという文字列を含むという指定にしたい場合は、「%ABC%」のように記述し、ABCから始まる文字列の場合には、「ABC%」にする

12.その他の条件指定(IN,IS NULL)

IN 句

  • 「列名 IN (値1, 値2, 値3…)」のように記述する
  • 値1、値2、値3のいずれかの値に一致するものを取得する
  • 「列名 = 値1 OR 列名 = 値2 OR 列名 = 値3」と同じ意味

IS NULL

  • 「列名 IS NULL」のように記述する
  • NULL値であるものを取得する
  • NULL値でないものを記述するには「IS NOT NULL」と記述する

13.重複の削除(DISTINCT)

重複の削除(DISTINCT)

クラスの一覧を取り出す
SELECT DISTINCT クラス FROM 成績表

  • 取り出した結果に重複があり、重複を除き1つだけ取り出す場合にはDISTINCTを使用する

14.テーブルの結合

複数のテーブルを結合するときには、JOINで結合することができます。
JOINの種類として主に

  • INNER JOIN
  • LEFT (OUTER) JOIN
  • RIGHT (OUTER) JOIN

の3つがあります。この他には、FULL JOIN、NATURAL JOIN、CROSS JOINがあり、DBによって異なります。

INNER JOIN(内部結合)
INNER JOIN(内部結合)は、指定された両方のテーブルに存在するものだけが抽出されます。
売上表の顧客CDと顧客表の顧客CDで表を結合する場合

INNER JOIN 売上表・顧客表
INNER JOIN 実行結果

実行結果を見ると、売上表に存在しない顧客CDが102の姫路商店と105の福岡商事が表示されていません。このように両方の表で一致する行だけを表示させるのが内部結合です。
またWHERE句で表の結合条件を指定したり、INNNER JOINを指定して表を結合させるのが内部結合です。

LEFT JOINとRIGHT JOIN(外部結合)
LEFT JOINとRIGHT JOINは、左右いずれかのテーブルを優先させたいときに指定します。
LEFT JOIN
左側に指定されたテーブルのすべての行が表示されます。
RIGHT JOIN
右側に指定されたテーブルのすべての行が表示されます。
顧客表と売上表の外部結合によって、顧客表のすべての行を表示させる場合

LEFT JOIN RIGHT JOIN 売上表・顧客表_2
LEFT JOIN RIGHT JOIN 実行結果

LEFT JOINを指定しているので、左側に顧客表のすべての行が表示されています。売上表において該当するデータがない部分は、NULLが表示されています。

JOINの書き方
INNER JOIN
FROM テーブルA
INNER JOIN テーブルB
   ON テーブルA.カラム = テーブルB.カラム
LEFT JOIN
FROM テーブルA
LEFT JOIN テーブルB
   ON テーブルA.カラム = テーブルB.カラム

15.SELECT(テーブルデータ検索)

SELECTでデータ抽出するときの、SQL文の考え方(筆者的)

1.取得結果は、表形式として取得されることを意識する
2.取得したい項目(カラム)を洗い出す(取得したい表の形をはっきりさせる
3.取得したい項目をどのテーブルから取得するかを洗い出す
(合計などの場合、どのテーブルのどの項目を合計するかなど)
4.取得結果の件数と同じ件数になると思われるテーブルをメインテーブルと考える
5.メインテーブルに対して、3で洗い出したテーブルを結合する
6.抽出条件を考える(WHERE句)
7.合計、最大件数などがある場合は、GROUP化など

16.INSERT(行の追加)

テーブルにデータを1行挿入するためのSQL文をINSERT文と呼ぶ。

一般形式
INSERT INTO テーブル名 VALUES(値リスト)

  • 値リストには、挿入するデータを列の順番にカンマで区切って指定する
  • 値リストの値の数と、列の数は一致しなければならない

列指定形式
INSERT INTO テーブル名(列名リスト) VALUES(値リスト)

  • 列名リストには、値をセットしたい列名をカンマで区切って指定する
  • 値リストには、列名リストに列挙した列にセットする値を列名リストの順番にカンマで区切って指定する
  • 値が指定されなかった列(列名リストにない列)は、列のデフォルト値が入る

17.UPDATE(行の更新)

テーブルにあるデータの、条件を満たす行の列を変更するためのSQL文をUPDATE文と呼ぶ。

一般形式
UPDATE テーブル名 SET 列名 = 値
WHERE 検索条件

  • SET句に変更する列名と値を指定する
  • 複数項目変更する場合は、カンマ区切りで指定する
  • 検索条件を省略した場合、すべての行の値が変更される
  • 検索条件がある場合は、その検索条件に一致する行のみが変更される

18.DELETE(行の削除)

テーブルにあるデータの、条件を満たす行を削除するためのSQL文をDELETE文と呼ぶ。

一般形式
DELETE FROM テーブル名
WHERE 検索条件

  • 検索条件を満たす行をテーブルから削除する
  • 検索条件を省略した場合、テーブルのすべての行が削除される

19.サブクエリ

クエリ内のクエリのこと。(SELECT文の中にSELECT文を書くこと)
SELECT句、FROM句、WHERE句で使用することができる。

サブクエリ(SELECT句)
SELECTで取得するカラムの一つとして、SELECT文を使う。
例)顧客の一覧を取得。取得カラムは、ID、名前_姓、年齢、平均年齢とする
SELECT 顧客.ID, 顧客.名前_姓, 顧客.年齢,
(SELECT avg(年齢) FROM 顧客) as avg_age
FROM 顧客;

サブクエリ(FROM句)
SELECTした結果をFROM句で使用する。
例)メーカー毎の商品数を取得する。取得カラムは、メーカーID、商品数。
SELECT 商品.メーカーID, 商品.商品数
FROM(
SELECT メーカーID, count(*) as 商品数
FROM 商品
GROUP BY メーカーID
) as 商品
;

サブクエリ(WHERE句)
WHERE句の条件の値にSELECT文を使用する。
例)メーカーIDがIの商品を注文している注文の一覧を取得。取得カラムは、注文ID。
SELECT DISTINCT 注文ID
FROM 注文明細
WHERE 商品ID IN(
SELECT ID FROM 商品 WHERE メーカーID = I
);

講義スライドはこちら|Speaker Deck

福岡情報ビジネスセンターの社内勉強会で使用した講義スライド資料です。
この資料は、データベース(DB)とSQLの基本を学ぶためのものです。初心者の方でも分かりやすいように、基本的な考え方から実際の操作方法までを順番に説明しています。

まとめ

データベース(DB)とSQLは、私たちのデジタル生活を支える重要なツールです。最初は少し難しく感じるかもしれませんが、少しずつ学んでいくうちに、その便利さが実感できると思います。

ぜひ、データベース(DB)とSQLの世界に挑戦してみてください!

関連リンク|その他の社内勉強会ブログはこちら

データベース(DB)とSQLのほかに、様々な社内勉強会資料を公開しています。
下記リンクよりぜひご覧いただき、ご活用いただけますと幸いです。

ご相談・お問い合わせはこちら

福岡情報ビジネスセンターでは、お客様のご要望や目的に合わせた柔軟なご提案が可能です。
システムの導入や開発に関するご相談、お問い合わせは下記のフォームよりお気軽にご連絡ください。

お問い合わせ

そんなご質問・ご相談でも大歓迎です!

ITの力で企業の未来を支える

お気軽にお問い合わせください。
お客様のご要望に合わせて、最適なシステムをご提案いたします。

お問い合わせ