プログラマのためのSQL 第4版 すべてを知り尽くしたいあなたに 電子書籍(ジョー・セルコ ミック ミック)|翔泳社の本
  1. ホーム >
  2. 電子書籍 >
  3. プログラマのためのSQL 第4版 すべてを知り尽くしたいあなたに

プログラマのためのSQL 第4版 すべてを知り尽くしたいあなたに


監修
翻訳

形式:
電子書籍
発売日:
ISBN:
9784798141190
価格:
5,060(本体4,600円+税10%)
カテゴリ:
データベース
キーワード:
#データ・データベース,#ネットワーク・サーバ・セキュリティ,#システム運用,#開発環境
電子書籍

日米のDBの達人、夢の共演

SQLの第一人者であるジョー・セルコの名著『Joe Celko's SQL for Smarties, Fourth Edition: Advanced SQL Programming』の日本語版です。本書は、SQLの実務経験があるエンジニアを対象として、SQLプログラミングの基礎的な考え方から、テーブル操作、グループ化、集計関数、クエリの最適化など、SQL全般について詳しく解説した「SQLプログラミングバイブル」です。基本から高度なテクニックまで、網羅的にSQLプログラミングの知識を習得できます。翻訳・監修は『達人に学ぶSQL徹底指南書』でおなじみのミック氏が担当。SQLエンジニア必携の一冊です。

※本電子書籍は同名出版物を底本として作成しました。記載内容は印刷出版当時のものです。
※印刷出版再現のため電子書籍としては不要な情報を含んでいる場合があります。
※印刷出版とは異なる表記・表現の場合があります。予めご了承ください。
※プレビューにてお手持ちの電子端末での表示状態をご確認の上、商品をお買い求めください。

(翔泳社)

画像01
画像02
画像03
画像04
画像05
目次の登録はありません。

付属データはこちら

お問い合わせ

内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。

正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。

利用許諾に関するお問い合わせ

本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。

追加情報はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2017年04月07日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 076
一番下(3つ目)のコード囲み、6行目
2刷
girl_name VARCHAR(30) NOT NULL,
girl_name VARCHAR(30) NOT NULL

行末のカンマは不要。

※リフローEPUBの場合、「5.2 入れ子のUNIQUE制約」の5つ目のグレー地のコード囲みが該当箇所になります。
2013.05.25
1刷 086
コード 1~9行目
4刷
--オリジナルのソースデータを作る
CREATE TABLE Source
(pair_nbr INTEGER NOT NULL UNIQUE,
 a INTEGER NOT NULL,
 b INTEGER NOT NULL,
  PRIMARY KEY (a, b));

INSERT INTO Source
VALUES (1, 1, 1), (2, 1, 2), (3, 2, 3), (4, 7, 2), (5, 2, 4),
       (6, 5, 5), (7, 5, 1), (8, 5, 3), (9, 9, 0), (10, 11, 2);
--オリジナルのソースデータを作る
CREATE TABLE Source2
(pair_nbr INTEGER NOT NULL UNIQUE,
 a INTEGER NOT NULL,
 b INTEGER NOT NULL,
  PRIMARY KEY (a, b));

INSERT INTO Source2
VALUES (1, 1, 1), (2, 1, 2), (3, 2, 3), (4, 7, 2), (5, 2, 4),
       (6, 5, 5), (7, 5, 1), (8, 5, 3), (9, 9, 0), (10, 11, 2);

「Source」を「Source2」に修正しました(2か所)。

※リフローEPUBの場合、「5.2.2 一列の一意性と複数列の一意性」の5つ目のグレー地のコード囲みが該当箇所になります。
2017.02.27
1刷 093
コードの下 6行目
3刷
RESTRICTオプションを指定して参照するオブジェクトが存在しないかことを強く推奨する。
RESTRICTオプションを指定して参照するオブジェクトが存在しないか確認することを強く推奨する。

※リフローEPUBの場合、「5.5.2 ALTER TABLE 文」のグレー地のコード囲みの下にある最初の段落が該当箇所になります。
2015.01.14
1刷 109
1つ目のコード囲み、8行目
2刷
INSERT INTO FooLookup (x, y, foobar)
INSERT INTO FooBar (x, y, foobar)

※リフローEPUBの場合、「6.4.2 一歩を踏み出せ」の2つ目のグレー地のコード囲みが該当箇所になります。
2013.05.25
1刷 114
コード囲み、1行目
2刷
CREATE FUNCTION fib(IN n INTEGER)
CREATE FUNCTION fib(n IN INTEGER)

INの位置を訂正。

