এসকিউএল ফর ডেটা সায়েন্স: বোঝাপড়া এবং কাজে যোগদান - KDnuggets

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং কাজে যোগদান - কেডিনুগেটস

উত্স নোড: 2805506

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা
লেখকের ছবি
 

Data science is an interdisciplinary field that relies heavily on extracting insights and making informed decisions from vast amounts of data. One of the fundamental tools in a data scientist’s toolbox is SQL (Structured Query Language), a programming language designed for managing and manipulating relational databases.

এই নিবন্ধে, আমি এসকিউএল-এর সবচেয়ে শক্তিশালী বৈশিষ্ট্যগুলির একটিতে ফোকাস করব: যোগদান।

SQL যোগদান আপনাকে সাধারণ কলামের উপর ভিত্তি করে একাধিক ডাটাবেস টেবিল থেকে ডেটা একত্রিত করার অনুমতি দেয়। এইভাবে, আপনি তথ্য একত্রিত করতে পারেন এবং সম্পর্কিত ডেটাসেটের মধ্যে অর্থপূর্ণ সংযোগ তৈরি করতে পারেন।

বেশ কিছু আছে SQL যোগদানের ধরন:

  • ভেতরের যোগ দিতে
  • বাম বাইরের যোগদান
  • ডান বাইরের যোগদান
  • সম্পূর্ণ বাইরের যোগদান
  • ক্রস জয়েন

আসুন প্রতিটি প্রকার ব্যাখ্যা করি।

একটি অভ্যন্তরীণ যোগদান শুধুমাত্র সেই সারিগুলি প্রদান করে যেখানে উভয় টেবিলে একটি মিল আছে। এটি একটি শেয়ার্ড কী বা কলামের উপর ভিত্তি করে দুটি টেবিলের সারিগুলিকে একত্রিত করে, অ-মেলা সারিগুলিকে বাতিল করে৷

আমরা নিম্নলিখিত উপায়ে এটি কল্পনা.
 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা
লেখকের ছবি
 

এসকিউএল-এ, এই ধরনের যোগদান কীওয়ার্ড JOIN বা INNER JOIN ব্যবহার করে সঞ্চালিত হয়।

একটি বাম বাইরের যোগদান বাম (বা প্রথম) টেবিল থেকে সমস্ত সারি এবং ডান (বা দ্বিতীয়) টেবিল থেকে মিলিত সারি প্রদান করে। কোন মিল না থাকলে, এটি ডান টেবিল থেকে কলামের জন্য NULL মান প্রদান করে।

আমরা এই মত এটি কল্পনা করতে পারেন.

 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা
লেখকের ছবি
 

এসকিউএল-এ এই যোগদানটি ব্যবহার করতে চাইলে, আপনি বাম বাইরের যোগদান বা বাম যোগদান কীওয়ার্ড ব্যবহার করে তা করতে পারেন। এখানে একটি নিবন্ধ যে সম্পর্কে কথা বলা বাম যোগ বনাম বাম বাইরের যোগদান.

ডান যোগ হল বাম যোগের বিপরীত। এটি ডান টেবিল থেকে সমস্ত সারি এবং বাম টেবিল থেকে মিলে যাওয়া সারিগুলি ফিরিয়ে দেয়। কোন মিল না থাকলে, এটি বাম টেবিল থেকে কলামের জন্য NULL মান প্রদান করে।

 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা
লেখকের ছবি
 

এসকিউএল-এ, এই যোগদানের ধরনটি RIGHT OUTER Join বা RIGHT JoIN কীওয়ার্ড ব্যবহার করে করা হয়।

একটি সম্পূর্ণ বাইরের যোগদান উভয় টেবিল থেকে সমস্ত সারি প্রদান করে, যেখানে সম্ভব সারি মেলে এবং অ-ম্যাচিং সারিগুলির জন্য NULL মান পূরণ করে।

 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা
লেখকের ছবি
 

এই যোগদানের জন্য এসকিউএল-এর কীওয়ার্ডগুলি হল সম্পূর্ণ বাইরের যোগদান বা সম্পূর্ণ যোগদান।

এই ধরনের যোগ একটি টেবিলের সমস্ত সারিকে দ্বিতীয় টেবিলের সমস্ত সারির সাথে একত্রিত করে। অন্য কথায়, এটি কার্টেসিয়ান পণ্য প্রদান করে, অর্থাৎ, দুটি টেবিলের সারির সমস্ত সম্ভাব্য সমন্বয়।

এখানে ভিজ্যুয়ালাইজেশন আছে যা বুঝতে সহজ করবে।

 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা
লেখকের ছবি
 

এসকিউএল-এ ক্রস-যোগদানের সময়, কীওয়ার্ডটি হল ক্রস জয়েন।

