آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

مقدمه ای بر عطف و فصل در Sql

دوره های مرتبط با این مقاله

مقدمه ای بر عطف و فصل

عطف منطقی

تاکنون شرط ها را به صورت منفرد بکار برده یا اعمال می کردیم. در این روش، تفسیر شرط بسیار آسان بود. اما گاهی لازم است شرطی را آزمایش کنیم که خود مربوط یا وابسته به شرط دیگری است. جبر بولی این امکان را مهیا می کند تا دو شرط را با یکدیگر ترکیب نموده و نتیجه ی حاصل را مورد استفاده قرار داد و یا دو شرط را ارزیابی کرده و بررسی کرد آیا هریک از دو شرط true هستند یا خیر.
تصور کنید فهرستی از دانش آموزان را پیشرو دارید و اکنون قصد دارید اطلاعاتی را از پایگاه داده ی خود واکشی کرده و مشاهده نمایید. می دانید که برای دریافت لیستی از دانش آموزان دختر بایستی دانش آموزان را بر اساس جنسیت (gender) فیلتر کنید. دستور مربوطه را می بایست به صورت زیر نوشته و اجرا نمایید:


SELECT StudentNumber [Student #],
       FirstName [First Name],
       LastName "Last Name",
       Gender,
       City,
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  Gender = N'Female';
GO

خروجی:
آموزش SQL

حال تصویر کنید می خواهید لیستی از دانش آموزان را بازیابی کنید که در شهر Silver Spring اقامت دارند. برای این منظور کوئری را به صورت زیر نگارش می کنیم:


SELECT StudentNumber [Student #],
       FirstName [First Name],
       LastName "Last Name",
       Gender,
       City,
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  City = N'silver spring';
GO

نتیجه ی زیر حاصل می گردد:
آموزش SQL

از این دو نتیجه متوجه می شویم که هیچ رابطه ای بین اینکه دانش آموز دختر (Female) است و در شهر Silver Spring اقامت دارد، دیده نمی شود. با این وجود SQL به شما این اجازه را می دهد که دو شرط را با یکدیگر ترکیب نمایید تا نتیجه ی حاصل اشتراک بین دو شرط باشد. از این رخداد با نام عطف منطقی (logical conjunction) یاد می شود.


آموزش کاربردی

1. محیط SQL Server را راه اندازی کرده و سپس بر روی دکمه ی Connect، در پنجره ی محاوره ای اتصال به سرور، کلیک نمایید.
2. در پنجره ی Object Explorer، گره Databases را باز نمایید.
3. در این پنجره بایستی پایگاه داده ای به نام Department Store1 وجود داشته باشد. با کلیک بر روی علامت +، گره آن را باز نمایید.
4. بر روی Department Store1 راست کلیک نموده و گزینه ی New Query را انتخاب نمایید.
5. حال گره ی Tables را باز نمایید.
6. بر روی Inventory.StoreItems راست کلیک کرده و گزینه ی Edit Top 200 Rows را انتخاب نمایید.
7. در نوار ابزار Query Designer، بر روی دکمه های آموزش SQL،آموزش SQLوآموزش SQLبه ترتیب کلیک نمایید.
8. اکنون در کادر SQL، دستور جاری را به صورت زیر ویرایش کنید:


SELECT ItemNumber AS [Item #],
Manufacturer,
Category,
SubCategory AS [Sub-Category], 
ItemName AS [Name/Description], 
UnitPrice AS [Unit Price]
FROM   Inventory.StoreItems

9. به منوی اصلی مراجعه کرده و بر روی Query Designer کلیک کنید. سپس گزینه ی Execute SQL را انتخاب نمایید.


ایجاد یک عطف منطقی به وسیله ی عملگر AND

ساده ترین شرط منطقی دو ستون را شامل می شود. می توان عطف را به صورت ویژوال و یا با کدنویسی ایجاد کرد. برای ایجاد یا تعریف یک عطف منطقی به صورت ویژوال می بایست گام های زیر را دنبال کرد:
در بخش result پنجره ی Query Editor یا کادر Results در Query Designer:
• برای گزینش مجموعه ای از رکوردها، بر روی header یکی از رکوردها (کادر خاکستری رنگ موجود در سمت چپ رکورد) کلیک کرده، سپس Shift را فشار داده و نگه دارید. حال بر روی header رکورد پایانی کلیک و برای Shift را رها کنید.
جهت انتخاب رکوردها به صورت تصادفی، بر روی header یکی از سطرها کلیک نموده کلید Ctrl را فشار دهید و نگه دارید. حال بر روی هریک از header رکوردهای جاری کلیک کرده و کلید Ctrl را رها کنید.


مثال:
آموزش SQL

• اکنون یک جدول در Query Designer باز کرده و کادر Criteria را نمایش دهید. در پنجره ی Criteria، بر روی کادر Filter مربوط به اولین فیلد دلخواه کلیک کرده و شرط یا فیلتر مورد نظر را وارد نمایید. اکنون بر روی کادر Filter مربوط به فیلد دوم کلیک کرده و شرط دوم را درج کنید. کوئری را اجرا نمایید.
در تعریف یک شرط منطقی به صورت کدنویسی در SQL، عملگر AND را برای ترکیب دو شرط بکار می بریم. فرمول استفاده از آن به صورت زیر می باشد:


SELECT WhatColumn(s)
FROM   WhatObject
WHERE  Condition1 AND Condition2

کلیدواژه ی AND عملگری است که دو شرط را با هم پیوند می زند.
دستوری که دو شرط را به وسیله ی عملگر نام برده با هم ترکیب می کند، می بایست ساختار نگارشی به شرح زیر داشته باشد:


Column operator Value 

در فرمول فوق، اولین شرط است که ارزیابی می شود. در صورت false بودن شرط اول، کل دستور WHERE ناصحیح تلقی شده و هیچ لزومی به بررسی شرط دوم دیده نمی شود. تنها در صورت صحیح بودن شرط اول، شرط دوم بررسی می شود. به عبارتی روشن تر عملگر And برای به اجرا درآوردن دستور ایجاب می کند تمامی شرط های مشخص شده برای آن صحیح باشد، در غیر این صورت کل دستور WHERE غلط محسوب می شود.
با توجه به آنچه گفته شد، فرض کنید می خواهیم لیستی از دانش آموزان دختر را که در شهر Silver Spring سکونت دارند، بدست آوریم. دستور SQL لازم برای بازیابی این نتیجه به صورت زیر نوشته می شود:


SELECT StudentNumber [Student #],
       FirstName [First Name],
       LastName "Last Name",
       Gender,
       City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  Gender = N'female' AND City = N'silver spring';
GO

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


SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, 
       City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'female') AND (City = N'silver spring')

نتیجه ی زیر را برمی گرداند:
آموزش SQL

آموزش کاربردی

1. در پنجره ی Criteria، بر روی کادر Filter مربوط به فیلد Manufacturer کلیک نمایید.
2. برای مشاهده ی فهرستی از اقلام تولید شده توسط Calvin Klein، Calvin Klein را به عنوان فیلتر وارد نمایید.
3. برای اجرای مجموعه دستورات و مشاهده ی نتیجه ی کوئری، داخل پنجره ی Diagram راست کلیک کرده و گزینه ی Execute SQL را فشار دهید.
4. حال برای بازیابی آیتم های تولید شده توسط Calvin Klein، اما این بار فقط آن هایی که دارای قیمت 150 دلار یا ارزان تر هستند، بر روی کادر Filter مربوطه کلیک نموده و عبارت شرطی <=150 را به عنوان فیلتر درج نمایید.
5. برای اجرای کوئری و مشاهده ی نتیجه، داخل کادر Diagram راست کلیک کرده و گزینه ی Execute SQL را انتخاب نمایید.


آموزش SQL

6. برای مخفی کردن ستون ها، کافی است در کادر Criteria، بر روی چک باکس مربوط به ستون Manufacturer کلیک کرده و تیک آن را حذف کنید.
7. جهت اجرای دستور و مشاهده ی نتیجه، در نوار ابزار Query Designer، بر روی دکمه ی آموزش SQLکلیک نمایید.
8. برای مجددا نمایان ساختن ستون مورد نظر، بایستی در کادر Criteria، بر روی چک باکس مربوطه ی آن ستون ( موجود در زیر سرستون Output) کلیک نمایید.
9. بر روی سرستون Filter (در کادر Criteria) کلیک کرده و سپس با زدن کلید Delete تمامی عبارت های شرطی را حذف نمایید.
10. حال روی تب SQLQuery1.sql کلیک کنید.
11. فرض کنید یک مشتری قصد اجاره ی آپارتمانی با یک اتاق خواب را دارد. در درجه ی اول آن آپارتمان باید در دسترس باشد. برای این منظور، دستور زیر را تایپ نمایید:

USE LambdaSquare1;
GO
SELECT "Unit #" = aparts.UnitNumber,
       Beds = aparts.Bedrooms, 
       Baths = aparts.Bathrooms,
       [Monthly Rent] = aparts.Price, 
       "Primary Deposit" = aparts.Deposit,
       (aparts.Price + aparts.Deposit) "Due Before Moving", 
       CASE aparts.Available
           WHEN 0 THEN N'No or Not Yet'
           WHEN 1 THEN N'Yes'
       END "Available"
FROM Presentation.Units aparts
WHERE (Bedrooms = 1) AND (Available = 1)
ORDER BY [Monthly Rent], "Primary Deposit";
GO

12. به منظور اجرای دستور، کلید F5 را فشار دهید.


آموزش SQL

فصل منطقی

عطف منطقی برای بررسی دو شرط بکار می رود. لازم به ذکر است که هر دو شرط باید درست باشند تا دستور WHERE اجرا گردد. در این عطف اگر حتی یکی از دو شرط غلط باشد، کل دستور false تلقی می شود. گاهی دو شرط داریم که هر دو از اهمیت یکسان برخوردار هستند و همچنین درستی یک کدام کافی است که کل دستور صحیح شده و دستور اجرا گردد. از این نوع شرط با نام فصل منطقی (logical disjunction) یاد می شود.
علاوه بر اختلاف در اسم، عطف و وصل تفاوت های منطقی فراوانی با یکدیگر دارند. عطف منطقی به دو فیلد متفاوت نیاز دارد. اگر در هر دو شرط یک فیلد یکسان را ذکر کنید، دستور هیچ خروجی را برنمی گرداند:


آموزش SQL

بنابراین باید همیشه در دو شرط، ستونی متفاوت را ذکر کنید. این در حالی است که فصل منطقی اجازه می دهد در هر دو شرط که توسط AND به هم پیوند زده می شوند، ستونی یکسان را ذکر کرد.
در فصل منطقی، از مفسر خواسته می شود که دو شرط را ارزیابی کرده و در صورت صحیح بودن شرط، دستور را اجرا کند (اگر حتی یکی از شرط ها صحیح باشد، دستور اجرا می شود).
مشابه عطف، فصل را می توان بر روی چندین فیلد اجرا کرد.


تعریف یک فصل منطقی

همان طور که قبلا ذکر شد، فصل منطقی را می توان برای چندین فیلد بکار برد. فصل منطقی را می توان به صورت ویژوال یا با کد نویسی ایجاد کرد.
برای تعریف یک فصل منطقی به صورت ویژوال، ابتدا یک جدول در Query Designer باز کنید. سپس کادر Criteria را با کلیک بر روی دکمه ی آموزش SQLبه نمایش درآورید.
چندین گزینه پیشرو دارید:
در پنجره ی Criteria:
1. برای تعریف فصل منطقی در تنها یک کادر، بر روی کادر Filter ستون مربوطه کلیک نمایید. شرط اول را وارد نموده و بلا فاصله پس از آن کلیدواژه ی OR و در پایان شرط دیگر را وارد کنید. به همین نحو می توانید تعداد بی شماری شرط به همراه فصل منطقی OR در این کادر مشخص کنید.
و اما برای استفاده از چندین کادر برای تعریف شرط:

  • اگر می خواهید مقدار تنها یک فیلد را بررسی کنید، بر روی کادر Filter متعلق به ستون مربوطه کلیک کرده و شرط اول را در آنجا وارد کنید. سپس شرط دوم را در کادر مجاور آن، در زیر سرستون or… تایپ نمایید.
  • چنانچه قصد دارید آن مقدار را در بیش از یک ستون بررسی کنید، بر روی کادر Filter متعلق به یکی از ستون ها کلیک کرده و اولین شرط را درج نمایید. سپس بر روی کادر Or... مربوط به فیلد دوم کلیک کرده و شرط دوم را وارد کنید.

پس از وارد کردن شرط ها در جایگاه مناسب، کوئری را اجرا کنید.
برای تعریف فصل منطقی به روش کدنویسی، عملگر OR را بین دو شرط در کد جای گذاری می کنیم. فرمولی که باید استفاده شود، به صورت زیر می باشد:


SELECT WhatColumn(s)
FROM   WhatObject
WHERE  Condition1 OR Condition2

در فرمول بالا، کلیدواژه ی OR عملگری است که دو شرط را با هم ترکیب می کند. هر طرف شرط خود طبق فرمول زیر نوشته می شود:


Column operator Value

• اگر مقادیر تنها یک ستون را بررسی می کنید، در آن صورت اسم ستون را در هر دو شرط ذکر نموده و عملگر مناسب و مقدار دلخواه را نیز در هر شرط تایپ نمایید. در زیر مثالی را مشاهده می کنید که در آن دستور لیستی از دانشجو آموزان که در یکی از دو شهر Bethesda و Silver Spring سکونت دارند را بازیابی می کند:


SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name",
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (City = N'bethesda') OR (City = N'silver spring');
GO

• اگر مقدار فیلدهای مختلف را می خواهید بررسی کنید، هر یک را در شرط مختص به خود ذکر کرده و بلافاصله پس از اسم ستون عملگر و در پایان مقدار مورد نظر را مشخص کنید. دستور زیر لیستی از دانش آموزان را برمی گرداند که دارای یکی از این دو خاصیت هستند: 1. در Silver Spring زندگی می کنند و یا 2. دختر هستند.


SELECT StudentNumber [Student #],
       FirstName [First Name],
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'female') OR (City = N'silver spring');
GO 

عملگرهای فصل و عطف منطقی به صورت متفاوت عمل می کنند. همان طور که قبلا گفتیم، در عطف های منطقی، هر دو شرط بایستی صحیح باشند تا کل دستور true تلقی شده و اجرا گردد. در فصل منطقی، مفسر ابتدا شرط اول را بررسی می کند، در صورت صحیح بودن آن شرط نتیجه می گیرد که کل دستور WHERE صحیح است و دیگر نیازی به ارزیابی شرط دوم نمی بیند. اما چنانچه نتیجه گرفت شرط اول غلط است، به ارزیابی شرط دوم می پردازد. اگر دومین شرط صحیح بود در آن صورت حتی اگر شرط اول غلط باشد، کل دستور را صحیح می پندارد و آن را اجرا می کند. دستور اول مثال بالا را در نظر داشته باشید:


SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (City = N'bethesda') OR (City = N'silver spring');
GO

مفسر ابتدا مقدار City یک رکورد را بررسی می کند:
1. اگر رکورد مشخص کند که دانش آموز در شهر Bethesda ساکن است، آن رکورد لحاظ شده و مفسر به رکورد بعدی می پردازد.
2. چنانچه رکورد نشان دهد که دانش آموز در شهر نام برده سکونت ندارد (مقدار ستون City، Bethesda نیست) در آن صورت مفسر شرط دوم را اعمال می کند که در آن بررسی می شود آیا دانش آموز در شهر Silver Spring زندگی می کند یا خیر:
1. اگر دانش آموز در شهر Silver Spring سکونت دارد، در آن صورت رکورد معتبر تلقی می شود.
اگر دانش آموز در شهر Silver Spring زندگی نمی کند و رکورد هم از قبل مشخص کرده که داشن آموز مورد نظر در شهر Bethesda ساکن نیست، آن رکورد کاملا نادیده گرفته شده و در نتیجه ی بازگشتی لحاظ نمی شود.
پس از آن مفسر رکورد بعدی را بررسی می کند.
اکنون دستور دوم را در نظر داشته باشید:


SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'female') OR (City = N'silver spring');
GO

بار دیگر مفسر به نوبت هر رکورد را ارزیابی می کند:
1. مفسر ابتدا مقدار ستون Gender را بررسی می کند. اگر رکورد نشان داد که دانش آموز Female است (مقدار ستون Gender، Female بود)، در آن صورت رکورد معتبر درنظر گرفته شده و مفسر بلافاصله به سراغ رکورد بعدی می رود.
2. اگر ستون Gender دارای مقدار Female نبود، مفسر مقدار ستون City را چک می کند:

  1. اگر ستون دارای مقدار Silver Spring باشد، رکورد معتبر محسوب می شود حتی اگر دانش آموز Female نیست (مقدار ستون Gender، Female نباشد).
  2. اگر رکورد نشان دهد که دانش آموز در شهر Silver Spring زندگی نمی کند (مقدار ستون City، Silver Spring نیست) و همچنین رکورد از قبل مشخص کرده باشد که دانش آموز Female نیست، در آن صورت کل رکورد نامعتبر در نظر گرفته شده و مفسر به رکورد بعدی می پردازد.


آموزش کاربردی: ایجاد یک فصل منطقی

  1. تب مجاور را انتخاب کنید.
  2. برای مشاهده ی آیتم های تولید شده توسط Calvin Klein یا Anne Klein، در پنجره ی Criteria، بر روی کادر Filter متعلق به فیلد Manufacturer کلیک کرده و سپس شرط N'Calvin Klein' OR N'Anne Klein' را در آن وارد نمایید.
  3. جهت مشاهده ی نتیجه، داخل کادر Diagram راست کلیک کرده و گزینه ی Execute SQL را انتخاب نمایید.
آموزش SQL
  1. در کادر Criteria، بر روی فیلد Manufacturer کلیک کرده، سپس در کادر Filter مربوط به این فیلد، عبارت Calvin Klein را درج نمایید.
  2. برای مشاهده ی آیتم های تولید شده توسط Calvin Klein یا Tommy Hilfiger، در پنجره ی Criteria، بر روی کادر موجود در زیر سرستون اولین Or... که مربوط به فیلد Manufacturer است، کلیک کرده و سپس Tommy Hilfiger را داخل آن تایپ کنید.
  3. جهت مشاهده ی نتیجه، داخل کادر Diagram راست کلیک کرده و گزینه ی Execute SQL را انتخاب نمایید.
آموزش SQL

7. در کادر Criteria، بر روی فیلد Manufacturer کلیک نموده، سپس محتویات کادر فیلتر آن را با زدن کلید Delete حذف نمایید.


سایر مباحث درخصوص عطف و فصل منطقی

در بخش های قبلی مبحث عطف و فصل منطقی، فقط از ستون های رشته ای در مثال های خود استفاده می کردیم. لازم است یاداور شویم که برای مقایسه و تطبیق یک ستون دارای مقدار رشته ای (یک کاراکتر، مجموعه کاراکتر و یا زیر رشته) به طور دقیق یا تقریبی، عملگر LIKE را مورد استفاده قرار می دهیم.


مثال:
SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'male') AND (LastName LIKE N'%an');
GO

شرط LIKE مثال زیر برای بازیابی تمامی دانش آموزانی که فامیلی آن ها به "an" ختم می شود، بکار می رود:


آموزش SQL

استفاده از عطف و فصل منطقی در رشته

  1. به منظور مشاهده ی آتیم های تولید شده توسط Klein (Calvin Klein or Anne Klein) و یا Lauren (Ralph Lauren, Polo Ralph Lauren, or Lauren By Ralph Lauren) بر روی کادر Filter متعلق به فیلد Manufacturer کلیک نمایید.
  2. حال عبارت شرطی like %klein% را داخل آن کادر وارد نمایید.
آموزش SQL
  1. حال با زدن کلید Tab به کادر مجاور رفته و عبارت like %lauren% را به عنوان شرط دوم در کادر or… درج نمایید.
  2. برای مشاهده ی نتیجه، داخل کادر Diagram راست کلیک کرده و گزینه ی Execute SQL را انتخاب کنید.
آموزش SQL

عطف، فصل و فیلدهای NULL

برای اضافه کردن قابلیت بررسی NULL بدون یا نبودن یک فیلد، کافی است در دستور شرطی آن، عبارت IS NULL را به اسم ستون مورد نظر اضافه نمایید.


بررسی NULL بودن یک فیلد

  1. داخل کادر Diagram، با کلیک بر روی چک باکس ستون DiscountRate آن را تیک دار نمایید.
  2. برای مشاهده ی آیتم های تولیده شده توسط Ralph Lauren، داخل کادر Criteria، Klein را با lauren (در کادر Filter) جایگزین نمایید.
  3. کلید Tab را زده تا به کادر مجاور هدایت شوید، سپس کلید Delete را فشار داده تا محتویات آن پاک شود.
  4. برای مشاهده ی نتیجه، داخل یکی از کادرهای موجود راست کلیک نموده و سپس گزینه ی Execute SQL را انتخاب کنید.
  5. همان طور مشاهده می کنید، تعدادی از فیلدهای ستون DiscountRate مقدار NULL را نشان می دهند.
آموزش SQL
  1. جهت مشاهده ی آن آیتم هایی که به آن ها تخفیف می خورد (مقدار ستون DiscountRate آن ها null نیست)، بر روی کادر Filter مربوط به آن کلیک کرده . سپس عبارت is null را در آن وارد کنید.
  2. برای مشاهده ی نتیجه، داخل یکی از کادرها راست کلیک کرده و گزینه ی Execute SQL را انتخاب کنید.
آموزش SQL
  1. در کادر Filter متعلق به فیلد DiscountRate، عبارت IS NULL را حذف کنید.
  2. برای مشاهده ی لیستی از آیتم های عرضه شده توسط Coach، در کادر Criteria، عبارت LIKE N'%lauren%' را با Coach جایگزین نمایید.
  3. داخل پنجره راست کلیک کرده و گزینه ی Execute SQL را انتخاب نمایید.

عطف، فصل و مقادیر از انواع داده ای مختلف

می توان علاوه بر فیلدهای رشته ای، ستون های که دارای مقادیر با انواع داده ای دیگر هستند را در عطف یا فصل منطقی بکار برد. به یاد داشته باشید که بایستی در زمان استفاده از مقدار ستونی در شرط از قوانین مرتبط با نوع داده ای آن پیروی نمایید:
1. اگر شرط را به صورت ویزاردی و با ابزار SQL Server ایجاد می کنید، کافی است مقدار دلخواه را در کادر Criteria تایپ نمایید و پس از آن خود محیط نوع داده ای آن را تشخیص می دهد.
2. در صورتی که شرط را با کدنویسی ایجاد می کنید:

  1. چنانچه نوع مقدار فیلد رشته ای یا مربوط به تاریخ/زمان است، در آن صورت می بایست مقدارش را در تک کوتیشن قرار دهید.
  2. اگر نوع داده ای ستون numeric یا عددی تعریف شده باشد، در آن صورت لازم است مقدار عدد دلخواه را مشخص کنید.
  3. در صورتی که فیلد دارای مقدار بولی می باشد، برای false مقدار 0 و برای true 1 را وارد کنید.


اعمال فیلتر برای واکشی مقادیر مد نظر

  1. برای مشاهده ی آیتم های تولید شده توسط Coach که قیمت آن حداقل 250 می باشد، اشاره گر موس را به پنجره ی Criteria هدایت کرده و بر روی کادر Filter متعلق به فیلد UnitPrice کلیک نمایید. عبارت !< 250 را به عنوان شرط در این کادر وارد نمایید.
  2. جهت مشاهده ی نتیجه، داخل پنجره راست کلیک نموده و گزینه ی Execute SQL را انتخاب کنید.
  3. در پنجره ی Criteria ، عبارت >= 250 را از کادر Filter حذف نمایید.
  4. در Criteria، بر روی کادر Filter متعلق به فیلد Manufacturer کلیک کرده و با زدن کلید Delete محتویات آن را پاک کنید.
  5. برای بازیابی لیستی از آیتم های تولید شده توسط Ralph Lauren یا Klein، عبارت شرطی LIKE N'%lauren%' OR LIKE N'%kenneth cole%' OR LIKE N'%klein%' را در کادر Filter مربوط به فیلد Manufacturer وارد نمایید.
  6. به منظور مشاهده ی نتیجه، داخل پنجره راست کلیک کرده و سپس گزینه ی Execute SQL را انتخاب نمایید.
آموزش SQL
  1. در پنجره ی Criteria، فیلد Manufacturer را انتخاب کرده و با فشردن کلید Delete عبارت شرطی کادر Filter آن را پاک کنید.
  2. حال برای واکشی و مشاهده ی آیتم های تولید شده توسط Ralph Lauren، عبارت like %lauren% را وارد کادر Filter کنید.

نقیض کردن یک شرط

همان طور که در درس های قبلی مشاهده شد، روش های مختلفی برای نقیض کردن یک شرط بولی وجود دارد. یادآور می شویم که برای نقیض کردن IS NULL می توان عملگر NOT را به آن اضافه نمود.
در واقع می توان گفت که آسان ترین راه برای نقیض کردن یک شرط، قرار دادن عملگر NOT پیش آن می باشد.


مثال:
SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'female') AND NOT (City = N'silver spring');
GO

