Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
М. ГРУБЕР_SQL.doc
Скачиваний:
22
Добавлен:
18.04.2019
Размер:
1.4 Mб
Скачать

Работа с 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));

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

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

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

SELECT snum, sname, city, comm FROM Salespeople WHERE (comm > + .12 OR comm < .14);

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

5

Использование специальных операторов в условиях

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

Оператор in

Оператор IN определяет набор значений, в который данное значение может или не может быть включено. В соответствии с нашей учебной базой данных, на которой вы обучаетесь по настоящее время, если вы хотите найти всех продавцов, которые размещены в Barcelona или в London, вы должны использовать следующий запрос (вывод показывается в Рисунке 5.1):

SELECT * FROM Salespeople WHERE city = 'Barcelona' OR city = 'London';

================ SQL Execution Log ============ | 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 0.15 | =============================================== Рисунок 5.1. Нахождение продавцов в Барселоне и Лондоне

Имеется и более простой способ получить ту же информацию:

SELECT * FROM Salespeople WHERE city IN ('Barcelona', 'London');

Вывод для этого запроса показывается в Рисунке 5.2.

================ SQL Execution Log ============ | SELECT * | | FROM Salespeople | | WHERE city IN ('Barcelona', 'London'; | | ==============================================| | snum sname city comm | | ------ ---------- ----------- ------- | | 1001 Peel London 0.12 | | 1004 Motika London 0.11 | | 1007 Rifkin Barcelona 0.15 | =============================================== Рисунок 5.2. SELECT использует IN

Как вы можете видеть, IN определяет набор значений с помощью имен членов набора, заключенных в круглые скобки и отделенных запятыми. Он затем проверяет различные значения указанного поля, пытаясь найти совпадение со значениями из набора. Если это случается, то предикат верен. Когда набор содержит значения номеров, а не символов, одиночные кавычки опускаются. Давайте найдем всех заказчиков относящихся к продавцам имеющих значения snum = 1001, 1007, и 1004. Вывод для следующего запроса показан на Рисунке 5.3:

SELECT * FROM Customers WHERE cnum IN (1001, 1007, 1004);

=============== SQL Execution Log ============ | SELECT * | | FROM Customers | | WHERE snum IN (1001, 1007, 1004); | | ============================================= | | snum cname city rating snum | | ------ -------- ------ ---- ------ | | 2001 Hoffman London 100 1001 | | 2006 Clemens London 100 1001 | | 2008 Cisneros San Jose 300 1007 | | 2007 Pereira Rome 100 1004 | =============================================== Рисунок 5.3. SELECT использует IN с номерами