এসকিউএল-এ যোগদান করার জন্য, আপনাকে আমরা যে সারণীতে যোগ দিতে চাই, মিলের জন্য ব্যবহৃত কলাম এবং আমরা যে ধরনের যোগদান করতে চাই তা উল্লেখ করতে হবে। এসকিউএল-এ টেবিলে যোগদানের জন্য মৌলিক সিনট্যাক্স নিম্নরূপ:

SELECT columns
FROM table1
JOIN table2
ON table1.column = table2.column;

 

এই উদাহরণটি দেখায় কিভাবে JOIN ব্যবহার করতে হয়।

আপনি FROM ক্লজে প্রথম (বা বাম) টেবিলটি উল্লেখ করেন। তারপর আপনি JOIN এর সাথে এটি অনুসরণ করুন এবং দ্বিতীয় (বা ডান) টেবিলটি উল্লেখ করুন।

তারপর ON ক্লজে যোগদানের শর্ত আসে। এখানেই আপনি উল্লেখ করেন যে দুটি টেবিলে যোগদানের জন্য আপনি কোন কলাম ব্যবহার করবেন। সাধারণত, এটি একটি ভাগ করা কলাম যা একটি টেবিলে একটি প্রাথমিক কী এবং দ্বিতীয় টেবিলে বিদেশী কী।

দ্রষ্টব্য: একটি প্রাথমিক কী একটি টেবিলের প্রতিটি রেকর্ডের জন্য একটি অনন্য শনাক্তকারী। একটি বিদেশী কী দুটি টেবিলের মধ্যে একটি লিঙ্ক স্থাপন করে, অর্থাৎ, এটি দ্বিতীয় টেবিলের একটি কলাম যা প্রথম টেবিলের উল্লেখ করে। এর অর্থ কী তা আমরা উদাহরণগুলিতে আপনাকে দেখাব।

আপনি যদি বাম যোগদান, ডান যোগদান, বা সম্পূর্ণ যোগদান ব্যবহার করতে চান, তাহলে আপনি শুধুমাত্র যোগদানের পরিবর্তে এই কীওয়ার্ডগুলি ব্যবহার করুন – কোডের বাকি সবকিছু ঠিক একই!

ক্রস যোগদানের সাথে জিনিসগুলি একটু ভিন্ন। এর প্রকৃতি হল উভয় টেবিল থেকে সমস্ত সারির সংমিশ্রণে যোগদান করা। এই কারণেই ON ক্লজের প্রয়োজন নেই, এবং সিনট্যাক্সটি এইরকম দেখাচ্ছে।

SELECT columns
FROM table1
CROSS JOIN table2;

 

অন্য কথায়, আপনি কেবল একটি টেবিলকে FROM এবং দ্বিতীয়টি ক্রস যোগে উল্লেখ করেন।

বিকল্পভাবে, আপনি FROM-এ উভয় টেবিল উল্লেখ করতে পারেন এবং একটি কমা দিয়ে আলাদা করতে পারেন - এটি ক্রস যোগদানের জন্য একটি সংক্ষিপ্ত বিবরণ।

SELECT columns
FROM table1, table2;

টেবিলে যোগদানের একটি নির্দিষ্ট উপায়ও আছে - নিজের সাথে টেবিলে যোগদান। এটিকে টেবিলে স্ব যোগদানও বলা হয়।

এটি ঠিক একটি স্বতন্ত্র ধরনের যোগদান নয়, কারণ পূর্বে উল্লিখিত যোগদানের যেকোন প্রকার নিজে যোগদানের জন্যও ব্যবহার করা যেতে পারে।

স্বয়ং যোগদানের জন্য সিনট্যাক্স একই রকম যা আমি আপনাকে আগে দেখিয়েছি। প্রধান পার্থক্য হল একই টেবিলটি FROM এবং JOIN এ উল্লেখ করা হয়েছে।

SELECT columns
FROM table1 t1
JOIN table1 t2
ON t1.column = t2.column;

 

এছাড়াও, তাদের মধ্যে পার্থক্য করার জন্য আপনাকে টেবিলটিকে দুটি উপনাম দিতে হবে। আপনি যা করছেন তা হল নিজের সাথে টেবিলে যোগদান করা এবং এটিকে দুটি টেবিল হিসাবে বিবেচনা করা।

আমি এখানে এটি উল্লেখ করতে চেয়েছিলাম, তবে আমি আরও বিস্তারিতভাবে যাচ্ছি না। আপনি যদি নিজে যোগদান করতে আগ্রহী হন তবে দয়া করে এই সচিত্র নির্দেশিকাটি দেখুন এসকিউএল-এ স্বয়ং যোগদান করুন.

