Все запросы в SQL конструируются на базе одной команды – SELECT. Ее можно расширять для выполнения сложных обработок.
SELECT name1, name2, … - список столбцов, представляемых в результате
FROM Table name; связаны
Перенос на другую строку ничего не меняет в команде.
*- означает все.
Если поменять местами порядок слов, то в таком порядке получается результат.
Устранение избыточности данных
Допустим, SELECT выбирает один столбец из таблицы. В нем могут быть повторяющиеся значения, которые не нужны в результате запроса. Если в запрос
SELECT snum
FROM Orders;
Если добавить аргумент DISTINCT, то
SELECT DISTINCT snum
FROM Orders;
Исключит дублирующиеся значения из результата.
Противоположным аргументом является ALL – он включает все значения (по умолчанию - ALL).
Определение выборки – предложение WHERE
Предложение WHERE команды SELECT позволяет определить предикат, условие, которое может быть либо истинным, либо ложным для каждой строки. Команды извлекает только те, для которых предикат имеет значение “истина”.
Предположим, нужно узнать имена всех продавцов в London:
SELECT sname, city
FROM Sales people
WHERE city = ‘London’;
Заметим, что столбец city включается, в результат за счет появления в предложении SELECT, а не в WHERE.
Пример на числовое поле:
SELECT * FROM Customers
WHERE rating = 100;
Понятно, что применение WHERE не исключает DISTINCT и наоборот.
Допустимы и другие операторы:
>, <, >=, <=, <>
‘а’ <’n’ означает, что ‘а’ предшествует ‘n’ в алфавитном порядке.
Булевы операторы: AND, OR, NOT
Пример: SELECT * FROM Customers
WHERE city = ‘London’
AND rating > 200;
Пример на OR:
SELECT * FROM Customers
WHERE city = ‘London’
OR NOT rating > 200;
Или записи у которых город Лондон, или если rating не больше 200.
NOT должен предшествовать булеву выражению, значение которого он должен изменить (но не перед оператором сравнения rating NOT >200). SQL применяет NOT только к тому выражению, которое непосредственно следует за ним. Если нужно охватить больше, то ставятся круглые скобки:
… WHERE NOT (city = ‘London’ OR rating > 200);
Проследим логику в намеренно усложненном примере:
SELECT *
FROM Orders
WHERE NOT ((odate = 10/03/1990 AND snum > 1002)
OR amt > 2000.00);
Способ оценки сложного выражения следующий: оценить булево выражение, имеющее наибольшую глубину вхождения в круглые скобки, скомбинировать результаты в одно булево выражение, а затем связать его значение со значением выражений, имеющих меньшую глубину вхождения в скобки.
Рассмотрим приведенный пример:
Наибольшая глубина вхождения у предиката:
odate = 10/03/1990 AND snum > 1002, который дает “истину” для строк, удовлетворяющим обоим условиям. Обозначим его как В1. Это выражение соединено с amt > 2000,00 В2 с помощью OR и образует выражение В3. Оно полностью в круглых скобках перед NOTи вместе с ним образует В4 – предикат запроса.