コンテンツにスキップ

第1章 SQL

1.1 リレーショナルデータベースとは?

表(テーブル)を元にしてテーブルを組み合わせるデータ管理方法。複数の表が集まって一つのデータベースを構成する。

表:テーブルの構造

  • 列(フィールド)項目を表す
  • 行(レコード) 項目の集まり1件を表す

例:商品テーブル

商品ID 商品名 単価
1 りんご 200
2 みかん 150
3 いちご 200

列:フィールド

列は「項目」を表し、その名前(列名)とどのようなデータを入れるのかを設定する。例えば、「商品名」の列は文字列を入れ、空欄が許されないなどの設定を行うことが出来る。

行:レコード

行はデータ一件を表す。上の例では「1 りんご 200」で1件のデータ(1レコード)になる。行を区別するためのキー(プライマリーキー)が必要になる。

主キー:プライマリーキー

通常はどれかの列がプライマリーキー(主キー)を表す。プライマリーキーは各行を一意で示すことが出来るデータ。他の行と重複しない値を持つ。上の例では「商品ID」の列が主キーとなっている。

リレーション

プライマリーキーを組み合わせて表を関連づける。これをリレーションという。

例:売上テーブル

売上ID 商品ID 個数 日付
1 1 5 2020-09-30
2 2 3 2020-09-30
3 3 1 2020-10-01
4 1 1 2020-10-01
5 2 2 2020-10-01

売上テーブルには売り上げた商品名や単価は含まれず、商品IDだけが含まれている。この商品IDを元に商品テーブルから商品名、単価を求めることが出来る。

売上テーブルの商品IDは他のテーブルの主キーである。このように他のテーブルの主キーが入る列を外部キーと呼ぶ。

1.2 DBMSとは?

DBMSはData Base Management Systemの略であり、データベース管理ソフトのことを言う。通常はアプリケーションソフトからDBMS経由でデータベースを扱う。

■主なDBMS 製品 ・Oracle ・SQL Server

オープンソース ・MySQL ・PostgreSQL ・SQLite

本資料ではPythonやPHP、スマートフォンに標準搭載されている SQLite を使用する。

1.3 SQLとは?

SQL=Structured Query Language データベース問い合わせ用の言語。

SQLでデータベースに命令を出し、その結果を受け取る。 命令を出すこと:SQLを発行する、クエリを発行する、問い合わせを行う、という言い方をする。 SQLはANSIやISOによって標準化されているが、細かい点ではDBMSに依存する点もある。

SQLの例

SELECT 商品名 FROM 商品テーブル;

商品テーブルから「商品名」の列のみを取り出す。

SQLの意義

  • DBMSが変わっても原則としてSQLの変更の必要がない
  • 複雑な問い合わせが簡単に行える
  • プログラム言語から発行可能

命令の種類

データ定義文(DDL=Data Definition Language)

  • CREATE:データベース、テーブルの作成
  • DROP:データベース、テーブルの削除
  • ALTER:データベース、テーブルの変更

データ操作文(DML=Data Manipulate Language)

  • SELECT:行の検索
  • INSERT:行の追加
  • UPDATE:行の変更
  • DELETE:行の削除

データ制御文(DCL=Data Control Language)

  • COMMIT、ROLLBACKなどのトランザクション関連
  • GRANTなどのユーザ権限関連

1.4 データ型

各フィールドにはデータ型が指定できる。 データ型はDBMSによって異なる。以下はSQLiteのデータ型。

  • INTEGER 整数
  • TEXT 文字列
  • REAL 浮動小数点数

※日付・時刻型は存在しないので文字列としてTEXT型にする。

1.5 データの表記

SQLでデータを指定するときには以下のように書く。

数値

そのまま書く 例:100 50.2

文字列

''または""で囲む 例:'りんご' "みかん"

日付

''または""で囲む 例:'2020-09-17' ※区切り文字はハイフンを使う

時刻

''または""で囲む 例:'13:30:00' "13:30"

日時

''または""で囲む 例:'2020-09-17 13:30:00'

NULL

何もデータが入っていないことを表す