আমি উল্লিখিত সবকিছু অনুশীলনে কীভাবে কাজ করে তা আপনাকে দেখানোর সময় এসেছে। আমি ব্যবহার করব SQL জয়েন ইন্টারভিউ প্রশ্ন StrataScratch থেকে এসকিউএল-এ প্রতিটি স্বতন্ত্র ধরনের যোগদান প্রদর্শন করতে।

1. উদাহরণ যোগ করুন

মাইক্রোসফট এই প্রশ্ন আপনি প্রতিটি প্রকল্পের তালিকা করতে চান এবং কর্মচারী দ্বারা প্রকল্পের বাজেট গণনা করতে চান।

ব্যয়বহুল প্রকল্প

“প্রতিটি প্রকল্পে ম্যাপ করা প্রকল্প এবং কর্মচারীদের একটি তালিকা দেওয়া, প্রতিটি কর্মচারীর জন্য বরাদ্দ প্রকল্প বাজেটের পরিমাণ দ্বারা গণনা করুন৷ আউটপুটে প্রকল্পের শিরোনাম এবং প্রকল্পের বাজেটটি নিকটতম পূর্ণসংখ্যায় অন্তর্ভুক্ত করা উচিত। প্রথমে কর্মী প্রতি সর্বোচ্চ বাজেট সহ প্রকল্পগুলির দ্বারা আপনার তালিকা অর্ডার করুন।"

উপাত্ত

প্রশ্ন দুটি টেবিল দেয়.

ms_projects

আইডি: কোন int
খেতাব: varchar
বাজেট: কোন int

ms_emp_প্রকল্প

emp_id: কোন int
প্রকল্প_আইডি: কোন int

এখন, টেবিলের কলাম আইডি ms_projects টেবিলের প্রাথমিক কী। টেবিলে একই কলাম পাওয়া যাবে ms_emp_প্রকল্প, যদিও একটি ভিন্ন নাম: project_id. এটি টেবিলের বিদেশী কী, প্রথম টেবিলের উল্লেখ করে।

আমি আমার সমাধানের টেবিলে যোগ দিতে এই দুটি কলাম ব্যবহার করব।

কোড

SELECT title AS project, ROUND((budget/COUNT(emp_id)::FLOAT)::NUMERIC, 0) AS budget_emp_ratio
FROM ms_projects a
JOIN ms_emp_projects b ON a.id = b.project_id
GROUP BY title, budget
ORDER BY budget_emp_ratio DESC;

 

আমি JOIN ব্যবহার করে দুটি টেবিলে যোগদান করেছি। টেবিল ms_projects FROM এ উল্লেখ করা হয়, যখন ms_emp_প্রকল্প যোগদানের পরে উল্লেখ করা হয়। আমি উভয় টেবিলের একটি উপনাম দিয়েছি, আমাকে পরবর্তীতে টেবিলের দীর্ঘ নাম ব্যবহার না করার অনুমতি দিয়েছি।

এখন, আমি যে কলামগুলি টেবিলে যোগ দিতে চাই তা নির্দিষ্ট করতে হবে। আমি ইতিমধ্যে উল্লেখ করেছি যে কোন কলামগুলি একটি টেবিলের প্রাথমিক কী এবং অন্য টেবিলে বিদেশী কী, তাই আমি সেগুলি এখানে ব্যবহার করব।

আমি এই দুটি কলাম সমান কারণ আমি সমস্ত ডেটা পেতে চাই যেখানে প্রকল্প আইডি একই। আমি প্রতিটি কলামের সামনে টেবিলের উপনামও ব্যবহার করেছি।

এখন যেহেতু আমার উভয় টেবিলে ডেটা অ্যাক্সেস আছে, আমি SELECT এ কলামগুলি তালিকাভুক্ত করতে পারি। প্রথম কলামটি প্রকল্পের নাম এবং দ্বিতীয় কলামটি গণনা করা হয়।

এই গণনাটি COUNT() ফাংশন ব্যবহার করে প্রতিটি প্রকল্পের কর্মচারীর সংখ্যা গণনা করে। তারপর আমি প্রতিটি প্রকল্পের বাজেটকে কর্মচারীর সংখ্যা দিয়ে ভাগ করি। আমি ফলাফলটিকে দশমিক মানগুলিতে রূপান্তর করি এবং এটিকে শূন্য দশমিক স্থানে বৃত্তাকার করি।

আউটপুট

এখানে কি প্রশ্ন ফেরত.

 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা

2. বাম যোগদানের উদাহরণ

আসুন এই যোগদানের অনুশীলন করি এয়ারবিএনবি ইন্টারভিউ প্রশ্ন. এটি আপনাকে অর্ডারের সংখ্যা, গ্রাহকের সংখ্যা এবং প্রতিটি শহরের জন্য অর্ডারের মোট খরচ খুঁজে পেতে চায়।

