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="ঢাকা";
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;