Subquery in WHERE
In this page:
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
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
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
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
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
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);
- एक ऐसी subquery के साथ
=इस्तेमाल करना जो कई rows return करती है, जबकिINचाहिए। - एक ऐसी subquery के साथ
NOT INइस्तेमाल करना जोNULLreturn कर सकती है, जो कोई rows return नहीं करता। - एक बड़ी table पर बिना index के एक correlated subquery इस्तेमाल करना, जो inner query को प्रति outer row एक बार चलाता है।
Chapter Quiz — Complete all 6 topics to unlock
0/6 topics done
Complete these topics first: