SATT ACADEMY

New to Satt Academy? Create an account


or

Log in with Google Account

Academy
Please, contribute to add content into এসকিউএল ডাটাবেস (SQL Database).
Content

SQL কনস্ট্রেইন্ট(Constraints) একটি টেবিলের ডেটা কলামগুলির উপর নিয়ম আরোপ করতে ব্যবহৃত হয়। এটি একটি টেবিলে ইনপুটকৃত তথ্যের সীমা নির্ধারন করতে পারে। এটি ডেটাবেজ তথ্যের সঠিকতা এবং নির্ভরযোগ্যতা নিশ্চিত করে।

কনস্ট্রেইন্ট(constraint) কর্তৃক আরোপিত সীমা লংঘনকারী সকল কর্মকান্ডকে কনস্ট্রেইন্ট বাধা দেয়।

SQL এ Constraints সমূহঃ

  • NOT NULL - একটি কলামে NULL ভ্যালু থাকতে পারবে না।
  • UNIQUE - একটি কলামের প্রতিটি সারিতে ইউনিক ভ্যালু থাকবে।
  • PRIMARY KEY - ইহা NOT NULL এবং UNIQUE এর সংমিশ্রণ।
  • FOREIGN KEY - দুইটি টেবিলের মধ্যে সংযোগ সৃষ্টি করে।
  • CHECK- একটি টেবিলের প্রতিটি সারিতে একটি শর্ত আরোপ করে।
  • DEFAULT - একটি কলামের জন্য ডিফল্ট ভ্যালু নির্দিষ্ট করে।

টেবিল তৈরি করার সময়ে আমরা Constraints সেট করতে পারি। এছাড়া পূর্বের তৈরি টেবিলেও Constraints যোগ করতে পারি।

টেবিল তৈরির সময়ে SQL CONSTRAINT সিনটেক্স

 

CREATE TABLE name_of_table
(
name_of_column_1 data_type(size) name_of_constraint,
name_of_column_2 data_type(size) name_of_constraint,
....
);

 

SQL CONSTRAINT ডিলেট করা

ALTER TABLE name_of_table DROP CONSTRAINT name_of_constraint;
Content added By

Join এর বাংলা অর্থ কোন কিছু একত্রিত করা। SQL -এ JOIN দুই বা ততোধিক টেবিলকে একত্রিত করে।
একটি ডেটাবেজ দুই বা ততোধিক টেবিলের কলাম ফিল্ডের উপর ভিত্তিকরে যথাক্রমে দুই বা ততোধিক টেবিল থেকে সারি নিয়ে তাদের একত্রিত করার জন্য SQL JOIN clause ব্যবহৃত হয়।


ANSI স্ট্যান্ডার্ড অনুসারে SQL এ ৫ ধরনের JOIN রয়েছে

নিম্নে JOIN সমূহের তালিকা ও ব্যবহার তুলে ধরা হলোঃ

  • INNER JOIN - উভয় টেবিলে অন্তত একটি কলামের মিল থাকলে সকল সারি রিটার্ন করে।
  • LEFT JOIN - ডান টেবিলের মিলিত সারিসহ বাম টেবিলের সকল সারি রিটার্ন করে।
  • RIGHT JOIN - বাম টেবিলের মিলিত সারিসহ ডান টেবিলের সকল সারি রিটার্ন করে।
  • FULL JOIN -যেকোনো একটি টেবিলের সাথে মিল থাকলে উভয় টেবিলের সকল সারি রিটার্ন করে।
  • CROSS JOIN - বাম পাশের মিলিত সারির একটি কলামের জন্য ডান পাশের মিলিত সারির প্রতিটি কলামকে রিটার্ন করে।


 

SQL এর সবচেয়ে সাধারণ JOIN হলোঃ SQL INNER JOIN
join এর সাধারণ সর্ত পুরণ হলে SQL INNER JOIN একাধিক টেবিল থেকে সারি রির্টান করে।


 

নমুনা ডেটাবেজ

JOIN কীওয়ার্ডের ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।

নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

নিচের অংশটি "Student_attendance" টেবিল থেকে নেওয়াঃ

রোল নাম্বারউপস্থিতিভর্তির তারিখ
১০১৮৯০১-১১-২০১৫
১০২৯১০১-১১-২০১৫
১০৩৮০০১-১১-২০১৫
১০৪৭৫০২-১১-২০১৫
১০৫৭৭০২-১১-২০১৫

উপরের টেবিল দুটিতে লক্ষ্য করলে দেখবেন যে, "রোল নাম্বার(Roll_number)" কলামটি উভয় টেবিলে রয়েছে। "Student_details" টেবিলের "রোল নাম্বার(Roll_number)" কলামটি "Student_attendance" টেবিলের "রোল নাম্বার(Roll_number)" কলামকে নির্দেশ করে। "রোল নাম্বার(Roll_number)" কলামটি উভয় টেবিলের মধ্যে সম্পর্ক তৈরি করছে।

উদাহরণ

SELECT Student_attendance.Roll_number, Student_details.Student_name, Student_attendance.Admission_date
FROM Student_attendance INNER JOIN Student_details
ON Student_attendance.Roll_number=Student_details.Roll_number;

 

উপরের উদাহরণটির ফলাফল নিম্নের ন্যায় দেখাবেঃ

রোল নাম্বারশিক্ষার্থীর নামভর্তির তারিখ
১০১তামজীদ হাসান০১-১১-২০১৫
১০২মিনহাজুর রহমান০১-১১-২০১৫
১০৩মোঃ সবুজ হোসেন০১-১১-২০১৫
১০৪ইয়াসিন হোসেন০২-১১-২০১৫
১০৫ফরহাদ উদ্দিন০২-১১-২০১৫


 

Content added By

Join এর সবচেয়ে গুরুত্বপূর্ণ এবং সর্বাধিক ব্যবহৃত ধরন হচ্ছে INNER JOIN। দুই বা ততোধিক টেবিলের কলামের ভ্যালু গুলোকে একত্রিত করার মাধ্যমে INNER JOIN একটি নতুন টেবিল তৈরি করে।
কুয়েরী করার সময় ON কীওয়ার্ড ের মাধ্যমে শর্ত জুড়ে দেওয়া হয়। যখন ঐ শর্ত বা শর্ত-সমূহ পূর্ণ হয় তখন উভয় টেবিলের তথ্য গুলো একত্রিত হয়ে একটি ফলাফল টেবিল তৈরি হয়।

SQL INNER JOIN সিনটেক্স

SELECT name_of_column's
FROM first_table
INNER JOIN second_table
ON first_table.name_of_column=second_table.name_of_column;

 


 

অথবাঃ

SELECT name_of_column's
FROM first_table
JOIN second_table
ON first_table.name_of_column=second_table.name_of_column;

 

মনে রাখবেন, INNER JOIN এবং JOIN একই অর্থে ব্যবহৃত হয়।

SQL INNER JOIN


 

নমুনা ডেটাবেজ

JOIN কীওয়ার্ডের ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।

নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

নিচের অংশটি "Student_attendance" টেবিল থেকে নেওয়াঃ

রোল নাম্বারউপস্থিতিভর্তির তারিখ
১০১৮৯০১-১১-২০১৫
১০২৯১০১-১১-২০১৫
১০৩৮০০১-১১-২০১৫
১০৪৭৫০২-১১-২০১৫
১০৫৭৭০২-১১-২০১৫

SQL INNER JOIN উদাহরণ

নিম্নের SQL স্টেটমেন্টটি সকল শিক্ষার্থীর নামের সাথে তাদের ভর্তির তারিখ ফেরত দিবেঃ

উদাহরণ

SELECT Student_attendance.Roll_number, Student_details.Student_name, Student_attendance.Admission_date
FROM Student_attendance INNER JOIN Student_details
ON Student_attendance.Roll_number=Student_details.Roll_number;

 