গ্রাহকের আদেশ এবং বিবরণ

“প্রতিটি শহরের জন্য অর্ডারের সংখ্যা, গ্রাহকের সংখ্যা এবং অর্ডারের মোট খরচ খুঁজুন। শুধুমাত্র সেই শহরগুলিকে অন্তর্ভুক্ত করুন যেগুলি কমপক্ষে 5টি অর্ডার করেছে এবং প্রতিটি শহরে সমস্ত গ্রাহককে গণনা করে এমনকি তারা একটি অর্ডার না দিলেও৷

সংশ্লিষ্ট শহরের নাম সহ প্রতিটি গণনা আউটপুট করুন।"

উপাত্ত

আপনাকে টেবিল দেওয়া হয়েছে গ্রাহক, এবং আদেশ.

গ্রাহকদের

আইডি: কোন int
নামের প্রথম অংশ: varchar
নামের শেষাংশ: varchar
শহর: varchar
ঠিকানা: varchar
ফোন নম্বর: varchar

আদেশ

আইডি: কোন int
কাস্ট_আইডি: কোন int
অর্ডারের তারিখ: DATETIME
আদেশ বিবরণী: varchar
মোট_অর্ডার_ব্যয়: কোন int

ভাগ করা কলামগুলি টেবিলের আইডি গ্রাহকদের এবং টেবিল থেকে কাস্ট_আইডি আদেশ. আমি টেবিলে যোগ দিতে এই কলামগুলি ব্যবহার করব।

কোড

বাম যোগদান ব্যবহার করে এই প্রশ্নটি কীভাবে সমাধান করবেন তা এখানে।

SELECT c.city, COUNT(DISTINCT o.id) AS orders_per_city, COUNT(DISTINCT c.id) AS customers_per_city, SUM(o.total_order_cost) AS orders_cost_per_city
FROM customers c
LEFT JOIN orders o ON c.id = o.cust_id
GROUP BY c.city
HAVING COUNT(o.id) >=5;

 

আমি টেবিল রেফারেন্স গ্রাহকদের FROM এ (এটি আমাদের বাম টেবিল) এবং বামে এটির সাথে যোগ দিন আদেশ গ্রাহক আইডি কলামে।

এখন আমি শহর নির্বাচন করতে পারি, শহর অনুসারে অর্ডার এবং গ্রাহকদের সংখ্যা পেতে COUNT() ব্যবহার করতে পারি এবং শহর অনুসারে মোট অর্ডার খরচ গণনা করতে SUM() ব্যবহার করতে পারি।

শহর অনুসারে এই সমস্ত গণনা পেতে, আমি শহর অনুসারে আউটপুট গ্রুপ করি।

প্রশ্নটিতে একটি অতিরিক্ত অনুরোধ রয়েছে: "শুধুমাত্র সেই শহরগুলি অন্তর্ভুক্ত করুন যেগুলি কমপক্ষে 5টি অর্ডার করেছে..." আমি এটি অর্জন করতে শুধুমাত্র পাঁচ বা তার বেশি অর্ডার সহ শহরগুলি দেখানোর জন্য হ্যাভিং ব্যবহার করি৷

প্রশ্ন হল, কেন ব্যবহার করলাম বাম যোগ দিন এবং না JOIN? The clue is in the question:”…and count all customers in each city even if they did not place an order.” It’s possible that not all customers have placed orders. This means I want to show all customers from the table গ্রাহকদের, যা বাম যোগদানের সংজ্ঞার সাথে পুরোপুরি ফিট করে।

যদি আমি JOIN ব্যবহার করতাম, ফলাফলটি ভুল হতো, কারণ আমি সেই গ্রাহকদের মিস করতাম যারা কোনো অর্ডার দেয়নি।

দ্রষ্টব্য: এসকিউএল-এ যোগদানের জটিলতা তাদের সিনট্যাক্সে প্রতিফলিত হয় না কিন্তু তাদের শব্দার্থবিদ্যায়! আপনি যেমন দেখেছেন, প্রতিটি যোগ একইভাবে লেখা হয়, শুধুমাত্র কীওয়ার্ড পরিবর্তন হয়। যাইহোক, প্রতিটি যোগদান আলাদাভাবে কাজ করে এবং তাই, ডেটার উপর নির্ভর করে বিভিন্ন ফলাফল দিতে পারে। সেই কারণে, এটা অত্যন্ত গুরুত্বপূর্ণ যে আপনি প্রতিটি যোগদান কী করে তা সম্পূর্ণরূপে বোঝেন এবং আপনি যা চান ঠিক তাই ফিরিয়ে দেবে এমন একটি বেছে নিন!

আউটপুট

এখন, আউটপুট এক নজর আছে.

 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা

3. ডান যোগদানের উদাহরণ

ডান যোগ হল বাম যোগদানের মিরর ইমেজ। তাই আমি রাইট যোগদান ব্যবহার করে আগের সমস্যাটি সহজেই সমাধান করতে পারতাম। আমাকে এটা কিভাবে করতে হয় তা দেখান.

উপাত্ত

টেবিল একই থাকে; আমি শুধু যোগদান একটি ভিন্ন ধরনের ব্যবহার করব.

কোড

SELECT c.city, COUNT(DISTINCT o.id) AS orders_per_city, COUNT(DISTINCT c.id) AS customers_per_city, SUM(o.total_order_cost) AS orders_cost_per_city
FROM orders o
RIGHT JOIN customers c ON o.cust_id = c.id GROUP BY c.city
HAVING COUNT(o.id) >=5;

 

এখানে কি পরিবর্তন হয়েছে. যেহেতু আমি ডান যোগদান ব্যবহার করছি, আমি টেবিলের ক্রম পরিবর্তন করেছি। এখন টেবিল আদেশ বাম এক, এবং টেবিল হয় গ্রাহকদের সঠিক. যোগদানের শর্ত একই থাকে। আমি টেবিলের ক্রম প্রতিফলিত করতে কলামের ক্রম পরিবর্তন করেছি, কিন্তু এটি করার প্রয়োজন নেই।

টেবিলের ক্রম পরিবর্তন করে এবং ডান যোগদান ব্যবহার করে, আমি আবার সমস্ত গ্রাহকদের আউটপুট করব, এমনকি তারা কোনো অর্ডার না দিলেও।

বাকি ক্যোয়ারী আগের উদাহরণের মতই। একই আউটপুট জন্য যায়.

দ্রষ্টব্য: অনুশীলনে, ডান যোগদান তুলনামূলকভাবে খুব কমই ব্যবহৃত হয়। বাম যোগদানটি এসকিউএল ব্যবহারকারীদের কাছে আরও স্বাভাবিক বলে মনে হয়, তাই তারা এটি প্রায়শই ব্যবহার করে। ডান যোগদানের মাধ্যমে যা করা যায় তা বাম যোগদানের মাধ্যমেও করা যেতে পারে। সেই কারণে, এমন কোনও নির্দিষ্ট পরিস্থিতি নেই যেখানে ডান যোগদানকে অগ্রাধিকার দেওয়া যেতে পারে৷

আউটপুট

 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা

4. সম্পূর্ণ যোগদানের উদাহরণ

সেলসফোর্স এবং টেসলার প্রশ্ন আপনি 2020 সালে চালু হওয়া পণ্য কোম্পানির সংখ্যার সাথে আগের বছরে লঞ্চ করা পণ্য কোম্পানির সংখ্যার মধ্যে নেট পার্থক্য গণনা করতে চান।

নতুন পণ্য

“আপনাকে বছরে কোম্পানির দ্বারা পণ্য লঞ্চের একটি টেবিল দেওয়া হয়। 2020 সালে চালু হওয়া পণ্য কোম্পানির সংখ্যার সাথে আগের বছরে লঞ্চ করা পণ্য কোম্পানির সংখ্যার মধ্যে নেট পার্থক্য গণনা করার জন্য একটি প্রশ্ন লিখুন। আগের বছরের তুলনায় 2020 সালের জন্য প্রকাশিত কোম্পানিগুলির নাম এবং নেট পণ্যগুলির একটি নেট পার্থক্য আউটপুট।"

উপাত্ত

প্রশ্নটি নিম্নলিখিত কলামগুলির সাথে একটি টেবিল সরবরাহ করে।

car_লঞ্চ

বছর: কোন int
কোমপানির নাম: varchar
পণ্যের নাম: varchar

শুধুমাত্র একটি টেবিল থাকলে আমি কীভাবে টেবিলে যোগ দেব? হুম, সেটাও দেখা যাক!

কোড

এই প্রশ্নটি একটু বেশি জটিল, তাই আমি ধীরে ধীরে এটি প্রকাশ করব।

SELECT company_name, product_name AS brand_2020
FROM car_launches
WHERE YEAR = 2020;

 

প্রথম SELECT বিবৃতিটি 2020 সালে কোম্পানি এবং পণ্যের নাম খুঁজে পায়। এই প্রশ্নটি পরে একটি সাবকোয়েরিতে পরিণত হবে।

প্রশ্নটি আপনাকে 2020 এবং 2019 এর মধ্যে পার্থক্য খুঁজে পেতে চায়। তাই আসুন একই প্রশ্নটি লিখি কিন্তু 2019 এর জন্য।

SELECT company_name, product_name AS brand_2019
FROM car_launches
WHERE YEAR = 2019;

 

