4.1 আপডেট SET বিবৃতি
আপনার যদি টেবিলে বিদ্যমান রেকর্ডগুলি পরিবর্তন করতে হয় তবে এর জন্য আমরা অপারেটর ব্যবহার করি UPDATE
।
একদিকে, অপারেটরটি UPDATE
অপারেটরের অনুরূপ INSERT
, কারণ আমাদের কলামগুলির জন্য নতুন মান নির্দিষ্ট করতে হবে। এবং অন্যদিকে, অপারেটরের উপর SELECT
, কারণ এটি আপনাকে ডেটা গ্রুপগুলির সাথে অবিলম্বে কাজ করতে দেয়।
গুরুত্বপূর্ণ ! অপারেটরের উদ্দেশ্য UPDATE
হ'ল টেবিলের এক সারিতে নয়, তবে একটি নির্দিষ্ট শর্ত পূরণ করে এমন সমস্ত সারিতে ডেটা পরিবর্তন করা। এবং আপনি যদি একটি ছোট ভুল করেন তবে আপনি সহজেই টেবিলের সমস্ত ডেটা হারাতে পারেন।
অনুরোধের সাধারণ দৃষ্টিভঙ্গি:
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
আসুন একটি ক্যোয়ারী লিখি যা আমাদের সকল কর্মচারীর বেতন 100 বাড়িয়ে দেবে। আমাদের প্রশ্নটি এইরকম হবে:
UPDATE employee SET
salary = salary+100;
আর এখন যাদের বেতন ৫০ হাজারের কম, তাদের জন্যও আমরা ২০% বাড়িয়ে দেব। অনুরোধের উদাহরণ:
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
এবং অবশ্যই, আমরা পরিচালকের বেতন 2 গুণ বাড়িয়ে দেব, এটি তাকে ছাড়া কীভাবে হতে পারে:
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 জটিল ডেটা পরিবর্তনের পরিস্থিতি
আপনি যদি একই সময়ে একাধিক টেবিলে ডেটা পরিবর্তন করার সিদ্ধান্ত নেন, বা যখন আপনি একটি টেবিলে ডেটা পরিবর্তন করেন, তখন আপনাকে এটি অন্য একটি থেকে ডেটা দিয়ে পূরণ করতে হবে, অথবা প্রথমটি পরিবর্তন করার প্রক্রিয়ায় অন্য টেবিলের ডেটা ব্যবহার করতে হবে, তারপর চমক আমাদের জন্য অপেক্ষা করছে।
আসুন কর্মচারী টেবিলে বিদ্যমান ব্যবহারকারী টেবিলের সমস্ত ব্যবহারকারীর স্তর পরিবর্তন করার চেষ্টা করি। সরলতার জন্য, আমরা নামের দ্বারা ব্যবহারকারীদের কাকতালীয়তা পরীক্ষা করব।
আমরা কিভাবে এই প্রশ্নটি লিখতে চাই:
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
আচ্ছা, আসুন এই ক্যোয়ারীতে কর্মচারী টেবিল থেকে নামের একটি তালিকা যোগ করি:
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
মজাদার! নাম পাওয়ার জন্য এসকিউএল ক্যোয়ারীটি টাস্কের বর্ণনার চেয়েও ছোট বলে প্রমাণিত হয়েছে। এসকিউএল-এর নির্মাতারা তাদের রুটি বৃথা খায়নি।
তোমাকে মন খারাপ করতে বাধ্য করেছি-এই পদ্ধতি কাজ করবে না. প্রথমে আপনাকে এই টেবিলগুলিতে যোগ দিতে হবে, এটি দেখতে এরকম কিছু হবে:
UPDATE table 1, table 2 SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE table 1.id = table 2.ref_id;
চলুন এটা একটু কঠিন করা যাক. শুধুমাত্র ভাল কর্মচারীদের জন্য যাদের বেতন 50k-এর বেশি হবে তাদের জন্য আপনাকে 80-এ লেভেল সেট করতে হবে। সম্পূর্ণ সমাধান এই মত দেখাবে:
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
টেবিলের এই ধরনের যোগদান আসলে INNER JOIN
, যাতে শেষ পর্যন্ত শুধুমাত্র দ্বিতীয় টেবিলে নামের সাথে মিল থাকা ব্যবহারকারীরাই থাকবে।
কিন্তু আমাদের এখনও কোনো না কোনোভাবে ভালো কর্মচারী নির্বাচন করতে হবে, তাই আসুন আরও কিছু কোড যোগ করি:
SELECT * FROM employee WHERE salary >= 50000
এবং এখন আমরা আমাদের চূড়ান্ত ক্যোয়ারীতে এই টেবিলটি প্রতিস্থাপন করি:
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
এখন এটা নিয়ে বাঁচুন।