Основні Булеві оператори також розпізнаються в SQL. Вирази Буля - є або вірними, або невірними, подібно до предикатів. Булеві оператори пов'язують одне або більш вірних / невірних значень і виробляють єдине вірне / або / невірне значення. Стандартними операторами Буля, розпізнаваними в SQL, є: AND. OR. і NOT.
Існують інші, більш складні, оператори Буля (типу "виключений або"), але вони можуть бути сформовані з цих трьох простих операторів - AND, OR, NOT.
Як ви можете зрозуміти, Булева вірна / невірна логіка - заснована на цифровий комп'ютерної операції; і фактично, весь SQL (або будь-який інший мову) може бути зведений до рівня Булевой логіки.
Оператори Буля і як вони працюють:
AND бере два Буля (у формі A AND B) як аргументи і оцінює їх по відношенню до істини, чи правильні вони обидва.
OR бере два Буля (у формі A OR B) як аргументи і оцінює на правильність, чи вірний один з них.
NOT бере одиночний Булев (у формі NOT A) як аргументи і замінює його значення з невірного на вірне або вірне на невірне.
Пов'язуючи предикати з операторами Буля, ви можете значно збільшити їх можливості. Припустимо ви хочете бачити всіх замовників в San Jose які мають оцінку (рейтинг) вище 200:
SELECT *
FROM Customers
WHERE city = 'San Jose'
AND rating> 200;
Висновок для цього запиту показаний на рисунку 4.2. Є тільки один замовник, який задовольняє цій умові.
Малюнок 4.2. Оператор SELECT використовує AND
Якщо ви ж використовуєте OR, ви отримаєте всіх замовників, які перебували в San Jose або (OR) які мали оцінку вище 200.
SELECT *
FROM Customers
WHERE city = 'San Jose' OR rating> 200;
Висновок для цього запиту показується в Малюнку 4.3.
Малюнок 4.3. Оператор SELECT, який використовує OR
NOT може використовуватися для інвертування значень Буля. Є приклад запиту з NOT:
SELECT *
FROM Customers
WHERE city = 'San Jose' OR NOT rating> 200;
Висновок цього запиту показується в Малюнку 4.4.
Малюнок 4.4. Оператор SELECT, який використовує NOT
Всі записи, за винятком Grass, були обрані. Grass не був у San Jose, і його оцінка була більше, ніж 200, так що він зазнав невдачі при обох перевірках. У кожній з інших рядків зустрівся один або інший або обидва критеріїв. Зверніть увагу, що оператор NOT повинен передувати Булеву оператору, чиє значення має змінитися, і не повинен поміщатися перед реляційним оператором. Наприклад, неправильним введенням оцінки предиката буде:
rating NOT> 200
Він видасть іншу позначку. А як SQL оцінить наступне?
SELECT *
FROM Customers
WHERE NOT city = 'San Jose' OR rating> 200;
NOT застосовується тут тільки до вираження city = 'San Jose'. або до вираження rating> 200 теж? Як і написано, правильну відповідь буде колишнім. SQL може застосовувати NOT з виразом Буля тільки відразу після нього. Ви можете отримати інший результат при команді:
SELECT *
FROM Customers
WHERE NOT (city = 'San Jose' OR rating> 200);
Тут SQL розуміє круглі дужки як підтвердження, що все всередині них буде оцінюватися першим і оброблятися як єдине вираження за допомогою всього, що зовні них (це є стандартною інтерпретацією в математиці). Іншими словами, SQL бере кожен рядок і визначає, чи відповідає істині рівність city = 'San Jose' або равенствоrating> 200. Якщо будь-яка умова вірно, вираз Буля усередині круглих дужок вірно. Однак, якщо вираз Буля усередині круглих дужок вірно, предикат як єдине ціле невірний, тому що NOT перетворить вірно в невірно і навпаки.
Висновок для цього запиту показується в Малюнку 4.5.
Малюнок 4.5. Оператор SELECT, який використовує NOT і вступне пропозицію
Є навмисно складний приклад. Подивимося, чи зможете ви простежити його логіку (висновок показаний в рисунку 4.6):
Малюнок 4.6. Повний (комплексний) запит
Примітка. Для СУБД Interbase запит повинен бути змінений:
Незважаючи на те, що Булеві оператори індивідуально прості, вони не такі прості, коли комбінуються в комплексне вираз.
Спосіб оцінки Булева комплексу полягає в тому, щоб оцінювати Булеві вирази, найбільш глибоко вкладені в круглих дужках, об'єднувати їх в єдине Булево значення, і потім об'єднувати його з верхніми значеннями.
У цьому розділі ви значно розширили ваше знайомство з предикатами. Тепер ви можете знаходити значення, які пов'язані з даним значенням будь-яким способом - визначаються різними реляційними операторами. Ви можете також використовувати оператори Буля AND іOR. щоб багато умов, кожне з яких автономно в предиката, об'єднувати в єдиний предикат. Оператор Буля NOT. як ви вже бачили, може змінювати значення умови або групи умов на протилежне.
Булеві і реляційні оператори можуть ефективно управлятися за допомогою круглих дужок, які визначають порядок, в якому операції будуть виконані. Ці операції застосовні до будь-якого рівня складності, і ви зрозуміли, як складні умови можуть створюватися з цих простих частин.
Тепер, коли ми показали, як використовуються стандартні математичні оператори, ми можемо перейти до операторів, які є винятковими в SQL. Це ми зробимо в Главі 5.