Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Информатика для экономистов

Создание запросов с использованием языка SQL

На самом деле любой запрос в MS Access реализуется с помощью языка SQL. Большинство запросов можно построить, пользуясь средствами, которые Access предоставляет в режиме конструктора, и в этом случае они будут храниться в виде инструкций SQL. Но некоторые типы запросов можно построить, только используя язык SQL.

Синтаксис инструкции SELECT в MS Access. Ядром языка SQL является инструкция SELECT. Она используется для отбора строк и столбцов из таблиц базы данных и содержит пять основных предложений. В общем случае ее синтаксис можно представить в следующем виде:

SELECT <список-полей>[1]

FROM <список-таблиц>

[WHERE <спецификация-отбора-строк>][2] [GROUP BY <спецификация-группировки>]

[HAVING <спецификация-отбора-групп>]

[ORDER BY <спецификация-сортировки>]

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

[[[]{имя-таблицы | имя-запроса-на-выборку | псевдоним}!]].][[]имя-поля[]][3]

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

Первую часть имени (включая точку) можно опустить, если поле имеется только в одной из таблиц предложения FROM.

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

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

Пример 10.5. Следующее выражение задает ноле из таблицы [Товары], имя которого Наименование:

Товары. Наименование

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

FROM {имя-таблицы [[AS] псевдоним] I

имя-запроса-на-выборку [[AS] псевдоним] I

<таблица-объединения>] ...

[IN сспецификация источника>]

где <таблица-объединения>:

{имя-таблицы [[AS] псевдоним] I

имя-запроса-на-выборку [[AS] псевдоним] I

(<таблица-объединения>)}

{INNER I LEFT I RIGHT] JOIN

{имя-таблицы [[AS] псевдоним] I

имя-запроса-на-выборку [[AS] псевдоним] I

(<таблица-объединения>)}

ON <условие объединения>

Для каждой таблицы и запроса можно определить альтернативное имя. Оно используется как псевдоним вместо полного имени таблицы при задании имен столбцов в списке полей, условии объединения и предложении WHERE.

Пример 10.6. Следующий запрос отображает все поля таблицы Товары:

SELECT Товары.*

FROM Товары;[4]

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

SELECT Товары.Наименование, Товары.Цена

FROM Товары

WHERE Товары.Цена > 100 AND Товары.[Гарантийный срок] = 36;

Большие возможности языка SQL во многом основаны на его способности объединять информацию из нескольких таблиц или запросов.

Для задания типа объединения таблиц в логический набор записей, из которого будет выбираться необходимая информация, в предложении FROM используется операция JOIN.

Операция INNER JOIN используется для получения всех строк из обеих логических таблиц, удовлетворяющих условию объединения.

Операция LEFT JOIN возвращает все строки из первой логической таблицы, объединенные с теми строками из второй, для которых выполняется условие объединения.

Аналогично, операция RIGHT JOIN возвращает все строки из второй логической таблицы, объединенные с теми строками из первой таблицы, для которых выполняется условие объединения.

<Условие объединения> – выражение, в котором поля первой таблицы сравниваются с полями второй таблицы. В бланке запроса QBE в условии объединения используется только оператор равно (=). Запрос на основе объединения таблиц по неравенству (<, >, <>, <= или >=) можно создать только в режиме SQL.

Пример 10.8. Следующий запрос отображает сведения о складах фирмы Citii i nk:

SELECT Склады.Номерсклада, Склады.Адрес,

Склады .Телефон

FROM Фирмы INNER JOIN Склады

ON Фирмы.Кодфирмы = Склады.Кодфирмы

WHERE Фирмы.Название = "Citilink";

Пример 10.9. Запрос отображает список товаров, которые еще не продавались, с указанием наименования товаров и номеров складов, на которых они хранятся:

SELECT Товары.Наименование, Хранение.Номерсклада

FROM (Товары INNER JOIN Хранение

ON Товары.КодТовара = Хранение.КодТовара)

LEFT JOIN Продажи ON Хранение.ID = Продажи.ID

WHERE ((Продажи.Количество) Is Null);

Пример 10.10. Следующая операция возвратит все строки из таблиц "Товары" и "Хранение", для которых совпадают значения в поле КодТовара:

Товары INNER JOIN Хранение ON Товары.КодТовара =

Хранение.КодТовара

Операция LEFT JOIN возвратит все строки из таблицы, полученной в результате предыдущей операции INNER JOIN, объединенные с теми строками из таблицы "Продажи", для которых выполняется условие объединения. Тогда в с троке товара, который не продавался, в поле [Количество проданного товара] будет значение Null, что будет являться условием отбора для искомого списка.