আমি এখন এই প্রশ্নগুলিকে সাবকোয়েরিতে পরিণত করব এবং সম্পূর্ণ বাইরের যোগদান ব্যবহার করে তাদের সাথে যোগ দেব।

SELECT *
FROM (SELECT company_name, product_name AS brand_2020 FROM car_launches WHERE YEAR = 2020) a
FULL OUTER JOIN (SELECT company_name, product_name AS brand_2019 FROM car_launches WHERE YEAR = 2019) b ON a.company_name = b.company_name;

 

সাবকোয়ারিগুলিকে টেবিল হিসাবে বিবেচনা করা যেতে পারে এবং তাই যোগদান করা যেতে পারে। আমি প্রথম সাবকোয়েরিটিকে একটি উপনাম দিয়েছি এবং আমি এটিকে FROM ক্লজে রেখেছি। তারপর কোম্পানির নাম কলামে দ্বিতীয় সাবকোয়েরির সাথে যোগ দিতে আমি সম্পূর্ণ OUTER JOIN ব্যবহার করি।

এই ধরনের SQL জয়েন ব্যবহার করে, আমি 2020-এর সমস্ত কোম্পানি এবং পণ্যগুলিকে 2019-এর সমস্ত কোম্পানি এবং পণ্যগুলির সাথে একীভূত করব।

 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা
 

এখন আমি আমার প্রশ্ন চূড়ান্ত করতে পারেন. কোম্পানির নাম নির্বাচন করা যাক. এছাড়াও, আমি প্রতি বছরে লঞ্চ করা পণ্যের সংখ্যা খুঁজে বের করতে COUNT() ফাংশন ব্যবহার করব এবং তারপর পার্থক্য পেতে এটি বিয়োগ করব। অবশেষে, আমি কোম্পানি অনুসারে আউটপুটকে গোষ্ঠীবদ্ধ করব এবং এটিকে বর্ণানুক্রমিকভাবে কোম্পানি অনুসারে বাছাই করব।

এখানে পুরো প্রশ্ন আছে.

SELECT a.company_name, (COUNT(DISTINCT a.brand_2020)-COUNT(DISTINCT b.brand_2019)) AS net_products
FROM (SELECT company_name, product_name AS brand_2020 FROM car_launches WHERE YEAR = 2020) a
FULL OUTER JOIN (SELECT company_name, product_name AS brand_2019 FROM car_launches WHERE YEAR = 2019) b ON a.company_name = b.company_name
GROUP BY a.company_name
ORDER BY company_name;

আউটপুট

এখানে কোম্পানির তালিকা এবং 2020 এবং 2019 এর মধ্যে লঞ্চ করা পণ্যের পার্থক্য রয়েছে৷

 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা

5. ক্রস যোগদানের উদাহরণ

ডেলয়েটের এই প্রশ্ন CROSS JOIN কিভাবে কাজ করে তা দেখানোর জন্য দারুণ।

সর্বোচ্চ দুই নম্বর

"সংখ্যার একটি একক কলাম দেওয়া হলে, দুটি সংখ্যার সমস্ত সম্ভাব্য স্থানান্তর বিবেচনা করুন যে সংখ্যার জোড়া (x,y) এবং (y,x) দুটি ভিন্ন স্থানান্তর। তারপর, প্রতিটি স্থানান্তরের জন্য, দুটি সংখ্যার মধ্যে সর্বাধিক খুঁজুন।

তিনটি কলাম আউটপুট করুন: প্রথম সংখ্যা, দ্বিতীয় সংখ্যা এবং সর্বাধিক দুটি।"

প্রশ্নটি চায় যে আপনি দুটি সংখ্যার সমস্ত সম্ভাব্য স্থানান্তর খুঁজে বের করুন এই অনুমান করে যে সংখ্যার জোড়া (x,y) এবং (y,x) দুটি ভিন্ন স্থানান্তর। তারপর, আমাদের প্রতিটি স্থানান্তরের জন্য সর্বাধিক সংখ্যা খুঁজে বের করতে হবে।

উপাত্ত

প্রশ্নটি আমাদের একটি কলাম সহ একটি টেবিল দেয়।

deloitte_numbers

সংখ্যা: কোন int

কোড

এই কোডটি ক্রস যোগদানের একটি উদাহরণ, তবে নিজে যোগদানেরও।

SELECT dn1.number AS number1, dn2.number AS number2, CASE WHEN dn1.number > dn2.number THEN dn1.number ELSE dn2.number END AS max_number
FROM deloitte_numbers AS dn1
CROSS JOIN deloitte_numbers AS dn2;

 

আমি FROM এ টেবিলটি উল্লেখ করি এবং এটিকে একটি উপনাম দিই। তারপর আমি CROSS JOIN এর পরে এটিকে উল্লেখ করে এবং টেবিলটিকে অন্য উপনাম দিয়ে এটিকে নিজের সাথে যোগ করি।

