Joe Celko's SQL for Smarties

Joe Celko's SQL for Smarties, 4th Edition

Advanced SQL Programming

Joe Celko's SQL for Smarties, 4th Edition,Joe Celko,ISBN9780123820228


Morgan Kaufmann

9780123820228 New edition

9780123820235 New edition


235 X 191

Bestselling author and SQL guru Joe Celko ensures programming success through his new and expanded edition of SQL for Smarties which is packed with tips, tricks and other indispensable information for any and all SQL database practitioners and programmers who need to know how to get their job done.

Print Book + eBook

USD 82.14
USD 136.90

Buy both together and save 40%

Print Book


In Stock

Estimated Delivery Time
USD 68.95

eBook Overview

EPUB format

PDF format

VST (VitalSource Bookshelf) format

USD 67.95
Add to Cart

Key Features


  • Expert advice from a noted SQL authority and award-winning columnist who has given ten years service to the ANSI SQL standards committee
  • Teaches scores of advanced techniques that can be used with any product, in any SQL environment, whether it is an SQL 92 or SQL 2008 environment
  • Offers tips for working around deficiencies and gives insight into real-world challenges


Joe Celkos SQL for Smarties: Advanced SQL Programming offers tips and techniques in advanced programming. This book is the fourth edition and it consists of 39 chapters, starting with a comparison between databases and file systems. It covers transactions and currency control, schema level objects, locating data and schema numbers, base tables, and auxiliary tables. Furthermore, procedural, semi-procedural, and declarative programming are explored in this book. The book also presents the different normal forms in database normalization, including the first, second, third, fourth, fifth, elementary key, domain-key, and Boyce-Codd normal forms. It also offers practical hints for normalization and denormalization. The book discusses different data types, such as the numeric, temporal and character data types; the different predicates; and the simple and advanced SELECT statements. In addition, the book presents virtual tables, and it discusses data partitions in queries; grouping operations; simple aggregate functions; and descriptive statistics, matrices and graphs in SQL. The book concludes with a discussion about optimizing SQL. It will be of great value to SQL programmers.


This book is intended for working SQL programmers, database administrators, database designers, database analysts, and application system developers as well as those who are developing new features for database management systems who want to know about user needs. This would include anyone working with electronic content in the relational database context but also XML. Web services, etc.

Joe Celko

Joe Celko served 10 years on ANSI/ISO SQL Standards Committee and contributed to the SQL-89 and SQL-92 Standards. Mr. Celko is author a series of books on SQL and RDBMS for Elsevier/MKP. He is an independent consultant based in Austin, Texas. He has written over 1200 columns in the computer trade and academic press, mostly dealing with data and databases.

Affiliations and Expertise

Independent Consultant, Austin, Texas

View additional works by Joe Celko

Joe Celko's SQL for Smarties, 4th Edition

About the Author

Introduction to the Fourth Edition

Chapter 1 Databases versus File Systems

    1.1 Tables as Entities

    1.2 Tables as Relationships

    1.3 Rows versus Records

    1.4 Columns versus Fields

    1.5 Schema Objects

    1.6 CREATE SCHEMA Statement

Chapter 2 Transactions and Concurrency Control

    2.1 Sessions

    2.2 Transactions and ACID

    2.3 Concurrency Control

    2.4 Pessimistic Concurrency Control

    2.5 SNAPSHOT Isolation and Optimistic Concurrency

    2.6 Logical Concurrency Control

    2.7 Deadlock and Livelocks

Chapter 3 Schema Level Objects

    3.1 CREATE SCHEMA Statement


    3.3 CREATE DOMAIN Statement



    3.6 Character Set Related Constructs

Chapter 4 Locating Data and Special Numbers

    4.1 Exposed Physical Locators

    4.2 Generated Identifiers

    4.3 Sequence Generator Functions

    4.4 Preallocated Values

    4.5 Special Series