বিঃদ্রঃ উভয় টেবিলের যেসকল কলামের তথ্য গুলো ম্যাচ করবে INNER JOIN শুধুমাত্র ঐ সকল সারি গুলোকে একত্রিত করে ফলাফল দেখাবে।

উপরের উদাহরণটির ফলাফল নিম্নের ন্যায় দেখাবেঃ

রোল নাম্বারশিক্ষার্থীর নামভর্তির তারিখ
১০১তামজীদ হাসান০১-১১-২০১৫
১০২মিনহাজুর রহমান০১-১১-২০১৫
১০৩মোঃ সবুজ হোসেন০১-১১-২০১৫
১০৪ইয়াসিন হোসেন০২-১১-২০১৫
১০৫ফরহাদ উদ্দিন০২-১১-২০১৫
Content added By

SQL LEFT JOIN কীওয়ার্ডটি বাম টেবিলের(first_table) সকল সারিকে এবং ডান টেবিলের(second_table) শুধুমাত্র সদৃশ(matched) সারি গুলোকে একত্রিত করে ফলাফল-টেবিলে ফলাফল রিটার্ন করে। যদি সদৃশ কিছু খুঁজে না পায় তাহলে ডান টেবিল থেকে কোনো কিছু কুয়েরি/রিটার্ন করবে না।

SQL LEFT JOIN সিনটেক্স

SELECT name_of_column's
FROM first_table
LEFT JOIN second_table
ON first_table.name_of_column=second_table.name_of_column;

 


 

অথবাঃ

SELECT name_of_column's
FROM first_table
LEFT OUTER JOIN second_table
ON first_table.name_of_column=second_table.name_of_column;

 

কিছু ডেটাবেজে LEFT JOIN কে LEFT OUTER JOIN বলা হয়ে থাকে।

SQL LEFT JOIN


 

নমুনা ডেটাবেজ

LEFT JOIN কীওয়ার্ডের ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।

নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

নিচের অংশটি "Student_result" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারফলাফল
১০১A+
১০২A+
১০৩A+
১০৪A+
১০৫A+

SQL LEFT JOIN উদাহরণ

নিম্নের SQL স্টেটমেন্টটি সকল শিক্ষার্থীর তথ্য রিটার্ন করবে এবং যদি তাদের পরীক্ষার ফলাফল থাকে তবে তাও রিটার্ন করবেঃ

উদাহরণ

SELECT Student_details.Student_name ,Student_details.Roll_number, Student_result.Result
FROM Student_details
LEFT JOIN Student_result
ON Student_details.Roll_number=Student_result.Roll_number
ORDER BY Student_details.Student_name;

 

বিঃদ্রঃ ডান টেবিলের মধ্যে সদৃশ(matched) কোনো কিছু খুঁজে না পেলেও LEFT JOIN কীওয়ার্ড টি বাম টেবিলের সকল সারি রিটার্ন করবে।

উপরের উদাহরণটির ফলাফল নিম্নের ন্যায় দেখাবেঃ

রোল নাম্বারশিক্ষার্থীর নামফলাফল
১২৩আসমা আক্তারA-
১০৪ইয়াসিন হোসেনA+
১২৮উম্মে কুলসুমB
১১৪ওমর ফারুকA
১০৯ওয়াহিদুল ইসলামA


 

Content added By

SQL RIGHT JOIN কীওয়ার্ডটি ডান টেবিলের(second_table) সকল সারিকে এবং বাম টেবিলের(first_table) শুধুমাত্র সদৃশ(matched) সারি গুলোকে একত্রিত করে ফলাফল-টেবিলে ফলাফল রিটার্ন করে। যদি সদৃশ কিছু খুঁজে না পায় তাহলে বাম টেবিল থেকে কোনো কিছু কুয়েরি/রিটার্ন করবে না।

SQL RIGHT JOIN সিনট্যাক্স

SELECT name_of_column's
FROM first_table
RIGHT JOIN second_table
ON first_table.name_of_column=second_table.name_of_column;

 

অথবাঃ

SELECT name_of_column's
FROM first_table
RIGHT OUTER JOIN second_table
ON first_table.name_of_column=second_table.name_of_column;

 

কিছু ডাটাবেজে RIGHT JOIN কে RIGHT OUTER JOIN বলা হয়ে থাকে।

SQL RIGHT JOIN


 

নমুনা ডেটাবেজ

RIGHT JOIN কীওয়ার্ডের ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।

নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

নিচের অংশটি "Student_attendance" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারউপস্থিতিভর্তির তারিখ
১০১৮৯০১-১১-২০১৫
১০২৯১০১-১১-২০১৫
১০৩৮০০১-১১-২০১৫
১০৪৭৫০২-১১-২০১৫
১০৫৭৭০২-১১-২০১৫

SQL RIGHT JOIN উদাহরণ

নিম্নের SQL স্টেটমেন্টটি সকল শিক্ষার্থীর তথ্য রিটার্ন করবে এবং যদি তাদের ভর্তির তারিখ দেওয়া থাকে তবে তাও রিটার্ন করবেঃ

উদাহরণ

SELECT Student_details.Roll_number, Student_details.Student_name, Student_attendance.Admission_date
FROM Student_attendance
RIGHT JOIN Student_details
ON Student_details.Roll_number=Student_attendance.Roll_number
ORDER BY Student_attendance.Admission_date;

 


 

বিঃদ্রঃ বাম টেবিলের মধ্যে সদৃশ(matched) কোনো কিছু খুঁজে না পেলেও RIGHT JOIN কীওয়ার্ড টি ডান টেবিলের সকল সারি রিটার্ন করবে।

উপরের উদাহরণটির ফলাফল নিম্নের ন্যায় দেখাবেঃ

রোল নাম্বারশিক্ষার্থীর নামভর্তির তারিখ
১০১তামজীদ হাসান০১-১১-২০১৫
১০২মিনহাজুর রহমান০১-১১-২০১৫
১০৩মোঃ সবুজ হোসেন০১-১১-২০১৫
১০৪ইয়াসিন হোসেন০২-১১-২০১৫
১০৫ফরহাদ উদ্দিন০২-১১-২০১৫
Content added By

FULL JOIN কীওয়ার্ডটি বাম(first_table) এবং ডান(second_table) উভয় টেবিলের সকল সারি রিটার্ন করে।

সুতরাং FULL JOIN কীওয়ার্ডটি LEFT JOIN এবং RIGHT JOIN এর ফলাফল গুলো একত্রিত করে। এক্ষেত্রে যদি কোনো ফলাফল না পায় তাহলে NULL ভ্যালু রিটার্ন করে।

SQL FULL JOIN সিনট্যাক্স

SELECT name_of_column's
FROM first_table
FULL JOIN second_table
ON first_table.name_of_column=second_table.name_of_column;

 


 

অথবাঃ

SELECT name_of_column's
FROM first_table
FULL OUTER JOIN second_table
ON first_table.name_of_column=second_table.name_of_column;

 


 

কিছু ডেটাবেজে FULL JOIN কে FULL OUTER JOIN বলা হয়ে থাকে।

SQL FULL OUTER JOIN


 

নমুনা ডেটাবেজ

FULL JOIN কীওয়ার্ডের ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।

নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

নিচের অংশটি "Student_attendance" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারউপস্থিতিভর্তির তারিখ
১০১৮৯০১-১১-২০১৫
১০২৯১০১-১১-২০১৫
১০৩৮০০১-১১-২০১৫
১০৪৭৫০২-১১-২০১৫
১০৫৭৭০২-১১-২০১৫

SQL FULL JOIN উদাহরণ

নিম্নের SQL স্টেটমেন্টটি সকল শিক্ষার্থীর তথ্য গুলো একত্রিত করবেঃ

