মডিউল পাঠ (4/4)
ইউনিয়ন, ছেদ, ব্যতীত (এবং ক্রস যোগদান)
এখন পর্যন্ত আপনি অনুভূমিকভাবে ডেটা একত্রিত করেছেন: JOIN কলাম সংযুক্ত করে
সম্পর্কিত সারি থেকে। SQL এছাড়াও অপারেটর যে অন্য পরিবার প্রস্তাব
দুটি 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';নিয়ম:
- দুটি
SELECTএর অবশ্যই একই সংখ্যক কলাম থাকতে হবে, সাথে সামঞ্জস্যপূর্ণ প্রকার UNION(ALLছাড়া) সদৃশগুলি সরিয়ে দেয় — কার্যকরভাবে একটি সম্পাদন করে চূড়ান্ত ফলাফলেDISTINCT;UNION ALLডুপ্লিকেটও রাখে, এবং অনেক দ্রুত কারণ এটি ডিডপ্লিকেশনের জন্য বাছাই/হ্যাশ এড়িয়ে যায়।
-- 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.
ইঙ্গিত দেখান
দুটি নির্বাচনের মধ্যে UNION একই ইমেল কলাম ফেরত দিচ্ছে৷ ORDER BY শেষ পর্যন্ত, চূড়ান্ত ফলাফলের উপর।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
Trova le email dei clienti che hanno ordinato ma non hanno mai recensito nulla. ইউএসএ ব্যতীত। উনা কোলোনা: ইমেইল। ইমেইল প্রতি Ordina.
ইঙ্গিত দেখান
EXCEPT বাম SELECT থেকে শুধুমাত্র সারি রাখে যা ডানদিকে নেই।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