Булевы операторы

БУЛЕВЫ ОПЕРАТОРЫ
Основные Булевы операторы также распознаются в SQL. Выражения Буля — являются или верными или неверными, подобно предикатам. Булевы операторы связывают одно или более верных/неверных значений и производят единственное верное/или/неверное значение. Стандартными операторами Буля распознаваемыми в SQL являются: AND, OR, и NOT.

SQL Execution Log

SELECT *
FROM Customers WHERE rating > 200;

snum
cname
city
rating
snum

2004
Crass
Berlin
300
1002

2008
Cirneros
San Jose
300
1007

Рисунок 4.1: Использование больше чем (>) Существуют другие, более сложные, операторы Буля ( типа " исключенный или " ), но они могут быть сформированы из этих трех простых операторов — 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. Имеется только один заказчик который удовлетворяет этому условию.
Если вы же исполяьзуете OR вы поляучите всех заказчиков которые находились в San Jose или(OR) которые имели оценку выше 200.

SQL Execution Log

SELECT *
FROM Customers
WHERE city = ‘ San Jose ‘ AND rating > 200;

snum
cname
city
rating
snum

2008
Cirneros
San Jose
300
1007

Рисунок 4.2: SELECT использующий AND
SELECT * FROM Customers WHERE city = " San Jose ‘ OR rating > 200;
Вывод для этого запроса показывается в Рисунке 4.3.
NOT может использоваться для инвертирования значений Буля. Имеется пример запроса с NOT:
SELECT * FROM Customers WHERE city = " San Jose ‘ OR NOT rating > 200;
Вывод этого запроса показывается в Рисунке 4.4.

SQL Execution Log

SELECT *
FROM Customers
WHERE city = ‘ San Jose ‘ OR rating > 200;

snum
cname
city
rating
snum

2008
Cirneros
San Jose
300
1007

2003
Liu
San Jose
200
1002

2004
Grass
Berlin
300
1002

Рисунок 4.3: SELECT использующий OR

SQL Execution Log

SELECT *
FROM Customers
WHERE city = ‘ San Jose ‘ OR NOT rating > 200;

snum
cname
city
rating
snum

2001
Hoffman
London
100
1001

2002
Giovanni
Rome
200
1003

2003
Liu
San Jose
200
1002

2006
Clemens
London
100
1001

2008
Cirneros
San Jose
300
1007

2007
Pereira
Rome
100
1004

Рисунок 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 = ‘SanJose’, или к выражению 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.6 ):
SELECT * FROM Orders WHERE NOT ((odate = 10/03/1990 AND snum >1002) OR amt > 2000.00);

SQL Execution Log

SELECT *
FROM Customers WHERE NOT (city = ‘ San Jose ‘ OR rating > 200);

snum
cname
city
rating
snum

2001
Hoffman
London
100
1001

2002
Giovanni
Rome
200
1003

2006
Clemens
London
100
1001

2007
Pereira
Rome
100
1004

Рисунок 4.5: SELECT использующий NOT и вводное предложение

SQL Execution Log

SELECT *
FROM Orders
WHERE NOT ((odate = 10/03/1990 AND snum > 1002) OR amt > 2000.00);

onum
cname
city
rating
snum

3003
767.19
10/03/1990
2001
1001

3009
1713.23
10/04/1990
2002
1003

3007
75.75
10/04/1990
2004
1002

3010
1309.95
10/06/1990
2004
1002

 
 

‹ Использование реляционных и булевых операторов для создания более изощренных предикатов
Вверх
Резюме 4 ›

Айтистанция
Добавить комментарий

Adblock
detector