SELECT specific columns in SQL - Time & Space Complexity
When we ask how long a database query takes, we want to know how the work grows as the data grows.
Here, we look at how selecting only certain columns affects the time it takes to get results.
Analyze the time complexity of the following code snippet.
SELECT first_name, last_name, email
FROM customers
WHERE country = 'USA';
This query fetches only three columns from the customers who live in the USA.
- Primary operation: Scanning each row in the customers table to check the country.
- How many times: Once for each row in the table (n times).
As the number of rows grows, the database checks each row once to see if it matches the country.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: The work grows directly with the number of rows.
Time Complexity: O(n)
This means the time to run the query grows in a straight line as the table gets bigger.
[X] Wrong: "Selecting fewer columns makes the query run much faster because it reads less data."
[OK] Correct: The main time is spent checking each row, not just reading columns. Selecting fewer columns helps with data transfer but does not reduce the number of rows checked.
Understanding how queries scale with data size helps you write efficient database code and explain your thinking clearly in interviews.
"What if we added an index on the country column? How would the time complexity change?"
Practice
SELECT name, age FROM users; do?Solution
Step 1: Understand the SELECT clause
The SELECT clause specifies which columns to retrieve from the table.Step 2: Identify columns listed
The columns listed are name and age, so only these will be returned.Final Answer:
It retrieves only the name and age columns from the users table. -> Option DQuick Check:
SELECT specific columns = selected columns only [OK]
- Thinking SELECT * returns specific columns
- Confusing SELECT with DELETE or UPDATE
- Not separating columns by commas
Solution
Step 1: Check column separation syntax
Columns must be separated by commas without parentheses.Step 2: Identify correct option
SELECT id, email FROM contacts; uses commas correctly: SELECT id, email FROM contacts;Final Answer:
SELECT id, email FROM contacts; -> Option BQuick Check:
Columns separated by commas = correct syntax [OK]
- Omitting commas between columns
- Using parentheses around columns
- Using semicolons between columns
products with columns product_id, name, and price, what will be the output of this query?SELECT name, price FROM products WHERE price < 50;
Solution
Step 1: Understand SELECT columns
The query selects only name and price columns.Step 2: Apply WHERE condition
Only rows where price is less than 50 are included.Final Answer:
Only the name and price columns for products priced below 50 -> Option CQuick Check:
SELECT specific columns + WHERE filters rows [OK]
- Expecting all columns to be returned
- Thinking WHERE changes columns selected
- Assuming error if column not in SELECT
SELECT name age FROM employees;
Solution
Step 1: Check column separation
Columns must be separated by commas; here name and age are not separated.Step 2: Confirm table name and syntax
Table name employees is valid and WHERE is optional.Final Answer:
Missing comma between columns name and age -> Option AQuick Check:
Columns need commas between them [OK]
- Forgetting commas between columns
- Thinking WHERE is mandatory
- Assuming table name is wrong without evidence
orders with columns order_id, customer_id, order_date, and total. You want to list only the order_id and total for orders made in 2023. Which query is correct?Solution
Step 1: Select specific columns
We want only order_id and total, so SELECT order_id, total is correct.Step 2: Filter orders from 2023
Using WHERE order_date LIKE '2023%' matches dates starting with 2023.Step 3: Check other options
SELECT order_id total FROM orders WHERE order_date = 2023; misses comma and uses wrong date filter; SELECT order_id, total FROM orders WHERE order_date = '2023'; uses exact match which won't work for full dates; SELECT * FROM orders WHERE order_date LIKE '2023%'; selects all columns, not specific ones.Final Answer:
SELECT order_id, total FROM orders WHERE order_date LIKE '2023%'; -> Option AQuick Check:
Select columns + LIKE filter for year = correct query [OK]
- Forgetting commas between columns
- Using = instead of LIKE for partial date match
- Selecting all columns instead of specific ones
Ready to prove it?
Pass the test and this pattern moves unknown
