Another Fantastic Oracle Book from Apress, January 12, 2009
First the negatives of the book:
* Page numbers are missing from all pages except the first page of each chapter. This is not a critical problem until one attempts to use the index at the back of the book to locate a specific topic.
* The initial word in a couple of paragraphs is missing.
* The left-most column of table 2-5 “SQL Arithmetic Operators” is blank. The left-most column of table 4-2 “SQL Comparison Operators” is blank.
* Between listing 9-14 and 9-15 (approximately page 244) the book states that an ORDER BY is executed before a ROWNUM filter in the WHERE clause is applied, when in fact the ORDER BY is applied after the ROWNUM filter is evaluated (based on the pre-existing order of the rows in the table blocks) – meaning that the desired rows from the query would not be returned, and that is why the inline view is required.
* The book states that GROUP BY requires a sort operation, but that is no longer the case with more recent releases of Oracle (it was a correct statement as of the original publication date).
* The front cover of the book states that the book includes a CD with a developer’s license for Oracle 10g (version 10.1.0.2). No CD is included with the book, however a version of Oracle with a developer license may be downloaded from Oracle’s OTN website.
* The book has limited coverage of analytical functions.
Like many of the Apress books, this book is extremely well written with a thoughtful layout and a careful progression of topics. This approach will help to advance the skills of readers who are just beginning to understand how to write Oracle SQL statements, and there is sufficient coverage of “newer” (or little known) syntax to assist long-term intermediate and advanced users of Oracle SQL in finding better ways of attacking old coding problems (using UPDATE against an inline view, instead-of-triggers, outputting HTML from SQL*Plus, regular expressions, INSERT ALL, SYS_CONNECT_BY_PATH, etc.).
Syntax of SQL*Plus commands and Oracle specific SQL is interspersed throughout the book’s chapters, introduced as those commands are needed by the author’s examples. I initially felt a bit disappointed by this approach until I noticed the thoroughness and organization of appendix A “Quick Reference to SQL and SQL*Plus”. For an intermediate to advanced user of Oracle SQL and SQL*Plus, that section of the book will prove invaluable when trying to determine if the correct linking syntax for a SQL statement is “ON”, “IN”, “OVER”, “FROM”, “TO”, or “OF”. For a beginner, that section of the book while help to quickly determine if a SQL command exists for a specific task.
Even with the negatives outlined at the beginning of this review, most of which appear to be typesetting issues, this book is still the best Oracle SQL reference that I have found so far, providing just enough detail to help a person to become productive when interacting with Oracle databases, without overwhelming the reader with 20 variations of different SQL statements which accomplish the same basic task. I just wish that I had found a book of this caliber a decade earlier.
Follow-up February 15, 2010:
An updated version of the book, now called “Beginning Oracle SQL”, is available here.