ماڈیول اسباق (4/4)
یونین، انٹرسیکٹ، سوائے (اور کراس جوائن)
اب تک آپ نے افقی طور پر ڈیٹا کو یکجا کیا ہے: JOIN کالم منسلک کرتا ہے
متعلقہ قطاروں سے۔ ایس کیو ایل آپریٹرز کی ایک اور فیملی بھی پیش کرتا ہے۔
دو SELECTs کے نتائج کا علاج کرتے ہوئے عمودی طور پر ڈیٹا کو یکجا کرتا ہے
سیٹ: UNION، INTERSECT، EXCEPT۔ ہم CROSS JOIN پر بھی نظرثانی کرتے ہیں۔
کارٹیشین مصنوعات.
کراس جوائن: ہر قطار کے ساتھ ہر قطار
CROSS JOIN میں کوئی ON نہیں ہے: یہ ہر ممکن امتزاج پیدا کرتا ہے
دو میزوں کے درمیان قطاریں (کارٹیشین پروڈکٹ)۔ اگر A میں n قطاریں ہیں اور B
m قطاریں ہیں، نتیجہ n × m ہے۔
-- Tutte le combinazioni cliente × prodotto:
SELECT c.email, p.name
FROM customers c
CROSS JOIN products p;12 گاہک × 16 مصنوعات = 192 قطاریں۔ یہ حقیقی اعداد و شمار پر شاذ و نادر ہی استعمال ہوتا ہے (یہ ہے مہنگا!)، لیکن یہ اس کے لیے مفید ہے:
- "سب کے خلاف سب" کے مجموعے تیار کرنا (مثال کے طور پر ایک مطابقت میٹرکس)؛
- مستقل / پیرامیٹرز کی ایک چھوٹی میز کے ساتھ ایک میز کو جوڑنا۔
یونین اور یونین سب
UNION دو SELECT کے نتائج کو ایک ہی نمبر کے ساتھ جوڑتا ہے اور
کالم کی قسم:
SELECT email FROM customers WHERE country = 'Italia'
UNION
SELECT email FROM customers WHERE country = 'Francia';اصول:
- دو
SELECTs میں کالموں کی ایک ہی تعداد ہونی چاہیے، مطابقت پذیر اقسام UNION(ALLکے بغیر) ڈپلیکیٹس کو ہٹاتا ہے — مؤثر طریقے سے کارکردگی کا مظاہرہ کرنا حتمی نتیجہ پرDISTINCT؛UNION ALLڈپلیکیٹس کو بھی رکھتا ہے، اور زیادہ تیز ہے کیونکہ یہ ڈپلیکیشن کے لیے sort/hash سے گریز کرتا ہے۔
-- Email di clienti che hanno ordinato O recensito qualcosa, senza duplicati:
SELECT c.email
FROM customers c JOIN orders o ON o.customer_id = c.id
UNION
SELECT c.email
FROM customers c JOIN reviews r ON r.customer_id = c.id;انٹرسیکٹ اور اس کے علاوہ
INTERSECT رکھتا ہے صرف قطاریں دونوں میں موجود ہیں نتائج؛ EXCEPT
پہلی کی قطاروں کو رکھتا ہے جو دوسرے میں نہیں ہیں (سیٹ
"فرق")۔
-- Clienti che hanno sia ordinato sia recensito:
SELECT c.email FROM customers c JOIN orders o ON o.customer_id = c.id
INTERSECT
SELECT c.email FROM customers c JOIN reviews r ON r.customer_id = c.id;
-- Clienti che hanno ordinato ma mai recensito:
SELECT c.email FROM customers c JOIN orders o ON o.customer_id = c.id
EXCEPT
SELECT c.email FROM customers c JOIN reviews r ON r.customer_id = c.id;INTERSECT اور EXCEPT بھی ڈپلیکیٹس کو بطور ڈیفالٹ ہٹا دیتے ہیں۔ دی
INTERSECT ALL / EXCEPT ALL متغیرات نہیں کرتے ہیں۔
خود ہی آزمائیں۔
Trova tutte le email dei clienti che hanno ordinato qualcosa OPPURE recensito qualcosa (senza duplicati). یونا کالونا: ای میل۔ Ordina فی ای میل۔
اشارہ دکھائیں۔
ایک ہی ای میل کالم کو واپس کرنے والے دو منتخبوں کے درمیان یونین۔ ORDER BY آخری نتیجہ پر، آخر میں جاتا ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
Trova le email dei clienti che hanno ordinato ma non hanno mai recensito nulla. USA سوائے یونا کالونا: ای میل۔ Ordina فی ای میل۔
اشارہ دکھائیں۔
EXCEPT بائیں SELECT سے صرف ان قطاروں کو رکھتا ہے جو دائیں میں موجود نہیں ہیں۔
3 کوششوں کے بعد حل دستیاب ہے۔