Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Book 1: Getting Started with SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
CHAPTER 1: Understanding Relational Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
CHAPTER 2: Modeling a System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
CHAPTER 3: Getting to Know SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
CHAPTER 4: SQL and the Relational Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
CHAPTER 5: Knowing the Major Components of SQL . . . . . . . . . . . . . . . . . . . . . . . . . . 75
CHAPTER 6: Drilling Down to the SQL Nitty-Gritty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Book 2: Developing Relational Databases . . . . . . . . . . . . . . . . . . . 133
CHAPTER 1: System Development Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
CHAPTER 2: Building a Database Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
CHAPTER 3: Balancing Performance and Correctness . . . . . . . . . . . . . . . . . . . . . . . . . 169
CHAPTER 4: Creating a Database with SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Book 3: Writing SQL Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
CHAPTER 1: Values, Variables, Functions, and Expressions . . . . . . . . . . . . . . . . . . . . 219
CHAPTER 2: SELECT Statements and Modifying Clauses . . . . . . . . . . . . . . . . . . . . . . . 249
CHAPTER 3: Querying Multiple Tables with Subqueries . . . . . . . . . . . . . . . . . . . . . . . 295
CHAPTER 4: Querying Multiple Tables with Relational Operators . . . . . . . . . . . . . . . 323
CHAPTER 5: Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Book 4: Securing Your Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
CHAPTER 1: Protecting Against Hardware Failure and External Threats . . . . . . . . . 359
CHAPTER 2: Protecting Against User Errors and Conflicts . . . . . . . . . . . . . . . . . . . . . . 391
CHAPTER 3: Assigning Access Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
CHAPTER 4: Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Book 5: Programming with SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
CHAPTER 1: Database Development Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
CHAPTER 2: Interfacing SQL to a Procedural Language . . . . . . . . . . . . . . . . . . . . . . . . 455
CHAPTER 3: Using SQL in an Application Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
CHAPTER 4: Designing a Sample Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
CHAPTER 5: Building an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
CHAPTER 6: Understanding SQL’s Procedural Capabilities . . . . . . . . . . . . . . . . . . . . . 513
CHAPTER 7: Connecting SQL to a Remote Database . . . . . . . . . . . . . . . . . . . . . . . . . . 531
,Book 6: Working with Advanced Data Types
in SQL: XML, JSON, and PGQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
CHAPTER 1: Using XML with SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
CHAPTER 2: Storing XML Data in SQL Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
CHAPTER 3: Retrieving Data from XML Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
CHAPTER 4: Using JSON with SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
CHAPTER 5: Exploring Property Graph Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
Book 7: Optimizing Your Database . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
CHAPTER 1: Tuning the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
CHAPTER 2: Tuning the Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
CHAPTER 3: Finding and Eliminating Performance Bottlenecks . . . . . . . . . . . . . . . . 681
Book 8: Appendixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
CHAPTER 1: SQL:2023 Reserved Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
CHAPTER 2: Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
, Table of Contents
INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
About This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Foolish Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Icons Used in This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Beyond the Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Where to Go from Here . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
BOOK 1: GETTING STARTED WITH SQL . . . . . . . . . . . . . . . . . . . . . . . . 5
CHAPTER 1: Understanding Relational Databases . . . . . . . . . . . . . . . . . 7
Understanding Why Today’s Databases Are Better
than Early Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Irreducible complexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Managing data with complicated programs . . . . . . . . . . . . . . . . . . . . 8
Managing data with simple programs . . . . . . . . . . . . . . . . . . . . . . . .11
Which type of organization is better? . . . . . . . . . . . . . . . . . . . . . . . . .11
Databases, Queries, and Database Applications . . . . . . . . . . . . . . . . . .12
Making data useful . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
Retrieving the data you want — and only the data you want . . . . .12
Examining Competing Database Models . . . . . . . . . . . . . . . . . . . . . . . . .14
Looking at the historical background of the competing models . . .14
The hierarchical database model . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
The network database model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
The relational database model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
The object-oriented database model . . . . . . . . . . . . . . . . . . . . . . . . .25
The object-relational database model . . . . . . . . . . . . . . . . . . . . . . . .25
The nonrelational NoSQL model . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
Why the Relational Model Won . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
CHAPTER 2: Modeling a System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Capturing the Users’ Data Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
Identifying and interviewing stakeholders . . . . . . . . . . . . . . . . . . . . .30
Reconciling conflicting requirements . . . . . . . . . . . . . . . . . . . . . . . . .31
Obtaining stakeholder buy-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Translating the Users’ Data Model to a Formal
Entity-Relationship Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
Entity-Relationship modeling techniques . . . . . . . . . . . . . . . . . . . . .33
Drawing Entity-Relationship diagrams . . . . . . . . . . . . . . . . . . . . . . . .38
Understanding advanced ER model concepts . . . . . . . . . . . . . . . . . .41
A simple example of an ER model . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
A slightly more complex example . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Table of Contents v