এসকিউএল-৪ [INSERT INTO...SELECT, NOT NULL কনস্ট্রেইন্ট, UNIQUE কনস্ট্রেইন্ট, Default কনস্ট্রেইন্ট, CHECK কনস্ট্রেইন্ট] - SMH Amiri

সর্বশেষ লিখাসমূহ

এসকিউএল-৪ [INSERT INTO...SELECT, NOT NULL কনস্ট্রেইন্ট, UNIQUE কনস্ট্রেইন্ট, Default কনস্ট্রেইন্ট, CHECK কনস্ট্রেইন্ট]



SQL INSERT INTO ... SELECT স্টেটমেন্ট

SQL INSERT INTO ... SELECT স্টেটমেন্টটি এক টেবিল থেকে তথ্য কপি করে পূর্ব থেকে বিদ্যমান অন্য একটি টেবিলে জমা রাখে। এক্ষেত্রে টার্গেট টেবিলে বিদ্যমান কোনো সারি প্রভাবিত হবে না।

SQL INSERT INTO ... SELECT সিনট্যাক্স

আপনি একটি টেবিলের সকল কলামকে কপি করে পূর্ব থেকে বিদ্যমান একটি টেবিলের মধ্যে রাখতে পারেনঃ

INSERT INTO data_table
SELECT * FROM target_table;

অথবা আপনি আপনার ইচ্ছামত কলাম কপি করে পূর্ব থেকে বিদ্যমান টেবিলে রাখতে পারেনঃ

INSERT INTO data_table
(name_of_column)
SELECT name_of_column
FROM target_table;

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

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

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

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


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

আইডি নংশিক্ষকের নামঠিকানা
মোঃ সাইফুল ইসলামঢাকা
ডঃ নিতাই কুমার শাহারাজশাহী
মোঃ আবুল কালাম আজাদচাঁদপুর
রূপক রায়চাঁদপুর
নাদিমা আক্তারঢাকা

SQL INSERT INTO ... SELECT উদাহরণ

"Teacher_details" টেবিল থেকে কিছু কলামের তথ্য কপি করে "Student_details" টেবিলে রাখিঃ

উদাহরণ

INSERT INTO Student_details (Student_name, Address)
SELECT Teacher_name, Address FROM Teacher_details;

শুধুমাত্র "ঢাকা" ঠিকানার(Address) অন্তর্ভুক্ত শিক্ষকের তথ্য কপি করে "Student_details" টেবিলে রাখিঃ

উদাহরণ

INSERT INTO Student_details (Student_name, Address)
SELECT Teacher_name, Address FROM Teacher_details
WHERE Address="ঢাকা";
Copy



SQL NOT NULL কনস্ট্রেইন্ট

কোনো ফিল্ডে(কলামে) NOT NULL কনস্ট্রেইন্ট(Constraint) সেট করলে সেই ফিল্ড(কলাম) ফাঁকা(NULL) ভ্যালু গ্রহণ করে না। সুতরাং NOT NULL কনস্ট্রেইন্টটি সংশ্লিষ্ট ফিল্ডে ভ্যালু রাখতে বাধ্য করে। অর্থাৎ আপনি টেবিলে কোন তথ্য ইনসার্ট অথবা আপডেট করতে চাইলে ঐ ফিল্ডে অবশ্যই ভ্যালু ইনসার্ট করতে হবে, অন্যথায় টেবিলে কোন তথ্য ইনসার্ট অথবা আপডেট করতে পারবেন না।

নিম্নের SQL কনস্ট্রেইন্টটি "Roll_number" এবং "Student_name" কলামে NULL ভ্যালু গ্রহণ করবে নাঃ

উদাহরণ

CREATE TABLE Student_NotNull(
Id int auto_increment,
Roll_number varchar(255) NOT NULL,
Student_name varchar(255) NOT NULL,
Address varchar(255)
);

উপরের তৈরিকৃত টেবিলের "Roll_number" এবং "Student_name" কলামে তথ্য ইনপুট করা ব্যাতিত সম্পূর্ণ টেবিলে কোন তথ্য ইনপুট বা আপডেট করা যাবে না।


SQL UNIQUE কনস্ট্রেইন্ট

UNIQUE কনস্ট্রেইন্ট(Constraint) দ্বারা ডেটাবেজে ইউনিক(Unique) রেকর্ড ইনসার্ট করা হয়। এক বা একাধিক কলামের রেকর্ডকে ইউনিক করতে UNIQUE এবং PRIMARY KEY কনস্ট্রেইন্ট উভই ব্যবহার করা হয়। একটি PRIMARY KEY কনস্ট্রেইন্ট এর মধ্যে স্বয়ংক্রিয়ভাবে UNIQUE কনস্ট্রেইন্ট ডিফাইন করা থাকে।