SELECT Student_details.Roll_number, Student_details.Student_name, Student_attendance.Admission_date
FROM Student_details
FULL JOIN Student_attendance
ON Student_details.Roll_number=Student_attendance.Roll_number
ORDER BY Student_details.Student_name;

 

ফলাফলটি কিছুটা এমন দেখাবেঃ

রোল নাম্বারশিক্ষার্থীর নামভর্তির তারিখ
১০১তামজীদ হাসান০১-১১-২০১৫
১০২মিনহাজুর রহমান০১-১১-২০১৫
১০৩মোঃ সবুজ হোসেন০১-১১-২০১৫
১০৪ইয়াসিন হোসেন০১-১১-২০১৫
১০৫ফরহাদ উদ্দিন 

বিঃদ্রঃ FULL JOIN কীওয়ার্ডটি বাম টেবিল(first_table) এবং ডান টেবিলের(second_table) সকল সারি রিটার্ন করবে। এক্ষেত্রে কোনো সদৃশ সারি না থাকলেও উভয় টেবিলের সকল সারি রিটার্ন করবে।

Content added By

SQL UNION অপারেটরটি দুই বা ততোধিক SELECT স্টেটমেন্টের ফলাফল একত্রে প্রকাশ করতে পারে।


SQL UNION অপারেটর

SQL UNION অপারেটরটি কোন ডুপ্লিকেট সারি ফেরত দেওয়া ছাড়াই দুই বা ততোধিক SELECT স্টেটমেন্টের ফলাফল একত্রিত করে।

UNION অপারেটর ব্যবহারের পূর্বশর্তঃ

  • প্রতিটি SELECT স্টেটমেন্টে কলামের সংখ্যা অবশ্যই সমান থাকতে হবে।
  • কলাম-সমূহের ডেটা টাইপ একই হতে হবে।
  • SELECT স্টেটমেন্টের সকল কলাম-সমূহ একই ক্রমে(order) থাকতে হবে।

SQL UNION সিনট্যাক্স

SELECT name_of_column's FROM first_table
UNION
SELECT name_of_column's FROM second_table;

 

বিঃদ্রঃ UNION অপারেটরটি ডিফল্টভাবে একাধিক ভ্যালু শুধুমাত্র একবার সিলেক্ট করে। ডুপ্লিকেট(Duplicate) ভ্যালু পাওয়ার জন্য UNION এর সাথে ALL কিওয়ার্ড ব্যবহার করতে হবে।

SQL UNION ALL সিনট্যাক্স

SELECT name_of_column's FROM first_table
UNION ALL
SELECT name_of_column's FROM second_table;

 

UNION এ ব্যবহৃত প্রথম স্টেটমেন্টের কলামের নাম ফলাফল টেবিলের কলামের নাম এর সমান হয়। সুতরাং প্রথম স্টেটমেন্টের কলামের নাম-ই ফলাফল টেবিলের কলামের নাম হয়।


 

নমুনা ডেটাবেজ

UNION অপারেটরের ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।

নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ

আইডি নংরোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

নিচের অংশটি "Teacher_details" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারশিক্ষার্থীর নামঠিকানা
১০৪ইয়াসিন হোসেন 
১০৫ফরহাদ উদ্দিন 
১০৯ওয়াহিদুল ইসলাম 

SQL UNION উদাহরণ

নিম্নের SQL UNION স্টেটমেন্টটি "Student_details" এবং "Teacher_details" টেবিল থেকে সকল "ঠিকানা(Address)" কলামকে সিলেক্ট করবে এবং শুধুমাত্র স্বতন্ত্র(Distinct) ভ্যালুগুলো নিয়ে আসবেঃ

উদাহরণ

SELECT Address FROM Student_details
UNION
SELECT Address FROM Teacher_details
ORDER BY Address;

 

বিঃদ্রঃ UNION অপারেটরটি দ্বারা "ঠিকানা(Address)" কলামের সকল ডেটা পাওয়া যাবে না। যদি এক বা একাধিক "শিক্ষার্থী" অথবা "শিক্ষক" এর শহর একই হয় তাহলে শহরটি একবার-ই দেখাবে। অপরপক্ষে UNION ALL ব্যবহার করলে সব গুলো শহরই একত্রে দেখাবে অর্থাৎ ডুপ্লিকেট ভ্যালু-সমূহও দেখাবে।


SQL UNION ALL উদাহরণ

নিম্নের SQL UNION ALL স্টেটমেন্টটি "Student_details" এবং "Teacher_details" টেবিল থেকে সকল স্বতন্ত্র "ঠিকানা"-সহ ডুপ্লিকেট ঠিকানাও নিয়ে আসবেঃ

উদাহরণ

SELECT Address FROM Student_details
UNION ALL
SELECT Address FROM Teacher_details
ORDER BY Address;

 

উপরের উদাহরণটির ফলাফল নিম্নের ন্যায় দেখাবেঃ

আইডিঠিকানা
ঢাকা
রাজশাহী
চাঁদপুর
বরিশাল
সিলেট

SQL UNION ALL এর সাথে WHERE Clause এর ব্যবহার

নিম্নের SQL UNION ALL স্টেটমেন্টটি "Student_details" এবং "Teacher_details" টেবিল থেকে "ঢাকা" শহর বিশিষ্ট সকলের তথ্য(ডুপ্লিকেট ভ্যালুও) নিয়ে আসবেঃ

উদাহরণ

SELECT Student_name, Address FROM Student_details WHERE Address='ঢাকা'
UNION ALL
SELECT Teacher_name, Address FROM Teacher_details WHERE Address='ঢাকা'
ORDER BY Address;

 

উপরের উদাহরণটির ফলাফল নিম্নের ন্যায় দেখাবেঃ

আইডিনামঠিকানা
ওয়াহিদুল ইসলামঢাকা
মারুফ হোসেনঢাকা
ফারুক আলমঢাকা
মোঃ সাইফুল ইসলামঢাকা
নাদিমা আক্তারঢাকা
Content added By

NULL ভ্যালু দ্বারা যে সকল কলামে কোনো তথ্য থাকে না তাদেরকে বুঝায়। ডিফল্টভাবে একটি টেবিলের কলামে NULL ভ্যালু থাকতে পারে। এজন্য টেবিল তৈরির সময়েই কলামে NULL ভ্যালু ডিফাইন করে দিতে হবে।


SQL NULL ভ্যালু

একটি টেবিলের কোনো কলাম যদি ঐচ্ছিক(optional) হয় তাহলে আমরা ঐ কলামে কোনো ভ্যালু যোগ করা ছাড়াই নতুন রেকর্ড ইনসার্ট করতে অথবা পুরনো রেকর্ডকে আপডেট করতে পারি। এক্ষেত্রে ঐ ফিল্ডটি NULL ভ্যালু সংরক্ষন করবে।

অন্যান্য ভ্যালু হতে NULL ভ্যালুকে ভিন্নভাবে দেখা হয়। অজানা এবং প্রযোজ্যনহে এমন ভ্যালুর জন্য NULL ব্যবহার করা হয়।

বিঃদ্রঃ আপনি NULL এবং শূণ্য(0) এর মধ্যে তুলনা করতে পারবেন না কারণ তারা সমান এবং সমজাতীয় নয়।


SQL এ NULL ভ্যালুর ব্যবহার

নিচের "Student_details" টেবিলে লক্ষ্য করুনঃ

আইডি নংরোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

ধরুন "Student_details" টেবিলের "ঠিকানা(Address)" কলামটি ঐচ্ছিক। আমরা যদি "ঠিকানা(Address)" কলামে কোন ভ্যালু ছাড়াই একটি রেকর্ড তৈরি করি তাহলে "ঠিকানা(Address)" কলামের ভ্যালু NULL হবে।

আপনি NULL ভ্যালুকে কম্প্যারিজন(comparison) অপারেটর( =, <, <> ) এর মাধ্যমে যাচাই করতে পারবেন না।

