Скачиваний:
25
Добавлен:
01.04.2014
Размер:
761.34 Кб
Скачать

40 Понимание sql

______________________________________________________________________

ГЛ. 4

=============== SQL Execution Log ============

| |

| SELECT * |

| FROM Customers |

| WHERE city = 'San Jose' |

| OR rating > 200; |

| ============================================= |

| ñnum cname city rating snum |

| ----- ------- -------- ----- ------ |

| 2003 Liu San Jose 200 1002 |

| 2004 Grass Berlin 300 1002 |

| 2008 Cirneros San Jose 300 1007 |

=============================================

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

=============== SQL Execution Log ============

| |

| SELECT * |

| FROM Customers |

| WHERE city = 'San Jose' |

| OR NOT rating > 200; |

| ============================================= |

| cnum 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 должен предшествовать

ИСПОЛЬЗОВАНИЕ РЕЛЯЦИОННЫХ И БУЛЕВЫХ ОПЕРАТОРОВ

ЧТОБЫ СОЗДАВАТЬ БОЛЕЕ СЛОЖНЫЕ ПРЕДИКАТЫ 41

______________________________________________________________________

Булеву оператору, чье значение должно измениться, и не должен

помещаться перед реляционным оператором. Например неправильным

вводом оценки предиката будет:

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