※リフローEPUBの場合、「6.5.1 データテーブル対ジェネレータコード」のグレー地のコード囲みが該当箇所になります。
2013.05.25
1刷 115
一番下(3つ目)のコード囲み、2行目
2刷
(SELECT a, b FROM (VALUES (0, 1))
(SELECT a, b FROM (VALUES (0, 1)) AS Foobar(a, b)

VALUES句にテーブル名が必要。

※リフローEPUBの場合、「6.5.3 フィボナッチ数列」の3つ目のグレー地のコード囲みが該当箇所になります。
2013.05.25
1刷 161
1つ目のコード
4刷
FOR t FROM 0 TO n DO SUM(a[t]/ POWER(1.00 + r), t))) END FOR;
FOR t FROM 0 TO n DO SUM(a[t]/ POWER(1.00 + r), t) END FOR;

2行目の「))」を削除します。

※リフローEPUBの場合、「8.3 補助関数テーブル」の3つ目のグレー地のコード囲みが該当箇所になります。
2017.02.27
1刷 161
1つめのコードの下 1行目
3刷
ここでa[i]は投資期間(i)に対するキャッシュフローで、
ここでa[t]は投資期間(t)に対するキャッシュフローで、

※リフローEPUBの場合、「8.3 補助関数テーブル」の3つ目のグレー地のコード囲みのすぐ下にある段落が該当箇所になります。
2015.10.09
1刷 175
一番下(4つ目)のコード 下から2行目
4刷
AND S2.seq <= CHAR_LENGTH(I1.input_string) + 1
AND S2.seq <= CHAR_LENGTH(I1.input_string) + 2

※リフローEPUBの場合、「9.2.1 繰り返しグループについての注意」の8つ目のグレー地のコード囲みが該当箇所になります。
2017.02.27
1刷 211
コード 4~6行目
4刷
-- テストデータの登録 INSERT INTO RoundTest (original) VALUES (2134.5678. 0.00), etc.
-- テストデータの登録 INSERT INTO RoundTest (original, rounded) VALUES (2134.5678, 0.00), etc.

※リフローEPUBの場合、「10.2.1 丸めと切り捨て」の4つ目のグレー地のコード囲みが該
2017.02.27
1刷 213
CEIL/CEILING関数の説明
4刷
8. {CEIL | CEILING}():入力以上の最大の整数
8. {CEIL | CEILING}():入力以上の最小の整数

※リフローEPUBの場合、「10.3 四則演算」の数字付箇条書きの8つ目の項目が該当箇所になります。
2017.02.27
1刷 222
2つ目のコード囲み、10行目(3つ目のWHERE句)
2刷
WHERE MOD (number = :num, 1000))
WHERE number = MOD ( :num, 1000))

※リフローEPUBの場合、「10.6.4 数値から文字への変換」の3つ目のグレー地のコード囲みが該当箇所になります。
2013.05.25
1刷 269
2つ目のコード囲み(ド・モルガンの法則を適用した後)
3刷
SELECT col1   FROM Table2  WHERE ((col1 <> 1)    AND (col1 <> 2)    AND (col1 <> 3)    AND (col1 <> 4)    AND (col1 <> 5)    AND UNKNOWN);
SELECT col1   FROM Table2  WHERE ((col1 <> 1)    AND (col1 <> 2)    AND UNKNOWN);

※リフローEPUBの場合、「13.5.1 サブクエリの述語におけるNULL」の8つ目のグレー地のコード囲みが該当箇所になります。
2015.12.22
1刷 269
1つ目のコード囲み、WHERE句
3刷
WHERE NOT ( (col1 = 1)         OR (col1 = 2)         OR (col1 = 3)         OR (col1 = 4)         OR (col1 = 5)         OR (col1 = NULL));
WHERE NOT ( (col1 = 1)         OR (col1 = 2)         OR (col1 = NULL));

※リフローEPUBの場合、「13.5.1 サブクエリの述語におけるNULL」の7つ目のグレー地のコード囲みが該当箇所になります。
2015.03.27
1刷 310
ページ下部のコード囲み、4行目・7行目
3刷
BEGIN -- 間違い! UPDATE Books    SET price = price * 1.15  WHERE price >= 25.00; UPDATE Books    SET price = price * 0.9  WHERE price < 25.00; END;
BEGIN -- 間違い! UPDATE Books    SET price = price * 1.15  WHERE price < 25.00; UPDATE Books    SET price = price * 0.9  WHERE price >= 25.00; END;

※リフローEPUBの場合、「15.3.5 UPDATE 文でCASE式を使う」の2つ目のグレー地のコード囲みが該当箇所になります。
2014.03.10
1刷 371
1行目
2刷
最小の始点と最大の終点
最大の始点と最小の終点