বরং এর পরিবর্তে আপনি IS NULL এবং IS NOT NULL অপারেটর ব্যবহার করতে পারেন।


SQL IS NULL অপারেটর

আমরা "ঠিকানা(Address)" কলামের NULL ভ্যালুযুক্ত রেকর্ডকে IS NULL অপারেটর ব্যবহার করে সিলেক্ট করতে পারিঃ

SELECT Roll_number, Student_name, Address
FROM Student_details
WHERE Address IS NULL;

 


 

ফলাফলঃ

রোল নাম্বারশিক্ষার্থীর নামঠিকানা
১০৪ইয়াসিন হোসেন 
১০৫ফরহাদ উদ্দিন 
১০৯ওয়াহিদুল ইসলাম 

পরামর্শঃ NULL ভ্যালু খুঁজে বের করার জন্য সব সময় IS NULL অপারেটর ব্যবহার করুন।


SQL IS NOT NULL অপারেটর

"ঠিকানা(Address)" কলামে NULL ভ্যালু নেই এমন রেকর্ডকে সিলেক্ট করতে আমরা IS NOT NULL অপারেটর ব্যবহার করতে পারিঃ

SELECT Roll_number, Student_name, Address
FROM Student_details
WHERE Address IS NOT NULL;

 


 

ফলাফলঃ

রোল নাম্বারশিক্ষার্থীর নামঠিকানা
১০১তামজীদ হাসানচাঁদপুর
১০২মিনহাজুর রহমানচাঁদপুর
১০৩মোঃ সবুজ হোসেনচাঁদপুর

পরবর্তীতে আমরা ISNULL(), NVL(), IFNULL() এবং COALESCE() ফাংশন সম্পর্কে জানবো।

Content added By

SQL ISNULL(), NVL(), IFNULL() এবং COALESCE() ফাংশন

নিম্নের "Student_result" টেবিলটি লক্ষ্য করুনঃ

আইডি নংরোল নাম্বারলিখিত নাম্বারএমসিকিউ নাম্বারফলাফল
১০১৫১৩৬A+
১০২৫২৩৫A+
১০৩৫৪৩০A+
১০৪৫০৩১A+
১০৫৪৯৩৩A+

ধরুন "এমসিকিউ নাম্বার(Mcq_number)" কলামটি ঐচ্ছিক এবং ইহা Null ভ্যালু ধারণ করতে পারে।

নিম্নের উদাহরণটি লক্ষ করুনঃ

SELECT Roll_number, (Written_number+Mcq_number)
FROM Student_result;

 

উপরের উদাহরণে যদি "এমসিকিউ নাম্বার(Mcq_number)" কলামের ভ্যালু Null হয় তাহলে ফলাফলও Null হবে।

Null এর ভ্যালু নির্ধারণের জন্য মাইক্রোসফট ISNULL() ফাংশন ব্যবহার করে।

NVL(), IFNULL() এবং COALESCE() ফাংশন গুলোও একই কাজ করে।

Null ফাংশন ব্যবহারের উদ্দেশ্য হলো আমরা Null ভ্যালুর পরিবর্তে 0(শূন্য) পেতে চাই।

ISNULL() ফাংশন ব্যবহার করলে "এমসিকিউ নাম্বার(Mcq_number)" কলামের কোন মান Null হলেও হিসাব-নিকাশে কোন সমস্যা হবে না, কারন প্রতিটি Null ভ্যালুর জন্য ISNULL() ফাংশনটি একটি 0(শূন্য) রিটার্ন করবেঃ

MS Access এর জন্য

SELECT Roll_number, (Written_number+IIF(ISNULL(Mcq_number),0,Mcq_number))
FROM Student_result;

 


 

SQL Server এর জন্য

SELECT Roll_number, (Written_number+ISNULL(Mcq_number,0))
FROM Student_result;

 


 

ওরাকলে কোনো ISNULL() ফাংশন নেই। ওরাকলে আমরা ISNULL() এর পরিবর্তে NVL() ফাংশনটি ব্যবহার করবোঃ

Oracle এর জন্য

SELECT Roll_number, (Written_number+NVL(Mcq_number,0))
FROM Student_result;

 


 

MySQL এ ISNULL() ফাংশন আছে। তবুও ইহা মাইক্রোসফট ISNULL() ফাংশনের চেয়ে একটু ভিন্ন ভাবে কাজ করে।

MySQL এ আমরা IFNULL() ফাংশনটি ব্যবহার করবোঃ

MySQL এর জন্য

SELECT Roll_number, (Written_number+IFNULL(Mcq_number,0))
FROM Student_result;

 


 

অথবা আমরা COALESCE() ফাংশনটি ব্যবহার করতে পারিঃ

SELECT Roll_number, (Written_number+COALESCE(Mcq_number,0))
FROM Student_result;
Content added By

অস্থায়ীভাবে একটি টেবিল বা একটি কলামের নাম পরিবর্তন করতে SQL alias ব্যবহার করা হয়।

SQL Alias

SQL alias এর মাধ্যমে ডাটাবেজ টেবিল অথবা টেবিল কলামের জন্য একটি অস্থায়ী নাম দেওয়া হয়। Alias ব্যবহার করলে ডেটাবেজের মূল টেবিল বা কলামের নামের কোন পরিবর্তন হয় না।

সাধারনত কলামের নাম-সমূহকে অধিক পাঠযোগ্য করে তোলার জন্য alias তৈরি করা হয়।

কলামের জন্য SQL Alias সিনট্যাক্স

SELECT name_of_column AS name_of_alias
FROM name_of_table;

 


 

টেবিলের জন্য SQL Alias সিনট্যাক্স

SELECT name_of_column's
FROM name_of_table AS name_of_alias;

 


Alias কখন ব্যবহার করবেন?

  • যখন কুয়েরির মধ্যে এক বা একধিক টেবিল জড়িত থাকে।
  • যখন কুয়েরির মধ্যে ফাংশন ব্যবহার করা হয়।
  • যখন কলামের নাম বড় অথবা পাঠযোগ্য না হয়।
  • যখন এক বা একাধিক কলামের সন্নিবেশ ঘটানো হয়।

 

নমুনা ডেটাবেজ

AS কীওয়ার্ড এর ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।

নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

নিচের অংশটি "Student_attendance" টেবিল থেকে নেওয়া হয়েছেঃ

রোল নাম্বারউপস্থিতিভর্তির তারিখ
১০১৮৯%০১-১১-২০১৫
১০২৯১%০১-১১-২০১৫
১০৩৮০%০১-১১-২০১৫
১০৪৭৫%০২-১১-২০১৫
১০৫৭৭%০২-১১-২০১৫

 

কলামের জন্য Alias এর উদাহরণ

নিচের SQL স্টেটমেন্টটিতে আমরা দুইটি alias ব্যবহার করবো। একটি "Student_name" কলামের জন্য এবং অন্যটি "Address" কলামের জন্য।

বিঃদ্রঃ যদি কলাম নামে স্পেস থাকে তাহলে ডাবল উদ্ধৃতি("") অথবা স্কোয়ার ব্যাকেট ব্যবহার করতে হবেঃ

উদাহরণ

SELECT Student_name AS "শিক্ষার্থীর নাম", Address AS "ঠিকানা"
FROM Student_details;

 


 

ফলাফলঃ

শিক্ষার্থীর নামঠিকানা
তামজীদ হাসানচাঁদপুর
মিনহাজুর রহমানচাঁদপুর
মোঃ সবুজ হোসেনচাঁদপুর
ইয়াসিন হোসেনচাঁদপুর
ফরহাদ উদ্দিনচাঁদপুর

নিচের SQL স্টেটমেন্টটিতে আমরা Institute এবং Address কলাম দুটি একত্রিত করে "প্রতিষ্ঠানের ঠিকানা(Institute_address)" নামে একটি নতুন alias তৈরি করবোঃ

