← Back to MySQL Course | Chapter 11: Subqueries | Lesson 2 of 6

Subquery in WHERE

WHERE में एक subquery 'मुझे class average से लंबे सभी लोग दिखाओ' कहने जैसा है जहाँ average पहले, on the spot काम किया जाता है।
Syntax
sql
SELECT columns FROM table_name
WHERE column operator (SELECT column FROM other_table);

SELECT columns FROM table_name
WHERE column [NOT] IN (SELECT column FROM other_table);

Scalar Values से Filter करना

आप अपनी WHERE clause के अंदर एक scalar subquery इस्तेमाल करके dynamically rows filter कर सकते हैं। outer query column values को inner query द्वारा return की गई single value के against compare करती है, जैसे overall average से ऊपर priced products ढूँढना।

उदाहरण: Filtering with Scalar Values

sql
CREATE TABLE products (id INT, price INT);
INSERT INTO products VALUES (1, 10), (2, 50), (3, 90);
SELECT * FROM products WHERE price > (SELECT AVG(price) FROM products);

IN के साथ Subqueries इस्तेमाल करना

आप एक list hardcode करने के बजाय अपनी WHERE clause के अंदर एक subquery को IN operator के साथ combine कर सकते हैं। यह उन rows को filter करता है जहाँ एक column value subquery के result list के किसी item से match करती है, filter को data-driven रखते हुए।

उदाहरण: Using Subqueries with IN

sql
CREATE TABLE customers (id INT, region TEXT);
CREATE TABLE orders (id INT, customer_id INT);
INSERT INTO customers VALUES (1, 'North'), (2, 'South');
INSERT INTO orders VALUES (101, 1), (102, 2);
SELECT * FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE region = 'North');

NOT IN के साथ Subqueries इस्तेमाल करना

आप एक subquery के results के आधार पर rows exclude करने के लिए NOT IN इस्तेमाल कर सकते हैं। यह उन rows return करता है जहाँ एक column value आपकी subquery द्वारा return की गई list में exist नहीं करती, जैसे वे customers जिन्होंने कभी order नहीं किया।

उदाहरण: Using Subqueries with NOT IN

sql
CREATE TABLE customers (id INT, name TEXT);
CREATE TABLE orders (id INT, customer_id INT);
INSERT INTO customers VALUES (1, 'Amit'), (2, 'Priya');
INSERT INTO orders VALUES (101, 1);
SELECT * FROM customers WHERE id NOT IN (SELECT customer_id FROM orders);

WHERE में Correlated Subqueries

एक correlated subquery एक inner query है जो outer query के columns को reference करती है, दोनों के बीच एक dependency बनाते हुए। यह outer query द्वारा evaluate की गई हर row के लिए एक बार execute होती है, एक regular subquery के उलट जो सिर्फ एक बार चलती है।

उदाहरण: Correlated Subqueries in WHERE

sql
CREATE TABLE products (id INT, category TEXT, price INT);
INSERT INTO products VALUES (1, 'Books', 10), (2, 'Books', 40), (3, 'Toys', 20);
SELECT * FROM products p1
WHERE price > (SELECT AVG(price) FROM products p2 WHERE p2.category = p1.category);

WHERE में EXISTS Operator

EXISTS operator check करता है कि एक subquery कोई rows return करता है या नहीं, यह परवाह किए बिना कि वे rows actually क्या रखती हैं। अगर subquery कम से कम एक row return करे, EXISTS condition true evaluate होती है, नहीं तो यह false है।

उदाहरण: EXISTS Operator in WHERE

sql
CREATE TABLE customers (id INT, name TEXT);
CREATE TABLE orders (id INT, customer_id INT);
INSERT INTO customers VALUES (1, 'Amit'), (2, 'Priya');
INSERT INTO orders VALUES (101, 1);
SELECT * FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. एक ऐसी subquery के साथ = इस्तेमाल करना जो कई rows return करती है, जबकि IN चाहिए।
  2. एक ऐसी subquery के साथ NOT IN इस्तेमाल करना जो NULL return कर सकती है, जो कोई rows return नहीं करता।
  3. एक बड़ी table पर बिना index के एक correlated subquery इस्तेमाल करना, जो inner query को प्रति outer row एक बार चलाता है।
🔒

Chapter Quiz — Complete all 6 topics to unlock

0/6 topics done

Complete these topics first:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.