دستور TOP در sql

دستور TOP در دستور select اسکیوال ، تعداد رکورهای خروجی را مشخص میکند.

دستور top در sql برای جداولی که بالای هزاران رکورد دارند بسیار مفید میباشد. خروجی با تعداد رکوردهای بالا بر روی کارایی برنامه ی مرتبط با sql ممکن است تاثیر بگذارد.

مثال : با مثال زیر ما 2 رکورد از جدول را انتخاب می کنیم :

SELECT TOP 2 * FROM Persons

مثال : با مثال زیر ما میتوانیم 50 درصد از رکوردها در جدول بالا را انتخاب کنیم :

SELECT TOP 50 PERCENT * FROM Persons

عملگر Like در SQL

عملگر Like در شرطهای sql ، برای الگوی خاص جستجو مورد استفاده قرار میگیرد. ساختار دستور like در اسکیوال به صورت زیر است:

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern

 مثال : دستور زیر افرادی که شهر آنها با حرف s شروع میشوند را انتخاب مبکند.

SELECT * FROM Persons
WHERE City LIKE 's%'

 مثال : دستور زیر افرادی که شهر آنها به حرف s ختم میشوند را انتخاب مبکند.

SELECT * FROM Persons
WHERE City LIKE '%s'

 مثال : دستور زیر افرادی که شهر آنهاشامل حرف st میباشد را انتخاب مبکند.

SELECT * FROM Persons
WHERE City LIKE '%st%'

مثال : دستور زیر افرادی که شهر آنهاشامل حرف st نمیباشد را انتخاب مبکند.


SELECT * FROM Persons
WHERE City NOT LIKE '%st%'

نکته : در مقاله ی بعدی علامت های شرطی در Like را توضیح خواهیم داد.



علامت های شرطی در Like

یادآوری از دستور Like :  همانطور که در مقاله ی قبلی در مورد دستور like در sql گفته شد ، هنگام کارکردن با رشته ها همیشه خواهان مطابقت کامل رشته ها نیستیم ، بلکه بخشی از رشته یا الگوی خاصی از آن بیشتر موردنظر است. در این هنگام می توان از دستور LIKE در شرط های اسکیوال ، به جای علامت = استفاده کرد.

در دستور like ، دو کاراکتر % و _ به ترتیب به معنی چند کاراکتر و یک کاراکتر را برای تطابق می توان بکار برد.

در آموزش sql این علامت ها کاربرد بسیاری دارند.

مثال : اسامی کلیه مشتریانی که آدرس آنها شامل کلمه Main است بطوریکه قبل Main هر چند کاراکتری که خواست بیاید ولی بعد از Main فقط یک کاراکتر بیاید را پیدا کن :

SELECT customer_name
FROM customer
WHERE customer_street LIKE '%Main_';



عملگر In در sql

عملگر In در اسکیوال برای مشاهده اطلاعات رکوردهایی از جدول به کار می رود که شما مقدار دقیق حداقل یکی از فیلدهای آنرا می دانید . دستور in در اسکیول برای کوئری های پیچیده در اس کیو ال بسیار کاربردی است.

ساختار این دستور به صورت زیر است : 

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)

مثال : از جدول Persons مشخصات افرادی را بدهید که نام خانوادگی آنها رجبی یا یوسفی است :

Select * From  Persons
Where Family IN ( "رجبی" , "یوسفی" );



عملگر BETWEEN در اسکیوال

عملگر BETWEEN در sql برای انتخاب اطلاعات در یک محدوده خاص ، در بین دو مقدار تعیین شده استفاده می شود . این مقادیر می تواند از نوع عددی ، متن یا تاریخ باشد .

نکته مهم در مورد دستور Between در sql اینست که باید نوع مدنظر با نوع داده ای فیلد های استفاده شده در دستور یکسان باشد .
نکته ی دیگر در مورد Between در مورد داده های متنی ، ترتیب قرار گیری حروف الفبا مد نظر برنامه است .

ساختار این دستور به صورت زیر است : 

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

مثال :  برای نمایش اطلاعات درون محدوده تعیین شده به صورت زیر عمل میکنیم : 