همچنین به منظور افزایش خوانایی دستور، می توان آن را داخل پرانتز محصور کرد


مثال:
SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'female') AND (NOT (City = N'silver spring'));
GO

به همین نحو، می توانید شرط ها را به صورت تکی و جداگانه نقیض کنید. همچنین می توان تمام یک دستور را نقیض نمود. برای این منظور پس از کلیدواژه ی WHERE، عملگر NOT و به دنبال آن () را وارد نمایید. سپس عطف یا فصل منطقی را داخل پرانتز درج نمایید.


آموزش کاربردی: نقیض کردن یک شرط

  1. به منظور مشاهده ی آیتم های تولید شده توسط Ralph Lauren که تخفیف به آن ها می خورد، در Criteria، بر روی کادر Filter متعلق به فیلد DiscountRate کلیک کرده و عبارت شرطی is not null را وارد نمایید.
  2. برای مشاهده ی نتیجه، بر روی یکی از کادرهای جاری راست کلیک کرده و گزینه ی Execute SQL را انتخاب نمایید.
آموزش SQL

ترکیب کردن شرط ها

SQL به شما اجازه می دهد با ترکیب عطف و فصل منطقی (and/or) دستورات شرطی پیچیده ایجاد کند.
برای انجام این کار به صورت ویژوال، چندین گزینه پیشرو دارید. اگر قصد ترکیب شرط های نسبتا مستقل را دارید، بایستی هر یک را در کادر Filter یا or… دلخواه تایپ کنید. در صورتی که فصل های منطقی تعریف می کنید که باید به صورت گروهی ارزیابی شود، می بایست هر فصل را در فیلتر مجزا و مختص به خود درج نمایید. با کدنویسی و دستورات SQL می توان هر تعداد شرط که لازم است، تعریف کرد.


