
- •4. Реляционные языки запросов
- •Isbl -язык реляционной алгебры
- •Язык sql
- •Типы данных.
- •Создание, удаление или изменение таблиц или индексов с помощью управляющих запросов sql.
- •Инструкция create table
- •Предложение constraint (sql)
- •Инструкция alter table
- •Инструкция drop
- •Drop {table таблица | index индекс on таблица}
- •Инструкция create index
- •Запросы на выборку. Инструкция select
- •Предикаты all, distinct, distinctrow, top (sql)
- •Select [all | distinct | distinctrow | [top n [percent]]]
- •Предложение from
- •Синтаксис
- •Предложение where
- •Синтаксис
- •Предложение order by
- •Синтаксис
- •Группировка записей. Предложение group by
- •Синтаксис
- •Where условие_отбора
- •Предложение having
- •Синтаксис
- •From таблица
- •Запросы с соединением таблиц. Операция inner join
- •On таблица1.Поле2 оператор_сравнения таблица2.Поле2) or
- •Операции left join, right join
- •From таблица1 [ left | right ] join таблица2
- •Объединение результатов нескольких запросов. Операция union
- •Подчиненный запрос.
- •Запросы на изменение. Инструкция select...Into
- •From источник
- •Предложение in
- •Синтаксис
- •Инструкция insert into
- •Инструкция update
- •Инструкция delete
- •Delete [таблица.*]
- •Перекрестные запросы
- •Синтаксис
- •Запросы с параметрами Описание parameters
- •Синтаксис parameters имя тип_данных [, имя тип_данных [, ...]]
- •Статистические функции sql .
- •Функция Avg
- •Функция Count
- •Функции Min, Max
- •Функции StDev, StDevP
- •Функция Sum
- •Функции Var, VarP
- •Var(выражение)
- •VarP(выражение)
- •Quel:язык реляционного исчисления с переменными-кортежами
- •Query-by-example: язык исчисления с переменными – доменами
- •Формы запросов
- •Зарезервированные слова:
- •Конструирование операторов запроса.
- •Выбор записей
- •Запросы к нескольким таблицам
- •Вычисления
- •Операции
- •Группы записей
- •Работа с наборами записей
- •Развитые операторы запросов.
Группировка записей. Предложение group by
Объединяет записи с одинаковыми значениями в указанном списке полей в одну запись. Если инструкция SELECT содержит статистическую функцию языка SQL (например, Sum или Count), то для каждой записи будет вычислено итоговое значение.
Синтаксис
SELECT список_полей
FROM таблица
Where условие_отбора
GROUP BY группируемые_поля
где группируемые_поля - имена полей (до 10), которые используются для группирования записей.
Порядок имен полей в аргументе группируемые поля определяет уровень группирования для каждого из этих полей.
Предложение GROUP BY не является обязательным.
Итоговые значения опускаются, если инструкция SELECT не содержит статистической функции SQL.
Значения Null, которые находятся в полях, заданных в предложении GROUP BY, группируются и не опускаются. Однако статистические функции SQL не обрабатывают значения Null.
Предложение WHERE используется для исключения записей из группирования, а предложение HAVING - для применения фильтра к записям после группирования.
Если поле, включенное в предложение GROUP BY, не является полем типа МЕМО или объекта OLE, оно может ссылаться на любое поле, перечисленное в предложении FROM, даже если это поле не включено в инструкцию SELECT, при условии, что инструкция SELECT содержит по крайней мере одну статистическую функцию SQL. Ядро базы данных Jet нельзя использовать для группирования полей МЕМО или объекта OLE.
При использовании предложения GROUP BY все поля в списке полей инструкции SELECT должны быть либо включены в предложение GROUP BY, либо использоваться в качестве аргументов статистической функции SQL.
Предложение having
Определяет, какие сгруппированные записи отображаются при использовании инструкции SELECT с предложением GROUP BY. После того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING отберет те из полученных записей, которые удовлетворяют условиям отбора, указанным в предложении HAVING.
Синтаксис
SELECT список_полей
From таблица
WHERE условие_отбора
GROUP BY группируемые_поля
HAVING условие_отбора_групп
где условие_отбора_групп - выражение, определяющее, какие сгруппированные записи отображать.
Предложение HAVING не является обязательным.
Предложение HAVING похоже на предложение WHERE, которое определяет, какие записи должны быть отобраны. После того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING указывает, какие из полученных записей должны быть отобраны.
Предложение HAVING может содержать до 40 выражений, связанных логическими операторами, такими как And и Or.
Примеры:
Определить количество товаров каждого типа:
SELECT Тип, Count([Код товара]) AS [Колич]
FROM Товары
GROUP BY Тип;
Определить суммарное количество товаров, поставляемых каждым поставщиком в количествые менее 100:
SELECT [Код поставщика], Sum(Количество) AS Сумма
FROM Поставки
GROUP BY [Код поставщика]
HAVING Sum(Количество)<100;
Запросы с соединением таблиц. Операция inner join
Объединяет записи из двух таблиц, если связующие поля этих таблиц содержат одинаковые значения.
Синтаксис
FROM таблица1 INNER JOIN таблица2 ON таблица1.поле1 оператор_сравнения таблица2.поле2
где:
таблица1, таблица2 - имена таблиц, записи которых подлежат объединению;
поле1, поле2 - имена объединяемых полей. Если эти поля не являются числовыми, то должны иметь одинаковый тип данных и содержать данные одного рода, однако они могут иметь разные имена;
оператор_сравнения - любой оператор сравнения: “=,” “<,” “>,” “<=,” “>=,” or “<>.”
Операцию INNER JOIN можно использовать в любом предложении FROM. Это самые обычные типы связывания. Они объединяют записи двух таблиц, если связующие поля обеих таблиц содержат значения, удовлетворяющие условию.
Попытка объединить поля МЕМО или объекта OLE приведет к возникновению ошибки.
Можно объединить два числовых поля подобных типов, например, поле-счетчик с типом "Длинное целое", потому что эти типы подобны. Однако нельзя объединить типы полей "С плавающей точкой (4 байт)" и "С плавающей точкой (* байт)".
Чтобы связать несколько предложений ON в инструкции JOIN, используется следующий синтаксис:
SELECT поля
FROM таблица1 INNER JOIN таблица2
ON таблица1.поле1 оператор_сравнения таблица2.поле1 AND