SELECT * FROM Persons
WHERE LastName
BETWEEN 'Hansen' AND 'Pettersen'

مثال : برای نمایش اطلاعات خارج از محدوده تعیین شده از یک عملگر NOT قبل از دستور Between ... And استفاده می شود .

SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Hansen' AND 'Pettersen'



Alias در اس کیو ال

زمانی که با دستور select در sql یک کوئری اجرا کرده ایم نام یا عنوانی که در بالای هر ستون در خروجی نمایش داده می شود ، همان نام فیلد مربوط به داده در جدول اصلی پایگاه داده است .

گاهی اوقات میخواهیم نام ستون ما در خروجی برابر با نام دلخواه ما باشد یا در مواردی که در بخش توابع SQL خواهیم دید ، یک ستون جدید ایجاد می کنیم که باید نامی برای آن تعیین شود در این موارد از ویژگی Alias استفاده میکنیم.  

از ویژگی Alias برای در نظر گرفتن یک نام مستعار و مجازی برای قرار گرفتن در بخش عنوان هر ستون در خروجی دستور Select در اسکیوال استفاده می شود .

تعریف Alias  برای جداول sql : کلمه کلیدی as در اسکیوال این کار را انجام می دهد.

SELECT column_name(s)
FROM table_name
AS alias_name

تعریف Alias  برای ستونها در sql :

SELECT column_name AS alias_name
FROM table_name

 مثال:

Select Name As نام , Family As خانوادگی From Persons
Where id >15 
Order By Family ; 

می توان بر روی مقادیر ستون هایی که داده عددی دارند ، عملیات ریاضی ( مثل ضرب ، تقسیم و ... ) انجام داده و سپس نتایج محاسبات را در یک ستون جدید با عنوان دلخواه تعیین شده توسط ویژگی Alias در خروجی دستور Selectنمایش داد .در این حالت ستون یا ستون های به جدول خروجی اضافه می شود .

مثال : مثال زیر کاربردی از این مورد را در دستور select نشان میدهد :

Select Name+Family As "نام و نام خانوادگی" From Persons
Where id >15 
Order By Family ;



دستورهای پیوند ( Join ) در SQL

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

تفاوتهای بین دستورات پیوند ( JOIN ) در SQL

دستور INNER JOIN : خروجی  دستور JOIN یا دستور INNER JOIN از بین سطرهایی انتخاب میشود که حداقل یک رابطه در هر دو جدول وجود داشته باشد.

دستور LEFT JOIN : خروجی  دستور LEFT JOIN از از جدول سمت چپ انتخاب میشود، حتی اگر هیچ رابطه ای با  جدول سمت راست نداشته باشد.

دستور RIGHT JOIN : خروجی دستور RIGHT JOIN  از از جدول سمت راست انتخاب میشود، حتی اگر هیچ رابطه ای با  جدول چپ نداشته باشد.

دستور FULL JOIN : خروجی  دستور FULL JOIN از بین سطرهایی انتخاب میشود که  یک رابطه در یکی از جداولبایستی  وجود داشته باشد.

تفاوت Join و InnerJoin

تفاوت Join و InnerJoin در performance آنها می باشد. نتیجه ی اجرای هر دوی آنها یکسان است اما دستور InnerJoinدارای Prformance بالاتری می باشد و به همین دلیل توصیه می شود که از دستور InnerJoin استفاده شود.

در مقالات زیر یک به یک این پیوند ها در اسکیوال با مثال توضیح داده شده اند :



دستور INNER JOIN در sql

 خروجی دستور INNER JOIN در اس کیو ال از بین سطرهایی انتخاب میشود که حداقل یک رابطه در هر دو جدول وجود داشته باشد.

تفاوت دستور Join و دستور InnerJoin در performance آنها می باشد. نتیجه ی اجرای هر دوی آنها یکسان است امادستور InnerJoin دارای Prformance و کارایی بالاتری می باشد و به همین دلیل توصیه می شود که از دستور InnerJoinاستفاده شود.

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

SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

 در دستور INNER JOIN در اسکیوال بایستی حداقل یک رابطه در هر دو جدول وجود داشته باشد که بعد از کلمه کلیدی On می آید.

