Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
коррелированный подзапрос.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
97.28 Кб
Скачать

Подзапрос с оператором сравнения, отличным от in

Выдать номера поставщиков, находящихся в том же городе, что и поставщик №1.

SELECT *

FROM Поставщики

WHERE ГОРОД =

(SELECT ГОРОД

FROM Поставщики

WHERE НОМЕР_ПОСТАВЩИКА = 1);

Результат:

Номер_Поставщика Фамилия Город

1 Смит Лондон

4 Кларк Лондон

Иногда пользователь может знать, что заданный подзапрос должен возвратить в точности одно значение, как в рассматриваемом примере. В таком случае можно использовать вместо обычного IN более простой оператор сравнения (например, =, > и т. д.). Однако, если подзапрос возвращает более одного значения и не используется оператор IN, будет возникать ошибка. Ошибка не возникнет, если подзапрос не возвратит вообще ни одного значения. При этом сравнение интерпретируется в точности так, как если бы подзапрос возвратил неопределенное значение. Более того, подзапрос не может включать фразу GROUP BY, если он используется с простым оператором сравнения, например с =, > и т. д.

Стандартные функции.

Хотя и весьма мощное во многих отношениях, предложение SELECT в том виде, как оно было до сих пор описано, остается все еще неадекватным для многих практических задач. Например, даже настолько простои запрос как "Сколько имеется поставщиков?" нельзя выразить, используя только введенные до сих пор конструкции. Для того чтобы усилить его основные возможности по выборке данных, в SQL предусматривается ряд специальных стандартных функций. В настоящее время доступны функции COUNT (число значений), SUM (сумма), AVG (среднее), МАХ (максимум) и MIN (минимум). Кроме специального случая "COUNT (*)" (см. ниже) каждая из этих функций оперирует совокупностью значений в одном столбце некоторой таблицы, возможно, производной, т. е. сконструированной некоторым образом из заданных базовых таблиц, и продуцирует в качестве ее результата единственное значение, определенное следующим образом:

COUNT - число значений в столбце

SUM - сумма значений по столбцу

AVG - среднее значение в столбце

МАХ - самое большое значение в столбце

MIN - самое малое значение в столбце

UPPER - перевод строки в верхний регистр

Для функций SUM и AVG рассматриваемый столбец должен содержать числовые значения. В общем случае аргументу функции может предшествовать ключевое слово DISTINCT (различный), указывающее, что избыточные дублирующие значения должны быть исключены перед тем, как будет применяться функция. Однако для функций МАХ и MIN ключевое слово DISTINCT не имеет отношения к делу и должно быть опущено. Для функции COUNT ключевое слово DISTINCT должно быть специфицировано. Специальная функция COUNT (*), для которой использование DISTINCT не допускается, предусмотрена для подсчета всех строк в таблице без исключения каких-либо дубликатов. Если DISTINCT специфицируется, то аргумент должен состоять только из имени столбца, например Вec. Если DISTINCT не специфицировано, аргумент может представлять собой арифметическое выражение, например Вес*.1000. В столбце-аргументе всегда перед применением функции исключаются все неопределенные значения, независимо от того, специфицировано ли DISTINCT, за исключением случая COUNT (*), при котором неопределенные значения обрабатываются точно так же, как и значения, не являющиеся неопределенными. Если оказывается, что аргумент - пустое множество, функция COUNT принимает значение нуль. Все другие функции принимают в этом случае неопределенное значение.

ФУНКЦИЯ COUNT ВО ФРАЗЕ SELECT

Выдать общее количество поставщиков

SELECT COUNT (*)

FROM Поставщики;

Результат:5

ФУНКЦИЯ ВО ФРАЗЕ SELECT СО СПЕЦИФИКАЦИЕЙ DISTINCT

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

SELECT COUNT (DISTINCT НОМЕР_ПОСТАВЩИКА)

FROM Детали;

Результат:4

СТАНДАРТНЫЕ ФУНКЦИИ ВО ФРАЗЕ SELECT

  • Выдать самую тяжелую деталь

  • SELECT MAX (Вес)

  • FROM Детали;

Результат: 20

  • Выдать среднее значение веса деталей

  • SELECT AVG (Вес)

  • FROM Детали;

Результат: 15,8

ИСПОЛЬЗОВАНИЕ ФРАЗЫ GROUP BY

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

SELECT Название

FROM Детали

GROUP BY Название;

Результат:

Название

болт

гайка

винт

шуруп

Каждое выражение во фразе SELECT должно принимать единственное значение для группы, т. е. оно может быть либо самим полем, указанным во фразе GROUP BY, либо арифметическим выражением, включающим это поле, либо константой, либо такой функцией, как SUM, которая оперирует всеми значениями данного поля в группе и сводит эти значения к единственному значению. Заметим, что фраза GROUP BY не предполагает ORDER BY (упорядочить по). Также можно использовать фразу Where с Group by.Строки, не удовлетворяющие фразе WHERE, исключаются до того, как будет осуществляться какое-либо группирование.