SQL কনস্ট্রেইন্ট
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;
SQL Join
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;
উপরের উদাহরণটির ফলাফল নিম্নের ন্যায় দেখাবেঃ
রোল নাম্বার | শিক্ষার্থীর নাম | ভর্তির তারিখ |
---|---|---|
১০১ | তামজীদ হাসান | ০১-১১-২০১৫ |
১০২ | মিনহাজুর রহমান | ০১-১১-২০১৫ |
১০৩ | মোঃ সবুজ হোসেন | ০১-১১-২০১৫ |
১০৪ | ইয়াসিন হোসেন | ০২-১১-২০১৫ |
১০৫ | ফরহাদ উদ্দিন | ০২-১১-২০১৫ |
SQL INNER JOIN কীওয়ার্ড
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
একই অর্থে ব্যবহৃত হয়।
নমুনা ডেটাবেজ
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
শুধুমাত্র ঐ সকল সারি গুলোকে একত্রিত করে ফলাফল দেখাবে।
উপরের উদাহরণটির ফলাফল নিম্নের ন্যায় দেখাবেঃ
রোল নাম্বার | শিক্ষার্থীর নাম | ভর্তির তারিখ |
---|---|---|
১০১ | তামজীদ হাসান | ০১-১১-২০১৫ |
১০২ | মিনহাজুর রহমান | ০১-১১-২০১৫ |
১০৩ | মোঃ সবুজ হোসেন | ০১-১১-২০১৫ |
১০৪ | ইয়াসিন হোসেন | ০২-১১-২০১৫ |
১০৫ | ফরহাদ উদ্দিন | ০২-১১-২০১৫ |
SQL LEFT JOIN কীওয়ার্ড
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
বলা হয়ে থাকে।
নমুনা ডেটাবেজ
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 |
SQL RIGHT JOIN কীওয়ার্ড
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
বলা হয়ে থাকে।
নমুনা ডেটাবেজ
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
কীওয়ার্ড টি ডান টেবিলের সকল সারি রিটার্ন করবে।
উপরের উদাহরণটির ফলাফল নিম্নের ন্যায় দেখাবেঃ
রোল নাম্বার | শিক্ষার্থীর নাম | ভর্তির তারিখ |
---|---|---|
১০১ | তামজীদ হাসান | ০১-১১-২০১৫ |
১০২ | মিনহাজুর রহমান | ০১-১১-২০১৫ |
১০৩ | মোঃ সবুজ হোসেন | ০১-১১-২০১৫ |
১০৪ | ইয়াসিন হোসেন | ০২-১১-২০১৫ |
১০৫ | ফরহাদ উদ্দিন | ০২-১১-২০১৫ |
SQL FULL JOIN কীওয়ার্ড
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
বলা হয়ে থাকে।
নমুনা ডেটাবেজ
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) সকল সারি রিটার্ন করবে। এক্ষেত্রে কোনো সদৃশ সারি না থাকলেও উভয় টেবিলের সকল সারি রিটার্ন করবে।