এখন একটি টেবিল ব্যবহার করা সম্ভব কারণ তারা দুটি। আমি প্রতিটি টেবিল থেকে কলাম নম্বর নির্বাচন করি। তারপর আমি একটি শর্ত সেট করতে CASE স্টেটমেন্ট ব্যবহার করি যা দুটি সংখ্যার সর্বোচ্চ সংখ্যা দেখাবে।

কেন এখানে CROSS JOIN ব্যবহার করা হয়? মনে রাখবেন, এটি এক ধরনের এসকিউএল জয়েন যা সমস্ত টেবিল থেকে সমস্ত সারির সমস্ত সমন্বয় দেখাবে। প্রশ্নটা ঠিক এমনটাই করছে!

আউটপুট

এখানে সমস্ত সংমিশ্রণের স্ন্যাপশট এবং দুটির উচ্চতর সংখ্যা।

 

ডেটা সায়েন্সের জন্য এসকিউএল: বোঝাপড়া এবং যোগদানের সুবিধা

এখন যেহেতু আপনি SQL যোগদান ব্যবহার করতে জানেন, প্রশ্ন হল কিভাবে ডেটা বিজ্ঞানে সেই জ্ঞানকে কাজে লাগাতে হয়।

এসকিউএল যোগদান ডেটা বিজ্ঞানের কাজে যেমন ডেটা এক্সপ্লোরেশন, ডেটা ক্লিনিং এবং ফিচার ইঞ্জিনিয়ারিংয়ের ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করে।

এখানে এসকিউএল যোগদান কিভাবে লিভারেজ করা যেতে পারে তার কয়েকটি উদাহরণ রয়েছে:

  1. ডেটা একত্রিত করা: সারণিতে যোগদান আপনাকে ডেটার বিভিন্ন উত্স একত্রিত করতে দেয়, আপনাকে একাধিক ডেটাসেটের মধ্যে সম্পর্ক এবং পারস্পরিক সম্পর্ক বিশ্লেষণ করতে সক্ষম করে। উদাহরণস্বরূপ, একটি লেনদেন টেবিলের সাথে একটি গ্রাহক টেবিলে যোগদান গ্রাহকের আচরণ এবং ক্রয়ের ধরণগুলির অন্তর্দৃষ্টি প্রদান করতে পারে।
  1. তথ্য বৈধতা: যোগদানগুলি ডেটা গুণমান এবং অখণ্ডতা যাচাই করতে ব্যবহার করা যেতে পারে। বিভিন্ন সারণী থেকে ডেটা তুলনা করে, আপনি অসঙ্গতি, অনুপস্থিত মান বা আউটলায়ার সনাক্ত করতে পারেন। এটি আপনাকে ডেটা পরিষ্কার করতে সহায়তা করে এবং বিশ্লেষণের জন্য ব্যবহৃত ডেটা সঠিক এবং নির্ভরযোগ্য তা নিশ্চিত করে।
  1. ফিচার ইঞ্জিনিয়ারিং: যোগদান মেশিন লার্নিং মডেলের জন্য নতুন বৈশিষ্ট্য তৈরি করতে সহায়ক হতে পারে। প্রাসঙ্গিক টেবিলগুলিকে একত্রিত করে, আপনি অর্থপূর্ণ তথ্য বের করতে পারেন এবং ডেটার মধ্যে গুরুত্বপূর্ণ সম্পর্কগুলি ক্যাপচার করে এমন বৈশিষ্ট্যগুলি তৈরি করতে পারেন৷ এটি আপনার মডেলের ভবিষ্যদ্বাণী করার ক্ষমতা বাড়াতে পারে।
  1. সমষ্টি এবং বিশ্লেষণ: যোগদান আপনাকে জটিল একত্রীকরণ এবং একাধিক টেবিল জুড়ে বিশ্লেষণ করতে সক্ষম করে। বিভিন্ন উত্স থেকে ডেটা একত্রিত করে, আপনি ডেটার একটি ব্যাপক দৃষ্টিভঙ্গি অর্জন করতে পারেন এবং মূল্যবান অন্তর্দৃষ্টি অর্জন করতে পারেন৷ উদাহরণস্বরূপ, একটি পণ্য টেবিলের সাথে একটি বিক্রয় সারণীতে যোগদান আপনাকে পণ্য বিভাগ বা অঞ্চল অনুসারে বিক্রয় কর্মক্ষমতা বিশ্লেষণ করতে সহায়তা করতে পারে।

আমি ইতিমধ্যে উল্লেখ করেছি, যোগদানের জটিলতা তাদের সিনট্যাক্সে দেখায় না। আপনি দেখেছেন যে সিনট্যাক্স তুলনামূলকভাবে সহজবোধ্য।

