Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_лекции_Саладаев.doc
Скачиваний:
55
Добавлен:
03.05.2015
Размер:
15.75 Mб
Скачать

Команда select

Все запросы в SQLконструируются на базе одной команды –SELECT. Ее можно расширять для выполнения сложных обработок.

Select name1, name2, … -список столбцов, представляемых в результате

FROMTablename; связаны

Перенос на другую строку ничего не меняет в команде.

*- означает все.

Если поменять местами порядок слов, то в таком порядке получается результат.

Устранение избыточности данных

Допустим, SELECTвыбирает один столбец из таблицы. В нем могут быть повторяющиеся значения, которые не нужны в результате запроса. Если в запрос

SELECTsnum

FROMOrders;

Если добавить аргумент DISTINCT, то

SELECT DISTINCT snum

FROM Orders;

Исключит дублирующиеся значения из результата.

Противоположным аргументом является ALL– он включает все значения (по умолчанию -ALL).

Определение выборки – предложение where

Предложение WHEREкомандыSELECTпозволяет определитьпредикат, условие, которое может быть либо истинным, либо ложным для каждой строки. Команды извлекает только те, для которых предикат имеет значение “истина”.

Предположим, нужно узнать имена всех продавцов в London:

SELECT sname, city

FROM Sales people

WHEREcity= ‘London’;

Заметим, что столбец cityвключается, в результат за счет появления в предложенииSELECT, а не вWHERE.

Пример на числовое поле:

SELECT*FROMCustomers

WHERErating= 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должен предшествовать булеву выражению, значение которого он должен изменить (но не перед оператором сравненияratingNOT>200 ).SQLприменяетNOTтолько к тому выражению, которое непосредственно следует за ним. Если нужно охватить больше, то ставятся круглые скобки:

… WHERENOT(city= ‘London’ORrating> 200);

Проследим логику в намеренно усложненном примере:

SELECT *

FROM Orders

WHERE NOT ((odate = 10/03/1990 AND snum > 1002)

ORamt> 2000.00);

Способ оценки сложного выражения следующий: оценить булево выражение, имеющее наибольшую глубину вхождения в круглые скобки, скомбинировать результаты в одно булево выражение, а затем связать его значение со значением выражений, имеющих меньшую глубину вхождения в скобки.

Рассмотрим приведенный пример:

Наибольшая глубина вхождения у предиката:

odate= 10/03/1990ANDsnum> 1002, который дает “истину” для строк, удовлетворяющим обоим условиям. Обозначим его как В1. Это выражение соединено сamt> 2000,00 В2 с помощьюORи образует выражение В3. Оно полностью в круглых скобках передNOTи вместе с ним образует В4 – предикат запроса.

Оператор in

INполностью определяет множество, к которому данное значение может принадлежать или не принадлежать. Допустим, нужно наити всех продавцов, расположенных либо в «Barcelona», либо в «London»:

SELECT * FROM Sales people

WHERE city = «Barcelona» OR city = «London»:

IN позволяет упростить:

SELECT * FROM Sales people

WHERE city IN («Barcelona», «London»);

Пример 2. Найти всех покупателей, обслуживаемых продавцами 1001, 1007, 1004.

SELECT * FROM Customers

WHERE snum IN (1001, 1007, 1004);