Chapter 5 Base Tables and Related Elements

    5.1 CREATE TABLE Statement

    5.2 Nested UNIQUE Constraints

    5.3 CREATE ASSERTION Constraints

    5.4 TEMPORARY Tables

    5.5 Manipulating Tables

    5.6 Avoiding Attribute Splitting

    5.7 Modeling Class Hierarchies in DDL

    5.8 Exposed Physical Locators

    5.9 Auto-Incrementing Columns

    5.10 Generated Identifiers

    5.11 A Remark on Duplicate Rows

    5.12 Other Schema Objects

    5.13 Temporary Tables

    5.14 CREATE DOMAIN Statement

    5.15 CREATE TRIGGER Statement

    5.16 CREATE PROCEDURE Statement

    5.17 DECLARE CURSOR Statement

Chapter 6 Procedural, Semiprocedural, and Declarative Programming

    6.1 Basics of Software Engineering

    6.2 Cohesion

    6.3 Coupling

    6.4 The Big Leap

    6.5 Rewriting Tricks

    6.6 Functions for Predicates

    6.7 Procedural versus Logical Decomposition

Chapter 7 Procedural Constructs



    7.3 CURSORs

    7.4 SEQUENCEs

    7.5 Generated Columns

    7.6 Table Functions

Chapter 8 Auxiliary Tables

    8.1 The Series Table

    8.2 Lookup Auxiliary Tables

    8.3 Auxiliary Function Tables

    8.4 Global Constants Tables

    8.5 A Note on Converting Procedural Code to Tables

Chapter 9 Normalization

    9.1 Functional and Multivalued Dependencies

    9.2 First Normal Form (1NF)

    9.3 Second Normal Form (2NF)

    9.4 Third Normal Form (3NF)

    9.5 Elementary Key Normal Form (EKNF)

    9.6 Boyce-Codd Normal Form (BCNF)

    9.7 Fourth Normal Form (4NF)

    9.8 Fifth Normal Form (5NF)

    9.9 Domain-Key Normal Form (DKNF)

    9.10 Practical Hints for Normalization

    9.11 Key Types

    9.12 Practical Hints for Denormalization

Chapter 10 Numeric Data Types

    10.1 Numeric Types

    10.2 Numeric Type Conversion

    10.3 Four Function Arithmetic

    10.4 Arithmetic and NULLs

    10.5 Converting Values to and from NULL

    10.6 Mathematical Functions

    10.7 Unique Value Generators

    10.8 IP Addresses

Chapter 11 Temporal Data Types

    11.1 Notes on Calendar Standards

    11.2 SQL Temporal Data Types

    11.3 INTERVAL Data Types

    11.4 Temporal Arithmetic

    11.5 The Nature of Temporal Data Models

Chapter 12 Character Data Types

    12.1 Problems with SQL Strings

    12.2 Standard String Functions

    12.3 Common Vendor Extensions

    12.4 Cutter Tables

    12.5 Nested Replacement

Chapter 13 NULLs: Missing Data in SQL

    13.1 Empty and Missing Tables

    13.2 Missing Values in Columns

    13.3 Context and Missing Values

    13.4 Comparing NULLs

    13.5 NULLs and Logic

    13.6 Math and NULLs

    13.7 Functions and NULLs

    13.8 NULLs and Host Languages

    13.9 Design Advice for NULLs

    13.10 A Note on Multiple NULL Values

Chapter 14 Multiple Column Data Elements

    14.1 Distance Functions

    14.2 Storing an IPv4 Address in SQL

    14.3 Storing an IPv6 Address in SQL

    14.4 Currency and Other Unit Conversions

    14.5 Social Security Numbers

    14.6 Rational Numbers

Chapter 15 Table Operations

    15.1 DELETE FROM Statement

    15.2 INSERT INTO Statement

    15.3 The UPDATE Statement

    15.4 A Note on Flaws in a Common Vendor Extension

    15.5 MERGE Statement

Chapter 16 Comparison or Theta Operators

    16.1 Converting Data Types

    16.2 Row Comparisons in SQL

    16.3 IS [NOT] DISTINCT FROM Operator

Chapter 17 Valued Predicates

    17.1 IS NULL

    17.2 IS [NOT]{TRUE | FALSE | UNKNOWN} Predicate

    17.3 IS [NOT] NORMALIZED Predicate

Chapter 18 CASE Expressions

    18.1 The CASE Expression

    18.2 Subquery Expressions and Constants

    18.3 Rozenshtein Characteristic Functions

Chapter 19 LIKE and SIMILAR TO Predicates

    19.1 Tricks with Patterns

    19.2 Results with NULL Values and Empty Strings

    19.3 LIKE Is Not Equality

    19.4 Avoiding the LIKE Predicate with a Join

    19.5 CASE Expressions and LIKE Search Conditions

    19.6 SIMILAR TO Predicates

    19.7 Tricks with Strings

Chapter 20 BETWEEN and OVERLAPS Predicates

    20.1 The BETWEEN Predicate

    20.2 OVERLAPS Predicate

Chapter 21 The [NOT] IN() Predicate

    21.1 Optimizing the IN() Predicate

    21.2 Replacing ORs with the IN() Predicate

    21.3 NULLs and the IN() Predicate

    21.4 IN() Predicate and Referential Constraints

    21.5 IN() Predicate and Scalar Queries

Chapter 22 EXISTS() Predicate

    22.1 EXISTS and NULLs

    22.2 EXISTS and INNER JOINs


    22.4 EXISTS() and Quantifiers

    22.5 EXISTS() and Referential Constraints

    22.6 EXISTS and Three-Valued Logic

Chapter 23 Quantified Subquery Predicates

    23.1 Scalar Subquery Comparisons

    23.2 Quantifiers and Missing Data

    23.3 The ALL Predicate and Extrema Functions

    23.4 The UNIQUE Predicate

    23.5 The DISTINCT Predicate

Chapter 24 The Simple SELECT Statement

    24.1 SELECT Statement Execution Order

    24.2 One-Level SELECT Statement

Chapter 25 Advanced SELECT Statements

    25.1 Correlated Subqueries

    25.2 Infixed INNER JOINs

    25.3 OUTER JOINs

    25.4 UNION JOIN Operators

    25.5 Scalar SELECT Expressions

    25.6 Old versus New JOIN Syntax

    25.7 Constrained JOINs

    25.8 Dr. Codd’s T-Join

Chapter 26 Virtual Tables: VIEWs, Derived Tables, CTEs, and MQTs

    26.1 VIEWs in Queries

    26.2 Updatable and Read-Only VIEWs

    26.3 Types of VIEWs

    26.4 How VIEWs Are Handled in the Database Engine

    26.5 WITH CHECK OPTION Clause

    26.6 Dropping VIEWs

    26.7 Hints on Using VIEWs versus TEMPORARY TABLEs

    26.8 Using Derived Tables

    26.9 Common Table Expressions

    26.10 Recursive Common Table Expressions

    26.11 Materialized Query Tables

Chapter 27 Partitioning Data in Queries

    27.1 Coverings and Partitions

    27.2 Relational Division

    27.3 Romley’s Division

    27.4 Boolean Expressions in an RDBMS

    27.5 FIFO and LIFO Subsets

Chapter 28 Grouping Operations

    28.1 GROUP BY Clause

    28.2 GROUP BY and HAVING

    28.3 Multiple Aggregation Levels

    28.4 Grouping on Computed Columns

    28.5 Grouping into Pairs

    28.6 Sorting and GROUP BY

Chapter 29 Simple Aggregate Functions

    29.1 COUNT() Functions

    29.2 SUM() Function

    29.3 AVG() Function

    29.4 Extrema Functions

    29.5 The LIST() Aggregate Function

    29.6 The PRD() Aggregate Function

    29.7 Bitwise Aggregate Functions

Chapter 30 Advanced Grouping, Windowed Aggregation, and OLAP in SQL

    30.1 Star Schema

    30.2 GROUPING Operators

    30.3 The Window Clause

    30.4 Windowed Aggregate Functions

    30.5 Ordinal Functions

    30.6 Vendor Extensions

    30.7 A Bit of History

