インプレス[コンピュータ・IT]ムック ミックの楽しいSQLパズル 解いて身につくSQLの考え方&書き方
インプレス / 2026年02月20日 / 全383ページ
本書は実務に即した練習問題を通じ、SQLの本質を学ぶ一冊です。単なるコードの模写ではなく、自ら手を動かすパズル形式で「SQLを考える力」を鍛えます。ウィンドウ関数やCASE式、再帰など標準SQLを幅広く網羅し、基礎から応用まで段階的に習得可能です。解説では思考プロセスを重視し、複数の別解を比較することで最適な書き方を選ぶ「審美眼」を養います。さらに実行計画に基づいたパフォーマンス視点の解説も充実。初級から中級者が、実戦で役立つ最適なクエリを書くためのスキルを着実に身につけられる構成です。
目次
- ミックのSQL パズルへようこそ!
- 本書を読む前に動作確認環境サンプルコードのダウンロード本書情報および正誤表のWeb ページ
- 第1章 宣言的言語としてのSQL
- パズル1-1 データベースの絶対法則――主キー制約
- 問題❶ 主キーとランダムな値
- パズル1-2 上司は誰?――参照整合性制約
- 問題❷ 外部キーの設定
- 問題❸ 自分の上司を特定する
- パズル1-3 アルファベット――正規表現
- 問題❹ アルファベットを少なくとも1文字含む
- 問題❺ アルファベットを1文字も含まない
- 問題❻ すべてアルファベットの文字列
- パズル1-4 タバコは20 歳になってから――条件法
- 問題❼ 20歳未満の喫煙者を探す
- パズル1-5 都道府県の切り出し――文字列操作
- 問題❽ 都道府県だけ切り出す
- 第2章 SQL の論理
- パズル2-1 作業依頼――全称量化①
- 問題❾ 工場の作業工程の管理
- パズル2-2 自然数列の生成――再帰と構成
- ミックのSQL パズルへようこそ!
- 本書を読む前に動作確認環境サンプルコードのダウンロード本書情報および正誤表のWeb ページ
- 第1章 宣言的言語としてのSQL
- パズル1-1 データベースの絶対法則――主キー制約
- 問題❶ 主キーとランダムな値
- パズル1-2 上司は誰?――参照整合性制約
- 問題❷ 外部キーの設定
- 問題❸ 自分の上司を特定する
- パズル1-3 アルファベット――正規表現
- 問題❹ アルファベットを少なくとも1文字含む
- 問題❺ アルファベットを1文字も含まない
- 問題❻ すべてアルファベットの文字列
- パズル1-4 タバコは20 歳になってから――条件法
- 問題❼ 20歳未満の喫煙者を探す
- パズル1-5 都道府県の切り出し――文字列操作
- 問題❽ 都道府県だけ切り出す
- 第2章 SQL の論理
- パズル2-1 作業依頼――全称量化①
- 問題❾ 工場の作業工程の管理
- パズル2-2 自然数列の生成――再帰と構成
- 問題❿ 自然数列を生成
- 問題⓫ レコードに連番を振る
- パズル2-3 テーブルのピボット――CASE 式
- 問題⓬ テーブルのピボットを作る
- 問題⓭ 続・テーブルのピボット
- パズル2-4 誕生日が一致しないのは誰だ?――3値論理とNULL の罠
- 問題⓮ 誕生日の一致する人物を求める
- 問題⓯ 誕生日の一致しない人物を求める
- パズル2-5 複数レコードへの条件設定――更新における分岐
- 問題⓰ 入館証の確認と更新
- パズル2-6 n 番目の値――レコードの順序
- 問題⓱ 前からn 番目のレコード
- 問題⓲ 続・前からn番目のレコード[一般化版]
- パズル2-7 列方向の最大値最小値――NULLの回避
- 問題⓳ 列方向の最大値最小値[PostgreSQL版]
- 問題⓴ 列方向の最大値最小値[他DBMS 対応版]
- 問題21 列方向の最大値最小値[引数3個の場合]
- 第3章 SQL の高度な応用
- パズル3-1 住所の変遷を追う――再帰とポインタチェイン
- 問題22 一番昔の住所を求める
- パズル3-2 可能な日付の組み合わせ――列の組み合わせ
- 問題23 有意味な組み合わせの作成
- パズル3-3 重なる期間の結合――特性関数
- 問題24 連続した勤務期間を求める
- パズル3-4 期間のコンフリクト検出――境界値トラップ
- 問題25 予約期間の重複を判定
- パズル3-5 存在しない組み合わせ――差集合
- 問題26 アイスクリームのラインナップ
- パズル3-6 集合の相等性――テーブルのコンペア
- 問題27 テーブルに違いはあるか?
- 問題28 どの行が違うか?
- 問題29 どの行が同じか?
- パズル3-7 排他的論理和――完全外部結合
- 問題30 2つのテーブルを統合
- 問題31 一致しない行を抽出
- パズル3-8 都市間の経路を求める――再帰共通表式
- 問題32 都市間の最短経路
- パズル3-9 相互フォローの検出――INTERSECT
- 問題33 相互フォロー関係を見つける
- 第4章 SQL で数学パズルを解く
- パズル4-1 順列――自己非等値結合
- 問題34 2 つ選ぶ場合の順列
- 問題35 3 つ選ぶ場合の順列
- 問題36 組み合わせ
- パズル4-2 完全数――HAVING句での条件
- 問題37 完全数を求める
- パズル4-3 ナップザック問題――ビットフラグによるフィルタリング
- 問題38 部分集合の全組み合わせ――行持ちデータの場合
- 問題39 部分集合の全組み合わせ――列持ちデータの場合
- パズル4-4 素数――全称量化②
- 問題40 素数を求める
- パズル4-5 連番の歯抜けを探す――全単射
- 問題41 テーブルの歯抜けチェック
- パズル4-6 連番のカタマリを探す――連続と断絶
- 問題42 連続する中で最大のシーケンスを探す
- 問題43 部分的なシーケンスも含めて求める
- 第5章 ウィンドウ関数――SQL で魔法をかける
- パズル5-1 移動平均――ウィンドウ関数の基礎
- 問題44 移動平均を求める
- 問題45 トレンド分析
- パズル5-2 90%ile 3秒――パーセンタイル
- 問題46 レスポンスタイム要件を満たすか
- パズル5-3 四分位――NTILE関数
- 問題47 分布を4 つに分ける
- 問題48 剰余類
- パズル5-4 中央値――ウィンドウ関数の威力
- 問題49 体重の中央値
- パズル5-5 累計――空のウィンドウ関数が持つ意味
- 問題50 売上の累計
- 問題51 データと件数を一括で取得する
- パズル5-6 最頻値――HAVING句の力
- 問題52 給与の最頻値
- パズル5-7 列方向の折りたたみ――IGNORE NULLS
- 問題53 最初に現われる非NULL 値を探す
- 第6章 SQL で木構造を扱う
- パズル6-1 隣接リストモデル
- 問題54 隣接リストモデルの基本――階層の深さ
- 問題55 上司の抽出(隣接リストモデル)
- 問題56 リーフノードの抽出(隣接リストモデル)
- パズル6-2 入れ子集合モデル
- 問題57 入れ子集合モデルの基本――階層の深さ
- 問題58 上司の抽出(入れ子集合モデル)
- 問題59 リーフノードの抽出(入れ子集合モデル)
- 問題60 ルートノードの抽出(入れ子集合モデル)
- パズル6-3 経路列挙モデル
- 問題61 経路列挙モデルの基本――階層の深さ
- 問題62 上司の抽出(経路列挙モデル)
- 問題63 リーフノードの抽出(経路列挙モデル)
- 問題64 ルートノードの抽出(経路列挙モデル)
- パズル6-4 閉包テーブルモデル
- 問題65 閉包テーブルモデルの基本――階層の深さ
- 問題66 上司の抽出(閉包テーブルモデル)
- 問題67 リーフノードの抽出(閉包テーブルモデル)
- 問題68 ルートノードの抽出(閉包テーブルモデル)
- 第7章 卒業試験
- パズル7-1 すべての列についての条件指定――全称量化存在量化問題69 すべての列が条件を満たす行の抽出
- 問題70 少なくとも1 つの列を満たす条件
- 問題71 「 ちょうどn個」を満たす条件
- 問題72 行持ちテーブルでの件指定
- パズル7-2 ピザ屋の売上――順位による選択問題73 売上の順位を算出する
- 問題74 厳密な順位付け
- パズル7-3 ラベルの読み替え――CASE式の応用問題75 新しい分類での集計――アドホックな集計キー
- 問題76 数値範囲での階級化
- パズル7-4 範囲の重複――次元の拡張問題77 線分の重複――1次元
- 問題78 長方形の重複判定――2次元
- パズル7-5 最小と最大の枝番問題79 枝番の最小値と最大値
- パズル7-6 重複行の削除――論理と集合問題80 誤登録された重複データの削除
- パズル7-7 累計の逆算――ウィンドウ関数大活躍問題81 単月売上の算出
- あとがき
- 索引
- 解答一覧
- 著者紹介
- 奥付
※このデジタル雑誌には目次に記載されているコンテンツが含まれています。それ以外のコンテンツは、本誌のコンテンツであっても含まれていません のでご注意ください。
※電子版では、紙の雑誌と内容が一部異なる場合や、掲載されないページがある場合があります。


![インプレス[コンピュータ・IT]ムック Pythonではじめるクリーンアーキテクチャ SOLID原則/ドメイン駆動設計/テスト駆動開発を実践](http://image.magastore.jp/jp/magastore/loading_192.jpg)