نکته مهم : مهمترین دستور ها در آموزش sql ، دستور inner join می باشد که یادگیری کامل دستور join میتواند تفاوت اصلی آموزش حرفه ای اسکیوال باشد.

 

مثال : اگر رکوردی (خروجی) که در جدول "Persons" وجود دارد هیچ تطابقی با خروجی های جدول "Orders" نداشته باشد ، این رکوردها در خروجی این دستور sql نمایش داده نمیشوند.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName



دستور LEFT JOIN در sql

خروجی  دستور LEFT JOIN در اسکیوال از از جدول سمت چپ انتخاب میشود، حتی اگر هیچ رابطه ای با جدول سمت راست نداشته باشد.

شکل کلی دستور left join در sql بصورت زیر است :

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

نکته : در بعضی دیتابیس ها دستور LEFT JOIN با نام دستور LEFT OUTER JOIN استفاده میشود که تفاوتی در این زمینه وجود ندارد.

مثال : در این مثال جدول اصلی ، جدول Persons میباشد که در سمت چپ JOIN قرار دارد و خروجی ها بر اساس این جدول تنظیم میشوند.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName

 در صورت نداشتن رابطه ی بعضی ای رکورد ها با جدول سمت راست ، فیلد های آن null انتخاب میشوند که با ترکیب آن با دستور isNull در اسکیول میتوانید خروجی های دلخواه خود را با استفاده از دستور left join بدست آورید.



دستور RIGHT JOIN در sql

 خروجی دستور RIGHT JOIN در اسکیوال از از جدول سمت راست انتخاب میشود، حتی اگر هیچ رابطه ای با  جدول چپ نداشته باشد. ساختار دستور right join به صورت زیر است :

SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

نکته : در بعضی دیتابیس ها دستور RIGHT JOIN با نام دستور RIGHT OUTER JOIN استفاده میشود.

مثال : در این مثال جدول اصلی ، جدول Orders میباشد که در سمت راست JOIN قرار دارد و خروجی ها بر اساس این جدول تنظیم میشود.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName

در صورت نداشته رابطه ی بعضی ای رکورد ها با جدول سمت چپ ، فیلد های آن null انتخاب میشوند که با ترکیب آن با دستور isNull در اسکیول میتوانید خروجی های دلخواه خود را با استفاده از دستور right join بدست آورید.



دستور FULL JOIN در sql

 خروجی  دستور FULL JOIN در sql از بین سطرهایی انتخاب میشود که یک رابطه در یکی از جداول بایستی وجود داشته باشد.

به طور خلاصه دستور full join ( دستور full outer join ) بصورت or کار میکند و دستور inner join بصورت and .

SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name

مثال : در مثال زیر ما میخواهیم با استفاده از دستور full join در اسکیوال ، همه ی افراد با سفارش هایشان و همه ی سفارشات با افراد مربوط به آنها را در خروجی نمایش دهیم.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName



دستور UNION در sql

از دستور Union برای ترکیب و ادغام دو یا چند ستون مختلف از 2 یا چند جدول و نشان دادن آنها در یک ستون مشترک استفاده می شود . 
در دستور union ، نوع داده ای ستون های انتخاب شده برای ترکیب باید یکسان باشند .

دستور Union در هنگام ترکیب فیلد ها ، در صورت برخورد با مقادیر تکراری آنها را حذف کرده و از هر مقدار یک نمونه را نمایش می دهد . ساختار دستور union به صورت زیر است:

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

مثال :

SELECT E_Name FROM Employees_Norway
UNION
SELECT E_Name FROM Employees_USA

 برای مشاهده تمام مقادیر ، حتی مقادیر تکراری باید از دستور Union ALL استفاده کرد

ساختار این دستور به صورت زیر است :

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

مثال :

SELECT E_Name FROM Employees_Norway
UNION ALL
SELECT E_Name FROM Employees_USA
Result

در آموزش sql ، دستور union و دستور union all کاربرد های ویژه و خاصی دارند.



دستور SELECT INTO در sql

