اپراتورهای AND - OR - NOT در SQL

27 اسفند 1398
درسنامه درس 5 از سری آموزش زبان SQL
SQL-Language-and-or-not

با سلام، در جلسه ی قبل در رابطه با دستور WHERE صحبت کردیم و می دانیم که می توان با این دستور به کدهای SQL خود انعطاف بخشید اما مسئله آن جاست که هنوز هم به انعطاف بیشتری نیاز است. چطور می توان این انعطاف بیشتر را ایجاد کرد؟

اپراتورهای AND - OR - NOT

ما می توانیم دستور WHERE را با اپراتورهای AND - OR - NOT ترکیب کنیم تا به انعطاف بیشتری برسیم و کدهای SQL را دقیق تر کنیم.

اپراتورهای AND و OR به ما اجازه می دهند شرط های بیشتری به دستور WHERE اضافه کنیم:

  • اگر دستور AND به WHERE اضافه شود، کوئری ما تنها زمانی اجرا می شود که تمام شرط های آن برقرار باشند.
  • اگر دستور OR به WHERE اضافه شود، کوئری ما زمانی اجرا خواهد شد که یکی از شرط های آن برقرار باشد.

این مسئله نیازی به توضیح ندارد؛ بگذارید برایتان مثالی بزنم... کلمه ی AND به معنی "و" و کلمه ی OR به معنی "یا" است بنابراین:

Being 18 and male -> معنی: 18 ساله بودن و همچنین مرد بودن

Being 18 or male -> معنی: 18 ساله بودن یا مرد بودن

در دو مثال بالا دو شرط داریم؛ یکی مرد یا مذکر بودن و دیگری 18 ساله بودن. اگر از AND استفاده کنیم یعنی فرد هم باید 18 ساله باشد و هم مذکر باشد اما اگر از OR استفاده کنیم یعنی فرد مورد نظر ما یا 18 ساله باشد یا مذکر! تفاوت بسیار فاحش آن را متوجه شدید؟

شاید بپرسید پس اپراتور NOT چه کار می کند؟

اپراتور NOT (به معنی "غیر" یا "بدون" یا "نه" و ...) یک شرط را برعکس می کند. بدین معنی که اگر شرط ما FALSE (غلط) باشد آن گاه کوئری اجرا می شود! در ادامه بیشتر توضیح خواهم داد.

سوال: کوئری چیست؟

هنگامی که با زبان SQL (یک زبانِ کوئری) یک دستور می نویسید تا به پایگاه داده برود و کاری انجام دهد، یک کوئری نوشته اید!

کوئری در لغت به معنای "درخواست" یا "پرسش" است.

ویکی پدیای فارسی در مورد زبان های کوئری یا پرسمان می گوید:

زبان‌های پرسمان (Query languages) (زبان کوری یا کوئری) زبان‌های برنامه‌نویسی برای اعمال پرسش‌های گوناگون بر پایگاه‌های داده‌ها و سیستم‌های اطلاعات است. به برنامه‌ای رایانه‌ای که حاوی دستورهایی برای پایگاه داده است، پرسمان یا کوئری (به انگلیسی: query) گفته می‌شود.

بگذارید به زبان ساده تر برایتان بگویم، تمام دستوراتی که تا این جلسه با آن ها کار کرده ایم کوئری بوده اند. البته بنده به شما پیشنهاد می کنم به جای "پرسمان" از همان کلمه ی کوئری استفاده کنید تا از سر در گمی و سوء تفاهم های احتمالی دور بمانید!

ساختار کلی اپراتورهای AND - OR - NOT

قبل از بررسی ساختار های کلی، باید معنی چند کلمه ی انگلیسی را بدانید. گرچه معنی برخی از آن ها را در جلسات قبل و یا همین جلسه توضیح داده ایم اما همه را به صورت یک جا آورده ایم تا به راحتی متوجه معانی دستورات SQL شوید:

ستون Column
جدول Table
ردیف Row
شرط Condition
شما معنی اش را "به شکلی که" در نظر بگیرید Where
انتخاب کن Select
از From
و And
یا Or
غیر، نه، نباشد و ... Not

ساختار کلی (syntax) اپراتور AND به شکل زیر است:

SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;

ساختار کلی (syntax) اپراتور OR به شکل زیر است:

SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;

ساختار کلی (syntax) اپراتور NOT به شکل زیر است:

SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;

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

SELECT column1, column2, ... (ستون های 1 و دو را انتخاب کن)
FROM table_name ((table_name) از جدولِ فلان)
WHERE condition1 OR condition2 OR condition3 ...; (به صورتی که شرط 1 یا شرط 2 یا شرط 3 و ... برقرار باشد)

مثال ها

مثال اول از اپراتور AND

به کد زیر دقت کنید:

SELECT * FROM Customers
WHERE Country='Germany' AND City='ز';

آیا می دانید معنی این کد چیست و چه کاری می کند؟ میخواهم این کد را تحت اللفظی و فقط بر اساس کلمات اش ترجمه کنم تا بهتر آن را درک کنید.

این کد به این صورت ترجمه می شود که "از جدول Customers، هر چیزی (*) را انتخاب کن به صورتی که مقدار Country مساوی با Germany و مقدارِ City برابر با Berlin باشد"

برای مشاهده ی نتیجه ی کد بالا روی این لینک کلیک کنید.


مثال دوم از اپراتور OR

به کد زیر دقت کنید:

SELECT * FROM Customers
WHERE City='Berlin' OR City='München';

ترجمه ی این کد می شود "از جدول Customers، هر چیزی (*) را انتخاب کن به صورتی که مقدارِ City برابر با Berlin یا München باشد"

برای مشاهده ی نتیجه ی کد بالا روی این لینک کلیک کنید.


مثال سوم از اپراتور NOT

SELECT * FROM Customers
WHERE NOT Country='Germany';

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

برای مشاهده ی نتیجه ی کد بالا روی این لینک کلیک کنید.

نکته: می توانید تمام این اپراتورها را به هم ترکیب کنید و در یک شرط به کار ببرید:

SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');

این کد می گوید مقدار Country برابر با Germany بوده و مقدار City نیز یا Berlin باشد و یا München.

برای مشاهده ی نتیجه ی کد بالا روی این لینک کلیک کنید.

مثال دیگر:

SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';

این کد تمام کشور هایی را انتخاب می کند که مقدارشان نه Germany باشد و نه USA.

برای مشاهده ی نتیجه ی کد بالا روی این لینک کلیک کنید.

خلاصه ی مقاله

در این قسمت با اپراتورهای AND و OR و NOT آشنا شدیم و فهمیدیم می توان با استفاده از این اپراتورها یا ترکیبی از آن ها، انعطاف پذیری بسیار بیشتری به دستورات SQL خود بدهیم. امیدوارم از این قسمت لذت برده باشید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش زبان SQL توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (3 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

علی
26 آبان 1401
بسیار عالی توضیح میدید ، ممنون از زحماتتون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

محمدرضا معلم نیا
28 دی 1400
بسیار شیوا و آموزنده تنها یک اشکال تایپی وجود داشت: در مثال اول از اپراتور AND ، به جای 'City='Berlin ، نوشته اید City='ز' !

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

سام
17 اسفند 1398
اشتباه نوشتی Being 18 and male -> معنی: 18 ساله بودن یا مرد بودن

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
26 اسفند 1398
سلام دوست عزیز، از تذکرتون ممنونم. به جای or از and استفاده کرده بودم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.