مثال:
SELECT StudentNumber [Student #], 
       FirstName [First Name],
       LastName "Last Name",
       Gender, City,
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'male') AND (City = N'silver spring')
                          AND (LastName LIKE N'%n');
GO

چنانچه شرط مورد نظر فقط از عطف منطقی تشکیل شده، مفسر ابتدا شرط اول را بررسی می کند:
1. در صورتی که شرط اول false باشد، کل دستور غلط محسوب می شود. در پی آن کل رکورد نامعتبر تلقی شده و مفسر به رکورد بعدی می پردازد.
2. اگر شرط اول صحیح باشد، مفسر به سراغ شرط دوم می رود:


  1. چنانچه شرط دوم غلط باشد، کل دستور false ارزیابی شده و مفسر به سراغ رکورد بعدی می رود.
  2. اگر شرط دوم صحیح باشد، مفسر به شرط بعدی می پردازد:
    1. در صورتی که شرط بعدی false باشد، کل دستور غلط ارزیابی شده و مفسر به رکورد بعدی می پردازد.
    2. اگر شرط بعدی صحیح بوده و دستور دربردارنده ی فقط سه شرط باشد، رکورد معتبر محسوب شده و در نتیجه یا خروجی لحاظ خواهد شد.

مفسر برای ارزیابی عطف های منطقی متعدد که در دستور شرطی ذکر شده اند، تمامی گام های ذکر شده را دنبال می کند. اگر دستور صرفا در خود فصل منطقی داشته باشد، آن زمان رویکرد از نظر منطقی کمی متفاوت خواهد بود. مفسر ابتدا شرط اول را مورد ارزیابی قرار می دهد:
1. اگر شرط اول صحیح باشد، کل دستور صحیح محسوب می شود. به دنبال آن رکورد مربوطه نیز معتبر تلقی می شود (در خروجی نمایش داده می شود) و بدین ترتیب مفسر به رکورد بعدی می پردازد.
2. اگر شرط اول false باشد، مفسر شرط دوم را چک می کند:


  1. اگر شرط دوم صحیح بود، کل دستور true درنظر گرفته شده و رکورد معتبر تلقی می شود (در نتیجه لحاظ خواهد شد). بنابراین مفسر به رکورد بعدی می پردازد.
  2. در صورتی که شرط دوم غلط بود، مفسر به سراغ شرط بعدی می رود:
  • اگر آن شرط بعدی درست بود، کل دستور true می شود. رکورد معتبر درنظر گرفته شده و در خروجی نمایش داده می شود.
  • اگر شرط بعدی false باشد و دستور در کل تنها سه شرط در خود داشته باشد، کل آن رکورد غلط محسوب شده و در نتیجه آورده نمی شود.

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


SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name",
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  ((Gender = N'female') AND (City = N'silver spring'))
	OR
       ((Gender = N'male') AND (City = N'bethesda'));
GO

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


آموزش SQL
به همین ترتیب، می توانید شرط های بسیار پیچیده تر تنظیم کنید.

آموزش کاربردی: تنظیم شرط های مرکب

  1. برای مشاهده ی لیستی از آیتم ها که توسط Lauren یا Klein تولید شده، بر روی کادر or… متعلق به فیلد Manufacturer کلیک کرده و عبارت like %lauren% را تایپ کنید. حال بر روی کادر or… بعدی همین فیلد کلیک کرده و عبارت like %klein% را به عنوان شرط وارد کنید.
  2. عبارت IS NOT NULL را در کادر Filter مربوط به فیلد DiscountRate وارد کنید. اکنون بر روی اولین کادر or… متعلق به فیلد مزبور کلیک نموده و عبارت is not null را در آن تکرار کنید.
  3. برای مشاهده ی نتیجه، داخل کادر Diagram راست کلیک کرده و گزینه ی Execute SQL را انتخاب کنید.
آموزش SQL

4. تب مجاور (SQLQuery1.sql) را انتخاب نموده و کد زیر را در آن وارد کنید:


SELECT  ItemNumber AS [Item #],
Manufacturer,
Category,
SubCategory AS [Sub-Category],
ItemName AS [Name/Description],
UnitPrice AS [Unit Price], 
DiscountRate AS [%Discount]
FROM    Inventory.StoreItems
WHERE   (Manufacturer LIKE N'%lauren%') AND (DiscountRate IS NOT NULL)
OR
(Manufacturer LIKE N'%klein%') AND (DiscountRate IS NOT NULL)

5. برای اجرای دستور، کلید F5 را بزنید.
6. برای مشاهده ی نتیجه داخل پنجره ی Diagram راست کلیک کرده و گزینه ی Execute SQL را کلیک کنید.


آموزش SQL

7. تب SQLQuery1.sql را باز کنید.
8. مشتری را درنظر بگیرید که می خواهد یک آپارتمان تک خوابه در طبقه ی اول اجاره کند (آپارتمان های طبقه ی اول از 100 تا 199 شماره گذاری شده اند). دستور زیر را به صورت زیر ویرایش نمایید:


USE LambdaSquare1;
GO
SELECT "Unit #" = aparts.UnitNumber,
       Beds = aparts.Bedrooms, 
       Baths = aparts.Bathrooms,
       [Monthly Rent] = aparts.Price, 
       "Primary Deposit" = aparts.Deposit,
       (aparts.Price + aparts.Deposit) "Due Before Moving", 
       CASE aparts.Available
	    WHEN 0 THEN N'No or Not Yet'
	    WHEN 1 THEN N'Yes'
       END "Available"
FROM Presentation.Units aparts
WHERE (aparts.UnitNumber < 200) AND
      (aparts.Bedrooms = 1) AND
	  (aparts.Available = 1)
ORDER BY [Monthly Rent], "Primary Deposit";
GO

9. برای اجرای دستور، کلید F5 را فشار دهید.


آموزش SQL
دوره های مرتبط با این مقاله

مقدمه ای بر عطف و فصل

عطف منطقی

تاکنون شرط ها را به صورت منفرد بکار برده یا اعمال می کردیم. در این روش، تفسیر شرط بسیار آسان بود. اما گاهی لازم است شرطی را آزمایش کنیم که خود مربوط یا وابسته به شرط دیگری است. جبر بولی این امکان را مهیا می کند تا دو شرط را با یکدیگر ترکیب نموده و نتیجه ی حاصل را مورد استفاده قرار داد و یا دو شرط را ارزیابی کرده و بررسی کرد آیا هریک از دو شرط true هستند یا خیر.
تصور کنید فهرستی از دانش آموزان را پیشرو دارید و اکنون قصد دارید اطلاعاتی را از پایگاه داده ی خود واکشی کرده و مشاهده نمایید. می دانید که برای دریافت لیستی از دانش آموزان دختر بایستی دانش آموزان را بر اساس جنسیت (gender) فیلتر کنید. دستور مربوطه را می بایست به صورت زیر نوشته و اجرا نمایید:


SELECT StudentNumber [Student #],
       FirstName [First Name],
       LastName "Last Name",
       Gender,
       City,
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  Gender = N'Female';
GO

خروجی:
آموزش SQL

حال تصویر کنید می خواهید لیستی از دانش آموزان را بازیابی کنید که در شهر Silver Spring اقامت دارند. برای این منظور کوئری را به صورت زیر نگارش می کنیم:


SELECT StudentNumber [Student #],
       FirstName [First Name],
       LastName "Last Name",
       Gender,
       City,
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  City = N'silver spring';
GO

نتیجه ی زیر حاصل می گردد:
آموزش SQL

از این دو نتیجه متوجه می شویم که هیچ رابطه ای بین اینکه دانش آموز دختر (Female) است و در شهر Silver Spring اقامت دارد، دیده نمی شود. با این وجود SQL به شما این اجازه را می دهد که دو شرط را با یکدیگر ترکیب نمایید تا نتیجه ی حاصل اشتراک بین دو شرط باشد. از این رخداد با نام عطف منطقی (logical conjunction) یاد می شود.


آموزش کاربردی

1. محیط SQL Server را راه اندازی کرده و سپس بر روی دکمه ی Connect، در پنجره ی محاوره ای اتصال به سرور، کلیک نمایید.
2. در پنجره ی Object Explorer، گره Databases را باز نمایید.
3. در این پنجره بایستی پایگاه داده ای به نام Department Store1 وجود داشته باشد. با کلیک بر روی علامت +، گره آن را باز نمایید.
4. بر روی Department Store1 راست کلیک نموده و گزینه ی New Query را انتخاب نمایید.
5. حال گره ی Tables را باز نمایید.
6. بر روی Inventory.StoreItems راست کلیک کرده و گزینه ی Edit Top 200 Rows را انتخاب نمایید.
7. در نوار ابزار Query Designer، بر روی دکمه های آموزش SQL،آموزش SQLوآموزش SQLبه ترتیب کلیک نمایید.
8. اکنون در کادر SQL، دستور جاری را به صورت زیر ویرایش کنید:


SELECT ItemNumber AS [Item #],
Manufacturer,
Category,
SubCategory AS [Sub-Category], 
ItemName AS [Name/Description], 
UnitPrice AS [Unit Price]
FROM   Inventory.StoreItems

9. به منوی اصلی مراجعه کرده و بر روی Query Designer کلیک کنید. سپس گزینه ی Execute SQL را انتخاب نمایید.


ایجاد یک عطف منطقی به وسیله ی عملگر AND

ساده ترین شرط منطقی دو ستون را شامل می شود. می توان عطف را به صورت ویژوال و یا با کدنویسی ایجاد کرد. برای ایجاد یا تعریف یک عطف منطقی به صورت ویژوال می بایست گام های زیر را دنبال کرد:
در بخش result پنجره ی Query Editor یا کادر Results در Query Designer:
• برای گزینش مجموعه ای از رکوردها، بر روی header یکی از رکوردها (کادر خاکستری رنگ موجود در سمت چپ رکورد) کلیک کرده، سپس Shift را فشار داده و نگه دارید. حال بر روی header رکورد پایانی کلیک و برای Shift را رها کنید.
جهت انتخاب رکوردها به صورت تصادفی، بر روی header یکی از سطرها کلیک نموده کلید Ctrl را فشار دهید و نگه دارید. حال بر روی هریک از header رکوردهای جاری کلیک کرده و کلید Ctrl را رها کنید.


مثال:
آموزش SQL

• اکنون یک جدول در Query Designer باز کرده و کادر Criteria را نمایش دهید. در پنجره ی Criteria، بر روی کادر Filter مربوط به اولین فیلد دلخواه کلیک کرده و شرط یا فیلتر مورد نظر را وارد نمایید. اکنون بر روی کادر Filter مربوط به فیلد دوم کلیک کرده و شرط دوم را درج کنید. کوئری را اجرا نمایید.
در تعریف یک شرط منطقی به صورت کدنویسی در SQL، عملگر AND را برای ترکیب دو شرط بکار می بریم. فرمول استفاده از آن به صورت زیر می باشد:


SELECT WhatColumn(s)
FROM   WhatObject
WHERE  Condition1 AND Condition2

کلیدواژه ی AND عملگری است که دو شرط را با هم پیوند می زند.
دستوری که دو شرط را به وسیله ی عملگر نام برده با هم ترکیب می کند، می بایست ساختار نگارشی به شرح زیر داشته باشد:


Column operator Value 

در فرمول فوق، اولین شرط است که ارزیابی می شود. در صورت false بودن شرط اول، کل دستور WHERE ناصحیح تلقی شده و هیچ لزومی به بررسی شرط دوم دیده نمی شود. تنها در صورت صحیح بودن شرط اول، شرط دوم بررسی می شود. به عبارتی روشن تر عملگر And برای به اجرا درآوردن دستور ایجاب می کند تمامی شرط های مشخص شده برای آن صحیح باشد، در غیر این صورت کل دستور WHERE غلط محسوب می شود.
با توجه به آنچه گفته شد، فرض کنید می خواهیم لیستی از دانش آموزان دختر را که در شهر Silver Spring سکونت دارند، بدست آوریم. دستور SQL لازم برای بازیابی این نتیجه به صورت زیر نوشته می شود:


SELECT StudentNumber [Student #],
       FirstName [First Name],
       LastName "Last Name",
       Gender,
       City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  Gender = N'female' AND City = N'silver spring';
GO

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


SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, 
       City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'female') AND (City = N'silver spring')

نتیجه ی زیر را برمی گرداند:
آموزش SQL

آموزش کاربردی

1. در پنجره ی Criteria، بر روی کادر Filter مربوط به فیلد Manufacturer کلیک نمایید.
2. برای مشاهده ی فهرستی از اقلام تولید شده توسط Calvin Klein، Calvin Klein را به عنوان فیلتر وارد نمایید.
3. برای اجرای مجموعه دستورات و مشاهده ی نتیجه ی کوئری، داخل پنجره ی Diagram راست کلیک کرده و گزینه ی Execute SQL را فشار دهید.
4. حال برای بازیابی آیتم های تولید شده توسط Calvin Klein، اما این بار فقط آن هایی که دارای قیمت 150 دلار یا ارزان تر هستند، بر روی کادر Filter مربوطه کلیک نموده و عبارت شرطی <=150 را به عنوان فیلتر درج نمایید.
5. برای اجرای کوئری و مشاهده ی نتیجه، داخل کادر Diagram راست کلیک کرده و گزینه ی Execute SQL را انتخاب نمایید.


آموزش SQL

6. برای مخفی کردن ستون ها، کافی است در کادر Criteria، بر روی چک باکس مربوط به ستون Manufacturer کلیک کرده و تیک آن را حذف کنید.
7. جهت اجرای دستور و مشاهده ی نتیجه، در نوار ابزار Query Designer، بر روی دکمه ی آموزش SQLکلیک نمایید.
8. برای مجددا نمایان ساختن ستون مورد نظر، بایستی در کادر Criteria، بر روی چک باکس مربوطه ی آن ستون ( موجود در زیر سرستون Output) کلیک نمایید.
9. بر روی سرستون Filter (در کادر Criteria) کلیک کرده و سپس با زدن کلید Delete تمامی عبارت های شرطی را حذف نمایید.
10. حال روی تب SQLQuery1.sql کلیک کنید.
11. فرض کنید یک مشتری قصد اجاره ی آپارتمانی با یک اتاق خواب را دارد. در درجه ی اول آن آپارتمان باید در دسترس باشد. برای این منظور، دستور زیر را تایپ نمایید:

USE LambdaSquare1;
GO
SELECT "Unit #" = aparts.UnitNumber,
       Beds = aparts.Bedrooms, 
       Baths = aparts.Bathrooms,
       [Monthly Rent] = aparts.Price, 
       "Primary Deposit" = aparts.Deposit,
       (aparts.Price + aparts.Deposit) "Due Before Moving", 
       CASE aparts.Available
           WHEN 0 THEN N'No or Not Yet'
           WHEN 1 THEN N'Yes'
       END "Available"
FROM Presentation.Units aparts
WHERE (Bedrooms = 1) AND (Available = 1)
ORDER BY [Monthly Rent], "Primary Deposit";
GO

12. به منظور اجرای دستور، کلید F5 را فشار دهید.


آموزش SQL

فصل منطقی

عطف منطقی برای بررسی دو شرط بکار می رود. لازم به ذکر است که هر دو شرط باید درست باشند تا دستور WHERE اجرا گردد. در این عطف اگر حتی یکی از دو شرط غلط باشد، کل دستور false تلقی می شود. گاهی دو شرط داریم که هر دو از اهمیت یکسان برخوردار هستند و همچنین درستی یک کدام کافی است که کل دستور صحیح شده و دستور اجرا گردد. از این نوع شرط با نام فصل منطقی (logical disjunction) یاد می شود.
علاوه بر اختلاف در اسم، عطف و وصل تفاوت های منطقی فراوانی با یکدیگر دارند. عطف منطقی به دو فیلد متفاوت نیاز دارد. اگر در هر دو شرط یک فیلد یکسان را ذکر کنید، دستور هیچ خروجی را برنمی گرداند:


آموزش SQL

بنابراین باید همیشه در دو شرط، ستونی متفاوت را ذکر کنید. این در حالی است که فصل منطقی اجازه می دهد در هر دو شرط که توسط AND به هم پیوند زده می شوند، ستونی یکسان را ذکر کرد.
در فصل منطقی، از مفسر خواسته می شود که دو شرط را ارزیابی کرده و در صورت صحیح بودن شرط، دستور را اجرا کند (اگر حتی یکی از شرط ها صحیح باشد، دستور اجرا می شود).
مشابه عطف، فصل را می توان بر روی چندین فیلد اجرا کرد.


تعریف یک فصل منطقی

همان طور که قبلا ذکر شد، فصل منطقی را می توان برای چندین فیلد بکار برد. فصل منطقی را می توان به صورت ویژوال یا با کد نویسی ایجاد کرد.
برای تعریف یک فصل منطقی به صورت ویژوال، ابتدا یک جدول در Query Designer باز کنید. سپس کادر Criteria را با کلیک بر روی دکمه ی آموزش SQLبه نمایش درآورید.
چندین گزینه پیشرو دارید:
در پنجره ی Criteria:
1. برای تعریف فصل منطقی در تنها یک کادر، بر روی کادر Filter ستون مربوطه کلیک نمایید. شرط اول را وارد نموده و بلا فاصله پس از آن کلیدواژه ی OR و در پایان شرط دیگر را وارد کنید. به همین نحو می توانید تعداد بی شماری شرط به همراه فصل منطقی OR در این کادر مشخص کنید.
و اما برای استفاده از چندین کادر برای تعریف شرط:

  • اگر می خواهید مقدار تنها یک فیلد را بررسی کنید، بر روی کادر Filter متعلق به ستون مربوطه کلیک کرده و شرط اول را در آنجا وارد کنید. سپس شرط دوم را در کادر مجاور آن، در زیر سرستون or… تایپ نمایید.
  • چنانچه قصد دارید آن مقدار را در بیش از یک ستون بررسی کنید، بر روی کادر Filter متعلق به یکی از ستون ها کلیک کرده و اولین شرط را درج نمایید. سپس بر روی کادر Or... مربوط به فیلد دوم کلیک کرده و شرط دوم را وارد کنید.

پس از وارد کردن شرط ها در جایگاه مناسب، کوئری را اجرا کنید.
برای تعریف فصل منطقی به روش کدنویسی، عملگر OR را بین دو شرط در کد جای گذاری می کنیم. فرمولی که باید استفاده شود، به صورت زیر می باشد:


SELECT WhatColumn(s)
FROM   WhatObject
WHERE  Condition1 OR Condition2

در فرمول بالا، کلیدواژه ی OR عملگری است که دو شرط را با هم ترکیب می کند. هر طرف شرط خود طبق فرمول زیر نوشته می شود:


Column operator Value

• اگر مقادیر تنها یک ستون را بررسی می کنید، در آن صورت اسم ستون را در هر دو شرط ذکر نموده و عملگر مناسب و مقدار دلخواه را نیز در هر شرط تایپ نمایید. در زیر مثالی را مشاهده می کنید که در آن دستور لیستی از دانشجو آموزان که در یکی از دو شهر Bethesda و Silver Spring سکونت دارند را بازیابی می کند:


SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name",
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (City = N'bethesda') OR (City = N'silver spring');
GO

• اگر مقدار فیلدهای مختلف را می خواهید بررسی کنید، هر یک را در شرط مختص به خود ذکر کرده و بلافاصله پس از اسم ستون عملگر و در پایان مقدار مورد نظر را مشخص کنید. دستور زیر لیستی از دانش آموزان را برمی گرداند که دارای یکی از این دو خاصیت هستند: 1. در Silver Spring زندگی می کنند و یا 2. دختر هستند.


SELECT StudentNumber [Student #],
       FirstName [First Name],
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'female') OR (City = N'silver spring');
GO 

عملگرهای فصل و عطف منطقی به صورت متفاوت عمل می کنند. همان طور که قبلا گفتیم، در عطف های منطقی، هر دو شرط بایستی صحیح باشند تا کل دستور true تلقی شده و اجرا گردد. در فصل منطقی، مفسر ابتدا شرط اول را بررسی می کند، در صورت صحیح بودن آن شرط نتیجه می گیرد که کل دستور WHERE صحیح است و دیگر نیازی به ارزیابی شرط دوم نمی بیند. اما چنانچه نتیجه گرفت شرط اول غلط است، به ارزیابی شرط دوم می پردازد. اگر دومین شرط صحیح بود در آن صورت حتی اگر شرط اول غلط باشد، کل دستور را صحیح می پندارد و آن را اجرا می کند. دستور اول مثال بالا را در نظر داشته باشید:


SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (City = N'bethesda') OR (City = N'silver spring');
GO

مفسر ابتدا مقدار City یک رکورد را بررسی می کند:
1. اگر رکورد مشخص کند که دانش آموز در شهر Bethesda ساکن است، آن رکورد لحاظ شده و مفسر به رکورد بعدی می پردازد.
2. چنانچه رکورد نشان دهد که دانش آموز در شهر نام برده سکونت ندارد (مقدار ستون City، Bethesda نیست) در آن صورت مفسر شرط دوم را اعمال می کند که در آن بررسی می شود آیا دانش آموز در شهر Silver Spring زندگی می کند یا خیر:
1. اگر دانش آموز در شهر Silver Spring سکونت دارد، در آن صورت رکورد معتبر تلقی می شود.
اگر دانش آموز در شهر Silver Spring زندگی نمی کند و رکورد هم از قبل مشخص کرده که داشن آموز مورد نظر در شهر Bethesda ساکن نیست، آن رکورد کاملا نادیده گرفته شده و در نتیجه ی بازگشتی لحاظ نمی شود.
پس از آن مفسر رکورد بعدی را بررسی می کند.
اکنون دستور دوم را در نظر داشته باشید:


SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'female') OR (City = N'silver spring');
GO

بار دیگر مفسر به نوبت هر رکورد را ارزیابی می کند:
1. مفسر ابتدا مقدار ستون Gender را بررسی می کند. اگر رکورد نشان داد که دانش آموز Female است (مقدار ستون Gender، Female بود)، در آن صورت رکورد معتبر درنظر گرفته شده و مفسر بلافاصله به سراغ رکورد بعدی می رود.
2. اگر ستون Gender دارای مقدار Female نبود، مفسر مقدار ستون City را چک می کند:

  1. اگر ستون دارای مقدار Silver Spring باشد، رکورد معتبر محسوب می شود حتی اگر دانش آموز Female نیست (مقدار ستون Gender، Female نباشد).
  2. اگر رکورد نشان دهد که دانش آموز در شهر Silver Spring زندگی نمی کند (مقدار ستون City، Silver Spring نیست) و همچنین رکورد از قبل مشخص کرده باشد که دانش آموز Female نیست، در آن صورت کل رکورد نامعتبر در نظر گرفته شده و مفسر به رکورد بعدی می پردازد.


آموزش کاربردی: ایجاد یک فصل منطقی

  1. تب مجاور را انتخاب کنید.
  2. برای مشاهده ی آیتم های تولید شده توسط Calvin Klein یا Anne Klein، در پنجره ی Criteria، بر روی کادر Filter متعلق به فیلد Manufacturer کلیک کرده و سپس شرط N'Calvin Klein' OR N'Anne Klein' را در آن وارد نمایید.
  3. جهت مشاهده ی نتیجه، داخل کادر Diagram راست کلیک کرده و گزینه ی Execute SQL را انتخاب نمایید.
آموزش SQL
  1. در کادر Criteria، بر روی فیلد Manufacturer کلیک کرده، سپس در کادر Filter مربوط به این فیلد، عبارت Calvin Klein را درج نمایید.
  2. برای مشاهده ی آیتم های تولید شده توسط Calvin Klein یا Tommy Hilfiger، در پنجره ی Criteria، بر روی کادر موجود در زیر سرستون اولین Or... که مربوط به فیلد Manufacturer است، کلیک کرده و سپس Tommy Hilfiger را داخل آن تایپ کنید.
  3. جهت مشاهده ی نتیجه، داخل کادر Diagram راست کلیک کرده و گزینه ی Execute SQL را انتخاب نمایید.
آموزش SQL

7. در کادر Criteria، بر روی فیلد Manufacturer کلیک نموده، سپس محتویات کادر فیلتر آن را با زدن کلید Delete حذف نمایید.


سایر مباحث درخصوص عطف و فصل منطقی

در بخش های قبلی مبحث عطف و فصل منطقی، فقط از ستون های رشته ای در مثال های خود استفاده می کردیم. لازم است یاداور شویم که برای مقایسه و تطبیق یک ستون دارای مقدار رشته ای (یک کاراکتر، مجموعه کاراکتر و یا زیر رشته) به طور دقیق یا تقریبی، عملگر LIKE را مورد استفاده قرار می دهیم.


مثال:
SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'male') AND (LastName LIKE N'%an');
GO

شرط LIKE مثال زیر برای بازیابی تمامی دانش آموزانی که فامیلی آن ها به "an" ختم می شود، بکار می رود:


آموزش SQL

استفاده از عطف و فصل منطقی در رشته

  1. به منظور مشاهده ی آتیم های تولید شده توسط Klein (Calvin Klein or Anne Klein) و یا Lauren (Ralph Lauren, Polo Ralph Lauren, or Lauren By Ralph Lauren) بر روی کادر Filter متعلق به فیلد Manufacturer کلیک نمایید.
  2. حال عبارت شرطی like %klein% را داخل آن کادر وارد نمایید.
آموزش SQL
  1. حال با زدن کلید Tab به کادر مجاور رفته و عبارت like %lauren% را به عنوان شرط دوم در کادر or… درج نمایید.
  2. برای مشاهده ی نتیجه، داخل کادر Diagram راست کلیک کرده و گزینه ی Execute SQL را انتخاب کنید.
آموزش SQL

عطف، فصل و فیلدهای NULL

برای اضافه کردن قابلیت بررسی NULL بدون یا نبودن یک فیلد، کافی است در دستور شرطی آن، عبارت IS NULL را به اسم ستون مورد نظر اضافه نمایید.


بررسی NULL بودن یک فیلد

  1. داخل کادر Diagram، با کلیک بر روی چک باکس ستون DiscountRate آن را تیک دار نمایید.
  2. برای مشاهده ی آیتم های تولیده شده توسط Ralph Lauren، داخل کادر Criteria، Klein را با lauren (در کادر Filter) جایگزین نمایید.
  3. کلید Tab را زده تا به کادر مجاور هدایت شوید، سپس کلید Delete را فشار داده تا محتویات آن پاک شود.
  4. برای مشاهده ی نتیجه، داخل یکی از کادرهای موجود راست کلیک نموده و سپس گزینه ی Execute SQL را انتخاب کنید.
  5. همان طور مشاهده می کنید، تعدادی از فیلدهای ستون DiscountRate مقدار NULL را نشان می دهند.
آموزش SQL
  1. جهت مشاهده ی آن آیتم هایی که به آن ها تخفیف می خورد (مقدار ستون DiscountRate آن ها null نیست)، بر روی کادر Filter مربوط به آن کلیک کرده . سپس عبارت is null را در آن وارد کنید.
  2. برای مشاهده ی نتیجه، داخل یکی از کادرها راست کلیک کرده و گزینه ی Execute SQL را انتخاب کنید.
آموزش SQL
  1. در کادر Filter متعلق به فیلد DiscountRate، عبارت IS NULL را حذف کنید.
  2. برای مشاهده ی لیستی از آیتم های عرضه شده توسط Coach، در کادر Criteria، عبارت LIKE N'%lauren%' را با Coach جایگزین نمایید.
  3. داخل پنجره راست کلیک کرده و گزینه ی Execute SQL را انتخاب نمایید.

عطف، فصل و مقادیر از انواع داده ای مختلف

می توان علاوه بر فیلدهای رشته ای، ستون های که دارای مقادیر با انواع داده ای دیگر هستند را در عطف یا فصل منطقی بکار برد. به یاد داشته باشید که بایستی در زمان استفاده از مقدار ستونی در شرط از قوانین مرتبط با نوع داده ای آن پیروی نمایید:
1. اگر شرط را به صورت ویزاردی و با ابزار SQL Server ایجاد می کنید، کافی است مقدار دلخواه را در کادر Criteria تایپ نمایید و پس از آن خود محیط نوع داده ای آن را تشخیص می دهد.
2. در صورتی که شرط را با کدنویسی ایجاد می کنید:

  1. چنانچه نوع مقدار فیلد رشته ای یا مربوط به تاریخ/زمان است، در آن صورت می بایست مقدارش را در تک کوتیشن قرار دهید.
  2. اگر نوع داده ای ستون numeric یا عددی تعریف شده باشد، در آن صورت لازم است مقدار عدد دلخواه را مشخص کنید.
  3. در صورتی که فیلد دارای مقدار بولی می باشد، برای false مقدار 0 و برای true 1 را وارد کنید.


اعمال فیلتر برای واکشی مقادیر مد نظر

  1. برای مشاهده ی آیتم های تولید شده توسط Coach که قیمت آن حداقل 250 می باشد، اشاره گر موس را به پنجره ی Criteria هدایت کرده و بر روی کادر Filter متعلق به فیلد UnitPrice کلیک نمایید. عبارت !< 250 را به عنوان شرط در این کادر وارد نمایید.
  2. جهت مشاهده ی نتیجه، داخل پنجره راست کلیک نموده و گزینه ی Execute SQL را انتخاب کنید.
  3. در پنجره ی Criteria ، عبارت >= 250 را از کادر Filter حذف نمایید.
  4. در Criteria، بر روی کادر Filter متعلق به فیلد Manufacturer کلیک کرده و با زدن کلید Delete محتویات آن را پاک کنید.
  5. برای بازیابی لیستی از آیتم های تولید شده توسط Ralph Lauren یا Klein، عبارت شرطی LIKE N'%lauren%' OR LIKE N'%kenneth cole%' OR LIKE N'%klein%' را در کادر Filter مربوط به فیلد Manufacturer وارد نمایید.
  6. به منظور مشاهده ی نتیجه، داخل پنجره راست کلیک کرده و سپس گزینه ی Execute SQL را انتخاب نمایید.
آموزش SQL
  1. در پنجره ی Criteria، فیلد Manufacturer را انتخاب کرده و با فشردن کلید Delete عبارت شرطی کادر Filter آن را پاک کنید.
  2. حال برای واکشی و مشاهده ی آیتم های تولید شده توسط Ralph Lauren، عبارت like %lauren% را وارد کادر Filter کنید.

نقیض کردن یک شرط

همان طور که در درس های قبلی مشاهده شد، روش های مختلفی برای نقیض کردن یک شرط بولی وجود دارد. یادآور می شویم که برای نقیض کردن IS NULL می توان عملگر NOT را به آن اضافه نمود.
در واقع می توان گفت که آسان ترین راه برای نقیض کردن یک شرط، قرار دادن عملگر NOT پیش آن می باشد.


مثال:
SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'female') AND NOT (City = N'silver spring');
GO

همچنین به منظور افزایش خوانایی دستور، می توان آن را داخل پرانتز محصور کرد


مثال:
SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name", 
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'female') AND (NOT (City = N'silver spring'));
GO

