Программирование >>  Понятие sql 

1 ... 7 8 9 [ 10 ] 11 12 13 ... 95


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

cnum

cname

city

rating

snum

2001

Hoffman

London

1001

2002

Giovanni

Rome

1003

2006

Clemens

London

1001

2007

Pereira

Rome

1004

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

Имеется намеренно сложный пример. Посмотрим сможете ли вы проследить его логику (вывод показан в Рисунке 4.6):

SELECT * FROM Orders

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

SQL Execution Log SELECT * FROM Orders

WHERE NOT ((odate = 10/03/1990 AND snum > 1002)

OR amt > 2 0 0 0.00);

onum

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 - верны для этой строки.В3 полностью содержится в круглых скобках которым предшествует 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. Напишите запрос который может дать вам все порядки со значениями суммы выше чем $1,000.

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

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

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

SELECT * FROM Orders

WHERE (amt < 1000 OR NOT (odate = 10/03/1990 AND cnum > 2003 ));

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

SELECT * FROM Orders

WHERE NOT ((odate = 10/03/1990 OR snum > 1006) AND amt > = 1500 );

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

SELECT snum, sname, city, comm FROM Salespeople

WHERE ( comm > + .12 OR comm < .14 );

(См. Приложение A для ответов.)



ИСПОЛЬЗОВАНИЕ

СПЕЦИАЛЬН1Х

ОПЕРАТОРОВ В

УСЛОВИЯХ



1 ... 7 8 9 [ 10 ] 11 12 13 ... 95

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика