SQL مخفف چیست؟
SQL مخفف Structured Query Language یا زبان پرسوجوی ساختاری است.
DBMS چیست؟
DBMS (Database Management System) به معنای سیستم مدیریت پایگاه داده است.
یک DBMS یک نرمافزار است که طراحی، ساخت، مدیریت و بهرهبرداری از پایگاههای داده را فراهم میکند. این سیستمها به صورت مجموعهای از نرمافزارها و ابزارها عمل میکنند که از طریق آنها میتوانید پایگاههای دادههای مربوطه را ایجاد، مدیریت و به آنها دسترسی پیدا کنید.
دستورات مختلف DBMS را توضیح دهید.
DDL (Data Definition Language): شامل دستوراتی است که برای تعریف و تغییر ساختار پایگاه داده استفاده میشود. این دستورات شامل CREATE، ALTER، DROP، TRUNCATE، RENAME و غیره میشوند. با استفاده از DDL میتوان جداول، نمایهها، محدودیتها و سایر عناصر پایگاه داده را تعریف و تغییر داد.
DML (Data Manipulation Language): شامل دستوراتی است که برای مدیریت و تغییر دادهها در پایگاه داده استفاده میشود. این دستورات شامل SELECT، INSERT، UPDATE، DELETE و غیره هستند. با استفاده از DML میتوانید دادهها را استخراج (انتخاب)، درج (افزودن)، به روزرسانی و حذف کنید.
DCL (Data Control Language): شامل دستوراتی است که برای کنترل دسترسی و مجوزهای کاربران به پایگاه داده استفاده میشود. این دستورات شامل GRANT (اعطای مجوز) و REVOKE (لغو مجوز) میشوند. با استفاده از DCL میتوانید مجوزها، نقشها و سایر کنترلهای دسترسی را تنظیم کنید.
TCL (Transaction Control Language): شامل دستوراتی است که برای مدیریت تراکنشها در پایگاه داده استفاده میشود. این دستورات شامل COMMIT (تثبیت تراکنش)، ROLLBACK (لغو تراکنش) و SAVEPOINT (ایجاد نقطه ذخیره) میشوند. با استفاده از TCL میتوانید عملیات تراکنشی را مدیریت کنید و تغییرات را به طور مستقل و قابل بازگشت اعمال کنید.
تفاوت بین دستورات DDL و DML را توضیح دهید.
دستورات DDL برای تعریف و تغییر ساختار پایگاه داده مورد استفاده قرار میگیرند، در حالی که دستورات DML برای مدیریت دادهها استفاده میشوند.
منظور از خواص ACID در DBMS چیست؟
Atomicity (اتمیت): Atomicity به معنای این است که یک تراکنش در پایگاه داده به صورت اتمی اجرا میشود، یعنی همه عملیات درون یک تراکنش به صورت کامل اجرا میشوند یا هیچکدام از آنها اعمال نمیشوند. اگر هر یک از عملیات داخل تراکنش با خطا مواجه شود، تمام تغییرات قبلی به طور کامل لغو میشوند (Rollback) و پایگاه داده به حالت اولیه بازمیگردد.
Consistency (یکپارچگی): Consistency به معنای این است که یک تراکنش پس از اجرا، پایگاه داده را از یک حالت معتبر به حالت معتبر دیگری منتقل میکند. با اعمال تغییرات تراکنش، قوانین یکپارچگی و عدم تضاد در پایگاه داده حفظ میشود. اگر یک تراکنش منجر به نقض قوانین یکپارچگی شود، تراکنش لغو میشود.
Isolation : Isolation به معنای این است که هر تراکنش باید به طور مستقل اجرا شود، بدون تداخل با سایر تراکنشها. یعنی تغییرات اعمال شده توسط یک تراکنش برای سایر تراکنشها قابل مشاهده نباشد تا از وقوع ناهمسانگردیها جلوگیری شود. این باعث میشود که تراکنشها به نوعی به ترتیب توالی اجرا شوند.
Durability (پایداری): Durability به معنای این است که پس از اعمال یک تراکنش موفق، تغییرات باید برای همیشه در پایگاه داده باقی بمانند و در صورت قطع برق، خرابی
آیا فضای خالی یا صفر به عنوان مقادیر NULL در پایگاه داده محاسبه می شود؟
در پایگاه داده، فضای خالی (blank space) یا صفر (zero) به عنوان مقادیر NULL در نظر گرفته نمیشوند. مقدار NULL در پایگاه داده بیانگر وجود مقدار نامشخص، ناشناخته یا نامعتبر است.
مفهوم NULL در پایگاه داده به این معنی است که برای یک ستون خاص در یک ردیف، مقداری وجود ندارد یا اطلاعات موجود نیست. NULL متفاوت از فضای خالی یا صفر است. فضای خالی یا صفر به مقادیر مشخصی اشاره میکنند، در حالی که NULL به مفهوم عدم وجود مقدار یا عدم ثبت آن میباشد.
توابع SQL:
- توابع رشتهای رایج در SQL را بیان کنید و آنها را توضیح دهید.
- توابع تاریخ و زمان معمول در SQL را بیان کنید و آنها را توضیح دهید.
- توابع محاسباتی و آماری رایج در SQL را بیان کنید و آنها را توضیح دهید.
برای جواب به این پست مراجعه نمایید.
JOIN ها در SQL چه کاربردی دارند و انواع JOIN ها را بیان کنید.
JOIN ها برای اتصال دادهها از جداول مختلف استفاده میشوند. انواع JOIN شامل INNER JOIN، LEFT JOIN، RIGHT JOIN و FULL JOIN میشوند.
تفاوت بین INNER JOIN و OUTER JOIN را توضیح دهید.
- INNER JOIN برای بازیابی رکوردهایی استفاده میشود که در هر دو جدول وجود دارند.
- به عنوان مثال:
SELECT * FROM customers INNER JOIN orders ON customers.customer_id =orders.customer_id;
- OUTER JOIN برای بازیابی تمام رکوردهای یک جدول و رکوردهای متناظر در جدول دیگر استفاده میشود.
- به عنوان مثال:
SELECT * FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id;
تفاوت union , union allرا توضیح دهید.
UNION:
- عملگر UNION نتایج دو کوئری را ترکیب میکند و نتایج تکراری را حذف میکند.
- نتیجه خروجی UNION شامل مجموعهای از رکوردهاست که ترکیب تمام رکوردهای یک کوئری با رکوردهای دیگر را نشان میدهد.
- ستونها و نوع دادهها باید در دو کوئری متناظر با هم سازگار باشند (باید همین تعداد ستون و همین نوع داده در هر دو کوئری وجود داشته باشد).
UNION ALL:
- عملگر UNION ALL نتایج دو کوئری را ترکیب میکند، اما نتایج تکراری را حذف نمیکند.
- نتیجه خروجی UNION ALL شامل تمام رکوردها از هر دو کوئری است، حتی اگر تکراری باشند.
- ستونها و نوع دادهها باید در دو کوئری متناظر با هم سازگار باشند (باید همین تعداد ستون و همین نوع داده در هر دو کوئری وجود داشته باشد).
بنابراین، اگر شما میخواهید نتایج را ترکیب کنید و تکرارها را حذف کنید، از عملگر UNION استفاده کنید. اما اگر میخواهید تمام رکوردها را ترکیب کنید، از عملگر UNION ALL استفاده کنید.
تفاوت بین PRIMARY KEY و UNIQUE KEY را توضیح دهید.
PRIMARY KEY و UNIQUE KEY هر دو برای اعمال محدودیتهای یکتاییت بر روی ستونهای یک جدول در پایگاه داده استفاده میشوند. اما تفاوت اصلی بین آنها در نحوه اعمال این محدودیتها و استفاده از آنها است. در زیر تفاوتهای اصلی بین PRIMARY KEY و UNIQUE KEY را شرح میدهم:
PRIMARY KEY:
- PRIMARY KEY برای شناسایی یکتا و یک رکورد خاص در جدول استفاده میشود.
- تنها یک PRIMARY KEY میتواند در هر جدول وجود داشته باشد.
- مقادیر PRIMARY KEY نمیتوانند NULL باشند و باید برای تمام رکوردها مقدار داشته باشند.
- اعمال PRIMARY KEY به طور خودکار شامل ایجاد یک شاخص (index) برای ستون مربوطه است که عملیات جستجو و بهرهبرداری بهتری را فراهم میکند.UNIQUE KEY:
- UNIQUE KEY نیز برای اعمال یکتاییت بر روی ستونها استفاده میشود، اما میتواند چندین UNIQUE KEY در یک جدول وجود داشته باشد.
- مقادیر UNIQUE KEY میتوانند NULL باشند، با این تفاوت که یک NULL به عنوان مقدار UNIQUE KEY در نسخههای جدید MySQL یا PostgreSQL مجاز است (در این صورت فقط یک رکورد NULL قابل قبول است).
- اعمال UNIQUE KEY نیز شامل ایجاد یک شاخص برای ستون مربوطه است.اهمیت تفاوت بین PRIMARY KEY و UNIQUE KEY در این است که PRIMARY KEY علاوه بر اعمال محدودیت یکتاییت، نقش اصلی در تشخیص رکورد مورد نظر و شناسایی آن را دارد، در حالی که UNIQUE KEY فقط برای اعمال یکتاییت استفاده میشود و نقش شناسایی رکورد را ندارد.
تفاوت بین دستورات DELETE و TRUNCATE چیست؟
- دستور DELETE برای حذف رکوردهای مشخص در یک جدول استفاده میشود و عملیات حذف را به صورت transactional انجام میدهد. این دستور میتواند با شرط WHERE همراه شود.
- دستور TRUNCATE برای حذف تمام رکوردها از یک جدول استفاده میشود و به صورت non-transactional انجام میشود. این دستور سریعتر از DELETE عمل میکند و فضای استفاده شده توسط جدول را بازیابی میکند.
چگونه از تراکنشها در SQL استفاده کنیم؟
- برای استفاده از تراکنشها در SQL، از دستورات BEGIN TRANSACTION، COMMIT و ROLLBACK استفاده میشود. با استفاده از BEGIN TRANSACTION، تراکنش را شروع کنید. سپس دستورات مربوط به تراکنش را اجرا کنید. در صورت موفقیت آمیز بودن عملیات، با استفاده از COMMIT تراکنش را تائید کنید. در غیر اینصورت، با استفاده از ROLLBACK تراکنش را لغو کنید.
چگونه رکوردها را به صورت صفحهبندی (Pagination) در SQL بازیابی کنیم؟
برای بازیابی رکوردها به صورت صفحهبندی در SQL، میتوانید از دستورات LIMIT و OFFSET (یا استفاده از فرمتهای دیگری که توسط سیستم مدیریت پایگاه داده پشتیبانی میشود) استفاده کنید. مثال: SELECT * FROM table_name LIMIT 10 OFFSET 20.
چگونه مقادیر تکراری را در یک جدول حذف کنیم (Duplicate Records) در SQL؟
برای حذف مقادیر تکراری در یک جدول در SQL، میتوانید از دستور DELETE و تابع Rank استفاده کنید.
مثال:
with CTE as(
SELECT *,
RANK() OVER(PARTITION BY C1,
C2
ORDER BY id) RankColumn
FROM Table_1
)
delete from Cte2
WHERE RankColumn> 1;
Triggers را توضیح دهید ؟
تریگرها (Triggers) در پایگاه دادهها، بخشی از قابلیتهایی هستند که به شما اجازه میدهند تا به صورت اتوماتیک عملیاتهایی را اجرا کنید، معمولاً بر اساس رویدادهایی که در جداول رخ میدهند. تریگرها میتوانند در پاسخ به وقوع یک رویداد (مانند وارد شدن رکورد جدید، به روزرسانی رکورد یا حذف رکورد) عملیاتهای خاصی را اجرا کنند. به طور کلی، تریگرها دارای سه ویژگی اصلی هستند:
رویداد (Event): رویدادی که با وقوع آن، تریگر فعال میشود. مثلاً وارد شدن یک رکورد جدید، به روزرسانی یک رکورد موجود یا حذف یک رکورد.
شرط (Condition): یک شرط که بررسی میشود تا تعیین کند آیا تریگر باید اجرا شود یا خیر. به عبارتی، شرطی که مشخص میکند آیا عملیاتی که منتظر وقوع رویداد هستیم، شرایط مورد نیاز را دارد یا خیر.
عملیات (Action): فعالیتهایی که در صورت وقوع رویداد و برقراری شرط، توسط تریگر انجام میشود. میتواند شامل تغییر دادهها در جدول فعلی یا جداول دیگر، اجرای یک دستور SQL، فراخوانی یک پروسهی ذخیرهشده (Stored Procedure) و غیره باشد.
با استفاده از تریگرها، شما میتوانید به صورت اتوماتیک و در زمان مناسب، کنترل بیشتری بر روی دادههای جدول و عملیاتهای صورت گرفته در پایگاه داده داشته باشید. تریگرها میتوانند برای اعمال قوانین تجاری، تغییرات تاریخچهی داده، تراکنشها و موارد دیگری استفاده شوند.
CREATE TRIGGER set_create_date
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
SET NEW.create_date = NOW();
END;
در این تریگر:
- set_create_date نام تریگر است که میتوانید آن را بر اساس نیاز خود تغییر دهید.
- BEFORE INSERT ON table_name مشخص میکند که تریگر قبل از انجام عملیات وارد کردن (INSERT) رکورد جدید در جدول مورد نظر اجرا شود.
- FOR EACH ROW مشخص میکند که تریگر برای هر رکورد جدیدی که درج میشود، اجرا شود.
- SET NEW.create_date = NOW(); تنظیم مقدار فیلد "create_date" برای رکورد جدید به تاریخ و زمان فعلی را انجام میدهد.
این تریگر میتواند در صورت اجرای عملیات وارد کردن رکورد جدید به جدول، خودکاراً مقدار فیلد "create_date" را تنظیم کند. این الگو را میتوان بر اساس نیاز خود تغییر داد و عملیاتهای مختلفی را در تریگر انجام داد.