চলুন দেখি SQL এর পরীক্ষায় আসা কিছু কমন প্রশ্নের ব্যাখা [পর্ব ১]
আজকে আমরা দেখব ডাটাবেজ ম্যানেজমেন্ট সিস্টেম এর কোর্সের পরীক্ষাতে সাধারণত যে সকল কমন প্রশ্ন/কোয়ারী লিখতে বলা হয় সেগুলোর ব্যাখ্যা ! তো দেরী না করে শুরু করি ! নিম্নের Schema টা খেয়াল করি।
employee (person-name, street, city)
works (person-name, company-name, salary)
company (company-name, city)
manager (person-name, manager-name)
এখানে ৪ টি রিলেশন দেখতে পেলাম আর বোল্ড করা ফিল্ড গুলা প্রাইমারী কি। নিচে এই স্কিমা রিলেটেড বিভিন্ন সমস্যার কোয়ারী কীভাবে লিখবে হবে সেগুলা ব্যাখ্যা করা হবে।
1.Find the names of all employees who work for First Bank Corporation.
select person-name
from works
where company-name = ‘First Bank Corporation’
এখানে দেখা গেল Work রিলেশন/টেবিল থেকেই আমরা এমপ্লয়িদের নাম পেতে পারি এবং কন্ডিশনটাও খুব সিম্পল Where Clause এ company-name = ‘First Bank Corporation’ দিলেই সহজেই সকল এমপ্লয়িদের নামের তালিকা পাওয়া যাবে যারা First Bank Corporation এ জব করে।
2.Find the names and cities of residence of all employees who work for First Bank Corporation
এখানে একই সাথে এমপ্লয়িদের নাম এবং তাদের এলাকার নামও চেয়েছে। এবং শর্ত হচ্ছে কর্মস্থল হতে হবে First Bank Corporation
এখন এক্ষেত্রে দেখা গেল, এমপ্লয়িরা কোথায় থাকে সেটা পাওয়া যাবে employee টেবিল থেকে আর প্রথম প্রশ্নের মতো কোম্পানির ইনফো পাওয়া যাবে works টেবিল থেকে !
select e. person-name, city
from employee e, works w
where w.company-name = ’First Bank Corporation’ and
w. person-name = e. person-name
এখানে, দেখা গেল আমাদের দুটো টেবিল থেকেই ডাটা নিতে হবে। select e.person-name,city from employee e, works w দিয়ে বুঝানো হচ্ছে, employee টেবিল থেকে পার্সনের নাম নিতে হবে , এখানে works টেবিলেও পার্সনের নাম আছে তাই স্পেসিফিক ভাবে বলার জন্য e.person-name দেয়া হয়েছে, আর city ত কেবল employee টেবিলেই আছে। এখন কথা হচ্ছে এই ডট দিয়ে কি বুঝানো হলো?
এটা শর্ট ফর্ম ! employee e দিয়ে টেবিলটির শর্ট ফর্ম দেখানো হয়েছে e দ্বারা কেননা বার বার পুর টেবিলের নাম লিখতে গেলে অনেক বড় হয়ে যাবে। সিমিলারলি works কে w দ্বারা প্রকাশ করা হয়েছে !
এখন আসি, কন্ডিশন নিয়ে, শর্ত দেয়া ছিল যে তাদের নাম, শহরই দেখাতে হবে যারা First Bank Corporation এ কাজ করেন ! Where Clause এ w.company-name = ’First Bank Corporation’ দিয়ে works টেবিলে কোম্পানির নাম এর শর্ত বসানো হলো [w.company-name হচ্ছে works.company-name এর শর্ট ফর্ম] এবং আরেকটি শর্ত আমরা নিজে থেকে দিলাম w.person-name=e.person-name কেননা যদি এটা না দেই, তাহলে যারাই First Bank Corporation এ কাজ করে সবার নামই রিটার্ণ করবে এখন প্রশ্নে চেয়েছে এমপ্লয়িদের নাম শুধু ! কাজ ত ম্যানেজার,বস লেভেলেও করে ! তাই ফিল্টার করে আনতে works টেবিল এর পার্সন এর নাম এর সাথে employee টেবিলে যাদের নাম মিল আছে [যেহেতু নাম প্রাইমারি কি] তাদেরই তালিকা দেখাবে !
3.Find the names, street addresses, and cities of residence of all employees Who work for First Bank Corporation and earn more than $10,000 per annul.
এখানে First Bank Corporation এ কাজ করেন এবং বার্ষিক উপার্জন ১০,০০০ ডলারের বেশি তাদের নাম, ঠিকানা, শহর এর তালিকা চাওয়া হচ্ছে ! তো শুরুতেই দেখে নেই কোন ডাটা কোন কোন টেবিলে আছে।
দুই ধাপে কাজটা চিন্তা করি, প্রথমে works টেবিল থেকে যারা First Bank Corporation এ বছরে $10,000 ডলারের বেশি উপার্জন করে তাদের কোয়ারীটা দেখি
select person-name
from works
where company-name = ’First Bank Corporation’ and salary > 10000
এটা খুবই সহজ একটা কোয়ারী , দুইটা কন্ডিশন and অপারেটর এর মাধ্যমে লেখা হয়েছে।
এখন, এই তালিকাতে সবাই আছে, এমপ্লয়ি, বস ইত্যাদী। আমরা IN অপারেটর ব্যবহার করতে পারি যেমনঃ
select * from employee
where person-name in
( select person-name
from works
where company-name = ’First Bank Corporation’ and salary > 10000)
এখানে, employee টেবিল থেকে সব ডাটা নেয়া হচ্ছে তবে শর্ত হলো পার্সনের নামগুলো works টেবিল থেকে যেসব নাম এর তালিকা আসছে সেখানে থাকতে হবে । সাধারনত Select স্টেটমেন্ট আমাদের কতগুলো (Row)সারি রিটার্ন করে, তো প্রথম ধাপের কোয়ারীটা আমাদের কতগুলো Row রিটার্ন করেছে এখন IN অপারেটর দিয়ে যাচাই করা হচ্ছে employee টেবিলের পার্সন এর নাম যদি রিটার্ন করা Row গুলোতে থাকে সেগুলাই শুধু দেখাবে।
4.Find all employees in the database who live in the same cities as the companies for which they work
এখানে, সমস্ত employee দের তালিকা চাওয়া হচ্ছে যারা তাদের কোম্পানি যে শহরে অবস্থিত সেখানেই থাকে। আমরা দেখছি, এমপ্লয়িরা কোথায় থাকে সেটা employee টেবিলে পাওয়া যাবে, কোম্পানি কোথায় অবস্থিত সেটা company টেবিলে পাওয়া যাবে। আর works টেবিল দ্বারা ডিটারমাইন করা যাবে এমপ্লয়িদের কোম্পানির নাম কি । এখন SQL কোয়ারীটা দেখা যাক।
select e. person-name
from employee e, works w, company c
where e. person-name = w. person-name and e.city = c.city and
w.company -name = c.company –name
২য় প্রশ্নের মতো এখানে যেহেতু আমরা ৩ টা টেবিল ব্যবহার করব তাই তাদের শর্ট ফর্ম হিসেবে employee e, works w, company c লেখা হয়েছে। আমরা Select এ কেবল e.person-name নিচ্ছি কেননা আমাদের শুরু এমপ্লয়িদের নাম চেয়েছে । তো ৩ টি কন্ডিশন কেন সেটা এখন দেখি, Where Clause এ
e. person-name = w. person-name দিয়ে employee টেবিলের নামগুলো যেন works টেবিলের নামগুলোর সাথে ম্যাচ হয় সেটা বুঝাচ্ছে। কেননা কাজ তো বস, এমপ্লয়ি, পার্টনার অনেকেই করে,এমপ্লয়িদের নামের সাথে ম্যাচ হলে তারাই আমাদের কাঙ্ক্ষিত এমপ্লয়ি।
e.city = c.city এটা দ্বারা বোঝানো হচ্ছে যে এমপ্লয়িদের শহর এবং কোম্পানির শহর এক হতে হবে ।
প্রথমে আমরা চেক করেছি employee টেবিলের সাথে works টেবিলের যেসব নাম ম্যাচ হয়েছে সেসবের তালিকা নিচ্ছি। এখন, তাহলে আমরা এই তালিকার ব্যক্তিদের কোম্পানির নামও জানতে পারব । ২য় কন্ডিশনে আমরা আরেকটু স্পেসিফাই করলাম যাতে শহর ম্যাচ হয়। এখন ৩য় কন্ডিশনে তাহলে বাদ রইল কোমাপ্নির নাম সেইম কিনা দেখা যেটা w.company -name = c.company –name দিয়ে বের করা গেল। সবগুলো কন্ডিশন and অপারেটর এর মাধ্যমে যুক্ত করা হলো।
5.Find all employees in the database who live in the same cities and on the same streets as do their managers
এখানে সেসকল এমপ্লয়িদের তালিকা চাওয়া হচ্ছে যারা তাদের ম্যানেজার এর শহরের একই রাস্তায় থাকেন ।
select E1. person-name
from employee E1, employee E2, manages M
where E1. person-name = M. person-name and
E2. person-name = M.manager-name and
E1.street = E2.street and E1.city = E2.city
আগের প্রশ্নের সাথে কিছু সিমিলারিটিস আছে। তবে যেহেতু এইবার ম্যানেজারকে দরকার তাই manages টেবিল নেয়া হলো। তবে মজার ব্যাপার employee টেবিল দুইবার নেয়া হয়েছে। তো ৩ টি কন্ডিশন দেখে নেই।
E1. person-name = M. person-name এটা দ্বারা এমপ্লয়িদের তালিকা পাওয়া যাবে যাদের নাম manages টেবিলে আছে। কেননা যদি manages টেবিলে নাম না থাকে তবে তাদের ম্যানেজার কে এটা কীভাবে বের করা সম্ভব হতো ?
E2. person-name = M.manager-name এটি দিয়ে ম্যানেজারের তালিকা পাওয়া যাবে। কেননা ম্যানেজারও এমপ্লয়ি।
E1.street = E2.street and E1.city = E2.city দিয়ে কেবল দুই তালিকাতে যাদের নাম আসছে তাদের রাস্তা এবং শহর এক কিনা সেটা দেখা হবে। মূলত কন্ডিশন উপর থেকে নিচে এক্সিকিউট হচ্ছে অর্থাৎ ফিল্টার হতে হতে লাস্টে আমাদের যা দরকার সেটা রিটার্ণ করছে।
তো আজ এই পর্যন্তই। লিখে এক্সপ্লেইন করাটা টাফ তবুও চেষ্টা করেছি। পরবর্তী পর্বে নিম্নের প্রশ্নের উত্তর নিয়ে আলোচনা করা হবে।
6.Find all employees in the database who do not work for First Bank Corporation.
7.Find then names of all employees in the database who earn more than each employee of Small Bank Corporation.
8.Assume that the companies may be located in several cities. Find all companies located in every city in which Small Bank Corporation is located.
9.Find all employees who earn more than the average salary of all employees of their company.
10.Find those companies whose employees earn a higher salary, on average, than the average salary at First Bank Corporation.
11.Give all employees of First Bank Corporation a 10 percent raise.
12.Give all managers of First Bank Corporation a 10 percent raise unless the salary becomes greater than $100,000; in such cases, give only a 3 percent raise.