第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
何もデータが入っていないことを表す