CREATE VIEW syntax in PostgreSQL - Time & Space Complexity
When we create a view in a database, it acts like a saved query. Understanding how the time to get results grows helps us know how efficient our view is.
We want to see how the time to get data from a view changes as the data grows.
Analyze the time complexity of the following code snippet.
CREATE VIEW recent_orders AS
SELECT order_id, customer_id, order_date
FROM orders
WHERE order_date > CURRENT_DATE - INTERVAL '30 days';
This code creates a view that shows orders from the last 30 days.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Scanning the
orderstable rows to check the date condition. - How many times: Once for each row in the
orderstable when the view is queried.
As the number of orders grows, the database checks more rows to find those in the last 30 days.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 row checks |
| 100 | About 100 row checks |
| 1000 | About 1000 row checks |
Pattern observation: The work grows roughly in direct proportion to the number of rows in the orders table.
Time Complexity: O(n)
This means the time to get results grows linearly with the number of rows in the table.
[X] Wrong: "Creating a view makes the query run faster because it stores results."
[OK] Correct: A view just saves the query, it does not store data. The database runs the query each time you ask the view, so the time depends on the underlying data size.
Understanding how views work and their time cost shows you know how databases handle saved queries, a useful skill for real projects and interviews.
"What if we added an index on the order_date column? How would the time complexity change?"
Practice
CREATE VIEW in PostgreSQL?Solution
Step 1: Understand what a view is
A view is a virtual table that stores a SELECT query, not actual data.Step 2: Identify the purpose of CREATE VIEW
CREATE VIEW saves the SELECT query so you can reuse it easily without rewriting it.Final Answer:
To save a SELECT query as a virtual table for easy reuse -> Option BQuick Check:
CREATE VIEW = virtual table for queries [OK]
- Thinking views store data permanently
- Confusing views with tables
- Using CREATE VIEW to delete data
active_users showing users with status = 'active'?Solution
Step 1: Recall the correct CREATE VIEW syntax
The syntax is: CREATE VIEW view_name AS SELECT ...Step 2: Match the syntax with options
CREATE VIEW active_users AS SELECT * FROM users WHERE status = 'active'; matches the correct syntax exactly.Final Answer:
CREATE VIEW active_users AS SELECT * FROM users WHERE status = 'active'; -> Option AQuick Check:
CREATE VIEW view_name AS SELECT ... [OK]
- Swapping CREATE and VIEW keywords
- Omitting AS keyword
- Missing semicolon at the end
orders with columns order_id, customer_id, and amount, what will be the result of this view?CREATE VIEW big_orders AS SELECT order_id, amount FROM orders WHERE amount > 100;
What rows will
SELECT * FROM big_orders; return?Solution
Step 1: Analyze the SELECT query inside the view
The view selects order_id and amount from orders where amount is greater than 100.Step 2: Understand what SELECT * FROM big_orders returns
It returns all rows from the view, which are orders with amount > 100.Final Answer:
All orders with amount greater than 100 -> Option DQuick Check:
View filters orders with amount > 100 [OK]
- Confusing greater than with less than
- Expecting all columns instead of selected ones
- Assuming syntax error without checking carefully
CREATE VIEW recent_customers AS SELECT id, name FROM customers WHERE;
Solution
Step 1: Check the syntax after WHERE
The WHERE clause is incomplete; it must have a condition after WHERE.Step 2: Verify other parts of the statement
AS keyword is present, view name is valid, and SELECT columns are allowed to be partial.Final Answer:
Missing condition after WHERE keyword -> Option AQuick Check:
WHERE must have a condition [OK]
- Leaving WHERE empty
- Forgetting AS keyword
- Thinking view names have restrictions
customer_orders that shows each customer's name and the total amount they spent. Which of these is the correct way to create this view assuming tables customers(id, name) and orders(customer_id, amount)?Solution
Step 1: Understand the requirement
We need each customer's name and total amount spent, so we must join customers and orders and sum amounts grouped by customer name.Step 2: Check each option
CREATE VIEW customer_orders AS SELECT c.name, SUM(o.amount) FROM customers c JOIN orders o ON c.id = o.customer_id GROUP BY c.name; correctly joins tables, sums amounts, and groups by customer name. Others miss grouping or join conditions.Final Answer:
CREATE VIEW customer_orders AS SELECT c.name, SUM(o.amount) FROM customers c JOIN orders o ON c.id = o.customer_id GROUP BY c.name; -> Option CQuick Check:
Join + SUM + GROUP BY = correct view [OK]
- Missing GROUP BY when using SUM
- Not joining tables properly
- Selecting columns not in GROUP BY
Ready to prove it?
Pass the test and this pattern moves unknown
