| | The Art of SQL |
| | Dedication |
| | Preface |
| | | Why Another SQL Book? |
| | | Audience |
| | | Assumptions This Book Makes |
| | | Contents of This Book |
| | | Conventions Used in This Book |
| | | Using Code Examples |
| | | Comments and Questions |
| | | Safari® Enabled |
| | | Acknowledgments |
| | Chapter 1. Laying Plans |
| | | Section 1.1. The Relational View of Data |
| | | Section 1.2. The Importance of Being Normal |
| | | Section 1.3. To Be or Not to Be, or to Be Null |
| | | Section 1.4. Qualifying Boolean Columns |
| | | Section 1.5. Understanding Subtypes |
| | | Section 1.6. Stating the Obvious |
| | | Section 1.7. The Dangers of Excess Flexibility |
| | | Section 1.8. The Difficulties of Historical Data |
| | | Section 1.9. Design and Performance |
| | | Section 1.10. Processing Flow |
| | | Section 1.11. Centralizing Your Data |
| | | Section 1.12. System Complexity |
| | | Section 1.13. The Completed Plans |
| | Chapter 2. Waging War |
| | | Section 2.1. Query Identification |
| | | Section 2.2. Stable Database Connections |
| | | Section 2.3. Strategy Before Tactics |
| | | Section 2.4. Problem Definition Before Solution |
| | | Section 2.5. Stable Database Schema |
| | | Section 2.6. Operations Against Actual Data |
| | | Section 2.7. Set Processing in SQL |
| | | Section 2.8. Action-Packed SQL Statements |
| | | Section 2.9. Profitable Database Accesses |
| | | Section 2.10. Closeness to the DBMS Kernel |
| | | Section 2.11. Doing Only What Is Required |
| | | Section 2.12. SQL Statements Mirror Business Logic |
| | | Section 2.13. Program Logic into Queries |
| | | Section 2.14. Multiple Updates at Once |
| | | Section 2.15. Careful Use of User-Written Functions |
| | | Section 2.16. Succinct SQL |
| | | Section 2.17. Offensive Coding with SQL |
| | | Section 2.18. Discerning Use of Exceptions |
| | Chapter 3. Tactical Dispositions |
| | | Section 3.1. The Identification of "Entry Points" |
| | | Section 3.2. Indexes and Content Lists |
| | | Section 3.3. Making Indexes Work |
| | | Section 3.4. Indexes with Functions and Conversions |
| | | Section 3.5. Indexes and Foreign Keys |
| | | Section 3.6. Multiple Indexing of the Same Columns |
| | | Section 3.7. System-Generated Keys |
| | | Section 3.8. Variability of Index Accesses |
| | Chapter 4. Maneuvering |
| | | Section 4.1. The Nature of SQL |
| | | Section 4.2. Five Factors Governing the Art of SQL |
| | | Section 4.3. Filtering |
| | Chapter 5. Terrain |
| | | Section 5.1. Structural Types |
| | | Section 5.2. The Conflicting Goals |
| | | Section 5.3. Considering Indexes as Data Repositories |
| | | Section 5.4. Forcing Row Ordering |
| | | Section 5.5. Automatically Grouping Data |
| | | Section 5.6. The Double-Edged Sword of Partitioning |
| | | Section 5.7. Partitioning and Data Distribution |
| | | Section 5.8. The Best Way to Partition Data |
| | | Section 5.9. Pre-Joining Tables |
| | | Section 5.10. Holy Simplicity |
| | Chapter 6. The Nine Situations |
| | | Section 6.1. Small Result Set, Direct Specific Criteria |
| | | Section 6.2. Small Result Set, Indirect Criteria |
| | | Section 6.3. Small Intersection of Broad Criteria |
| | | Section 6.4. Small Intersection, Indirect Broad Criteria |
| | | Section 6.5. Large Result Set |
| | | Section 6.6. Self-Joins on One Table |
| | | Section 6.7. Result Set Obtained by Aggregation |
| | | Section 6.8. Simple or Range Searching on Dates |
| | | Section 6.9. Result Set Predicated on Absence of Data |
| | Chapter 7. Variations in Tactics |
| | | Section 7.1. Tree Structures |
| | | Section 7.2. Representing Trees in an SQL Database |
| | | Section 7.3. Practical Implementation of Trees |
| | | Section 7.4. Walking a Tree with SQL |
| | | Section 7.5. Aggregating Values from Trees |
| | Chapter 8. Weaknesses and Strengths |
| | | Section 8.1. Deceiving Criteria |
| | | Section 8.2. Abstract Layers |
| | | Section 8.3. Distributed Systems |
| | | Section 8.4. Dynamically Defined Search Criteria |
| | Chapter 9. Multiple Fronts |
| | | Section 9.1. The Database Engine as a Service Provider |
| | | Section 9.2. Concurrent Data Changes |
| | Chapter 10. Assembly of Forces |
| | | Section 10.1. Increasing Volumes |
| | | Section 10.2. Data Warehousing |
| | Chapter 11. Stratagems |
| | | Section 11.1. Turning Data Around |
| | | Section 11.2. Querying with a Variable in List |
| | | Section 11.3. Aggregating by Range (Bands) |
| | | Section 11.4. Superseding a General Case |
| | | Section 11.5. Selecting Rows That Match Several Items in a List |
| | | Section 11.6. Finding the Best Match |
| | | Section 11.7. Optimizer Directives |
| | Chapter 12. Employment of Spies |
| | | Section 12.1. The Database Is Slow |
| | | Section 12.2. The Components of Server Load |
| | | Section 12.3. Defining Good Performance |
| | | Section 12.4. Thinking in Business Tasks |
| | | Section 12.5. Execution Plans |
| | | Section 12.6. Using Execution Plans Properly |
| | | Section 12.7. What Really Matters? |
| | PHOTO CREDITS |
| | About the Author |
| | Index |