به همین نحو، می توانید شرط ها را به صورت تکی و جداگانه نقیض کنید. همچنین می توان تمام یک دستور را نقیض نمود. برای این منظور پس از کلیدواژه ی WHERE، عملگر NOT و به دنبال آن () را وارد نمایید. سپس عطف یا فصل منطقی را داخل پرانتز درج نمایید.


آموزش کاربردی: نقیض کردن یک شرط

  1. به منظور مشاهده ی آیتم های تولید شده توسط Ralph Lauren که تخفیف به آن ها می خورد، در Criteria، بر روی کادر Filter متعلق به فیلد DiscountRate کلیک کرده و عبارت شرطی is not null را وارد نمایید.
  2. برای مشاهده ی نتیجه، بر روی یکی از کادرهای جاری راست کلیک کرده و گزینه ی Execute SQL را انتخاب نمایید.
آموزش SQL

ترکیب کردن شرط ها

SQL به شما اجازه می دهد با ترکیب عطف و فصل منطقی (and/or) دستورات شرطی پیچیده ایجاد کند.
برای انجام این کار به صورت ویژوال، چندین گزینه پیشرو دارید. اگر قصد ترکیب شرط های نسبتا مستقل را دارید، بایستی هر یک را در کادر Filter یا or… دلخواه تایپ کنید. در صورتی که فصل های منطقی تعریف می کنید که باید به صورت گروهی ارزیابی شود، می بایست هر فصل را در فیلتر مجزا و مختص به خود درج نمایید. با کدنویسی و دستورات SQL می توان هر تعداد شرط که لازم است، تعریف کرد.


