This edition differs from its predecessor in a number of ways. The overall objective remains the same, of course—
using SQL relationally is still the emphasis—but the text has been revised throughout to reflect, among other things,
experience gained from teaching live seminars based on the first edition.
One significant change is a deletion: The appendix on design theory has gone. There are two reasons for this
change. First, design theory as such never really did have all that much to do with the book’s main message,
anyway; second, the appendix was getting so extensive that it threatened to overwhelm the rest of the text. (It was
already longer than any chapter or any other appendix in the book. In fact, I’ve since expanded the material into a
separate book in its own right. That book—Normal Forms and All That Jazz: A Database Professional’s Guide to
Database Design Theory—is due to be published soon by O’Reilly. It can be seen as a companion, or perhaps a
sequel, to the present book.)
On the positive side, a lot of new material has been added (including, importantly, a discussion of how to
deal with missing information without using nulls); examples, exercises, and answers have been expanded and
improved in various respects; and the treatment of SQL has been upgraded to cover recent changes to the SQL
standard. A variety of corrections and numerous cosmetic improvements have also been made.2 (In particular, the
Tutorial D examples—Tutorial D being the language I use to illustrate relational concepts—have been upgraded to
reflect several recent improvements to that language. See Appendix D.) The net effect is to make the text rather
more comprehensive—but, sadly, some 25 percent bigger—than its predecessor.
Talking of the text, I’d like to say something about my use of footnotes. Frankly, I’m rather embarrassed at
how many footnotes there are; I’m well aware how annoying they can be—indeed, they can seriously impede
readability. But any text dealing with SQL is more or less forced into a heavy use of footnotes, at least if it wants to
be tutorial in nature and yet reasonably comprehensive at the same time. The reason is that SQL involves so many
inconsistencies, exceptions, and special cases that treating everything “in line”—i.e., at the same level of
description—makes it very difficult to see the forest for the trees. (Indeed, this is one reason why the SQL standard
itself is so difficult to understand.) Thus, there are numerous places in the book where the major idea is described
“in line” in the main body of the text, and exceptions and the like (which must at least be mentioned, for reasons of
accuracy and completeness) are relegated to a footnote. It might be best simply to ignore all footnotes on a first
reading.