区分 環境情報科目
ディプロマ・ポリシーとの関係
環境 データ処理 ソリューション開発・エシカルテクノロジー
サステナブル・エンジニアリング
カリキュラム・ポリシーとの関係
教養 応用力 実践力
科目間連携
カリキュラム全体の中でのこの科目の位置づけ

科目の目的
この科目の目的は、リレーショナルデータベースに対する実務的なSQL運用力を体系的に養うことである。データ抽出(DQL)の基礎から、関数・集計・グループ化、結合、サブクエリ・集合演算を通じて、要件を正確にクエリで表現する力を身に付ける。さらに、テーブル定義と制約(DDL)、データ操作(DML)、トランザクション制御(TCL)を学び、整合性・安全性・再現性を担保したデータ更新と運用を実現できるようにする。継続的な演習を通して、NULLや結合の落とし穴、WHERE句の安全な運用、データ型選択などの判断力を養成し、小規模データの設計・投入・検索・更新を一貫して遂行できる技術の修得を目指す。
到達目標
データベース設計と操作は、業務システムやWebアプリケーション開発を行うエンジニアに必須のスキルである。この科目では、履修者がリレーショナルデータベースとSQLに関する基礎知識から実践的な運用力までを段階的に修得することを目指す。
本科目の学修を通じて、「SELECT … FROM … WHERE … を正しく用いて必要な行を抽出し、結果の並び替え・件数制限および基本関数(数値・文字列・日付・型変換)を組み合わせて要件に沿った結果を得られること」が期待される(データクエリ)。また、「件数や合計・平均・最大・最小などの集約を適切に行い、グループ単位での集計および集計後の条件指定を正しく記述し、NULL と型の影響を踏まえて結果を解釈できる力の修得」も目標である(データクエリ)。さらに、「内部結合・外部結合・自己結合を状況に応じて使い分け、結合条件の指定方法の違いを説明しながら意図した結果を得られること、加えて、非相関・相関サブクエリや存在判定、集合演算を要件に応じて適切に適用し、必要に応じて結合表現へ書き換えられること」が到達目標となる(複合データクエリ)。その上で、「表の作成・変更・削除を行い、主キー・外部キー・一意制約・非NULL・検査・既定値、ならびに連番生成の仕組みを含む整合性の高いスキーマを設計できること」を目標とする(データ定義)。さらに、「データの追加・更新・削除を安全に実行し、トランザクションの開始・確定・取り消し・一時保存点を用いて更新処理を制御し、与えられた小規模要件について表設計からデータ投入、複合的な検索、更新、検証までを通しで遂行し、結果の妥当性を説明できること」を到達目標とする(データ操作・総合)。
この科目に関連する資格は、「ORACLE MASTER Silver SQL」の基礎的な範囲を網羅する内容になっており、この資格を取得するためには必須となる。これらの資格を取得することで、ソフトウェア開発者としての社会的な価値を上げることに繋がる。

科目の概要
本科目では、「データクエリ」「複合データクエリ」「データ定義」「データ操作・総合」の大きく4つに分けて到達目標を達成する。
一つ目(データクエリ)は、表から必要な行を的確に取り出すための基礎を固める。列の取得、行の抽出、並べ替えや件数制限、NULLの扱いを学び、数値・文字列・日付・型変換などの基本関数、さらに集計関数とグループ化による整理までを身に付ける。二つ目(複合データクエリ)は、複数表にまたがる検索の設計力を養う。内部結合・外部結合・自己結合の使い分け、相関・非相関サブクエリと存在判定、集合演算(和・共通・差)を扱い、要件に応じて表現を選択できる力を育成する。三つ目(データ定義)は、正しい構造をもつデータベースを設計・変更できることを目指す。表の作成と変更、データ型の選択、主キー・外部キー・一意・非NULL・検査・既定値などの制約、識別子の自動採番や連番管理の基礎を学ぶ。四つ目(データ操作・総合)は、更新処理の安全運用と総合力の定着を図る。追加・更新・削除の実行手順、トランザクションの開始・確定・取り消し・保存点による制御を学び、設計から投入、複合的な検索、更新、検証までを通しで行う演習で仕上げる。
全30回の授業は、上述の四つの到達目標に対応するように4部構成で展開する。第1部の第1回から第11回がデータクエリ、第2部の第12回から第20回が複合データクエリ、第3部の第21回から第25回がデータ定義、第4部の第26回から第30回がデータ操作・総合、の四つで構成する。
 第1部は、データ取得の基礎力を養うことを主なテーマとする。第1~4回で列取得・行抽出・並べ替えと件数制限・NULLの理解を進め、第5回で基礎演習を行う。第6~7回で基本関数を、第8回で関数演習を行い、第9~10回で集計とグループ化を扱い、第11回で演習により定着させる。
 第2部は、複数表検索の応用力を育成することを主なテーマとする。第12~15回で内部結合・等価/非等価結合・外部結合・結合の応用を扱い、第16回で結合演習を行う。第17~18回でサブクエリ、 第19回で集合演算を学び、第20回で総合演習により確認する。
 第3部は、信頼性の高い構造設計の基礎知識を修得することを主なテーマとする。第21~22回で表定義と変更、データ型選択を学び、第23~24回で各種制約の設計と運用を扱い、第25回で定義・制約の演習を行う。
 第4部は、更新処理の実践と総合力の完成を主なテーマとする。第26~28回で追加・更新・削除を含む操作を学修し、第29回でトランザクション制御を扱う。第30回では、設計から投入・検索・更新・検証までを通して実践する総合演習を行う。

科目のキーワード
データクエリ(列の取得、行の抽出、ORDER BY、件数制限、NULL、スカラー関数、集計関数、GROUP BY、HAVING) ― 第1回~第11回、複合データクエリ(内部結合、外部結合、自己結合、ON/USING、サブクエリ、EXISTS、集合演算) ― 第12回~第20回、データ定義(CREATE TABLE、データ型選択、PRIMARY KEY、FOREIGN KEY、UNIQUE、NOT NULL、CHECK) ― 第21回~第25回、データ操作・総合(INSERT、UPDATE、DELETE、トランザクション制御、総合演習) ― 第26回~第30回
授業の展開方法
本科目では、リレーショナルデータベースに対する実務的なSQL運用力を養うことを目的としている。毎回、Wordで作成したオリジナルテキスト(PDF版)を配布し、その内容に沿って授業を進める。授業ではまず用語の役割や使い方を説明し、その後に演習を行い、学生が実際のデータベース操作を通して学修する。総合演習回では、それまでに学修した知識を用いて、複合的なSQLを実行する能力を育成する。授業では、各自が持参するノートパソコンを使用することを求める。授業や演習終了後、その内容に関する小テストを実施する。最後に小テストの解答・解説を行い終了する。
授業1コマの基本構成は、授業の最初に復習を5~7分行い、その後、3から4個ある各コマ主題細目について20分程度で解説し、合計約70分の授業を行う。その後、10分で小テストおよび解説を行い、最後に予復習の説明を3分程度行って授業を終わる。
 授業終了後は、次回授業までに復習を行っておくことが求められる。テキストの解説や練習問題を見直すだけでなく、ChatGPTを活用し、テキストの内容を読みこませて20問程度の練習問題を作成し、自分で解いて理解を深める。さらに、その解答・解説を確認することで、より確実に知識を定着させる。また、授業で扱ったSQLを実際に実行することで、SQL運用力を身に着ける。

オフィス・アワー
渡辺謙:【前期】
環境データベース概論
環境データベースⅡ
環境プログラミングⅣ(永続化技法)
全科目:木曜5限
【後期】
環境データベースⅠ
環境データベースⅢ
コンピュータ・アーキテクチャ論
全科目:木曜5限
神馬一博:【前期】
Web環境システム概論木曜5限
【後期】
Web環境システム開発Ⅰ(Webアプリケーションの実装)水4限・5限
Web環境システム開発Ⅱ(クライアント再度・プログラミング)木5限

科目コード UC2031
学年・期 1年・後期
科目名 環境データベースⅠ
単位数 4
授業形態 演習
必修・選択 必修
学習時間 【授業】90分×30 【予習】90分以上×30 【復習】90分以上×30
前提とする科目
展開科目
関連資格
担当教員名 渡辺謙・神馬一博
主題コマシラバス項目内容教材・教具
1 列の取得(【データクエリ】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第1回「列の取得」は、科目の出発点として実行環境へ確実に接続し、SELECT文の基本構造と記述ガイドラインを体得し、必要列を明示し適切な別名を付す能力を獲得することを目的とする。アスタリスクに依存しない堅牢な列設計と可読性の高い書式を徹底し、以後の行抽出・並べ替え・関数適用・集計・結合へ円滑に展開するための前提知識と作法を固める位置付けである。特に接続情報の確認とセッション管理、読み取り専用アカウントでの到達確認、予約語回避と命名の統一、見出しのわかりやすさの点検を実践し、標準SQLを優先する態度を涵養する。本回で確立する最小単位の選択能力は、次回の条件指定や後続の高度操作の理解速度と品質を左右するため、初学段階の最重要テーマである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① データベースへの接続 ② SELECT文のガイドライン ③ 列の指定と別名
細目レベル ① データベース管理システムに接続するには、クライアントツールを用い、接続先を特定する情報を正しく指定する必要がある。一般に必要な項目は、ホスト名またはIPアドレス、ポート番号、データベース名、ユーザ名、パスワードである。これらは管理者から提供されるか、学内環境では配布資料に記される。接続に成功するとセッションが確立し、以後の問い合わせが受け付けられる。初回は権限のある読み取り用アカウントで接続し、簡単な問い合わせで到達確認を行うとよい。接続失敗時は、項目の誤り、ネットワーク不通、アカウントのロックなどが典型原因であるため、設定値の再確認と再試行を行う。作業後は意図的に切断し、アカウント情報を第三者と共有しないことが基本である。本細目では、接続に必要な情報の理解と基本的な接続・切断操作の習得までが到達目標である。
② SELECT文は、表から必要な列を取り出して結果として表示するための基本文である。書式は「SELECT 列名 FROM テーブル名;」の順序を守ることが出発点である。読みやすさと保守性のため、SQLキーワードは大文字、識別子は小文字などの表記規約を決めて統一する、列はカンマごとに改行して縦に並べる、文末にセミコロンを付ける、といった作法が有効である。実行前に目的を明確化し、必要最小限の列だけを指定する方針をとる。予約語や紛らわしい名称を避け、存在する列名・表名を確認する。動作確認は小さな対象で行い、実行結果の見出しが読み手にとって理解しやすいかを点検する。ベンダ固有機能に依存しすぎず、標準的な記述を優先する姿勢も重要である。本細目では、SELECT文の基本構造と可読性・安全性を高める書き方の指針の理解までが到達目標である。
③ 列の取得では、SELECTの後に取得したい列をカンマで区切って明示的に列挙する。記述した順序が結果の列順になるため、読み手にとって意味の通る並びを設計することが重要である。必要に応じて同じ列を複数回指定することもでき、定数や単純な式を列として出力することも可能である。列見出しを分かりやすくするために別名を付与する。標準SQLでは「列名 AS 別名」の形を用い、ASは省略可能である。別名に空白や記号を含めたい場合は二重引用符で囲むとよい(標準準拠)。また、将来の変更や無駄な転送を避ける観点から、ワイルドカードの「*」による一括指定は原則避け、必要な列だけを列挙する方針を取るべきである。例として、「SELECT 商品名 AS 名称, 価格 AS 税抜価格 FROM 商品;」のように記述する。本細目では、列の明示的な指定方法と列別名の付与・表示に関する基本の理解までが到達目標である。
キーワード ① SELECT ② FROM ③ 列 ④ AS ⑤ データベース接続
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第1回で扱った「データベースへの接続」「SELECT文のガイドライン」「列の指定と別名」を資料と演習結果に基づき整理しておくべきである。接続ではホスト名 ポート データベース名 ユーザ名 パスワードを正確に設定し、読み取り専用アカウントで接続して簡単な問い合わせを実行し、成功と切断の手順を説明できる状態にしておくことが求められる。SELECTではSELECT 列名 FROM テーブル名の順序と表記規約を守り、必要最小限の列のみを列挙する方針を自らの言葉で明文化しておくべきである。列の指定では列順が結果に反映される点、定数や式の出力、列見出しの理解性向上のための別名付与とASの省略可能性、二重引用符の扱い、ワイルドカード使用を避ける理由を具体例とともに説明可能なレベルにしておくことが望ましい。
【予習】
第2回に向け、列の取得から一歩進めて行の抽出の入口を確認しておくべきである。WHERE句で行を選別するという発想を言葉で説明できるようにし、教科書の該当章を通読して比較演算子 算術演算子 論理演算子の名称と基本的役割のみを把握しておくのがよい。実行環境ではSELECT 列名 FROM テーブル名の基本形を再実行し、条件部をどの位置に付すかを示せる状態にしておくべきである。文字列の検索はLIKEの用途を概観する段階にとどめ、具体的なパターン指定や結合条件には踏み込まない方針である。使用するテーブルの列名とデータ型を再確認し、誤記によるエラーを避ける準備を整えておくことが望ましい。

2 行の抽出(【データクエリ】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第2回は「行の抽出」を扱い、前回の「列の取得」で確定した投影に対し、WHERE句で選択を与える基礎を確立する回である。比較・算術・論理演算子の意味と優先順位、括弧による制御を理解し、型に適した条件表現を習得する。さらにLIKEとワイルドカードによる文字列検索を実践し、冗長・曖昧な条件を避けて意図を正確に反映する記述を目標とする。次回の並べ替え・件数制限、NULLの三値論理、結合やサブクエリでの条件設計へ接続する要の位置づけである。実務では性能や可読性に直結するため、選択条件を最小限かつ検証可能に書く姿勢を養うことを本回の目的とする。また型変換の暗黙的挙動や除算の丸めなどDBMS差異にも注意を促す。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① WHERE句による行の抽出 ② 比較・算術・論理演算子 ③ 文字列の検索
細目レベル ① WHERE句は、SELECT文でテーブルから取り出す行を条件により絞り込むための仕組みである。構文は「SELECT 列名 FROM テーブル名 WHERE 条件」であり、各行に対して条件式が評価され、真と判定された行のみが結果に残るので、膨大なデータから必要最小限の部分集合を得られるのである。条件式には数値・文字列・日付といった値を用いることができ、列同士の比較や列と定数の比較を記述する。例えば「価格が1000以上」の抽出は「WHERE 価格 >= 1000」、特定のカテゴリのみは「WHERE カテゴリ = '食品'」のように書く。複数の条件を組み合わせる場合はANDやORで連結し、かっこで範囲を明確にする。正しい結果を得るには、列のデータ型に適した値と演算子を選ぶこと、意図を短く明確に表す条件式にすることが重要である。本細目では、WHERE句の目的、評価の仕組み、基本構文と単純な条件指定の理解までが到達目標である。
② 行の抽出条件は、比較・算術・論理演算子の組み合わせで表現するのが基本である。比較演算子は「=」「<>(または!=)」「>」「>=」「<」「<=」であり、左右の値の大小・等価を判定する。算術演算子は「+」「-」「*」「/」で、列の値に計算を施した結果を比較に用いることができる。例えば「税込価格が1500以上」を税率10%と仮定して「WHERE 価格 * 1.1 > 1500」といった書き方が可能である。論理演算子は「AND」「OR」「NOT」で、複数条件を連結し、より精密な抽出を実現する。演算の優先順位は一般に、算術→比較→論理(NOTがANDより優先、ANDがORより優先)であるため、複雑な条件ではかっこを用いて評価順を明示することが重要である。除算結果の小数扱いなど細部の挙動はDBMSや列の型に依存するため、必要に応じて簡単な例で確かめる姿勢が望ましい。本細目では、基本的な比較・算術・論理演算子の意味、優先順位、括弧による制御の理解までが到達目標である。
③ 文字列の検索では、完全一致だけでなく部分一致や前方・後方一致を扱えることが重要である。完全一致は「WHERE 列 = '東京'」のように「=」で表す。パターンによる検索にはLIKEを用い、「%」は任意長の任意文字列、「_」は任意の1文字を表し、これらをワイルドカードと呼ぶ。例えば「'山'で始まる氏名」は「WHERE 氏名 LIKE '山%'」、「'堂'で終わる店名」は「WHERE 店名 LIKE '%堂'」、「3文字目が'A'」は「WHERE コード LIKE '__A%'」と表せる。大文字小文字の区別や文字の照合の挙動は環境によって異なるため、学習時はサンプルデータで期待通りの一致条件になるかを確認するとよい。本細目では、LIKEによるパターン指定、ワイルドカード記号の理解までが到達目標である。
キーワード ① WHERE ② 比較演算子 ③ 算術演算子 ④ 論理演算子 ⑤ LIKE
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第2回の講義で扱ったWHERE句による行の抽出の仕組みを整理することである。SELECT 列名 FROM テーブル名 WHERE 条件 を正確に書け、各行ごとに条件式が評価され真の行のみが残ることを説明できるようにしておくべきである。比較演算子= <> > >= < <=の意味、算術演算子+ - * /を用いた計算結果の比較、論理演算子AND OR NOTの優先順位と括弧による制御を自分の言葉で述べられるようにするのである。価格>=1000 や 価格*1.1>1500 カテゴリ='食品'等の例を作成して期待通りか確認することが重要である。文字列の検索ではLIKEと% _の役割を明確化し、前方一致 後方一致 部分一致の違いと照合順序 大文字小文字の扱いが環境依存である点を確かめておくのである。列の型に適した値と演算子を選択する姿勢を定着させるべきである。
【予習】
第3回では結果セットの並べ替えと件数制限に入るため、抽出と並べ替えの役割の違いを言語化しておくとよい。テーブルの物理的な並びは保証されないという前提を確認し、どの列を基準に順序付けたいかをデータの意味から考察しておくのである。昇順 降順という概念と、数値 文字列 日付で望ましい並びが異なり得る点を、手元のサンプルデータで観察しておくと理解が進むであろう。次回はORDER BYを用いるが、ここでは構文の詳細に踏み込まず、結果の順序を明示する必要性と評価軸の選定を準備しておくことが肝要である。件数制限という話題が続くため、先頭n件を取り出す意図や用途を言葉で整理しておくにとどめるのである。

3 並べ替え・件数制限(【データクエリ】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第3回は、結果の提示を決定する「並べ替え」と「件数制限」を扱い、意図した順序と先頭N件を再現可能に取得する力を養うことを目的とする。ORDER BYの既定昇順と列名指定、複数列および列単位のASC/DESC指定を整理し、未指定時の順序未定義を明確化する。さらに、LIMIT/FETCHとOFFSETの主要表記を比較し、ORDER BYとの併用原則と安全な試行(小さなn/m)を確認する。第1回・第2回の「列」「行」の選択に続き、結果集合の整形を完成させ、後続の集計・結合、ランキングやページング、ウィンドウ関数への布石とする回である。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① ORDER BYの基本 ② 複数列・ASC/DESCの指定 ③ 件数制限
細目レベル ① ORDER BY句は、SELECTで取得した行の表示順を明示的に決めるための句である。通常、テーブルの物理的な並び順は保証されず、同じ条件でも実行のたびに順序が変わる可能性があるため、必要な順序を得たい場合は必ずORDER BYを記述する。構文の基本は「SELECT 列 FROM テーブル ORDER BY 列名;」であり、ここで指定した列の値の大小に従って並べ替えられる。既定では昇順である。列名の代わりにSELECT句に含まれる列の序数(1,2,...)を用いる書き方もあるが、可読性の観点から列名の明示を基本とする。数値・文字列・日付いずれの型でも、型の定義に沿った並びになる。表形式の出力の見通しを良くし、上位や下位を把握しやすくするために不可欠な機能である。本細目では、ORDER BY句の役割と基本構文、既定の昇順と列名指定の理解までが到達目標である。
② ORDER BYでは複数の列を並べて指定でき、左から順に優先度が高い鍵として評価される。例えば「部門、給与」の順に指定すれば、まず部門ごとに並び、その中で給与の大小で細かく順序が決まる。各列に昇順ASCか降順DESCを個別に指定でき、既定はASCである。同じ列リストでも、ASC/DESCの組合せや列の並び順が異なると結果の順序は大きく変わるため、要求仕様に即して丁寧に設計する。数値の降順で大きい値を先頭に出したい場合は「給与 DESC」のように書く。文字列や日付でも同様に指定できる。安易に全体をDESCにするのではなく、並べ替えの意図が伝わる列ごとの指定を行うことが読みやすいSQLにつながる。本細目では、複数列による優先順位付きの並べ替えと、列単位のASC/DESC指定の書き方までが到達目標である。
③ SELECTの結果行が多すぎる場合、必要な先頭の一部だけを取得するために件数制限を用いる。代表的な書き方として、いくつかの実装では「LIMIT n」で先頭n行に絞り、必要に応じて「OFFSET m」で先頭m行を飛ばせる。標準SQLに近い書き方としては「FETCH FIRST n ROWS ONLY」や「OFFSET m ROWS FETCH NEXT n ROWS ONLY」がある。どの書式でも、どの行を「先頭」とみなすかはORDER BYで定義するのが原則であり、ORDER BYが無い件数制限は順序未定義の集合から任意に切り出す扱いになる。トップNや最新N件といった取得では、意図した列で並べ替えたうえで件数を制限する。試行時はnやmを小さくして確認すると安全である。本細目では、主要な件数制限の構文とOFFSETの基礎、ORDER BYと併用して先頭N件を得る考え方までが到達目標である。
キーワード ① ORDER BY ② ASC ③ DESC ④ LIMIT ⑤ OFFSET
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第3回ではORDER BYの基本、複数列・ASC DESCの指定、件数制限を扱った。講義資料と演習を基に、次を自分の言葉で整理すること。1) ORDER BYがない結果は順序未定義であり、必要な順序は必ずSELECT ... ORDER BY 列名で明示すること。既定は昇順で、数値 文字列 日付の型に従って並ぶこと。序数指定(1 2 …)は可読性の観点から避け、列名明示を基本とすること。2) 複数列指定では左から優先度が高く、列ごとにASC DESCを個別指定できること。仕様に即して列の並びと昇降を設計し、例として部門昇順 給与降順などを手で書けるようにしておくこと。3) 件数制限はORDER BYと併用してトップNや最新N件を得るのが原則であること。LIMIT n OFFSET m と OFFSET m ROWS FETCH NEXT n ROWS ONLY や FETCH FIRST n ROWS ONLY の違いを言葉で説明できること。動作確認はnやmを小さくして安全に行うこと。
【予習】
次回はNULLの取り扱いに入る。予習として、NULLが「値が存在しない まだ分からない」を表す特別な状態であり、0や空文字と異なる概念であることを確認すること。三値論理の存在(TRUE FALSE UNKNOWN)と、通常の比較演算だけではNULL同士やNULLとの比較が意図どおりにならない可能性がある、という入口の理解を持つこと。IS NULL と IS NOT NULL の構文がある事実を把握し、簡単な例を1つ用意しておくこと。手元のテーブルにNULLを含む行を少数用意し、WHEREでの振る舞いを軽く観察しておくとよい。COALESCEなどのNULL対策の名称に触れる程度に留め、詳細は次回に学ぶこと。

4 NULLの取り扱い(【データクエリ】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第4回では、「NULLの取り扱い」を扱い、三値論理の下での評価規則を理解し、IS NULL/IS NOT NULLを用いた正確な判定と実務上のNULL対策を身につけることを目的とする。第1〜3回で学んだ行の抽出・並べ替えの前提に潜む落とし穴を可視化し、WHEREでのUNKNOWN除外や計算結果のNULL化による取りこぼしを防ぐ記述原則を整理する。さらに、今後学ぶ集約・グループ化でのNULLの扱い、外部結合におけるNULLの発生、データ定義でのNOT NULLやDEFAULTの活用へと接続する基礎固めの回である。実務の品質事故を防止し、後続の結合・サブクエリ・集合演算での論理整合性を確保するための必須知識を体系化する回である。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① NULLと三値論理 ② IS NULLによる比較 ③ NULL対策
細目レベル ① NULLは、値が未入力・不明・適用不能であることを表す特別な印であり、数値の0や空文字、空白とは別物である。SQLの論理は三値論理で評価され、真(TRUE)・偽(FALSE)に加えて不明(UNKNOWN)が存在する。NULLを含む比較(=、<>、> など)は多くの場合UNKNOWNとなり、算術演算も結果がNULLになる。WHERE句ではTRUEだけが採用され、FALSEとUNKNOWNは除外されるため、NULLを含む条件は意図せず行が落ちることがある。例えば「価格 > 1000」は価格がNULLの行に対してUNKNOWNとなり、抽出されない。論理演算では、一部の式に二値論理の直感が通用しない点に注意が必要である。本細目では、NULLの意味と三値論理の基本挙動を理解するまでが到達目標である。
② NULLは通常の比較演算子では判定できず、a = NULL のような条件はUNKNOWNとなる。そのため、値が存在しないかどうかを調べるときは、IS NULL および IS NOT NULL を用いるのが正しい書き方である。例えば「住所が未登録の行」を求めるなら「住所 IS NULL」、「メールが登録済みの行」は「メール IS NOT NULL」とする。IS NULL/IS NOT NULL はTRUEまたはFALSEを返す述語であり、AND/ORと組み合わせて用いることができる。三値論理の下では、他の比較結果がUNKNOWNになる可能性があるため、括弧で優先順位を明確にし、NULL判定を先に書くなどの工夫が有効である。空文字や0はNULLとは異なる点にも留意する。誤って「= NULL」「<> NULL」などと記述しないことが基本である。本細目では、NULL判定におけるIS NULL/IS NOT NULLの用法と基本的な組み合わせの理解までが到達目標である。
③ NULLは検索・比較・計算の各場面でUNKNOWNやNULLを生み、意図せぬ行の除外や結果の空振りを招くため、対策の考え方が重要である。設計・運用上は、NULLの意味(未入力・不明・適用不能)を明確にし、多義的な使い方を避けることが第一である。記述上の対策としては、比較の前に「列 IS NOT NULL」を明示してから数値比較を行う、NULLの行を別条件で拾い上げる、といった分岐を書くことが有効である。表示やレポートでは、未入力を利用者が読み取れるよう代替表示を行う考え方を持つ(具体的な置換関数の詳細は後続回で扱う)。また、「= NULL」を書かない、NULLが混じると条件全体がUNKNOWNになり得る構造(複雑なORなど)を避け、検証用データで件数を必ず確認する習慣も対策である。スキーマ設計での制約や既定値の活用は後の回で扱う前提で、ここではクエリ記述時の基本的注意に焦点を当てる。本細目では、NULLによる誤判定や取りこぼしを避けるための基本方針と記述上の注意点を理解するまでが到達目標である。
キーワード ① NULL ② 三値論理 ③ IS NULL ④ IS NOT NULL ⑤ UNKNOWN
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第4回で扱った「NULLと三値論理」「IS NULLによる比較」「NULL対策」を、講義資料と自身の実行結果をもとに再整理すること。NULLは0や空文字と別物であり、比較や算術はUNKNOWNやNULLを返すこと、WHERE句ではTRUEのみ採用されUNKNOWNは除外されることを明確に言語化できる状態にしておくべきである。IS NULL/IS NOT NULLによる正しい判定を書き、列 IS NOT NULL AND 価格 > 1000 のような書き分けを練習すること。複雑なORでUNKNOWNが生じる例を作り、括弧で優先を制御する要点と、件数確認の手順を要約しておくこと。「= NULL」「<> NULL」を書かない等の注意事項をチェックリスト化し、表示における代替表示という考え方だけを整理しておくべきである。
【予習】
第5回のSELECT基礎演習に備え、実行環境を整え、教材で用いるサンプルスキーマの表名 列名 データ型を一覧化して把握しておくこと。SELECT 列名 FROM 表名 の基本形、WHERE句による単純比較とAND ORの優先、ORDER BYによる昇順降順、列別名の付与といった最小限の文法を復習しておくべきである。今日学んだNULLの挙動を踏まえ、IS NULL/IS NOT NULLを含む基本的な抽出が書けるかだけを確認し、集約や結合には踏み込まないこと。課題データで数件の取得と並び替えを試し、結果と期待の対応を簡潔に説明できるよう準備しておくと演習が円滑である。

5 SELECT基礎演習(【データクエリ】【演習】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第5回は、前4回で扱った列指定・行の抽出・並べ替え・件数制限・NULLの三値論理を総合的に運用し、SELECT基本句のみで要件を満たす力を実戦的に固めることを目的とする。短問とSQL記述の往復により、題意分解、条件の括弧付けと優先順位、NULLの包含/除外、整列キー設計、実行結果の検証と誤り診断を訓練する。ここで基礎の確度を高め、次回以降の関数適用、集計・グループ化、結合・サブクエリへの橋渡しとする。安全な列明示と表別名の用法を徹底し、スキーマ変更に強いクエリ設計の姿勢を確立することを狙いとする。また、問題文を自然言語で言い換え、想定される行数や先頭行の値を事前に予測する習慣を徹底する。基礎力を確証する。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① SELECT基礎問題演習 ② SELECT基礎SQL演習 ③ SELECT複合SQL演習
細目レベル ① 本細目では、これまで学んだSELECT文の基本を、短い設問を通して確かめる演習を行う。題意の読み取りを重視し、「どの列を取り出すか」「どの行を条件で残すか」「並べ替えは必要か」「何件返すか」を段階的に判断する訓練である。比較・算術・論理演算子の適用、有効なLIKEパターンの判定、NULLが含まれる場合の真偽の扱いなど、紙上で結果を予測する力を養う。句の書き順と役割を混同しないために、問題文を自然言語で言い換え、想定される結果の行数や先頭行の値を説明できることを目標とする。誤り探し問題では、括弧の不足やAND/ORの優先順位の誤解、IS NULLの書き忘れなど、初学者が陥りやすい点を指摘できるようにする。本細目では、SELECT文の主要句の役割理解と基本的な読解・設問解決の練習までが到達目標である。
② 本細目では、基本構文に忠実なSELECT文を自力で記述する演習を行う。列の明示的な指定と列別名の付与、FROMでの対象テーブルの選択、WHEREでの単純条件(=、<>、>、<、BETWEEN、IN、LIKE、IS NULL/IS NOT NULL)の記述、ORDER BYでの昇順・降順の指定、必要に応じた件数制限の指定を確実に書けるようにする。条件は括弧でグループ化し、AND/OR/NOTの評価順を誤らない記述を徹底する。ワイルドカードの%と_の意味、数値・文字列・日付のリテラルの書き分け、別名の読みやすい命名など、可読性の高い書き方を練習する。実行後は取得列・件数・並び順を必ず確認し、意図との差異があればWHEREやORDER BYを点検する。安全のため、必要な列のみを列挙し、曖昧さを避けた表現を心掛ける。本細目では、基本句を正しい構文で用いたSELECT文を記述し、意図した結果を再現できることまでが到達目標である。
③ 本細目では、複数の基本句を組み合わせて要件を満たすSELECT文を設計・実装する演習を行う。具体的には、複数条件のAND/OR/NOTを括弧で整理しつつ、NULLの行を明示的に含める・除外する判断を加えるなど、条件表現を段階的に構築する。さらに、並べ替えの優先列とタイブレーク用の第2・第3キーの指定、昇順・降順の混在、列別名を用いた見やすい出力を意識する。必要に応じて件数制限を併用し、上位N件や特定範囲の行を取り出す設計も行う。要件の日本語から、取得列・条件・整列・件数制限に分解し、矛盾のない順序で句を記述する手順を確立する。途中確認として、中間の条件で一度実行し、追加条件が結果に与える影響を検証する姿勢を身につける。関数や集計、結合を用いずに、基本句のみで要件を満たす工夫を学ぶ。本細目では、複数の基本句を統合したSELECT文を設計し、条件の優先順位と並べ替え・件数制限を適切に組み合わせて正しい結果を得ることまでが到達目標である。
キーワード ① SELECT句 ② WHERE句 ③ ORDER BY ④ LIKE ⑤ NULL
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
本回で実施したSELECT基礎問題演習 基礎SQL演習 複合SQL演習の内容を自力で再現できるよう整理すること。設問を自然言語で言い換え 取得列 条件 並べ替え 件数制限に分解し 句の書き順に従って記述する手順を固めること。WHEREでは= <> > < BETWEEN IN LIKE IS NULLを括弧で適切に組み合わせ AND OR NOTの優先順位を誤らないこと。LIKEの%と_の意味と有効なパターンを説明できること。NULLを含む比較の三値論理を紙上で判定し IS NULLとIS NOT NULLの使い分けを確認すること。ORDER BYの昇順降順 第2第3キーの指定と混在の挙動を検証し 必要時のみ件数制限を加えること。列は必要最小限を明示し 列別名で可読性を高めること。実行後は取得列 件数 並び順 先頭行の値を検証し 差異があればWHEREやORDER BYの記述を点検すること。関数や集計 結合を使わず基本句のみで要件を満たす方針を再確認すること。
【予習】
次回はスカラー関数Ⅰの導入であるため 関数が行ごとの値に作用し単一値を返す演算要素であるという位置付けを把握しておくこと。教科書や利用DBの公式リファレンスを参照し 代表的な数値関数 文字列関数 型変換の名称と概要を俯瞰し 入力となる型と戻り値の型という観点で簡単な一覧を作成すること。使用例の細部やベンダ方言の深追いは不要である。合わせて演習スキーマの各列のデータ型を洗い出し どの列にどの種類の関数が適用可能かを予測しておくこと。SELECTの基本句の流れは不変であるため 関数を列と同様にSELECT句で指定し ASで別名を与える表記だけを事前に確認しておくこと。

6 スカラー関数Ⅰ(【データクエリ】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第6回は、スカラー関数Ⅰとして数値関数・文字列関数・型変換を扱い、ABSやROUND、SUBSTRやTRIM、CASTなどを対象とし、行単位で一値を返す関数の基本を整理し、正確な値整形と条件記述を可能にすることを目的とする。第1〜5回で確立した列・行の抽出とNULL理解を踏まえ、SELECT/WHERE/ORDER BYにおける計算・比較・表示の型整合を実践する回である。暗黙変換の不確実性を避けるためCASTを明示し、表示の正規化や結合キー生成の前処理に活用できる基礎を固める。次回の日付時刻関数、さらに集計・グループ化、結合での安定した表現へと接続する位置づけである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 数値関数 ② 文字列関数 ③ 型変換
細目レベル ① 数値関数は、数値型の列や式に対して一つの値を返す関数であり、各行ごとに独立して評価される点が特徴である。代表例として、絶対値を返すABS、符号だけを返すSIGN、端数処理のROUND(値, 桁)、切り上げのCEIL、切り捨てのFLOOR、剰余のMOD(a, b)、べき乗のPOWER(a, b)がある。例えば価格を10円単位に丸めたいときは「ROUND(価格, -1)」のように記述する。割引後価格を計算する際には、「価格 * (1 - 割引率) 」のような式と数値関数を組み合わせると、出力列に必要な形で数値を整形できる。WHERE句内で使用すれば条件を数値計算に基づいて表現でき、SELECT句内で使用すれば表示値を加工できる。引数が不適切な場合や0除算のような定義外操作を避けるため、入力範囲と関数の返り値の型を事前に把握しておくことが重要である。本細目では、代表的な数値関数の名称と用途、基本構文の理解までが到達目標である。
② 文字列関数は、文字型の列や式を加工し、一つの文字列もしくは関連する数値情報を返す関数である。代表例として、文字数を返すLENGTH、大小変換のUPPERとLOWER、結合のCONCAT、部分取り出しのSUBSTRING/ SUBSTR(文字列, 開始位置, 長さ)、前後の空白を除去するTRIM、文字の置換を行うREPLACEがある。例えば姓と名の列を結合して1つの表示名にする場合は「CONCAT(姓, ' ', 名)」のように記述する。商品コードの先頭3文字を分類として取り出すなら「SUBSTR(コード, 1, 3)」を用いる。入力データに余分なスペースが含まれる場合、比較や表示前にTRIMで整えると誤判定や見た目の不統一を防げる。関数ごとに位置の起点や長さの扱いが異なる実装差があるため、使用環境の仕様を確認しつつ基本的な役割と書式を押さえることが重要である。本細目では、主要な文字列関数の役割と基本構文の理解までが到達目標である。
③ 型変換は、値のデータ型を明示的に別の型に変える操作であり、演算や比較、表示の意図を明確にするために重要である。標準的な構文は「CAST(式 AS 型)」であり、例えば「CAST('123' AS NUMBER)」は文字列を整数に、「CAST(価格 AS VARCHAR2(10))」は数値を文字列に変換する(他にも「TO_CHAR(価格)」で数値を文字列に変換できる)。比較や四則演算では、型が合わないと暗黙の変換が行われる場合があるが、挙動が環境依存になりやすいため、必要に応じて明示的なCASTで統一するのが安全である。小数を整数に変換する際は小数部が切り捨てられるなど、変換時の丸めや桁あふれの振る舞いを理解しておくことが大切である。本細目では、明示的な型変換の必要性とCASTの基本構文の理解までが到達目標である。
キーワード ① 数値関数 ② 文字列関数 ③ CAST ④ ROUND ⑤ SUBSTR
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 第6回で扱った数値関数・文字列関数・型変換の要点を講義資料と演習結果を基に自分の言葉で整理しておくことである。数値関数ではABS SIGN ROUND CEIL FLOOR MOD POWERの名称と目的、ROUND(値, 桁)の桁指定やCEILとFLOORの差、WHERE句とSELECT句での用法を具体例付きで説明できる状態にすることである。文字列関数ではLENGTH UPPER LOWER CONCAT SUBSTR TRIM REPLACEの役割、起点位置や長さ指定の実装差、余分な空白の扱いを確認しておくことである。型変換ではCAST(式 AS 型)の構文と明示的変換の意義、暗黙変換の危険、整数化に伴う切り捨てや桁あふれの注意を要点化することである。最後に、演習で作成したSQLを見直し、不適切な引数や0除算を避ける判断基準を明確にしておくことである。
【予習】
第7回に向けて、日付・時刻型が数値や文字列と異なる独自の尺度をもつデータ型であることを理解しておくことである。特に、瞬間を表す値と期間を表す量(INTERVAL)の概念的な違いを言語化し、カレンダーの年月日と時刻の時分秒という表記がどのように保存されうるかを把握しておくことである。自分が扱うテーブル列における日付や時刻の格納形式を確認し、表示形式やロケール設定の影響がありうることを念頭に置くことである。さらに、現在時刻関数の役割が問い合わせ実行時点の時刻情報を取得する点にあることを押さえる。

7 スカラー関数Ⅱ(【データクエリ】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第7回は「スカラー関数Ⅱ」として、日付・時刻型、INTERVAL、現在時刻関数の正確な扱いを修得することを目的とする。DATE/TIMESTAMPとタイムゾーンの違い、ANSIリテラルと書式変換、INTERVALによる加減算と比較、実行時刻の取得と精度指定を整理し、暦順比較・期間計算・基準日時の安定化を実務に即して身につける。数値・文字列関数を学んだ前回から範囲抽出や集計の準備へ橋渡しを行い、後続のGROUP BY、JOIN、サブクエリ、およびテーブル定義における型選択の判断基盤を築く位置づけである。特にうるう年や月末、タイムゾーン差による境界条件を意識した条件指定とリポート期間の設計を扱い、再現可能なクエリ作成力を養う回である。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 日付・時刻型 ② INTERVAL ③ 現在時刻関数
細目レベル ① 日付・時刻型は、暦法に従う値を表現・保存するための基本的なデータ型である。DATE が「年月日+時分秒」を、TIMESTAMP が「小数秒(最大9桁)を含む日時」を表し、いずれも文字列ではなく数値的内部表現で格納されるため、比較や並べ替えは暦順で正しく機能する。リテラルは ANSI 日付/時刻リテラル を用いるのが基本で、例として DATE '2025-08-27'、TIMESTAMP '2025-08-27 14:30:00'を用いる。表示形式はセッションに依存し、文字列からの変換は TO_DATE / TO_TIMESTAMP / TO_TIMESTAMP_TZ と書式モデルで明示する。うるう年や月末といった境界も内部表現に基づき一貫して処理される。用途に即した適切な型(DATE、TIMESTAMP、タイムゾーン型)の選択は、後続の演算や抽出での誤り回避に直結する。本細目では、DATE/TIMESTAMP/タイムゾーン型の役割、ANSI リテラルの書式、および比較の基礎理解を到達目標とする。
② INTERVAL は「どれだけの長さか」を表す期間型であり、日付・時刻そのものではない。代表的に、年と月を扱う YEAR TO MONTH 系と、日から秒までを扱う DAY TO SECOND 系がある。リテラルは 「INTERVAL '3' DAY」、「INTERVAL '1-6' YEAR TO MONTH」、「INTERVAL '02:30:00' HOUR TO SECOND」 のように単位と範囲を明示して記述する。符号付きで表現でき、加減算により DATE や TIMESTAMP を前後へシフトできる。月の長さやうるう年の影響は、加減算の対象の暦値に応じて解釈が異なるため、YEAR/MONTH 系とDAY/SECOND 系の混在を避け、目的に合う系を選ぶことが肝要である。比較や並べ替えは量としての大小に基づき、秒の小数部などの精度も指定可能である。本細目では、INTERVALの基本表記、日付・時刻との加減算の基本理解までが到達目標である。
③ 現在時刻関数は、実行時点の暦値を返すスカラー関数である。代表的に SYSDATE(サーバOS時刻の DATE)、SYSTIMESTAMP(サーバOS時刻の TIMESTAMP WITH TIME ZONE)、CURRENT_DATE(セッション・タイムゾーンの DATE)、CURRENT_TIMESTAMP(セッション・タイムゾーンの TIMESTAMP WITH TIME ZONE)、および LOCALTIMESTAMP(セッション・タイムゾーンの TIMESTAMP)を用いる。小数秒の精度は CURRENT_TIMESTAMP(n) や LOCALTIMESTAMP(n) のように指定できる。同一 SQL 文の評価中は通常、一貫した現在時刻が用いられ、結果の整合性が保たれる。本細目では、主要な現在時刻関数の種類、返される値の性質、精度指定と取得タイミングの基礎理解までが到達目標である。
キーワード ① DATE ② TIMESTAMP ③ INTERVAL ④ 現在時刻関数 ⑤ タイムゾーン
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第7回で扱った日付・時刻型とINTERVALおよび現在時刻関数を整理すること。DATEは年月日と時分秒、TIMESTAMPは小数秒を含む日時であり、いずれも数値的内部表現ゆえに暦順比較が正しく機能する点を説明できるようにすること。ANSIリテラルの基本(DATE '2025-08-27'、TIMESTAMP '2025-08-27 14:30:00')を書けるか確認し、表示形式はセッション依存であるため、文字列からの変換はTO_DATE/TO_TIMESTAMP/TO_TIMESTAMP_TZと書式モデルで明示する練習を行うこと。INTERVALは量であり、YEAR TO MONTH系とDAY TO SECOND系の違い、INTERVAL '1-6' YEAR TO MONTH や INTERVAL '02:30:00' HOUR TO SECOND の表記、符号と精度を含めて記述できるようにすること。DATE/TIMESTAMPとの加減算で前後シフトを試し、月末やうるう年での挙動、系の混在を避ける理由を自分の語で要約すること。現在時刻関数のSYSDATE・SYSTIMESTAMP・CURRENT_DATE・CURRENT_TIMESTAMP・LOCALTIMESTAMPの返却型とタイムゾーンの違い、精度指定、同一SQL内での一貫性について対比表を自作して確認すること。
【予習】
第8回は数値・文字列関数および日付時刻関数の演習であるため、即時にSQLを実行できる環境を整備しておくこと。使用予定テーブルの列名とデータ型を一覧化し、どの列が数値・文字列・日付であるかを把握しておくことが望ましい。数値関数・文字列関数については第6回の代表的関数名、引数の型、戻り値の型、NULL時の振る舞いを1枚のメモに整理しておくこと。日付時刻関数については、今回学んだANSI日付リテラルとINTERVALの基本表記、主要な現在時刻関数の名称と返却型を思い出せる程度に確認するに留めること。演習時の混乱を避けるため、結果を読み取りやすい小規模のサンプル行を各データ型で準備し、基本的なSELECTと列別名の記述を再確認しておくことが有効である。

8 スカラー関数演習(【データクエリ】【演習】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第8回は、前回までに学んだ数値・文字列・日付時刻のスカラー関数を、要件読解→関数選択→SQL実装の流れで体得する演習回である。本回の目的は、仕様を関数表現へ正確に落とし込み、別名や評価順序、型・NULLの挙動を踏まえて堅牢に記述できるようにすることである。ここで培う派生列設計力は、次回以降の集計・グループ化での区分化や期間集計、結合やサブクエリの条件生成の基礎となる。単一表を対象に、数値丸めや文字列整形、月初・月末・加減算の操作を的確に書き分け、サンプルデータで期待値を先に定義して検証する姿勢を徹底する。これにより、以後のWHERE/HAVINGや派生キー設計の誤りを未然に防ぐ素地を固める。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 数値・文字列関数問題演習 ② 数値・文字列関数SQL演習 ③ 日付時刻関数問題演習 ④ 日付時刻関数SQL演習
細目レベル ① 数値・文字列関数問題演習は、与えられた要件を読み取り、適切な関数を選び組み合わせる思考訓練である。数値では ABS, ROUND(桁指定), CEIL/FLOOR, MOD, POWER などの基本を前提とし、「価格を百円単位に四捨五入」「負の値を絶対値に」などを言い換えて関数に落とし込む。文字列では LENGTH、SUBSTR、CONCAT、TRIM、UPPER/LOWER、REPLACE等を想起し、「姓と名の結合」「先頭と末尾の空白除去」「商品コードの一部抽出」などを解く。関数は行ごとに一つの値を返すという性質を常に意識し、複雑な要件は段階的に分解して考える。本細目では、数値関数・文字列関数を用いた要件の読み取りと適切な関数選択・組合せの判断までが到達目標である。
② 数値・文字列関数SQL演習では、単一テーブルを対象に、SELECT句で派生列を作る実装力を高める。構文の要点は 「SELECT 列, 関数(列, 定数) AS 別名 FROM テーブル;」である。例として、「ROUND(価格, 0) AS 丸め価格」、「SUBSTR(商品コード, 1, 3) AS 区分」のように記述する。別名は読み手に意味が伝わる短い名称とし、計算の順序は括弧で明確にする。評価は行ごとに独立して行われるため、サンプル行で結果が期待と一致するかを確認し、不要な関数適用を避けて簡潔に書く練習を重ねる。本細目では、基本的なSELECT文に数値・文字列関数を正しく組み込み、適切な別名を付して意図した結果を得る記述までが到達目標である。
③ 日付時刻関数問題演習は、日付・時刻に関する要件を関数で表現するための読解の訓練である。典型例として、「生年月日から満年齢を求める」「取引日の翌月末を求める」「時刻から分や秒を切り落として時単位にそろえる」「年・月・日・曜日の抽出」「n日後・nヶ月後の計算」などがある。EXTRACT/TRUNC(日付, '単位')/ADD_MONTHS/LAST_DAY などの代表的機能を想起し、どの順で適用すべきかを紙上で手続き化する。月末をまたぐ加算やうるう日の扱い、日付型と時刻型の違いによる結果の粒度に注意し、簡単なカレンダー例で期待値を先に作ってから解法を検討する習慣を身に付ける。本細目では、日付・時刻要件の正確な読み取りまでが到達目標である。
④ 日付時刻関数SQL演習では、SELECT文に日付・時刻関数を組み込み、行ごとに意味のある派生日付を生成する実装を行う。構文の焦点は、「SELECT EXTRACT(YEAR FROM 受注日) AS 年, TRUNC(受注日, 'MM') AS 月初, 受注日 + INTERVAL '7' DAY AS 一週間後 FROM テーブル;」のように、取り出し・切り捨て・加算を明確に書く点にある。現在日時を起点とする計算や、月末取得(例: LAST_DAY(受注日))も扱い、結果列に意味のある別名を与える。日付とタイムスタンプの演算結果の型と粒度を確認し、例外的な境界(月替わり、日跨ぎ)での値を小さなデータで検証する。本細目では、単一テーブルに対するSELECTで日付時刻関数を正しく適用し、意図した派生列を得る記述までが到達目標である。
キーワード ① 数値関数 ② 文字列関数 ③ 日付時刻関数
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第8回の復習として、数値・文字列関数の問題読解とSQL実装、日付時刻関数の問題読解とSQL実装を統合的に整理すること。要件文を関数に写像する手順を文章化し、数値では ABS ROUND(桁指定) CEIL FLOOR MOD POWER の適用条件と組合せ、文字列では LENGTH SUBSTR CONCAT TRIM UPPER LOWER REPLACE の役割と順序を明確にすること。SELECT 句で派生列を作り、括弧で計算順序を示し、意味の通る別名を付ける練習を再確認すること。日付時刻では EXTRACT TRUNC(単位) ADD_MONTHS LAST_DAY INTERVAL の使い分けを、満年齢計算や翌月末算出など典型要件で紙上検証し、うるう日や月跨ぎの境界値を小さなサンプルで確かめること。関数は行ごとに一値を返すという性質と、不要な入れ子を避け簡潔に書く指針を自分のチェックリストとして整備しておくべきである。
【予習】
第9回では集約関数を扱うため、全行を対象に一つの値を返す集計という概念に慣れておくことが望ましい。SUM AVG MIN MAX COUNT などの名称と返り値の直感的な意味を整理し、COUNT(*) と COUNT(列) の違い、および COUNT(DISTINCT 列) の効果を言葉で説明できるよう準備すること。NULL の行は多くの集約で無視されるが COUNT(*) は行数を数える、という基本則を先に思い出しておくと理解が速い。学内サンプルの数値列やID列を特定し、全表集計のみ(GROUP BY には踏み込まない)でどの列が集計可能かをメモしておくこと。必要に応じて、集約結果に丸めを後段で適用する書き方を確認して、まずは全行集計とDISTINCT集計の基本を押さえる。

9 集約関数(【データクエリ】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第9回は「集約関数」を扱い、条件で絞り込まれた行集合から代表値を導く技能を確立することを目的とする。COUNT、SUM、AVG、MIN、MAXの意味と書式、全行集計とDISTINCT集計の違い、0件時の戻り値を含むNULLの扱い、COUNT(*)とCOUNT(列)の差異、WHERE適用順を整理する。スカラー関数までの学習を単一結果の獲得へ接続し、次回のGROUP BY・HAVINGによるグループ集計へ円滑に移行するための橋渡し回である。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 集約関数 ② 全行集計とDISTINCT集計 ③ NULLと集約の関係
細目レベル ① 集約関数は、複数行の値を一つの代表値にまとめるための関数である。代表的なものに COUNT, SUM, AVG, MIN, MAX がある。COUNT(*) は行数を数え、COUNT(列) はその列の非NULLの値だけを数える。SUM と AVG は数値列の合計と平均、MIN と MAX は最小値と最大値を返す。基本構文は SELECT 集約関数(列名) FROM テーブル名; の形であり、WHERE で条件に合う行を先に絞り、その集合に対して集約が実行される。グループ分けを行わない限り、結果は単一行となる。集約関数はスカラー関数と異なり、行ごとに値を変換するのではなく、行集合をまとめる点に特徴がある。本細目では、代表的な集約関数の意味と基本構文、および全行に対する単一結果を得る考え方の理解までが到達目標である。
② 全行集計とは、条件で絞り込んだ後の全行を一つの集合としてまとめ、単一の結果を返す集約のことである。例えば商品表に対して 「SELECT COUNT(*) FROM 商品;」 は行数を、「SELECT SUM(価格) FROM 商品;」は全商品の価格合計を返す。ここに DISTINCT を用いると、重複する値を一度だけ数える・合計する・平均する振る舞いに切り替えられる。書き方は COUNT(DISTINCT 列名)、SUM(DISTINCT 列名)、AVG(DISTINCT 列名) のように集約関数の丸括弧内で指定する。例えば同じ価格が多数ある場合、SUM(DISTINCT 価格) は重複価格を1回だけ合計するため、通常の合計と値が異なる。COUNT(DISTINCT 列名) は異なる値の種類数を求めるのに有効である。本細目では、全行集計の考え方と DISTINCT を用いた集計の書き方と効果の理解までが到達目標である。
③ NULLと集約の関係は結果解釈に直結する重要項目である。原則として、SUM・AVG・MIN・MAX は NULL を計算対象から除外する。したがって値が [10, NULL, 20] のとき、SUM は 30、AVG は (10+20)/2 で 15 となる。COUNT は二つの形で振る舞いが異なり、COUNT(*) は行数そのものを数えるのに対し、COUNT(列名) は非NULLの件数だけを数える。入力行が0件の場合、COUNT は 0 を返すが、SUM・AVG・MIN・MAX は NULL を返す点にも注意が必要である。NULL は 0 や空文字と同じではないため、集計結果が 0 と NULL で持つ意味は異なる。分析では「欠損が無視されている」ことを理解して解釈することが重要である。本細目では、各集約関数におけるNULLの無視規則と、0件時の戻り値の違いの理解までが到達目標である。
キーワード ① 集約関数 ② COUNT ③ DISTINCT ④ NULL ⑤ 全行集計
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第9回の内容である集約関数の基本を自分の言葉で整理しておくこと。COUNT SUM AVG MIN MAX の意味と戻り値の型、SELECT 集約関数(列名) FROM テーブル名 の基本形、WHERE による絞り込みが先に適用され、その結果集合に対して集約が一度だけ実行されるためグループ分けを行わなければ結果は単一行になる点を確認することが重要である。COUNT(*) と COUNT(列名) の違い(行数全体と非NULL件数)を具体例で検証し、DISTINCT を集約関数の括弧内に指定した場合の効果(重複値の排除による件数・合計・平均の変化)を、重複データを含む小規模テーブルで比較して理解しておくこと。さらに、NULL は SUM AVG MIN MAX では無視されること、COUNT は 0件時に0を返す一方で他の集約は NULL を返すこと、0 と NULL の意味が異なることを、[10 NULL 20] や入力0件の例で確かめ、結果解釈の注意点として言語化しておくことが望ましい。
【予習】
次回はグループ化を扱うため、全体集計とグループ別集計の違いをイメージできる準備をしておくことが有効である。手元のサンプル表から分類に使えそうな列(例 商品カテゴリ 店舗 部門 年月など)を挙げ、各列でまとめたい指標(件数 売上 平均値 最小値 最大値)を箇条書きにし、どの粒度で結果が複数行になるのかを想像しておくとよい。構文の入口として SELECT 集約関数 FROM 表 GROUP BY 列名 の外形だけを確認し、WHERE は行に対する前処理の絞り込みであり、後段でグループに対する条件指定(HAVING)が登場する見通しであることを把握しておくにとどめること。非集約列の扱いが新しい論点になるため、どの列を結果に並べたいかを事前にリスト化し、実データの値の種類数(カーディナリティ)を眺めてグループ数の見当をつけておくと、次回の演習にスムーズに入れる。

10 グループ化(【データクエリ】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第10回は、集約関数を学んだ第9回を受け、実務で必須のグループ化の正しい適用を確立する回である。今回の授業の目的は、GROUP BYの列選択ルールと評価順序を理解し、WHEREとHAVINGの役割を厳密に使い分け、式・関数・別名の扱いによる落とし穴を回避して、意味のある集計結果を再現性高く得る力を養うことである。部門別・月別などの粒度設計と、非決定的関数を避ける判断基準も整理する。ここでの到達は、第11回の演習と第12回以降の結合・サブクエリでの多表集計の基盤となる。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① GROUP BYの基本とルール ② HAVING ③ グループ化列と関数の注意点
細目レベル ① GROUP BYは、同じ値を持つ行をひとまとまりのグループに分け、グループごとに集約結果を得るための句である。構文は「SELECT グループ化列, 集約関数 FROM 表 GROUP BY グループ化列」であり、例えば「部門別の人数」を求めるなら「SELECT 部門, COUNT(*) FROM 社員 GROUP BY 部門」である。重要なルールは、SELECT句に書ける非集約の項目は、GROUP BYに指定した列(または式)に限られることである。従って、集約関数で包まれていない列を勝手に出力することはできない。また、同じ式でグループ化したなら、SELECT側も同じ式で書くことが必要である。WHEREによる行の絞り込みはグループ化より先に適用されるが、集約結果に基づく絞り込みは別途扱うのが原則である。本細目では、GROUP BYの目的、基本構文、列選択のルールと評価順序の概要の理解までが到達目標である。
② HAVINGは、GROUP BYで作られた各グループに対して条件を評価し、条件を満たすグループだけを結果に残すための句である。典型的には「平均点が60点以上のクラスだけ」「購入回数が3回以上の顧客だけ」といった、集約関数の結果に基づく絞り込みを行う。構文は「SELECT グループ化列, 集約 FROM 表 GROUP BY グループ化列 HAVING 条件」である。HAVINGで参照できるのは、グループ化列(またはその式)と集約関数の結果であり、グループ化していない素の列は使えない。集約を必要としない行レベルの条件はWHEREに書くのが原則であり、WHEREに集約関数を書くことはできない。本細目では、HAVINGの役割、基本構文、WHEREとの使い分けの理解までが到達目標である。
③ グループ化に式や関数を用いると、評価は各行で先に実行され、その結果の値でグループが分けられる点に注意が必要である。例えば日付から月を取り出して集計するなら「EXTRACT(MONTH FROM 受注日)」でGROUP BYし、SELECT側でも同じ式を用いる必要である。関数で値を変形すればグループの単位も変わるため、文字列の大文字化や丸め関数の有無で結果が変わり得る点に留意すべきである。また、非決定的な関数(乱数、現在時刻など)をグループ化列に使うと、行ごとに値が変わり意図した集計にならないため避けるべきである。SELECTの列別名は論理的な実行順序の関係でGROUP BYでは参照できないのが原則であり、GROUP BYには列名か式そのものを書くべきである。さらに、SELECT句に現れる非集約の式はすべてGROUP BYに含めるという基本ルールを厳守する必要がある。本細目では、グループ化列に対する関数適用の影響、評価順序、別名の扱いと基本ルールの厳守の理解までが到達目標である。
キーワード ① GROUP BY ② HAVING ③ 集約関数 ④ グループ化列 ⑤ 評価順序
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第10回で扱ったGROUP BYの基本とルール、HAVING、グループ化列と関数の注意点を講義資料と自分の実行結果をもとに整理しておくことである。SELECT句に書ける非集約項目はGROUP BY指定項目(または同一式)に限るという原則を、自作例で検証し、違反時にエラーとなる事実を確認しておくことである。WHERE→GROUP BY→HAVINGの評価順序を明確に言語化し、行レベル条件はWHERE、集約後の条件はHAVINGであると説明できる状態にしておくことである。EXTRACTなどの式でグループ化する際はSELECT側も同じ式で書く必要がある点、列別名はGROUP BYで参照できない点、非決定的関数をグループ化列に用いるべきでない点も具体例と併せて一枚に要約しておくことである。最後に「部門別人数」「月別売上」を正しい構文で書けるかを再確認しておくことである。
【予習】
第11回は集計関数およびグループ化の演習であるため、基本構文を素早く書ける準備を整えておくことである。SELECT グループ化列 集約関数 FROM 表 GROUP BY グループ化列 の骨格を空書きできるようにし、COUNT SUM AVG MIN MAXの用途を思い出しておくことである。教材で扱う想定テーブルの列名と型を予め確認し、どの列が数量 金額 日付 部門に相当するかを把握しておくことである。行レベルの絞り込みはWHERE 集約後の絞り込みはHAVINGという書き分けを短文で説明できるよう準備しておくと、演習開始直後から手を動かせる。演習環境の接続確認と、基本的な実行結果の読み取り方(行数と列見出しの確認)も事前に点検しておくことである。

11 集計・グループ化演習(【データクエリ】【演習】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第11回は、前回までに学んだ集約関数とGROUP BY/HAVINGの規則を、設問解決型の演習で実装力に定着させる回である。目的は、要件文を粒度に翻訳し、WHEREとHAVINGの役割、COUNTの差異やDISTINCT・NULLの挙動を踏まえて、正確な集計SQLを書き上げる力を養うことである。単一表で確実に指標を算出できることを次回以降の結合・サブクエリへの橋渡しとする位置づけである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 集約関数問題演習 ② 集約関数SQL演習 ③ グループ化問題演習 ④ グループ化SQL演習
細目レベル ① 本細目では、テーブル全体に対して用いる集計関数の意味と使い分けを、設問形式で確かめる。主に COUNT、SUM、AVG、MIN、MAX を対象とし、COUNT(*) と COUNT(列名) の差異、DISTINCT を伴う集計の読み方、NULL が集計から除外される性質を丁寧に確認する。「全商品の平均価格」「在庫数の合計」「最古の登録日」など、要件を関数選択に結びつける練習を行う。WHERE で対象行を先に絞ること、結果の桁や単位の解釈を明確にすること、期待値の見当を小さなサンプルで検算することが正答への近道である。問題文の指示語(全体、対象のみ、一意な件数など)を見逃さず、適切な関数とオプションを選ぶ判断力を養成する。本細目では、主要な集計関数の意味と違いを理解し、設問に応じて全行に対する正しい集計結果を求められるまでが到達目標である。
② 本細目では、集約関数を用いたSQL文を自分で書き上げる練習を行う。構文は基本的に「SELECT 集約関数 [AS 別名], ... FROM テーブル名 WHERE 条件;」の形である。複数の集約を同時に出力し、読みやすい別名を付けること、ORDER BY で集計結果を並べ替えること、DISTINCT を集約関数内に正しく指定することを重点的に扱う。NULL がある列の AVG や SUM の結果をどう解釈するか、COUNT(*) と COUNT(列名) の差を結果で確認する姿勢も重要である。サンプルデータで段階的に WHERE を調整し、結果の件数や値の変化を追うことで、式の正しさを検証する習慣を身につける。不要な列をSELECTに混在させないこと、別名の表記ゆれを避けることにも留意する。本細目では、単一テーブルに対して集約関数を用いるSQLを正確に記述し、意図した列名や並びで結果を得られるまでが到達目標である。
③ 本細目では、グループ化の考え方を用いた設問に答える練習を行う。部門ごとの人数、商品カテゴリ別の平均価格、年月×店舗の売上合計など、粒度の違いを意識して GROUP BY の単位を見極める。SELECT 句には、グループ化した列か集約関数の結果しか書けないというルールを再確認し、違反しやすい例を避ける力を鍛える。WHERE はグループ化前の行を絞り、HAVING は集計後のグループを条件でふるい分けるという役割の違いを、設問文の「〜以上のグループのみ」といった表現から読み解く練習も含む。NULL を含むグループが一つにまとまる点や、複数列でのグループ化順の解釈にも注意する。本細目では、GROUP BYとHAVINGの適用対象を正しく判断し、要求通りの粒度でグループ別指標を算出できるまでが到達目標である。
④ 本細目では、グループ化を伴うSQLの正しい書き方を身につける。基本形は 「SELECT グループ化列, 集約関数 [AS 別名] FROM テーブル名 WHERE 条件 GROUP BY グループ化列 HAVING 集約条件 ORDER BY 並び順;」である。GROUP BY に列や式を正確に列挙し、SELECT に集約以外の列を安易に追加しないこと、HAVING には集約関数を用いた条件を書くこと、ORDER BY では別名や集約結果で並べることを徹底する。複数の集約を同時に算出し、必要に応じて複数列でグループ化する練習を通じて、構文の順序と評価タイミングを体感的に理解する。小さなデータで中間結果を確認し、グループ数や合計値の一致を検証する姿勢も重視する。本細目では、GROUP BYとHAVINGを用いたグループ別集計SQLを誤りなく記述できるまでが到達目標である。
キーワード ① 集約関数 ② GROUP BY ③ HAVING ④ COUNT ⑤ DISTINCT
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第11回の演習内容を自分の言葉で整理すること。COUNT SUM AVG MIN MAX の意味と使い分け、COUNT(*) と COUNT(列名) の差、DISTINCT 指定の効果、NULL が集計から除外される性質を説明できるようにしておくことが重要である。要件文の「全体」「一意」「対象のみ」を手掛かりに関数選択を行い、WHERE で対象行を先に絞る手順を再確認すること。単一テーブルに対する集約SQLを AS による読みやすい別名付きで正確に記述し、不要な列を混在させないこと。GROUP BY と HAVING の適用対象と役割を区別し、SELECT 句にはグループ化列か集約結果のみを書くルールを徹底すること。小さなサンプルで件数や合計を検算し、ORDER BY による並べ替え、桁や単位の解釈の一貫性を点検すること。NULL を含むグループが一つにまとまる点や、複数列でのグループ化順の意味も確認しておくべきである。
【予習】
第12回の内部結合に備え、リレーションと結合の基本概念を入口レベルで整理しておくこと。テーブル間の関連の捉え方、主キーと外部キーという用語、典型的な一対多の対応関係を図や具体例で言語化しておくことが望ましい。結合とは、関連する列の同じ値に基づき行を横方向に結び付けて一つの結果集合として扱う操作であるという直観を持つこと。演習で扱う想定スキーマの列名とデータ型を確認し、テーブル間で同名列があるかを洗い出すこと。曖昧さ回避のための別名と修飾名(テーブル名.列名)の読み方と書き方を確認し、同名列が存在する場合に修飾が必須になる理由を説明できるようにしておくこと。

12 内部結合(【複合データクエリ】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第12回は、複数表を横断して意味のある事実を結び付けるための「内部結合」を導入し、リレーションの対応付けの考え方とINNER JOINの基本構文、ONによる結合条件の表現、結合結果の性質を理解することを目的とする。列名の衝突や参照の曖昧さを避けるため、テーブル別名と修飾名の用法を徹底し、読みやすく誤りに強いクエリを書く基礎を固めることである。第1~11回で整えたSELECT/WHERE/集計の知識を複合表へ拡張し、次回の等価・非等価結合、外部結合、多段結合への橋渡しとする位置づけである。結合順序の論理的同値も確認し、最小限の列を明確に指定する記述を定着させる狙いである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① リレーションと結合 ② 内部結合の基本 ③ 別名と修飾名での曖昧さ回避
細目レベル ① リレーショナルデータベースでは、テーブルは「リレーション」と呼ばれ、行はタプル、列は属性を表す。それぞれのリレーションは一種類の事実を記録するが、多くの問いは複数の事実の関係づけによって初めて答えられる。結合とは、その関係づけに用いる共通の意味をもつ列を手掛かりに、複数のリレーションの行同士を対応付け、新しい結果のリレーションを作る操作である。結合は、二つのリレーションの全組み合わせのうち、指定した対応関係を満たす行の組だけを残す操作と理解できる。例えば「顧客」と「注文」を、顧客を識別する列で突き合わせれば、どの顧客がどの注文をしたかという複合的な情報に到達できる。結合により、単独のテーブルでは到達できない属性の同時参照が可能となり、意味のある問い合わせを実現できる。本回では、関連する行を突き合わせて一つの結果関係を作るという基本的な発想を押さえることが重要である。本細目では、リレーションの概念と結合の目的・効果の理解までが到達目標である。
② 内部結合は、二つ以上のテーブルから、結合条件を満たす行同士だけを組み合わせて結果を作る結合である。最も基本的な形は、共有する意味をもつ列の等価比較を条件にする等価結合であり、構文は「SELECT 列 FROM 表A INNER JOIN 表B ON 表A.列 = 表B.列」のように書く。ONの右辺には行同士を対応付けるための条件を記述し、条件が真になる組だけが結果に現れる。内部結合では、どちらか一方にしか存在しない行は結果から除外されるため、対応が存在するレコードのみに焦点を当てた取得ができる。複数テーブルを連鎖的に内部結合することも可能であり、同じ条件であれば結合順序が変わっても論理的には同じ結果になる点を理解しておくとよい。内部結合は、既に学んだSELECTやWHEREと組み合わせて、必要最小限のデータを正確に取り出す基礎である。本細目では、INNER JOINの役割と基本構文、結果の性質の理解までが到達目標である。
③ 複数テーブルを結合すると、同名の列が複数現れたり、どのテーブルの列を指すかが曖昧になることがある。この曖昧さを避ける基本は、列を常に修飾名(テーブル名.列名)で指定することである。しかし実用上はテーブル名が長い場合が多いため、FROM句でテーブルに別名を与え、別名.列名の形で短く明確に記述するのが標準的である。例えば「FROM 商品 AS p INNER JOIN 注文 AS o ON p.id = o.product_id」とすれば、SELECT句でも p.name, o.id のように衝突なく列を参照できる。また、結果に同名の列が含まれる場合は、出力側の列別名を付けて見分けやすくするのが有効である。別名と修飾名の活用は、読みやすさと正確さを両立し、誤参照や実行エラーを防ぐ最低限の作法である。本細目では、テーブル別名と修飾名の書き方と、その曖昧さ解消の効果の理解までが到達目標である。
キーワード ① リレーション ② 内部結合 ③ INNER JOIN ④ 等価結合 ⑤ ON
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第12回の復習として、リレーションの概念(表=リレーション、行=タプル、列=属性)と、複数の事実を結び付けて新たな結果リレーションを得るという結合の目的を自分の言葉で説明できるように整理すること。また、内部結合の基本構文と性質を明確にすること。典型形は SELECT 列 FROM 表A INNER JOIN 表B ON 表A.列 = 表B.列 であり、ON句の条件が真となる組のみが結果に残り、片方にしかない行は除外される点を言語化しておくこと。さらに、多段の内部結合でも論理結果は条件が同じなら順序に依存しにくいことを確認すること。加えて、曖昧さ回避として修飾名(表.列)を常に用いる練習を行い、長い表名には別名を付けて p.name や o.id のように簡潔かつ正確に参照する書き方を再現すること。結果に同名列が出る場合の列別名の付与も実例付きで書けるようにまとめること。
【予習】
第13回に向けて、等価結合と非等価結合の入り口を押さえる準備を行うこと。まず、現在身につけた内部結合のON句の記述を前提に、同名列があるテーブル間でUSING句が使われる場面があることを仕様レベルで把握しておくこと(詳細な比較や例外事項の深掘りは不要である)。次に、非等価・範囲結合に備え、これまで学んだ比較演算子(= <> < > <= >=)や BETWEEN の意味を復習し、結合条件にも適用可能であることを意識化しておくこと。さらに、複合キーでのJOINの予見として、演習で扱う想定スキーマから「どの列の組が同じ意味を指すか」を列挙し、データ型と値域が対応しているかを確認しておくこと。最後に、ONとUSINGの文法的な基本形と、対象テーブルの列名一覧を事前に整理し、当日はそれを基に等価結合と非等価結合の書き分けにスムーズに入れるよう準備すること。

13 等価結合と非等価結合(【複合データクエリ】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第12回で学んだ内部結合の基礎を土台に、本回はONとUSINGの使い分け、非等価・範囲結合、複合キーでのJOINを体系化し、結合条件の表現力と正確性を高めることを目的とする。USINGは同名列の等価結合、ONは列名相違や複合・範囲条件に用いるという判断軸を確立する。区間境界の設計と重複・漏れの検証、複合キーの全列一致の徹底を通じて誤結合を防ぎ、外部結合や多段結合へ接続する位置づけである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① ONとUSINGの使い分け ② 非等価・範囲結合 ③ 複合キーでのJOIN
細目レベル ① JOINにおける条件指定にはONとUSINGがある。USINGは、結合する列名が両テーブルで同一で、かつ等価結合で書けるときに用いる記法であり、記述が簡潔になり、結果ではその結合列が一つの列として出力される利点がある。一方、USINGは同名列以外を条件にできず、等価以外の比較や関数を含む条件は表現できない。ONは、列名が異なる場合や複数列を組み合わせる場合など、柔軟に条件を書け、必要に応じて等価結合を超える条件も指定できる。どちらも「どの行とどの行を結びつけるか」を明確に書く点は同じであり、同名の単純な等価結合ならUSING、そうでなければONを選ぶのが読みやすさの基準である。本細目では、USINGとONの条件記述の違いと選択基準の理解までが到達目標である。
② 非等価・範囲結合とは、二つの表を等号以外の条件で結びつける結合である。典型例は、スコアに対して評価ランク表の下限・上限を用いて結合する場合や、取引日が料金の適用期間(開始日〜終了日)に入っている行を結びつける場合である。条件は <, <=, >, >=, BETWEEN などの比較を用いて ON 句に記述する。範囲の端点が含まれるのか(以上/より大きい)を明確にし、重なり合う区間が存在すると同じ行が複数の相手に結びついて重複が発生する点に注意する。また、どの値も必ずどれかの区間に入るとは限らないため、結合結果に漏れがないか確認する習慣が重要である。この種の結合はUSINGでは書けず、ONで表現するのが基本である。本細目では、非等価・範囲条件によるJOINの記述と境界設計上の注意点の理解までが到達目標である。
③ 複合キーでのJOINとは、二つ以上の列の組を鍵として、全てが一致する行同士を結びつける等価結合である。例えば(注文ID, 明細番号)の組や(国コード, 顧客番号)の組などが該当し、一部の列だけで結合すると誤った多対多の対応が生じうる。ON 句を用いる場合は 列A=列A AND 列B=列B のように全ての対応列をANDで連結して記述する。両表で列名が同じなら、USING(列A, 列B, ...) と列名を並べて簡潔に書け、結果ではこれらの列はそれぞれ一つにまとめられる。列の順序は論理的な意味に影響しないが、読み手に意図が伝わる順に並べると理解しやすい。複合キーの全列が一致して初めて同一レコードとみなす、という発想を徹底することが正確な結合に直結するのである。本細目では、複合キーを用いたJOINの正しい書き方と誤結合防止の要点の理解までが到達目標である。
キーワード ① ON句 ② USING句 ③ 非等価結合 ④ 範囲結合 ⑤ 複合キー
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
等価結合と非等価結合について、ONとUSINGの使い分けを自分の言葉で整理すること。USINGは両表で同名かつ等価結合の場合にのみ用い、結果では結合列が一列に統合される点、非等価条件や異名列には使えない点を明記するのである。ONは異名列や複数列、< や >、BETWEEN を含む条件を柔軟に表現できることを具体例で示すのである。非等価・範囲結合では、端点を含むか否かの定義、重複区間による多重マッチ、どの区間にも入らない値の漏れという観点を点検し、評価ランク表や適用期間の例をON句で正しく書けるように確認するのである。複合キーでのJOINでは、全対応列をANDで結ぶこと、同名列ならUSING(列A, 列B, …)で簡潔に書けること、部分一致で結合した誤りの増殖例を作って影響を説明できるようにしておくのである。
【予習】
次回の外部結合に備え、内部結合との違いを言語化しておくこと。片側の表の行を残し、相手が存在しないときに不足側にNULLが入るという基本像を押さえるのである。LEFT RIGHT FULLの語を確認し、どちら側を残すのかを簡単な図で整理するのである。さらに、結合そのものを規定する条件はONに、結果の絞り込みはWHEREに書くという役割分担を予習し、同じ条件をONとWHEREに置いた場合の挙動の違いをNULLの発生を手掛かりに予想しておくのである。小規模な二表のサンプルを用意し、内部結合結果との比較観点をまとめておく。

14 外部結合(【複合データクエリ】【応用】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第14回では「外部結合」を扱い、内部結合(第12–13回)に加えて行保持の概念とNULLの伝播を組み込むことを目的とする。LEFT/RIGHTの保持性を理解し、外部結合で生じるNULLの意味とIS NULL/COALESCE等の扱いを確認する。加えて、ONとWHEREの責務分離と条件配置の指針を体得し、保持性を損なわない記述を確立する。欠損を含む網羅的一覧や任意関係の把握、監査系集計に耐える設計力を養い、次回の多段結合・以降のサブクエリ比較へ接続する位置づけである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 外部結合の基本 ② 外部結合とNULL ③ WHEREとJOIN条件の書き分け
細目レベル ① 外部結合は、片側の表に行が存在すれば、相手側に対応行がなくても結果に残す結合である。典型は LEFT OUTER JOIN であり、左側の表を必ず保持し、右側に一致行がない場合は右側の列がNULLで埋められる。RIGHT OUTER JOINはその逆のものとなる。構文は「FROM A LEFT OUTER JOIN B ON A.key = B.key」のように書き、OUTERは省略可能な製品も多い。外部結合は「すべての顧客と、その顧客の注文があれば併せて示す」といった網羅的な一覧に有効である。結合条件はON(またはUSING)で指定し、保持側(LEFTなら左表)を意識して設計することが重要である。本細目では、外部結合の概念、LEFT/RIGHTの役割、基本構文と保持側の考え方の理解までが到達目標である。
② 外部結合では、一致しない側の列がNULLで補われる点が本質である。例えば顧客を左、注文を右にしたLEFT JOINで、注文のない顧客行は注文側のすべての列がNULLになる。このNULLは「不明」や「値なし」を意味し、比較演算では真でも偽でもない結果(UNKNOWN)になり得る。そのため、NULLを検出したいときは = や <> ではなく IS NULL/IS NOT NULL を用いる必要がある。表示目的で空文字や0に置き換えたい場合はCOALESCEなどで明示的に代替値を与える設計が安全である。外部結合の結果に現れるNULLは「結合相手が見つからなかった」という事実の表現であることを常に念頭に置くべきである。本細目では、外部結合で発生するNULLの意味と振る舞い、IS NULL等による基本的な扱い方の理解までが到達目標である。
③ JOINのON句は「どの行同士を結び付けるか」を決め、WHERE句は「結合後にどの行を残すか」を絞り込む役割である。LEFT JOINで右表に対する追加条件をWHEREに書くと、NULLで補われた行まで除外され、内側結合のような結果になる落とし穴がある。例えば「有効な注文のみ結び付けつつ、注文のない顧客も出したい」場合は 「ON c.id = o.cust_id AND o.status = '有効'」とONに書くのが正しい。左表(保持側)に対する条件はWHEREに置いても保持性は失われないが、右表列に対する条件をWHEREに書く場合は「o.status IS NULL OR o.status = '有効'」のようにNULLを考慮する必要がある。以上を踏まえ、条件配置は意図する保持性に直結するため、ONとWHEREを使い分けることが重要である。本細目では、ONでの結合条件とWHEREでの行抽出条件の役割の違いを理解し、LEFT JOINでの条件配置の基本指針を説明できることまでが到達目標である。
キーワード ① 外部結合 ② LEFT JOIN ③ RIGFT JOIN ④ ON ⑤ WHERE
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第14回では「外部結合の基本」「外部結合とNULL」「WHEREとJOIN条件の書き分け」を扱った。LEFT OUTER JOINは左表の行を保持し、右表に一致がない場合は右側列がNULLで補われる点を、RIGHTとの対比で説明できるよう整理しておくこと。構文の骨格と保持側の意識を自分の言葉でまとめ、例示できることが望ましい。外部結合で生じるNULLは値なしの表現であり、比較ではUNKNOWNになり得るため、検出にはIS NULLやIS NOT NULLを用いること、表示置換はCOALESCE等で明示的に行うことを確認すること。さらに、ON句は結び付け条件、WHERE句は結合後の行抽出という役割差を再確認し、LEFT JOINで右表条件をWHEREに書くと保持性が失われ内側結合化する落とし穴を、ONに条件を移すかNULLを許容する条件で回避する例を自作して再現しておくこと。
【予習】
第15回の「結合の応用」に備え、入口として自己結合と多段結合およびCROSS JOINの基本的な見取り図を用意しておくこと。まず、同一表内の親子関係や前後行の参照など、自己結合で表現し得る場面を実データから拾い、表別名と列修飾を厳密に記述する練習を行うとよい。次に、二表以上を段階的に結ぶ際の結合順と保持側の考え方を言語化し、どの順でJOINを書くかを紙上で設計する準備をしておくこと。CROSS JOINは直積であるという素朴な理解にとどめ、意図しない直積を避ける心構えを確認すること。演習で用いるスキーマの主キーと外部キー、列名、別名規約を事前に再確認し、図示できるようにしておくと、自己結合や多段結合の設計にスムーズに入れる。

15 結合の応用(【複合データクエリ】【応用】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第15回は「結合の応用」として、自己結合、多段結合、CROSS JOINと派生表を統合的に扱い、複雑なスキーマから意図した粒度の結果を安全に導く設計力を養うことを目的とする。多対多の中間表経由の選定や結果の重複抑制、直積のリスク管理、行の粒度の定義を明確化する。第12〜14回で学んだ内部・外部結合の基礎を前提に、別名とON条件の設計、派生表による前処理を体系化し、次回の結合演習およびサブクエリ以降の設計へ橋渡しを行う位置づけである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 自己結合のパターン ② 多段結合の設計 ③ CROSS JOINと派生表
細目レベル ① 自己結合は、同じテーブルを別名で二度以上参照して相互に結び付ける手法である。行同士を自分自身に照らして比較したり、同一テーブル内の親子関係を取り出すのに用いる。代表例は「従業員と上司」であり、従業員表を E、同じ表を M として E.manager_id = M.employee_id のように結ぶことで、従業員行に対応する上司行を取得できる。また、同一顧客の「現レコードと前レコード」を突き合わせる比較や、同じ値を持つ重複データの検出では、値が等しいが主キーが異なる行を対にする条件を設計する。自己結合では必ず別名を付け、列は修飾名で明示し、必要に応じて「同一行を結ばない」ための条件(例: 左右の主キーが異なる)を加える。条件の書き方次第で結果の件数が大きく変わるため、結合の意図(対応付け、比較、検出)を先に明確化することが要点である。本細目では、自己結合の目的、別名の使い方、代表的なON条件の読み書きの理解までが到達目標である。
② 多段結合は三つ以上のテーブルを段階的に結ぶ設計であり、結合の経路と順序を意図的に決めることが核心である。まず基点となるテーブルを選び、そこから必要な情報へ到達する外部キーの経路を列挙する。例えば「顧客→注文→注文明細→商品」のように、一対多や多対一の関係を各段で確認し、ON句で鍵列の対応を明確に記す。関係が多対多であれば中間表を経由する設計とし、各段で列の曖昧さを避けるために別名と修飾名を徹底する。不要な重複や想定外の組合せを生まないため、各段に必須の結合条件があるかを点検し、条件漏れによる直積を防ぐ。取りたい粒度(1行が何を表すか)を先に定義し、それに合うように段数と経路を最小限に保つことが品質につながる設計手順である。本細目では、多段結合の設計手順、結合経路と粒度の把握までが到達目標である。
③ CROSS JOINは結合条件を持たず、左右の全行の組合せ(直積)を生成する操作である。用途は限定的だが、色とサイズの全組合せのように全ての組み合わせを網羅したい場合や、小さな定数表と組み合わせて行を増やす場合に有効である。直積は行数が急増するため、投入する表は小さく保ち、必要に応じて後段で条件を加えて意味のある集合に整えるのが要点である。派生表は FROM 句内でサブクエリに別名を与えて一時的な表として扱う書き方であり、事前に絞り込みや集約を済ませてから他表に結合する設計をシンプルにする。派生表には必ず別名を付け、外側からはその別名と列名で参照する。本細目では、CROSS JOINの意味と注意点、派生表の基本構文の理解までが到達目標である。
キーワード ① 自己結合 ② 多段結合 ③ CROSS JOIN ④ 派生表
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第15回の復習として、自己結合のパターンでは同一表に必ず別名を付け、修飾名で列を明確化し、同一行を結ばないための条件(主キーの不等号など)を加えることを整理しておくべきである。対応付け・比較・重複検出という意図を先に定義し、それに沿ってON句を設計することが肝要である。従業員と上司、顧客の現レコードと前レコードの突き合わせを、自分のデータ例で検証し、条件の違いが件数に与える影響を確認すること。多段結合の設計では、基点表の選定、外部キー経路の列挙、一対多や多対一の確認、中間表の活用、各段の必須条件の漏れ防止、1行の粒度定義と段数最小化を手順として言語化しておくこと。CROSS JOINは直積で行数が急増するため小規模表で用い、後段で意味のある集合に整える方針を再確認すること。派生表はFROM句内のサブクエリに別名を与え、先に絞り込みや集約を済ませてから結合する基本構文を正確に書けるようにしておくこと。
【予習】
第16回は結合の演習であるため、実行環境の接続確認と対象スキーマのテーブル定義(主キー 外部キー 列名 データ型)の把握を事前に済ませておくことが望ましい。内部結合の基本構文SELECT 列 FROM A JOIN B ON 条件を自力で記述できるかを点検し、別名と修飾名で曖昧さを避ける習慣を整えること。外部結合については第14回の復習として、左右外部結合の意味とNULLの混入箇所、ON句とWHERE句の書き分けの要点を軽く再読しておくと効果的である。さらに、想定する結果の粒度を一文で言語化し、不要列や重複を避ける選択と並び替えの基本操作を確認しておくと、問題文の読解が円滑である。

16 結合演習(【複合データクエリ】【演習】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
本回は、第12〜15回で学んだ内部結合・外部結合と多段結合の総仕上げとして、要件から結合方針を設計し正確にSQLへ落とし込む実践演習である。目的は、内部/外部の使い分け、ONとWHEREの配置、件数検証とNULLの扱いを自力で判断し、2〜3表以上の誤りなき結合を記述できる力を定着させることである。重複や行落ち、水増しの典型を見抜き、キーの対応関係を言語化して根拠ある結果説明を行う。また、結合後の集計・フィルタと整合する条件設計の感覚を養う。ここでの定着が、次回以降のサブクエリ・集合演算や総合演習での複雑な要件分解の基盤となる。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 結合問題演習 ② 内部結合SQL演習 ③ 外部結合SQL演習
細目レベル ① 本演習では、複数表に散らばる情報を一つの結果集合にまとめる問題を解き、結合の選択と設計の筋道を身につける。まず、問題文から必要な表と列を洗い出し、どの列同士を結合キーとするかを明確化する。次に、期待される結果に未対応の行を含める必要があるかを判断し、内部結合か外部結合かを選ぶ。2表結合から始め、3表以上の多段結合へ拡張し、結合の順序と条件が整合しているかを確認する。結果の件数や重複の有無を根拠立てて説明できることも重要である。誤った結合により行が欠落したり水増しされたりする典型例を把握し、結合条件の最小限性と漏れのない指定を意識する。検証の際は、結合キーの分布と想定される対応関係(1対多、多対多)を言語化し、得られた結果と照合する。本細目では、要件から内部結合と外部結合の使い分けを判断し、2〜3表の結合方針を設計できるまでが到達目標である。
② 内部結合は、結合キーが一致する行のみを結び付けて返す結合である。構文は、「FROM 表A INNER JOIN 表B ON 表A.列 = 表B.列」の形で記述する。演習では、二つの表の基本的な等価結合から始め、三つ以上の表を鎖のように結ぶ多段の内部結合までを段階的に扱う。各表には別名を付け、列参照を修飾して曖昧さを避ける。1対多関係で行が増える理由を把握し、想定件数と一致するかを確認する。結合キーは主従の一貫性が保てる列を選び、同じ列を重ねて条件を書くなどの冗長さを避ける。ON句に結合条件を明確に置き、結合の意味を読み取れるSQLを目指す。最終的には、要件に基づき必要な表を選定し、誤結合や不足のない内部結合を自力で記述できることを確認する。本細目では、INNER JOINとON句を用いて2表以上を正しく内部結合するSQLを自力で記述できるまでが到達目標である。
③ 外部結合は、片方の表に対応行がなくても、その表の行を結果に残す結合である。代表的には LEFT OUTER JOIN と RIGHT OUTER JOIN があり、LEFTは左側の全行、RIGHTは右側の全行を保持する。演習では、存在しない対応行がある状況を想定し、外部側の行が落ちない書き方を徹底する。構文は「FROM 表A LEFT OUTER JOIN 表B ON 表A.列 = 表B.列」の形で記述し、対応しない側の列はNULLになることを確認する。外部結合後に列の値でさらに条件を課す場合、外部行が意図せず削除されないよう条件の置き方に注意する。件数の増減やNULLの出現位置を説明できるよう、小さなデータで結果を検証する。目的に応じてLEFTとRIGHTを正しく選び、必要な列が揃う結果を得るための結合条件を明確に書くことを目標とする。本細目では、LEFT/RIGHT OUTER JOINを用いて必要な行を保持した外部結合のSQLを正しく記述できるまでが到達目標である。
キーワード ① 結合キー ② 内部結合 ③ 外部結合 ④ ON
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第16回の復習として、結合問題演習で行った要件読み解きの手順を自分の言葉で再現すること。必要な表と列の洗い出し、結合キーの特定、未対応行の扱いに基づく内部結合か外部結合かの選択を、具体例とともに説明できるよう整理するのである。内部結合SQL演習では、別名と修飾名で曖昧さを排し、ON句に最小限かつ漏れのない等価条件を置く原則を確認すること。1対多で行が増える理由を件数根拠とともに言語化し、3表以上の多段結合における結合順序と条件の整合性を検証するのである。外部結合SQL演習では、LEFT/RIGHTの選択理由、非対応側列がNULLになる位置、WHEREに後置した条件で外部側の行を誤って落とさないための条件配置の注意を、小さなデータで再現して説明できるようにしておく。
【予習】
第17回は非相関サブクエリの導入であるため、サブクエリとはSELECTを入れ子にして中間結果を得る仕組みであることを把握しておくとよい。特に、単一行単一値を返す形と、単一列複数行を返す形の違いを用語と期待結果の観点で区別できるようにするのである。構文面では、括弧で囲われたSELECTがWHEREやHAVINGで使われる基本例に軽く目を通し、SELECT 列 FROM 表 WHERE 列 IN (SELECT 列 FROM …) や 列 > (SELECT 集約 …) のような入口レベルの書式を確認するとよい。また、比較対象のデータ型が整合している必要があること、集合との比較としてINやANY ALLといった演算子名を見かけた際に意味を調べられる準備をしておく。

17 サブクエリⅠ(【複合データクエリ】【応用】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第17回は、結合演習で複数表を扱う基礎を固めた直後に位置し、非相関サブクエリの構文と評価順序を理解し、単一値比較(=, > など)と集合比較(IN/NOT IN)を正しく書き分けることを目的とする。平均・最大等の代表値を内側で求め外側で比較する設計、ID集合による包含・除外の典型を学び、NULLが絡むNOT INの落とし穴と対策も確認する。読みやすい条件分解を体得し、次回の相関サブクエリやEXISTS、集合演算・書き換えへの橋渡しとする回である。スカラーサブクエリのNULLが生む三値論理の振る舞い、サブクエリは1列を返すという前提、INが半結合として最適化され得る点にも触れ、堅牢で予測可能な記述を目指すのである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 非相関サブクエリ ② 集合との比較 ③ サブクエリの使い所
細目レベル ① 非相関サブクエリとは、内側のSELECTが外側の問い合わせの列値に依存せず、先に一度だけ評価され、その結果が外側の式に差し込まれる形式のサブクエリである。サブクエリは括弧で囲み、WHERE句やSELECT句の式として用いる。特に単一行(単一値)を返すスカラーサブクエリは、= や > などの通常の比較演算子と組み合わせて各行と比較できる。例えば「価格が全商品の平均以上の商品」を求めるなら、各行の価格と「SELECT AVG(価格) FROM 商品」を比較すればよい。スカラーサブクエリがNULLを返した場合、比較はUNKNOWNとなり条件は成立しない点に留意する。非相関であるため評価順序が単純で、読みやすい条件の分解に有効である。本細目では、非相関サブクエリの定義と基本構文、および単一行サブクエリの評価と比較の考え方の理解までが到達目標である。
② サブクエリが複数行1列の集合を返す場合、その集合との比較には集合演算向けの演算子を用いる。IN は「いずれかと等しい」、NOT IN は「どれとも等しくない」を表す。いずれも集合内の重複は意味に影響せず、結果の順序も評価には関係しない。IN の括弧内はサブクエリのほか、リテラルの列挙でもよいが、型は左辺と比較可能な1種類にそろえるのが安全である。比較列に適切なインデックスがある場合、IN は結合(半結合)として最適化されることが多く、行数が多い集合でも実用的に動作する。NOT IN は集合にNULLが含まれるとUNKNOWNとなり期待どおりに除外できないため、集合側でNULLを除去するか、左辺をIS NOT NULLで絞る等の対策が有効である。括弧内のサブクエリは1列のみを返す必要がある点にも注意する。本細目では、IN/NOT INによる集合との比較の意味と基本構文の理解までが到達目標である。
③ サブクエリは「内側で求めた代表値や集合を外側の条件に埋め込む」場面で威力を発揮する。典型例は、集計結果と各行の比較(最大・最小・平均など)であり、例えば「平均以上の売上を持つ受注」の判定は、平均を返すスカラーサブクエリとの比較で簡潔に表現できる。また、IN/NOT IN により「別テーブルが返すID集合に含まれる(含まれない)行」を明快に書ける。さらに、複雑な条件を段階化し、内側で一時的な集合を確定してから外側で絞り込むことで、読みやすさと保守性を高められる。非相関であれば内側は一度だけ評価され、挙動を予測しやすい。サブクエリが単一値か集合かを見極め、適切な演算子を選ぶのが基本である。本細目では、非相関サブクエリの代表的な適用場面の把握と、単一値比較と集合比較の基本的な書き分けの判断までが到達目標である。
キーワード ① 非相関サブクエリ ② スカラーサブクエリ ③ IN ④ NOT IN ⑤ 集合比較
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第17回で扱った「非相関サブクエリ」「集合との比較」「サブクエリの使い所」を資料と演習を基に自分の言葉で整理しておくべきである。非相関サブクエリは外側の列値に依存せず一度だけ評価され、WHERE句やSELECT句の式として差し込まれる形式である。単一行を返すスカラーサブクエリは=や>などの比較運用子で各行と比較でき、返り値がNULLの場合は比較がUNKNOWNとなり条件は偽と扱われる点を正確に説明できるようにしておくべきである。集合との比較ではINとNOT INの意味と基本構文、1列のみを返す制約、集合内の重複や順序が結果に影響しないこと、左辺との型整合、NOT INとNULLの組合せの落とし穴とNULL除去などの対策を要点化しておくべきである。使い所として、集計値と各行の比較、別テーブルのID集合による包含排他の判定、段階化による可読性と保守性の向上を、具体的なSQL例を書き起こして言語化しておくべきである。単一値比較と集合比較の書き分け基準を自ら定義して明文化しておくべきである。
【予習】
第18回に備え、相関サブクエリの導入に向けて、非相関サブクエリとの違いを評価タイミングと依存関係の観点から自分の言葉で記述できる状態にしておくことが有効である。さらに、EXISTSという述語が存在確認に用いられる名称であることを把握し、詳細な評価方法や最適化は次回に委ねる前提で、想定される適用場面を数例挙げられるようにしておくとよい。JOINによる書き換えの入口として、第12〜16回で扱ったJOINの基本(内部結合 外部結合 ONとUSINGの使い分け)を再点検し、主キー外部キーの関係と結合条件を正確に読み取れるよう準備しておくことが望ましい。演習用スキーマの列名とデータ型、結合対象列のインデックス有無を確認しておくことも有効である。

18 サブクエリⅡ(【複合データクエリ】【応用】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
今回は、第17回の非相関サブクエリから発展し、第18回では相関サブクエリの評価機構とEXISTS/NOT EXISTSの真偽判定、JOINへの等価変形を通じて、目的に応じた表現選択と可読性・性能の勘所を身につけることを目的とする。結合章で培った基礎を踏まえ、冗長な重複やNULLの扱いに留意しつつ、存在確認・比較・除外の定石を体系化する。また、相関とJOINの書き換えで結果集合や重複数がどう変わるかを検証し、適切な索引利用や実行計画の傾向にも触れる。次回の集合演算・総合演習へ向け、複合クエリを設計・検証できる実践力を強化する位置づけである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 相関サブクエリの仕組み ② EXISTSの使い方 ③ JOINによる書き換え
細目レベル ① 相関サブクエリとは、内側のサブクエリが外側のSELECTの各行の値を参照して評価される形式である。外側の行ごとに内側の問い合わせが繰り返し実行され、行ごとに結果が変わり得る点が特徴である。例えば、従業員eの給与が同じ部署内の平均給与を上回るかを判定する場面では、「WHERE e.給与 > (SELECT AVG(給与) FROM 従業員 e2 WHERE e2.部署ID = e.部署ID)」 のように、内側で外側のe.部署IDを参照する。別名を用いて相関する列を明確にし、外側の1行を入力に内側が部分結果を返す流れを理解することが要点である。非相関サブクエリと異なり、内側は単独では確定値にならず、外側の行と組で意味を持つこと、評価は外側→内側の順に繰り返されることを押さえるべきである。相関条件は等価だけでなく不等号や範囲でもよいが、意味が一意に定まるように書くことが重要である。本細目では、相関サブクエリの概念と評価の流れの理解までが到達目標である。
② EXISTSは「行が1行でも存在するか」を真偽で判定する述語である。EXISTS (サブクエリ) が真になる条件は、内側のサブクエリが少なくとも1行を返すことであり、返す列や値そのものは評価されない。したがって内側は SELECT 1 FROM ... のように簡素でよく、重要なのは相関条件である。例えば、受注を持つ顧客だけを抽出するには、「SELECT * FROM 顧客 c WHERE EXISTS (SELECT 1 FROM 注文 o WHERE o.顧客ID = c.顧客ID)」 と書く。逆に受注のない顧客は NOT EXISTS を用い、内側で同様に相関させればよい。EXISTSはNULLの有無ではなく「行の有無」で判定される点がIN等と異なる直感であり、存在確認や重複チェック、参照整合の確認に適する。読みやすさのため、内側では外側の別名を明示して結び付けを分かりやすくすることが望ましい。本細目では、EXISTS/NOT EXISTSの基本構文と真偽の決まり方、相関条件の書き方の理解までが到達目標である。
③ 相関サブクエリやEXISTSで書いた問い合わせは、等価なJOIN表現に書き換えられる場合が多い。EXISTSは「結び付く相手が1件でもあれば採用」という意味なので、INNER JOINで結合し、左側の重複を避けたいときはDISTINCTで行の多重化を抑えるのが定石である。NOT EXISTSは「結び付く相手が1件もない」を表すため、LEFT JOINの後に右側キーがNULLである行だけを残す書き方が対応する。また、相関サブクエリで部門ごとの平均と比較する式は、部門ごとに集計した派生表を作り、それをJOINして比較する形にできる。書き換えの目的は意味を保ったまま読みやすさや再利用性を高めることであり、両表現を相互に読めることが実務で有用である。本細目では、EXISTSと相関サブクエリをINNER/LEFT JOINへ等価変形する基本パターンの理解までが到達目標である。
キーワード ① 相関サブクエリ ② EXISTS ③ NOT EXISTS ④ INNER JOIN ⑤ LEFT JOIN
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
相関サブクエリの評価の流れを自分の言葉で説明できるよう整理すること。外側の各行を入力として内側が再評価される点、別名で相関列を明確化する書き方、非相関との違いを例示することが望ましい。EXISTSとNOT EXISTSは「行の有無」で真偽が決まること、内側はSELECT 1で十分であることを確認し、IN等との直感の差を言語化すること。また、EXISTS相当はINNER JOIN、NOT EXISTS相当はLEFT JOIN後の右側キーNULL判定で等価に書けることを、重複抑止のDISTINCT使用や部署別平均を派生表にしてJOINする例を含め、三通りの等価表現を実際に書き比べて検証すること。評価順序と意味保持を意識して説明できる状態に整えることが重要である。
【予習】
次回は集合演算の導入である。UNIONの基本的な役割が「同じ列数と両側の対応列が互換な型を持つ二つの結果集合を縦に結合する」ことである点を把握しておくこと。使用予定のテーブルから、列数と型がそろう二つの簡単なSELECT骨子を用意し、列順と別名の揃え方を確認すること。また、集合の共通と差という数学的概念を日常例で説明できるよう準備し、それらが結果行の選び分けに相当するという直観を持っておくこと。RDBMSの型互換の概要を調べ、暗黙変換の可否に注意を向けること。

19 集合演算(【複合データクエリ】【応用】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第19回は、サブクエリ学習を受けて結果集合同士を縦方向に統合・比較する集合演算を体系化する回である。目的は、UNIONの重複排除の意味と使い所、INTERSECT/MINUSによる共通・差の抽出、ならびに列数一致・対応列の型互換・先頭SELECTに従う列名などの規則を実務水準で運用できるようにすることである。結合では表を横に広げたが、本回は同形の結果を安全に積み上げる設計思考を養い、次回の演習への橋渡しを担う回である。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① UNIONの基本 ② 集合の共通・差 ③ 列数と型のルール
細目レベル ① UNIONは、2つ以上のSELECT文が返す結果集合を縦に結び合わせ、重複する行を1行にまとめて返す集合演算である。列を横に増やす操作ではなく、同じ形の結果を上に積み重ねて一つの一覧にするイメージである。文法は「SELECT 列... FROM ... UNION SELECT 列... FROM ...;」のように、各SELECTの間にUNIONを書く。対象とするSELECTは同じ列数で、対応する列が同種のデータを表す必要がある点に注意する。別々の表や条件から得た同種のデータを一つにまとめたいときに有効であり、最終結果は重複が自動的に除去された一意な行の集合となる。この性質により、件名の一覧やIDの名簿を統合する場面で直感的に使える。文の可読性のため、列を明示して対応をそろえる書き方を心がけると安全である。本細目では、UNIONの目的と基本構文、および重複行が除去される性質の理解までが到達目標である。
② 集合の共通・差を求める演算として、INTERSECT と MINUS がある。INTERSECT は、2つの SELECT 結果の両方に現れる行だけを返し、共通部分を表す。MINUS は、左側の SELECT 結果から右側の SELECT 結果に含まれる行を取り除いた行だけを返し、差集合を表す。差は順序に依存するため、A MINUS B と B MINUS A の結果は一般に異なることを理解する必要がある。これらは UNION と同様、同じ形の結果集合同士に対して用いるのが前提である。基本の振る舞いとして、重複する行は 1 つとして扱われ、返る結果は一意な行の集まりとなる。適用例としては、両方に登録がある要素の抽出(INTERSECT)や、片方にのみ存在する要素の抽出(MINUS)が挙げられる。構文は「SELECT ... INTERSECT SELECT ...」「SELECT ... MINUS SELECT ...」のように記述する。本細目では、INTERSECT と MINUS の意味と基本構文、ならびに差集合で左辺と右辺の順序が結果に影響する理解までが到達目標である。
③ 集合演算を正しく使うには、列数と型に関するルールの理解が不可欠である。まず、UNION・INTERSECT・MINUSのいずれも、連結する各SELECTは同じ列数でなければならない。次に、位置が対応する各列は互換性のあるデータ型である必要がある。たとえば整数と小数、CHARとVARCHAR2、日付同士などは多くの場合共通型へ暗黙変換されて比較・統合されるが、意味の異なる型(例:日付と数値など)はエラーとなりうる。比較は列の位置で行われるため、SELECT * のような書き方は避け、対応を意識して列を明示するのが安全である。結果の列名は先頭のSELECTで指定した名前が採用され、後続のSELECTの列名には影響されない。精度や長さは共通型に合わせて決定されるため、必要に応じてCASTなどで明示的に揃えると意図が伝わりやすい。本細目では、列数一致と対応列の型互換、列名が先頭SELECTに従うという基本ルールの理解までが到達目標である。
キーワード ① UNION ② INTERSECT ③ MINUS ④ 列数 ⑤ 型互換
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第19回の集合演算について復習すること。UNIONの目的と基本構文、重複行が自動的に一意化される性質を、自作の小規模データで検証して記述を安定化させること。列は明示し、同じ意味と順序で対応を取る練習を行うこと。INTERSECTとMINUSでは、共通集合と差集合の意味、結果が一意行で返る点、特にMINUSが左右の順序に依存する点を整理すること。さらに、全ての集合演算で列数一致が前提であること、対応列の型互換が必要であること、結果列名は先頭SELECTに従う規則、SELECT * を避ける理由を説明できるようにすること。必要に応じCASTで型を揃える判断基準や、型不一致時のエラーメッセージの観察も行い理解を固めるべきである。
【予習】
第20回はサブクエリと集合演算の演習中心であるため、実行環境の接続確認と教材スキーマの把握を事前に行うこと。主要テーブルの列名とデータ型を一覧化し、各SELECTが返す結果集合の形(列数と型)が口頭で説明できるよう準備すること。サブクエリについては、非相関と相関、INやEXISTSの典型的な読み方と配置箇所(SELECT句・FROM句・WHERE句)をシラバス程度に復読し、細かな最適化や書き換えには踏み込みすぎないこと。集合演算は第19回の構文と列対応の作法を再確認し、演習で使う見込みの列対応表を自作しておくと開始が円滑である。

20 サブクエリ・集合演算復習(【複合データクエリ】【演習】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第20回はサブクエリ・集合演算の総復習として、要件から適切な型と配置を選択し、正しい構文と検証手順で誤りを除去する実装力を定着させることを目的とする回である。第17〜19回で学んだ相関・非相関、EXISTS/IN、UNION/INTERSECT/MINUSの使い分けやNULLと重複の扱い、列整合と評価順を演習で再確認する。以降のデータ定義・制約、総合演習で複雑な問合せを堅牢に設計するための完成度を高める位置付けである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① サブクエリ問題演習 ② サブクエリSQL演習 ③ 集合演算問題演習 ④ 集合演算SQL演習
細目レベル ① サブクエリ問題演習では、与えられた要件から「どの種類のサブクエリを、どこに置くか」を見極める練習を行うのである。例えば、単一の値と比較するなら単一行サブクエリ、多数の行と照合するならIN/NOT IN、存在確認ならEXISTS、といった対応を問題文から読み解く力を鍛える。相関か非相関かの判断も重要であり、「各行ごとの条件」が含まれるなら相関である可能性が高い。NULLの混入がNOT INの振る舞いを変える点や、重複が結果の意味解釈に影響する点など、落とし穴の指摘と対策も検討する。問題を集合図や入出力例に落とし込み、必要な中間結果と最終結果の関係を言語化する練習を重ねることが要である。本細目では、問題文から適切なサブクエリの型と配置を選び、入出力の関係を図示・言語化できるまでが到達目標である。
② サブクエリSQL演習では、実際にサブクエリを用いたSELECT文を正確に記述し、段階的に検証する力を身につけるのである。括弧の対応、単一行か複数行かに応じた演算子選択(=、IN、NOT IN、EXISTS)を厳密に扱い、相関サブクエリでは外側の表に別名を付与して関連付けを明確にする。NOT INとNULLの相性など典型的な不具合は、サブクエリ側でNULLを除外するなどの対処を実装し、意図どおりの真偽が得られるか小規模データで確認する。複雑な要件は、まずサブクエリ単体を独立に実行して中間結果を確かめ、次に外側へ組み込む手順で誤りを減らすことが有効である。本細目では、要件に応じたサブクエリを正しい構文で記述し、相関・非相関を使い分けて正答を得られるまでが到達目標である。
③ 集合演算問題演習では、課題文の意図を読み取り、UNION/UNION ALL、INTERSECT、MINUSから最適な演算を選ぶ判断力を養うのである。「AとBの両方に属する」「Aにだけある」「AとBを合わせるが重複は残す/削除する」といった表現を、対応する集合演算に正しく写像する。列数と対応順、データ型の互換性を満たす設計であるかも問題分析段階で確認する習慣を身につける。重複の扱いは意味論に直結するため、ALLを付けるべきか、既定の重複排除で足りるかを要件から判断する。結果の並び順は本質的に集合の定義に含まれない点も踏まえ、必要なら後段で並べ替える前提で考えるのである。本細目では、課題文からUNION/INTERSECT/MINUSの選択と列対応の設計を適切に判断できるまでが到達目標である。
④ 集合演算SQL演習では、選択した集合演算を構文規則に従って正確に記述し、期待する重複制御と列整合を満たす実行結果を得る技能を鍛えるのである。各SELECTの列数と並びを一致させ、互換なデータ型に揃えた上で、UNIONは重複排除、UNION ALLは保持、INTERSECT/MINUSは既定で重複排除という性質を意識して書き分ける。複数の集合演算を組み合わせる場合は括弧で評価順を明確にし、全体に対するORDER BYは最後に一度だけ指定する。列別名は先頭のSELECTに付けて全体に適用される点も確認する。テストでは小さな入力例を用い、重複の件数変化や境界ケース(空集合、NULL含み)を検算するのである。本細目では、要件に応じた集合演算を正しい構文で記述し、重複制御と列整合を確認して正しい結果を得るまでが到達目標である。
キーワード ① サブクエリ ② 相関サブクエリ ③ EXISTS ④ NOT IN ⑤ UNION
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第20回で扱ったサブクエリ・集合演算の復習として、演習で解いた各問題を自分の言葉で再構成し、要件から「単一行/複数行/存在確認」のどれを選ぶか、相関か非相関か、配置箇所と演算子(=・IN・NOT IN・EXISTS)の選定根拠を説明できるよう整理すること。特にNOT INとNULLの関係は、サブクエリ側でNULL除外を入れる対策まで含めて再検証すること。SQLは括弧対応と別名付与を厳密に点検し、サブクエリ単体の中間結果→外側に組み込む手順で検証ログを残すこと。集合演算では、要件文をUNION/UNION ALL/INTERSECT/MINUSに写像し、列数・型整合、重複の扱い、括弧による評価順、最後だけORDER BYという規則を小規模データで確認し、空集合や重複境界の結果を説明できるまで整理しておくこと。
【予習】
第21回に向けた予習として、CREATE TABLEの最小構文と用語を確認し、表名 列名 データ型 NULLとNOT NULLの意味を正確に言語化しておくこと。手元のDBの公式ドキュメントで、整数 文字列 可変長 固定長 日付時刻といった基本的データ型の名称と代表的な使用場面を一覧にし、過去の演習で扱った列をどの型にするか理由付きで仮設計してみること。CREATE TABLE 表名(列名 データ型 [NOT NULL]) 程度の骨子を書けるようにし、列順や命名の一貫性、将来のNULL許容方針の初期判断をメモすること。

21 テーブル定義Ⅰ(【データ定義】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
本回は、取得中心の前半を経てデータ定義に踏み出す起点であり、以後の制約設計(主キー・外部キー・CHECK)とデータ操作の堅牢性を支える土台を築くことを目的とする。CREATE TABLEの基本構文を正確に書けること、用途に適した数値・文字列・日付時刻型を選定できること、必須項目をNOT NULLで明示して欠損を設計段階で排除する判断基準を身につける。これにより、後続のDEFAULTや制約、DML、トランザクションで想定外のNULLや型不一致に悩まないスキーマ思考を確立する位置づけである。次回の型選択応用・DEFAULT設定、続く制約回への橋渡しとなる回である。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① CREATE TABLEの基本 ② データ型の選び方基礎 ③ NOT NULLの使い所
細目レベル ① CREATE TABLE文は新しいテーブルを定義し、列名とデータ型を列挙して構造を決める文である。テーブルは行をためる器であり、まずその器の形を決める必要がある。基本形は「CREATE TABLE テーブル名 (列名 データ型, 列名 データ型, ...);」の形であり、各列定義はカンマで区切る。列名・テーブル名は実装の識別子の規則(使用可能な文字、長さ、予約語禁止)に従う必要がある。列の並び順は意味に影響しないが、読みやすさのために論理的な順序にするのがよい。試しに学生テーブルなら CREATE TABLE 学生(学籍番号 VARCHAR2(10), 氏名 VARCHAR2(50), 入学年 INT); のように書く。CREATE TABLEはデータの入れ物を用意する操作であり、ここで定めた列名と型が以後のINSERTやSELECTの前提となる。本細目では、CREATE TABLE文の役割と基本構文、列定義の書き方の理解までが到達目標である。
② 列にどの型を割り当てるかは、正確さと扱いやすさを左右する基本である。選び方の基準は、値の範囲・桁数、必要な小数精度、長さの可変性、比較や並べ替えの意味づけである。数を数える件数や連番は整数型を用い、金額や比率のように小数を正確に扱う必要があるものは固定小数点のDECIMAL/NUMERICを選ぶのが基本である。氏名や商品名など長さがばらつく文字はVARCHAR2、固定桁で常に同じ長さのコード(例: 2桁の都道府県コード)にはCHARが適する。郵便番号や電話番号は数字に見えても先頭の0や記号を保つ必要があるため文字列型が適する。日付や時刻は文字列ではなくDATEやTIMESTAMPを用いると、範囲検索や計算が正しく行える。文字数とバイト数の違いがある実装では、マルチバイト文字で上限を超えないよう定義時に余裕を持たせるのが安全である。本細目では、代表的な数値・文字列・日付時刻型の特徴と選択基準の理解までが到達目標である。
③ NOT NULLは、その列にNULL(不明・欠損)を入れないという約束をテーブル定義に埋め込む指定である。CREATE TABLEの列定義で 列名 データ型 NOT NULL のように書き、必須入力であることを機械的に保証する。使い所は、業務上その値が欠けると意味をなさない属性である。例として、受注の数量、単価、登録日、ログの発生時刻、メール送信先などが挙げられる。NULLと0や空文字は意味が異なるため、「値が存在しないことを許さない」理由が明確な列に適用するのが原則である。NOT NULLにすることで、後段の問い合わせで三値論理に悩まされる場面を減らし、比較や集計の解釈を単純化できる。一方、任意入力の備考欄のように欠損が自然な列には指定しない。設計時に「必須か任意か」を列ごとに判断し、必要最小限に適用するのが良い指針である。本細目では、NOT NULLの意味と指定方法、適用が適切な典型場面の理解までが到達目標である。
キーワード ① CREATE TABLE ② 列定義 ③ データ型 ④ NOT NULL ⑤ 識別子
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第21回で扱ったCREATE TABLEの基本、データ型の選び方基礎、NOT NULLの使い所について、講義資料と演習ノートを参照しつつ自分の言葉で要点を整理しておくこと。CREATE TABLE テーブル名(列名 データ型, …)の基本形を正確に書けること、列定義の区切りや列順序の意味、識別子の規則(使用可能文字や予約語回避)を説明できること。数値は整数とDECIMALの使い分け、文字はCHARとVARCHARの適性、日付時刻はDATEやTIMESTAMPを選ぶ理由を具体例で述べられること。NULLと0や空文字の違いを明確化し、業務上必須な列を見極めてNOT NULLを適用する判断基準と、その効果(問い合わせの単純化)を言語化しておくこと。
【予習】
第22回に向け、データ型の選び方応用とDEFAULTの活用、テーブルの作成演習に入る準備を行うこと。まず、前回学んだ型の特徴を踏まえ、要件により定義が揺れやすい観点(金額の桁数と精度、コード長、可変長文字の上限、日付時刻の粒度)を自分の題材で整理しておくこと。次に、DEFAULTは入力が無い場合に採用される既定値という概念であることを確認し、どの列に初期値が妥当かを文章で説明できるようにしておくこと(SQL詳細は調べすぎない)。最後に、演習に備えて自分の環境でDDLが実行できることを点検し、簡単なテーブル作成と削除の手順をメモ化しておくこと。

22 テーブル定義Ⅱ(【データ定義】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第22回は、前回のテーブル定義Ⅰで学んだCREATE TABLEの骨格と型選択基礎・NOT NULLを踏まえ、実データに即した型選択の応用判断とDEFAULT設計を体得し、要件から妥当な表定義を自力で組み立てることを目的とする。固定小数点・日付時刻・可変/固定長文字の選択と既定値を演習で検証し、初期品質と入力負荷の両立を図る。制約Ⅰ・Ⅱへの橋渡しとして、以降のデータ操作や総合演習で破綻しないスキーマ設計の基準を確立する位置づけである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① データ型の選び方応用 ② DEFAULTの活用 ③ テーブルの作成演習
細目レベル ① データ型の選定は、格納したい値の性質と将来の拡張性、計算精度、保守性を踏まえて行うべきである。整数は範囲に応じて小さめの型から検討し、桁あふれを避けつつ過大な型を選ばないことが重要である。金額や比率は誤差のない固定小数点(DECIMAL/NUMERIC)を用いるのが基本であり、浮動小数点は科学計算のような近似値で十分な用途に限定するべきである。日付のみが必要ならDATE、日時が必要ならTIMESTAMPを選び、時刻帯の扱いは要件に合わせて決める。文字列は、長さが一定のコード類はCHAR、可変長の名称や備考はVARCHAR2とする。これらの判断を通し、実データの例と操作の仕方から最適な型を選べることが望ましい。本細目では、代表的な値ごとの型選択基準を理解することまでが到達目標である。
② DEFAULTは、INSERT時に列が省略された場合に自動で設定される既定値であり、初期状態を安定させるために用いる機能である。たとえば在庫数を0、状態を'active'、登録日時を現在時刻のように定めておくと、入力漏れがあっても表の一貫性を保てる。DEFAULTは列定義の一部として記述し、定数だけでなく実装によっては現在時刻のような組み込み関数を用いることも可能である。DEFAULTは列を省略したときに適用され、明示的に値を入れた場合はその値が優先される。未知や未決定を意味する場面に安易に具体値を入れると誤解を招くため、業務上「初期状態」を明確に表す値に限定して設定するのがよい。既定値の変更は新たな行にのみ影響し、既存行は自動では書き換わらない点にも注意する。適切なDEFAULTにより、入力負担の軽減とデータの初期品質の確保を両立できる。本細目では、DEFAULTの役割と設定方法、適用タイミングと代表的な活用例の理解までが到達目標である。
③ 本演習では、小さな業務シナリオを想定し、型選択とDEFAULTを踏まえたテーブル作成を行う。例として商品管理を扱い、識別用の数値列、商品名(可変長文字列)、価格(固定小数点)、在庫数(整数)、発売日(DATE)、登録日時(TIMESTAMP)、状態(短い文字列)を設計対象とする。価格は誤差回避のためDECIMALを選び、在庫数の初期値は0、状態は'active'、登録日時は現在時刻といったDEFAULTを与える。作業手順は、要件の読み取り、列の洗い出しと命名、型の決定、DEFAULTの設定、CREATE TABLE文の記述と実行、定義の確認、サンプルデータの挿入と既定値の適用確認、という流れで進める。挿入時にはあえて在庫数や状態を省略し、期待どおりの初期値が入るかを確かめる。最終的に、要件に照らして定義を微調整し、定義とデータの対応が取れているかを確認する。本細目では、要件に基づく列設計、適切なデータ型選択、DEFAULT設定、CREATE TABLEの実行と基本的な動作確認までが到達目標である。
キーワード ① データ型選択 ② DEFAULT ③ DECIMAL ④ TIMESTAMP ⑤ CREATE TABLE
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第22回の「データ型の選び方応用」「DEFAULTの活用」「テーブルの作成演習」を資料と演習結果に基づき自分の言葉で整理すること。整数は想定範囲から過不足ない型を選び、金額や比率は誤差回避のためDECIMAL/NUMERICを採用し、浮動小数点は近似で十分な用途に限定する判断を説明できるようにすること。日付はDATE、日時はTIMESTAMPを用い、時刻帯要件の扱いを明確化すること。文字列は固定長のコードはCHAR、名称や備考は可変長のVARCHAR2とする根拠を示せること。DEFAULTは列省略時のみ適用され明示値が優先される点、既定値変更は新規行にのみ影響する点、未知の代替として乱用しない点を、在庫数0 状態active 登録日時現在時刻といった例で確認すること。演習で作成したCREATE TABLE文を見直し、列定義とDEFAULTの設定手順、サンプルINSERTによる既定値の適用検証、定義と要件の整合性チェックまでを再現できるよう復習すること。
【予習】
第23回は「主キーとUNIQUE」「複合主キーの設計」「外部キー」の導入であるため、次を準備すること。まず、一意性と同定の概念を自然言語で説明できるよう整理し、主キーは表の代表識別子であること、UNIQUEは一意性を追加で保証する制約であることの役割差を把握すること。第22回で作成した商品表を題材に、行を一意に識別し得る候補(例 商品コードや内部IDなど)を列挙し、自然キーと代替キーの利点欠点を簡潔にメモすること。単一列で一意にならない場合に複数列の組合せが必要となり得る典型事例を業務データから1つ挙げておくこと。さらに、商品とカテゴリなど二表の参照関係が想定される列を洗い出し、どの列が「参照元」「参照先」たり得るかをデータ例ベースで記述しておくこと(具体的な制約構文の記述は不要)。重複やNULLを含む小さなダミーデータを用意し、一意性が崩れる場面を観察できるよう準備しておくこと。

23 制約Ⅰ(【データ定義】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
本回はデータ定義編の中核として、主キーとUNIQUEの役割差、複合主キーの設計原則、外部キーによる参照整合性の確立を体系化することを目的とする。第21・22回の型選択とNOT NULLを踏まえ、一意性と関係の設計を確固にすることで、これまで学んだ結合の前提をスキーマに埋め込み、以降の制約ⅡやDML・トランザクションでの堅牢な更新処理へ橋渡しを行う位置づけである。主キー候補の評価基準(安定性・最小性・理解容易性)を適用し、複合主キーの順序と列選定、参照先のUNIQUE要件や多対一の表現を実例で確認する。これにより、論理設計と物理実装の接続を明確にし、品質と保守性を高める基盤を築くのである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① 主キーとUNIQUE ② 複合主キーの設計 ③ 外部キー
細目レベル ① 主キーは、テーブル内の各行を一意に識別するための列(または列の組)である。主キーはテーブルに一つだけ定義でき、値の重複を許さず、NULLも許さないという性質を持つ。これにより、検索・更新・削除の対象行を確実に特定でき、データの取り違えを防げる。UNIQUE制約は、一つの列または列の組に対して重複を禁止する制約であり、同じ値が二度入らないことを保証する点で主キーと似ているが、テーブルに複数個定義できる点と、NULLの扱いがDBMSにより許容される場合がある点が異なる。主キーはテーブルの代表の「識別子」として位置づけられ、他のテーブルから参照される中心となるのに対し、UNIQUEはメールアドレスや社員番号のように「重複を避けたい属性」に付与して品質を守る目的で用いる。複数の候補が一意になり得る場合は、変化しにくく短く理解しやすい列を主キーとして選ぶのが基本である。本細目では、主キーとUNIQUEの役割の違い、選択基準、利用場面の理解までが到達目標である。
② 一つの列だけでは行を一意に識別できない場合、複数列の組合せを主キーとするのが複合主キーである。例えば受注明細のように「受注ID」と「商品ID」の組で一行を示す場面が典型である。設計の要点は、第一に最小性であり、組に含める列は一意性を確保するのに必要最小限とすることである。第二に安定性であり、値が頻繁に変更される列は避けることである。第三に意味の明確さであり、組として業務の実体を自然に表せるかを確認することである。複合主キーに含まれる各列は主キーの一部である以上、いずれもNULLを許さない。また、複合主キーを外部から参照する際は、参照側でも同じ列の並び順と組合せで指定する必要がある。必要以上に列数を増やすと取り扱いが複雑になるため、設計時に粒度と識別条件を吟味することが重要である。本細目では、複合主キーを用いるべき状況の見極めと、最小性・安定性・意味づけに基づく設計の基本理解までが到達目標である。
③ 外部キーは、あるテーブル(子)の列が、別のテーブル(親)の主キーまたはUNIQUE制約の付いた列の値と一致していることを保証する制約である。これにより、存在しない親を指す子行の挿入が防がれ、参照されている親行の削除が抑制されるなど、参照整合性が保たれる。外部キー列は同じ値を複数行に持てるため、多対一の関係を自然に表現できる。例えば「顧客ID」を持つ受注テーブルは、各行が必ず顧客テーブルの既存の顧客IDを指すことが求められる。外部キーは単一列だけでなく、複合主キーに対応して複数列の組として定義することもできる。その場合、参照先と参照元で列の組合せと順序を一致させることが必要である。外部キーを明示的に設計することは、結合の前提をデータベース自体に埋め込み、データの一貫性を自動的に守る仕組みを整えることである。本細目では、外部キーの目的、参照先の要件、基本的な整合性効果の理解までが到達目標である。
キーワード ① 主キー ② UNIQUE ③ 複合主キー ④ 外部キー ⑤ 参照整合性
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第23回の内容「主キーとUNIQUE」「複合主キーの設計」「外部キー」について、講義資料と演習結果を基に自分の言葉で要点を整理すること。主キーは表の唯一の識別子であり重複不可かつNULL不可である点、UNIQUEは重複禁止だが複数定義可能でDBMSによりNULL許容の扱いが異なる点を明確に対比すること。主キー候補が複数ある場合に、変化しにくく短く理解しやすい列を選ぶ判断基準も述べること。複合主キーは必要最小限の列で一意性を満たす最小性、頻繁に変わらない安定性、業務実体を自然に表す意味の明確さを満たす設計であること、構成列はいずれもNULL不可であること、参照時は列の並びと組合せを一致させる必要があることを説明すること。外部キーは親の主キーまたはUNIQUEを参照し、存在しない親の参照挿入を防ぎ、参照中の親削除を抑制することで参照整合性を確保する点、多対一関係を表現する点、複合鍵にも対応する点を具体例とともに確認すること。
【予習】
第24回では「NOT NULL/CHECK/DEFAULTの使い分け」「CHECKでの業務ルール表現」「制約の追加・削除・有効化/無効化」を扱うため、まず各制約の狙いを言語化しておくこと。NOT NULLは欠損の禁止、CHECKは値域や列間関係の妥当性検証、DEFAULTは初期値の供給という役割であると捉えておくとよい。自分のミニスキーマを一つ選び、どの列はNULLを許さないべきか、どの列は初期値が妥当か、どの業務ルールをCHECKで表したいかを箇条書きで準備すること(例として負の在庫を禁止する、日付の前後関係を守る等の粒度で十分である)。また、制約は作成時に付与する方法と後から付与する方法があり、有効化や無効化といった状態管理の概念があることだけを把握しておくこと。具体的なALTER文の詳細やCHECK式の細部には踏み込まず、NULLとCHECKの評価関係に注意が要るという観点を入口知識として持参すること。

24 制約Ⅱ(【データ定義】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第24回は「制約Ⅱ」として、NOT NULL・CHECK・DEFAULTの役割を整理し、業務ルールをCHECKで正確に表現しつつ、ALTER TABLEによる制約の追加・削除・有効化/無効化を安全に運用する要点を習得することを目的とする。本回は、第21~23回の型選択・主キー/外部キーの設計を土台に、列レベルの品質保証とスキーマ進化時の整合性確保を実践的に学ぶ位置づけである。これにより、次回の復習と以降のデータ操作・トランザクションで前提となる堅牢なデータ保全を確立する。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① NOT NULL/CHECK/DEFAULTの使い分け ② CHECKでの業務ルール表現 ③ 制約の追加・削除・有効化/無効化
細目レベル ① NOT NULL・CHECK・DEFAULTは、列に入る値の品質を守る基本的な仕組みである。NOT NULLは「値の欠落そのものを禁止」する制約であり、空文字や0とは別の「不明値」を拒否するものである。CHECKは「入れてよい値の条件」を論理式で表す仕組みであり、例えば年齢 >= 0 や 状態 IN ('A','I') のように範囲や集合を定義できる。なお、CHECKは条件が偽のときにのみ違反となり、列がNULLで条件の評価が不明な場合は違反にならない点に注意が必要である。したがって「必ず値が必要」ならNOT NULLを併用するべきである。DEFAULTは「INSERTで列が省略されたときに自動で入る既定値」を与える仕組みであり、よく使う初期状態やフラグを安定して設定できる。DEFAULTは省略時にだけ適用され、明示的にNULLを入れた場合には発動しない点も区別しておく。実務では、存在必須ならNOT NULL、値の範囲や選択肢はCHECK、よくある初期値はDEFAULTという役割分担で設計するのが基本である。本細目では、NOT NULL・CHECK・DEFAULTの役割の違いを理解し、適切に使い分ける判断ができるまでが到達目標である。
② CHECKは列や複数列にまたがる業務ルールを、テーブルの内側に明示的に埋め込むための仕組みである。典型例として、数量 > 0、割引率 BETWEEN 0 AND 1、状態 IN ('新規','承認','却下') といったドメイン制約が挙げられる。複数列の関係も記述でき、「開始日 <= 終了日」「終了日があるときは開始日も必須(終了日 IS NULL OR 開始日 IS NOT NULL)」「会員区分が学生なら年齢 < 25(区分 <> '学生' OR 年齢 < 25)」のようにAND/ORを用いて表現する。CHECKは他テーブルの値には依存させず、列の現在値だけで真偽が決まる単純で再現性のある条件にすることが望ましい。また、NULLが関わると条件評価が不明となり違反にならないため、「NULLを許さない」要件はNOT NULLと組み合わせるのが定石である。違反時の識別を容易にするため、制約名にルールの意味を端的に表す名前を付けると保守性が上がる。これらにより、アプリケーションの外側であってもデータの一貫性が守られるようになる。本細目では、代表的な業務ルールをCHECKで表現し、NULLの影響を踏まえて条件を正しく組み立てることまでが到達目標である。
③ 既存テーブルに対する制約の管理は、一般にALTER TABLEによって行う。追加は「ADD CONSTRAINT 名 CHECK(条件)」のように明示し、列の必須化は列定義を変更してNOT NULLを付与する。DEFAULTの設定や解除もALTER TABLEで行い、省略時の既定値を運用途中で見直せる。削除は「DROP CONSTRAINT 名」によりその制約だけを取り除く。追加時には既存データが新しい条件に違反していないかが検査され、違反があれば操作は失敗するのが基本であるため、事前にデータを修正してから追加するのが安全である。有効化/無効化は、大量投入や一時的運用の都合で制約チェックを止めたり再開したりする操作であり、製品ごとに書式は異なるが概念は共通である。無効化中は不正なデータが入り得るため、再有効化時には全データの検証が行われる点と、無効化を長期間放置しない運用ルールを徹底することが重要である。これらの操作はデータの信頼性と運用の柔軟性を両立させるための基本技能である。本細目では、ALTER TABLEによる制約の追加・削除・有効化/無効化の基本手順と注意点を理解することまでが到達目標である。
キーワード ① NOT NULL ② CHECK ③ DEFAULT ④ ALTER TABLE ⑤ 制約管理
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第24回で扱ったNOT NULL CHECK DEFAULTの使い分けを、定義の違いと適用タイミングの観点で整理しておくこと。NOT NULLは不明値を禁止する制約であり、CHECKは許容条件を論理式で定める仕組みで、NULLが絡むと不明評価となり違反とならない点を明確に言語化すること。したがって必須項目はNOT NULLと併用する理由を説明できるようにすること。DEFAULTは省略時のみ既定値を入れ、明示的なNULLには作用しない点を押さえること。さらに、開始日と終了日の関係など複数列にまたがる業務ルールの表現方法、制約名の付け方を例示できるようにすること。加えて、ALTER TABLEによるADDやDROPおよび有効化無効化の基本手順と、追加時に既存データ検査が走るため事前整備が必要であるという注意点を、自分の言葉で要点化しておくこと。
【予習】
第25回はデータ定義と制約の総合演習であるため、入り口準備として第21〜24回で扱ったCREATE TABLE ALTER TABLE NOT NULL CHECK DEFAULTの基本構文を再確認しておくこと。列名データ型桁数初期値といった表設計の前提情報を整理し、どの列が必須かどの値域が妥当かといったドメイン要件を短文で言語化して持参すること。実行環境の接続確認とスキーマ選択の手順を復習し、エラーメッセージの読み取り方や制約名の命名規則を確認しておくこと。演習内容の解答作成には踏み込まず、文法の再確認と準備に留めること。

25 データ定義・制約復習(【データ定義・総合】【演習】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第25回は、第21〜24回で学んだテーブル定義と制約を統合し、要件読み取り→設計→SQL実装→検証の流れを実務水準で再確認する回である。今回の目的は、要件から列・型・NULL可否・主キー/外部キー/UNIQUE/CHECKを適切に選定し、CREATE TABLE/ALTER TABLEで正確に表現し、制約違反の診断と是正判断を自律的に行える力を定着させることである。ここで堅牢なスキーマ理解を固めることで、次回以降のデータ操作・トランザクションおよび総合演習で品質を崩さずに処理を書ける基盤を完成させる位置付けである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① テーブル定義問題演習 ② テーブル定義SQL演習 ③ 制約問題演習 ④ 制約SQL演習
細目レベル ① テーブル定義問題演習では、文章で与えられた要件や項目一覧から、どのテーブルが必要で、各テーブルにどの列を置くべきかを整理する練習を行う。鍵となるのは、業務上の「もの」や「出来事」をテーブルとし、識別に使う属性、記録として保持すべき属性、計算で得られるため保持しない属性を見分けることである。列ごとに整数・小数・文字列・日付などの型、文字列の長さ、NULLを許すか、初期値が要るかを判断する。主キー候補を複数考え、値が変化しにくいこと、一意であることを確認する。列名は意味が明確で一貫性のある命名とし、重複や繰り返し列を避ける。関連する他テーブルへの参照が必要かを洗い出し、その関係性を言語で説明できるようにする。小さなサンプルデータを想定し、矛盾や欠落がないかを点検する姿勢も重要である。本細目では、要件から列・データ型・NULL可否・主キー候補を抽出し、妥当なテーブル仕様を文章で示せることまでが到達目標である。
② テーブル定義SQL演習では、仕様をSQLに落とし込み、CREATE TABLE文で列と属性を正確に記述する力を養う。構文の基本は、CREATE TABLE テーブル名 (列名 データ型 [NOT NULL] [DEFAULT 値], ...); であり、各列の型と長さの指定、精度の指定、日付・時刻型の選択などを誤りなく書けることが要点である。識別子の大文字小文字や記号の扱い、実務的な命名の習慣も確認する。主キーや他の制約の詳細は後続の制約演習で扱うため、本細目では列定義に焦点を当て、NULL可否とDEFAULTの付与、コメントが使える環境であれば列コメントの付け方まで復習する。作成前に同名テーブルの存在を確認し、列順や既定値が意図どおりかをサンプル作成で確かめる姿勢を持つ。実行後は定義情報を参照し、期待どおりに反映されたかを検証する。本細目では、与えられた仕様からCREATE TABLE文を正しく記述し、列の型・長さ・NULL可否・DEFAULTを適切に定義できることまでが到達目標である。
③ 制約問題演習では、データの品質と整合性を守るためにどの制約が必要かを、文章要件から読み解く練習を行う。まず、テーブル内で必ず一意になるべき列や列の組合せを特定し、主キーとUNIQUEのどちらを採用すべきかを判断する。次に、他テーブルの行に結び付くべき列を洗い出し、外部キーの参照先と参照元の対応関係を言語で説明できるようにする。値域や関係に基づく業務ルールはCHECKで表現可能かを検討し、例えば数量は0以上、状態は定義済みの集合のみ、終了日は開始日以降など、守るべき条件を具体化する。NULLを許すか否かは入力の現実性と検索の容易さの両面から決める。DEFAULTは入力の省力化と一貫性維持の観点で必要性を評価する。想定される挿入・更新のシナリオを用い、制約により防げる不正データと許容すべきデータを区別できるかを確認する。本細目では、仕様から必要な制約の種類と適用列を選定し、その狙いと効果を説明できることまでが到達目標である。
④ 制約SQL演習では、決定した制約をSQLで正確に表現し、テーブル作成時および作成後に適用する方法を身に付ける。CREATE TABLEでは、列定義に続けて CONSTRAINT 制約名 PRIMARY KEY(列), UNIQUE(列...), FOREIGN KEY(列) REFERENCES 参照表(列), CHECK(条件) のように表外に記述する形式と、列の直後にPRIMARY KEYやCHECKを記す形式の双方を使い分ける。既存表には ALTER TABLE 表名 ADD CONSTRAINT 制約名 種別(...); を用いて追加し、不要になった制約は DROP CONSTRAINT で削除する。エラーメッセージから違反列や違反値を読み取り、定義ミスかデータ側の問題かを切り分ける力も重要である。制約名は一意で意味が伝わる命名とし、複合列の順序に注意する。本細目では、CREATE TABLEおよびALTER TABLEで主キー・UNIQUE・外部キー・CHECK等の制約を正しく記述し、追加・削除・有効化/無効化の基本操作を行えることまでが到達目標である。
キーワード ① CREATE TABLE ② ALTER TABLE ③ 主キー ④ 外部キー ⑤ CHECK制約
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第25回の復習として、要件文から実体と出来事を抽出し、保持すべき属性と計算で得られる属性を明確に分離し、列ごとのデータ型 長さ NULL可否 DEFAULTを根拠付きで再決定することである。主キー候補を複数案出し、一意性と値の安定性の観点から採否を説明できるようにし、命名規約の一貫性と重複列や繰り返し列の排除を点検することである。仕様をCREATE TABLE文へ正確に写像し、精度指定や日付型の選択、NULLとDEFAULT、必要に応じた列コメントまで誤りなく記述し、作成後に定義情報で検証することである。制約については、主キーとUNIQUEの使い分け、外部キーの参照整合、CHECKによる値域や日付関係の表現、NOT NULLとDEFAULTの妥当性を想定シナリオで検証することである。さらに、CREATE TABLEおよびALTER TABLEでの制約定義 追加 削除 有効化 無効化の手順、複合列の順序と制約名の命名、違反時のエラーメッセージから定義ミスとデータ不備を切り分ける読解を確認しておくことである。
【予習】
次回は「追加」の導入であり、データの追加 一括追加 大量データの投入に入る前段の準備を行うことである。対象表の列名 型 列順 NULL可否 DEFAULT 主キー 外部キー CHECKの有無を一覧化し、最小限の有効行を構成する必須列と任意列を判別しておくことである。単一行追加の基本形 INSERT INTO 表名(列...) VALUES(...); を正確に書けるようにし、列を省略した場合の挙動を定義から説明できる準備をすることである。外部キー参照先の存在やCHECK条件を満たす小規模テストデータを用意し、一括追加や大量投入でどの制約が支障となり得るかを概念レベルで想像しておくことである。接続方法と表定義の確認コマンドを再確認し、実行時の混乱を避ける準備を整えることである。

26 追加(【データ操作・総合】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第26回はデータ操作編の基礎として、INSERTによる単一行の追加、INSERT…SELECT等による一括追加、さらに実運用を見据えた大量データ投入の要点を体系化することを目的とする。第21〜25回で設計したテーブルに対し、型整合・既定値・NULLの扱い、列対応の検証、取込前提と性能上の留意点(インデックス・トランザクション単位等)を踏まえ、正確かつ効率的に投入できる力を養成する。また、検証データ投入の自動化と手順のスクリプト化にも触れ、次回の更新・削除、トランザクション制御、総合演習への橋渡しとする。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① データの追加 ② データの一括追加 ③ 大量データの投入
細目レベル ① データの追加は、既存のテーブルに新しい行を挿入する操作であり、基本は INSERT 文で記述するものである。構文は「INSERT INTO テーブル名 (列1, 列2, ...) VALUES (値1, 値2, ...);」であり、列名を明示すると、テーブル定義の物理的な列順に依存せず安全である。値は各列のデータ型に適合させる必要があり、文字列は引用符で囲み、日付・時刻はDBが受け付ける書式で与えるのである。省略した列には、定義済みの既定値が入るか、NULL を許す列なら NULL が入る。明示的に DEFAULT や NULL を書くことも可能である。1回の VALUES で1行を追加するのが単一行挿入であり、まずはこの形を正確に使えることが重要である。本細目では、INSERT 文の基本構文、列名の明示、値・DEFAULT・NULL の与え方の理解までが到達目標である。
② 一括追加は、1つのSQLで複数のデータをまとめて挿入する方法である。代表的には「INSERT ALL INTO 商品 (ID, 名前) VALUES (1, 'A') INTO 商品 (ID, 名前) VALUES (2, 'B') SELECT * FROM dual;」のように、複数の INTO ... VALUES を並べて最後に SELECT * FROM dual を付す書き方を用いる。各タプルは列数と型の並びを統一する必要がある。なお Oracle は複数行 VALUES 句をサポートしないため、手元データを列挙して入れる場合は「INSERT INTO 目標テーブル (列...) SELECT 1, 'A' FROM dual UNION ALL SELECT 2, 'B' FROM dual」のように SELECT と UNION ALL を組み合わせて代替する。また、別テーブルやビューの結果を取り込む「INSERT INTO 目標テーブル (列...) SELECT 列... FROM 元テーブル ...;」も一括追加であり、SELECT 側の列数と順序、型の対応を目標列に合わせることが肝要である。本細目では、INSERT ALL と INSERT ... SELECT の基本構文、列対応と型整合の確認という注意点の理解までが到達目標である。
③ 大量データの投入は、数万行から数千万行規模を効率よく取り込むための手法である。一般にアプリケーションからの単純な繰り返し INSERT では遅いため、各DBが備える手段を用いる。例として、PostgreSQL の COPY、MySQL の LOAD DATA INFILE、SQL Server の BULK INSERT などがある。これらはCSVやTSVといったテキストファイルを前提とし、区切り文字、引用記号、エスケープ、文字コード、ヘッダ行の有無、NULL の表現などをオプションで指定できる。投入前にファイルの形式を定義に合わせ、列順と型を一致させることが重要である。また、非常に大きなファイルでは分割して順に投入する方法も有効である。インデックスや計算の多さは挿入速度に影響し得るため、必要最小限の構成で投入する設計も考えるべきである。本細目では、代表的な大量データの投入手段の位置付けと、CSV等の前提条件や主要オプションの意味の把握までが到達目標である。
キーワード ① INSERT ② INSERT ALL ③ INSERT INTO ④ COPY ⑤ LOAD
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
今回扱った「追加」について、INSERT 文の基本構文を自分の言葉で整理しておくこと。列名を明示する理由(物理列順への非依存)と、各値の型適合、文字列の引用、日付時刻の受理書式、DEFAULT と NULL の明示指定、単一行挿入の正確な記述を確認するのである。次に一括追加の整理として、INSERT ALL による INTO … VALUES の列挙と、Oracle 環境での SELECT と UNION ALL の代替、さらに INSERT … SELECT による別表取り込みの使い分けをまとめ、目標列との列数・順序・型整合を点検できるようにするのである。最後に大量データ投入の要点として、COPY や LOAD DATA INFILE など代表的手段の位置付けと、CSVTSVの区切り文字 引用記号 エスケープ 文字コード ヘッダ有無 NULL表現といった主要オプションの意味を整理すること。投入前のファイル整形チェック、巨大ファイルの分割、インデックスや計算列が速度に与える影響にも言及し、効率的な投入手順を要約しておくのである。
【予習】
次回は「変更・削除」を扱うため、UPDATE と DELETE の基本的な役割と適用場面を把握しておくことが有効である。UPDATE テーブル名 SET 列=値 WHERE 条件 および DELETE FROM テーブル名 WHERE 条件 の基本形を資料で確認し、WHERE の有無や条件式の違いが影響範囲を大きく左右する事実を意識化しておくのである。また「更新+追加」の入口として、主キー等で既存行の有無を判定し、存在すれば更新し無ければ追加するという課題設定があることのみを押さえ、具体的な実装名や最適化には踏み込まないこと。演習対象テーブルの主キーやユニーク列名と型を再確認し、どの列をどの条件で変更すべきかを簡潔に言語化しておくと、次回の操作手順の理解が滑らかになるのである。

27 変更・削除(【データ操作・総合】【基礎】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第27回は「変更・削除」を扱い、UPDATE/DELETEの基本構文とWHERE条件による対象限定、事前SELECTによる影響範囲の確認、自己参照更新やNULL設定、行単位削除の性質を実践的に体得することを目的とする。さらに、存在すれば更新・なければ追加という更新+追加の基本手順とキー条件の設計を学び、制約と整合性を崩さない安全なDML運用の基礎を固める。次回のデータ操作復習およびトランザクション制御への橋渡しとなる位置づけである。前回の「追加」で学んだ挿入と対をなし、参照整合性やトリガの影響、誤操作防止のガイドライン(条件確認、件数確認、段階的実行)を意識した手順を確立することで、実務の安全な変更管理へ接続する。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① データの更新 ② データの削除 ③ データの更新+追加
細目レベル ① データの更新は、既に存在する行の列値を変更する操作である。基本構文は 「UPDATE テーブル名 SET 列1=値1, 列2=式2 WHERE 条件;」であり、SETでは複数列を同時に指定できる。WHEREを省略すると全行が更新対象となるため、意図せぬ一括変更を避けるには条件で対象行を絞り込むことが肝要である。列の新しい値には、定数だけでなく、他の列を用いた式や関数の結果を使える。例えば 在庫=在庫-1 のような自己参照更新が可能である。NULLを設定すれば値の未設定を表せるが、意味を理解して用いるべきである。実行前に同じ条件でSELECTして対象を確認する習慣も有効である。本細目では、UPDATE文の目的、基本構文、SETとWHEREの役割、複数列・自己参照を含む基本的な更新方法の理解までが到達目標である。
② データの削除は、テーブルから不要な行を取り除く操作である。基本構文は「DELETE FROM テーブル名 WHERE 条件;」であり、WHEREで条件に合致した行のみが削除される。WHEREを省略すると全行が削除されるため、慎重な条件指定が重要である。削除は列単位ではなく行単位で行われる点に注意する。条件には、等価比較、範囲、文字列一致など、これまで学んだ表現を用いられる。誤削除を防ぐため、まず同じ条件でSELECTして対象行を確認し、件数や内容に問題がないかを確かめると安全である。削除後はその行は結果集合に現れなくなるため、後の集計や結合の前提も変化することを意識するべきである。本細目では、DELETE文の目的、基本構文、WHEREによる対象指定と全件削除の挙動、削除が行単位であるという性質の理解までが到達目標である。
③ データの更新+追加は、「既存なら更新、なければ新規追加」を一連の操作で実現する考え方である。実務ではマスタの差分取込などで頻出する。初期段階ではまず SELECT で存在確認を行い、存在しなければ INSERT、存在すれば UPDATE の順で処理する基本形を学修する。要点は、照合に使うキー条件を明確化し、更新時に書き換える列と、追加時に挿入する列・値を過不足なく指定することである。まずは小さなデータで動作を確認し、想定どおりに一致時と不一致時が切り替わることを確かめると良い。本細目では、更新+追加が必要となる場面の理解と、SELECT→INSERT/UPDATE の基本的な手順と要素(キー条件、更新列、追加列)の把握までが到達目標である。
キーワード ① UPDATE ② DELETE ③ WHERE ④ SET ⑤ INSERT
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第27回の範囲である「データの更新」「データの削除」「データの更新+追加」を整理すること。UPDATE の基本構文(UPDATE テーブル名 SET 列=値 WHERE 条件)を正確に記述できるようにし、SET での複数列更新、式や関数の利用、在庫=在庫-1 のような自己参照更新、NULL 設定の意味を自分の例で確認すること。WHERE を省略すると全行が対象となるため、同一条件で事前に SELECT して対象件数と内容を確認する手順を徹底すること。DELETE は行単位の操作であり、DELETE FROM テーブル名 WHERE 条件 の構文と、WHERE 省略時の全件削除の危険性を理解すること。削除後に集計や結合の結果が変化する点を小規模データで検証しておくこと。更新+追加は、照合に用いるキー条件を明確にし、存在時は UPDATE、不在時は INSERT とする手順を、更新列・追加列を過不足なく列挙したチェックリストとして自分の言葉でまとめること。
【予習】
第28回はデータ操作の復習演習であるため、基本的な DML の記述と実行準備を整えること。INSERT INTO テーブル名(列…) VALUES(…)、UPDATE テーブル名 SET 列=式 WHERE 条件、DELETE FROM テーブル名 WHERE 条件 の基本形を確実に再確認すること。演習対象テーブルの列名・データ型・NOT NULL・DEFAULT・主キーなどの定義を事前に把握し、値の型や必須列を見誤らないようにすること。少数のサンプルデータを用意し、WHERE 条件で対象行を特定するための等価比較・範囲条件・文字列一致の書き方を確認しておくとよい。実行前に同一条件で SELECT して件数確認を行う手順を復習し、利用するクライアントツールで即時に実行できる状態にしておくこと。

28 データ操作復習(【データ操作・総合】【応用】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第28回は、データ操作の総復習として、業務要件を読み解きINSERT/UPDATE/DELETEへ正確に落とし込む力を鍛えることを目的とする。列名明示と型整合、WHERE条件の設計、影響行数の検証、段階的適用など安全手順を徹底し、複数列更新や削除の注意点まで定着させる。再実行しても同じ結果となる記述を志向し、順序や暗黙の既定値に依存しない堅牢なDMLの作法を確認する。第26・27回の基礎を統合し、次回のトランザクション制御と総合演習への橋渡しを担う位置づけである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① データ操作問題演習 ② データの追加SQL演習 ③ データの更新・削除SQL演習
細目レベル ① 本細目では、業務要件を読んでINSERT・UPDATE・DELETEのいずれを用いるかを判断し、適切なテーブル・列・値・条件へと落とし込む力を鍛える。問題は、追加・更新・削除の基本形から、複数列の同時更新や条件の組み合わせなど段階的に構成する。典型的な誤りは、列順と値の対応の取り違え、文字列リテラルのクオート忘れ、日付の書式不一致、そしてWHERE条件の漏れで全件を対象にしてしまう点である。安全に進めるため、まず対象となる条件を小さく設定して影響行数を確認し、期待した件数と一致してから本番の条件に広げる手順を徹底する。演習では、要件のキーワード(対象列、変更内容、対象範囲)を下線で拾い、擬似コードで処理を言語化してからSQLに翻訳する習慣を身につける。本細目では、要件の読み解きからDMLの基本形への正確な変換手順の理解までが到達目標である。
② 本細目では、INSERT文の構文を正確に記述し、意図した行を安全に追加する練習を行う。基本は INSERT INTO テーブル名(列1, 列2, ...) VALUES (値1, 値2, ...) の形であり、列名リストを明示して列と値の対応を固定することが誤り防止の第一歩である。複数行の追加では、複数の INTO ... VALUES を並べて最後に SELECT * FROM dual を付す書き方を用い、各行で列数とデータ型の整合をとる。省略可能な列は、必要に応じてDEFAULTを利用するか列リストから外す。数値・文字列・日付の各リテラルは型に応じた表記とクオートを用いる。文字列中の区切り記号は適切にエスケープし、桁あふれや書式不一致を避ける。追加順序に依存しないよう列名は必ず明示し、読みやすい整形(列を縦にそろえる等)で検証しやすくする。影響行数の出力で投入件数を確認し、期待値と照合する習慣をつける。本細目では、単一行・複数行のINSERT文を列名明示で正しく記述し、値と型の整合を取る実践的手順の理解までが到達目標である。
③ 本細目では、UPDATEとDELETEの基本構文を用いて、対象行を正しく絞り込みつつ値を変更・除去する技能を養う。UPDATEは UPDATE テーブル名 SET 列1=値1, 列2=式2 WHERE 条件 の形で記述し、複数列の同時更新や計算式による上書き、NULLの明示的設定を扱う。DELETEは DELETE FROM テーブル名 WHERE 条件 とし、WHEREを欠くと全件が対象になるため、条件の設計を最重視する。条件には比較・範囲・集合の組み合わせを用い、論理演算子の優先順位に注意する。安全運用のため、まず限定的な条件で影響行数を確かめ、期待件数と一致したうえで本来の条件へ段階的に広げる。また、ORDER BYに依存した更新・削除は行わないという前提で、再実行しても同じ結果となる記述を心がける。本細目では、UPDATEとDELETEの基本構文、WHERE条件による対象行の適切な絞り込み、複数列更新の記述までが到達目標である。
キーワード ① INSERT ② UPDATE ③ DELETE ④ WHERE
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
第28回で扱ったデータ操作復習の範囲に限り、業務要件からDMLを選択し正確なSQLに落とし込む手順を自分の言葉で整理すること。INSERTは列名を必ず明示し、値と型の整合、文字列クオート、日付書式、DEFAULTの扱いを確認すること。複数行追加ではINSERT ALL INTO ... VALUES ... INTO ... VALUES ... SELECT * FROM dualの形を再現できるようにすること。UPDATEとDELETEはWHERE条件の設計を最重視し、限定条件で影響行数を確認してから本条件へ広げる手順を説明すること。典型的誤り(列順と値の取り違え、WHERE漏れ、論理演算子の優先順位誤解、NULL設定漏れ)を具体例とともに洗い出し、要件のキーワード抽出から擬似コード化、SQLへの翻訳、複数列同時更新の記述を再確認すること。再実行しても同じ結果となる記述を心がけること。
【予習】
第29回ではトランザクションを扱うため、その入口として「一連のDMLをひとまとまりで扱い、成功時に確定し異常時に取り消す」という考え方を言語化しておくこと。COMMITとROLLBACKという基本操作の役割名称と、SAVEPOINTで途中地点に印を付けられるという概念を確認すること。使用するクライアントの自動コミット設定の有無と切り替え方法を調べ、簡単なINSERT→UPDATE→DELETEの手順書を用意して、確定前後で結果がどう変わるかを観察できる準備をしておくこと。

29 トランザクション(TCL)(【データ操作・総合】【応用】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
第29回は、データ操作の仕上げとしてトランザクション制御を扱う。目的は、業務上ひとまとまりの変更を原子性を保って管理し、適切に確定(COMMIT)・取消(ROLLBACK)できる判断力と手順を身につけることである。さらにSAVEPOINTにより段階的に戻せる実務的な進め方を学び、影響行数や検証用SELECTで結果を確認してから確定する習慣を確立する。これにより、26〜28回の追加・更新・削除を整合性と安全性の観点から運用に耐える形に統合し、最終回の総合演習で堅牢なデータ操作を遂行する基盤を完成させる位置づけである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① トランザクションの考え方 ② COMMITとROLLBACK ③ SAVEPOINT
細目レベル ① トランザクションとは、データベースに対する複数の変更操作をひとまとまりの単位として扱う考え方である。ひとまとまりは「全部成功するか、全部なかったことにするか」のどちらかでなければならない。例えば在庫を減らし、受注を登録する処理は片方だけ成功しても困るため、同じ単位で扱う。一般に処理は、開始→変更の実行→確定または取り消し、という流れになる。単位を決めて扱うことで、途中でエラーや入力ミスがあっても全体を安全にやり直せる。何を同じ単位に束ねるかは業務の意味に合わせて決めることが重要である。本細目では、トランザクションの定義と目的、基本的な流れの理解までが到達目標である。
② COMMITとROLLBACKは、トランザクションの終わり方を決める操作である。COMMITは、そのトランザクション内で行ったINSERT・UPDATE・DELETEなどの変更を確定し、データベースに保存する。確定後は変更を元に戻すことはできない。ROLLBACKは、トランザクション開始以降の変更を取り消し、処理前の状態に戻す。誤った更新に気づいた場合や途中で条件が満たせなくなった場合に用いる。実行例は COMMIT; および ROLLBACK; の単独文である。実務では、影響行数や検査用の問い合わせで内容を確認し、問題がなければCOMMIT、疑問があればROLLBACKという判断を徹底するのが基本である。本細目では、COMMITとROLLBACKの役割と効果、基本的な使い分けの理解までが到達目標である。
③ SAVEPOINTは、進行中のトランザクションの途中に「戻り先の目印」を付ける仕組みである。長い処理の中で段階的に確認しながら進めたいときに有効である。構文は SAVEPOINT 名; により保存点を作成し、問題が起きたら ROLLBACK TO SAVEPOINT 名; でその地点まで変更を戻す。これによりトランザクション全体を取り消さず、必要な範囲だけをやり直せる。保存点は複数作成でき、同じ名前で作り直すとより新しい位置に更新される。不要になった保存点は RELEASE SAVEPOINT 名; で解放できる。なお、保存点に戻ってもトランザクション自体は継続している点を理解しておくべきである。本細目では、SAVEPOINTの目的と基本操作(作成・戻し・解放)の理解までが到達目標である。
キーワード ① トランザクション ② COMMIT ③ ROLLBACK ④ SAVEPOINT
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
トランザクションの考え方、COMMITとROLLBACK、SAVEPOINTを中心に整理すること。トランザクションは複数の変更を一単位として扱い「全部成功か全部取り消し」であること、開始→変更→確定または取り消しの流れを具体例(在庫減と受注登録)で説明できるようにすること。COMMITは変更の確定で元に戻らない、ROLLBACKは開始以降の変更の取り消しである点を区別し、COMMIT; と ROLLBACK; を正確に書けるようにすること。影響行数や検査用の問い合わせで内容を確認し、問題なければCOMMIT、疑義があればROLLBACKという判断基準を自分の言葉で要約すること。SAVEPOINTは途中の戻り先であり、SAVEPOINT 名、ROLLBACK TO SAVEPOINT 名、RELEASE SAVEPOINT 名の基本操作、同名再作成や複数保存点の扱い、保存点に戻ってもトランザクション自体は継続する点を説明できるようにしておくこと。
【予習】
次回はSQL総合演習である。演習の入口として、扱うテーブルの列名とデータ型を読み取り、必要最小限のデータ定義と追加をイメージできるよう、これまでの基本構文を再確認しておくことが望ましい。特に、CREATE TABLEの列定義や主な制約の読み書きの要点、INSERTでの列指定と値の対応、更新や削除内容の確認に用いる簡潔なSELECTの書き方を復習しておくとよい。演習中に迷わないよう、SQLを実行する環境で基本的な文の実行手順と結果の読み取り方を確認し、テーブル作成後にデータを少量追加して結果を確かめる一連の流れを頭の中でシミュレーションしておくこと。詳細な解法の作り込みには踏み込まず、全体を通す基礎操作の整備に留めること。

30 SQL総合演習(【データ操作・総合】【演習】) 科目の中での位置付け この科目では、リレーショナルデータベース技術を体系的に学び、SQLによるデータの取得・更新・運用の基礎から実践的な応用までを深く理解することを目的とする。全30回の講義では、データ抽出の基礎、関数と式、集計・グループ化、複数表の結合、サブクエリ・集合演算、テーブル定義と制約によるデータの保全、データベース操作言語(SQL)によるデータ操作、トランザクション制御、そして総合演習に至るまで幅広く学ぶ構成である。
今回の授業の目的は、全編で培った要件分解力・設計力・実装力を統合し、要件を正確なSQLと適切なテーブル定義・データ操作に落とし込む実務的遂行力を確認・定着させることである。最終回として、選択・結合・集計の横断演習、CREATE/INSERTの設計実装、UPDATE/DELETEを用いた安全な操作とトランザクション制御を通し、検証と振り返りまで自律的に完遂できる力を仕上げる位置づけである。

・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年
・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年
・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
コマ主題細目 ① SQL問題演習 ② テーブル作成とデータ追加演習 ③ データ操作総合演習
細目レベル ① 本細目では、これまで学んだSELECT中心の知識を横断して、与えられた要件をSQLに翻訳する練習を行う。はじめに、問題文から「必要な列」「対象となる行の条件」「並べ替えや集計の有無」「結合の必要性」といった要素を箇条書きにして分解することが重要である。次に、条件で絞り込み、必要なら結合し、最後に集計や並べ替えを適用するという段階的な作り方で誤りを減らす。各段階で中間結果をSELECTで確認し、件数とサンプルをチェックすることが正確性の鍵である。NULLの影響、比較演算子の境界、文字列や日付の一致条件など細部の仕様を意識し、必要最小限の列のみを出力する姿勢を徹底する。誤答時には、要件分解の抜けや条件の訳し間違いを原因から特定し、修正の痕跡を残して再検証する。本細目では、要件の分解からSQLの構成要素を選び取り、段階的に正答に到達する解法手順の確立までが到達目標である。
② 本細目では、テーブルを新規に設計して作成し、初期データを追加する一連の手順を演習する。列名とデータ型を業務上の意味に沿って決め、識別子となる列には主キー、空であってはならない列にはNOT NULL、既定値が妥当な列にはDEFAULTを与えるなど、最小限の定義を明確にする。CREATE TABLEにより作成後、定義が意図通りかを確認し、INSERT文で行を追加する。複数データの一括追加では、値の並び順と列の型整合、文字列の引用符、日付・時刻の表記に注意する。追加後はSELECTで件数と内容を検査し、境界値や重複の有無を点検する。エラー発生時にはメッセージから型不一致や制約違反を読み取り、定義または入力値のどちらを直すべきかを切り分ける姿勢が重要である。本細目では、適切な列定義でテーブルを作成し、意図した型と制約に沿ってデータを正しく追加できることの確認までが到達目標である。
③ 本細目では、データの追加・更新・削除を組み合わせ、現実的なシナリオに沿って安全に操作する力を養う。まず、操作対象の特定を厳密に行うため、UPDATEやDELETEの前に同じWHERE条件でSELECTを実行し、件数と代表例を確認する。WHEREの欠落や誤りは全件更新・削除につながるため、主キーや一意列を活用した限定が基本である。更新では、列ごとの変更後の値を明確化し、境界条件やNULLの扱いを検討する。削除では、関連情報の参照が必要な場合に備え、削除前後の件数と整合をチェックする。追加と更新が混在するケースでは、存在確認のSELECTを経て、該当すれば更新、存在しなければ追加という手順を分けて実施し、各ステップの結果を検証する。実行後は、期待する状態に達したかをSELECTで確認し、差分を記録して振り返る。本細目では、対象行の事前確認から安全な更新・削除・追加の実行と結果検証までが自律的に運用できることの確認までが到達目標である。
キーワード ① 要件分解 ② SELECT ③ WHERE ④ CREATE TABLE ⑤ INSERT
コマの展開方法 社会人講師 AL ICT PowerPoint・Keynote 教科書
コマ用オリジナル配布資料 コマ用プリント配布資料 その他 該当なし
小テスト 「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施します。
復習・予習課題 【復習】
今回の総合演習の復習として、まずSQL問題演習で行った要件分解を自分の手順として定式化しておくべきである。必要な列 対象行 条件 結合 集計 並べ替えを箇条書きにし、段階的にWHERE JOIN 集計 ORDER BYを適用しつつ、中間結果をSELECTで検証する流れを再現すること。NULLの影響や比較境界 文字列や日付の一致条件を再点検し、必要最小限の列のみを出力する癖を固めること。次に、テーブル作成とデータ追加では、列名と型 主キー NOT NULL DEFAULTの最小定義を見直し、CREATE TABLE後の定義確認とINSERTの型整合 引用符 日付書式の注意点を整理すること。最後に、データ操作総合では、UPDATE DELETE前に同条件のSELECTで件数を確認し、主キーや一意列で対象を限定する作法、追加と更新の切り分けと結果検証の手順を、実例付きで記録しておくことが重要である。
【予習】
次回は最終回のため授業は実施しない。ゆえに予習は、今回までの成果を提出可能な形に整える入口的準備に留めるべきである。要件分解メモ 完成SQL テーブル定義DDL 追加に用いたINSERT文 操作前後の確認用SELECTをひとまとまりにし、実行順序と前提条件を簡潔なREADMEに記すこと。また、実行環境の再現方法 接続情報の伏せ方 サンプルデータの生成手順を整理し、エラーメッセージと対応策の対応表 未解決の論点の箇条書きを用意しておくこと。これにより学修の締めと今後の自習への橋渡しが円滑になるのである。

履修判定指標
履修指標履修指標の水準キーワード配点関連回
データクエリ基礎 【★初級】
・SELECT文の基本構造を理解している。
・FROM句の役割を理解している。
・WHERE句の使用方法を理解している。
・ORDER BY句の使い方(ASC/DESC)を理解している。
・LIMITおよびOFFSETの使い方を理解している。
・NULLの意味と比較時の扱いを理解している。
・IS NULL/IS NOT NULLの使い方を理解している。
・CASTによる型変換の基本を理解している。
・数値関数(ABS/ROUNDなど)の基本を理解している。
・文字列関数(LENGTH/SUBSTRなど)の基本を理解している。
・日付時刻関数(DATE/TIMESTAMPなど)の基本を理解している。
【★★中級】
・NULL の比較挙動を理解し、IS NULL/IS NOT NULL を適切に使い分けられる。
・数値・文字列・日付関数を単独または複合で適用し、型変換と併せて所望の列値を得られる。
【★★★上級】
・要件を列・行・順序・件数に分解し、誤りやすい境界値や NULL の影響を検証手順込みで最小化できる。
SELECT,WHERE,ORDER BY,LIMIT/OFFSET,NULL,数値/文字列/日付関数,型変換 30 1-8
集約とグループ化 【★初級】
・COUNT/SUM/AVG/MAX/MINの基本を理解している。
・DISTINCTの効果を理解している。
・GROUP BYの基本を理解している。
・HAVING句の役割を理解している
【★★中級】
・GROUP BY による集計を正しく記述し,HAVING で集計後条件を指定できる。
【★★★上級】
・NULL と DISTINCT/集約の相互作用を説明し,期待件数の根拠を提示して結果を解釈できる。
COUNT,SUM,AVG,MAX,MIN,DISTINCT,GROUP BY,HAVING,NULL - 9-11
複合データクエリ 【★初級】
・JOINの基本概念を理解している。
・INNER JOINの結果の特徴を理解している。
・LEFT/RIGHT/FULL JOINの結果の特徴を理解している。
・ON句の役割を理解している。
・USING句の役割を理解している。
・等価結合と非等価結合の違いを理解している。
・自己結合(SELF JOIN)の考え方を理解している。
【★★中級】
・等価/非等価結合を選択し,ON/USING の違いと使い分けを説明できる。
【★★★上級】
・外部結合・自己結合・多段結合を組み合わせ,重複や欠損の原因を言語化して修正できる。
JOIN,INNER/LEFT/RIGHT JOIN,ON/USING,自己結合,多段結合 30(上記1つとまとめる) 12-16
サブクエリと集合演算 【★初級】
・サブクエリ(非相関)の基本を理解している。
・サブクエリ(相関)の基本を理解している。
・EXISTS述語の意味を理解している。
・IN述語の意味を理解している。
・ANY/ALLの意味を理解している。
・UNION/INTERSECT/EXCEPTの意味を理解している。
【★★中級】
・相関サブクエリと EXISTS/IN の等価変換を説明し,どちらでも解ける設計ができる。
【★★★上級】
・UNION/INTERSECT/EXCEPT を用いた重複/差集合の要件を,結合への置換も含めて選択・根拠説明ができる。
サブクエリ(非相関/相関),EXISTS,IN,ANY/ALL,UNION,INTERSECT,EXCEPT - 17-20
データ定義と制約 【★初級】
・CREATE TABLE文の基本を書式とともに理解している。
・ALTER TABLE文の基本操作を理解している。
・代表的なデータ型(INTEGER/NUMERIC/VARCHAR/DATE/BOOLEAN)の用途を理解している。
・SERIAL/IDENTITY/SEQUENCEの役割を理解している。
・PRIMARY KEYの役割を理解している。
・UNIQUE制約の役割を理解している。
・FOREIGN KEY/REFERENCESの役割を理解している。
・NOT NULL制約の役割を理解している。
・CHECK制約の役割を理解している。
・DEFAULTの役割を理解している。
【★★中級】
・主キー,一意制約,外部キー,CHECK の狙いを説明し,仕様から必要な制約を選べる。
CREATE TABLE,データ型,PRIMARY KEY,UNIQUE,FOREIGN KEY,NOT NULL,CHECK,DEFAULT 20(上記1つとまとめる) 21-25
データ操作 【★初級】
・INSERT文の基本構造を理解している。
・UPDATE文の基本構造を理解している。
・DELETE文の基本構造を理解している。
【★★中級】
・実行前に同条件 SELECT で件数・内容を検証し,影響行数で結果確認する安全手順を説明できる。
【★★★上級】
・存在確認に基づく「一致なら更新/不一致なら追加」の手順を要件から設計し,検証記録まで残せる。
INSERT,UPDATE,DELETE,列名明示,WHERE 条件設計 - 26-28
トランザクション制御 【★初級】
・トランザクションの概念を理解している。
・COMMITの役割を理解している。
・ROLLBACKの役割を理解している。
・SAVEPOINTの役割を理解している。
【★★中級】
・COMMIT/ROLLBACK の役割・不可逆性を理解し,検査用問い合わせに基づく判断を述べられる。
【★★★上級】
・長い処理に SAVEPOINT を設計し,部分的巻き戻しと解放を適切に使い分けられる。
トランザクション単位,COMMIT,ROLLBACK,SAVEPOINT 20(上記1つとまとめる) 29,30
評価方法 テスト
評価基準 評語
    学習目標をほぼ完全に達成している・・・・・・・・・・・・・ S (100~90点)
    学習目標を相応に達成している・・・・・・・・・・・・・・・ A (89~80点)
    学習目標を相応に達成しているが不十分な点がある・・・・・・ B (79~70点)
    学習目標の最低限は満たしている・・・・・・・・・・・・・・ C (69~60点)
    学習目標の最低限を満たしていない・・・・・・・・・・・・・ D (60点未満)
教科書
参考文献 ・増永 良文『リレーショナルデータベース入門[第3版]』、サイエンス社、2023年 ・ミック『達人に学ぶDB設計徹底指南書 ~初級者で終わりたくないあなたへ』、翔泳社、2012年 ・ミック『SQLパズル 第2版 プログラミングが変わる書き方/考え方』、翔泳社、2007年
実験・実習・教材費