Команда SELECT

Все запросы в 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 – предикат запроса.