Chapter 31 Descriptive Statistics in SQL

    31.1 The Mode

    31.2 The AVG() Function

    31.3 The Median

    31.4 Variance and Standard Deviation

    31.5 Average Deviation

    31.6 Cumulative Statistics

    31.7 Cross Tabulations

    31.8 Harmonic Mean and Geometric Mean

    31.9 Multivariable Descriptive Statistics in SQL

    31.10 Statistical Functions in SQL:2006

Chapter 32 Subsequences, Regions, Runs, Gaps, and Islands

    32.1 Finding Subregions of Size (n)

    32.2 Numbering Regions

    32.3 Finding Regions of Maximum Size

    32.4 Bound Queries

    32.5 Run and Sequence Queries

    32.6 Summation of a Series

    32.7 Swapping and Sliding Values in a List

    32.8 Condensing a List of Numbers

    32.9 Folding a List of Numbers

    32.10 Coverings

Chapter 33 Matrices in SQL

    33.1 Arrays via Named Columns

    33.2 Arrays via Subscript Columns

    33.3 Matrix Operations in SQL

    33.4 Flattening a Table into an Array

    33.5 Comparing Arrays in Table Format

Chapter 34 Set Operations

    34.1 UNION and UNION ALL


    34.3 A Note on ALL and SELECT DISTINCT

    34.4 Equality and Proper Subsets

Chapter 35 Subsets

    35.1 Every N-th Item in a Table

    35.2 Random Rows from a Table

    35.3 The CONTAINS Operators

    35.4 Gaps in a Series

    35.5 Covering for Overlapping Intervals

    35.6 Picking a Representative Subset

Chapter 36 Trees and Hierarchies in SQL

    36.1 Adjacency List Model

    36.2 The Path Enumeration Model

    36.3 Nested Set Model of Hierarchies

    36.4 Other Models for Trees and Hierarchies

Chapter 37 Graphs in SQL

    37.1 Adjacency List Model Graphs

    37.2 Split Node Nested Set Models for Graphs

    37.3 Points inside Polygons

    37.4 Graph Theory References

Chapter 38 Temporal Queries

    38.1 Temporal Math

    38.2 Personal Calendars

    38.3 Time Series

    38.4 Julian Dates

    38.5 Other Temporal Functions

    38.6 Weeks

    38.7 Modeling Time in Tables

    38.8 Calendar Auxiliary Table

    38.9 Problems with the Year 2000

Chapter 39 Optimizing SQL

    39.1 Access Methods

    39.2 How to Index

    39.3 Give Extra Information

    39.4 Index Multiple Columns Carefully

    39.5 Watch the IN Predicate

    39.6 Avoid UNIONs

    39.7 Prefer Joins over Nested Queries

    39.8 Use Fewer Statements

    39.9 Avoid Sorting

    39.10 Avoid CROSS JOINs

    39.11 Know Your Optimizer

    39.12 Recompile Static SQL after Schema Changes

    39.13 Temporary Tables Are Sometimes Handy

    39.14 Update Statistics

    39.15 Do Not Trust Newer Features


    General References


    Mathematical Techniques

    Random Numbers

    Scales and Measurements

    Missing Values

    Regular Expressions

    Graph Theory

    Introductory SQL Books

    Optimizing Queries

    Temporal Data and the Year 2000 Problem

    SQL Programming Techniques


    Updatable Views

    Theory, Normalization, and Advanced Database Topics

    Books on SQL-92 and SQL-99

    Standards and Related Groups

    Web Sites Related to SQL


    Temporal Databases

    Miscellaneous Citations


Quotes and reviews

"If you work with SQL in any way, shape, or form, the most recent edition of Joe Celko’s SQL for Smarties needs to be on your bookshelf!"--Data Technology Today Blog


Cyber Week Pre-Sale | Use Code CYBOOK15

Shop with Confidence

Free Shipping around the world
▪ Broad range of products
▪ 30 days return policy

Contact Us