※リフローEPUBの場合、「20.2.1 時間の期間とOVERLAPS述語」の図20.3のあと、「結果」を含む3つ目のグレー地の囲みのすぐ下にある段落が該当箇所になります。
2013.06.24
1刷 425
コード
4刷
Table1 LEFT OUTER JOIN Table2 ON Table1.a = Table2.a -- 結合条件 AND Table2.c = 't'; -- SARG
SELECT Table1.a, Table1.b, Table2.a, Table2.c FROM Table1 LEFT OUTER JOIN Table2 ON Table1.a = Table2.a -- 結合条件 WHERE Table2.c = 't'; -- SARG

※リフローEPUBの場合、「25.3.1 外部結合の歴史」の2つ目のグレー地のコード囲みが該当箇所になります。
2017.02.27
1刷 428
一番上のコード囲み、2行目と6行目
2刷
FROM (SELECT stud_nbr, math_course, math_course
 ・・・
         (SELECT stud_nbr, math_course, math_course
FROM (SELECT stud_nbr, math_course
 ・・・
          (SELECT stud_nbr, math_course

2行目と6行目の2箇所。math_courseは1列しか選択しない。

※リフローEPUBの場合、「25.3.1 外部結合の歴史」の最後のグレー地のコード囲みが該当箇所になります。
2013.05.27
1刷 437
コード
4刷
SELECT Students.*, DomesticStudents.*, ForeignStudents.*
  FROM Students
         LEFT OUTER JOIN
           DomesticStudents
    ON CASE Students.student_type
       WHEN 'D'
       THEN 1
       ELSE NULL END = 1
         LEFT OUTER JOIN
           ForeignStudents
             ON CASE Students.student_type
                WHEN 'F'
                THEN 1
                ELSE NULL END = 1;
SELECT Students.*, DomesticStudents.*, ForeignStudents.*
  FROM Students
         LEFT OUTER JOIN
           DomesticStudents
    ON CASE Students.student_type
      WHEN 'D'
      THEN 1
      ELSE NULL END = 1
        LEFT OUTER JOIN
          ForeignStudents
            ON CASE Students.student_type
               WHEN 'F'
               THEN 1
               ELSE NULL END = 1;
               WHERE ( Students.student_nbr = DomesticStudents.student_nbr
               OR Students.student_nbr = ForeignStudents.student_nbr);

※リフローEPUBの場合、「25.4 UNION JOIN 演算子」の最後のグレー地のコード囲みが該当箇所になります。
2017.02.27
1刷 458
7~9
4刷
7. 1対他の結合 8. 1対他の外部結合 9. 他対他の結合
7. 1対の結合 8. 1対の外部結合 9. の結合

※リフローEPUBの場合、「26.2 更新可能なビューと読み取り専用ビュー」の数字付箇条書きの7、8、9つ目の項目が該当箇所になります。
2017.02.27
1刷 459
1つ目のコード囲み、3行目
4刷
SELECT emp_nbr, (salary + COALESCE(commission), 0.00)
SELECT emp_nbr, (salary + COALESCE(commission, 0.00))

1つ目の「)」の位置を訂正。

※リフローEPUBの場合、「26.3.2 計算列」のグレー地のコード囲みが該当箇所になります。
2016.08.25
1刷 483
1つ目のコード 4行目
4刷
FROM (VALUES (1, f(1))))
FROM (VALUES (1, f(1))) AS X(i,j)

※リフローEPUBの場合、「26.10.1 単純な加算」のグレー地のコード囲みが該当箇所になります。
2017.02.27
1刷 492
結果の2行上
4刷
ON B4.batch_nbr BETWEEN X.batch_nbr AND X.end_batch_nbr
ON B4.prod_code = X.prod_code AND B4.batch_nbr = X.batch_nbr

※リフローEPUBの場合、「27.1.4 数列による分割」の6つ目のグレー地のコード囲みの下から2行目が該当箇所になります。
2017.04.07
1刷 492
結果の4行目
4刷
| B |  4 | 5 | 80.000000000000 |
| B |  4 | 5 | 75.000000000000 |

※リフローEPUBの場合、「27.1.4 数列による分割」の6つ目のグレー地のコード囲みの下にある「結果」が該当箇所になります。
2017.04.07
1刷 529
「Presidencies」の8行目
4刷
'John' '' 'Adams' 'DR' 1825 1829
'John' 'Q.' 'Adams' 'DR' 1825 1829

※リフローEPUBの場合、「29.1 COUNT 関数」の4つ目のグレー地のコード囲み「Presidencies」が該当箇所になります。
2017.04.07
1刷 559
2つ目のコード
4刷
(2 *(<column ref 1>, ...,<column ref n-1>) + GROUPING(<column ref n>)
2 * GROUPING(<column ref 1>, ...<column ref n-1>) + GROUPING(<column ref n>)

※リフローEPUBの場合、「30.2 GROUPING 演算子」の2つ目のグレー地のコード囲みが該当箇所になります。
2017.02.27
1刷 572
表の上の本文
3刷
結果は、部署別で最も小さい社員番号を最も社員の入社日を返す。
結果は、部署別で最も小さい社員番号を持つ社員の入社日を返す。

※リフローEPUBの場合、「30.6.2 FIRST_VALUE 関数とLAST_VALUE 関数」の表のすぐ上にある段落が該当箇所になります。
2015.03.27
1刷 579
3つ目の網掛け
4刷
(12,12,14,17,17,19)
(12,12,12,14,17,19)

※リフローEPUBの場合、「31.3.1 プログラミング問題としての中央値」の3つ目のグレー地のコード囲みが該当箇所になります。
2017.02.27
1刷 579
4つ目の網掛け
4刷
(12,12,12,12,14,14,17,17,17,17,19,19)
(12,12,12,12,12,12,14,14,17,17,19,19)

※リフローEPUBの場合、「31.3.1 プログラミング問題としての中央値」の4つ目のグレー地のコード囲みが該当箇所になります。
2017.02.27
1刷 584
本文1行目
4刷
だが、WHERE句の変形はこれで終わりではない。ド・モルガンの法則を使う。
だが、WHERE句の変形はこれで終わりではない。

※リフローEPUBの場合、「31.3.3 セルコの中央値」の6つ目のグレー地のコード囲みのすぐ下にある段落が該当箇所になります。
2017.02.27
1刷 589
3つ目のコード囲み、1行目と4行目
2刷
SELECT acct_nbr, trans_date, trans_amt,
      SUM(trans_amt)
        OVER(PARTITION BY acct_nbr
                 ORDER BY trans_date
SELECT acct_nbr, trans_time, trans_amt,
      SUM(trans_amt)
        OVER(PARTITION BY acct_nbr
                 ORDER BY trans_time

1行目と4行目の2箇所。trans_date ではなくtrans_time。

※リフローEPUBの場合、「31.6 累積統計」の3つ目のグレー地のコード囲みが該当箇所になります。
2013.05.27
1刷 592
下から3行目
4刷
RKはRの順位
RKはパーティション内に含まれる当該行の順位

※リフローEPUBの場合、「31.6.2 累積率」の1つ目の「結果」の囲みの下、2つ目の段落が該当箇所になります。
2017.02.27
1刷 620
2行目
4刷
このクエリがやっていることは、S1で開始点の番号を作りS2で終了点の番号を作っている。
このクエリがやっていることは、R1で開始点の番号を作りR2で終了点の番号を作っている。

※リフローEPUBの場合、「32.5 ランを求めるクエリ」の2つ目のグレー地のコード囲みの下すぐ下にある段落が該当箇所になります。
2017.02.27
1刷 685
36.2.2の1つ目のコード囲み、2行目
2刷
CHAR_LENGTH (path) AS level
CHAR_LENGTH (path)

※リフローEPUBの場合、「36.2.2 木の深さと部分木を見つける」の1つ目のグレー地のコード囲みが該当箇所になります。
2013.05.27
1刷 706
37.2.7の1つ目のコード囲み、下から4行目
2刷
INSERT INTO AdjacencyListGraph (begin_node_id, end_node_id)
INSERT INTO AdjacencyListGraph

※リフローEPUBの場合、「37.2.7 非循環グラフを入れ子集合に変換する」の1つ目のグレー地のコード囲みが該当箇所になります。
2013.05.27
1刷 716
「Job Apps」の下の文章
4刷
現職のjob_title列はNullで表現する。
現職のend_date列はNullで表現する。

※リフローEPUBの場合、「38.3.1 期間のシーケンスにおける欠落」の表「JobApps」のすぐ下の段落が該当箇所になります。
2017.02.27
1刷 754
1つ目のコード囲み 7~8行目
4刷
AND P1.last_name IN (SELECT last_name
AND P1.first_name IN (SELECT first_name

※リフローEPUBの場合、「39.5 IN述語には要注意」の1つ目のグレー地のコード囲みが該当箇所になります。
2017.02.27

感想・レビュー

紙魚 さん

2020-07-25

理論についての良質な解説書としても、実践的で豊富な実例集としてもボリューム満載な一冊。最も眺めるだけでは理解できないサンプルコードも多かったので一読ですべてを消化するのはなかなかに難しいだろう。勉強にはなったが、カーソルを使う手続き型手法の末孫たるActiveRecordの世界に生きる人間としては、どうやって生かしていくべきか悩ましい所。

Hiroshi Obara さん

2016-08-02

ただただ面白いぞ。 全てのプログラマはRDBを利用するプロジェクトに関わっていなくても読んでみる事を進めたい。 これだけ進化しているSQLの考え方を自分のプログラムに活かさずにはいられない。開発をするときはそばに必ず置いて置くことにする。

ふらく さん

2014-09-25

読みごたえあり。実践的で理論的、日本の役に立たない理論だけのものとは違う。たた、初心者が読むには厳しいと思う。