Понимание SQL - [12]

Шрифт
Интервал

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);


сnum

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

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

Способ оценки комплекса Булева состоит в том, чтобы оценивать Булевы выражения наиболее глубоко вложенные в круглых скобках, объединять их в единичное Булево значение, и затем объединять его с верхними значениями.

Имеется подробное объяснение того как пример выше был вычислен. Наиболее глубоко вложенные выражения Буля в предикате - это 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. Это мы сделаем в Главе 5.


РАБОТА С SQL

* Напишите запрос который может дать вам все порядки со значениями суммы выше чем $1,000.

* Напишите запрос который может выдать вам поля sname и city для всех продавцов в Лондоне с комиссионными выше .10 .

* Напишите запрос к таблице Заказчиков чей вывод может включить всех заказчиков с оценкой=< 100, если они не находятся в Риме.

* Что может быть выведено в результате следующего запроса?


SELECT *

FROM Orders

WHERE (amt < 1000 OR

NOT (odate=10/03/1990

AND cnum > 2003 ));


* Что может быть выведено в результате следующего запроса?


SELECT *

FROM Orders

WHERE NOT ((odate=10/03/1990 OR snum > 1006)

AND amt >=1500 );


* Как можно проще переписать такой запрос?


SELECT snum, sname, city, comm

FROM Salespeople

WHERE (comm > + .12 OR

comm < .14 );

Глава 5. ИСПОЛЬЗОВАНИЕ СПЕЦИАЛЬНЫХ ОПЕРАТОРОВ В УСЛОВИЯХ


В ДОПОЛНЕНИИ К РЕЛЯЦИОННЫМ И БУЛЕВСКИМ операторам обсуждаемым в Главе 4, SQL использует специальные операторы IN, BETWEEN, LIKE, и IS NULL. В этой главе, вы узнаете как их использовать и как реляционные операторы позволяют создавать более сложные и мощные предикаты. Обсуждение оператора IS NULL будет включать отсутствие данных и значение NULL, которое указывает на то: что данные отсутствуют. Вы также узнаете о разновидностях использования оператора NOT применяющегося с этими операторами.


Рекомендуем почитать
Записки парасистемного программиста

Методический материал для разработчика ПО. Статьи полезные с исторической точки зрения для всех любителей современных теорий организации программного производства, так еще и актуальность до сих пор не потеряна. Правда примеры основаны на реалиях тех времен (1984 год или около того), но это почти не помеха — аналоги в современной практике находятся без труда. В общем, приобщайтесь к истокам!


Выразительный JavaScript

В процессе чтения вы познакомитесь с основами программирования и, в частности, языка JavaScript, а также выполните несколько небольших проектов. Один из самых интересных проектов — создание своего языка программирования.


BIG DATA. Вся технология в одной книге

Информация как таковая становится самой значительной отраслью экономики, и базы данных знают о каждом конкретном человеке больше, чем известно ему самому. Чем больше информации о каждом из нас попадает в базы данных, тем в меньшей степени мы существуем.


Flat Assembler 1.64. Мануал программера

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Неизведанная территория. Как «большие данные» помогают раскрывать тайны прошлого и предсказывать будущее нашей культуры

Насколько велики на самом деле «большие данные» – огромные массивы информации, о которых так много говорят в последнее время? Вот наглядный пример: если выписать в линейку все цифры 0 и 1, из которых состоит один терабайт информации (вполне обычная емкость для современного жесткого диска), то цепочка цифр окажется в 50 раз длиннее, чем расстояние от Земли до Сатурна! И тем не менее, на «большие данные» вполне можно взглянуть в человеческом измерении. Эрец Эйден и Жан-Батист Мишель – лингвисты и компьютерные гении, создатели сервиса Google Ngram Viewer и термина «культуромика», показывают, каким образом анализ «больших данных» помогает исследовать трудные проблемы языка, культуры и истории.


Firebird. Руководство разработчика баз данных

Рассмотрены вопросы, необходимые разработчику для создания клиент-серверных приложений с использованием СУБД Firebird, явившейся развитием СУБД Borland Interbase 6. Содержится обзор концепций и моделей архитектуры клиент/сервер, а также практические рекомендации по работе с клиентскими библиотеками Firebird. Детально описаны особенности типов данных SQL, язык манипулирования данными (Data Manipulation Language, DML), а также синтаксис и операторы языка определения данных ( Data Definition Language, DDL)