Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Для Белаш / Лекции / 5 - Языки манипулирования реляционными данными.doc
Скачиваний:
4
Добавлен:
07.08.2024
Размер:
273.41 Кб
Скачать

Однотабличные запросы-выборки

Результатом запроса-выборки является новое отношение (результирующий набор записей), удовлетворяющее условиям выборки.

Основная синтаксическая конструкция запроса-выборки:

SELECT список_атрибутов

FROM отношение

WHERE условие

SELECT – поля, присутствующие в результирующем наборе.

FROM – таблица (таблицы), которые участвуют в запросе.

WHERE – критерий отбора записей.

Пример: Вывести расписание самолетов, вылетающих в Москву.

SELECT [Номер рейса], [Пункт назначения], [Время вылета], [Время прибытия], [Число мест]

FROM Рейс

WHERE [Пункт назначения] = ‘Москва’

Замечания:

1). Имена таблиц и полей, содержащие пробелы или знаки препинания, надо заключать в квадратные скобки.

2). В конце инструкции SQL может стоять точка с запятой.

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

Пример:

SELECT *

FROM Рейс

WHERE [Пункт назначения] = ‘Москва’

Замечания:

1). При использовании * все изменения в структуре базовой таблицы (добавление или удаление полей (столбцов)) отразятся в запросе.

Предикаты предложения SELECT:

  • используются для ограничения числа возвращаемых записей;

  • стоят после ключевого слова SELECT.

А). Предикат ALL.

  • В результирующий набор включаются все записи, удовлетворяющие условиям отбора.

  • Используется по умолчанию.

Б). Предикат DISTINCT.

  • Из результирующего набора исключаются записи, которые содержат повторяющиеся значения в отобранных полях.

Пример: В какие города имеются рейсы?

SELECT [Пункт назначения] – без использования DISTINCT

FROM Рейс

Ответ:

Пункт назначения

Москва

Владивосток

Киев

Астрахань

Москва

SELECT DISTINCT [Пункт назначения] – с использованием DISTINCT

FROM Рейс

Ответ:

Пункт назначения

Астрахань

Владивосток

Киев

Москва

При использовании DISTINCT происходит автоматическая сортировка записей по возрастанию.

Сортировка записей в результирующем наборе:

ORDER BY – сортировка результирующего набора записей:

  • ASC – по возрастанию (по умолчанию).

  • DESC – по убыванию.

SELECT DISTINCT [Пункт назначения]

FROM Рейс

ORDER BY [Пункт назначения] DESC

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

Замечания:

1). При использовании предиката DISTINCT результирующий набор записей является необновляемым.

В). Предикат DISTINCTROW.

  • Игнорируется в однотабличных запросах.

Г). Предикат TOP.

  • В результирующий набор помещается определенное число записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY.

Пример: Вывести часть списка городов, в которые имеются рейсы.

SELECT DISTINCT TOP 2 [Пункт назначения] - с использованием DISTINCT

FROM Рейс

ORDER BY [Пункт назначения] DESC

Ответ:

Пункт назначения

Москва

Киев

SELECT TOP 2 [Пункт назначения] - без использования DISTINCT

FROM Рейс

ORDER BY [Пункт назначения] DESC

Ответ:

Пункт назначения

Москва

Москва

Д). Предикат PERCENT.

  • Возвращает определенный процент записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY.

SELECT TOP 60 PERCENT [Пункт назначения]

FROM Рейс

ORDER BY [Пункт назначения] DESC

Переименование столбцов результирующего набора:

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

AS – изменение заголовков столбцов результирующего набора записей.

SELECT DISTINCT [Пункт назначения] AS Города

FROM Рейс

Ответ:

Города

Астрахань

Владивосток

Киев

Москва

Варианты задания условий отбора:

  • Критерий отбора задается в предложении WHERE.

  • Критерий отбора должен являться выражением.

Выражение, задаваемое в предложении WHERE, может содержать:

  • Операторы (=, <, And, Or, Not, Like и т.д.).

  • Идентификаторы – ссылки на значения полей ([Номер рейса]).

  • Функции (Date( ) – возврат системной даты).

  • Константы – значения, остающиеся неизменными (True, False).

  • Литералы – значения, которые используются в том виде, как они записаны (25, ‘Привет’).

Замечания:

1). Даты вводятся только в американском формате (мм/дд/гг).

2). Литерал даты обрамляется символом # (#10/21/05# - 21 октября 2005 года) (нет в стандарте ANSI).

Пример: Вывести расписание рейсов в Москву и в Киев.

SELECT *

FROM Рейс

WHERE [Пункт назначения] = ‘Москва’ OR [Пункт назначения] = ‘Киев’

Оператор In – проверяет значение выражения на совпадение с любым из элементов списка.

SELECT *

FROM Рейс

WHERE [Пункт назначения] In (‘Москва’, ‘Киев’)

Оператор Not In – проверяет значение выражения на несовпадение с любым из элементов списка.

 SELECT *                     FROM Рейс                          WHERE [Пункт назначения] Not In (‘Москва’,  ‘Киев’)

Оператор Like – позволяет использовать шаблоны (символы * и ?).

Пример: Вывести расписание рейсов самолетов в города, начинающиеся с буквы М.

SELECT *

FROM Рейс

WHERE [Пункт назначения] Like ‘М*’

Замечание:

1). В стандарте ANSI одиночный символ – ‘_’, последовательность символов – ‘%’.

Оператор BetweenAnd - позволяет указать промежуток между значениями.

Пример: Какие номера рейсов планировались с 16.10.19 по 18.10.19?

SELECT [Номер рейса]

FROM Вылет

WHERE [Плановая дата] Between #10/16/19# And #10/18/19#

Оператор Is Null – позволяет обнаружить значение типа Null, т.е. пустое.

Пример: Какие вылеты не были совершены?

SELECT [Номер рейса], [Плановая дата]

FROM Вылет

WHERE [Реальная дата] Is Null

Предложение WHERE может включать до 40 выражений, связанных логическими операторами (And, Or).

Пример: В каких рейсах на Москву число посадочных мест не меньше 100?

SELECT [Номер рейса]

FROM Рейс

WHERE [Пункт назначения] = ‘Москва’ AND [Число мест] >= 100

Пример: Какие вылеты были совершены 16.10.19 или 17.10.19, но в первую половину дня?

SELECT [Номер рейса], [Плановая дата]

FROM Вылет

WHERE ([Реальная дата] = #10/16/19#)

OR ([Реальная дата] = #10/17/19# AND [Реальное время] <= #12:00#)