راهنمای جامع T-SQL در SQL Server: مرجع سریع و کاربردی
این مرجع سریع شامل دستورات T-SQL رایج برای SQL Server است که شامل عبارات SELECT، INSERT، UPDATE، DELETE و موارد دیگر میشود. یک راهنمای ضروری برای توسعهدهندگان و مدیران پایگاه داده که به دنبال مروری سریع بر دستورات SQL هستند.
عبارات SELECT
دستور SELECT پایه: تمام ستونها و ردیفهای یک جدول را بازمیگرداند.
SELECT * FROM TableName
SELECT با عبارت WHERE: تمام ستونها را برای ردیفهایی که معیارهای مشخص شده را برآورده میکنند، بازمیگرداند.
SELECT * FROM TableName WHERE ColumnName = 'Value'
SELECT با عبارت ORDER BY: تمام ستونها و ردیفها را از یک جدول، بر اساس یک یا چند ستون مرتب شده، بازمیگرداند.
SELECT * FROM TableName ORDER BY ColumnName ASC/DESC
SELECT با عبارت GROUP BY: ردیفهایی را که مقادیر یکسانی در ستونهای مشخص شده دارند، به ردیفهای خلاصهشده گروهبندی میکند.
SELECT ColumnName1, COUNT(ColumnName2) FROM TableName GROUP BY ColumnName1
SELECT با عبارت HAVING: گروهها را بر اساس یک شرط مشخص فیلتر میکند، که معمولاً با GROUP BY استفاده میشود.
SELECT ColumnName1, COUNT(ColumnName2) FROM TableName GROUP BY ColumnName1 HAVING COUNT(ColumnName2) > 1
عبارت SELECT DISTINCT: تنها مقادیر منحصربهفرد را در ستون(های) مشخص شده بازمیگرداند.
SELECT DISTINCT ColumnName FROM TableName
عبارت SELECT TOP: تعداد ردیفهای بازگردانده شده توسط کوئری را محدود میکند.
SELECT TOP 10 * FROM TableName
عبارت SELECT OFFSET FETCH (SQL Server 2012+): تعداد مشخصی از ردیفها را رد کرده و سپس تعداد مشخص شده بعدی از ردیفها را بازمیگرداند. برای صفحهبندی (pagination) مفید است.
SELECT * FROM TableName ORDER BY ColumnName OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY
SELECT با INNER JOIN: ردیفها را زمانی که مطابقت در هر دو جدول وجود دارد، بازمیگرداند. این نوع JOIN برای بازیابی دقیق دادهها از چندین جدول مرتبط کاربرد دارد.
SELECT t1.ColumnName, t2.ColumnName FROM Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.ID
SELECT با LEFT JOIN (یا LEFT OUTER JOIN): تمام ردیفها را از جدول سمت چپ و ردیفهای مطابق را از جدول سمت راست بازمیگرداند. اگر مطابقتی وجود نداشته باشد، برای سمت راست NULL برگردانده میشود. این یک ابزار قدرتمند برای تجزیه و تحلیل دادهها حتی در صورت عدم وجود تطابق کامل است.
SELECT t1.ColumnName, t2.ColumnName FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.ID = t2.ID
SELECT با RIGHT JOIN (یا RIGHT OUTER JOIN): تمام ردیفها را از جدول سمت راست و ردیفهای مطابق را از جدول سمت چپ بازمیگرداند. اگر مطابقتی وجود نداشته باشد، برای سمت چپ NULL برگردانده میشود. این دستور برای تمرکز بر دادههای جدول راست و کشف روابط کارآمد است.
SELECT t1.ColumnName, t2.ColumnName FROM Table1 t1 RIGHT JOIN Table2 t2 ON t1.ID = t2.ID
SELECT با FULL JOIN (یا FULL OUTER JOIN): زمانی که در یکی از جداول مطابقت وجود دارد، تمام ردیفها را بازمیگرداند. این یعنی ردیفها را زمانی که در جدول چپ یا راست مطابقت وجود دارد، برمیگرداند و برای عدم تطابق، NULL قرار میدهد. این کوئری برای ترکیب دادهها از هر دو جدول با حفظ تمام اطلاعات، حتی بدون تطابق، ایدهآل است.
SELECT t1.ColumnName, t2.ColumnName FROM Table1 t1 FULL JOIN Table2 t2 ON t1.ID = t2.ID
عملگر UNION: مجموعه نتایج دو یا چند عبارت SELECT را ترکیب میکند (مقادیر تکراری را حذف میکند). برای تجمیع دادهها از منابع مختلف مفید است.
SELECT ColumnName FROM Table1 UNION SELECT ColumnName FROM Table2
عملگر UNION ALL: مجموعه نتایج دو یا چند عبارت SELECT را ترکیب میکند (شامل مقادیر تکراری). این عملگر برای حفظ تمام ردیفها، حتی اگر تکراری باشند، کاربرد دارد.
SELECT ColumnName FROM Table1 UNION ALL SELECT ColumnName FROM Table2
عملگر INTERSECT: ردیفهایی را بازمیگرداند که در هر دو عبارت SELECT مشترک هستند. این برای یافتن نقاط اشتراک و همپوشانی دادهها بین دو مجموعه مفید است.
SELECT ColumnName FROM Table1 INTERSECT SELECT ColumnName FROM Table2
عملگر EXCEPT: ردیفهایی را بازمیگرداند که در عبارت SELECT اول وجود دارند اما در عبارت SELECT دوم نیستند. برای مقایسه تفاوتها بین دو مجموعه داده استفاده میشود.
SELECT ColumnName FROM Table1 EXCEPT SELECT ColumnName FROM Table2
عبارات INSERT
دستور INSERT پایه: یک ردیف جدید با مقادیر مشخص شده را به یک جدول اضافه میکند. این دستور برای افزودن دادههای جدید به پایگاه داده ضروری است.
INSERT INTO TableName (Column1, Column2) VALUES ('Value1', 'Value2')
INSERT با عبارت SELECT: ردیفهایی را با انتخاب دادهها از یک جدول دیگر به یک جدول اضافه میکند. این روش برای انتقال یا کپی دادهها بین جداول بسیار کارآمد است.
INSERT INTO TableName (Column1, Column2) SELECT ColumnA, ColumnB FROM AnotherTable WHERE Condition
عبارات UPDATE
دستور UPDATE پایه: دادههای موجود در یک جدول را بر اساس یک شرط مشخص تغییر میدهد. این دستور برای بهروزرسانی رکوردهای فعلی در پایگاه داده استفاده میشود.
UPDATE TableName SET Column1 = 'NewValue' WHERE ColumnName = 'Value'
UPDATE با JOIN: دادهها را در یک جدول بر اساس مقادیر مطابق از جدول دیگر بهروزرسانی میکند. این برای هماهنگسازی دادهها بین جداول مرتبط بسیار کاربردی است.
UPDATE t1 SET t1.Column1 = t2.ColumnA FROM Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.ID WHERE t2.ColumnB = 'SomeValue'
عبارات DELETE
دستور DELETE پایه: ردیفها را از یک جدول بر اساس یک شرط مشخص حذف میکند. این عملیات برای مدیریت فضای ذخیرهسازی و حفظ صحت دادهها حیاتی است.
DELETE FROM TableName WHERE ColumnName = 'Value'
حذف تمام ردیفها: تمام ردیفها را از یک جدول حذف میکند (بدون عبارت WHERE). این دستور باید با احتیاط زیاد استفاده شود.
DELETE FROM TableName
دستور TRUNCATE TABLE
TRUNCATE TABLE: تمام ردیفها را از یک جدول حذف میکند. این دستور سریعتر از DELETE بدون WHERE است و ستونهای Identity را بازنشانی میکند. TRUNCATE برای پاکسازی سریع جداول بزرگ ایدهآل است.
TRUNCATE TABLE TableName
عبارات CREATE
دستور CREATE TABLE: یک جدول جدید در پایگاه داده ایجاد میکند. این پایه و اساس سازماندهی و ذخیرهسازی دادهها است.
CREATE TABLE TableName (Column1 DataType PRIMARY KEY, Column2 DataType, Column3 DataType)
دستور CREATE DATABASE: یک پایگاه داده جدید ایجاد میکند. این اولین گام برای شروع کار با مجموعه دادههای جدید است.
CREATE DATABASE DatabaseName
دستور CREATE VIEW: یک جدول مجازی را بر اساس مجموعه نتایج یک عبارت SELECT ایجاد میکند. Viewها برای سادهسازی کوئریهای پیچیده و افزایش امنیت مفید هستند.
CREATE VIEW ViewName AS SELECT Column1, Column2 FROM TableName WHERE Condition
دستور CREATE INDEX: یک ایندکس بر روی یک جدول برای بازیابی سریعتر دادهها ایجاد میکند. ایندکسها به بهبود کارایی کوئریها کمک میکنند.
CREATE INDEX IndexName ON TableName (ColumnName)
دستور CREATE PROCEDURE: یک رویه ذخیرهشده (Stored Procedure) ایجاد میکند. Stored Procedureها برای کپسولهسازی منطق تجاری، افزایش عملکرد و امنیت استفاده میشوند.
CREATE PROCEDURE ProcedureName AS BEGIN SELECT * FROM TableName END
دستور CREATE FUNCTION: یک تابع تعریف شده توسط کاربر (User-Defined Function) ایجاد میکند. این توابع به توسعهدهندگان امکان میدهند تا عملیات پیچیده را در بلوکهای قابل استفاده مجدد سازماندهی کنند.
CREATE FUNCTION FunctionName (@Param1 DataType) RETURNS DataType AS BEGIN DECLARE @Result DataType; SET @Result = @Param1 + 1; RETURN @Result END
دستور CREATE TRIGGER: یک تریگر (Trigger) ایجاد میکند. تریگرها برای اجرای خودکار یک یا چند دستور SQL در پاسخ به رویدادهای خاص مانند INSERT، UPDATE یا DELETE بر روی یک جدول استفاده میشوند. این ابزار قدرتمندی برای حفظ یکپارچگی دادهها و اجرای قوانین تجاری است.
CREATE TRIGGER TriggerName ON TableName FOR INSERT, UPDATE, DELETE AS BEGIN -- Trigger logic here END
عبارات ALTER
ALTER TABLE ADD COLUMN: یک ستون جدید به یک جدول موجود اضافه میکند. این دستور برای توسعه و تغییر ساختار جداول پایگاه داده پس از ایجاد اولیه کاربرد دارد.
ALTER TABLE TableName ADD NewColumnName DataType
ALTER TABLE DROP COLUMN: یک ستون موجود را از یک جدول حذف میکند. این عمل باید با دقت انجام شود زیرا دادههای ستون حذف شده غیر قابل بازیابی خواهند بود.
ALTER TABLE TableName DROP COLUMN ColumnName
ALTER TABLE ALTER COLUMN: نوع داده یا ویژگیهای یک ستون موجود را تغییر میدهد. این برای تطبیق ساختار جدول با نیازهای جدید دادهای مفید است.
ALTER TABLE TableName ALTER COLUMN ColumnName NewDataType
عبارات DROP
دستور DROP TABLE: کل یک جدول را از پایگاه داده حذف میکند. این دستور باید با نهایت احتیاط استفاده شود چرا که تمام دادهها و ساختار جدول به صورت دائمی پاک میشوند.
DROP TABLE TableName
دستور DROP DATABASE: کل یک پایگاه داده را حذف میکند. استفاده از این دستور برگشتناپذیر است و منجر به از دست رفتن تمام دادهها و اشیاء مرتبط با پایگاه داده میشود.
DROP DATABASE DatabaseName
دستور DROP VIEW: یک View را حذف میکند. این دستور برای مدیریت و سازماندهی Viewهای موجود در پایگاه داده کاربرد دارد.
DROP VIEW ViewName
دستور DROP INDEX: یک ایندکس را حذف میکند. حذف ایندکس میتواند بر عملکرد کوئریها تأثیر بگذارد، بنابراین باید با در نظر گرفتن پیامدهای عملکردی انجام شود.
DROP INDEX IndexName ON TableName
دستور DROP PROCEDURE: یک رویه ذخیرهشده را حذف میکند. این برای پاکسازی و مدیریت Stored Procedureهای غیرضروری استفاده میشود.
DROP PROCEDURE ProcedureName
دستور DROP FUNCTION: یک تابع تعریف شده توسط کاربر را حذف میکند. حذف توابع باید با توجه به وابستگیهای احتمالی انجام شود.
DROP FUNCTION FunctionName
دستور DROP TRIGGER: یک تریگر را حذف میکند. این دستور برای مدیریت تریگرهای موجود و جلوگیری از اجرای خودکار عملیات ناخواسته کاربرد دارد.
DROP TRIGGER TriggerName
توابع و متغیرهای سیستمی
GETDATE(): تاریخ و زمان فعلی سیستم را بازمیگرداند. این تابع برای ثبت زمان رویدادها یا مهر زمانی (timestamping) در پایگاه داده استفاده میشود.
SELECT GETDATE()
NEWID(): یک شناسه منحصر به فرد (GUID) تولید میکند. این برای ایجاد کلیدهای اصلی (Primary Keys) منحصر به فرد در جداول مختلف مفید است.
SELECT NEWID()
@@ROWCOUNT: تعداد ردیفهای تحت تأثیر آخرین دستور را بازمیگرداند. این متغیر سیستمی برای بررسی موفقیت یا تأثیر یک عملیات SQL کاربرد دارد.
SELECT @@ROWCOUNT
@@IDENTITY: آخرین مقدار Identity تولید شده برای یک ستون را بازمیگرداند. این برای بازیابی مقدار کلید اصلی Auto-increment شده پس از INSERT مفید است.
SELECT @@IDENTITY
عبارات کنترل جریان
دستور IF…ELSE: یک بلوک کد را به صورت شرطی اجرا میکند. این برای منطق برنامهنویسی پیچیدهتر در T-SQL ضروری است.
IF Condition
BEGIN
-- Code if true
END
ELSE
BEGIN
-- Code if false
END
حلقه WHILE: یک بلوک کد را به طور مکرر تا زمانی که یک شرط صحیح است، اجرا میکند. این برای انجام عملیات تکراری در T-SQL کاربرد دارد.
WHILE Condition
BEGIN
-- Code to execute
END
بلوک BEGIN…END: چندین دستور SQL را در یک بلوک منطقی واحد گروهبندی میکند. این برای تعریف محدودههای کد در Stored Procedureها، توابع و تریگرها استفاده میشود.
BEGIN
-- Statement 1;
-- Statement 2;
END
کنترل تراکنش
BEGIN TRANSACTION: یک تراکنش جدید را آغاز میکند. تراکنشها برای اطمینان از یکپارچگی دادهها با گروهبندی عملیات SQL به یک واحد اتمی حیاتی هستند.
BEGIN TRANSACTION
COMMIT TRANSACTION: تمام تغییرات ایجاد شده در تراکنش فعلی را ذخیره (اعمال) میکند. این عمل باعث دائمی شدن تغییرات در پایگاه داده میشود.
COMMIT TRANSACTION
ROLLBACK TRANSACTION: تمام تغییرات ایجاد شده در تراکنش فعلی را خنثی میکند. این برای بازگرداندن پایگاه داده به حالت قبل از شروع تراکنش در صورت بروز خطا یا نیاز به لغو عملیات استفاده میشود.
ROLLBACK TRANSACTION
-
کل تراکنش جاری را لغو میکند.
-
پایگاه داده به حالت قبل از اجرای
BEGIN TRANSACTION
برمیگردد.