آموزش دستورات SQL Server
آموزش دستورات SQL Server به همراه مثالهای ساده و کاربردی
CREATE DATABASE:
-- ایجاد پایگاه داده با نام MyDatabase
CREATE DATABASE MyDatabase;
CREATE TABLE:
-- ایجاد جدول Employees با ستونهای مشخص شده
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
DepartmentID INT
);
ALTER TABLE:
-- اضافه کردن ستون Salary به جدول Employees
ALTER TABLE Employees
ADD Salary DECIMAL(10, 2);
DROP TABLE:
-- حذف جدول Employees
DROP TABLE Employees;
INSERT INTO:
-- وارد کردن یک رکورد به جدول Employees
INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID)
VALUES (1, 'John', 'Doe', 101);
UPDATE:
-- بهروزرسانی مقدار Salary برای رکورد با EmployeeID برابر با 1
UPDATE Employees
SET Salary = 50000
WHERE EmployeeID = 1;
DELETE FROM:
-- حذف رکورد با EmployeeID برابر با 1 از جدول Employees
DELETE FROM Employees
WHERE EmployeeID = 1;
SELECT:
-- بازیابی تمامی اطلاعات از جدول Employees
SELECT * FROM Employees;
DISTINCT:
-- بازیابی مقادیر منحصر به فرد در ستون DepartmentID از جدول Employees
SELECT DISTINCT DepartmentID
FROM Employees;
WHERE:
-- بازیابی تمامی اطلاعات از جدول Employees که DepartmentID برابر با 101 است
SELECT * FROM Employees
WHERE DepartmentID = 101;
ORDER BY:
-- بازیابی تمامی اطلاعات از جدول Employees مرتب شده بر اساس ستون LastName
SELECT * FROM Employees
ORDER BY LastName;
GROUP BY:
-- گروهبندی اطلاعات بر اساس DepartmentID و شمارش تعداد کارکنان در هر دپارتمان
SELECT DepartmentID, COUNT(*)
FROM Employees
GROUP BY DepartmentID;
HAVING:
-- گروهبندی اطلاعات بر اساس DepartmentID و فیلتر بر اساس تعداد کارکنان بیشتر از 5
SELECT DepartmentID, COUNT()
FROM Employees
GROUP BY DepartmentID
HAVING COUNT() > 5;
INNER JOIN:
-- انجام INNER JOIN بین جدولهای Employees و Departments
SELECT e.FirstName, e.LastName, d.DepartmentName
FROM Employees e
INNER JOIN Departments d ON e.DepartmentID = d.DepartmentID;
LEFT JOIN:
-- انجام LEFT JOIN بین جدولهای Employees و Departments
SELECT e.FirstName, e.LastName, d.DepartmentName
FROM Employees e
LEFT JOIN Departments d ON e.DepartmentID = d.DepartmentID;
RIGHT JOIN:
-- انجام RIGHT JOIN بین جدولهای Employees و Departments
SELECT e.FirstName, e.LastName, d.DepartmentName
FROM Employees e
RIGHT JOIN Departments d ON e.DepartmentID = d.DepartmentID;
FULL JOIN:
-- انجام FULL JOIN بین جدولهای Employees و Departments
SELECT e.FirstName, e.LastName, d.DepartmentName
FROM Employees e
FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID;
UNION:
-- اجتماع دو نتیجه مشابه از دو کوئری متفاوت
SELECT FirstName, LastName
FROM Employees
UNION
SELECT ManagerFirstName, ManagerLastName
FROM Managers;
UNION ALL:
-- اجتماع همه نتایج تکراری یکسان از دو کوئری متفاوت
SELECT FirstName, LastName
FROM Employees
UNION ALL
SELECT ManagerFirstName, ManagerLastName
FROM Managers;
EXISTS:
-- بازیابی تمامی اطلاعات از جدول Employees که در جدول Managers هم وجود دارند
SELECT *
FROM Employees e
WHERE EXISTS (SELECT * FROM Managers m WHERE e.EmployeeID = m.EmployeeID);
NOT EXISTS:
-- بازیابی تمامی اطلاعات از جدول Employees که در جدول Managers وجود ندارند
SELECT *
FROM Employees e
WHERE NOT EXISTS (SELECT * FROM Managers m WHERE e.EmployeeID = m.EmployeeID);
IN:
-- بازیابی تمامی اطلاعات از جدول Employees که در دپارتمانهای 101 و 102 هستند
SELECT *
FROM Employees
WHERE DepartmentID IN (101, 102);
NOT IN:
-- بازیابی تمامی اطلاعات از جدول Employees که در دپارتمانهای 101 و 102 نیستند
SELECT *
FROM Employees
WHERE DepartmentID NOT IN (101, 102);
BETWEEN:
-- بازیابی تمامی اطلاعات از جدول Orders که تاریخ سفارش در بازه زمانی مشخص است
SELECT *
FROM Orders
WHERE OrderDate BETWEEN '2022-01-01' AND '2022-01-31';
LIKE:
-- بازیابی تمامی اطلاعات از جدول Products که نام محصول با 'App' شروع میشود
SELECT *
FROM Products
WHERE ProductName LIKE 'App%';
IS NULL:
-- بازیابی تمامی اطلاعات از جدول Customers که ایمیل نال است
SELECT *
FROM Customers
WHERE Email IS NULL;
IS NOT NULL:
-- بازیابی تمامی اطلاعات از جدول Customers که ایمیل نال نیست
SELECT *
FROM Customers
WHERE Email IS NOT NULL;
AVG():
-- بازیابی میانگین مقدار Salary از جدول Employees
SELECT AVG(Salary)
FROM Employees;
SUM():
-- بازیابی جمع مقدار Salary از جدول Employees
SELECT SUM(Salary)
FROM Employees;
COUNT():
-- بازیابی تعداد کل رکوردها از جدول Employees
SELECT COUNT(*)
FROM Employees;
MAX():
-- بازیابی حداکثر مقدار Salary از جدول Employees
SELECT MAX(Salary)
FROM Employees;
MIN():
-- بازیابی حداقل مقدار Salary از جدول Employees
SELECT MIN(Salary)
FROM Employees;
GROUP_CONCAT():
-- بازیابی ترکیبی از مقادیر LastName بر اساس DepartmentID از جدول Employees
SELECT DepartmentID, GROUP_CONCAT(LastName)
FROM Employees
GROUP BY DepartmentID;
CASE WHEN:
-- بازیابی نام و نسبت حقوقی بر اساس مقدار Salary از جدول Employees
SELECT FirstName,
CASE WHEN Salary > 50000 THEN 'High'
WHEN Salary > 30000 THEN 'Medium'
ELSE 'Low'
END AS SalaryLevel
FROM Employees;
DATEPART():
-- بازیابی سال و ماه سفارش و تعداد کل سفارشات از جدول Orders
SELECT DATEPART(YEAR, OrderDate) AS OrderYear,
DATEPART(MONTH, OrderDate) AS OrderMonth,
COUNT(*) AS TotalOrders
FROM Orders
GROUP BY DATEPART(YEAR, OrderDate), DATEPART(MONTH, OrderDate);
DATEDIFF():
-- بازیابی تعداد روز بین تاریخ سفارش و تاریخ ارسال از جدول Orders
SELECT DATEDIFF(DAY, OrderDate, ShippedDate) AS DaysToShip
FROM Orders;
DATEADD():
-- بازیابی تاریخ پایان دوره آزمایشی 3 ماهه بعد از تاریخ استخدام از جدول Employees
SELECT DATEADD(MONTH, 3, HireDate) AS ProbationEndDate
FROM Employees;
UPPER():
-- بازیابی نام خانوادگی با حروف بزرگ از جدول Employees
SELECT UPPER(LastName)
FROM Employees;
LOWER():
-- بازیابی نام خانوادگی با حروف کوچک از جدول Employees
SELECT LOWER(LastName)
FROM Employees;
LEFT():
-- بازیابی سه حرف اول از نام از جدول Employees
SELECT LEFT(FirstName, 3)
FROM Employees;
RIGHT():
-- بازیابی سه حرف آخر از نام خانوادگی از جدول Employees
SELECT RIGHT(LastName, 3)
FROM Employees;
LEN():
-- بازیابی طول نام از جدول Employees
SELECT LEN(FirstName) AS FirstNameLength
FROM Employees;
ROUND():
-- بازیابی مقدار Salary با دو رقم اعشار گرد شده از جدول Employees
SELECT ROUND(Salary, 2) AS RoundedSalary
FROM Employees;
CAST():
-- بازیابی مقدار Salary به صورت عدد صحیح از جدول Employees
SELECT CAST(Salary AS INT) AS RoundedSalary
FROM Employees;
CONVERT():
-- بازیابی تاریخ استخدام با فرمت مشخص از جدول Employees
SELECT CONVERT(VARCHAR(10), HireDate, 101) AS FormattedHireDate
FROM Employees;
COALESCE():
-- بازیابی نام مدیر یا عبارت 'No Manager' از جدول Employees
SELECT COALESCE(ManagerFirstName, 'No Manager') AS ManagerName
FROM Employees;
NULLIF():
-- بازیابی نام مدیر یا NULL از جدول Employees
SELECT NULLIF(ManagerFirstName, '') AS ManagerName
FROM Employees;
TOP():
-- بازیابی اولین 10 رکورد از جدول Products
SELECT TOP 10 *
FROM Products;
ROW_NUMBER():
-- بازیابی شماره ردیف بر اساس ترتیب نام خانوادگی از جدول Employees
SELECT ROW_NUMBER() OVER (ORDER BY LastName) AS RowNumber,
FirstName,
LastName
FROM Employees;
RANK():
-- بازیابی رتبه بر اساس مقدار Salary به صورت نزولی از جدول Employees
SELECT RANK() OVER (ORDER BY Salary DESC) AS Rank,
FirstName,
LastName,
Salary
FROM Employees;
DENSE_RANK():
-- بازیابی رتبه بر اساس مقدار Salary به صورت نزولی بدون انقضاء از جدول Employees
SELECT DENSE_RANK() OVER (ORDER BY Salary DESC) AS DenseRank,
FirstName,
LastName,
Salary
FROM Employees;
NTILE():
-- بازیابی کوارتیل بر اساس مقدار Salary به صورت نزولی از جدول Employees
SELECT NTILE(4) OVER (ORDER BY Salary DESC) AS Quartile,
FirstName,
LastName,
Salary
FROM Employees;
CTE (Common Table Expression):
-- استفاده از CTE برای بازیابی اطلاعات با رتبه بالا از جدول Employees
WITH EmployeeCTE AS (
SELECT EmployeeID, FirstName, LastName, Salary,
ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNumber
FROM Employees
)
SELECT EmployeeID, FirstName, LastName, Salary
FROM EmployeeCTE
WHERE RowNumber <= 10;
INDEXES:
-- ایجاد یک شاخص (اندیس) بر روی ستون DepartmentID در جدول Employees
CREATE INDEX IX_DepartmentID ON Employees(DepartmentID);
TRIGGERS:
-- ایجاد یک تریگر پس از وارد کردن اطلاعات جدید در جدول Employees
CREATE TRIGGER trgAfterInsertEmployee
ON Employees
AFTER INSERT
AS
BEGIN
-- منطق تریگر در اینجا
END;
STORED PROCEDURES:
-- ایجاد یک فرآیند ذخیره شده برای بازیابی اطلاعات کارمند با توجه به شناسه کارمند
CREATE PROCEDURE spGetEmployeeByID @EmployeeID INT
AS
BEGIN
-- منطق فرآیند در اینجا
END;
VIEWS:
-- ایجاد یک نمایش با نام vwHighSalaryEmployees برای نمایش اطلاعات کارمندان با حقوق بالای 50000
CREATE VIEW vwHighSalaryEmployees AS
SELECT FirstName, LastName, Salary
FROM Employees
WHERE Salary > 50000;
TRANSACTIONS:
-- شروع یک تراکنش SQL
BEGIN TRANSACTION;
-- دستورات SQL در اینجا
JOINS with USING clause:
-- استفاده از عبارت JOIN با استفاده از USING برای اتصال جدولهای Employees و Departments
SELECT e.FirstName, e.LastName, d.DepartmentName
FROM Employees e
JOIN Departments d USING (DepartmentID);
GRANT PERMISSIONS:
-- اختصاص مجوز SELECT به کاربر با نام user1 بر روی جدول Employees
GRANT SELECT ON Employees TO user1;