[PR]今日のニュースは
「Infoseek モバイル」


OracleSQLパズル

サイト設立 2005年8月1日
 最終更新日 2008年8月8日


このサイトは、Joe Celko氏の著書[SQLパズル]の内容をふまえて
構造化定理を意識しつつ、SQLパズルを解くサイトです
Oracle9i以降が対象です


CodeZineの執筆記事

分析関数の衝撃(前編)
分析関数の衝撃(中編)
分析関数の衝撃(後編)
分析関数の衝撃(完結編)


1 基礎編

1-1 キルヒホッフの実証論
1-2 ブール代数
1-3 集合理論
1-4 構造化定理
1-5 3値論理
1-6 select文の評価順序
1-7 ブール代数と集合演算の公式


2 基本編

2-1 主に順次機能に相当

2-1-1 マルチテーブルインサート
2-1-2 連続したスカラー問い合わせ
2-1-3 select文の結果を使ってupdate
2-1-4 連続したnullチェック
2-1-5 集合演算でのnullの扱い
2-1-6 同一定義の他テーブルと比較
2-1-7 要素数が1の集合同士の比較
2-1-8 最も近い倍数に、数値を変換
2-1-9 数値を2進数、16進数に変換
2-1-10 文字列中の指定文字列の数
2-1-11 文字列の末尾から文字を取得
2-1-12 指定文字列の前後の文字列
2-1-13 文字列の指定文字を消去
2-1-14 文字列の指定文字以外を消去
2-1-15 連続した等しいかのチェック
2-1-16 式のリストの比較その1
2-1-17 式のリストの比較その2
2-1-18 nulls Firstとnulls Last

2-2 主に選択機能に相当

2-2-1 SQLでの条件分岐
2-2-2 select句でサブクエリ
2-2-3 in演算子の引数にサブクエリ
2-2-4 インラインビューを使用してmerge
2-2-5 条件付きinsert(1レコードのみ)
2-2-6 条件付きinsert(複数レコード)
2-2-7 case式とexists演算子
2-2-8 exists演算子の引数に集合演算
2-2-9 case式とLike演算子
2-2-10 共通集合と論理積
2-2-11 case式とLNNVL関数
2-2-12 merge(1レコードのみ)
2-2-13 anyとallの使い道

2-3 主に繰り返し機能に相当

2-3-1 自己結合と相関サブクエリ
2-3-2 前日のレコードを取得
2-3-3 集合関数のネスト
2-3-4 範囲の重複チェック
2-3-5 モード(最頻値)を取得
2-3-6 メジアン(中央値)を取得
2-3-7 任意の値に対する順位付け
2-3-8 過去の最高売上を取得
2-3-9 自然数の連番を持つ集合を作成
2-3-10 素数を求める
2-3-11 等差数列の和を求めるその1
2-3-12 等差数列の和を求めるその2
2-3-13 素因数分解
2-3-14 階乗を求めるその1
2-3-15 階乗を求めるその2
2-3-16 総積を求める
2-3-17 最小公倍数と最大公約数を求める
2-3-18 複数列の平均値を求める
2-3-19 月ごとの最終日の売上を集計
2-3-20 条件付き平均(重複なし)
2-3-21 条件付き平均(重複あり)
2-3-22 鳩の巣原理で重複を調べる
2-3-23 modを使った数列
2-3-24 逆ソート(リバースソート)
2-3-25 集合関数のdense_rank関数
2-3-26 正順位と逆順位
2-3-27 最小の空き番号を取得その1
2-3-28 最小の空き番号を取得その2
2-3-29 グループごとのモード(最頻値)を取得
2-3-30 グループごとのメジアン(中央値)を取得
2-3-31 標準SQLでメジアン(中央値)を取得
2-3-32 メジアン(中央値)を取得(分析関数版)
2-3-33 文字列の中央値(メジアン)のような値
2-3-34 日付の最小値-1から日付の最大値+1まで補完


3 応用編

3-1 select句で外部結合
3-2 別テーブル優先の抽出
3-3 nullでないデータの中で最小のデータを取得
3-4 順位を求める
3-5 順位(DENSE)が指定した範囲のデータを取得
3-6 空き時間を探索してinsert
3-7 空き時間を探索してupdate
3-8 カレンダーを表示その1
3-9 カレンダーを表示その2
3-10 SCNと、コミット時刻を求める
3-11 指定期間内に誕生日を迎える人を取得
3-12 指定した年月時点での年齢を取得
3-13 IPとホスト名とログイン名を取得
3-14 Width_Bucket関数
3-15 case式と集合関数
3-16 case式とignore nullsその1
3-17 case式とignore nullsその2
3-18 文字列関数とignore nulls
3-19 同じ文字が二文字以上存在するかチェック
3-20 文字列の縦横変換
3-21 文字列のソート
3-22 相関サブクエリで順位付け
3-23 大小関係を出力
3-24 月曜日から出力
3-25 組み合わせの数を取得
3-26 文字クラスをtranslate関数で代用
3-27 full joinとunionの相互変換
3-28 前年との大小関係を求める
3-29 grouping setsで総合計を取得
3-30 初旬、中旬、下旬で集計
3-31 指定件数と打ち切りフラグを出力
3-32 Grouping_ID関数
3-33 銀行型丸め(Banker's Rounding)
3-34 Partitioned Outer Join
3-35 列数固定の集計
3-36 分析関数でのkeepの使用例
3-37 FizzBuzz問題


4 他サイト(@IT)のSQLパズル

4-1 インラインビューで完全外部結合
4-2 インラインビューで集合作成
4-3 select句で1対1の結合
4-4 集合関数を使うスカラー問い合わせ
4-5 case式による他分岐
4-6 select文の結果のレコード件数を取得
4-7 文字を順番にセット
4-8 文字の検索
4-9 階層問い合わせの根を取得
4-10 合計が2位以内のデータを取得
4-11 総合計に対する比率を取得
4-12 階層の総積を取得
4-13 経路を取得
4-14 レコードを一意に特定する列の組み合わせ
4-15 加算の単位元をふまえたouter unionもどき
4-16 重複排除とソート
4-17 最大値の行の値を、他テーブルの最大値の行の値で更新


5 他サイト(2ch)のSQLパズル

5-1 nvl関数の引数に集合関数
5-2 他レコードに対する存在チェック
5-3 RowIDを使用した、同一レコードかのチェック
5-4 条件に応じた、他レコードの存在チェック
5-5 リストの中から最小のデータを求める
5-6 列数固定の行列変換
5-7 文字列のカウントを求める
5-8 update文で相関サブクエリ
5-9 他テーブルの値を使用してupdate
5-10 データのグループ分け
5-11 最大値のデータと外部結合
5-12 共通集合を求める
5-13 ソートして、最初のレコードと外部結合
5-14 order by句で相関サブクエリ
5-15 クロスジョインで求めた集合と外部結合
5-16 exists同士の論理積
5-17 nvl関数による分岐
5-18 期間内の特定の曜日の数を取得
5-19 order by句でdecode関数
5-20 階層のデータを出力
5-21 RowNumによる件数指定
5-22 ソートして、前後のデータを取得
5-23 インラインビューをグループ化
5-24 select句でスカラー問い合わせ
5-25 order by句で、case式による多分岐
5-26 group by句に演算式
5-27 和集合を作成してグループ化
5-28 update文で連番に更新
5-29 having句でスカラー問い合わせ
5-30 特定レコードの、前のデータを取得
5-31 相関サブクエリで件数取得
5-32 指定月と指定期間で集計
5-33 複数行複数列で最大のデータを取得
5-34 インラインビューでdistinct
5-35 同じ組み合わせのチェック
5-36 in演算子の引数に分析関数
5-37 複数行を1列に変換
5-38 Last_Value関数
5-39 インラインビューでDense_Rank関数
5-40 グループごとに最大値の行を取得
5-41 重複値を持つ行を取得
5-42 Last関数
5-43 他テーブルとの共通集合
5-44 パーティションを切って分析関数
5-45 和集合を作成して総合計を取得
5-46 文字の出現回数を求める
5-47 他行を優先する出力その1
5-48 他行を優先する出力その2
5-49 他行を優先する出力その3
5-50 プライマリキーの交換
5-51 グループの値を交換
5-52 order by句で分析関数
5-53 前後の行も出力
5-54 order by句でcase式で分岐
5-55 RowIDでパーティション切り
5-56 nullを最も小さいとし、最小値の行を取得
5-57 前月が2位以内のデータを出力
5-58 外部結合して、大きいほうを出力
5-59 データ件数と、上位N件を出力
5-60 having句でrank within
5-61 その他を考慮した集計
5-62 連続数の最大値を求める
5-63 order by句で分析関数その2
5-64 not existsで存在否定命題の論理和


6 他サイト(ブログ)のSQLパズル

6-1 二つのテーブルの列値の一致数を取得
6-2 期間別の集計
6-3 項目別のTOP3を取得
6-4 金額を超える組み合わせ
6-5 金額を超えない組み合わせ
6-6 金額を超える組み合わせ(テーブル版)
6-7 同上をnullに変換
6-8 アナログ時計を表示(作成中)
6-9 レコード数上位2件/その他/全体を出力
6-10 unionでfull joinを代用
6-11 和集合と共通集合との差集合の要素数


7 他サイト(掲示板)のSQLパズル

7-1 累計を取得
7-2 クロス集計
7-3 sum関数とdecode関数
7-4 decode関数でソートキーに変換
7-5 同一日付を期間に含むレコード数
7-6 分析関数の引数に演算結果
7-7 delete文で相関サブクエリ
7-8 プライマリキーの入れ替え
7-9 数値をカンマ区切りに編集
7-10 ランダムな列をupdate
7-11 指定した確率で行を取得
7-12 ランダムにソート
7-13 和集合を作成してmerge
7-14 古のSQL(順位付け)
7-15 古のSQL(条件分岐その1)
7-16 古のSQL(条件分岐その2)
7-17 連続した空白を一つに置換
7-18 時間内の特定レコードの存在チェック
7-19 レコードがあれば最大値を取得
7-20 末尾が数字のデータを取得
7-21 sum関数とcase式
7-22 指定月の日曜日を出力
7-23 短絡OR
7-24 短絡AND
7-25 経過時間を取得(低精度)
7-26 経過時間を取得(高精度)
7-27 階層問い合わせの根と葉を取得
7-28 空き番号を取得その1
7-29 空き番号を取得その2
7-30 空き番号を取得その3
7-31 最も近い日を取得
7-32 キーブレイク時に、指定行を出力その1
7-33 キーブレイク時に、指定行を出力その2
7-34 イニシャルと名前を取得
7-35 siblingsオプション
7-36 複数テーブルと完全外部結合
7-37 負数でなかったら空白を付加
7-38 連続した範囲の最大最小を取得
7-39 文字列の分割
7-40 指定した範囲のデータを取得
7-41 順序無視の重複チェック(各値の重複なし)
7-42 土曜と日曜を除いた日数を取得
7-43 sum関数とLast_Value関数
7-44 最長一致の原則で結合
7-45 部分一致する最大のレコードと結合
7-46 階層の子と子孫の数を取得
7-47 平日で3日後を取得
7-48 Nullの行を追加
7-49 小計の降順にソート
7-50 前後の値で分岐
7-51 丸め誤差分の調整
7-52 完全外部結合で行列変換
7-53 グループ化とdecode関数
7-54 引き当て処理
7-55 having句で相関サブクエリ
7-56 木の中の最大値を取得
7-57 case式と分析関数で存在チェック
7-58 nvl関数でグループ化
7-59 ハイフンの前の数字を取得
7-60 レポート作成
7-61 入室回数の降順に出力
7-62 最初のアルファベットの位置を取得
7-63 勤務履歴の作成
7-64 カレンダーテーブルと結合
7-65 共通集合以外を取得
7-66 プロジェクトごとに集計
7-67 Last_Value関数とnullif関数
7-68 ランダムに結合
7-69 階層問い合わせ(子の条件が複数)
7-70 クロスジョインして分析関数
7-71 指定日より過去の平日を取得
7-72 外部結合で結合した行数を取得
7-73 文字列を分割してソート
7-74 売上と最新の名称を取得
7-75 全ての年月の値を出力
7-76 グループごとの縦横変換
7-77 優先順位のあるデータ取得
7-78 同じデータが連続しないようにソート


8 他サイトや技術書などのSQLパズル

8-1 同一グループ件数と、最小かを取得
8-2 case式でis not falseを模倣
8-3 組み合わせパズルその1
8-4 組み合わせパズルその2
8-5 移動平均を求める
8-6 サイコロジカルを求める
8-7 次の入社日を求める
8-8 加重移動平均を求める
8-9 first_Value関数を模倣(ignore nullsなし)
8-10 first_Value関数を模倣(ignore nullsあり)
8-11 Last_Value関数を模倣(ignore nullsなし)
8-12 Last_Value関数を模倣(ignore nullsあり)
8-13 Lag関数とLead関数を模倣
8-14 Seqが1小さいデータも出力
8-15 2日前のデータも出力
8-16 2ヶ月前のデータも出力
8-17 SubStoreも出力
8-18 dense_Rankとrangeの組み合わせ
8-19 12進数変換とrangeの組み合わせ
8-20 集合関数のBitAND,BitOR,BitXOR
8-21 sys.ODCIVarchar2Listとsys.ODCINumberList
8-22 集合関数のkeep指定でのdistinctオプションを模倣
8-23 分析関数のkeep指定でのdistinctオプションを模倣
8-24 to_date関数の書式指定での時分秒の省略
8-25 Oracle9iで、connect_by_rootを模倣
8-26 碁石の固まりを出力
8-27 Keep(Dense_Rank Second)とKeep(Dense_Rank Third)の自作
8-28 末日と締日の問題
8-29 Partitioned Inner Joinもどき
8-30 Oracle8iの外部結合で論理和
8-31 逆関係の行を求める
8-32 最大値または最小値のレコードを求める
8-33 count(*)で棒グラフを作成
8-34 複数列をPivot
8-35 小計を含むpivot
8-36 リーフノード,ブランチノード,ルートノードを判断
8-37 dense_Rank関数後に整形
8-38 Row_Numberを求めてPivot


9 他サイト(Joe Celko氏の記事)のSQLパズル

9-1 複数行を1行に変換
9-2 和集合を求めて、スカラー問い合わせ
9-3 開始日と終了日をまとめる
9-4 空き期間を取得
9-5 一文字違いの文字列を取得
9-6 行事の間に宿泊した客を取得その1
9-7 行事の間に宿泊した客を取得その2
9-8 教室の割り当て
9-9 差集合が空集合かチェック
9-10 共通集合が空集合かチェック
9-11 子供が一致する親を取得
9-12 一対多の外部結合
9-13 任意の三日間の合計
9-14 多重度の最大値
9-15 階層問い合わせの根と葉も出力
9-16 プリンタの割り当て
9-17 最新の連続期間
9-18 存在有無のブール値を求める
9-19 件数による多分岐
9-20 電話番号簿の作成
9-21 最後の二回の給料
9-22 存在有無のブール値で論理演算
9-23 nullのないグループを出力
9-24 平均が条件を満たす集合
9-25 一つだけ0でないレコードを出力
9-26 存在しない組み合わせを出力
9-27 集合の包含関係を調べる
9-28 等しい集合が存在する、集合を求める
9-29 ソートした数列で考える
9-30 結合で作成した集合と、集合演算
9-31 過去で最大のデータをサマリ
9-32 SQL99構文での結合順序
9-33 count関数の値で分岐
9-34 過去1時間の平均
9-35 count関数の引数にRowID
9-36 卒業可能な学生を出力
9-37 順序無視でグループ化(2列)
9-38 期間内の合計の最大値
9-39 重複を排除して二つかチェック
9-40 2つの合計を求める
9-41 縦横変換してから集計
9-42 存在有無のブール値の応用
9-43 集合(重複要素を許可)の包含関係を調べる
9-44 順序無視でグループ化(3列)
9-45 順序無視でグループ化(4列)
9-46 順序無視の重複チェック(各値の重複あり)
9-47 期間内の合計
9-48 集合で考える
9-49 集合とブール代数で考える
9-50 ベクトルで考える
9-51 大きさNのリージョンを求める(境界なし)
9-52 最大のリージョンを求める(境界なし)
9-53 大きさNのリージョンを求める(境界あり)
9-54 最大のリージョンを求める(境界あり)
9-55 ランを求める
9-56 集合が等しい組み合わせを求める
9-57 集合が等しい組み合わせを求める(複数列版)
9-58 集合が等しい組み合わせを求める(重複許可版)
9-59 各列の最初の非null値をまとめる
9-60 弱い重複を求める
9-61 連続的なグルーピング
9-62 製品の対象年齢の範囲
9-63 導出テーブルを減らせ
9-64 厳密な関係除算
9-65 distinctした結果とpartitioned Anti Join
9-66 SQLで条件法
9-67 Toddの除算


10 他サイト(OTN)のSQLパズル

10-1 2番目のデータを取得
10-2 Date型の年のみを変更
10-3 RowNum指定によるCountStop
10-4 最新の更新日を取得
10-5 グループ化とLast関数
10-6 累計を行列変換
10-7 累計が100以上になるまで出力(負数なし)
10-8 累計が100以上になるまで出力(負数あり)
10-9 アルファベットのソート
10-10 null以外の、以前の値を取得
10-11 Count関数にdistinctを指定
10-12 数値にキャストしてソート
10-13 リニアサーチによる探索
10-14 組み合わせごとの合計を取得
10-15 キーごとに行列変換
10-16 Group_Concat関数を模倣(最大数固定)
10-17 Group_Concat関数を階層問い合わせで模倣
10-18 Group_Concat関数をXMLの関数で模倣
10-19 FIFOで在庫単価の計算
10-20 LIFOで在庫単価の計算
10-21 ソート条件を他分岐
10-22 変化した回数を取得
10-23 連続した日付を作成
10-24 パスカルの三角形
10-25 1行を複数行に変換
10-26 割合を求める
10-27 時間の連番を作成
10-28 指定列が全て最大値もしくは最小値の行を取得
10-29 要素数が1の集合同士の直積
10-30 行を指定単位で分割
10-31 あいまい検索
10-32 distinct後の件数を取得
10-33 15分単位の集計
10-34 nvl関数とスカラー問い合わせ
10-35 グループごとに最大のデータを取得
10-36 複数行複数列に存在しないデータ
10-37 後続データの存在チェック
10-38 曜日ごとの集計
10-39 インラインビューとの直積演算
10-40 文字列の部分一致で結合
10-41 varchar2型の日付チェック
10-42 過去で最大のデータと結合
10-43 バイナリデータの指定位置を取得
10-44 バイト数に応じた0埋め
10-45 結合対象を求めて外部結合
10-46 前日との比率を求める
10-47 条件を満たす最大のデータを取得
10-48 最後に0になった日からの件数
10-49 第二金曜日を取得
10-50 金曜日一覧を取得
10-51 一行目に総合計を出力
10-52 Interval型の総合計を求める
10-53 having句でall演算子
10-54 count関数で、order by指定
10-55 RowNumで削除件数を指定
10-56 結合して階層問い合わせ
10-57 全てのIDを持つかチェック
10-58 時刻印法による楽観的ロック
10-59 カンマ区切りの文字列の編集
10-60 ポイントをmerge
10-61 アルファベットを26進数に変換
10-62 先頭N件をロック
10-63 受講履歴を出力
10-64 新旧のデータ比較
10-65 全角半角の混在チェック
10-66 経過秒から時間を求める
10-67 文字列の改行を削除
10-68 グループで最大値の行のフラグオフ
10-69 グループごとの行数を取得
10-70 条件を満たす行に連番を設定
10-71 文字コードを変換してソート
10-72 日付の埋め立てその1
10-73 日付の埋め立てその2
10-74 Oracle8での順位による制御
10-75 複数行をカンマ区切りで出力
10-76 最大値と、最大値の行の合計を取得
10-77 結合して、同上をnullに変換
10-78 文字の重複を削除
10-79 不等式の移項
10-80 データの存在チェック
10-81 distinct後のグループごとの件数を取得
10-82 金額の山分け
10-83 階層の上下を取得
10-84 集計して前月分も表示
10-85 存在有無を調べる
10-86 特定の区分のみサマリ
10-87 カンマ区切りの文字列で存在チェック
10-88 IPの前ゼロを削除
10-89 SavePointで原子性を制御
10-90 指定サイズを下回るまでdelete
10-91 複数テーブルを等価結合
10-92 RowNumでスカラー副問い合わせ
10-93 前月の同一日付を取得
10-94 文字列中の指定文字の数を取得
10-95 IDごとの文字の数を取得
10-96 グループ化して分析関数
10-97 複数あれば連番を付与
10-98 数値の小数部のみを取得
10-99 合計の累計を取得
10-100 同一グループの値の種類を取得
10-101 直前の値と等しかったら削除
10-102 ログテーブルの循環使用
10-103 小数点の位置を揃える
10-104 先頭二文字で集計
10-105 ブール代数で同値変形
10-106 条件付き階層問い合わせ
10-107 UpdatableViewで更新
10-108 パターン数を取得
10-109 ANSI構文でクロスジョイン
10-110 First_nameとLast_nameを取得
10-111 最新日で最大金額の行を取得
10-112 階層問い合わせで依存性を追跡
10-113 12進数の減算で月数を求める
10-114 順序表と結合してソート
10-115 差集合の和集合
10-116 二値論理のような比較
10-117 下位10%のデータを取得
10-118 二通りの連番付与
10-119 経路の総積を取得
10-120 指定文字以外の文字がないかチェック
10-121 指定日だけ後の平日を取得
10-122 会計年度で何週目かを求める
10-123 分析関数でのignore nulls
10-124 ブール代数の分配法則
10-125 開始と終了が等しいレコードをグループ化
10-126 末尾の文字を取り出してパディング
10-127 クロス集計して空白行を追加
10-128 minus allとintersect all
10-129 オプション指定のgroup_concat関数を模倣
10-130 ignore nullsをsum関数で代用
10-131 最大値を求めてクロス集計
10-132 大小比較で場合分け
10-133 文字列が4桁までの整数か調べる
10-134 権限に応じた、データの出力
10-135 時間を示す数値の相互変換
10-136 集合の最初の値を相殺
10-137 特殊なdistinct
10-138 階層の1番目と2番目を表示
10-139 最短距離問題
10-140 前と同じ値なら、詰めて出力
10-141 重複が存在するグループを出力
10-142 命題成立時のブール代数の同値変形
10-143 Row_Number関数との差でグループ化
10-144 case式とLag関数とSum関数の組み合わせ
10-145 having句でdecode関数
10-146 各桁の数字の合計を求める
10-147 自分と祖先の総合計を求める
10-148 前後のn件の行も出力
10-149 Oracle9iでconnect_by_isleafを模倣
10-150 特殊な数列を作成その1
10-151 特殊な数列を作成その2
10-152 正規表現で、IPアドレスの左に0埋め
10-153 多対1で結合して、グループ化
10-154 集合が条件を満たすかで分岐
10-155 is not trueとis not falseを模倣
10-156 総合計に対する比率と総合計を取得
10-157 桁数で場合分け
10-158 RegExp_Instr関数の負数オプション
10-159 シェルソートのようなデータ交換
10-160 各レコードをランダムに更新
10-161 半角空白でsplit
10-162 ビット演算(AND,OR,XOR)
10-163 ビット演算(NOT)
10-164 場合の数を求めて、場合分け
10-165 全テーブルの、レコード数を数える
10-166 根からたどれないデータを取得
10-167 二番目以降の数値をゼロサプレス
10-168 ブール値を求めて論理積演算
10-169 having句にこだわったupdate文
10-170 クロスジョインで組み合わせを列挙
10-171 grouping setsに式を指定
10-172 dual表からの連番の作成
10-173 全称命題と存在命題で論理積(group化版)
10-174 全称命題と存在命題で論理積(partition版)
10-175 少なくとも1つがnullかをチェック
10-176 範囲にnullを含むかのチェック
10-177 LRU方式で追加更新その1
10-178 LRU方式で追加更新その2
10-179 同一行で最大のデータを求める
10-180 集計結果で集計
10-181 符号に応じた縦横変換
10-182 コードごとの、Top2の行の値を出力
10-183 範囲指定して、乱数を取得
10-184 存在肯定命題の真偽と、要素数のチェック
10-185 範囲内での行間アクセス(歯抜けを考慮しない)
10-186 範囲内での行間アクセス(歯抜けを考慮する)
10-187 パーティションごとの連続したグループを求める
10-188 連続してなかったらインクリメント
10-189 連続したIDごとの最大値と最小値(重複を考慮)
10-190 distinctオプションとorder by指定の分析関数を代用
10-191 葉であるか葉でないかで論理演算
10-192 高さが1小さい要素の数を求めるその1
10-193 高さが1小さい要素の数を求めるその2
10-194 日暦算の感覚で、前月の同一日までの日数を求める
10-195 任意の2文字から1文字をランダムに取得
10-196 表関数で期間内の日付を出力
10-197 SQL99構文にこだわったクエリ
10-198 existsとforallとunique
10-199 同じ行で最大の列かを調べる
10-200 having句にこだわったexists述語
10-201 多対1の外部結合を変形
10-202 正規表現の肯定先読みを代用
10-203 正規表現の否定先読みを代用
10-204 nullでない葉が存在する、高さが2以上の部分木を取得
10-205 正規表現で0以上255以下の整数かを調べる
10-206 連続範囲の累計と非連続範囲の累計
10-207 自己結合でpartitioned outer join
10-208 旅人算の感覚を使うクエリ(日付型バージョン)
10-209 指定文字のn番目の前まで取得
10-210 複数列指定のPartitioned Outer Join
10-211 distinct指定とorder by
10-212 最大値を使って、それ以下の最大値を求める
10-213 グラフの平行移動を意識したクエリ
10-214 重複を除いた訪問者数
10-215 owa_patternで正規表現
10-216 nullの列を追加して完全外部結合を代用
10-217 古のSQLでcase式を代用
10-218 wmsys.wm_concat
10-219 元集合の重複を残す差集合演算
10-220 必要な結合数(JoinCount)を求める
10-221 内部結合して値を比較
10-222 バブルソートで列をソート
10-223 セレクションソートで列をソート
10-224 バケットソートで列をソート
10-225 旅人算と存在肯定命題
10-226 OverLaps述語
10-227 存在肯定命題の真偽の論理積
10-228 Outer Unionのような完全外部結合
10-229 重複を除いた累計
10-230 旅人算の感覚(1時間間隔)
10-231 dense_rankがRowNum番目の値を取得
10-232 Row_Numberが列値番目の値を取得
10-233 移動可能な経路ごとに連番付与
10-234 クロスジョインとPartitioned Outer Joinその1
10-235 クロスジョインとPartitioned Outer Joinその2
10-236 最もbetterな行を出力
10-237 Oracle8iで、完全外部結合を模倣
10-238 縦方向の中央で折り返して出力
10-239 Last_Value(式 ignore nulls)でupdate
10-240 和集合を作成してソート
10-241 Partitioned Anti Joinもどき
10-242 having句でLast関数
10-243 場合分けを使う正規表現
10-244 存在肯定命題の論理和を同値変形
10-245 5分以上未来の最小データで経路作成
10-246 優先順位を持った多対1の外部結合
10-247 所属グループの他行の値を横並びで表示
10-248 読みやすい多段Replace
10-249 共通集合が空集合なら、元の集合を出力
10-250 12進数変換を行って、旅人算の感覚
10-251 2段階の集計
10-252 10位がなかったら、最も近い順位を出力
10-253 同じ文字列が2回現れるかを調べる
10-254 nullでない列の数でソート
10-255 nullを0としてソート
10-256 キーブレイクごとに小計を出力
10-257 単純case式と検索case式とdecode関数
10-258 分析関数で他行の合計を取得
10-259 重複を除いた集計の累計
10-260 3テーブルでのUpdatableView
10-261 差が1のデータが前後の両方になければ出力
10-262 累計を求めるwm_concatをXML関数で模倣
10-263 最初に1が出現してから値が変化した行を取得

10-295 Overlapの解消(作成中)
10-296 組み合わせ
10-297 重複組み合わせ
10-298 ミニミニ予約システムその1(作成中)
10-299 ミニミニ予約システムその2(作成中)


11 数学パズルを題材としたSQLパズル

11-1 ぶどうの房パズル初級編
11-2 ぶどうの房パズル上級編
11-3 サムライン
11-4 因子の部屋
11-5 連環の数 初級編
11-6 連環の数 上級編
11-7 王様の財宝
11-8 白雪姫のリンゴ
11-9 桃太郎のキビ団子
11-10 まま子立て
11-11 川渡り
11-12 引き算でGO
11-13 サイコロの目の積が15の倍数となる確率
11-14 覆面算


12 情報処理技術者試験のSQLパズル

12-1 同じ氏名がいる人を取得
12-2 年下のリーダーを持つ会員を取得
12-3 グループの平均年齢を取得
12-4 結合して件数を取得
12-5 not existsで集合の商演算


Windows版Oracleツール

1 SQLPlusWとSQLPlus
2 SQLPlusWの設定
3 SQLPlusの設定
4 SQLスクリプト
5 Login.SQL
6 Oracleとの接続確認
7 オートコンプリート


明智重蔵のブログ
データベース関連の本


Oracleの豆知識

sysdateの値を変更
Oracleのバージョンを表示
仮想テーブル
面白かったクエリ
正規表現のベンチマークテスト
Like演算子のメタキャラのエスケープ
セッションのみで有効なシーケンス
関数の引数一覧
階層問い合わせと、木構造
group by句
Oracleで覚える英単語
sqlldr■exp/imp■expdp/impdp


数学の豆知識

九去法
べき乗剰余演算
ブール代数と命題論理


フリーソフト

ペースト君(VB.net)
ペースト君(Java)
倉庫番


姉妹サイト

MySQLパズル
PostgreSQLパズル
DB2 SQLパズル
正規表現パズル
ブール代数パズル


姉妹サイトも含めて、どこでもリンクフリーです
ご意見等はこちらまで oraclesqlpuzzleアットマークmailどっとgooドットneどっとjp