মনে রাখবেন, একটি টেবিলের একাধিক কলামে UNIQUE কনস্ট্রেইন্ট থাকতে পারে কিন্তু একটি টেবিলের শুধুমাত্র একটি কলামেই PRIMARY KEY কনস্ট্রেইন্ট ব্যবহার করা যায়।


টেবিল তৈরির সময় SQL UNIQUE কনস্ট্রেইন্ট এর ব্যবহার

নিম্নের SQL স্টেটম্রন্টটি "Student_details" টেবিল তৈরির সময় "Roll_number" কলামটি UNIQUE কনস্ট্রেইন্ট এর মাধ্যমে ইউনিক হবে।

MySQL এর জন্যঃ

CREATE TABLE Student_details(
	Id int NOT NUll,
    Roll_number varchar(255),
    Student_name varchar(255),
    Institute varchar(255),
    Address varchar(255),
    UNIQUE(roll_number)
);

Oracle/SQL Server/MS Access এর জন্যঃ

CREATE TABLE Student_details(
	Id int NOT NUll,
    Roll_number varchar(255) UNIQUE,
    Student_name varchar(255),
    Institute varchar(255),
    Address varchar(255)
);

একটি UNIQUE কনস্ট্রেইন্ট এর নাম দেওয়ার জন্য এবং একাধিক কলামে UNIQUE কনস্ট্রেইন্ট ডিফাইন করার জন্য নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়।

MySQL/Oracle/SQL Server/MS Access এর জন্যঃ

CREATE TABLE Student_details(
	Id int NOT NUll,
  Roll_number varchar(255),
  Student_name varchar(255),
  Institute varchar(255),
  Address varchar(255),
CONSTRAINT Student_id UNIQUE (Id, Roll_number)
);

পূর্বের তৈরি টেবিলে SQL UNIQUE কনস্ট্রেইন্টের ব্যবহার

ডেটাবেজে পূর্ব থেকে বিদ্যমান একটি টেবিলের "Id" কলামকে UNIQUE করতে ALTER TABLE স্টেটমেন্টটের সাথে নিম্নের ন্যায় ADD UNIQUE কনস্ট্রেইন্ট ব্যবহার করা হয়ঃ

MySQL/Oracle/SQL Server/MS Access এর জন্যঃ

ALTER TABLE Student_details
ADD UNIQUE (Id);


একটি UNIQUE কনস্ট্রেইন্ট এর নাম দেওয়ার জন্য এবং একাধিক কলামে UNIQUE কনস্ট্রেইন্ট ডিফাইন করার জন্য নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়।

MySQL/Oracle/SQL Server/MS Access এর জন্যঃ

ALTER TABLE Student_details
ADD CONSTRAINT Student_id UNIQUE (Id, Roll_number);

UNIQUE কনস্ট্রেইন্ট ডিলেট করা

UNIQUE কনস্ট্রেইন্ট ডিলেট করতে নিম্নের SQL স্টেটমেন্টটি ব্যবহার করা হয়ঃ

MySQL এর জন্যঃ

ALTER TABLE Student_details
DROP INDEX Student_id;

Oracle/SQL Server/MS Access এর জন্যঃ

ALTER TABLE Student_details
DROP CONSTRAINT Student_id;



SQL Default কনস্ট্রেইন্ট

Default কনস্ট্রেইন্ট(Constraint) ব্যবহার করে কলামের মধ্যে একটি ডিফল্ট(Default) ভ্যালু ইনপুট করা যায়। কলামে কোন নির্দিষ্ট মান ইনপুট না করা হলে সকল নতুন রেকর্ডের মধ্যে স্বয়ংক্রিয়ভাবে Default ভ্যালুটি যোগ হয়ে যায়।


টেবিল তৈরির ক্ষেত্রে SQL Default কনস্ট্রেইন্টের ব্যবহার

নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল তৈরী করার সময় "Institute" কলামে Default কনস্ট্রেইন্ট সেট করবেঃ

MySQL /Oracle/ SQL Server/MS Access এর জন্যঃ

CREATE TABLE Student_details(
	Id int NOT NUll,
    Roll_number varchar(255),
    Student_name varchar(255),
    Institute varchar(255) DEFAULT 'জাতীয় বিশ্ববিদ্যালয়',
    Address varchar(255)
);

সিস্টেম ভ্যালু ইনর্সাট করার জন্য ফাংসশন যেমন-GETDATE() এর সাথেও Default কনস্ট্রেইন্ট ব্যবহার করা হয়ঃ

CREATE TABLE Student_attendance(
	Id int NOT NUll,
    Roll_number varchar(255),
    Attendance varchar(255),
    Admission_date date DEFAULT GETDATE()
);

পূর্বের তৈরি টেবিলে SQL Default কনস্ট্রেইন্টের ব্যবহার

নিম্নের SQL স্টেটমেন্টটি পূর্বে তৈরিকৃত "Student_details" টেবিলের "Institute" কলামে Default কনস্ট্রেইন্ট সেট করবেঃ


MySQL এর জন্যঃ

