بررسی دستور INSERT INTO و مقادیر NULL در SQL

04 اسفند 1397
درسنامه درس 7 از سری آموزش زبان SQL
sql-language-null-and-insert

سلام خدمت شما دوستان گرامی! در این قسمت از سری آموزش جامع زبان SQL در رابطه با دستور INSERT INTO و مقادیر NULL صحبت خواهیم کرد که می توان گفت از نکات مهم و اساسی در یادگیری زبان SQL به حساب می آیند.

دستور INSERT INTO

همانطور که از نام دستور INSERT INTO (به معنی «به ... وارد کن») پیداست، از آن برای وارد کردن داده های جدید در جدول استفاده می شود. در واقع این دستور به دو روش نوشته می شود:

در روش اول هم نام ستون مشخص می شود و هم مقداری که می خواهیم آن را وارد جدول کنیم. به ساختار کلی زیر توجه کنید:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

روش دوم زمانی است که شما می خواهید مقداری را در تمام ستون ها وارد کنید که در این حالت عملا یک ردیف را وارد کرده اید.

اگر چنین قصدی دارید نیازی نیست که ستون ها را مشخص کنید چرا که مقادیر به ترتیب (از چپ به راست) در ستون ها قرار خواهند گرفت. تنها نکته ای که باید به آن توجه کنید این است که ترتیب مقادیری که به INSERT INTO می دهید با ترتیب ستون ها یکی باشد. به ساختار زیر توجه کنید:

INSERT INTO table_name
VALUES (value1, value2, value3, ...);

حالا قبل از اینکه به سراغ مثال ها برویم باید نگاهی به پایگاه داده ی Northwind بیندازیم:

قسمتی از جدول Customers در پایگاه داده ی Northwind
قسمتی از جدول Customers در پایگاه داده ی Northwind

همانطور که قبلا گفته ایم، اساس کار ما در طول این دوره با این پایگاه داده است و امروز این قسمت را انتخاب کرده ایم. خب برویم به سراغ مثال ها ...

به کد SQL زیر توجه کنید:

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');

این کد ابتدا به سراغ جدول Customers می رود، سپس ستون های مختلفی را انتخاب می کند تا داده ها را داخل آن ها قرار دهد و بعد از آن داده ها را به VALUES می دهد. دقت کنید با اینکه این ساختار مطابق روش اولی است که به شما معرفی کردیم اما هنوز هم بر اساس ترتیب پیش می رود. یعنی چه از روش اول و چه از روش دوم استفاده کنید، همخوانی ترتیب در داده ها و ستون های جدول شما مهم است.

شما می توانید این دستور را در پایگاه داده ی آماده ی Northwind تست کنید: روی این لینک کلیک کنید.

پس از اینکه به لینک بالا رفتید و دستور SQL را اجرا کردید، به شما پیامی نشان داده می شود و می گوید که یک ردیف تحت تاثیر قرار گرفت. برای مشاهده ی ردیفی که اضافه شده است، در همان صفحه ای که هستید، کد های SQL را پاک کرده و دستور زیر را تایپ کنید:

SELECT * FROM CUSTOMERS

سپس دکمه ی Run SQL را بزنید و به آخر جدول بروید. می بینید یک ردیف به ردیف های ما اضافه شده و ردیف آخر همان ردیفی است که به تازگی اضافه شده است.

نکته: اگر دقت کنید به ستون CustomerID هیچ مقداری نداده ایم. چرا؟ به این دلیل که این ستون از نوع auto-increment (به معنی «افزایش خودکار») است. این نوع ستون ها خود به خود برای هر مشتری اضافه می شود و ما برایش مقداری تعیین نمی کنیم. در مورد auto-increment ها بعدا صحبت خواهیم کرد.

در مثال قبل به تمام ستون ها مقدار جدیدی دادیم و به عبارت دیگر یک ردیف کامل را به آن اضافه کردیم اما می توانیم تنها به بعضی از ستون ها مقدار بدهیم. در مثال زیر داده هایی را به ستون های CustomerName و City و Country اضافه می کنیم اما بقیه را خالی می گذاریم. ستون CustomerID نیز خود به خود بروزرسانی می شود (به نکته ی بالا رجوع کنید):

INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');

برای اجرای این کد در پایگاه داده ی Northwind روی این لینک کلیک کنید.

اگر چنین کاری را انجام دهیم، جدول Customers به شکل زیر در می آید:

جدول Customers پس از اجرای دستور بالا
جدول Customers پس از اجرای دستور بالا

ستون هایی که از ما مقداری دریافت نکردند به صورت null هستند! این چه معنی می دهد؟

مقادیر NULL

فیلدی که مقدارش null است یعنی هیچ مقداری ندارد. اگر فیلدی در جدول ما اختیاری (optional) باشد، می توان ردیف جدیدی در جدول اضافه کرد بدون اینکه به آن فیلد مقدار خاصی داده شود.

نکته: مقدار null با عدد صفر یا فیلدی که چند space (فضای خالی) دارد متفاوت است. وقتی 0 یا space داریم، در واقع مقداری وجود دارد اما null مخصوص فیلدی است که هنگام ساختِ یک ردیف یا رکورد هیچ مقداری دریافت نکند.

اگر می خواهید پایگاه داده ی خود را جست و جو کنید تا مقادیر null را پیدا کنید باید بدانید که این کار با اپراتور های = یا <> و امثال‌شان امکان پذیر نیست. برای این کار باید از اپراتور های IS NULL یا IS NOT NULL استفاده کنید.

ساختار کلی IS NULL

SELECT column_names
FROM table_name
WHERE column_name IS NULL;

ساختار کلی IS NOT NULL

SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;

حالا بیایید مثال زیر را روی پایگاه داده ی خودمان انجام دهیم:

SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;

برای اجرای این دستور روی پایگاه داده، به این لینک مراجعه کنید.

پس از اجرای این دستور میبینید ردیفی که قبلا ساخته ایم و دارای مقادیر null است بالا می آید (مشتری به نام Cardinal).

خلاصه ی مقاله

در این قسمت با دستور INSERT INTO و دو شکل رایج آن آشنا شدیم و در عمل مشاهده کردیم که ترتیب در مقادیری که به این دستور داده می شود، مهم هستند. همچنین با مفهوم مقادیر NULL و تفاوتشان با صفر یا space آشنا شدیم. امیدوارم از این قسمت لذت برده باشید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش زبان SQL توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (4 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

محمدرضا معلم نیا
28 دی 1400
با سلام من مثال را به صورت آنلاین انجام دادم اما به شکل افزایش خودکار نبود و حتما باید ستون CustomerID را نیز پر می کردم؛ در غیر این صورت، برنامه پیغام خطا می داد.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

حامد حاجوی
17 آبان 1400
سلام علیکم ببخشید چطوری میتونیم بیش از یک رکورد رو درج کنیم؟ باید حلقه بزنیم یا روالش فرق میکنه؟ سپاس فراوان

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

sh
06 بهمن 1399
سایتتون واقعا عالیه همه چیش فقط اگر میشد همه چیش رایگان بود عالی میشد.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

جواد
01 اردیبهشت 1399
اقا واقعا واقعا واقعا دمتون گرم! یکی از بهترین داکیومنتای فارسی ای بودید که درباره دیتابیسا خونده بودم! خلاصه مفید و جامع! واقعا دمتون گرم!

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.