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

42 Понимание sql

______________________________________________________________________

ГЛ. 4

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

| |

| SELECT * |

| FROM Customers |

| WHERE NOT (city = 'San Jose' |

| OR rating > 200); |

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

| cnum 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 amt odate cnum 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.6: Полный (комплексный) запрос

Несмотря на то что Булевы опреаторы индивидуально просты, они не так

просты когда комбинируются в комплексное выражение.

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

ДЛЯ СОЗДАНИЯ БОЛЕЕ СЛОЖНЫХ ПРЕДИКАТОВ 43

______________________________________________________________________

Способ оценки комплекса Булева состоит в том, чтобы оценивать

Булевы выражения наиболее глубоко вложенные в круглых скобках,

объединять их в единичное Булево значение, и затем объединять

его с верхними значениями.

Имеется подробное объяснение того как пример выше был вычислен.

Наиболее глубоко вложенные выражения Буля в предикате - это

odate = 10/03/1990 и snum > 1002 являются объединеными с

помощью AND, формируя одно выражение Буля которое будет

оценено как верное для всех строк в которых встретились оба эти

условия. Это составное Булево выражение (которое мы будем называть

Булево номер 1, или B1 для краткости) объдиняется с выражением

(amt) > 2000.00 (B2) с помощью OR, формируя третье выражение (B3),

которое является верным для данной строки, если или B1 или B2

- верны для этой строки.

B3 полностью содержится в круглых скобках которым предшествует

NOT, формируя последнее выражение Буля(B4), которое является

условием предиката.

Таким образом B4, предикат запроса, - будет верен всякий раз, когда B3

неправилен. B3 - неправилен всегда, когда B1 и B2 - оба неверны.

B1 неправилен для строки если дата порядка строки не 10/03/1990, или

если значение snum не большее чем 1002. B2 неправилен для всех строк,

значения суммы приобретений которых не превышает 2000.00.

Любая строка со значением выше 2000.00 сделает B2 - верным; в

результате B3 будет верен, а B4 нет. Следовательно, все эти строки будут

удалены из вывода.

Из оставшихся, строки которые на 3 Октября имеют snum > 1002 ( такие

как строки для onum 3001 на 3 Октября со snum = 1007 ), делают B1

верным, с помощью верного B3 и неверного предиката запроса.

Они будут также удалены из вывода. Вывод показан для строк которые

оставлены.

================ РЕЗЮМЕ ================

В этой главе, вы значительно расширили ваше знакомство с предикатами.

Теперь вы можете находить значения которые связаны с данным значением

любым способом - определяемым различными реляционными операторами.

Вы можете также использовать операторы Буля AND и OR чтобы много

условий, каждое из которых автономно в предикатах, объединять в

единый предикат.

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

условия или группы условий на противоположное.

Соседние файлы в папке ПОНИМАНИЕ SQL