Использование SQL Запросов

Язык запросов состоит из одной команды SELECT. Она используется совместно с множеством опций и предложений.

Синтаксис простейшей формы оператора SELECT:

SELECT {*| ALL | field1, field2, …, fieldN}
  FROM table1 { , table2, …, tableN}
  • Имена полей в списке разделяются через запятую;
  • Для выборки всех полей используется символ подстановки (*);
  • Опция ALL (задана по умолчанию) означает, что результат выборки будет содержать все записи, включая дублирующие друг друга;
  • При использовании опции DISTINCT результат не будет содержать дублирующих строк;
  • Если имена полей содержат пробел, они заключаются в квадратные скобки.

Условия при выборки данных задаются с помощью предложения WHERE.

Операторы сравнения: =, , >, =, <=. p="">

Логические операторы:

  • BETWEEN … AND применяется для отбора записей, в которых значения поля находится внутри заданного диапазона;
  • IN применяется для выборки записей, в которых значение некоторого поля соответствует хотя бы одному из значений заданного списка;
  • LIKE применяется для сравнения значения поля со значением, заданным при помощи шаблонов.

Операторы объединения

  • AND – для каждой записи, включаемой в результат должны выполняться все заданные ограничения;
  • OR – запись включается в результирующую выборку в случае выполнения хотя бы одного из заданных ограничений;
  • При использовании операторов объединения каждое логическое выражение заключается в скобки.

Что бы не делать лишних запросов в базу данных, используйте переменные ORDER BY и суфиксы.

Для упорядочения данных в выборке используется предложение ORDER BY. Синтаксис:

ORDER BY FIELD {ASC | DESC}
  • ASC – по возрастанию;
  • DESC – по убыванию;
  • Вместо имени поля, можно использовать порядковый номер поля в списке после слова SELECT.

Псевдонимы – измененные имена полей. Применяются при задании вычисляемых полей. Псевдоним помещается после имени поля или после вычисляемого предложения через ключевое поле AS: SELECT [Код товара], Заказано, Продано, Цена, Цена*Продано AS [Сумма продажи]

Группировка записей – объединение записей в соответствии со значениями некоторого заданного поля. Предложение GROUP BY. Совместно с ним используются функции агрегирования. В этом случае они применяются для вычисления итоговых значений по отдельным группам данных.

Использование вычисляемых полей

На основании данных таблицы «Продажи» вычислите для каждого товара сумму денег, получен­ных за проданный товар (произведение цены на количество проданного товара), и сумму, на которую заказано товаров (произведение цены на количество заказан­ного товара), а также разность между ними:

SELECT [Код товара], Цена, Заказано, Продано,
  Цена*Продано, Цена*3аказано, Цена*Заказано-Цена*Продано
  FROM Продажи

Псевдонимы полей

Задайте псевдони­мы для вычисляемых полей в предыдущем запросе.

SELECT [Код товара], Цена, Заказано, Продано,
  Цена*Продано AS [Сумма продажи],
  Цена*3аказано AS [Сумма заказа],
  Цена*Заказано-Цена*Продано AS [Разность]
  FROM Продажи

Функции агрегирования

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

SELECT COUNT(Продано) AS [Всего записей],
  МIN(Продано) AS min,
  МАХ(Продано) AS max,
  SUM(Продано) AS [Всего продано],
  AVG(Продано) AS [Среднее количество продаж]
  FROM Продажи

Группировка данных

Подсчитайте количество покупок товаров, сделанных каждым из клиентов.

SELECT [Код клиента],
  SUM(Продано) AS [Количество покупок]
  FROM Продажи
  GROUP BY [Код клиента]

В предыдущем за­просе выберите только тех клиентов, которые сделали за один раз более 10 покупок, и упорядочьте результаты выборки в порядке возрастания:

Язык SQL позволяет извлечь данные из нескольких таблиц. При этом выполняется операция соединения. Способы соединения: соединение равенства, соединение неравенства, внешние соединения. Для задания вида соединения используется предложение WHERE.

Соединение равенства производится по общему для нескольких таблиц полю. Синтаксис:

SELECT table1.field1, table2.field2 {, …, tableN.fieldN}
  FROM table1, table2 {, …, tableN}
  WHERE table1.common_field1= table2.common_field1
  {AND table1.common_field2= table2.common_field2}

При использовании внешнего соединения результат запроса будет содержать все записи одной из таблиц, даже в том случае, если в связанной с ней таблице отсутствуют совпадающие значения. Реализуется с помощью оператора OUTER JOIN:

SELECT table1.field1, table2.field2 {, …, tableN.fieldN}
  FROM table1
  LEFT | RIGHT | FULL {OUTER} JOIN table2
  ON условие
  {LEFT | RIGHT | FULL {OUTER} JOIN table3
  ON условие}

LEFT – левое внешнее соединение, RIGHT – правое внешнее соединение, FULL – полное внешнее соединение.

Подзапрос – запрос, помещенный внутри другого запроса.

  • Подзапросы должны заключаться в круглые скобки;
SELECT {*| ALL | field1, field2, …, fieldN}
  FROM table1 { , table2, …, tableN}
  WHERE условие (SELECT {*| ALL | field1, field2, …, fieldN}
  FROM table1 { , table2, …, tableN}
  WHERE условие)
  • Предложение ORDER BY может быть использовано только в основном запросе;
  • Подзапросы, возвращающие более одной записи, могут использоваться только с многозначными операторами;
  • В основном запросе нельзя использовать оператор BETWEEN.

Запросы, включающие в себя несколько операторов SELECT, называются составными. Правила объединения запросов:

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

Примеры

Выбрать записи из двух таблиц, используя соединение равенства.

Выбрать из таблицы «Клиенты» поля, содержащие сведения об именах кли­ентов, а из таблицы «Продажи» — поля, в которых содержатся сведения о покуп­ках, сделанных клиентами. Для связывания таблиц воспользуемся общим для обеих таблиц полем «Код клиента»:

SELECT Клиенты.Фамилия, Клиенты.Имя,
  Клиенты.Отчество, Продажи.Продано
  FROM Клиенты, Продажи
  WHERE Клиенты.[Код клиента]=Продажи.[Код клиента]

Дополнить данный запрос предложением группировки и полем, содержащим функцию агрегирования.

Изме­нить рассмотренный выше запрос таким образом, чтобы результаты были сгруппированы по полям «Фамилия», «Имя», «Отчество» и для каждого клиента выводилось суммарное количество покупок:

SELECT Клиенты.Фамилия, Клиенты.Имя, Клиенты.Отчество,
  SUM(Продажи.Продано) AS [Количество покупок]
  FROM Клиенты.Продажи
  WHERE Клиенты [Код клиента]=Продажи [Код клиента]
  GROUP BY Клиенты.Фамилия, Клиенты.Имя, Клиенты.Отчество

Выбрать записи из трех взаимосвязанных таблиц.

Включить информацию о наименовании товара из таблицы «Товары»:

SELECT Клиенты.Фамилия, Клиенты.Имя, Клиенты.Отчество,
  SUM(Продажи.Продано) AS [Количество покупок],
  Товары.Наименование
  FROM Клиенты, Продажи, Товары
  WHERE (Клиенты.[Код клиента]=Продажи.[Код клиента]) AND
  (Продажи.[Код товара]=Товары.[Код товара])
  GROUP BY Клиенты.Фамилия, Клиенты.Имя, Клиенты.Отчество,
  Товары.Наименование

Создать левое и правое внешние соединения.

Выбрать из таблицы «Товары» список товаров, из таблицы «Продажи» — суммарное количество проданных товаров:

SELECT Товары.[Наименование],
  SUM(Продажи.Продано) AS [Всего продано]
  FROM Товары LEFT OUTER JOIN Продажи
  ON Товары.[Код товара]=Продажи.[Код товара]
  GROUP BY Товары.[Наименование]

Создать сложный запрос, использующий подзапрос.

Выбрать из таблицы «Продажи» информацию о продажах товара с наименованием «Delphi 5»:

SELECT [Код клиента]. Заказано, Продано. Цена
  FROM Продажи
  WHERE [Код товара]=(SELECT [Код товара] FROM Товары WHERE Наименование='Delphi 5')