Writing technical books is always a juggling act between depth and breadth. Unless you're writing a 2,000-page Microsoft tome, there's no way you can provide both complete coverage and enough detail to be a complete reference. This is particularly true of books written for the IBM i, which have to serve the dual purpose of educating on the basic topic as well as addressing the nuances specific to the midrange platform. The best you can hope to do is to address the critical areas with enough depth to make someone productive.
Happily, James Cooper's book Database Design and SQL for DB2 manages to do exactly that. This book provides everything an IBM i programmer needs in order to become productive with SQL, particularly in an RPG environment, and manages to do it all in close to 500 pages. To do this, the book has three distinct sections. The first and largest section introduces SQL and all the related concepts of relational database before moving on to a broad but surprisingly in-depth coverage of SQL concepts, including both data definition and access. The second section then provides an excellent discussion of embedded SQL programming for ILE RPG. The third section closes the book by presenting a number of advanced topics, including one of the best presentations on SQL authorities I've ever read.
A Complete Introduction to SQL
The first section, which includes the first 10 chapters of the book, is as complete an introduction to SQL as you're likely to find. It really has two subsections: the first five chapters discuss the fundamentals of relational database design and definition, while the next five concentrate on data access. I particularly like that the database design section provides foundational knowledge about databases and entity-relationship diagramming. These are topics you should understand even if you aren't building an entire database from scratch. The book makes sure you understand the importance of proper database design without getting bogged down in the minutiae. The textbook style is especially conducive to self-paced learning: each chapter introduces new topics and terminology and then provides a review at the end.
The next three chapters provide a solid groundwork for the budding embedded SQL programmer. The focus is on ILE RPG, and it's nice to see that the examples use free-form RPG. If you're modernizing your skill set to use SQL, you should probably also consider free-form. In fact, since SQL and free-form RPG work so well together, this might be a good opportunity to push for free-form RPG as well. This section of the book explains how SQL is integrated into RPG and how to use cursors as an alternative to logical files (or OPNQRYF) and then provides the practical knowledge of compiling and executing your embedded SQL programs.
The final chapters of the book cover stored procedures and triggers, provide a brief introduction to some additional topics including commitment control, and end with a discussion of database security. None of these chapters is exhaustive, but they provide enough meat for you to get started, and I appreciate the fact that they've been included at all. If you're considering securing your database, the discussion on GRANT and REVOKE alone could be worth the time spent with the book.
Solid Help for IBM i SQL Newbies
Realize that this book is specifically targeted to teach SQL to those who are new to the technology; that's why the SQL introduction takes up the first 10 chapters of the book. You start out learning the definition of a Database Management System (DBMS), and work your way all the way down to the idea of queries, subqueries, views, and indexes. But it's also meant as a comprehensive roadmap for the IBM i programmer: the embedded SQL section and the advanced topics round out the book in a way that no beginning SQL manual would do. By providing all three sections, the book becomes a launching point for all RPG programmers.
My only disappointment is that the book isn't 2,000 pages! OK, that would be far too long, but the book provides such good information that I was sorry to see it end. If you're an RPG programmer who just hasn't had the time to dig into SQL but you see it on the horizon, you need to start learning it. If you have time for just one book to begin your journey into SQL on the IBM i, this is that book.