উদাহরণ

SELECT Student_name, Institute+', '+Address AS Institute_address
FROM Student_details;

 


 

ফলাফলঃ

শিক্ষার্থীর নামপ্রতিষ্ঠানের ঠিকানা
তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়, চাঁদপুর
মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়, চাঁদপুর
মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়, চাঁদপুর
ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়, চাঁদপুর
ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়, চাঁদপুর

বিঃদ্রঃ উপরের SQL স্টেটমেন্টটি MySQL এ ঠিকমত কাজ করানোর জন্য নিম্নের কোড অনুসরন করুনঃ

SELECT Student_name, CONCAT(Institute,', ',Address)
AS Institute_address
FROM Student_details;

 


 

টেবিলের জন্য Alias এর উদাহরণ

নিম্নের SQL স্টেটমেন্টটি "Student_details" এবং "Student_attendance" টেবিল থেকে "রোল নাম্বার, শিক্ষার্থির নাম" এবং "ভর্তির তারিখ" কলামের রেকর্ড সিলেক্ট করেবে । কিন্তু শুধুমাত্র "শিক্ষার্থির নাম(Student_name)" কলামের "তামজীদ হাসান" এর রেকর্ড গুলো দেখাবেঃ

 

উদাহরণ

SELECT Sd.Roll_number, Sd.Student_name, Sa.Admission_date
FROM Student_details AS Sd, Student_attendance AS Sa
WHERE Sd.Student_name = "তামজীদ হাসান" AND Sd.Roll_number=Sa.Roll_number;

 


 

ফলাফলঃ

রোল নাম্বারশিক্ষার্থীর নামভর্তির তারিখ
১০১তামজীদ হাসান০১-১১-২০১৫


 

alias ব্যতিত একই SQL স্টেটমেন্টঃ

উদাহরণ

SELECT Student_details.Roll_number, Student_details.Student_name, Student_attendance.Admission_date
FROM Student_details, Student_attendance
WHERE Student_details.Student_name = "তামজীদ হাসান" AND Student_details.Roll_number=Student_attendance.Roll_number;

 

ফলাফলঃ

রোল নাম্বারশিক্ষার্থীর নামভর্তির তারিখ
১০১তামজীদ হাসান০১-১১-২০১৫
Content added By

CREATE INDEX স্টেটমেন্ট ব্যবহার করে টেবিলের মধ্যে ইনডেক্স তৈরি করা হয়। একটি টেবিলের সম্পূর্ন তথ্য না পড়েই, ইনডেক্সের সাহায্য ডাটাবেজ থেকে দ্রুত তথ্য খুঁজে পাওয়া যায়।


ইনডেক্স(INDEX)

একটি ডাটাবেজ টেবিল থেকে দ্রুত এবং দক্ষতার সাথে তথ্য খুঁজে বের করার জন্য ইনডেক্স তৈরি করা হয়। ইউজাররা ইনডেক্স দেখতে পায় না, এগুলো শুধুমাত্র দ্রুত তথ্য কুয়েরি/খুঁজে বের করার জন্য ব্যবহার করা হয়।

বিঃদ্রঃ সাধারন টেবিলের তথ্য আপডেট করতে যে সময় লাগে ইনডেক্স যুক্ত টেবিলের তথ্য আপডেট করতে তার চেয়ে বেশী সময় লাগে। সুতরাং সচারচর সার্স করতে হবে এমন কলামের জন্য ইনডেক্স তৈরি করুন।

SQL CREATE INDEX সিনট্যাক্স

CREATE INDEX name_of_index
ON name_of_table (name_of_column);

 

ইনডেক্স টেবিলে ডুপ্লিকেট ভ্যালু গ্রহণযোগ্য।

 

SQL CREATE UNIQUE INDEX সিনট্যাক্স

CREATE UNIQUE INDEX name_of_index
ON name_of_table (name_of_column);

 

ইউনিক ইনডেক্স টেবিলে ডুপ্লিকেট ভ্যালু গ্রহণযোগ্য নহে।

 

বিঃদ্রঃ ইনডেক্স তৈরির সিনট্যাক্স বিভিন্ন ডেটাবেজে বিভিন্ন রকম হয়। সুতরাং ইনডেক্স তৈরির পূর্বে আপনার ডেটাবেজের জন্য ইনডেক্স তৈরির সিনট্যাক্সটি দেখে নিন।


 

নমুনা ডেটাবেজ

CREATE INDEX স্টেটমেন্টের ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।

নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ

আইডি নংরোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর


 

CREATE INDEX এর উদাহরণ

নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিলের "শিক্ষার্থীর নাম(Student_name)" কলামে "Sn_Index" নামে একটি ইনডেক্স তৈরি করবেঃ

CREATE INDEX Sn_Index
ON Student_details (Student_name);

 

আপনি যদি দুইটি কলামের জন্য একটি ইনডেক্স তৈরি করতে চান তাহলে নিম্নের SQL স্টেটমেন্টটি দেখুনঃ

CREATE INDEX Sa_Index
ON Student_details (Institute, Address);
Content added By

VIEW হল একটি ভার্চুয়াল টেবিল। এই অধ্যায়ে আমরা একটি VIEW তৈরী, আপডেট এবং ডিলেট করা শিখবো।


SQL CREATE VIEW স্টেটমেন্ট

SQL এ VIEW একটি ভার্চুয়াল টেবিল যা SQL স্টেটমেন্টের রেজাল্ট-সেট এর উপর ভিত্তিকরে গঠিত হয়।

একটি বাস্তব টেবিলের ন্যায় VIEW টেবিলেও কলাম এবং সারি থাকে। ডেটাবেজের অন্তর্ভূক্ত এক বা একধিক টেবিলের কলাম VIEW টেবিলের কলাম হয়।

তথ্য দেখা এবং প্রদর্শনীর জন্য আপনি VIEW টেবিলে SQL ফাংশন, WHERE এবং JOIN স্টেটমেন্ট ব্যবহার করতে পাবেন।

SQL CREATE VIEW সিনট্যাক্স

CREATE VIEW name_of_view AS
SELECT name_of_column's
FROM name_of_table
WHERE condition;

 

বিঃদ্রঃ VIEW সর্বদাই আপনাকে আপডেট তথ্য দেখাবে! যখন কোনো ইউজার VIEW কুয়েরি করে তখন ডাটাবেজ ইঞ্জিন SQL VIEW স্টেটমেন্ট ব্যবহার করে পুনরায় তথ্য তৈরি করে।


SQL CREATE VIEW স্টেটমেন্টের উদাহরণ

আপনি যদি আমাদের নমুনা ডেটাবেজটি দেখে থাকেন তাহলে নিশ্চয়ই দেখবেন যে, ডিফল্ট ভাবে ইহার বিভিন্ন ধরনের ভিউ আছে।

আমরা "Student_details" টেবিল থেকে "বর্তমান শিক্ষার্থীর তালিকা(Current Student List)" এর জন্য একটি VIEW তৈরী করবো। যেখানে বর্তমানে প্রাপ্ত সকল শিক্ষার্থীর তথ্য থাকবে। এর জন্য নিম্নের SQL স্টেটমেন্টটি ব্যবহার করুনঃ

CREATE VIEW [Current Student List] AS
SELECT Roll_number, Student_name
FROM Student_details
WHERE Discontinued=No;

 


 

উপরের VIEW কে আমরা নিম্নের ন্যায়ও কুয়েরি করতে পারিঃ

SELECT * FROM [Current Student List]

 


 

নিম্নের SQl স্টেটমেন্ট ব্যবহার করে অন্য একটি VIEW এ আমরা আমাদের নমুনা ডেটাবেজের "Student_details" টেবিলের সকল শিক্ষার্থীকে তাদের রোল নাম্বারের ক্রমানুসারে দেখাবোঃ

