
Лабораторная работа №2/SQL
Условия в запросах SQL
В предложениях WHERE возможны следующие операторы сравнения:
= равно > больше < меньше
<= меньше или равно >= больше или равно <> не равно
Пример запроса. Вывести заказчиков с рейтингом, большим 200
SELECT * FROM customer WHERE rating>200;
В предложениях WHERE возможны следующие логические операторы: AND, OR (бинарные), NOT (унарный).
X=истина Y=истина X AND Y=истина X OR Y= истина
X=истина Y=ложь X AND Y=ложь X OR Y= истина
X=ложь Y=истина X AND Y=ложь X OR Y= истина
X= ложь Y= ложь X AND Y= ложь X OR Y= ложь
Пример запроса. Вывести заказчиков в San Jose с рейтингом выше 200
SELECT * FROM customer WHERE city="San Jose" and rating>200
Вывести заказчиков в San Jose ИЛИ имеющих рейтинг выше 200
SELECT * FROM customer WHERE city="San Jose" or rating>200
Вывести заказчиков в San Jose ИЛИ имеющих рейтинг НЕ выше 200
SELECT * FROM customer WHERE city="San Jose" or not rating>200
В логических выражениях можно использовать скобки для определения порядка вычисления операторов.
Пример запроса. Естественный порядок следования операторов.
SELECT * FROM customer WHERE not city="San Jose" or rating>200
Применение скобок изменит вывод данных:
SELECT * FROM customer WHERE not (city="San Jose" or rating>200)
Использование скобок необходимо для составления сложных логических выражений.
SELECT * FROM orders WHERE not ((odate = 10/03/90 and snum > 1002) or amt > 2000.00)
Для определения принадлежности к множеству можно использовать либо логическое выражение, либо (проще) воспользоваться оператором IN.
Пример запроса. Вывести всех продавцов из Барселоны ИЛИ из Лондона.
Способ 1. Логическое выражение
SELECT * FROM sales WHERE city = "Barcelona" or city="London"
Способ 2. Оператор IN
SELECT * FROM sales WHERE city IN ("Barcelona" , "London")
Определить заказчиков, торгующих с продавцами с номерами 1001, 1007, 1004
SELECT * FROM customer WHERE snum IN (1001 , 1007 , 1004)
Для определения принадлежности к интервалу значений возможно использование оператора BETWEEN.
Пример запроса. Вывести продавцов с комиссионными между 0.10 и 0.12
Способ 1. Логическое выражение.
SELECT * FROM sales WHERE comm>=0.10 AND comm <=0.12
Способ 2. Оператор BETWEEN
SELECT * FROM sales WHERE comm BETWEEN 0,10 AND 0,12
Операторы BETWEEN и IN можно комбинировать. Например, следующий запрос исключает крайние значения комиссионных:
SELECT * FROM sales WHERE comm BETWEEN 0.10 AND 0.12
AND NOT comm IN (0.10 , 0.12);
Задания для самостоятельной работы.
-
Вывести все продажи с ценой превышающей 1000.
-
Вывести поля sname,city продавцов из Лондона с комиссионными выше 0.10
-
Вывести всех заказчиков НЕ из Рима с рейтингом меньшим или равным 100
-
Как проще переписать такой запрос: SELECT snum,sname,city FROM sales WHERE (comm >=0.12 OR comm < 0.14)
-
Вывести все продажи на 10/03/90 или 10/04/90 (два варианта)
-
Вывести заказчиков, имена которых начинаются на буквы от ‘A’ до ‘G’ включительно. (Используйте оператор IN).