SQL Subqueries ๐
Mentor's Note: A subquery is essentially a "Question within a Question." It's one of the most powerful tools for solving complex business problems in a single step! ๐ก
๐ The Scenario: The Inception Logic ๐๏ธโ
Imagine you want to find all students who scored higher than the average mark.
- The Problem: You don't know the average mark yet! ๐ฆ
- The Inner Query: First, you ask the database: "What is the average mark?" (Query 1). ๐ข
- The Outer Query: Then, you use that answer to ask: "Now show me everyone who scored higher than [Answer 1]." (Query 2). ๐ฆ
- The Result: A perfectly nested solution. โ
๐ Concept Explanationโ
1. What is a Subquery?โ
A subquery is a SQL query nested inside a larger query. It is also known as an Inner Query or Nested Query.
2. Common Placementsโ
- In
WHERE: Filter data based on dynamic values. - In
FROM: Use the result of one query as a "Virtual Table" for another. - In
SELECT: Pull in a single specific value from a related table.
๐จ Visual Logic: The Russian Doll ๐ชโ
๐ป Implementations (Dialect Comparison)โ
- Oracle SQL
- MySQL
- PostgreSQL
-- ๐ Action: Find employees earning more than the company average
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
-- ๐ Action: Same logic as Oracle
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
-- ๐ Action: Same logic as Oracle
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
๐ Sample Dry Runโ
Goal: Find students in the same city as 'Vishnu'
| Step | Query Part | Logic | Result |
|---|---|---|---|
| 1 | Inner | Find city of 'Vishnu' | "Surat" |
| 2 | Outer | SELECT name FROM students WHERE city = "Surat" | Ankit, Priya... |
๐ Technical Analysisโ
- Execution Order: The database usually runs the Inner Query once first, gets the result, and then hands it over to the Outer Query.
- Correlated Subqueries: These are special subqueries that run once for every row in the outer query. They are powerful but can be very slow! โ ๏ธ
๐ฏ Practice Lab ๐งชโ
Task: Find all departments in the DEPARTMENTS table that have no employees.
Hint: Use WHERE dept_id NOT IN (SELECT dept_id FROM employees). ๐ก
๐ก Interview Tip ๐โ
"Interviewers love asking: 'What is the difference between a Join and a Subquery?' Answer: A Join is usually faster for large data, but a Subquery is often easier to read for complex filtering logic!"
๐ก Pro Tip: "Inception is possible. You just need to go deeper." - Dom Cobb (Inception)