CREATE VIEW [Student Serialized by Roll] AS
SELECT Roll_number, Student_name
FROM Student_details
WHERE Roll_number>(SELECT AVG(Roll_number) FROM Student_details);

 


 

উপরের VIEW কে আমরা নিম্নের ন্যায়ও কুয়েরি করতে পারিঃ

SELECT * FROM [Student Serialized by Roll]

 


 

আমাদের নমুনা ডেটাবেজের অন্য একটি VIEW -এ আমরা দেখবো "Student_details" টেবিলের সকল শিক্ষার্থীদের মধ্যে কারা ২০১৫ সালে ভর্তি হয়েছিল। এই VIEW এ যে তথ্যগুলো দেখানো হয়েছে তা অন্য একটি VIEW "Student Details 2015" থেকে নেওয়া হয়েছেঃ

CREATE VIEW [Admitted Student 2015] AS
SELECT Roll_number, Student_name
FROM [Student Details 2015]
Group BY Student_name;

 


 

উপরের VIEW কে আমরা নিম্নের ন্যায়ও কুয়েরি করতে পার

SELECT * FROM [Student Details 2015]

 


 

কুয়েরিতে আমরা শর্তও যোগ করতে পারিঃ

SELECT * FROM [Student Details 2015]
WHERE Student_name='তামজীদ হাসান'

 


SQL VIEW আপডেট

নিম্নবর্তী সিনট্যাক্সটি ব্যবহার করে VIEW আপডেট করতে পারিঃ

SQL CREATE অথবা REPLACE VIEW সিনট্যাক্স

CREATE OR REPLACE VIEW name_of_view AS
SELECT name_of_column's
FROM name_of_table
WHERE condition

 

এখন আমরা "বর্তমান শিক্ষার্থীর তালিকায়(Current Student List)" "জন্মদিন(Birthday)" কলামটি যোগ করবো। আমরা নিম্নবর্তী সিনট্যাক্স দ্বারা VIEW আপডেট করবোঃ

CREATE OR REPLACE VIEW [Current Student List] AS
SELECT Roll_number, Student_name, Birthday
FROM Student_details
WHERE Discontinued=No;

 


SQL ডিলেট VIEW

আপনি DROP VIEW কমান্ডের মাধ্যমে একটি VIEW ডিলেট করতে পারেন।

SQL DROP VIEW সিনট্যাক্স

DROP VIEW name_of_view
Content added By

SQL HAVING Clause

Aggregate ফাংশন এর সাথে WHERE কিওয়ার্ড ব্যবহার করা যেত না বলে SQL এ HAVING clause যোগ করা হয়েছিল।

SQL HAVING সিনট্যাক্স

SELECT name_of_column, aggregate_function(name_of_column)
FROM name_OF_table
WHERE name_of_column operator value
GROUP BY name_of_column
HAVING aggregate_function(name_of_column) operator value;

 


 

নমুনা ডেটাবেজ

HAVING Clause এর ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।

নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ

আইডি নংরোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

নিচের অংশটি "Student_attendance" টেবিল থেকে নেওয়াঃ

আইডি নংরোল নাম্বারউপস্থিতিভর্তির তারিখ
১০১৮৯০১-১১-২০১৫
১০২৯১০১-১১-২০১৫
১০৩৮০০১-১১-২০১৫
১০৪৭৫০২-১১-২০১৫
১০৫৭৭০২-১১-২০১৫

SQL HAVING Clause এর উদাহরণ

নিচের SQL স্টেটমেন্টটি যে সকল শিক্ষার্থী ৭৫ শতাংশ উপস্থিত ছিল তাদেরকে সিলেক্ট করবে।

উদাহরণ

SELECT Student_details.Student_name, Student_attendance.Roll_number, COUNT(Student_attendance.Attendance) AS Attendance
FROM (Student_attendance
INNER JOIN Student_details
ON Student_attendance.Roll_number=Student_details.Roll_number)
GROUP BY Student_name
HAVING COUNT(Student_attendance.Attendance) > 75;

 


 

ফলাফল

রোল নাম্বারশিক্ষার্থীর নামশতকরা উপস্থিতি
১০১তামজীদ হাসান৮৯%
১০২মিনহাজুর রহমান৯১%
১০৩মোঃ সবুজ হোসেন৮০%
১০৪ইয়াসিন হোসেন৮৭%
১০৫ফরহাদ উদ্দিন৮৫%

এখন আমরা খুজে বের করবো, শিক্ষার্থী "তামজীদ হসান" অথবা "মিনহাজুর রহমান" শতকরা ৯০ শতাংশ উপস্থিত ছিল কি না।

উদাহরণ

SELECT Student_details.Student_name, Student_attendance.Roll_number, COUNT(Student_attendance.Attendance) AS Attendance
FROM (Student_attendance
INNER JOIN Student_details
ON Student_attendance.Roll_number=Student_details.Roll_number)
WHERE Student_name="তামজীদ হসান" OR Student_name="মিনহাজুর রহমান"
GROUP BY Student_name
HAVING COUNT(Student_attendance.Attendance) > 90;

 


 

ফলাফল

রোল নাম্বারশিক্ষার্থীর নামশতকরা উপস্থিতি
১০২মিনহাজুর রহমান৯১%
Content added By

একটি স্ট্রিং এর মধ্যে যেকোন ক্যারেক্টার এর বিকল্প হিসাবে ওয়াইল্ডকার্ড(wildcard) ক্যারেক্টার ব্যবহার করা হয়।


SQL ওয়াইল্ডকার্ড ক্যারেক্টার

SQL এ LIKE অপারেটরের সাথে ওয়াইল্ডকার্ড ক্যারেক্টার ব্যবহার করা হয়। SQL ওয়াইল্ডকার্ড ব্যবহার করে টেবিলের মধ্য থেকে ডেটা সার্চ করা হয়।

নিম্নে SQL ওয়াইল্ডকার্ড গুলো বর্ণনা করা হলঃ

ওয়াইল্ডকার্ডবর্ণনা
%শূন্য বা অধিক ক্যারেক্টার খুঁজে করে।
_একটি একক ক্যারেক্টার খুঁজে বের করে।
[charlist]এক সেট অথবা নির্দিষ্ট ব্যবধী হতে ক্যারেক্টার খুঁজে বের করে।
[^charlist] অথবা [!charlist]বন্ধনীতে উল্লেখিত ক্যারেক্টার ব্যতিত বাকি সকল ক্যারেক্টার খুঁজে বের করে।

নমুনা ডেটাবেজ

ওয়াইল্ডকার্ড এর ব্যবহার দেখানোর জন্য আমরা আমাদের নমুনা ডেটাবেজ Student ব্যবহার করবো।

নিচের অংশটি "Student_details" টেবিল থেকে নেওয়া হয়েছেঃ

আইডি নংরোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

SQL % ওয়াইল্ডকার্ডের ব্যবহার

নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল থেকে সকল তথ্য সিলেক্ট করবে, কিন্তু "ঠিকানা(Address)" কলামে অবস্থিত যে সকল শব্দ "ঢা" দিয়ে শুরু হয়েছে শুধুমাত্র তাদের দেখাবেঃ

উদাহরণ

SELECT * FROM Student_details
WHERE Address LIKE 'ঢা%';

 


 

ফলাফলঃ

আইডি নংরোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০৯ওয়াহিদুল ইসলামজাতীয় বিশ্ববিদ্যালয়ঢাকা
১১১১১সৌরভ বনিকজাতীয় বিশ্ববিদ্যালয়ঢাকা
১৬১১৬মারুফ হোসেনজাতীয় বিশ্ববিদ্যালয়ঢাকা
২০১২০দেলোয়ার হোসেনজাতীয় বিশ্ববিদ্যালয়ঢাকা
২২১২২ফারুক আলমজাতীয় বিশ্ববিদ্যালয়ঢাকা

নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল থেকে সকল তথ্য সিলেক্ট করবে, কিন্তু "ঠিকানা(Address)" কলামে অবস্থিত যে সকল শব্দে "দপু" প্যাটার্ন থাকবে শুধুমাত্র তাদের দেখাবেঃ

উদাহরণ

SELECT * FROM Student_details
WHERE Address LIKE '%দপু%';

 


 

ফলাফলঃ

আইডি নংরোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০১তামজীদ হাসানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০২মিনহাজুর রহমানজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৩মোঃ সবুজ হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৪ইয়াসিন হোসেনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর
১০৫ফরহাদ উদ্দিনজাতীয় বিশ্ববিদ্যালয়চাঁদপুর

SQL _ ওয়াইল্ডকার্ডের ব্যবহার

নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল থেকে সকল তথ্য সিলেক্ট করবে, কিন্তু "ঠিকানা(Address)" কলামে অবস্থিত যে সকল শব্দ যেকোন অক্ষর দিয়ে শুরু হবে এবং এর পরে "জশাহী" প্যাটার্ন থাকবে শুধুমাত্র তাদের দেখাবেঃ

উদাহরণ

SELECT * FROM Student_details
WHERE Address LIKE '_ _জশাহী';

 


 

"ঠিকানা(Address)" কলামে অবস্থিত যে সকল শব্দ যেকোন অক্ষর দিয়ে শুরু হবে এর পরে "া" এবং এর পরে যেকোনো সংখ্যা এবং এর পরে "শাহী" প্যাটার্ন থাকবে শুধুমাত্র তাদের দেখাবেঃ

SELECT * FROM Student_details
WHERE Address LIKE '_ া _শাহী';

 


 

ফলাফলঃ

আইডি নংরোল নাম্বারশিক্ষার্থীর নামপ্রতিষ্ঠানের নামঠিকানা
১০৭মোঃ ফয়সাল ইসলামজাতীয় বিশ্ববিদ্যালয়রাজশাহী
১৪১১৪ওমর ফারুকজাতীয় বিশ্ববিদ্যালয়রাজশাহী
১৯১১৯মোঃ মমিন হোসেনজাতীয় বিশ্ববিদ্যালয়রাজশাহী
৩০১৩০হেদায়েত উল্লাহজাতীয় বিশ্ববিদ্যালয়রাজশাহী

SQL [charlist] ওয়াইল্ডকার্ডের ব্যবহার

নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল থেকে সকল তথ্য সিলেক্ট করেবে, কিন্তু "ঠিকানা(Address)" কলামে অবস্থিত শব্দ গুলোর মধ্যে যাদের প্রথম অক্ষর "ঢ" অথবা "র" দিয়ে শুরু হয়ছেে শুধুমাত্র তাদের দেখাবেঃ

উদাহরণ

SELECT * FROM Student_details
WHERE Address LIKE '[ঢর]%';

 


 

নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল থেকে সকল তথ্য সিলেক্ট করবে, কিন্তু "ঠিকানা(Address)" কলামে অবস্থিত শব্দগুলোর মধ্যে যাদের প্রথম অক্ষর "ক" থেকে "চ" এর মধ্যে যেকোন একটি দিয়ে শুরু হয়েছে শুধুমাত্র তাদের দেখাবেঃ

উদাহরণ

SELECT * FROM Student_details
WHERE Address LIKE '[ক-চ]%';

 


 

নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল থেকে সকল তথ্য সিলেক্ট করবে, কিন্তু "ঠিকানা(Address)" কলামে অবস্থিত শব্দ গুলোর মধ্যে যাদের প্রথম অক্ষর "ঢ" অথবা "র" দিয়ে শুরু হয়েছে শুধুমাত্র তাদের দেখাবে নাঃ

উদাহরণ

SELECT * FROM Student_details
WHERE Address LIKE '[!ঢর]%';

 


অথবা

উদাহরণ

SELECT * FROM Student_details
WHERE Address NOT LIKE '[ঢর]%';

 

বিঃদ্রঃ উপরের সকল উদাহণের ক্ষেত্রে বাংলা ক্যারেক্টার সঠিকভাবে কাজ নাও করতে পারে।

Content added By

তারিখ নিয়ে কাজ করার সময় সবচেয়ে গুরত্বপূর্ণ কাজ হলো আপনি তারিখের যে ফরম্যাট নির্বাচন করেছেন তা যেন আপনার ডেটাবেজ কলামের date ফরম্যাটের সাথে মিলে। এটা নাহলে আপনি ডেটাবেজে সঠিক ভাবে date ইনপুট করতে পারবেন না।

আপনার date কলামে শুধুমাত্র তারিখ থাকলে কুয়েরি করতে অনেক সহজ হবে। কিন্তু যদি আপনার date কলামে তারিখের পাশাপাশি সময়ও থাকে তাহলে কুয়েরি করা একটু কঠিন হয়ে উঠে।

নিম্নে MySQL এবং SQL Server এর কিছু গুরুত্বপূর্ণ বিল্ট-ইন date ফাংশন এবং তাদের ব্যবহার বর্ণনা করা হলোঃ


MySQL Date ফাংশন

নিম্নের তালিকায় MySQL এর কয়েকটি গুরুত্বপূর্ণ বিল্ট-ইন ফাংশন দেওয়া হলঃ

ফাংশনবর্ণনা
NOW()বর্তমান date এবং time রিটার্ন করবে।
CURDATE()বর্তমান date রিটার্ন করবে।
CURTIME()বর্তমান time রিটার্ন করবে।
DATE()date অথবা date/time এক্সপ্রেশন থেকে শুধুমাত্র date অংশটি নিবে।
EXTRACT()date অথবা time যেকোন একটি অংশ রিটার্ন করবে।
DATE_ADD()date এ একটি নির্দিষ্ট সময় ব্যবধান যোগ করবে।
DATE_SUB()date থেকে একটি নির্দিষ্ট সময় ব্যবধান বিয়োগ করবে।
DATEDIFF()দুইটি date এর পার্থক্য রিটার্ন করবে।
DATE_FORMAT()date অথবা time কে দেখানোর জন্য বিভিন্ন ফরম্যাট নির্ধারন করবে।

SQL Server Date ফাংশন

নিম্নের লিস্টে SQL Server এর কয়েকটি গুরুত্বপূর্ণ বিল্ট-ইন ফাংশন দেওয়া হলঃ

ফাংশনবর্ণনা
GETDATE()বর্তমান date এবং time রিটার্ন করবে।
DATEPART()date অথবা time যেকোন একটি অংশ রিটার্ন করবে।
DATEADD()date থেকে একটি নির্দিষ্ট সময় ব্যবধান যোগ/বিয়োগ করবে।
DATEDIFF()দুইটি date এর পার্থক্য রিটার্ন করবে।
CONVERT()date অথবা time কে দেখানোর জন্য বিভিন্ন ফরম্যাট নির্ধারন করবে।

SQL Date টাইপ

MySQL ডেটাবেজে date অথবা date/time এর সিনট্যাক্সঃ

  • DATE - ফরম্যাটঃ YYYY-MM-DD
  • DATETIME - ফরম্যাটঃ YYYY-MM-DD HH:MI:SS
  • DATETIME - ফরম্যাটঃ YYYY-MM-DD HH:MI:SS
  • YEAR - ফরম্যাটঃ YYYY অথবা YY

SQL Server ডেটাবেজে date অথবা date/time এর সিনট্যাক্সঃ

  • DATE - ফরম্যাটঃ YYYY-MM-DD
  • DATETIME - ফরম্যাটঃ YYYY-MM-DD HH:MI:SS
  • SMALLDATETIME - ফরম্যাটঃ YYYY-MM-DD HH:MI:SS
  • DATETIME - ফরম্যাটঃ একটি ইউনিক নাম্বার

