Запросы с использованием одной таблицы

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

SELECT *

FROM Продукты

ORDER BY Продукт;

Здесь "звездочка" (*) служит кратким обозначением всех имен полей в таблице, указанной во фразе FROM. При этом порядок вывода полей соответствует порядку, в котором эти поля определялись при создании таблицы.

Запрос выдает результат, указанный на Рис. 3-9, б.

2. Исключение дубликатов (выдать перечень проданных продуктов без повторений)

Этот запрос является аналогом операции проекции реляционной алгебры.

Для исключения дубликатов и одновременного упорядочения перечня необходимо дополнить запрос ключевым словом DISTINCT (различный, различные), как показано в следующем примере:

SELECT DISTINCT КодПрод

FROM Продажи;

Результат запроса приведен на Рис. 3-10, б.

Возможности совместной обработки нескольких таблиц

1. Декартово произведение

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

SELECT *

FROM Поставщики, Продукты;

Или SELECT Поставщики.*, Продукты.*

FROM Поставщики, Продукты;

Результат запроса приведен на Рис. 3-14, б.

2. Естественное соединение

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

SELECT Продажи.*, Продукт, ЕдИзм, [СрокХран(дней)], УсловияХран

FROM Продукты, Продажи

WHERE Продукты.КодПрод = Продажи.КодПрод;

Результат запроса приведен на Рис. 3-15, б.

3. Условное соединение

Получить названия и вес продуктов, проданных 2 января 2004г. В отличие от предыдущего запроса здесь к условию связи таблиц по поля код продукта добавляется условие отбора даты продажи

SELECT ДатаПродажи, Продукт, Количество, ЕдИзм

FROM Продукты, Продажи

WHERE ДатаПродажи = #1-2-2004# AND Продукты.КодПрод = Продажи.КодПрод;

Результат запроса приведен на Рис. 3-16, б.

4. Объединение двух таблиц содержит те записи, которые есть либо в первой, либо во второй, либо в обеих таблицах. Объединить записи таблиц Продукты и НовыеПродукты. Поскольку таблицы имеют эквивалентные схемы, то в запрос можно включить все поля:

SELECT Продукты.*

FROM Продукты

UNION SELECT НовыеПродукты.*

FROM НовыеПродукты;

Вложенные подзапросы

Виды вложенных подзапросов Вложенный подзапрос - это подзапрос, заключенный в круглые скобки и вложенный в WHERE (HAVING) фразу предложения SELECT или других предложений, использующих WHERE фразу. Вложенный подзапрос может содержать в своей WHERE (HAVING) фразе другой вложенный подзапрос и т.д. Вложенный подзапрос создан для того, чтобы при отборе записей таблицы, сформированной основным запросом, можно было использовать данные из других таблиц. Существуют простые и коррелированные вложенные подзапросы. Они включаются в WHERE (HAVING) фразу с помощью условий IN, EXISTS или одного из условий сравнения ( = | <> | < | <= | > | >= ). Простые вложенные подзапросы обрабатываются системой "снизу вверх". Первым обрабатывается вложенный подзапрос самого нижнего уровня. Множество значений, полученное в результате его выполнения, используется при реализации подзапроса более высокого уровня и т.д. Запросы с коррелированными вложенными подзапросами обрабатываются системой в обратном порядке. Сначала выбирается первая строка рабочей таблицы, сформированной основным запросом, и из нее выбираются значения тех столбцов, которые используются во вложенном подзапросе (вложенных подзапросах). Если эти значения удовлетворяют условиям вложенного подзапроса, то выбранная строка включается в результат. Затем выбирается вторая строка и т.д., пока в результат не будут включены все строки, удовлетворяющие вложенному подзапросу (последовательности вложенных подзапросов).

Наши рекомендации