When it comes to landing a tech job, SQL expertise often stands out as a deal-breaker during interviews. Advanced SQL skills aren’t just about knowing your way around SELECT statements; they’re about solving real-world data challenges efficiently and accurately. And when it comes to senior roles, hiring managers dig even deeper, often asking tricky and complex advanced SQL interview questions to gauge your problem-solving approach.
If you’re preparing for an interview, you’ve probably realized that simple CRUD operations won’t cut it. Companies want to see how well you can handle complex joins, optimize slow queries, and tackle intricate scenarios like recursive queries or handling edge cases in datasets. That’s why mastering advanced SQL interview questions is more than a checkbox—it’s a core step in standing out as a top candidate.
In this guide, we’ll walk you through 40 advanced SQL interview questions that not only reflect what recruiters frequently ask but also help you solidify your skills for real-world applications.
Before we dive into the questions, let’s first understand what separates basic SQL from advanced concepts.
What Makes SQL Advanced?
Advanced SQL isn’t about memorizing obscure syntax—it’s about applying foundational concepts to solve complex, real-world problems. At its core, advanced SQL involves techniques and approaches that go beyond basic queries to handle large datasets, improve performance, and provide actionable insights.
For example, understanding concepts like window functions, common table expressions (CTEs), and recursive queries can set you apart. These tools allow you to write queries that are not only efficient but also easier to maintain. Employers look for candidates who can design scalable solutions, such as optimizing a query that processes millions of rows or creating dynamic reports with advanced grouping techniques like ROLLUP and CUBE.
Advanced SQL interview questions often test your ability to:
- Combine multiple datasets seamlessly using complex joins.
- Optimize queries to reduce execution time and server load.
- Use window functions for ranking, running totals, and moving averages.
- Solve intricate problems like detecting duplicate records or handling hierarchical data.
The key isn’t just about writing a query that works—it’s about writing a query that works well. With the increasing demand for data-driven decision-making, knowing how to tackle advanced SQL scenarios can make you a top candidate.
Also Read: Best GCP Data Engineer Interview Questions 2024
Let’s move on to the real challenge: the questions themselves.
Top 40 Advanced SQL Interview Questions and Answers
This comprehensive guide is divided into four key sections, covering conceptual and theoretical questions, SQL query challenges, scenario-based problems, and advanced SQL features and extensions. By exploring these advanced SQL interview questions, you’ll gain the knowledge and confidence to tackle even the trickiest topics.
Conceptual and Theoretical SQL Questions
1. What is the difference between HAVING and WHERE clauses?
Answer: The WHERE clause filters rows before grouping, while the HAVING clause filters groups after aggregation.
Example:
SELECT department, COUNT(*)
FROM employees
WHERE status = 'active'
GROUP BY department
HAVING COUNT(*) > 10;
In this query:
WHERE filters rows where status is 'active'.
HAVING ensures only groups with more than 10 employees are returned.
2. Explain the difference between RANK(),DENSE_RANK(), and ROW_NUMBER().
Answer: These are window functions used for ranking rows within a partition:
RANK(): Assigns a rank, but skips ranks if there are ties.
DENSE_RANK(): Similar to RANK(), but does not skip ranks for ties.
ROW_NUMBER(): Assigns a unique number to each row, regardless of ties.
Example:
SELECT employee_id, salary,
RANK() OVER (ORDER BY salary DESC) AS rank,
DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_number
FROM employees;
3. How does indexing work in SQL, and when should you avoid using it?
Answer: Indexing speeds up data retrieval by creating a structured reference for specific columns. However, indexes should be avoided when:
- A table has frequent INSERT, UPDATE, or DELETE operations, as indexes slow down these processes.
- Columns with high cardinality or frequent changes.
- Small tables where a full table scan is faster.
4. What are window functions, and how are they used?
Answer: Window functions perform calculations across a set of rows related to the current row, without collapsing them into a single output.
Example: Calculate a running total
SELECT employee_id, department, salary,
SUM(salary) OVER (PARTITION BY department ORDER BY employee_id) AS running_total
FROM employees;
5. Explain the ACID properties in SQL databases.
Answer: ACID stands for:
- Atomicity: Transactions are all-or-nothing.
- Consistency: Transactions bring the database from one valid state to another.
- Isolation: Transactions do not affect each other.
- Durability: Committed transactions are saved, even in case of a system failure.
6. What is a CTE, and how does it differ from subqueries?
Answer: A Common Table Expression (CTE) is a temporary result set defined within a query. Unlike subqueries, CTEs:
- Can be referenced multiple times in the same query.
- Are easier to read and debug for complex queries.
Example:
WITH EmployeeCTE AS (
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
)
SELECT *
FROM EmployeeCTE
WHERE employee_count > 10;
7. What are materialized views, and when are they useful?
Answer: Materialized views store the result of a query physically, unlike regular views which are virtual. They are useful when:
- You need fast access to precomputed results for complex queries.
- The underlying data doesn’t change frequently.
Example:
CREATE MATERIALIZED VIEW EmployeeStats AS
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
8. Describe the different types of SQL joins and when to use each.
Answer:
- Inner Join: Returns rows with matching values in both tables.
- Left Join: Returns all rows from the left table and matching rows from the right table.
- Right Join: Returns all rows from the right table and matching rows from the left table.
- Full Outer Join: Returns all rows from both tables, with NULLs for non-matching rows.
Example:
SELECT e.name, d.name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;
9. How do transactions work in SQL, and what is a transaction log?
Answer: A transaction is a unit of work that is treated as a single operation. SQL uses the transaction log to:
- Track changes to the database.
- Ensure data recovery in case of failures.
Transactions follow a BEGIN TRANSACTION, COMMIT, and ROLLBACK structure:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
10. What is a correlated subquery, and how does it differ from a regular subquery?
Answer: A correlated subquery depends on the outer query for its values, whereas a regular subquery is independent. Correlated subqueries are evaluated row-by-row, making them slower than regular subqueries.
Example:
SELECT e.name
FROM employees e
WHERE e.salary > (
SELECT AVG(salary)
FROM employees
WHERE department = e.department
);
Here, the subquery references e.department from the outer query.
SQL Query and Code-Based Questions
11. Write a query to find the second-highest salary in a table.
Answer:
SELECT MAX(salary) AS second_highest_salary
FROM employees
WHERE salary < (SELECT MAX(salary) FROM employees);
This query finds the second-highest salary by excluding the maximum salary using a subquery.
12. Write a query to transpose rows into columns in SQL.
Answer: Using the PIVOT function:
SELECT department, [2023] AS year_2023, [2024] AS year_2024
FROM (
SELECT department, year, revenue
FROM sales
) AS SourceTable
PIVOT (
SUM(revenue)
FOR year IN ([2023], [2024])
) AS PivotTable;
13. How would you optimize a query that is running slow?
Answer: Steps to optimize include:
- Analyzing the query execution plan.
- Adding appropriate indexes (e.g., on WHERE or JOIN columns).
- Avoiding SELECT *.
- Using CTEs or temporary tables for complex operations.
Example optimization:
SELECT id, name
FROM employees
WHERE department_id = 5
ORDER BY name;
Add an index on department_id for faster filtering.
14. Create a query to find duplicate records in a table.
Answer:
SELECT column1, column2, COUNT(*)
FROM my_table
GROUP BY column1, column2
HAVING COUNT(*) > 1;
This groups rows by specific columns and returns only those with a count greater than one.
15. Write a query to delete duplicate records but keep one instance of each.
Answer: Using ROW_NUMBER():
WITH CTE AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS row_num
FROM my_table
)
DELETE FROM my_table
WHERE id IN (
SELECT id FROM CTE WHERE row_num > 1
);
This assigns a unique row number to duplicates and deletes rows with a number greater than one.
16. How can you retrieve the nth highest salary without using TOP or LIMIT?
Answer:
SELECT DISTINCT salary
FROM employees e1
WHERE N - 1 = (
SELECT COUNT(DISTINCT salary)
FROM employees e2
WHERE e2.salary > e1.salary
);
Replace N with the desired rank (e.g., 3 for the 3rd highest salary).
17. Write a query to find employees who earn more than their managers.
Answer:
SELECT e.name AS employee_name, m.name AS manager_name, e.salary
FROM employees e
JOIN employees m ON e.manager_id = m.id
WHERE e.salary > m.salary;
This self-join compares employees’ salaries with their managers’.
18. Write a query to fetch all employees who joined in the last six months.
Answer:
SELECT *
FROM employees
WHERE join_date >= DATEADD(MONTH, -6, GETDATE());
This query uses the DATEADD function to calculate a date six months prior to today.
19. Explain and create an example using the GROUPING SETS feature.
Answer:
SELECT department, role, SUM(salary) AS total_salary
FROM employees
GROUP BY GROUPING SETS (
(department),
(role),
(department, role)
)
This generates aggregated results for department, role, and both combined.
20. Write a query to calculate a running total using window functions.
Answer:
SELECT employee_id, salary,
SUM(salary) OVER (ORDER BY employee_id) AS running_total
FROM employees;
This uses the SUM() window function to calculate a cumulative total sorted by employee_id.
Advanced SQL Scenario-Based Questions
21. How do you handle recursive queries in SQL? Provide an example.
Answer: Recursive queries are used to handle hierarchical or tree-structured data using Common Table Expressions (CTEs).
Example: Find the hierarchy of employees reporting to a manager:
WITH EmployeeHierarchy AS (
SELECT id, name, manager_id
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
INNER JOIN EmployeeHierarchy eh ON e.manager_id = eh.id
)
SELECT * FROM EmployeeHierarchy;
This query recursively fetches employees under each manager.
22. Write a query to find all missing numbers in a sequence stored in a table.
Answer:
SELECT t1.number + 1 AS missing_number
FROM numbers t1
LEFT JOIN numbers t2 ON t1.number + 1 = t2.number
WHERE t2.number IS NULL;
This query identifies gaps by checking for numbers that don’t have a consecutive match.
23. Explain and create an example using PIVOT and UNPIVOT.
Answer:
- Pivoting rows to columns:
SELECT department, [Q1], [Q2], [Q3], [Q4]
FROM (
SELECT department, quarter, revenue
FROM sales
) AS SourceTable
PIVOT (
SUM(revenue)
FOR quarter IN ([Q1], [Q2], [Q3], [Q4])
) AS PivotTable;
- Unpivoting columns to rows:
SELECT department, quarter, revenue
FROM (
SELECT department, [Q1], [Q2], [Q3], [Q4]
FROM sales
) AS SourceTable
UNPIVOT (
revenue FOR quarter IN ([Q1], [Q2], [Q3], [Q4])
) AS UnpivotTable;
24. Write a query to find overlapping date ranges in a dataset.
Answer:
SELECT a.id, b.id
FROM date_ranges a
JOIN date_ranges b
ON a.start_date < b.end_date AND a.end_date > b.start_date
WHERE a.id != b.id;
This identifies overlapping date ranges by comparing start and end dates.
25. How would you implement pagination in SQL efficiently?
Answer:
Using OFFSET and FETCH NEXT:
SELECT *
FROM employees
ORDER BY employee_id
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
This retrieves rows 11–20 for a paginated result set.
26. Write a query to split a string into rows.
Answer:
Using STRING_SPLIT (in SQL Server):
SELECT value AS split_value
FROM STRING_SPLIT('apple,banana,cherry', ',');
This splits a comma-separated string into individual rows. For databases without STRING_SPLIT, recursive CTEs or user-defined functions are used.
27. Explain the differences between OLAP and OLTP databases and how SQL queries differ for both.
Answer: OLAP (Online Analytical Processing):
- Used for reporting and analytics.
- Queries often involve aggregations and joins across large datasets.
Example:
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
OLTP (Online Transaction Processing):
- Used for day-to-day operations.
- Queries focus on quick reads and writes for single records.
Example:
INSERT INTO orders (order_id, customer_id, amount)
VALUES (101, 23, 150.00);
28. How do you find anomalies in a dataset using SQL?
Answer: Use statistical functions or compare expected and actual values.
Example: Find values that are more than two standard deviations from the mean:
WITH Stats AS (
SELECT AVG(value) AS mean, STDEV(value) AS std_dev
FROM data_table
)
SELECT *
FROM data_table, Stats
WHERE ABS(value - mean) > 2 * std_dev;
29. Write a query to merge data from two tables with different structures.
Answer: Use UNION with column alignment:
SELECT id, name, salary, NULL AS bonus
FROM employees
UNION ALL
SELECT id, NULL AS name, salary, bonus
FROM contractors;
Align columns and fill missing data with NULL.
30. Explain how to perform ETL operations using only SQL.
Answer: SQL can handle Extract, Transform, and Load (ETL) tasks:
- Extract: Read data from a source system.
SELECT * FROM source_table;
- Transform: Clean or modify data.
SELECT id, UPPER(name) AS name, salary * 1.1 AS updated_salary
FROM source_table;
- Load: Insert data into a target system.
INSERT INTO target_table (id, name, salary)
SELECT id, name, updated_salary
FROM source_table;
Advanced SQL Features and Extensions Questions
31. What are window functions, and how are they different from aggregate functions?
Answer: Window functions perform calculations across a set of rows related to the current row, without collapsing them into a single result like aggregate functions.
- Example of an aggregate function:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
This collapses rows into grouped results.
- Example of a window function:
SELECT employee_id, department, salary,
AVG(salary) OVER (PARTITION BY department ORDER BY employee_id) AS avg_salary
FROM employees;
This calculates the average salary for each department without collapsing the rows.
32. What is a recursive Common Table Expression (CTE), and when would you use it?
Answer: Recursive CTEs are used for hierarchical or self-referencing data, like organizational charts or tree structures.
Example: Find all employees reporting directly or indirectly to a manager:
WITH RecursiveCTE AS (
SELECT id, name, manager_id
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
INNER JOIN RecursiveCTE r ON e.manager_id = r.id
)
SELECT * FROM RecursiveCTE;
33. How would you use JSON data types and functions in SQL?
Answer: JSON data types allow storing and querying semi-structured data.
Example: Storing and querying JSON:
CREATE TABLE orders (
id INT,
order_details JSON
);
INSERT INTO orders (id, order_details)
VALUES (1, '{"item": "Laptop", "price": 1200, "quantity": 2}');
SELECT JSON_VALUE(order_details, '$.item') AS item,
JSON_VALUE(order_details, '$.price') AS price
FROM orders;
34. What is the difference between PIVOT and UNPIVOT in SQL?
Answer:
- PIVOT converts rows into columns, useful for summarizing data.
SELECT department, [Q1], [Q2], [Q3]
FROM (
SELECT department, quarter, revenue
FROM sales
) AS SourceTable
PIVOT (
SUM(revenue) FOR quarter IN ([Q1], [Q2], [Q3])
) AS PivotTable;
- UNPIVOT does the reverse, converting columns into rows:
SELECT department, quarter, revenue
FROM (
SELECT department, [Q1], [Q2], [Q3]
FROM sales
) AS SourceTable
UNPIVOT (
revenue FOR quarter IN ([Q1], [Q2], [Q3])
) AS UnpivotTable;
35. How can you handle semi-structured data like XML in SQL?
Answer: SQL supports XML data types and functions for querying and modifying XML content.
Example: Extracting data from XML:
SELECT id,
order_details.value('(/Order/Item)[1]', 'VARCHAR(50)') AS item,
order_details.value('(/Order/Price)[1]', 'DECIMAL(10,2)') AS price
FROM orders;
36. What are the uses of the ROLLUP and CUBE operators in SQL?
Answer:
ROLLUP generates hierarchical subtotals, ending with a grand total.
CUBE generates all possible combinations of subtotals.
Example:
SELECT department, role, SUM(salary)
FROM employees
GROUP BY CUBE(department, role);
37. How would you use a lateral join (CROSS APPLY or OUTER APPLY)?
Answer: Lateral joins allow referencing columns from the left table in the right table’s subquery.
Example:
SELECT e.name, p.project_name
FROM employees e
CROSS APPLY (
SELECT TOP 1 project_name
FROM projects p
WHERE p.employee_id = e.id
ORDER BY start_date DESC
) AS LatestProject;
38. What are table-valued functions (TVFs), and how do they differ from scalar functions?
Answer:
- Table-Valued Functions (TVFs): Return a table that can be queried directly.
CREATE FUNCTION GetTopEmployees(@top INT)
RETURNS TABLE
AS
RETURN (
SELECT TOP (@top) id, name, salary
FROM employees
ORDER BY salary DESC
);
Use:
SELECT * FROM GetTopEmployees(5);
- Scalar Functions: Return a single value.
39. Explain the MERGE statement in SQL and when it is useful.
Answer: The MERGE statement performs INSERT, UPDATE, or DELETE operations based on conditions, useful for synchronizing tables.
Example:
MERGE INTO target_table AS target
USING source_table AS source
ON target.id = source.id
WHEN MATCHED THEN
UPDATE SET target.name = source.name
WHEN NOT MATCHED THEN
INSERT (id, name) VALUES (source.id, source.name)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
40. What is a temporal table, and how is it used in SQL?
Answer: Temporal tables track changes over time, storing historical data automatically.
Example:
CREATE TABLE employees_history (
id INT PRIMARY KEY,
name NVARCHAR(100),
salary INT,
PERIOD FOR SYSTEM_TIME (start_time, end_time)
) WITH (SYSTEM_VERSIONING = ON);
Query historical data:
SELECT *
FROM employees_history
FOR SYSTEM_TIME AS OF '2023-01-01';
Tips to Tackle Advanced SQL Questions
Navigating advanced SQL interview questions requires a strategic approach that goes beyond basic query writing. To excel, consider the following actionable insights:
- Deepen Your Understanding of SQL Fundamentals
A solid grasp of core SQL concepts is crucial. Ensure you're comfortable with data types, normalization principles, and the distinctions between various join operations. This foundational knowledge enables you to approach complex problems with confidence.
- Master Advanced SQL Features
Familiarize yourself with advanced functionalities such as window functions, Common Table Expressions (CTEs), and recursive queries. These tools are often pivotal in solving intricate data challenges and are frequently tested in interviews.
- Optimize Query Performance
Understanding how to write efficient queries is essential. Learn to interpret execution plans, utilize appropriate indexing strategies, and recognize when to refactor queries for better performance. Demonstrating this skill showcases your ability to handle large datasets effectively.
- Engage in Hands-On Practice
Regular practice with real-world datasets enhances your problem-solving abilities. Platforms like LeetCode and HackerRank offer SQL challenges that mirror potential interview questions, providing valuable experience.
- Analyze and Learn from Sample Questions
Reviewing advanced SQL interview questions and their solutions can offer insights into common patterns and problem-solving techniques. This practice helps you understand the rationale behind complex queries and prepares you for similar challenges.
- Stay Updated with SQL Developments
SQL standards and best practices evolve over time. Keeping abreast of the latest features and updates ensures your knowledge remains current, which is particularly important for roles that require cutting-edge SQL expertise.
- Develop a Methodical Problem-Solving Approach
When faced with a complex question, break it down into manageable parts. Outline your approach before diving into coding, and consider edge cases and potential pitfalls. This structured methodology demonstrates your analytical skills and thoroughness.
- Communicate Your Thought Process Clearly
During interviews, articulating your reasoning is as important as arriving at the correct solution. Explain your choices, discuss alternative approaches, and justify your decisions. This transparency reflects your depth of understanding and collaborative mindset.
Additional Resources For SQL Interview Preparation
To ensure you’re thoroughly equipped, here’s a curated list of resources that will feel like a hidden gem for your preparation. These cover everything from foundational learning to hands-on practice and in-depth exploration of SQL’s advanced features.
1. Official Documentation and Standards
- SQL:1999 Standard Overview: Dive into SQL standards, including key features like window functions and recursive queries.
Database Vendor Documentation:
- MySQL Documentation
- PostgreSQL Documentation
- Microsoft SQL Server Documentation
- Oracle SQL Documentation
2. Interactive SQL Practice Platforms
- HackerRank SQL Challenges: Offers beginner to advanced SQL problems to test your skills.
- LeetCode SQL Questions: Focused SQL problems commonly seen in interviews.
- Mode Analytics SQL Tutorial: Provides an interactive, practical way to learn SQL for real-world applications.
- SQLZoo: A classic interactive tutorial for learning SQL at your own pace.
3. Tools for Practice and Experimentation
- DB Fiddle: A great online tool to write and test SQL queries without setting up a database locally.
- SQLite Online: A lightweight and fast way to practice your SQL skills.
- SQLServerCentral Query Analyzer: Practice advanced SQL queries in a real-world environment.
4. Blogs and Communities
- Stack Overflow SQL Tag: Get answers to specific SQL problems from experts worldwide.
- Reddit SQL Community: Participate in discussions and learn from real-world challenges.
- SQLAuthority Blog by Pinal Dave: A treasure trove of SQL tips, tricks, and advanced concepts.
Also Read: Online Software Developer Assessment Test and Skills Evaluation | A Comprehensive Guide
In Last Words
Preparing for advanced SQL interview questions requires not just technical expertise but also a problem-solving mindset. By mastering conceptual knowledge, honing your query-writing skills, and understanding how to approach complex scenarios, you’ll position yourself as a standout candidate for any data-centric role. Remember, interviews are as much about demonstrating your analytical thinking as they are about writing efficient queries. With consistent practice and the right resources, you can confidently tackle even the most challenging SQL problems.
Ready to put your SQL skills to the test and land your dream job? Weekday.works simplifies your job application process with AI-driven tools, curated job listings, and a robust referral network. Save time, optimize your applications, and enhance your chances of success—all in one place.
Explore Weekday and take control of your job search today!