FULL OUTER JOIN
In this page:
SELECT columns FROM table1
LEFT JOIN table2 ON table1.column = table2.column
UNION
SELECT columns FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;
एक FULL OUTER JOIN क्या है?
एक FULL OUTER JOIN LEFT और RIGHT joins को एक result set में combine करता है। यह दोनों tables की सारी rows रखता है, matches दिखाते हुए और जिस भी side में corresponding row न हो वहाँ missing data को NULL से भरते हुए।
उदाहरण: What is a FULL OUTER JOIN?
CREATE TABLE customers (customer_id INT, name TEXT);
CREATE TABLE orders (order_id INT, customer_id INT);
INSERT INTO customers VALUES (1, 'Amit'), (2, 'Priya');
INSERT INTO orders VALUES (101, 1), (102, 3);
SELECT customers.name, orders.order_id
FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id
UNION
SELECT customers.name, orders.order_id
FROM customers RIGHT JOIN orders ON customers.customer_id = orders.customer_id;
MySQL के पास Native Keyword क्यों नहीं है
PostgreSQL या SQL Server के उलट, MySQL directly FULL JOIN keyword support नहीं करता। आप UNION इस्तेमाल करके LEFT और RIGHT joins combine करके same result पा सकते हैं, क्योंकि साथ में वे दोनों tables की हर row cover करते हैं।
उदाहरण: Why MySQL Has No Native Keyword
CREATE TABLE customers (customer_id INT, name TEXT);
CREATE TABLE orders (order_id INT, customer_id INT);
INSERT INTO customers VALUES (1, 'Amit'), (2, 'Priya');
INSERT INTO orders VALUES (101, 1), (102, 3);
-- MySQL has no FULL JOIN keyword -- simulate it with LEFT + RIGHT via UNION
SELECT customers.name, orders.order_id FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id
UNION
SELECT customers.name, orders.order_id FROM customers RIGHT JOIN orders ON customers.customer_id = orders.customer_id;
UNION ALL Safely इस्तेमाल करना
UNION इस्तेमाल करना automatically duplicate rows हटा देता है, जो आमतौर पर वह है जो आप एक FULL JOIN simulate करते समय चाहते हैं। अगर आप इसके बजाय duplicate rows रखना चाहते हैं, UNION ALL इस्तेमाल करें और right-side query को filter करें ताकि matched rows दो बार न count हों।
उदाहरण: Using UNION ALL safely
CREATE TABLE customers (customer_id INT, name TEXT);
CREATE TABLE orders (order_id INT, customer_id INT);
INSERT INTO customers VALUES (1, 'Amit');
INSERT INTO orders VALUES (101, 1);
SELECT customers.name, orders.order_id FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id
UNION ALL
SELECT customers.name, orders.order_id FROM customers RIGHT JOIN orders ON customers.customer_id = orders.customer_id
WHERE customers.customer_id IS NULL;
Exclusive Rows ढूँढना
आप ऐसी rows ढूँढ सकते हैं जो सिर्फ एक table में exist करती हैं दोनों में नहीं, जैसे कोई orders न रखने वाले customers और कोई matching customer न रखने वाले orders। इसके लिए, union के दोनों sides पर IS NULL checks वाला एक simulated FULL JOIN इस्तेमाल करें।
उदाहरण: Finding Exclusive Rows
CREATE TABLE customers (customer_id INT, name TEXT);
CREATE TABLE orders (order_id INT, customer_id INT);
INSERT INTO customers VALUES (1, 'Amit'), (2, 'Priya');
INSERT INTO orders VALUES (101, 3);
SELECT customers.name, NULL AS order_id FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id WHERE orders.order_id IS NULL
UNION
SELECT NULL, orders.order_id FROM customers RIGHT JOIN orders ON customers.customer_id = orders.customer_id WHERE customers.customer_id IS NULL;
Comprehensive Aggregation
एक simulated FULL JOIN data के दो अलग sets से metrics merge और summarize करने के लिए उपयोगी है जो perfectly overlap नहीं करते, आपको किसी भी side से unmatched rows को चुपचाप drop करने के बजाय एक complete picture देते हुए।
उदाहरण: Comprehensive Aggregation
CREATE TABLE online_sales (product TEXT, amount INT);
CREATE TABLE store_sales (product TEXT, amount INT);
INSERT INTO online_sales VALUES ('Keyboard', 100), ('Mouse', 50);
INSERT INTO store_sales VALUES ('Mouse', 30), ('Monitor', 200);
SELECT product, SUM(amount) AS total FROM (
SELECT * FROM online_sales
UNION ALL
SELECT * FROM store_sales
) combined
GROUP BY product;
FULL OUTER JOINलिखना, जिसे MySQL support नहीं करता और जो एक syntax error देता है।- एक
LEFT JOINऔर एकRIGHT JOINकाUNION ALLइस्तेमाल करना, जोUNIONके बजाय matched rows duplicate कर देता है। - यह भूल जाना कि
UNIONreal duplicate rows भी हटा देता है, जो valid data छुपा सकता है।
Chapter Quiz — Complete all 10 topics to unlock
0/10 topics done
Complete these topics first: