「ゼロからはじめるデータベース操作」を読んで --- SQL操作を整理(第一章、二章)
本記事では、上記の SQL 第2版 ゼロからはじめるデータベース操作を読んで学んだ内容を記録していきます。
データベースとSQL
データベースってなに?
データベースとは、大量のデータを保存し、コンピュータから効率よくアクセスできるように加工したデータの集まりのことです。そして、データベースを管理するコンピュータシステムをDBMS(Database Management System) と呼びます。
DBMSにはいろいろな種類がある
DBMSにはいろいろな種類があっておおむね5種類に分類できます。
- 階層型データベース
- リレーショナルデータベース(RDB)
- オブジェクト指向データベース(OODB)
- XMLデータベース(XMLDB)
- キー・バリュー型データストア(KVS)
現在最も使われているのはRDBで、SQL(Structured Query Language) という専用の言語を用いてデータを操作します。RDBは列と行からなる2次元の表形式になっています。このような構造のDBMSのことをRDBMSと呼びます。RDBMSの例としては、PostgreSQL, MySQL, Oracle Databaseなどがあります。
非リレーショナルなデータベースとしてはNoSQLがあります。KVSがこれに当たりますね。キー(Key)と値(Value)の組み合わせだけの単純なデータ構造をしているので非常に高速なデータの読み書きが可能です。例としてはRedisがあります。
本記事ではRDBMSについて取り上げます。
データベースのシステム構成
RDBMSを利用する際のシステム構成は以下のようなクライアント/サーバ型が一般的です。
graph LR
A["(クライアント)"
データベースを
利用するプログラム]
B["(サーバ)"
*RDBMS*
データベースを
読み書きする
プログラム]
C["データベース
(ハードディスクなどに
保存してある)"]
A == SQL文 ==> B
B == 要求したデータ ==> A
B <==> C
テーブルの構成
RDBは表形式(テーブル)になっています。テーブルの列はカラムと呼び、テーブルに保存する項目を表します。テーブルの行はレコードと呼び、1件のデータに相当します。RDBでは、行単位でデータを読み書きします。
標準SQLとは
SQLにはISOで定められた標準規格があり、それに準拠したSQLを標準SQLと呼びます。以前はRDBMSごとに、方言がありましたが最近は標準SQLサポートが進んできているので、この標準SQLを覚えれば様々なRDBMSでSQL文が書けるようになります。
SQLの書き方
SQLは、いくつかのキーワードと、テーブル名や列名などを組み合わせて1つの文として、操作の内容を記述します。SQL文は、RDBMSに与える命令は3つに分類されます。
- DDL(Data Definition Language)
DDLはデータベースやテーブルに対して操作を行うことが出来ます。 ex) CREATE, DROP, ALTER
- DML(Data Manipulation Language)
DMLは、テーブルの行に対して操作を行うことが出来ます。 ex) SELECT, INSERT , UPDATE, DELETE
- DCL(Data Control Language)
DCLはデータベースに対して行った変更を確定したり取り消したりします。 ex) COMMIT, ROLLBACK, GRANT, REVOKE
これらのうち、実際に使用されるSQL文の90%はDMLらしいです。
テーブルの作成
テーブルを作成するためには、事前にデータベースを作成する必要があります。RDBMS上にデータベースを作成するにはCREATE DATABASE 文というSQL文を実行します。
CREATE DATABASE <データベース名>;
データベースを作成したら、次にCREATE TABLE 文でテーブルをその中に作成します。
CREATE TABLE <テーブル名>
(<列名1> <データ型> <この列の制約>
<列名2> <データ型> <この列の制約>
<列名3> <データ型> <この列の制約>
・・・
<このテーブルの制約1>, <このテーブルの制約2>, ・・・);
データ型の指定は必須ですが、制約は列ごとに必要に応じて指定することもできるし、最後にまとめて記述することもできます。データ型は主に、INTEGER型やCHAR型(固定長文字列)、VARCHAR型(可変長文字列)、DATE型があります。また、制約としては、NOT NULL(必ずデータが入っていなければならない、という制約)、PRIMARY KEY (主キー制約)などがあります。
テーブルの削除と変更
テーブルを削除するSQL文は以下のようにDROP TABLE文を書きます。
DROP TABLE <テーブル名>;
削除したテーブルとデータは復活できません。
テーブル定義の変更を行うには、ALTER TABLE文を使用します。 列を追加する場合は、次のようになります。
ALTER TABLE <テーブル名> ADD COLUMN <列の定義>;
反対に、列を削除する場合は、次のようになります。
ALTER TABLE <テーブル名> DROP COLUMN <列名>;
以下に例を示します。
追加
ALTER TABLE my_table ADD COLUMN my_column VARCHAR(100)
削除
ALTER TABLE my_table DROP COLUMN my_column
検索の条件
SELECT文の基本
テーブルからデータを取り出すときには、SELECT文を使います。
SELECT <列名>, ・・・
FROM <テーブル名>;
SELECT句には、テーブルから出力したい列の名前を書き並べます。FROM句には、テーブル名を指定します。
全ての列を出力する場合は、アスタリスク( * )を使用します。
SELECT *
FROM <テーブル名>;
列に別名をつける場合は、ASキーワードを使用します。
SELECT my_id AS id,
my_name AS "名前"
FROM mt_table;
日本語で別名を指定する場合はダブルクォーテーション( " )で囲みます。
SELECT句には、列名だけでなく定数を書くこともできます。
SELECT '商品' AS mojiretu,
17 AS kazu,
'2025-10-08' AS hizuke,
my_id,
my_name,
FROM my_table;
my_id列とmy_name列と一緒に出力できます。
結果から重複行を省くには、SELECT句でDISTINCTというキーワードを使用します。DISTINCTはNULLにも適用されます。また、DISTINCTキーワードは先頭の列名の前にしか置けません。
何らかの条件に合う行だけを取り出したい場合、SELECT文では、選択したい行の条件をWHERE句で指定します。
SELECT <列名>, ...
FROM <テーブル名>
WHERE <条件式>;
条件式では、「=」という記号を使用します。例えば、「my_id = 24」や、「my_name = '名前'」という感じです。なお、SQLでは句の記述順が決まっており、勝手に変えることはできません。WHERE句は必ずFROM句の直後に書く必要があります。
コメントをつける方法は二つあります。 一つ目は、1行コメントです。「--」の後に記述します。 二つ目は、複数行コメントです。「/*」と「*/」で囲った中に記述します。
算術演算子と比較演算子
SQL文の中には計算式を書くことが出来ます。SQL文で使える四則演算の主な記号は以下の通りです。
| 意味 | 記号 |
|---|---|
| 足し算 | + |
| 引き算 | - |
| 掛け算 | * |
| 割り算 | / |
NULLを含む演算は結果がNULLになってしまうので、注意が必要です。
比較演算子とは、両辺に記述した列や値を比較する記号のことです。SQLの主な比較演算子は以下の通りです。
| 演算子 | 意味 |
|---|---|
| = | ~と等しい |
| <> | ~と等しくない |
| >= | ~以上 |
| > | ~より大きい |
| <= | ~以下 |
| < | ~より小さい |
これらの比較演算子は文字、数字、日付など、ほぼすべてのデータ型の列、値を比較することが出来ます。注意点としては、NULLに比較演算子は使えないということです。NULLかどうかを判断するためには、IS NULL、IS NOT NULL演算子を使用します。
論理演算子
NOT演算子は単独では使用せず、他の検索条件と組み合わせて使います。例えば、以下のようになります。
SELECT cost
FROM products
WHERE NOT cost >= 1000;
これはWHERE句の条件式はcost < 1000と同値になります。
WHERE句では、AND演算子やOR演算子は複数の検索条件を組み合わせることが出来ます。以下がその例です。
SELECT name, cost
FROM products
WHERE name = '本'
AND cost <= 5000;
ANDとORを同時に使用する場合、AND演算子の方が優先されてしまうので、()をつけて柔軟に対応する必要があります。
SELECT name, cost
FROM products
WHERE cost <= 5000
AND (name = '本'
OR name = 'ガジェット');
NOT、AND、ORの三つの演算子は論理演算子と呼ばれます。
SQLは3値論理であるため、真でも偽でもない真理値は、[不明(UNKNOWN)]という第三の値になります。よって、以下のような真理値表になります。
| P | Q | P AND Q |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 偽 | 偽 |
| 真 | 不 | 不 |
| 偽 | 真 | 偽 |
| 偽 | 偽 | 偽 |
| 偽 | 不 | 偽 |
| 不 | 真 | 不 |
| 不 | 偽 | 偽 |
| 不 | 不 | 不 |
| P | Q | P OR Q |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 偽 | 真 |
| 真 | 不 | 真 |
| 偽 | 真 | 真 |
| 偽 | 偽 | 偽 |
| 偽 | 不 | 不 |
| 不 | 真 | 真 |
| 不 | 偽 | 不 |
| 不 | 不 | 不 |
続きは、次の記事をご覧ください。
参考文献:
- ミック. SQL 第2版 ゼロからはじめるデータベース操作. 翔泳社. Kindle 版.