যোগদানের জন্য সর্বোত্তম অনুশীলনগুলি এটিও প্রতিফলিত করে, কারণ তারা নিজেই কোডিং এর সাথে সম্পর্কিত নয় তবে যোগদান কী করে এবং এটি কীভাবে সম্পাদন করে।

এসকিউএল-এ যোগদানের সর্বাধিক সুবিধা পেতে, নিম্নলিখিত সেরা অনুশীলনগুলি বিবেচনা করুন৷

  1. আপনার ডেটা বুঝুন: আপনার ডেটার মধ্যে কাঠামো এবং সম্পর্কের সাথে নিজেকে পরিচিত করুন। এটি আপনাকে উপযুক্ত ধরণের যোগদান চয়ন করতে এবং মিলের জন্য সঠিক কলামগুলি নির্বাচন করতে সহায়তা করবে।
  1. সূচী ব্যবহার করুন: যদি আপনার টেবিলগুলি বড় হয় বা ঘন ঘন যুক্ত হয়, তাহলে যোগদানের জন্য ব্যবহৃত কলামগুলিতে সূচী যোগ করার কথা বিবেচনা করুন। সূচীগুলি ক্যোয়ারী কর্মক্ষমতা উল্লেখযোগ্যভাবে উন্নত করতে পারে।
  1. পারফরম্যান্সের প্রতি মনোযোগী হোন: বড় টেবিল বা একাধিক টেবিল যোগদান গণনাগতভাবে ব্যয়বহুল হতে পারে। ডেটা ফিল্টার করে, উপযুক্ত যোগদানের ধরন ব্যবহার করে এবং অস্থায়ী টেবিল বা সাবকোয়েরির ব্যবহার বিবেচনা করে আপনার প্রশ্নগুলিকে অপ্টিমাইজ করুন।
  1. পরীক্ষা এবং যাচাই: সঠিকতা নিশ্চিত করতে সর্বদা আপনার যোগদানের ফলাফল যাচাই করুন। বিচক্ষণতা পরীক্ষা করুন এবং নিশ্চিত করুন যে যোগ করা ডেটা আপনার প্রত্যাশা এবং ব্যবসায়িক যুক্তির সাথে সামঞ্জস্যপূর্ণ।

SQL যোগদান একটি মৌলিক ধারণা যা আপনাকে একাধিক উৎস থেকে ডেটা একত্রিত ও বিশ্লেষণ করার জন্য একজন ডেটা বিজ্ঞানী হিসেবে ক্ষমতা দেয়। এসকিউএল যোগদানের বিভিন্ন প্রকার বোঝার মাধ্যমে, তাদের সিনট্যাক্স আয়ত্ত করে, এবং কার্যকরভাবে তাদের ব্যবহার করে, ডেটা বিজ্ঞানীরা মূল্যবান অন্তর্দৃষ্টি আনলক করতে পারেন, ডেটার গুণমান যাচাই করতে পারেন এবং ডেটা-চালিত সিদ্ধান্ত গ্রহণ করতে পারেন৷

আমি আপনাকে দেখিয়েছি কিভাবে এটি পাঁচটি উদাহরণে করতে হয়। এখন এটি আপনার উপর নির্ভর করে SQL এর শক্তিকে কাজে লাগানো এবং আপনার ডেটা বিজ্ঞান প্রকল্পগুলির জন্য যোগদান করা এবং আরও ভাল ফলাফল অর্জন করা।
 
 
নাট রোসিদি একজন ডেটা সায়েন্টিস্ট এবং পণ্যের কৌশল। এছাড়াও তিনি একজন সহযোগী অধ্যাপক শিক্ষকতা বিশ্লেষণ, এবং এর প্রতিষ্ঠাতা স্ট্র্যাটাস্ক্র্যাচ, একটি প্ল্যাটফর্ম যা তথ্য বিজ্ঞানীদের তাদের ইন্টারভিউয়ের জন্য প্রস্তুত করতে সাহায্য করে যা শীর্ষ কোম্পানিগুলির বাস্তব ইন্টারভিউ প্রশ্ন নিয়ে। তার সাথে সংযোগ করুন টুইটার: StrataScratch or লিঙ্কডইন.
 

সময় স্ট্যাম্প:

থেকে আরো কেডনুগেটস

কেডিনুগেটস নিউজ, 15 নভেম্বর: 10টি প্রয়োজনীয় পান্ডা ফাংশন • ডেটা সায়েন্সে মাস্টার্স করার জন্য 5টি বিনামূল্যে কোর্স – কেডিনুগেটস

উত্স নোড: 2990907
সময় স্ট্যাম্প: নভেম্বর 15, 2023