Мартин Грубер - Понимание SQL
- Название:Понимание SQL
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Мартин Грубер - Понимание SQL краткое содержание
Данная книга является очень хорошим введением в теорию реляционных БД для пользователей-новичков, а также хорошим началом в освоении SQL, грамотном построение запросов, понимании того как эти запросы работают. Безусловно рекомендуется к прочтению для начинающих пользователей.
Понимание SQL - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Вывод для этого запроса - показывается в Рисунке 4.5. Имеется намеренно сложный пример. Посмотрим сможете ли вы проследить его логику (вывод показан в Рисунке 4.6 ):
SELECT *
FROM Orders
WHERE NOT ((odate=10/03/1990 AND snum >1002)
OR amt > 2000.00);
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 и вводное предложение
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.
* Напишите запрос который может дать вам все порядки со значениями суммы выше чем $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 применяющегося с этими операторами.
Оператор IN определяет набор значений в которое данное значение может или не может быть включено. В соответствии с нашей учебной базой данных на которой вы обучаетесь по настоящее временя, если вы хотите найти всех продавцов, которые размещены в Barcelona или в London, вы должны использовать следующий запрос (вывод показывается в Таблице5.1 ):
SELECT *
FROM Salespeople
WHERE city='Barcelona'
OR city='London';
Имеется и более простой способ получить ту же информацию:
SELECT *
FROM Salespeople
WHERE city IN ('Barcelona', 'London' );
Вывод для этого запроса показывается в Таблице 5.2.
Как вы можете видеть, IN определяет набор значений с помощью имен членов набора заключеных в круглые скобки и отделенных запятыми. Он затем проверяет различные значения указанного поля пытаясь найти совпадение со значениями из набора. Если это случается, то предикат верен. Когда наборсодержит значения номеров а не символов, одиночные кавычки опускаются. Давайте найдем всех заказчиков относящихся к продавцам имеющих значения snum=1001, 1007, и 1004. Вывод для следующего запроса показан в Таблице 5.3:
SELECT *
FROM Customers
WHERE cnum IN (1001, 1007, 1004 );
SELECT * FROM Salespeople WHERE city=
'Barcelona' OR city='London';
snum |
sname |
city |
comm |
1001 |
Peel |
London |
0.12 |
1004 |
Motika |
London |
0.11 |
1007 |
Rifkin |
Barcelona |
Интервал:
Закладка: