
دستورات SQL کاربردی که باید بدانید + فیلم آموزش اس کیو ال سرور
همانطور که می دانید دستورات اس کیو ال از ۴ دستور اصلی Select ،Update ،Delete و Insert تشکیل شده است. در این مقاله قصد داریم به صورت ساده دستورات مهم SQL را به شما آموزش دهیم، همچنین شما همراهان عزیز سایت فرانش را با عملگرهای SQL آشنا خواهیم کرد. در واقع دستورات SQL و نحوه کوئری نویسی را به طور کامل و پیشرفته توضیح خواهیم داد.
در عصری هستیم که حجمهایی عظیم از داده به صورت روزانه تولید میشوند و لازم است این دادهها در پایگاه داده نگه داری شوند. پایگاههای دادهی رابطهای (Relational Database) یکی از معروفترین انواع پایگاه داده هستند و دستورات SQL اساس این نوع پایگاه دادهها را تشکیل میدهند. به همین دلیل داشتنِ مهارت در نوشتن و فهم دستورات SQL یکی از مهارتهای شغلی مهم محسوب میشود. در این آموزش به معرفی دستورات و عبارات مهم SQL میپردازیم.
دستورات مورد بررسی به چهار دستهی اساسی تقسیم میشوند:
- (Data Definition Language (DDL: دستوراتی که از آنها برای تعریف ساختار پایگاه داده استفاده میشود.
- (Data Manipulation Language (DML: دستوراتی که از آنها برای تغییر دادههای موجود در پایگاه داده استفاده میشود.
- (Data Control Language (DCL: دستوراتی که از آنها برای کنترل مجوزهای کاربری و کنترل سیستم پایگاه داده استفاده میشود.
- (Transaction Control Language (TCL: دستوراتی که از آنها برای مدیریت تراکنشهای (Transaction) پایگاه داده استفاده میشود.
در مثالهای این آموزش، دستورات SQL را روی جدول زیر اجرا میکنیم.
mployeeID | EmployeeName | Emergency ContactName | PhoneNumber | Address | City | Country |
01 | Shanaya | Abhinay | 9898765612 | Oberoi Street 23 | Mumbai | India |
02 | Anay | Soumya | 9432156783 | Marathalli House No 23 | Delhi | India |
03 | Preeti | Rohan | 9764234519 | Queens Road 45 | Bangalore | India |
04 | Vihaan | Akriti | 9966442211 | Brigade Road Block 4 | Hyderabad | India |
05 | Manasa | Shourya | 9543176246 | Mayo Road 23 | Kolkata | India |
حاضرید؟!
کامنت در SQL
دو روش برای نوشتن کامنت Comment SQL وجود دارد: کامنتهای تک خطی (Single-Line Comment) و کامنتهای چند خطی (Multi-Line Comment).
کامنتهای تک خطی
دستورات تک خطی با دو علامت (-) شروع میشوند. کامپایلر خطی را که پس از — آمده است، نادیده میگیرد.
مثال:
--Select all: SELECT * FROM Employee_Info;
کامنتهای چند خطی
کامنتهای چند خطی با علامت /* شروع و با علامت */ خاتمه مییابند. کامپایلر تمام کلماتی را، که بین این دو علامت آمدهاند، نادیده میگیرد.
مثال:
/*Select all the columns of all the records from the Employee_Info table:*/ SELECT * FROM Students;
دورههای مرتبط در فرانش
آموزش دستورات DDL در SQL
در این بخش با دستورات DDL در SQL آشنا میشویم که به ما در تعریف ساختار پایگاه داده کمک میکنند. این دستورات به شکل زیرند:
- CREATE
- DROP
- TRUNCATE
- ALTER
- BACKUP DATABASE
دستور Create در SQL
از این دستور برای ساخت یک پایگاه داده یا جدول (Table) استفاده میشود.
عبارت ‘CREATE DATABASE’
همانطور که از نام عبارت پیداست، از آن برای ساخت پایگاه داده استفاده میشود.
سینتکس دستور
CREATE DATABASE DatabaseName;
مثال:
REATE DATABASE Employee;
عبارت ‘CREATE TABLE’
از این عبارت برای ساخت جدول در پایگاه داده استفاده میشود.
سینتکس دستور
CREATE TABLE TableName (Column1 datatype,Column2 datatype,Column3 datatype,…. ColumnN datatype);
مثال:
CREATE TABLE Employee_Info ( EmployeeID int, EmployeeName varchar(255), Emergency ContactName varchar(255), PhoneNumber int, Address varchar(255), City varchar(255), Country varchar(255) );
میتوانید از جدولی دیگر برای ساخت یک جدول استفاده کنید. به عبارت زیر توجه کنید.
عبارت ‘CREATE TABLE AS’
سینتکس دستور
CREATE TABLE NewTableName ASSELECT Column1, column2,…, ColumnNFROM ExistingTableNameWHERE ….;
مثال:
CREATE TABLE ExampleTable AS SELECT EmployeeName, PhoneNumber FROM Employee_Info;
دستور Drop در SQL
از این دستور برای حذف یک پایگاه داده یا جدولِ موجود استفاده میشود.
عبارت ‘DROP DATABASE’
از این دستور برای حذف یک پایگاه دادهی موجود استفاده میشود. پس از اجرای این دستور، تمام اطلاعات موجود در پایگاه داده از بین میرود.
سینتکس دستور
DROP DATABASE DatabaseName;
مثال:
DROP DATABASE Employee;
عبارت ‘DROP TABLE’
از این دستور برای حذف یک جدول موجود در پایگاه داده استفاده میشود. پس از اجرای این دستور، تمام اطلاعات موجود در جدول از بین میرود.
سینتکس دستور
DROP TABLE DatabaseName;
مثال:
DROP Table Employee_Info;
دستور Truncate در SQL
از این دستور برای پاک کردن اطلاعات موجود در جدول استفاده میشود. خود جدول با این دستور حذف نمیشود. پس از اجرای این دستور، اطلاعات موجود در جدول را از دست میدهید، اما خود جدول در پایگاه داده باقی میماند.
سینتکس دستور
TRUNCATE TABLE TableName;
مثال:
TRUNCATE Table Employee_Info;
دستور Alter در SQL
از این دستور برای حذف، تغییر یا افزودن Constraint یا ستون (Column) به جداول موجود استفاده میشود.
عبارت ‘ALTER TABLE’
از این دستور برای حذف، تغییر یا افزودن ستون (Column) به جداول موجود استفاده میشود.
عبارت ‘ALTER TABLE’ به همراه ADD/DROP COLUMN
میتوانید عبارت ALTER TABLE را طبق نیازهای خود و با استفاده از دستور ADD/DROP COLUMN تغییر دهید. برای افزودن یک ستون، از دستور ADD COLUMN و برای حذف ستون از دستور DROP COLUMN استفاده کنید.
سینتکس دستور
ALTER TABLE TableNameADD ColumnName Datatype; ALTER TABLE TableNameDROP COLUMN ColumnName;
مثال:
--ADD Column BloodGroup: ALTER TABLE Employee_Info ADD BloodGroup varchar(255); --DROP Column BloodGroup: ALTER TABLE Employee_Info DROP COLUMN BloodGroup ;
عبارت ‘ALTER TABLE’ به همراه ALTER/MODIFY COLUMN
از این دستور برای تغییر نوع دادهای (Datatype) یک ستونِ جدول استفاده میشود.
سینتکس دستور
ALTER TABLE TableNameALTER COLUMN ColumnName Datatype; ALTER TABLE TableNameDROP COLUMN ColumnName;
مثال:
--Add a column DOB and change the data type to Date. ALTER TABLE Employee_Info ADD DOB year; ALTER TABLE Employee_Info ALTER DOB date;
SQL Backup Database Script
از این عبارت برای بکآپ گیری کامل از یک پایگاه دادهی موجود استفاده میشود.
سینتکس دستور
BACKUP DATABASE DatabaseNameTO DISK = ‘filepath’;
مثال:
BACKUP DATABASE Employee TO DISK = 'C:UsersSahitiDesktop';
میتوانید از Deferential Back Up نیز استفاده کنید. در این نوع بکآپ گیری، تنها از قسمتهایی بکآپ گرفته میشود که بعد از بکآپ گیری قبلی تغییر کردهاند.
سینتکس دستور
BACKUP DATABASE DatabaseNameTO DISK = ‘filepath’WITH DIFFERENTIAL;
مثال:
BACKUP DATABASE Employee TO DISK = 'C:UsersSahitiDesktop' WITH DIFFERENTIAL;
خُب، دستورات DDL را یاد گرفتیم. پیش از رفتن به سراغ دستوراتی که اطلاعات پایگاه داده را تغییر میدهند، بهتر است با انواع کلیدها (Key) و Constraintها آشنا شویم.
انواع کلیدها در SQL Server
به طور کل 7 نوع کلید را میتوانیم در یک پایگاه داده در نظر بگیرید. جدول زیر را درنظر بگیرید، از آن برای توضیح انواع کلیدها در Sql server استفاده میکنیم.
- کلید کاندید (Candidate Key): مجموعهای از خصیصهها (Attribute) که میتوانند یک سطر جدول را از سایر سطرها جدا کنند، کلید کاندید خوانده میشوند. یک جدول میتواند بیش از یک کلید کاندید داشته باشد. یکی از این کلیدهای کاندید به عنوان کلید اصلی (Primary Key) درنظر گرفته میشود. در مثال بالا EmployeeID، InsuranceNumber و PanNumber کلید کاندید درنظر گرفته میشوند، چون هر یک میتوانند به تنهایی یک تاپل (Tuple) را از سایر تاپلها جدا کنند.
- ابر کلید (Super Key): مجموعهای از خصیصهها که میتوانند یک تاپل را از سایر تاپلها جدا کنند، ابر کلید خوانده میشوند. پس کلیدهای کاندید، اصلی و منحصربهفرد، ابرکلید هستند. اما عکس این قضیه درست نیست.
- کلید اصلی: مجموعهای از خصیصهها که میتوانند یک تاپل را شناسایی کنند، نیز یک کلید اصلی نامیده میشوند. در مثال بالا چون EmployeeID، InsuranceNumber و PanNumber کلید کاندید هستند، پس میتوان یکی از آنها را به عنوان کلید اصلی درنظر گرفت. در این مثال EmployeeID را به عنوان کلید اصلی درنظر گرفتهایم.
- کلید فرعی (Alternate Key): کلیدهای فرعی، آن دسته از کلیدهای کاندیدی هستند که به عنوان کلید اصلی انتخاب نکردهایم. در مثال بالا، InsuranceNumber و PanNumber کلید فرعی هستند.
- کلید منحصر به فرد (Unique Key): کلید منحصر به فرد، شبیه کلید اصلی است، اما یکی از ستونها میتواند مقدار Null داشته باشد. در این مثال میتوانیم InsuranceNumber و PanNumber را کلیدهای منحصر به فرد درنظر بگیریم.
- کلید خارجی (Foreign Key): یک خصیصه میتواند کلیدِ خارجیِ خصیصهی دیگر محسوب شود. در این حالت تنها میتواند مقادیری را به خود بگیرد که مقادیر اصلی خصیصهی مورد ارجاع هستند. در مثال بالا، خصیصهی EmployeeID در جدول Employee_Information به خصیصهی EmployeeID در جدول Employee_Salary ارجاع میدهد.
- کلید ترکیبی (Composite Key): یک کلید ترکیبی، ترکیبی از دو یا چند ستون است که در کنار هم میتوانند یک تاپل را از سایر تاپلهای جدول جدا کنند. در این مثال میتوانیم EmployeeID و Month-Year_Of_Salary را با هم درنظر بگیریم و هر تاپل جدول را از سایر تاپلها جدا کنیم.
دستورات Constraint در SQL چیست
برای مشخص کردن قوانین روی دادههای جدول از Constraintها استفاده میکنیم. در زیر انواع مختلف Constraintها را میبینید:
- NOT NULL
- UINIQUE
- CHECK
- DEFAULT
- INDEX
NOT NULL
با این Constraint دیگر یک ستون نمیتواند مقدار NULL به خود بگیرد.
مثال:
--NOT NULL on Create Table CREATE TABLE Employee_Info ( EmployeeID int NOT NULL, EmployeeName varchar(255) NOT NULL, Emergency ContactName varchar(255), PhoneNumber int NOT NULL, Address varchar(255), City varchar(255), Country varchar(255) ); --NOT NULL on ALTER TABLE ALTER TABLE Employee_Info MODIFY PhoneNumber int NOT NULL;
UNIQUE
با این Constraint تمام مقادیر یک ستون منحصر به فرد هستند.
مثال:
--UNIQUE on Create Table CREATE TABLE Employee_Info ( EmployeeID int NOT NULL UNIQUE, EmployeeName varchar(255) NOT NULL, Emergency ContactName varchar(255), PhoneNumber int NOT NULL, Address varchar(255), City varchar(255), Country varchar(255) ); --UNIQUE on Multiple Columns CREATE TABLE Employee_Info ( EmployeeID int NOT NULL, EmployeeName varchar(255) NOT NULL, Emergency ContactName varchar(255), PhoneNumber int NOT NULL, Address varchar(255), City varchar(255), Country varchar(255), CONSTRAINT UC_Employee_Info UNIQUE(Employee_ID, PhoneNumber) ); --UNIQUE on ALTER TABLE ALTER TABLE Employee_Info ADD UNIQUE (Employee_ID); --To drop a UNIQUE constraint ALTER TABLE Employee_Info DROP CONSTRAINT UC_Employee_Info;
CHECK
با این Constraint تمام مقادیر یک ستون از شرط خاصی پیروی میکنند.
مثال:
--CHECK Constraint on CREATE TABLE CREATE TABLE Employee_Info ( EmployeeID int NOT NULL, EmployeeName varchar(255), Emergency ContactName varchar(255), PhoneNumber int, Address varchar(255), City varchar(255), Country varchar(255) CHECK (Country=='India') ); --CHECK Constraint on multiple columns CREATE TABLE Employee_Info ( EmployeeID int NOT NULL, EmployeeName varchar(255), Emergency ContactName varchar(255), PhoneNumber int, Address varchar(255), City varchar(255), Country varchar(255) CHECK (Country = 'India' AND Cite = 'Hyderabad') ); --CHECK Constraint on ALTER TABLE ALTER TABLE Employee_Info ADD CHECK (Country=='India'); --To give a name to the CHECK Constraint ALTER TABLE Employee_Info ADD CONSTRAINT CheckConstraintName CHECK (Country=='India'); --To drop a CHECK Constraint ALTER TABLE Employee_Info DROP CONSTRAINT CheckConstraintName;
DEFAULT
وقتی هیچ مقداری برای ستون مشخص نشده باشد، این Constraint حاوی مقادیر پیشفرض است.
مثال:
--DEFAULT Constraint on CREATE TABLE CREATE TABLE Employee_Info ( EmployeeID int NOT NULL, EmployeeName varchar(255), Emergency ContactName varchar(255), PhoneNumber int, Address varchar(255), City varchar(255), Country varchar(255) DEFAULT 'India' ); --DEFAULT Constraint on ALTER TABLE ALTER TABLE Employee_Info ADD CONSTRAINT defau_Country DEFAULT 'India' FOR Country; --To drop the Default Constraint ALTER TABLE Employee_Info ALTER COLUMN Country DROP DEFAULT;
INDEX
با استفاده از این Constraint میتوانید در جداول ایندکس درست کنید و با استفاده از این ایندکسها سریعتر دادهها را از پایگاه داده بخوانید.
سینتکس
–Create an Index where duplicate values are allowedCREATE INDEX IndexNameON TableName (Column1, Column2, …ColumnN); –Create an Index where duplicate values are not allowedCREATE UNIQUE INDEX IndexNameON TableName (Column1, Column2, …ColumnN);
مثال:
CREATE INDEX idex_EmployeeName ON Persons (EmployeeName); --To delete an index in a table DROP INDEX Employee_Info.idex_EmployeeName;
دستورات DML در SQL چیست؟
در این بخش از دستورات SQL، دستوراتی را یاد میگیرید که به شما در تغییر پایگاه داده کمک میکنند. این دستورات به صورت زیرند:
- USE
- INSERT INTO
- UPDATE
- DELETE
- SELECT
علاوه بر این دستورات، عمگرها/توابعی نیز برای تغییر دادههای پایگاه داده داریم:
- Operatorها (عملگرها)
- توابع Aggregate
- توابع NULL
- Alias و عبارتCase
USE
از عبارت USE برای انتخاب پایگاه دادهای استفاده میشود که میخواهید با آن کار کنید.
سینتکس
USE DatabaseName;
مثال:
USE Employee;
INSERT INTO
از این عبارت برای افزودن رکوردهای جدید به جدول استفاده میشود.
سینتکس
INSERT INTO TableName (Column1, Column2, Column3, …,ColumnN)VALUES (value1, value2, value3, …); –If you don’t want to mention the column names then use the below syntax INSERT INTO TableNameVALUES (Value1, Value2, Value3, …);
مثال:
INSERT INTO Employee_Info(EmployeeID, EmployeeName, Emergency ContactName, PhoneNumber, Address, City, Country) VALUES ('06', 'Sanjana','Jagannath', '9921321141', 'Camel Street House No 12', 'Chennai', 'India'); INSERT INTO Employee_Info VALUES ('07', 'Sayantini','Praveen', '9934567654', 'Nice Road 21', 'Pune', 'India');
UPDATE
از این عبارت برای تغییر رکوردهای موجود در جدول استفاده میشود.
سینتکس
UPDATE TableNameSET Column1 = Value1, Column2 = Value2, …WHERE Condition;
مثال:
UPDATE Employee_Info SET EmployeeName = 'Aahana', City= 'Ahmedabad' WHERE EmployeeID = 1;
DELETE
از این عبارت برای حذف رکوردهای موجود در جدول استفاده میشود.
سینتکس
DELETE FROM TableName WHERE Condition;
مثال:
DELETE FROM Employee_Info WHERE EmployeeName='Preeti';
SELECT
از این عبارت برای انتخاب دادههای موجود در جدول استفاده میشود و این دادهها به صورت یک جدول به نام result-set برگردانده میشوند.
سینتکس
SELECT Column1, Column2, …ColumNFROM TableName; –(*) is used to select all from the tableSELECT * FROM table_name; — To select the number of records to return use:SELECT TOP 3 * FROM TableName;
مثال:
SELECT EmployeeID, EmployeeName FROM Employee_Info; --(*) is used to select all from the table SELECT * FROM Employee_Info; -- To select the number of records to return use: SELECT TOP 3 * FROM Employee_Info;
میتوانید از کلیدواژههای زیر به همراه عبارت SELECT استفاده کنید:
- DISTINCT
- ORDER BY
- GROUP BY
- HAVING Clause
- INTO
عبارت ‘SELECT DISTINCT’
این عبارت تنها مقادیر غیر مشابه را برمیگرداند.
سینتکس
SELECT DISTINCT Column1, Column2, …ColumnNFROM TableName;
مثال
SELECT DISTINCT PhoneNumber FROM Employee_Info;
عبارت ‘ORDER BY’
از عبارت ORDER BY برای مرتب کردن خروجی به صورت صعودی یا نزولی استفاده میشود. نتایج به طور پیش فرض به صورت صعودی مرتب میشوند. اگر میخواهید نتایج به صورت نزولی مرتب شوند، باید از واژهی کلیدی DESC استفاده کنید.
سینتکس
SELECT Column1, Column2, …ColumnNFROM TableNameORDER BY Column1, Column2, … ASC|DESC;
مثال
-- Select all employees from the 'Employee_Info' table sorted by EmergencyContactName: SELECT * FROM Employee_Info ORDER BY EmergencyContactName; -- Select all employees from the 'Employee_Info' table sorted by EmergencyContactName in Descending order: SELECT * FROM Employee_Info ORDER BY EmergencyContactName DESC; -- Select all employees from the 'Employee_Info' table sorted by EmergencyContactName and EmployeeName: SELECT * FROM Employee_Info ORDER BY EmergencyContactName, EmployeeName; /* Select all employees from the 'Employee_Info' table sorted by EmergencyContactName in Descending order and EmployeeName in Ascending order: */ SELECT * FROM Employee_Info ORDER BY EmergencyContactName ASC, EmployeeName DESC;
عبارت ‘GROUP BY’
از عبارت GROUP BY برای تجمیع توابع استفاده میشود تا جدول result-set با یک یا چند ستون تشکیل شود.
سینتکس
SELECT Column1, Column2,…, ColumnNFROM TableNameWHERE ConditionGROUP BY ColumnName(s)ORDER BY ColumnName(s);
مثال
-- To list the number of employees from each city. SELECT COUNT(EmployeeID), City FROM Employee_Info GROUP BY City;
‘HAVING’ Clause
چون نمیتوانیم از کلیدواژهی WHERE در همهجا استفاده کنیم، از HAVING استفاده میکنیم.
سینتکس
SELECT ColumnName(s)FROM TableNameWHERE ConditionGROUP BY ColumnName(s)HAVING ConditionORDER BY ColumnName(s);
مثال
/* To list the number of employees in each city. The employees should be sorted high to low and only those cities must be included who have more than 5 employees:*/ SELECT COUNT(EmployeeID), City FROM Employee_Info GROUP BY City HAVING COUNT(EmployeeID) > 2 ORDER BY COUNT(EmployeeID) DESC;
عبارت ‘SELECT INTO’
از عبارت SELECT INTO برای کپی داده از یک جدول به جدولی دیگر استفاده میشود.
سینتکس
SELECT *INTO NewTable [IN ExternalDB]FROM OldTableWHERE Condition;
مثال
-- To create a backup of database 'Employee' SELECT * INTO EmployeeBackup FROM Employee; --To select only few columns from Employee SELECT EmployeeName, PhoneNumber INTO EmployeeContactDetails FROM Employee; SELECT * INTO BlrEmployee FROM Employee WHERE City = 'Bangalore';
همراهان گرامی سایت فرانش، در صورتیکه میخواهید تبدیل به یک مدیر بانک اطلاعاتی شوید این محصول را از دست ندهید:
عملگر ها در SQL
عملگرهای موجود در SQL به صورت زیرند:
حالا به بررسی هر کدام میپردازیم.
عملگرهای حسابی
عملگر | توضیحات |
% | باقی مانده [A % B] |
/ | تقسیم [A / B] |
* | ضرب [A * B] |
– | تفریق [A – B] |
+ | جمع [A + B] |
عملگرهای بیتی
عملگر | توضیحات |
^ | بیتیExclusive OR (XOR) [A ^ B] |
| | بیتی OR [A | B] |
& | بیتی AND [A & B] |
عملگرهای مقایسهای
عملگر | توضیحات |
<> | نابرابری [A <> B] |
<= | کوچکتر مساوی [A <= B] |
>= | بزرگتر مساوی [A >= B] |
< | کوچکتر از [A < B] |
> | بزرگتر از [A > B] |
= | مساوی [A = B] |
عملگرهای ترکیبی
عملگر | توضیحات |
|*= | انتسابOR بیتی[A |*= B] |
^-= | انتساب Exclusive بیتی [A ^-= B] |
&= | انتساب AND بیتی [A &= B] |
%= | انتساب باقی مانده [A %= B] |
/= | انتساب تقسیم [A /= B] |
*= | انتساب ضرب [A*= B] |
-= | انتساب تفریق [A-= B] |
+= | انتساب جمع [A+= B] |
عملگرهای منطقی
عملگرهای منطقی موجود در SQL به صورت زیرند:
- AND
- OR
- NOT
- BETWEEN
- LIKE
- IN
- EXISTS
- ALL
- IN
AND
از این عملگر برای فیلتر کردن رکوردهایی استفاده میشود که به بیش از یک شرط وابسته هستند. با این عملگر آن دسته از رکوردهایی که تمام شروط را (که با AND از هم جدا میشوند) رعایت و خروجی را TRUE کنند، نمایش داده میشوند.
سینتکس
SELECT Column1, Column2, …, ColumnNFROM TableNameWHERE Condition1 AND Condition2 AND Condition3 …;
مثال
SELECT * FROM Employee_Info WHERE City='Mumbai' AND City='Hyderabad';</pre>
عملگر OR
با این عملگر آن دسته از رکوردهایی که یکی از شروط را (که با OR از هم جدا میشوند) رعایت و خروجی را TRUE کنند، نمایش داده میشوند.
سینتکس
SELECT Column1, Column2, …, ColumnNFROM TableNameWHERE Condition1 OR Condition2 OR Condition3 …;
مثال
SELECT * FROM Employee_Info WHERE City='Mumbai' OR City='Hyderabad';
عملگر NOT
وقتی میخواهیم رکوردهایی را نمایش دهیم که شرطی را رعایت نمیکنند، از این عملگر استفاده میکنیم.
سینتکس
SELECT Column1, Column2, …, ColumnNFROM TableNameWHERE NOT Condition;
مثال
SELECT * FROM Employee_Info WHERE NOT City='Mumbai';
نکته: میتوانید سه عملگر بالا را با هم ترکیب کرده و یک پرسوجو به صورت زیر بنویسید:
SELECT * FROM Employee_Info WHERE NOT Country='India' AND (City='Bangalore' OR City='Hyderabad');
عملگر BETWEEN
وقتی میخواهیم رکوردهایِ موجود در یک محدودهی مشخص را انتخاب کنیم، از این عمگلر استفاده میکنیم. این عملگر Inclusive است و مقادیر مرزی را نیز درنظر میگیرد.
سینتکس
SELECT ColumnName(s)FROM TableNameWHERE ColumnName BETWEEN Value1 AND Value2;
مثال
SELECT * FROM Employee_Salary WHERE Salary BETWEEN 40000 AND 50000;
عملگر LIKE
از این عملگر در WHERE و برای مشخص کردن الگویی خاص در یک ستون جدول استفاده میشود. در کل دو وایلدکارد (Wildcard) داریم که میتوانیم در کنار LIKE از آنها استفاده کنیم.
- % 0 یا بیشتر کاراکترِ مشابه
- _ دقیقاً 1 کاراکتر مشابه
سینتکس
SELECT ColumnName(s)FROM TableNameWHERE ColumnName LIKE pattern;
در جدول زیر میتوانید الگوهای مختلفی را ببینید که ساخت آنها با عملگر LIKE ممکن است.
شرط عملگر LIKE | توضیحات |
WHERE CustomerName LIKE ‘v% | هر مقداری را، که با ‘v’ شروع شود، پیدا میکند |
WHERE CustomerName LIKE ‘%v’ | هر مقداری را، که با ‘v’ تمام شود، پیدا میکند |
WHERE CustomerName LIKE ‘%and%’ | هر مقداری را، که دارای عبارت ‘and’ باشد، پیدا میکند |
WHERE CustomerName LIKE ‘_q%’ | هر مقداری را، که دارای حرف ‘q’ در دومین مکان باشد، پیدا میکند |
WHERE CustomerName LIKE ‘u_%_%’ | هر مقداری را، که با حرف ‘u’ شروع شود و حداقل سه حرفی باشد، پیدا میکند |
WHERE ContactName LIKE ‘m%a’ | هر مقداری را، که با ‘m’ شروع و با ‘a’ تمام شود، پیدا میکند |
مثال
SELECT * FROM Employee_Info WHERE EmployeeName LIKE 'S%';
عملگر IN
از این عملگر برای شروط چندگانهی OR استفاده میشود. با این عملگر میتوانید چندین مقدار را در یک WHEREمشخص کنید.
سینتکس
SELECT ColumnName(s)FROM TableNameWHERE ColumnName IN (Value1,Value2…);
مثال
SELECT * FROM Employee_Info WHERE City IN ('Mumbai', 'Bangalore', 'Hyderabad');
نکته: میتوانید از IN در نوشتن پرسوجوهای تودرتو نیز استفاده کنید.
عملگر EXISTS
از این عملگر برای بررسی موجود بودن یا نبودن یک رکورد استفاده میشود.
سینتکس
SELECT ColumnName(s)FROM TableNameWHERE EXISTS(SELECT ColumnName FROM TableName WHERE condition);
مثال
SELECT EmergencyContactName FROM Employee_Info WHERE EXISTS (SELECT EmergencyContactName FROM Employee_Info WHERE EmployeeId = 05 AND City = 'Kolkata');
عملگر ALL
از عملگر ALL در یک WHERE یا HAVING استفاده میشود و اگر تمام پرسوجوهای داخلی، شرط را رعایت کنند، مقدار TRUE برمیگرداند.
سینتکس
SELECT ColumnName(s)FROM TableNameWHERE ColumnName operator ALL(SELECT ColumnName FROM TableName WHERE condition);
مثال
SELECT EmployeeName FROM Employee_Info WHERE EmployeeID = ALL (SELECT EmployeeID FROM Employee_Info WHERE City = 'Hyderabad');
عملگر ANY
مانند عملگر ALL، از عملگر ANY نیز در یک WHERE یا HAVING استفاده میشود و اگر یکی از پرسوجوهای داخلی شرط را رعایت کند، مقدار TRUE برمیگرداند.
سینتکس
SELECT ColumnName(s)FROM TableNameWHERE ColumnName operator ANY(SELECT ColumnName FROM TableName WHERE condition);
مثال
SELECT EmployeeName FROM Employee_Info WHERE EmployeeID = ANY (SELECT EmployeeID FROM Employee_Info WHERE City = 'Hyderabad' OR City = 'Kolkata');
دورههای مرتبط در فرانش
توابع Aggregate
در این بخش از دستوراتِ SQL، به توابع زیر میپردازیم:
- MIN()
- MAX()
- COUNT()
- SUM()
- AVG()
تابع MIN()
این تابع کوچکترین مقدار را در ستون انتخابی بر میگرداند.
سینتکس
SELECT MIN(ColumnName)FROM TableNameWHERE Condition;
مثال
SELECT MIN(EmployeeID) AS SmallestID FROM Employee_Info;
تابع MAX()
این تابع بزرگترین مقدار را در ستون انتخابی بر میگرداند.
سینتکس
SELECT MAX(ColumnName)FROM TableNameWHERE Condition;
مثال
SELECT MAX(Salary) AS LargestFees FROM Employee_Salary;
تابع COUNT()
این تابع تعداد سطرهایی را برمیگرداند که با معیاری خاص همخوانی دارند.
سینتکس
SELECT COUNT(ColumnName)FROM TableNameWHERE Condition;
مثال
SELECT COUNT(EmployeeID) FROM Employee_Info;
تابع SUM()
این تابع مجموعِ مقادیر ستونی را برمیگرداند که نوع دادهی عددی دارد.
سینتکس
SELECT SUM(ColumnName)FROM TableNameWHERE Condition;
مثال
SELECT SUM(Salary) FROM Employee_Salary;
تابع AVG()
این تابع میانگین مقادیر ستونی را برمیگرداند که نوع دادهی عددی دارد.
سینتکس
SELECT AVG(ColumnName)FROM TableNameWHERE Condition;
مثال
SELECT AVG(Salary) FROM Employee_Salary;
توابع NULL
توابع NULL به شما این امکان را میدهند که اگر عبارتی NULL بود، مقداری جایگزین را برگردانید. در SQL Server این تابع ISNULL() است.
مثال
SELECT EmployeeID * (Month_Year_of_Salary + ISNULL(Salary, 0)) FROM Employee_Salary;
عبارات Case و Alias
در این بخش از دستورات SQL، به ترتیب به معرفی Aliasها و Case میپردازیم.
Alias
با Aliasها میتوانیم به ستون/جدول نامی موقتی بدهیم که تنها در یک بازه از پرس و جو فعال است.
سینتکس
–Alias Column Syntax SELECT ColumnName AS AliasNameFROM TableName; –Alias Table Syntax SELECT ColumnName(s)FROM TableName AS AliasName;
مثال
SELECT EmployeeID AS ID, EmployeeName AS EmpName FROM Employee_Info; SELECT EmployeeName AS EmpName, EmergencyContactName AS [Contact Name] FROM Employee_Info;
عبارت Case
این عبارت تمام شروط را بررسی میکند و زمانی که اولین شرط برقرار شد، مقداری را برمیگرداند. بنابراین، اگر هیچ شرطی TRUE نشد، مقدار موجود در قسمت ELSE را برمیگرداند. اگر هیچ شرطی TRUE نشد و قسمت ELSE نداشتیم، مقدار NULLرا برمیگرداند.
سینتکس
CASEWHEN Condition1 THEN Result1WHEN Condition2 THEN Result2WHEN ConditionN THEN ResultNELSE ResultEND;
مثال
SELECT EmployeeName, City FROM Employee_Info ORDER BY (CASE WHEN City IS NULL THEN 'Country is India by default' ELSE City END);
خُب، حالا وقت آن رسیده که به سراغِ پرس و جوهای تودرتو (Nested Query)، الحاقها (Join)، عملگرهای SET و تاریخ (Date) و افزایش خودکار (Auto Increment) برویم.
پرس و جوهای تودرتو در SQL
پرس و جوهای تو در تو در اس کیو ال داری یک پرس و جوی خارجی و یک پرس و جوی داخلی هستند. در کل یک پرس و جوی داخلی، در یک پرس و جوی دیگر مثل SELECT،INSERT،UPDATE یا DELETE قرار میگیرد.
دستور Join (الحاق) در SQL
با استفاده از الحاقها، سطرهای دو یا چند جدول را بر اساس ستونِ مشترک با هم ترکیب میکنیم. در زیر انواع الحاق یا دستورات Join در SQL را مشاهده میکنید:
- الحاق داخلی (INNER JOIN): این الحاق رکوردهایی را برمیگرداند که در ستون مشترک هر دو جدول دارای مقدار یکسانی هستند.
- الحاق کامل (FULL JOIN): این الحاق تمام رکوردهایی را برمیگرداند که دارای مقداری مشابه در جدول سمتِ چپ یا راست هستند.
- الحاق چپ (LEFT JOIN): این الحاق مقادیر جدول چپ و مقادیری از جدول راست را برمیگرداند که در شرط صدق میکنند.
- الحاق راست (RIGHT JOIN): این الحاق مقادیر جدول راست و مقادیری از جدول چپ را برمیگرداند که در شرط صدق میکنند.
شکل زیر را درنظر بگیرید.
بیایید برای فهم سینتکس الحاقها از جدول زیر استفاده کنیم.
TechID | EmpID | TechName | ProjectStartDate |
1 | 10 | DevOps | 04-01-2019 |
2 | 11 | Blockchain | 06-07-2019 |
3 | 12 | Python | 01-03-2019 |
الحاق داخلی
سینتکس
SELECT ColumnName(s)FROM Table1INNER JOIN Table2 ON Table1.ColumnName = Table2.ColumnName;
مثال
SELECT Technologies.TechID, Employee_Info.EmployeeName FROM Technologies INNER JOIN Employee_Info ON Technologies.EmpID = Employee_Info.EmpID;
الحاق کامل
سینتکس
SELECT ColumnName(s)FROM Table1FULL OUTER JOIN Table2 ON Table1.ColumnName = Table2.ColumnName;
مثال
SELECT Employee_Info.EmployeeName, Technologies.TechID FROM Employee_Info FULL OUTER JOIN Orders ON Employee_Info.EmpID=Employee_Salary.EmpID ORDER BY Employee_Info.EmployeeName;
الحاق چپ
سینتکس
SELECT ColumnName(s)FROM Table1LEFT JOIN Table2 ON Table1.ColumnName = Table2.ColumnName;
مثال
SELECT Employee_Info.EmployeeName, Technologies.TechID FROM Employee_Info LEFT JOIN Technologies ON Employee_Info.EmployeeID = Technologies.EmpIDID ORDER BY Employee_Info.EmployeeName;
الحاق راست
سینتکس
SELECT ColumnName(s)FROM Table1RIGHT JOIN Table2 ON Table1.ColumnName = Table2.ColumnName;
مثال
SELECT Technologies.TechID FROM Technologies RIGHT JOIN Employee_Info ON Technologies.EmpID = Employee_Info.EmployeeID ORDER BY Technologies.TechID;
عملگر Set در SQL
در کل سه عملگر Set داریم: UNION، INTERSECT و EXCEPT. میتوانید در شکل زیر عملگرهای Set را ببینید.
اجتماع: پرس و جوی چپ، پرس و جوی راست، سطرهای این دو را با هم ترکیب میکند
اشتراک: پرس و جوی چپ، پرس و جوی راست، تنها سطرهای مشترکِ هر دو را نگه میدارد
تفاضل: پرس و جوی چپ، پرس و جوی راست، سطرهایی از پرس و جوی چپ را نگه میدارد که در پرس و جوی راست نیستند
اجتماع (UNION)
از این عمگلر برای ترکیبِ جدول result-set حاصل از دو یا چند SELECT استفاده میشود.
سینتکس
SELECT ColumnName(s) FROM Table1UNIONSELECT ColumnName(s) FROM Table2;
اشتراک (INTERSECT)
از این عمگلر برای ترکیبِ دو SELECT استفاده میشود و اشتراکِ جداول result-set دو SELECT را برمیگرداند.
سینتکس
SELECT Column1 , Column2 ….FROM TableNameWHERE Condition INTERSECT SELECT Column1 , Column2 ….FROM TableNameWHERE Condition
EXCEPT
این عملگر تاپلهایی را برمیگرداند که خروجی عملگر SELECT اول هستند و در عملگر SELECT دوم وجود ندارند.
سینتکس
SELECT ColumnNameFROM TableName EXCEPT SELECT ColumnNameFROM TableName;
تاریخ و افزایش خودکار یک فیلد در SQL
در این بخش دربارهی تابع Date و فیلدهای Auto Increment صحبت میکنیم.
تاریخ
میتوانید از انواع تاریخ زیر در SQL Server استفاده و مقادیر تاریخ/زمان را در پایگاه داده ذخیره کنید.
نوع دادهای | فرمت |
DATE | YYYY-MM-DD |
DATETIME | YYYY-MM-DD HH:MI:SS |
SMALLDATETIME | YYYY-MM-DD HH:MI:SS |
TIMESTAMP | یک عدد منحصر به فرد |
مثال:
SELECT * FROM Technologies WHERE ProjectStartDate='2019-04-01'
Auto Increment
این فیلد هنگامِ اضافه شدن مقداری جدید به جدول، به صورت خودکار عددی منحصر به فرد تولید میکند. SQL Server از واژهی کلیدی IDENTITY به این منظور استفاده میکند.
مثال
<span>/* To define the "EmployeeID" column to be an auto-increment primary key field in the "Employee_Info" table */</span> <span>CREATE TABLE Employee_Info (</span> <span>EmployeeID INT IDENTITY(1,1) PRIMARY KEY,</span> <span>EmployeeName VARCHAR(255) NOT NULL</span> <span>EmergencyContactName VARCHAR(255) NOT NULL,</span> <span>);</span>
آشنایی با دستورات DCL
در این بخش از دستورات SQL، دربارهی دستوراتی صحبت میکنیم که برای اعمال امنیت پایگاه داده در محیطهای چند کاربرهی پایگاه داده استفاده میشوند. دستورات DCL به شرح زیرند:
- GRANT
- REVOKE
GRANT
این دستور به یک کاربر مجوز دسترسی به پایگاه داده و اشیاء موجود در آن را میدهد.
سینتکس
GRANT PrivilegeNameON ObjectNameTO {UserName |PUBLIC |RoleName}[WITH GRANT OPTION];
- PrivilegeName: نامِ مجوزی است که به کاربر اعطاء میشود.
- ObjectName: نام شئای از پایگاه داده است مثل جدول، VIEW یا STORED PROCEDURE.
- UserName: نام کاربری که مجوز به او اعطاء میشود.
- PUBLIC: در این حالت مجوز به تمام کاربران اعطاء میشود.
- RoleName: نام مجموعهای از مجوزها که با هم یک گروه شدهاند.
- WITH GRANT OPTION: به کاربر این حق داده میشود که این مجوزها را به سایر کاربران اعطاء کند.
مثال:
-- To grant SELECT permission to Employee_Info table to user1 GRANT SELECT ON Employee_Info TO user1;
REVOKE
با این دستور، مجوزهای اعطایی به کاربر توسط مجوز GRANT، پس گرفته میشوند.
سینتکس
REVOKE PrivilegeName ON ObjectName FROM {UserName |PUBLIC |RoleName}
مثال
-- To revoke the granted permission from user1 REVOKE SELECT ON Employee_Info TO user1;
آموزش View در SQL
یک View در SQL، جدولی است که از سایر جداول گرفته شده است. یک View شامل ردیفها و ستونیهای یک جدول واقعی است و فیلدهایِ یک یا چند جدول را دارد.
عبارت ‘CREAT VIEW’
برای ساخت یک ویو از جدول، از این عبارت استفاده میشود.
سینتکس
CREATE VIEW ViewName ASSELECT Column1, Column2, …, ColumnNFROM TableNameWHERE Condition;
مثال
CREATE VIEW [Kolkata Employees] AS SELECT EmployeeName, PhoneNumber FROM Employee_Info WHERE City = "Kolkata";
عبارت ‘CREAT OR REPLACE VIEW’
برای آپدیت کردن یک ویو از این عبارت استفاده میشود.
سینتکس
CREATE VIEW OR REPLACE ViewName ASSELECT Column1, Column2, …, ColumnNFROM TableNameWHERE Condition;
مثال
CREATE VIEW OR REPLACE [Kolkata Employees] AS SELECT EmployeeName, PhoneNumber FROM Employee_Info WHERE City = "Kolkata";
عبارت ‘DROP VIEW’
برای حذف یک ویو از این عبارت استفاده میشود.
سینتکس
DROP VIEW ViewName;
مثال
DROP VIEW [Kolkata Employees];
دستور Stored Procedures در SQL
Stored Procedure ها در SQL کدهایی هستند که ذخیره کردهاید و میتوانید مجدداً از آنها استفاده کنید.
سینتکس
CREATE PROCEDURE ProcedureNameASSQLStatementGO;
مثال
EXEC ProcedureName;
ساختار Trigger در SQL
تریگرها (TRIGER) مجموعهای از عبارات SQL هستند که در کاتالوگ (Catalog) یک پایگاه داده ذخیره میشوند. هرگاه رخدادی مرتبط با یک جدول رخ میدهد، این عبارتها اجرا میشوند. پس یک تریگر قبل یا بعد از تغییر دادهها توسط دستورات INSERT، UPDATE یا DELETE فعال میشود. شکل زیر را ببینید.
قبل از INSERT: قبل از افزودن داده به جدول فعال میشود.
بعد از INSERT: بعد از افزودن داده به جدول فعال میشود.
قبل از UPDATE: قبل از آپدیت شدن دادههای جدول فعال میشود.
بعد از UPDATE: بعد از آپدیت شدن دادههای جدول فعال میشود.
قبل از DELETE: قبل از حذف داده از جدول فعال میشود.
بعد از DELETE: بعد از حذف داده از جدول فعال میشود.
سینتکس
CREATE TRIGGER [TriggerName][BEFORE | AFTER]{INSERT | UPDATE | DELETE}on [TableName][FOR EACH ROW][TriggerBody]
دستورات (TCL (Transaction Control Language در SQL
در این بخش از دستورات SQL دربارهی دستوراتی میآموزیم که میتوانیم از آنها برای مدیریت تراکنشهای پایگاه داده استفاده کنیم. این دستورات به شرح زیرند:
- COMMIT
- ROLEBACK
- SAVEPOINT
COMMIT
از این دستور برای ذخیرهی تراکنش در پایگاه داده استفاده میشود.
سینتکس
COMMIT;
ROLLBACK
از این دستور برای برگرداندن پایگاه داده به آخرین حالت کامیت شده استفاده میشود.
سینتکس
ROLLBACK;
میتوانید در یک تراکنش جاری، با استفاده از ROLLBACK و SAVEPOINT مستقیماً به یک Savepoint بپرید.
SAVEPOINT
از این دستور برای ذخیرهی موقتی یک تراکنش استفاده میشود. پس اگر میخواهید به نقطهای دلخواه ROLLBACK کنید، میتوانید آن نقطه را به صورت یک SAVEPOINT ذخیره کنید.
سینتکس
SAVEPOINT SAVEPOINTNAME;
برای فهمیدن مثالهای مربوط به تراکنشهای پایگاه داده، جدول زیر را درنظر بگیرید.
EmployeeID | EmployeeName |
01 | Ruhaan |
02 | Suhana |
03 | Aayush |
04 | Rashi |
حالا از پرس و جوهای SQL زیر برای فهمیدن تراکنشها در پایگاه داده استفاده کنید.
INSERT INTO Employee_Table VALUES(05, 'Avinash'); COMMIT; UPDATE Employee_Table SET name = 'Akash' WHERE id = '05'; SAVEPOINT S1; INSERT INTO Employee_Table VALUES(06, 'Sanjana'); SAVEPOINT S2; INSERT INTO Employee_Table VALUES(07, 'Sanjay'); SAVEPOINT S3; INSERT INTO Employee_Table VALUES(08, 'Veena'); SAVEPOINT S4; SELECT * FROM Employee_Table;
خروجی پرس و جوهای بالا به صورت زیر است:
EmployeeID | EmployeeName |
01 | Ruhaan |
02 | Suhana |
03 | Aayush |
04 | Rashi |
05 | Akash |
06 | Sanjana |
07 | Sanjay |
08 | Veena |
حالا اگر با استفاده از پرس و جوی زیر، به S2 رولبک کنید، خروجی به صورت جدول زیر خواهد شد.
ROLLBACK TO S2; SELECT * FROM Employee_Table;
EmployeeID | EmployeeName |
01 | Ruhaan |
02 | Suhana |
03 | Aayush |
04 | Rashi |
05 | Akash |
06 | Sanjana |
خُب، به پایان آموزش دستورات SQL رسیدیم. امیدواریم از این آموزش لذت برده باشید. در این آموزش در کنار هم دستورات SQLای را بررسی کردیم که میتوانید با استفاده از آنها پرس و جو بنویسید و با پایگاه داده کار کنید.
همانطور که مشاهده کردید دستورات پیشرفته sql که شامل کوئری های کاربردی در SQL Server و همچنین عملگرهای sql می باشد را با هم بررسی کردیم. شما همراهان عزیز سایت فرانش در صورتیکه نظر یا پیشنهادی دارید میتوانید در انتهای مقاله در بخش دیدگاه با ما در میان بگذارید.
فیلم آموزش SQL Server
مفاهیم اولیه SQL را در این ویدیو ببینید:
دورههای مرتبط در فرانش
بدون دیدگاه