বিঃদ্রঃ ডাটবেজে নতুন টেবিল তৈরি করার সময় আপনি কলাম এর জন্য date এর টাইপ নির্ধারণ করে দিতে পারবেন!


SQL Date ফাংশন এর ব্যবহার

তারিখের সাথে অন্য কোন উপাদান জড়িত না থাকলে আপনি খুব সহজেই দুইটি তারিখের মধ্যে তুলনা করতে পারেন।

নিম্নলিখিত "Student_attendance" টেবিলটি দেখুনঃ

আইডি নংরোল নাম্বারউপস্থিতিভর্তির তারিখ
১০১৮৯০১-১১-২০১৫
১০২৯১০১-১১-২০১৫
১০৩৮০০১-১১-২০১৫
১০৪৭৫০২-১১-২০১৫
১০৫৭৭০২-১১-২০১৫

এখন আমরা "ভর্তির তারিখ(Admission_date)" কলাম থেকে "০১-১১-২০১৫" তারিখের রেকর্ড-সমূহ সিলেক্ট করবো।

উদাহরণ

SELECT * FROM Student_attendance
WHERE Admission_date='০১-১১-২০১৫';

 


 

ফলাফলঃ

আইডি নংরোল নাম্বারউপস্থিতিভর্তির তারিখ
১০১৮৯০১-১১-২০১৫
১০২৯১০১-১১-২০১৫
১০৩৮০০১-১১-২০১৫

এখন আমরা "Student_attendance" টেবিলের "ভর্তির তারিখ(Admission_date)" কলামে তারিখের সাথে সময়ও যুক্ত করবো।

ধরুন, এখন আমাদের "Student_attendance" টেবিলটি নিম্নের মত দেখাবেঃ

আইডি নংরোল নাম্বারউপস্থিতিভর্তির তারিখ
১০১৮৯০১-১১-২০১৫ ১১:৩০:২০
১০২৯১০১-১১-২০১৫ ১১:৩২:১০
১০৩৮০০১-১১-২০১৫ ১১:৪০:৪৫

এখন আমরা যদি উপরের মত একই SELECT স্টেটমেন্ট ব্যবহার করি তাহলে আমরা কোন ফলাফল পাবো না! কারন এই কুয়েরিটি শুধুমাত্র date কে সিলেক্ট করবে।

বিঃদ্রঃ আপনি যদি আপনার কুয়েরিকে সহজ রাখতে চান তাহলে date কলামে time কে ভিন্ন কলামে যোগ করুন।

Content added By

একটি কলাম কোন ধরনের ভ্যালু ধারণ করবে তা ডেটা টাইপের মাধ্যমে ডিফাইন করা হয়।


SQL ডেটা টাইপ

ডেটাবেজ টেবিলের প্রতিটি কলামের জন্য একটি নাম এবং ডেটা টাইপ বাধ্যতামূলক।

টেবিল তৈরির সময়ে SQL ডেভেলপারদেরকে সিদ্ধান্ত নিতে হয় যে, প্রতিটি টেবিলের কলামে কোন টাইপের ডেটা সংরক্ষিত হবে। প্রতিটি কলামে কোন ধরনের ডেটা থাকবে তা ডেটা টাইপের মাধ্যমে SQL কে বুঝিয়ে দেওয়া হয় এবং এর মাধ্যমে SQL তার সংরক্ষিত ডেটা নিয়ে কিভাবে কাজ করবে তা বুঝতে পারে।

নিচের টেবিলে SQL এর সাধারণ ডেটা টাইপের একটি তালিকা দেওয়া হলঃ

ডেটা টাইপবর্ণনা
CHARACTER(n)ক্যারেক্টার স্ট্রিং। n দ্বারা ক্যারেক্টার এর নির্দিষ্ট দৈর্ঘ্য নির্ধারণ করা হয়।
VARCHAR(n) অথবা CHARACTER VARYING(n)ক্যারেক্টার স্ট্রিং। n দ্বারা ভ্যারিয়েবলের সর্বোচ্চ দৈর্ঘ্য নির্ধারণ করা হয়।
BINARY(n)বাইনারী স্ট্রিং। n দ্বারা এর নির্দিষ্ট দৈর্ঘ্য নির্ধারণ করা হয়।
BOOLEANএর দ্বারা TRUE অথবা FALSE ভ্যালু সংরক্ষন করা হয়।
VARBINARY(n) অথবা BINARY VARYING(n)বাইনারী স্ট্রিং। n দ্বারা ভ্যারিয়েবলের সর্বোচ্চ দৈর্ঘ্য নির্ধারণ করা হয়।
INTEGER(p)নিউমেরিক ইন্টেজার(দশমিক নয়)। সর্বোচ্চ p সংখ্যা পর্যন্ত নির্ভুলভাবে দেখাবে।
SMALLINTনিউমেরিক ইন্টেজার(দশমিক নয়)। সর্বোচ্চ সংখ্যা পর্যন্ত নির্ভুলভাবে দেখাবে।
INTEGERনিউমেরিক ইন্টেজার(দশমিক নয়)। সর্বোচ্চ ১০ সংখ্যা পর্যন্ত নির্ভুলভাবে দেখাবে।
BIGINTনিউমেরিক ইন্টেজার(দশমিক নয়)। সর্বোচ্চ ১৯ সংখ্যা পর্যন্ত নির্ভুলভাবে দেখাবে।
DECIMAL(p,s)সুনির্দিষ্ট সংখ্যা, নির্ভুলভাবে p পর্যন্ত দেখাবে, স্কেল s । উদাহরনঃ decimal(5,2) একটি সংখ্যা যার দশমিকের পূর্বে টি ডিজিট থাকবে এবং দশমিকের পরে ২টি ডিজিট থাকবে।
NUMERIC(p,s)সুনির্দিষ্ট সংখ্যা, নির্ভুলভাবে p পর্যন্ত দেখাবে, স্কেল s । (DECIMAL এর মতই)
FLOAT(p)সম্ভাব্য সংখ্যা, আংশিক নির্ভুলভাবে p পর্যন্ত দেখাবে। এই টাইপের জন্য সাইজ আর্গুমেন্টটি একটি সংখ্যা দ্বারা নির্ভুলতা সর্বনিম্ন কত সংখ্যা পর্যন্ত হবে তা নির্দেশ করে।
REALসম্ভাব্য সংখ্যা, পর্যন্ত আংশিক নির্ভুলভাবে প্রদর্শন করবে।/td>
FLOATসম্ভাব্য সংখ্যা, ১৬ পর্যন্ত আংশিক নির্ভুলভাবে প্রদর্শন করবে।
DOUBLE PRECISIONসম্ভাব্য সংখ্যা, ১৬ পর্যন্ত আংশিক নির্ভুলভাবে প্রদর্শন করবে।
DATEবছর, মাস এবং দিনের ভ্যালু সংরক্ষন করে
TIMEঘন্টা, মিনিট এবং সেকেন্ডের ভ্যালু সংরক্ষন করে
TIMESTAMPবছর, মাস, দিন, ঘন্টা, মিনিট এবং সেকেন্ডের ভ্যালু সংরক্ষন করে
INTERVALএকাধিক ইন্টেজার ফিল্ড এর সংমিশ্রণ যা ব্যবধির উপর ভিত্তিকরে একটি সময়কাল নির্ধারণ করে।
ARRAYসেট এর দৈর্ঘ্য এবং ক্রমিকভাবে(ordered) তথ্য সংগ্রহকে বুঝায়set-length এবং ordered কালেকশন
MULTISETভ্যারিয়েবলের দৈর্ঘ্য এবং এলোমেলোভাবে(unorderd) তথ্য সংগ্রহকে বুঝায়
XMLএক্সএমএল ডেটা সংরক্ষন করে
Content added By