SQLは、データベース言語の中で最も普及している言語の1つです。DBMS(データベース管理システム)上でデータやデータベースを制御するための言語であり、ユーザーやシステムからの命令を受けてRDB(リレーショナルデータベース)にクエリ(問い合わせ)を行い、結果を返します。返ってきた結果はモニターなどに表示されます。
この本では、家計簿を例に図解と解説に加え、豊富なドリルで、楽しくデータベースとSQLを学習できる解説書です。第4版では注目を集めるデータ活用とAIの世界へ進むための解説「SQLによるデータ分析入門」を追加しています。
SQLとは
SQLは、「シークェル」または「シーケル」と呼ばれています。SQLは固有名詞であり、国際標準としてのSQLは、何らかの略語ではないと定義されています。1970年代、IBMが世界初のRDBMS(リレーショナルデータベース管理システム)である「System R」を開発しました。その操作を行う「SEQUEL(Structured English Query Language)」が、現在のSQLのベースとなっており、シークェルという読み方も「SEQUEL」に由来しています。その後、データベース言語は何度も改正されて「SQL」と改名されましたが、読み方はそのまま引き継がれています。
SQLはデータベース言語としてISO(国際標準化機構)で規格化されています。そのため、1つのデータベース用のSQLを覚えたら、そのほかの大半のRDBで同じように利用できます。SQLの使えるデータベースには、Oracle社のOracle Database、Microsoft社のMicrosoft SQL ServerやAccess、オープンソースのMySQLやPostgreSQLなどがあり、それぞれ異なるデータベース・エンジンを搭載していますが、どれもSQLで操作可能です。
書籍の概要
初心者でも楽しくSQLを習得できる良い本だと思います。
従来、SQLの学習環境を整えるためには、面倒な準備が必要でした。本書では、PCやスマートフォンのブラウザがあれば今すぐにSQLを実行できるクラウドサービス「dokoQL」を用意し、最初から学習に専念できるようになっています。
※dokoQLは新刊購入者用特典です。
SQLをマスターするには、たくさん書き、たくさん実行し、SQL文と実行結果の因果関係を繰り返し体感することが、遠回りのように見えて一番の近道です。自信がつくまで繰り返し「練習できる」ので、着実に理解を深めることができます。
「dokoQL」の実行方法
書籍掲載のSQL文とクラウドサービス「dokoQL」を使って各章の例題を使ってみましょう。何度も繰り返していくうちに「select」「update」「delete」「insert」などの命令を自然と覚えていくと思います。
例題のSQLを実行するには、エディタに表示された命令を左上の空欄にコピペし、下の▷マークをクリックします。すると下の結果表に、実行後の値が表示されます。
SQLの4大命令
SQLには4大命令と呼ばれる主要な4つの文章が存在します。(SQLで書かれた命令文は「クエリ」と言います)SQLの基本文はこの4つがメイン!4つ使えるだけでデータベースと会話を始められます!
データの検索ができるSELECT文
データの更新ができるUPDATE文
データの追加ができるINSERT文
データの削除ができるDELETE文
リスト(例題)の内容
書籍に掲載してあるリスト(例題)のソースコードは、Webサイトからダウンロードできます。
第1章 はじめてのSQL
101 初めての検索
SELECT 出金額
FROM 家計簿
102 すべての列を検索する
SELECT 日付, 費目, メモ, 入金額, 出金額
FROM 家計簿
103 すべての列を検索する(簡略記法)
SELECT *
FROM 家計簿
104 出金額が3,000円を超える行だけ取得する
SELECT 日付, 費目, 出金額
FROM 家計簿
WHERE 出金額 > 3000
105 3月の家賃の支払いを行として追加する
INSERT INTO 家計簿
VALUES ('2024-02-25', '居住費', '3月の家賃', 0, 85000)
106 2024-02-25の出金額を90,000円に変更
UPDATE 家計簿
SET 出金額 = 90000
WHERE 日付 = '2024-02-25'
107 3月の家賃(日付が2024-02-25)の行を削除
DELETE FROM 家計簿
WHERE 日付 = '2024-02-25'
第2章 基本文法と4大命令
201 1行で記述されたSERECT文
SELECT 費目, 出金額 FROM 家計簿 WHERE 出金額 > 3000
202 整形されたSERECT文
SELECT 費目, 出金額
FROM 家計簿
WHERE 出金額 > 3000
203 コメントを記述する
/* 入出金表示用SQL バージョン0.1
作成者:朝香あゆみ 作成日:2024-02-01 */
SELECT 入金額, 出金額 -- 金額関連の列のみ表示
FROM 家計簿
204 3月の家賃の支払いを行として追加する
INSERT INTO 家計簿
VALUES ('2024-02-25', '居住費', '3月の家賃', 0, 85000)
205 数字を文字列として指定したら?強制変更
INSERT INTO 家計簿
VALUES ('2024-02-25', '居住費', '3月の家賃', '0', '85000')
206 複数の列を取得するSELECT文 102と同じ?
SELECT 費目, 入金額, 出金額
FROM 家計簿
207 ASを用いて別名を定義したSELECT文
SELECT 費目 AS ITEM, 入金額 AS RECEIVE, 出金額 AS PAY
FROM 家計簿 AS MONEYBOOK
WHERE 費目 = '給料'
208 1つの列を更新するUPDATE文
UPDATE 家計簿
SET 入金額 = 99999
209 条件付きのUPDATE文
UPDATE 家計簿
SET 入金額 = 99999
WHERE 日付 = '2024-02-03'
210 シンプルなUPDATE文
DELETE FROM 家計簿
211 列を指定して追加するINSERT文
INSERT INTO 家計簿
(費目, 日付, 出金額)
VALUES ('通信費', '2024-02-20', 6200)
212 全列に追加するINSERT文
INSERT INTO 家計簿
VALUES ('2024-02-20', '通信費', '携帯電話料金', 0, 6200)
第3章 操作する行の絞り込み
301 1円以上の出金のあった行をすべて削除する
DELETE FROM 家計簿 WHERE 出金額 > 0
302 正しいNULLの判定方法
SELECT *
FROM 家計簿
WHERE 出金額 IS NULL
303 1月に関する行を取得するSELECT文
SELECT * FROM 家計簿
WHERE メモ LIKE '%1月%'
304 500~900円の出費を取得するSELECT文
SELECT *
FROM 家計簿
WHERE 出金額 BETWEEN 500 AND 900
305 食費・交際費を取得するSELECT文
SELECT *
FROM 家計簿
WHERE 費目 IN ('食費', '交際費')
306 食費でも交際費でもない行を取得するSELECT文
SELECT *
FROM 家計簿
WHERE 費目 NOT IN ('食費', '交際費')
307 2つの条件式を組み合わせる
UPDATE 湊くんの買い物リスト
SET 価格 = 6200
WHERE 名称 = 'スッキリ勇者クエスト'
AND 販売店 = 'B'
308 複数の論理演算子を使ったSELECT文
SELECT * FROM 湊くんの買い物リスト
WHERE 販売店 = 'A' /* 条件式1 */
OR 販売店 = 'B' /* 条件式2 */
AND カテゴリ = 'ゲーム' /* 条件式3 */
OR カテゴリ = 'DVD' /* 条件式4 */
309 論理演算子の優先順位を指定する
SELECT * FROM 湊くんの買い物リスト
WHERE ( 販売店 = 'A' /* 条件式1 */
OR 販売店 = 'B') /* 条件式2 */
AND ( カテゴリ = 'ゲーム' /* 条件式3 */
OR カテゴリ = 'DVD') /* 条件式4 */
310 ヨシダシゲルさんだけを削除する(同姓同名)
DELETE FROM 社員
WHERE 社員番号 = '2005031' /* 社員番号で対象行を特定*/
第4章 検索結果の加工
401 DISTINCTなし(重複行を削除なし)
402 DISTINCTあり(重複行を削除あり)
403 項目一覧の取得
404 出金額の昇順に並べ替えて取得する
405 日付の降順に並べ替えて取得する
406 複数の列で並び替える
407 列番号を指定するORDER BY句
408 出金額の高い順に3件を取得する
409 3番目に高い出金額だけを取得する
410 取得行数を限定する別の方法
411 和集合を取得する
412 差集合を取得する
413 積集合を取得する
第5章 式と関数
501 選択列リストへの様々な指定
502 計算式に別名をつける
503 INSERT文での計算式の利用
504 UPDATE文での計算式の利用(列指定を含む)
505 CASE演算子を使ったSELECT文(1)
506 CASE演算子を使ったSELECT文(2)
507 メモとメモの長さを表示する
508 10文字(10バイト)以下のメモだけを取得する
509 空白を除去したメモを取得する
510 メモの一部を置換する
511 費目別の1~3文字目に「費」があるものを抽出
512 費目とメモをつけて抽出する
513 百円単位の出金額を取得する(取捨五入)
514 百円単位の出金額を取得する(切り捨て)
515 現在の日付を取得して登録する
516 COALESCE(コアレス)関数の基本動作
517 NULLを明示的に表示する
第6章 集計とグループ化
601 出金額を集計する
602 さまざまな集計をする
603 食費の行数を数える
604 日付と出金額合計を取得するつもり(エラー)
605 NULLをゼロとして平均を求める
606 SQL文を複数実行して各費目の集計結果を得る
607 費目でグループ化してそれぞれの合計を得る
608 集計結果から0円を除外し(エラー)
609 集計結果で絞り込む
610 2023年の入出金の合計を算出
第7章 副問い合わせ
サブクエリ(副問い合わせ)とはSQLの中に書くSQLのことです。SQL文を実行することをクエリ(問合せ)の発行と呼びます。当然の話ですが、クエリを発行するとその結果が表形式で取得できます。
サブクエリが入っているクエリはまずサブクエリから実行され、実行結果を一つのテーブルと見なしながらメインクエリが実行されます。
ビューはビューのSQLから事前に仮想テーブルを作成し他のSQL内で使用するので、サブクエリと近い機能を持っています。
701 最も大きな出費の費目と金額を求める①
/* 出金額の最大値を取得して値を書き留めておく */
SELECT MAX(出金額) FROM 家計簿; -- (1)
/* (1) で得た金額を条件式に記述して費目と金額を取得する */
SELECT 費目, 出金額 FROM 家計簿
WHERE 出金額 = 【書き留めた額】; -- (2)
702 最も大きな出費の費目と金額を求める②
SELECT 費目, 出金額 FROM 家計簿
WHERE 出金額 = (SELECT MAX(出金額) FROM 家計簿)
703 SET句で副問い合わせを利用する
UPDATE 家計簿集計
SET 平均 = (SELECT AVG(出金額)
FROM 家計簿アーカイブ
WHERE 出金額 > 0
AND 費目 = '食費')
WHERE 費目 = '食費'
704 選択リストで副問い合わせを利用する
SELECT 日付, メモ, 出金額,
(SELECT 合計 FROM 家計簿集計
WHERE 費目 = '食費') AS 過去の合計額
FROM 家計簿アーカイブ
WHERE 費目 = '食費'
705 INを使った条件式
SELECT * FROM 家計簿集計
WHERE 費目 IN ('食費', '水道光熱費', '教養娯楽費', '給料')
706 INで副問い合わせを利用する
SELECT * FROM 家計簿集計
WHERE 費目 IN (SELECT DISTINCT 費目 FROM 家計簿)
707 ANYで副問い合わせを利用する
SELECT * FROM 家計簿
WHERE 費目 = '食費'
AND 出金額 < ANY (SELECT 出金額 FROM 家計簿アーカイブ
WHERE 費目 = '食費')
708 値リストにNULLのある条件式
SELECT * FROM 家計簿
WHERE 費目 NOT IN ('食費', '水道光熱費', NULL)
709 副問い合わせからNULLを除外する(1)
SELECT * FROM 家計簿アーカイブ
WHERE 費目 IN (SELECT 費目 FROM 家計簿
WHERE 費目 IS NOT NULL)
710 副問い合わせからNULLを除外する(2)
SELECT * FROM 家計簿アーカイブ
WHERE 費目 IN (SELECT COALESCE(費目, '不明') FROM 家計簿)
711 FORMで副問い合わせを利用する
SELECT SUM(SUB.出金額) AS 出金額合計
FROM (SELECT 日付, 費目, 出金額
FROM 家計簿
UNION
SELECT 日付, 費目, 出金額
FROM 家計簿アーカイブ
WHERE 日付 >= '2024-01-01'
AND 日付 <= '2024-01-31') AS SUB
712 INSERT文で副問い合わせを利用する
INSERT INTO 家計簿集計(費目, 合計, 平均, 回数)
SELECT 費目, SUM(出金額), AVG(出金額), 0
FROM 家計簿
WHERE 出金額 > 0
GROUP BY 費目
第8章 複数テーブルの結合
第9章 トランザクション
第10章 テーブルの作成
第11章 さまざまな支援機能
第12章 データベースの設計
付録A DBMS別互換性簡易リファレンス
付録B エラー解決 虎の巻
付録C 特訓ドリル (SQL・正規化・総合問題)
付録D SQLによるデータ分析
索引
コメント