Предложение GROUP BY. В инструкции SELECT задает столбцы, используемые для формирования групп из выбранных строк. Синтаксис:

GROUP BY имя-столбца, ...

Оператор GROUP BY разделяет рассматриваемую таблицу па такие группы, что внутри любой из этих групп все строки содержат одинаковые значения в указанном столбце.

Пример 10.11. Следующий запрос отображает общее количество проданного товара каждого наименования:

SELECT Товары.Наименование, Sum(Продажи.Количество)

AS [Sum-Количество]

FROM (Товары INNER JOIN Хранение

ON Товары.КодТовара = Хранение.КодТовара)

INNER JOIN Продажи ON Хранение.Ю=Продажи.ID

GROUP BY Товары.Наименование;

Предложение HAVING. Это специальная форма фразы WHERE. Она относится пе к отдельным строкам, а к группам: предикат во фразе HAVING всегда ссылается (посредством специальных библиотечных функций, таких как, например, SET) на свойства групп, а не строк, и на основе этого предиката группы целиком либо выбираются, либо отбрасываются. Синтаксис:

HAVING "условие отбора>

В случае отсутствия предложения GROUP BY условие отбора применяется ко всей логической таблице, определенной инструкцией SELECT.

Пример 10.12. Следующий запрос отображает общее количество проданного товара по дням с 10 по 20 декабря 2003 г.:

SELECT Продажи.Дата, Эит(Продажи.Количество)

AS [Sum-Количество]

FROM Продажи

GROUP BY Продажи.Дата

HAVING ((Продажи.Дата) Between #10.12.03# AND

#20.12.03#);

Предложение ORDER BY. Задает порядок расположения строк, возвращаемых инструкцией SELECT. Синтаксис:

ORDER BY {имя-столбца I номер-столбца [ASC I DESC]},...

Оператор ORDER BY определяет сортировку результата выборки в порядке возрастания (ASC) или убывания (DESC) значений атрибута. В предложении ORDER BY можно указать несколько столбцов. Список сортируется сначала по значениям столбца, имя которого указано первым.

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

SELECT Товары.Наименование, Товары.Цена

FROM Товары

ORDER BY Товары.Цена DESC;

Инструкция SELECT. Выполняет операции выбора и объединения для создания логической таблицы (набора записей) на базе других таблиц или запросов. Выше был рассмотрен синтаксис инструкции SELECT в общем виде. Рассмотрим его более подробно:

SELECT [ALL I DISTINCT I DISTINCTROW I TOP число

[PERCENT]] <список-полей>

Предикаты ALL, DISTINCT, DISTINCTROW, TOP n или TOP n PERCENT уточняют окончательный набор записей запроса.

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

Предикат DISTINCT требует, чтобы запрос возвратил только строки, отличающиеся от всех остальных. Если инструкция SELECT содержит предикат DISTINCTROW, то в набор записей включаются только те строки, в которых конкатенация первичных ключей из всех таблиц, участвующих в формировании возвращаемых столбцов, является уникальной. В зависимости от того, какие столбцы представлены в наборе записей, иногда можно увидеть повторяющиеся строки, но даже в этом случае каждая строка запроса образована из уникальной (DISTINCT) комбинации строк (ROWS) базовых таблиц.

Чтобы результирующий набор содержал только первые п или первые п процентов записей, используйте предикат ТОР п или TOP п PERCENT. Параметр п должен быть целым числом, не превышающим 100, если используется ключевое слово PERCENT.

Пример 10.14. Следующий запрос отображает список 10 самых дорогих товаров:

SELECT ТОР 10 Товары.Наименование, Товары.Цена

FROM Товары

ORDER BY Товары.Цена DESC;

Подчиненный запрос (вложенная выборка). Язык SQL позволяет использовать в условии отбора результаты другой выборки. Уровней вложенности может быть несколько.

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

SELECT Товары.Наименование, Товары.Цена

FROM Товары

WHERE ((Товары.Наименование) Like "проц*") AND

((Товары.L(eHa)<(SELECT Ауд(Товары.Цена) AS СредняяЦена

FROM Товары

WHERE ((Товары.Наименование) Like "проц*")));

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

  • [1] В угловые скобки заключается обязательный элемент синтаксиса.
  • [2] В квадратные скобки заключаются один или несколько необязательных элементов, разделенных символом "вертикальная черта" (|).
  • [3] В фигурные скобки заключаются один или несколько элементов, разделенных символом "вертикальная черта". Следует выбрать один из перечисленных элементов.
  • [4] Запрос должен заканчиваться символом "точка с запятой".
 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Предыдущая   СОДЕРЖАНИЕ   Следующая >
 

Популярные страницы