মূল কন্টেন্টে যান
মডিউল 5 · 1-এর পাঠ 4কোর্সে 17/57~12 min
মডিউল পাঠ (1/4)

তিন বা ততোধিক টেবিলে যোগদান করুন

মডিউল 3 এ আপনি দুই টেবিলে যোগ দিয়েছেন। বাস্তব বিশ্বের তথ্য প্রায় সর্বদা বিদেশী কী দ্বারা সংযুক্ত তিন বা তার বেশি টেবিল জুড়ে ছড়িয়ে ছিটিয়ে থাকে: থেকে একটি ব্যবসায়িক প্রশ্নের উত্তর দিন যা আপনাকে সম্পর্কের শৃঙ্খল অতিক্রম করতে হবে। একটি মাল্টি-টেবিল JOIN ঠিক তাই করে।

এই মডিউল থেকে আমরা ecommerce ডেটাসেট ব্যবহার করব (গ্রাহক, বিভাগ, পণ্য, অর্ডার, অর্ডার আইটেম, পর্যালোচনা)। আপনি এটি থেকে অন্বেষণ করতে পারেন ডেটাসেট থেকে ecommerce নির্বাচন করে Playground বাছাইকারী

সিনট্যাক্স: যোগদানের একটি চেইন

SQL
SELECT colonne
FROM   tabella_a
JOIN   tabella_b ON tabella_a.x = tabella_b.y
JOIN   tabella_c ON tabella_b.z = tabella_c.w
[JOIN  tabella_d ON …]
…;

প্রতিটি JOIN চেইনে একটি "লিঙ্ক" যোগ করে: ইঞ্জিনটি মধ্যবর্তী সময় নেয় পূর্ববর্তী যোগদানের ফলাফল এবং এটির সাথে পরবর্তী টেবিল সংযুক্ত করে।

SQL
-- Per ogni riga d'ordine: cliente, prodotto e quantità.
SELECT c.email,
       p.name AS prodotto,
       oi.quantity
FROM   orders      AS o
JOIN   customers   AS c  ON o.customer_id = c.id
JOIN   order_items AS oi ON oi.order_id   = o.id
JOIN   products    AS p  ON oi.product_id = p.id;

তিনটি JOINs, চারটি টেবিল। ফলাফলে প্রতি order_items - প্রতিটিতে একটি সারি রয়েছে প্রতিটি অর্ডারে পণ্য - গ্রাহকের ইমেল এবং পণ্যের নাম দিয়ে সমৃদ্ধ।

যৌক্তিক আদেশ

ইঞ্জিনটি বাম থেকে ডানে টেবিলে যোগ দেয়। একটি JOIN শর্ত হতে পারে উপরে প্রবর্তিত কোনো টেবিল উল্লেখ করুন। পঠনযোগ্যতার জন্য:

  • প্রথমে প্রশ্নের "প্রধান টেবিল" রাখুন (এখানে orders);
  • অনুসরণ করে আপনি তাদের পরিদর্শন করার জন্য অন্যদের যোগ করুন সম্পর্ক

JOIN চেইনের উপর সমষ্টি

একাধিক JOINs GROUP BY এর সাথে একত্রিত করে প্রতিবেদন তৈরি করে:

SQL
-- Spesa totale per cliente (solo ordini consegnati):
SELECT c.email,
       SUM(oi.quantity * oi.unit_price) AS total
FROM   customers   AS c
JOIN   orders      AS o  ON o.customer_id = c.id
JOIN   order_items AS oi ON oi.order_id   = o.id
WHERE  o.status = 'delivered'
GROUP BY c.email
ORDER BY total DESC;

আপনার এখানে JOIN products প্রয়োজন নেই: আপনার যা কিছু প্রয়োজন (quantity, unit_price) ইতিমধ্যেই order_items এ রয়েছে৷ অঙ্গুষ্ঠের নিয়ম: টেবিল যোগ করবেন না আপনি ব্যবহার করবেন না — তারা কর্মক্ষমতা এবং পঠনযোগ্যতা ক্ষতি করে।

নিজে চেষ্টা করে দেখুন

ব্যায়াম#sql.m5.l1.e1
প্রচেষ্টা: 0লোড হচ্ছে...

প্রতি ogni riga d'ordine degli ordini consegnati (status = 'delivered'), mostra email del cliente, nome del prodotto e quantità. Tre colonne. অর্ডিনা প্রতি আইডি অর্ডিন ক্রিসেন্ট এবং আইডি প্রোডোটো ক্রিসেন্ট।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

তিনটি যোগদান: অর্ডার→কাস্টমার_আইডিতে গ্রাহক, অর্ডার→অর্ডার_আইডিতে অর্ডার_আইটেম, অর্ডার_আইটেম→ পণ্য_আইডিতে পণ্য।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#sql.m5.l1.e2
প্রচেষ্টা: 0লোড হচ্ছে...

সর্বোচ্চ 3 ক্লায়েন্ট প্রতি স্পেসা টোটালে (একক_মূল্যের পরিমাণ * একক_মূল্য) স্বয়ংক্রিয়ভাবে উপলব্ধ। ডিউ কোলন: ইমেল এবং মোট। অর্ডিন প্রতি মোট হ্রাস, সীমা একটি 3.

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

পণ্যের সাথে যোগদানের সুযোগ নেই: অর্ডার_আইটেমের পরিমাণ এবং ইউনিট_মূল্য।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