CodeBlanks Logo Icon CodeBlanks

CTE vs subquery

Compare CTE and subquery.

CTE vs subquery

A CTE is a readable form of a subquery. It breaks complex subqueries into parts.

-- Alt sorgu
SELECT * FROM (SELECT * FROM customers WHERE status = 'active') sub;
-- CTE
WITH active AS (SELECT * FROM customers WHERE status = 'active')
SELECT * FROM active;

Both forms give the same result.

All columns are selected from (SELECT * FROM customers WHERE status ….

CTE vs subquery — details

A CTE is more readable. You can reuse the same CTE multiple times; in a subquery this is hard.

Performance is usually the same in most databases; the difference is for the person reading and maintaining the query. Named steps instead of deeply nested subqueries make bugs easier to find.

Practice CTE vs subquery

Convert a subquery to a CTE: WITH active AS (SELECT ...).

Starter code

query.sql
-- convert to CTE
WITH

Sample solution

query.sql
WITH active AS (SELECT * FROM customers WHERE status = 'active')
SELECT * FROM active;

Expected output

id  name   status
1   Ayşe   active

Questions and answers

Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.

1 What advantage does a CTE have over a subquery?

  • Speed
  • Memory
  • Security
  • Readability Correct answer

Explanation: A CTE is more readable.

2 Write CTE

Question
____ active AS (SELECT * FROM customers WHERE status = 'active')
SELECT * FROM active;
Answer
WITH active AS (SELECT * FROM customers WHERE status = 'active')
SELECT * FROM active;

Explanation: Every CTE is defined with WITH; the SELECT after it uses the name like a table.

3 CTE vs subquery: match the terms

Term Meaning
CTE readable
subquery nested
reuse multiple
clean organized

All lessons in Advanced