
At a Glance
400 Pages
22.23 x 17.78 x 1.91
Paperback
$81.75
or 4 interest-free payments of $20.44 with
orShips in 5 to 10 business days
| Laying the Groundwork | |
| Choosing a Troubleshooting Environment | p. 3 |
| Query Analyzers | p. 8 |
| Graphical Tools | p. 12 |
| Development Environments | p. 16 |
| Facing Reality | p. 17 |
| Summary | p. 19 |
| Using Best Practices | p. 21 |
| A Guided Tour of Best Practices | p. 24 |
| Make Your Code Self-Documenting | p. 24 |
| Make Your Code Readable | p. 36 |
| Undertake All Actions Explicitly | p. 38 |
| Include Narrative Comments | p. 40 |
| Stick to Supported Options | p. 40 |
| Optimizing Queries | p. 41 |
| Protecting Data | p. 44 |
| Protecting Data Integrity | p. 45 |
| Summary | p. 47 |
| Preparing Your Troubleshooting Environment | p. 49 |
| What to Have Handy | p. 50 |
| What to Make Ready | p. 53 |
| What to Set Up | p. 54 |
| What to Run | p. 55 |
| How to Run Your Environment | p. 57 |
| Summary | p. 58 |
| Analyzing Problems | |
| Creating Databases | p. 61 |
| Troubleshooting Setup Problems | p. 62 |
| Database Objects and User Relationships | p. 65 |
| Organizing Tables | p. 68 |
| Putting the Database on Disk | p. 78 |
| Protecting Response Time | p. 82 |
| Creating Indexes | p. 82 |
| Archiving Data | p. 84 |
| Managing Logs and Files | p. 85 |
| Securing the Data | p. 88 |
| Defining Users | p. 90 |
| Defining Roles | p. 94 |
| Summary | p. 97 |
| Normalizing Tables | p. 99 |
| Thirteen Rules | p. 101 |
| First Normal Form | p. 105 |
| Further Normal Forms | p. 108 |
| Second Normal Form | p. 109 |
| Third Normal Form | p. 110 |
| Boyce-Codd Normal Form | p. 111 |
| Fourth Normal Form | p. 112 |
| Fifth Normal Form and Beyond | p. 113 |
| Optimizing Tables | p. 115 |
| Normalizing to Optimize | p. 115 |
| Considering Denormalization | p. 116 |
| Summary | p. 116 |
| Using Data Types | p. 117 |
| Using Data Types | p. 118 |
| Numeric Data Types | p. 120 |
| Time-Related Data Types | p. 123 |
| Character Data Types | p. 126 |
| Converting Data Types from One Database to Another | p. 129 |
| Summary | p. 131 |
| Selecting Data | p. 133 |
| The Basic SELECT Statement | p. 135 |
| Aggregates as Complicating Factors | p. 136 |
| Joins as Complicating Factors | p. 139 |
| WHERE Clauses as Complicating Factors | p. 141 |
| A Look at a Complex Query | p. 142 |
| A Few Practical Suggestions | p. 147 |
| Summary | p. 148 |
| Inserting Data | p. 149 |
| The Basic INSERT Statement | p. 151 |
| Inserting into Multiple Tables | p. 152 |
| Common Complicating Factors | p. 154 |
| Database Design | p. 154 |
| Constraints | p. 156 |
| Null Values | p. 158 |
| Missing Values | p. 159 |
| Multiple Values | p. 159 |
| Examining a Complex INSERT Statement | p. 160 |
| A Few Practical Suggestions | p. 167 |
| Summary | p. 167 |
| Updating Data | p. 169 |
| Transactional Integrity | p. 170 |
| The ACID Test | p. 171 |
| Types of Locks | p. 174 |
| Lock Granularity | p. 175 |
| Optimistic and Pessimistic Locking | p. 176 |
| Making Optimistic Locking Work | p. 176 |
| Deadlocks | p. 178 |
| Transaction Suggestions | p. 180 |
| The Basic UPDATE Statement | p. 180 |
| WHERE Is Your Best Friend | p. 181 |
| Using the FROM Clause | p. 181 |
| Updating to Calculated Values | p. 182 |
| Things That Prevent Updates | p. 183 |
| Undocumented Schemas | p. 184 |
| Data Type Incompatibility | p. 184 |
| Unique Primary Key Constraints | p. 185 |
| Foreign Key Constraints | p. 187 |
| Unique Index Constraints | p. 187 |
| Allow Nulls and Defaults | p. 187 |
| Check Constraints | p. 188 |
| Triggers | p. 188 |
| Views, with Check | p. 189 |
| Security Settings | p. 189 |
| Summary | p. 190 |
| Deleting Data | p. 191 |
| The Basic DELETE Statement | p. 192 |
| Just in Case | p. 192 |
| The Data Saving WHERE Clause | p. 193 |
| FROM-FROM | p. 193 |
| Things That Prevent Deletions | p. 194 |
| Referential Integrity | p. 195 |
| Optional Foreign Keys | p. 195 |
| Cascade Deletes | p. 196 |
| Cascade Delete Triggers | p. 197 |
| Logical Deletion | p. 198 |
| Logical Delete Flag | p. 198 |
| Logical Delete Triggers | p. 199 |
| Cascading Logical Deletes | p. 201 |
| Truncating a Table | p. 202 |
| Summary | p. 202 |
| Grouping and Aggregating Data | p. 203 |
| Common Aggregate Functions | p. 205 |
| The COUNT() Function | p. 205 |
| The SUM() Function | p. 208 |
| The AVG() Function | p. 209 |
| The MIN() and MAX() Functions | p. 209 |
| GROUP BY | p. 210 |
| Cleaning Up a GROUP BY Query | p. 211 |
| The SQL Order with Aggregates | p. 213 |
| Generating Cube Subtotals | p. 214 |
| Recap | p. 215 |
| Summary | p. 216 |
| Using Joins | p. 217 |
| The Join Within the SQL Statement | p. 219 |
| Inner Joins | p. 219 |
| Changes in the Resulting Row Count | p. 219 |
| Working with Graphic Query Tools | p. 220 |
| Execution Order of the SQL Statement | p. 221 |
| Self Joins | p. 222 |
| Outer Joins | p. 225 |
| Right Outer Joins | p. 226 |
| Data Scrubbing with Nulls | p. 226 |
| Full Outer Joins | p. 227 |
| An Eighteenth-Century Analogy | p. 227 |
| Legacy Joins | p. 228 |
| Cross Joins | p. 229 |
| Union Joins | p. 229 |
| Complex Joins | p. 230 |
| Multiple Tables | p. 230 |
| Multiple Join Conditions | p. 231 |
| Non-Equal Join | p. 231 |
| A Readable Style | p. 232 |
| Summary | p. 232 |
| Using Subqueries | p. 233 |
| Subquery Basics | p. 234 |
| Substituting Subqueries | p. 235 |
| Substituting a Column Name | p. 236 |
| Substituting a Column Value | p. 239 |
| Dynamically Setting the Top Row Count | p. 241 |
| Referencing a Derived Table | p. 242 |
| Building a Dynamic WHERE Clause | p. 243 |
| Altering the GROUP BY and ORDER BY | p. 245 |
| Correlated Subqueries | p. 246 |
| Summary | p. 247 |
| Using Views | p. 249 |
| Using Views | p. 251 |
| Views to Project Columns | p. 252 |
| Nesting Views | p. 252 |
| Partitioned Views and Federated Databases | p. 255 |
| Views as Security | p. 259 |
| Using the WITH CHECK Option | p. 259 |
| Problems with Views | p. 260 |
| Speaking of Locks, Updates, and Views | p. 260 |
| Performance | p. 261 |
| Views Are Often Nonupdatable | p. 262 |
| Schema Changes | p. 262 |
| Debugging Difficulties | p. 263 |
| Multiple Table References | p. 264 |
| Editing Views | p. 264 |
| Rebuilding Database Objects from Scripts | p. 265 |
| Summary | p. 265 |
| Solving Complex Problems | |
| Triggers, Stored Procedures, and Parameters | p. 269 |
| Why Use Triggers and Stored Procedures? | p. 271 |
| Eliminating Code Troubles with Triggers and Stored Procedures | p. 271 |
| Scenario | p. 272 |
| Option 1: Modifying the Code | p. 276 |
| Triggers | p. 277 |
| Option 2: Using a Trigger | p. 279 |
| Option 3: Using Stored Procedures | p. 279 |
| Syntax and Types of Stored Procedures | p. 282 |
| Debugging Stored Procedures | p. 284 |
| Using Parameters | p. 286 |
| What Are Parameters? | p. 286 |
| Parameter Fundamentals | p. 288 |
| Summary | p. 290 |
| Transactions | p. 291 |
| Transaction Processing Requirements | p. 293 |
| Atomic | p. 293 |
| Consistent | p. 293 |
| Isolated | p. 294 |
| Durable | p. 294 |
| Transaction Fundamentals | p. 294 |
| Database Locks | p. 295 |
| Understanding Locks | p. 295 |
| Using Locks | p. 297 |
| Using Transactions | p. 298 |
| Transactions in Oracle | p. 298 |
| Controlling Transactions | p. 301 |
| Transactions in Transact-SQL | p. 301 |
| Transactions and Stored Procedures | p. 302 |
| Monitoring Transactions: Using the Transaction Log | p. 303 |
| Summary | p. 304 |
| Using Cursors and Exceptions | p. 305 |
| Understanding Cursors | p. 306 |
| Creating and Using Cursors | p. 307 |
| Cursors for Transact-SQL | p. 308 |
| Creating SQL Cursors | p. 308 |
| Opening Cursors | p. 309 |
| Updating and Deleting Cursors | p. 311 |
| Closing Cursors | p. 312 |
| Understanding Cursors for PL/SQL | p. 313 |
| Declaring a Cursor | p. 313 |
| Exceptions in PL/SQL | p. 317 |
| Exception Types | p. 317 |
| Exception Handling | p. 319 |
| RAISE and RAISE_APPLICATION_ERROR Statements | p. 320 |
| Summary | p. 323 |
| Trees | p. 325 |
| Introducing Trees | p. 326 |
| Understanding Trees and Hierarchies | p. 327 |
| Rules for Trees | p. 332 |
| Limits of the CONNECT BY Clause | p. 333 |
| Extracting Information Within Trees | p. 335 |
| Tree Operations | p. 336 |
| Deleting a Subtree | p. 336 |
| Subtree Incorporation | p. 337 |
| Summary | p. 337 |
| Index | p. 339 |
| Table of Contents provided by Syndetics. All Rights Reserved. |
ISBN: 9780072134896
ISBN-10: 0072134895
Series: Application Development
Published: 1st September 2001
Format: Paperback
Language: English
Number of Pages: 400
Audience: General Adult
Publisher: MCGRAW HILL BOOK CO
Country of Publication: US
Dimensions (cm): 22.23 x 17.78 x 1.91
Weight (kg): 0.66
Shipping
| Standard Shipping | Express Shipping | |
|---|---|---|
| Metro postcodes: | $9.99 | $14.95 |
| Regional postcodes: | $9.99 | $14.95 |
| Rural postcodes: | $9.99 | $14.95 |
Orders over $89.00 qualify for free shipping.
How to return your order
At Booktopia, we offer hassle-free returns in accordance with our returns policy. If you wish to return an item, please get in touch with Booktopia Customer Care.
Additional postage charges may be applicable.
Defective items
If there is a problem with any of the items received for your order then the Booktopia Customer Care team is ready to assist you.
For more info please visit our Help Centre.
You Can Find This Book In

Apache Iceberg: The Definitive Guide
Data Lakehouse Functionality, Performance, and Scalability on the Data Lake
Paperback
RRP $133.00
$106.40
OFF

Joe Celko's SQL Puzzles and Answers, Second Edition
The Morgan Kaufmann Series in Data Management Systems
Paperback
RRP $116.95
$91.75
OFF






