از دستور Select Into در موارد زیر استفاده می شود :

  1. ایجاد یک Back Up ( نسخه پشتیبان ) از یک جدول .
  2. ایجاد یک آرشیو از رکوردهای یک جدول .
  3. قرار دادن برخی از رکوردها یا فیلدهای مورد نظر از یک جدول در یک جدول جدید .
  4. ایجاد یک نسخه پشتیبان از کل یک پایگاه داده در یک پایگاه داده جدید .

 تمامی مثالهای زیر نحوه استفاده از دستور select into را نشان میدهد:

  • در این مثال (ساختار) ما می میخواهیم برخی از رکوردها یا فیلدهای مورد نظر از یک جدول در یک جدول جدید قرار دهیم:

We can select all columns into the new table:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename

  •  در این مثال (ساختار) ما تنها  می توانیم ستون ها را برای ایجاد یک جدول جدید انتخاب کنیم :

SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename

  •  در این مثال ما میخواهیم یک Back Up ( نسخه پشتیبان ) از یک جدول Persons ایجاد کنیم:

SELECT *
INTO Persons_Backup
FROM Persons

  •  در این مثال ما میخواهیم  یک کپی از جدول Persons را به یک پایگاه داده دیگر (Backup.mdb) اضافه کنیم :

SELECT *
INTO Persons_Backup IN 'Backup.mdb'
FROM Persons

  •  در این ساختار ما میتوانیم  یک تعدادی از فیلدها را به جدول جدید کپی کنیم:

SELECT LastName,FirstName
INTO Persons_Backup
FROM Persons

  •   در این مثال ما میخواهیم  با داشتن یک دستور شرطی فیلدهایی را از جدول Persons به جدول Persons_Backup اضافه  کنیم :

SELECT LastName,Firstname
INTO Persons_Backup
FROM Persons
WHERE City='Sandnes'

  • انتخاب داده از بیش از یک جدول هم در دستور select into امکان پذیر است . در مثال زیر جدول "Persons_Order_Backup"  شامل داده ها از دو جدول "Persons" و "Orders" میباشد.

SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id

ذکر نام یک پایگاه داده جدید در دستور Select Into اختیاری است . چنانچه نامی در این قسمت ذکر نشود ، برنامه نسخه پشتیبان را در همان پایگاه داده موجود ایجاد می کند و چنانچه نامی ذکر شود ، برنامه نسخه پشتیبان را در پایگاه داده ذکر شده ایجاد می کند .



مقدار Null در اس کیو ال

در حالت کلی مقادیر ستون ها میتوانند مقدار null داشته باشند. زمانی که  یک ستون اختیاری باشد ، شما میتوانیدمقدار Null در آن ذخیره کنید. اختیاری به این معنی که میتوانید خالی رهایش کنید. 

مقدار پیش فرض در صورت مقدار ندادن به فیلدی در یک رکورد , مقدار Null است.

با استفاده از دستور is null در sql میتوانیم فیلدهایی که مقادیر تهی دارند را با در دستور Select انتخاب کنیم.

مقدار null از جمله مقادیری است که زیاد باهاش در آموزش sql سر و کار خواهیم داشت.

نکته ی بسیاری مهم در مورد null یا تهی اینست که این مقدار با مقدار رشته ای space یا ' ' تفاوت کامل دارد. همچنین null را نباید با مقدار رشته ای آن یعنی 'null' اشتباه بگیریم.



دستور ISNULL در sql

از دستور ISNULL در اسکیوال زمانی استفاده میشود که شما میخواهید تمام فیلدهای null را در خروجی داشته باشید.

مقدار null در اس کیو ال با space ' ' تفاوت دارد.

ساختار دستور is null به همراه مثال آن به صورت زیر است که در این مثال تمام رکوردهایی که حاوی فیلد آدرس null هستند انتخاب می شوند.

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL

بر عکس دستور is null در sql ، دستور is not Null هست که مقادیری را برمیگرداند که Null نباشد که بیشتر از این شکل از این دستور استفاده مشود.

مثال : در مثال زیر رکوردهایی که آدرس آنها تهی ( null ) نیستند ، انتخاب و در خروجی این دستور در اسکیوال می روند.

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL