Chapter 5: Advanced Statements
Complex queries in PostgreSQL
The SELECT statement #
The SELECT statement can be used to query for datasets. Combined with the WHERE filter
clause, it can be used to query for datasets with a particular property or condition.
SELECT * FROM categories WHERE pk > 2;
Pattern Matching #
The LIKE and ILIKE clause is used for pattern matching, where ILIKE is used for
case-insensitive pattern matches.
SELECT * FROM categories WHERE title LIKE 'Prog%';
SELECT * FROM categories WHERE description ILIKE '%DISCUSS%';
See PostgreSQL: Pattern Matching for more information.
Using LIMIT and OFFSET #
The LIMIT clause limits the number of rows returned by a query, whereas the OFFSET clause
is used to skip a specific number of rows returned by the query.
See PostgreSQL: Limit and Offset for more information.
Using subqueries #
Subqueries are nested queries that can be performed in a SELECT query. Subqueries can
return a single value or a recordset.
See PostgreSQL: Subqueries for all possible subquery expressions.
Joins #
Joins make queries in multiple tables.
Take the ff. for example:
SELECT c.name as "C_NAME", p.name as "P_NAME"
from posts as p, categories as c;
This will create a cartesian product between the category table and posts table where the total records are .
The ff. join clause creates a similar output:
SELECT c.name as "C_NAME", p.name as "P_NAME"
from categories as c CROSS JOIN posts as p;
See PostgreSQL: Joined Tables for more information.
Aggregate functions #
Aggregate functions perform a calculation on a set of rows and return a single row.
PostgreSQL provides all the standard SQL aggregate functions:
AVG()COUNT()MAX()MIN()SUM()
Aggregate functions are used in conjunction with the GROUP BY clause which splits the
resultset into groups of rows and aggregate functions perform calculations on them.
A recordset from a GROUP BY clause can be filtered with a condition using the
HAVING clause.
Common Table Expressions (CTEs) #
A Common Table Expression (or CTE) provides a way to write auxiliary statements to be provided in much larger queries.
These statements are temporary tables that exist for just one query.
See PostgreSQL: Common Table Expressions for more information.