- •Оператор select
- •Простейший вид оператора select
- •Использование предложения where
- •Внутреннее соединение таблиц
- •Использование псевдонимов таблиц
- •Предложение order by - определение сортировки
- •Устранение повторяющихся значений
- •Группировка записей
- •Расчет значений вычисляемых столбцов
- •Агрегатные функции
- •Задание сложных условий поиска
- •Использование подзапросов
- •Дополнительные возможности использования подзапросов, возвращающих единичное значение
- •Использование подзапросов, возвращающих множество значений
- •Внешние соединения
- •Union - объединение результатов выполнения нескольких операторов select
Использование псевдонимов таблиц
В рассмотренных выше примерах связывания таблиц в перечнях возвращаемых столбцов после слова SELECT и в условии поиска после WHERE перед именем столбца через точку пишется название таблицы, например:
WHERE POKUPATELI.POKUP = RASHOD.POKUP
Указание имени таблицы перед именем столбца необходимо в том случае, когда в разных таблицах есть одноименные столбцы (как в нашем примере). Использование имен таблиц для идентификации столбцов неудобно из-за своей громоздкости. Намного лучше присвоить каждой таблице какое-нибудь краткое имя. Такие имена называются псевдонимами таблиц. Они отделяются пробелом от фактического имени таблицы в списке таблиц после слова FROM:
SELECT ...
FROM <таблица1 псевдоним1> [, < таблица2 псевдоним2> ...]
WHERE ...
Например, запрос
SELECT RASHOD.*, POKUPATELI.ADRES
FROM RASHOD, POKUPATELI
WHERE POKUPATELI.POKUP = RASHOD.POKUP
после введения в него псевдонимов таблиц выглядит намного компактнее:
SELECT R.*, P.ADRES
FROM RASHOD R, POKUPATELI P
WHERE P.POKUP = R.POKUP
Предложение order by - определение сортировки
Результирующий НД можно отсортировать с помощью предложения
ORDER BY <список_столбцов>
Список столбцов содержит имена столбцов, по которым будет производиться сортировка. Если указаны два и более столбцов, первый столбец будет использован для глобальной сортировки, второй столбец - для сортировки внутри группы, определяемой единым значением первого столбца, и т. д.
Пример. Показать все записи отпуска товара «Кока-кола», отсортировав их по каждому покупателю:
SELECT POKUP, DAT_RASH, TOVAR, KOLVO
FROM RASHOD
WHERE TOVAR = "Кока-кола"
ORDER BY POKUP
В следующем примере все записи из таблицы RASHOD, сортируются по имени покупателя
SELECT POKUP, DAT_RASH, TOVAR, KOLVO FROM RASHOD ORDER BY POKUP
Пример. Выбрать все записи из таблицы RASHOD, отсортировав их по именам покупателей, а для каждого покупателя - по дате:
SELECT POKUP, DAT_RASH, TOVAR, KOLVO
FROM RASHOD
ORDER BY POKUP, DAT RASH
Пример. В следующем запросе сортировка осуществляется сначала по имени покупателя, затем по названию товара и, наконец, по дате:
SELECT POKUP, TOVAR, DAT_RASH, KOLVO
FROM RASHOD
ORDER BY POKUP, TOVAR, DAT RASH
Устранение повторяющихся значений
Часто в результирующий НД необходимо включать не все записи с одинаковым значением какого-либо столбца (комбинации столбцов), а только одну из них. В этом случае после SELECT указывают ключевое слово DISTINCT, с помощью которого устраняются повторяющиеся записи:
SELECT [DISTINCT|ALL] {*|<значение1>[,<значение2>...]} FROM <таблица1>[,<таблица2>...]
Повторяющимися считаются записи, содержащие идентичные значения во всех столбцах результирующего НД. Наоборот, если в результирующий запрос нужно включить все записи, после SELECT указывают слово ALL. В InterBase/FireBird, как и во многих других серверах, нет необходимости использовать ALL явно, поскольку это значение действует по умолчанию.
Пример. Чтобы получить только наименования всех отпущенных со склада товаров, можно использовать такой запрос:
SELECT DISTINCT TOVAR FROM RASHOD
Следует заметить, что использование DISTINCT может существенно замедлять выполнение запросов, т. к. сервер будет тратить дополнительные ресурсы на проверку каждой записи. Обычно DISTINCT применяется в запросах, использующих агрегатные функции.
