پایگاه داده های دنیای واقعی نیاز به به روز رسانی مداوم دارند. اغلب، شما نیاز به به روز رسانی سوابق خاص. حتی ممکن است بخواهید فقط ردیف اول یا 10، 100 یا 1000 ردیف اول را به روز کنید. بیایید نحوه بهروزرسانی ردیفها را برای یک مقدار مشخص از بالا در SQL بررسی کنیم.
SQL UPDATE چیست؟
در SQL، یک دستور UPDATE رکوردهای موجود یک جدول را تغییر می دهد. می توانید کل ستون ها را به روز کنید یا ردیف های فیلتر شده با عبارت WHERE را به روز کنید. همانطور که در این مقاله خواهیم دید، شما همچنین می توانید ردیف ها را برای یک مقدار مشخص از بالای جدول خود به روز کنید.
به روز نگه داشتن پایگاه های داده یکی از مسئولیت های کلیدی مهندسان داده، مدیران داده ها و همه افرادی است که با پایگاه های داده کار می کنند. این راهنمای دقیق را برای توضیحات و نمونههای مبتدی بهروزرسانی SQL بررسی کنید.
برای یادگیری همه اصول اولیه تغییر پایگاه داده، دوره تعاملی ما را بررسی کنید: نحوه درج، به روز رسانی و حذف داده ها در SQL. با 52 تمرین SQL تعاملی، نحوه بازیابی، ذخیره، تغییر، حذف، درج و به روز رسانی داده ها را با زبان دستکاری داده های SQL (DML) می آموزید. اگر با SQL خیلی تازه کار هستید، توصیه می کنم قبل از رفتن به زبان دستکاری داده ها، دوره تعاملی SQL Basics را بگذرانید.
چگونه فقط یک ردیف را در SQL به روز کنیم
بهترین راه برای درک نحوه عملکرد SQL UPDATE دیدن آن در عمل است. بنابراین، اجازه دهید با یک مثال شروع کنیم.
ما جدولی از تامین کنندگان خود با شناسه شرکت، نام شرکت، نام شخص تماس و حجم محصولات و خدمات ارائه شده در سال 2021 (به دلار) داریم.
تامین کنندگان
شناسه company_name contact_name volume_2021
1 Dunder Mifflin مایکل اسکات 456388.40
2 Eco Focus Robert California 203459.30
3 مکس انرژی روی اندرسون 1403958.80
4 سیب و پرتقال Todd Packer 2303479.50
5 امنیت برتر Jo Bennett 105000.10
6 مبتکر اندی برنارد 567980.00
7 شرکت بزرگ داده اسکار مارتینز 345678.90
8 میامی و شرکای استنلی هادسون 1205978.80
9 تعداد زیادی سرگرم کننده فیلیس ونس 490345.40
10 Repair Inc Darryl Philbin 53673.30
11 بهترین حسابداران کوین مالون 534512.20
12 Time & Money Meredith Palmer 78905.20
13 دو رئیس جیم هالپرت 250350.10
14 Epic Adventure Ryan Howard 87078.00
15 Schrute Marketing Dwight Schrute 3450250.50
بیایید آن را ساده نگه داریم و با به روز رسانی فقط یک ردیف از جدول شروع کنیم. به طور خاص، فرض کنید ما به تازگی یاد گرفتیم که شخص تماس برای «لذت بسیار» از فیلیس ونس به پم بیزلی تغییر کرده است. ما میخواهیم نام تماس شرکت را با شناسه 9 بهروزرسانی کنیم. در اینجا سؤالی وجود دارد که میتوانیم از آن استفاده کنیم:
به روز رسانی تامین کنندگان
SET contact_name = 'Pam Beesly'
WHERE id = 9;
نحو ساده است. بعد از کلمه کلیدی UPDATE نام جدولی را که می خواهیم به روز کنیم را مشخص می کنیم. سپس، با کلمه کلیدی SET، تعریف می کنیم که کدام ستون (یعنی contact_name) با چه مقداری به روز شود (یعنی Pam Beesley). در نهایت از کلمه کلیدی WHERE استفاده می کنیم تا مشخص کنیم که فقط رکورد با شناسه شرکت 9 به روز شود.
در اینجا جدول به روز شده است. همانطور که می بینید، ما اکنون یک فرد تماس جدید برای "لذت بسیار" داریم:
شناسه company_name contact_name volume_2021
1 Dunder Mifflin مایکل اسکات 456388.40
2 Eco Focus Robert California 203459.30
3 مکس انرژی روی اندرسون 1403958.80
4 سیب و پرتقال Todd Packer 2303479.50
5 امنیت برتر Jo Bennett 105000.10
6 مبتکر اندی برنارد 567980.00
7 شرکت بزرگ داده اسکار مارتینز 345678.90
8 میامی و شرکای استنلی هادسون 1205978.80
9 تعداد زیادی سرگرمی Pam Beesley 490345.40
10 Repair Inc Darryl Philbin 53673.30
11 بهترین حسابداران کوین مالون 534512.20
12 Time & Money Meredith Palmer 78905.20
13 دو رئیس جیم هالپرت 250350.10
14 Epic Adventure Ryan Howard 87078.00
15 Schrute Marketing Dwight Schrute 3450250.50
اکنون، اجازه دهید به یک مورد پیچیده تر برویم که در آن چندین ردیف را به روز می کنیم.
نحوه به روز رسانی تعداد مشخصی از ردیف ها
سناریوهای مختلفی وجود دارد که در آنها باید چندین ردیف را به روز کنید. اغلب، ردیفهایی را که میخواهید با استفاده از شرایط فیلتر در یک عبارت WHERE بهروزرسانی کنید، انتخاب میکنید.
در اینجا، با این حال، ما روی موردی تمرکز می کنیم که در آن شما می خواهید ردیف ها را برای یک مقدار مشخص از بالا به روز کنید، به عنوان مثال، 10 رکورد اول.
ما به اولین مثال خود ادامه می دهیم اما با برخی به روز رسانی ها. فرض کنید می خواهیم ستون دیگری به نام top_supplier را به جدول تامین کنندگان خود اضافه کنیم. در این ستون می خواهیم ببینیم:
"بله" اگر تامین کننده یکی از 10 شرکت برتر با مبلغی باشد که سال گذشته به شرکت پرداخت کردیم، یا
"نه" برای همه تامین کنندگان دیگر.
پیشنهاد می کنم این کار را در سه مرحله انجام دهید:
یک ستون جدید top_supplier اضافه کنید.
مقدار این ستون را برای همه رکوردها روی "No" قرار دهید.
مقدار این ستون را برای 10 تامین کننده برتر به "بله" به روز کنید.
در اینجا نحوه انجام دو مرحله اول آمده است:
تامین کنندگان ALTER TABLE
ADD top_supplier varchar(32);
به روز رسانی تامین کنندگان
SET top_supplier = 'نه';
و این هم جدول نتیجه:
<
تامین کنندگان
شناسه company_name contact_name volume_2021 top_supplier
1 Dunder Mifflin Michael Scott 456388.40 No
2 Eco Focus Robert California 203459.30 No
3 مکس انرژی روی اندرسون 1403958.80 شماره
4 سیب و پرتقال Todd Packer 2303479.50 No
5 Top Security Jo Bennett 105000.10 No
6 Innovators Andy Bernard 567980.00 No
7 Big Data Corp Oscar Martinez 345678.90 No
8 میامی و شرکای Stanley Hudson 1205978.80 No
9 تعداد زیادی سرگرم کننده فیلیس ونس 490345.40 No
10 Repair Inc Darryl Philbin 53673.30 No
11 بهترین حسابداران کوین مالون 534512.20 No
12 Time & Money Meredith Palmer 78905.20 No
13 Two Bosses Jim Halpert 250350.10 No
14 Epic Adventure Ryan Howard 87078.00 No
15 Schrute Marketing Dwight Schrute 3450250.50 No
اکنون جالبترین بخش میآید: بهروزرسانی ستون top_supplier برای 10 سطر اول پس از اینکه جدول را بر اساس ستون volume_2021 مرتب کردیم. نحو پرس و جو برای انجام این مرحله سوم به سیستم مدیریت پایگاه داده (به عنوان مثال، MySQL، SQL Server، Oracle یا PostgreSQL) بستگی دارد. در حال حاضر، من به شما پرس و جوهای کاری برای تعدادی از محبوب ترین سیستم های مدیریت پایگاه داده را نشان می دهم.
نحوه درج، به روز رسانی و حذف داده ها در SQL را بیاموزید. دوره تعاملی عالی ما را بررسی کنید!
MySQL
در MySQL، ما می توانیم از کلمه کلیدی LIMIT استفاده کنیم که تعداد رکوردها را برای خروجی یا به روز رسانی محدود می کند:
به روز رسانی تامین کنندگان
SET top_supplier = 'بله'
سفارش بر اساس volume_2021 DESC
LIMIT 10;
با این پرس و جو، جدول تامین کنندگان را با تنظیم مقدار ستون top_supplier روی "بله" به روز می کنیم. با این حال، ما این به روز رسانی ها را فقط برای 10 تامین کننده برتر می خواهیم. بنابراین، جدول را بر اساس ستون volume_2021 (به ترتیب نزولی) سفارش میدهیم، و سپس تعداد ردیفهای بهروزرسانی را به 10 محدود میکنیم. اگر میخواهید دانش خود را در مورد ORDER BY تجدید کنید، این مقاله مفصل را بررسی کنید.
در اینجا جدول به روز شده ترتیب داده شده بر اساس volume_2021 است. همانطور که می بینید، فقط 10 تامین کننده برتر در ستون آخر "بله" دارند. از همان نحو برای به روز رسانی فقط ردیف اول یا 5، 20، 100 یا هر تعداد سطر اول استفاده کنید و به سادگی تعداد بعد از کلمه کلیدی LIMIT را تغییر دهید.
شناسه company_name contact_name volume_2021 top_supplier
15 Schrute Marketing Dwight Schrute 3450250.50 بله
4 سیب و پرتقال Todd Packer 2303479.50 بله
3 مکس انرژی روی اندرسون 1403958.80 بله
8 میامی و شرکای استنلی هادسون 1205978.80 بله
6 مبتکر اندی برنارد 567980.00 بله
11 بهترین حسابداران کوین مالون 534512.20 بله
9 بسیار سرگرم کننده فیلیس ونس 490345.40 بله
1 Dunder Mifflin مایکل اسکات 456388.40 بله
7 شرکت بزرگ داده اسکار مارتینز 345678.90 بله
13 دو رئیس جیم هالپرت 250350.10 بله
2 Eco Focus Robert California 203459.30 No
5 Top Security Jo Bennett 105000.10 No
14 Epic Adventure Ryan Howard 87078.00 No
12 Time & Money Meredith Palmer 78905.20 No
10 Repair Inc Darryl Philbin 53673.30 No
SQL Server
برخلاف MySQL، SQL Server کلمه کلیدی LIMIT را ندارد. در عوض دارای TOP است. از این کلمه کلیدی در یک پرسش فرعی برای دریافت شناسه 10 تامین کننده برتر استفاده کنید:
به روز رسانی تامین کنندگان
SET top_supplier = 'بله'
WHERE IN (
SELECT TOP (10) ID
از تامین کنندگان
ORDER BY volume_2021 DESC)؛
سپس، ستون top_supplier را برای رکوردهایی که شناسه های مربوطه آنها در لیست ایجاد شده توسط subquery یافت می شود، به روز می کنیم.
PostgreSQL و Oracle
در نهایت، PostgreSQL و Oracle روشی متفاوت برای محدود کردن تعداد ردیفهایی که قرار است بهروزرسانی شوند، ارائه میکنند. مشابه پرس و جو قبلی، از یک پرس و جو فرعی استفاده می کنیم. با این درخواست فرعی، جدول تامین کنندگان را بر اساس مبلغ پرداخت شده سفارش می دهیم و سپس با استفاده از کلیدواژه FETCH FIRST 10 ROWS ONLY، خروجی را به 10 رکورد محدود می کنیم:
به روز رسانی تامین کنندگان
SET top_supplier = 'بله'
WHERE IN (
SELECT ID
از تامین کنندگان
سفارش بر اساس volume_2021 DESC
فقط 10 ردیف اول را واکشی کنید)؛
همانطور که می بینید، ما فقط رکوردهای مربوطه را در کوئری اصلی به روز می کنیم.
در این مقاله مفصل، نمونههای بیشتری از سوالات فرعی برای بیانیه UPDATE دریافت کنید. همچنین، نمونههای بیشتر با INSERT، UPDATE و DELETE را در اینجا ببینید.
زمان تمرین با دوره های آنلاین SQL است!
SQL یک ابزار تحلیلی قدرتمند است که معمولاً از اکسل در اثربخشی و کارایی بهتر است. همچنین یکی از زبان های برنامه نویسی مدرن است که در اینجا باقی مانده است. یادگیری SQL دشوار نیست، اما اغلب چندین راه مختلف برای انجام یک کار وجود دارد. علاوه بر این، تفاوت های نحوی خاصی در بین سیستم های مدیریت پایگاه داده وجود دارد.
موثرترین رویکرد برای به دست آوردن درک جامع از SQL، گذراندن دوره های آنلاین SQL است. اگر تجربه ای با SQL ندارید، توصیه می کنم با دوره SQL Basics شروع کنید. این شامل 129 تمرین SQL تعاملی برای پوشش تمام اصول اولیه شما برای بازیابی داده ها از پایگاه داده است.
اگر همچنین می خواهید بدانید که چگونه پایگاه داده خود را تغییر دهید، دوره آموزش نحوه درج، به روز رسانی و حذف داده ها در SQL را بررسی کنید. این دوره تعاملی اصول زبان دستکاری داده ها را پوشش می دهد تا به شما کمک کند پایگاه داده خود را در صورت نیاز گسترش دهید و به روز کنید.
هنگامی که آماده فراتر رفتن از دوره های فردی و دریافت دانش جامع از قابلیت های SQL هستید، به مسیرهای یادگیری ما بروید:
SQL از A تا Z برای راحت شدن با مفاهیم پایه و پیشرفته SQL مانند توابع پنجره، پرس و جوهای بازگشتی و GROUP BY
ایجاد ساختار پایگاه داده برای یادگیری نحوه ایجاد و مدیریت جداول، نماها و فهرست ها در سیستم های مدیریت پایگاه داده رابطه ای محبوب مانند MySQL، SQL Server، Oracle و PostgreSQL.
با تشکر برای خواندن، و یادگیری شاد!