SQL and Relational Theory

Errata for SQL and Relational Theory

Submit your own errata for this product.


The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color Key: Serious Technical Mistake Minor Technical Mistake Language or formatting error Typo Question Note Update



Version Location Description Submitted By Date Submitted Date Corrected
Safari Books Online
4. No Duplicates, No Nulls > What's Wrong With Duplicates? (page numbers unavailable for online vers
Figure 4-1 and below

If we eliminate the duplicates by loading P with ('P1', 'Screw'), ('P1', 'Nut'), ('P1', 'Bolt'), ('P2', 'Screw') and SP with ('S1', 'P1'), ('S2', 'P1'), ('S1', 'P2') instead of the duplicate rows we still get varied results for the queries supplied in the book. The results for the 12 candidate SQL formulations when run against the non-duplicate values listed above are, in order: P1 * 3, P2 * 1 P1 * 2, P2 * 1 P1 * 5, P2 * 3 P1 * 6, P2 * 2 P1 * 2, P2 * 2 P1 * 2, P2 * 2 P1 * 2, P2 * 2 P1 * 1, P2 * 1 P1 * 1, P2 * 1 P1 * 3, P2 * 1 P1 * 5, P2 * 3 P1 * 1, P2 * 1 Given that the results are still inconsistent, I have to ask a) are the candidate queries really equivalent and b) if so, what is the problem being caused by duplicates that their elimination would solve? It can't be inconsistent results as the non-duplicate values also product inconsistent results for the candidate queries.

Note from the Author or Editor:
This question made me realize I didnít make my original point as well as I should have done (and thank you for drawing this fact to my attention). In fact, I was mixing together two points that might better be made separately. First point: The 12 SQL expressions (candidate query formulations) are obviously NOT equivalent, precisely because SQL permits duplicatesóbut they should be equivalent, and indeed they would be, if duplicates were always prohibited. Second point: The problem (i.e., of lack of equivalence of the various formulations) occurs even if there arenít any duplicates in the input tables but is made even worse if there are. Thus, prohibiting duplicates in the input tables is necessary but not sufficient to avoid the problem. PS: As for the question ďWhatís the problem being caused by duplicates that their elimination would solve?Ē, I would claim the book does at least give a reasonableóI donít say exhaustiveóanswer to that question.

Anonymous  Feb 06, 2014 
PDF
Page 41
Fig. 2.3: A very strange union

The Y column of the rightmost table is lacking a double underline.

Thor Michael StÝre  Apr 27, 2014 
Printed
Page 120
3rd bullet item

Delete this bullet item

C.J. Date
C.J. Date
O'Reilly Author 
Feb 08, 2013 
PDF
Page 132
2nd paragraph (SQL text)

I think the second instance of "FROM S )" should read "FROM P )".

paul c  Jan 23, 2013 
Printed
Page 159
Fig. 7.5

In Fig. 7.5, the table showing the transitive closure TC appears to be missing the following entry: P1 P6 Here is a little Perl script that shows the correct output, albeit in an order that does not match Fig. 7.5: $ perl erratum.pl PP ____ ____ | PX | PY | |____|____| | P1 | P2 | | P1 | P3 | | P2 | P4 | | P3 | P4 | | P4 | P5 | | P5 | P6 | |____|____| TC ____ ____ | PX | PY | |____|____| | P1 | P2 | | P1 | P3 | | P1 | P4 | | P1 | P5 | | P1 | P6 | | P2 | P4 | | P2 | P5 | | P2 | P6 | | P3 | P4 | | P3 | P5 | | P3 | P6 | | P4 | P5 | | P4 | P6 | | P5 | P6 | |____|____| $ cat erratum.pl sub print_table { my ( $pr_ref, $n ) = @_; print "\n"; print "$n\n"; print " ____ ____ \n"; print " | PX | PY |\n"; print " |____|____|\n"; for my $px ( sort keys %{$pr_ref} ) { for my $py ( sort keys %{ $pr_ref->{$px} } ) { print " | $px | $py |\n"; } } print " |____|____|\n"; print "\n"; } ## end sub print_table sub get_tc { my ( $pp_ref, $tc_ref, $px_immediate, $py_immediate ) = @_; for my $px ( keys %{$pp_ref} ) { for my $py ( keys %{ $pp_ref->{$px} } ) { if ( defined $tc_ref && defined $px_immediate && defined $py_immediate ) { if ( $px eq $py_immediate ) { $tc_ref->{$px_immediate}{$py} = {}; $tc_ref = get_tc( $pp_ref, $tc_ref, $px_immediate, $py ); } } ## end if ( defined $tc_ref &&...) else { $tc_ref->{$px}{$py} = {}; $tc_ref = get_tc( $pp_ref, $tc_ref, $px, $py ); } } ## end for my $py ( keys %{ $pp_ref...}) ## end for my $px ( keys %{$pp_ref...}) } ## end for my $px ( keys %{$pp_ref...}) return scalar $tc_ref; } ## end sub get_tc my $pp_ref = { P1 => { 'P2' => {}, 'P3' => {} }, P2 => { 'P4' => {} }, P3 => { 'P4' => {} }, P4 => { 'P5' => {} }, P5 => { 'P6' => {} }, }; print_table( $pp_ref, "PP" ); my $tc_ref = get_tc($pp_ref); print_table( $tc_ref, "TC" );

Note from the Author or Editor:
On p 159 in the printed book, Fig. 7.5, table labeled TC should contain one additional row with PX = P1 and PY = P6.

Michael J. Krueger  Jun 11, 2014 
Printed
Page 163
Para. beginning "That said", line 2

The smart quotes following the symbols "<" and ">" should be closing quotes, not opening ones

C.J. Date
C.J. Date
O'Reilly Author 
Feb 08, 2013 
Printed
Page 206
1st bullet item

In the sentence beginning "For one thing", replace "For one thing" by "To be specific". Delete the sentence beginning "For another" (including the immediately following SQL expression).

C.J. Date
C.J. Date
O'Reilly Author 
Feb 22, 2012 
Printed
Page 209
SQL code lines

In the code lines beginning ON DELETE nls and ON INSERT nls, replace LS by NLS.

C.J. Date
C.J. Date
O'Reilly Author 
Feb 22, 2012 
Printed
Page 289
Within the Aside

"Sysem" should be "System".

Note from the Author or Editor:
P 289, first line of the Aside, replace "Sysem" by "System".

Anonymous  Feb 10, 2014 
Printed
Page 318
Para. beginning "We see", line 3

Replace "relvar S" by "relvar SC"

C.J. Date
C.J. Date
O'Reilly Author 
Feb 22, 2012 
Printed
Page 319
First code line

Replace "S" by "SC".

C.J. Date
C.J. Date
O'Reilly Author 
Feb 22, 2012 
Printed
Page 319
Code block at foot of page

In lines 1, 4, and 7, replace "S" by "SC"

C.J. Date
C.J. Date
O'Reilly Author 
Feb 22, 2012 
Printed
Page 320
Code block

In lines 2 and 8, replace "S.*" by "*". In line 16, replace "S.SNO" by "SNO". In lines 3, 9, and 17, replace "FROM S" by "FROM SC".

C.J. Date
C.J. Date
O'Reilly Author 
Feb 22, 2012 
Printed
Page 415
Annotation to reference [33]

In line 2, replace "features (see" by "features--see"

C.J. Date
C.J. Date
O'Reilly Author 
Feb 22, 2012 
Printed
Page 432
index entry for FORALL

in subentry "not in SQL", add page number 241

C.J. Date
C.J. Date
O'Reilly Author 
Feb 08, 2013