ALTER TABLE Student_details
ALTER Institute SET DEFAULT 'জাতীয় বিশ্ববিদ্যালয়';


Oracle এর জন্যঃ

ALTER TABLE Student_details
MODIFY Institute DEFAULT 'জাতীয় বিশ্ববিদ্যালয়';

SQL Server/MS Access এর জন্যঃ

ALTER TABLE Student_details
ALTER COLUMN Institute SET DEFAULT 'জাতীয় বিশ্ববিদ্যালয়';

Default কনস্ট্রেইন্ট ডিলেট করা

একটি Default কনস্ট্রেইন্ট ডিলিট করতে নিম্নের SQL স্টেটমেন্টটি ব্যবহার করুনঃ

MySQL এর জন্যঃ

ALTER TABLE Student_details
ALTER Institute DROP DEFAULT;

Oracle/SQL Server/MS Access এর জন্যঃ

ALTER TABLE Student_details
ALTER COLUMN Institute DROP DEFAULT;



SQL CHECK কনস্ট্রেইন্ট

একটি কলাম কতটি ভ্যালু গ্রহণ করবে তার রেঞ্জ নির্ধারন করতে CHECK কনস্ট্রেইন্ট(Constraint) ব্যবহার করা হয়। আপনি যদি একটি নির্দিষ্ট কলামের জন্য CHECK কনস্ট্রেইন্ট নির্ধারন করে দেন তাহলে এটি শুধুমাত্র ঐ কলামের ভ্যালুর জন্যই প্রযোজ্য হবে। আপনি যদি একটি টেবিলের জন্য কনস্ট্রেইন্ট ডিফাইন করে থাকেন তাহলে তা টেবিলে অন্তর্ভূূক্ত সকল কলামের জন্যই প্রযোজ্য হবে।


SQL টেবিল তৈরীর সময় CHECK কনস্ট্রেইন্টের ব্যবহার

নিম্নের SQL স্টেটমেন্টটি "Student_details" টেবিল তৈরী করার সময় "Id" কলামে CHECK কনস্ট্রেইন্ট সেট করবে। এক্ষেত্রে CHECK কনস্ট্রেইন্ট নির্ধারন করে দিবে যেন "Id" কলামের ভ্যালু-সমূহ শূণ্য(0) থেকে বড় হয়।

MySQL এর জন্যঃ

CREATE TABLE Student_details(
  Id int NOT NUll,
  Roll_number varchar(255),
  Student_name varchar(255),
  Institute varchar(255),
  Address varchar(255),
CHECK (Id>0)
);

Oracle/SQL Server/MS Acces এর জন্যঃ

CREATE TABLE Student_details(
  Id int NOT NUll CHECK (Id>0),
  Roll_number varchar(255),
  Student_name varchar(255),
  Institute varchar(255),
  Address varchar(255)
);

একটি CHECK কনস্ট্রেইন্ট এর নাম দেওয়ার জন্য এবং একাধিক কলামে CHECK কনস্ট্রেইন্ট ডিফাইন করার জন্য নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়।

MySQL / SQL Server / Oracle / MS Access এর জন্যঃ

CREATE TABLE Student_details(
  Id int NOT NUll,
  Roll_number varchar(255),
  Student_name varchar(255),
  Institute varchar(255),
  Address varchar(255),
  CONSTRAINT check_student CHECK (Id>0 AND Address='জাতীয় বিশ্ববিদ্যালয়')
);

পূর্বের তৈরি টেবিলে SQL UNIQUE কনস্ট্রেইন্ট এর ব্যবহার

ডেটাবেজে পূর্ব থেকে বিদ্যমান একটি টেবিলের "Id" কলামে CHECK সেট করতে ALTER TABLE স্টেটমেন্টটের সাথে নিম্নের ন্যায় ADD CHECK কনস্ট্রেইন্ট ব্যবহার করা হয়ঃ

MySQL/Oracle/SQL Server/MS Access এর জন্যঃ

ALTER TABLE Student_details
ADD CHECK (Id>0);

একটি CHECK কনস্ট্রেইন্ট এর নাম দেওয়ার জন্য এবং একাধিক কলামে CHECK কনস্ট্রেইন্ট ডিফাইন করার জন্য নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়।

MySQL/Oracle/SQL Server/MS Access এর জন্যঃ

ALTER TABLE Student_details
ADD CONSTRAINT check_student CHECK (Id>0 AND Address='জাতীয় বিশ্ববিদ্যালয়');

একটি CHECK কনস্ট্রেইন্ট ডিলেট করা

একটি CHECK কনস্ট্রেইন্ট ডিলেট করতে, নিম্নের SQL সিনট্যাক্সটি ব্যবহার করা হয়ঃ

MySQL এর জন্যঃ

ALTER TABLE Student_details
DROP CHECK check_student;

MySQL/Oracle/SQL Server/MS Access এর জন্যঃ

ALTER TABLE Student_details
DROP CONSTRAINT check_student;