مثال:
SELECT StudentNumber [Student #], 
       FirstName [First Name],
       LastName "Last Name",
       Gender, City,
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  (Gender = N'male') AND (City = N'silver spring')
                          AND (LastName LIKE N'%n');
GO

چنانچه شرط مورد نظر فقط از عطف منطقی تشکیل شده، مفسر ابتدا شرط اول را بررسی می کند:
1. در صورتی که شرط اول false باشد، کل دستور غلط محسوب می شود. در پی آن کل رکورد نامعتبر تلقی شده و مفسر به رکورد بعدی می پردازد.
2. اگر شرط اول صحیح باشد، مفسر به سراغ شرط دوم می رود:


  1. چنانچه شرط دوم غلط باشد، کل دستور false ارزیابی شده و مفسر به سراغ رکورد بعدی می رود.
  2. اگر شرط دوم صحیح باشد، مفسر به شرط بعدی می پردازد:
    1. در صورتی که شرط بعدی false باشد، کل دستور غلط ارزیابی شده و مفسر به رکورد بعدی می پردازد.
    2. اگر شرط بعدی صحیح بوده و دستور دربردارنده ی فقط سه شرط باشد، رکورد معتبر محسوب شده و در نتیجه یا خروجی لحاظ خواهد شد.

مفسر برای ارزیابی عطف های منطقی متعدد که در دستور شرطی ذکر شده اند، تمامی گام های ذکر شده را دنبال می کند. اگر دستور صرفا در خود فصل منطقی داشته باشد، آن زمان رویکرد از نظر منطقی کمی متفاوت خواهد بود. مفسر ابتدا شرط اول را مورد ارزیابی قرار می دهد:
1. اگر شرط اول صحیح باشد، کل دستور صحیح محسوب می شود. به دنبال آن رکورد مربوطه نیز معتبر تلقی می شود (در خروجی نمایش داده می شود) و بدین ترتیب مفسر به رکورد بعدی می پردازد.
2. اگر شرط اول false باشد، مفسر شرط دوم را چک می کند:


  1. اگر شرط دوم صحیح بود، کل دستور true درنظر گرفته شده و رکورد معتبر تلقی می شود (در نتیجه لحاظ خواهد شد). بنابراین مفسر به رکورد بعدی می پردازد.
  2. در صورتی که شرط دوم غلط بود، مفسر به سراغ شرط بعدی می رود:
  • اگر آن شرط بعدی درست بود، کل دستور true می شود. رکورد معتبر درنظر گرفته شده و در خروجی نمایش داده می شود.
  • اگر شرط بعدی false باشد و دستور در کل تنها سه شرط در خود داشته باشد، کل آن رکورد غلط محسوب شده و در نتیجه آورده نمی شود.

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


SELECT StudentNumber [Student #],
       FirstName [First Name], 
       LastName "Last Name",
       Gender, City, 
       ParentsNames [Parents Names]
FROM   Registration.Students
WHERE  ((Gender = N'female') AND (City = N'silver spring'))
	OR
       ((Gender = N'male') AND (City = N'bethesda'));
GO

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


آموزش SQL
به همین ترتیب، می توانید شرط های بسیار پیچیده تر تنظیم کنید.

آموزش کاربردی: تنظیم شرط های مرکب

  1. برای مشاهده ی لیستی از آیتم ها که توسط Lauren یا Klein تولید شده، بر روی کادر or… متعلق به فیلد Manufacturer کلیک کرده و عبارت like %lauren% را تایپ کنید. حال بر روی کادر or… بعدی همین فیلد کلیک کرده و عبارت like %klein% را به عنوان شرط وارد کنید.
  2. عبارت IS NOT NULL را در کادر Filter مربوط به فیلد DiscountRate وارد کنید. اکنون بر روی اولین کادر or… متعلق به فیلد مزبور کلیک نموده و عبارت is not null را در آن تکرار کنید.
  3. برای مشاهده ی نتیجه، داخل کادر Diagram راست کلیک کرده و گزینه ی Execute SQL را انتخاب کنید.
آموزش SQL

4. تب مجاور (SQLQuery1.sql) را انتخاب نموده و کد زیر را در آن وارد کنید:


SELECT  ItemNumber AS [Item #],
Manufacturer,
Category,
SubCategory AS [Sub-Category],
ItemName AS [Name/Description],
UnitPrice AS [Unit Price], 
DiscountRate AS [%Discount]
FROM    Inventory.StoreItems
WHERE   (Manufacturer LIKE N'%lauren%') AND (DiscountRate IS NOT NULL)
OR
(Manufacturer LIKE N'%klein%') AND (DiscountRate IS NOT NULL)

5. برای اجرای دستور، کلید F5 را بزنید.
6. برای مشاهده ی نتیجه داخل پنجره ی Diagram راست کلیک کرده و گزینه ی Execute SQL را کلیک کنید.


آموزش SQL

7. تب SQLQuery1.sql را باز کنید.
8. مشتری را درنظر بگیرید که می خواهد یک آپارتمان تک خوابه در طبقه ی اول اجاره کند (آپارتمان های طبقه ی اول از 100 تا 199 شماره گذاری شده اند). دستور زیر را به صورت زیر ویرایش نمایید:


USE LambdaSquare1;
GO
SELECT "Unit #" = aparts.UnitNumber,
       Beds = aparts.Bedrooms, 
       Baths = aparts.Bathrooms,
       [Monthly Rent] = aparts.Price, 
       "Primary Deposit" = aparts.Deposit,
       (aparts.Price + aparts.Deposit) "Due Before Moving", 
       CASE aparts.Available
	    WHEN 0 THEN N'No or Not Yet'
	    WHEN 1 THEN N'Yes'
       END "Available"
FROM Presentation.Units aparts
WHERE (aparts.UnitNumber < 200) AND
      (aparts.Bedrooms = 1) AND
	  (aparts.Available = 1)
ORDER BY [Monthly Rent], "Primary Deposit";
GO

9. برای اجرای دستور، کلید F5 را فشار دهید.


آموزش SQL
  • 1050
  •    1214
  • تاریخ ارسال :   1394/12/03

دانلود PDF دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .