Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Оператор SELECT: использование подзапросов. Примеры




Агрегатные функции используются подобно именам полей в предложении SELECT запроса, но с одним исключением, они берут имена полей как аргументы. Только числовые поля могут использоваться с SUM и AVG. С COUNT, MAX, и MIN, могут использоваться и числовые, и символьные поля. Когда они используются с символьными полями, MAX и MIN будут транслировать их в эквивалент ASCII, к-й д. сообщать, что MIN будет означать первое, а MAX последнее значение в алфавитном порядке

Оператор SELECT: использование имен корреляции и агрегатных функций. Примеры.

SELECT — оператор DML (язык манипулирования данными) языка SQL, возвращающий набор данных (выборку) из БД, удовлетворяющих заданному условию.

Структура команды select:

Select …

- from …– таблица, из которой будут извлекаться данные;

- where …– «горизонтальный» фильтр, условие на строки;

- order by …– критерий упорядочения строк результатирующей таблицы

- group by… – критерий группирования строк таблицы: строки таблицы разбиваются на группы с одинаковым значением критерия, и каждая группа дает единственную строку в выходную таблицу;

- having… – критерий фильтрации групп;

- into… - куда и в каком виде записать результат.

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

Пр. Отобрать все пары поставщиков т.о., чтобы 1ый поставщик в паре имел статус, больший статуса 2го поставщика:

SELECT P1.PNAME AS PNAME1, P1.PSTATUS AS PSTATUS1, P2.PNAME AS PNAME2, P2.PSTATUS AS PSTATUS2 FROM P P1, P P2 WHERE P1.PSTATUS1 > P2.PSTATUS2;

В рез-те получим след. таблицу:

PNAME1 PSTATUS1 PNAME2 PSTATUS2
Иванов   Петров  
Иванов   Сидоров  
Сидоров   Петров  

Агрегатные функции. Запросы могут производить обобщенное групповое значение полей точно также как и значение одного поля. Это делает с пом. агрегатных функций. Агрегатные функции производят одиночное значение для всей группы таблицы. Имеется список этих функций:
* COUNT - производит номера строк или не-NULL значения полей, к-ые выбрал запрос.

* SUM - производит арифметическую сумму всех выбранных значений дан-го поля.

* AVG - производит усреднение всех выбранных значений дан-го поля.

* MAX - производит наибольшее из всех выбранных значений дан-го поля.

* MIN - производит наименьшее из всех выбранных значений дан-го поля.

Пр.. Получить общее, максимальное, минимальное и среднее количества поставляемых деталей (ключевые слова SUM, MAX, MIN, AVG):

SELECT SUM(PD.VOLUME) AS SM, MAX(PD.VOLUME) AS MX, MIN(PD.VOLUME) AS MN, AVG(PD.VOLUME) AS AV FROM PD;

В рез-те получим след. таблицу с одной строкой:

SM MX MN AV
      333.33333333

SELECT — оператор DML (язык манипулирования данными) языка SQL, возвращающий набор данных (выборку) из БД, удовлетворяющих заданному условию.

Структура команды select:

Select …

- from …– таблица, из которой будут извлекаться данные;

- where …– «горизонтальный» фильтр, условие на строки;

- order by …– критерий упорядочения строк результатирующей таблицы

- group by… – критерий группирования строк таблицы: строки таблицы разбиваются на группы с одинаковым значением критерия, и каждая группа дает единственную строку в выходную таблицу;

- having… – критерий фильтрации групп;

- into… - куда и в каком виде записать результат.

Подзапрос -это оператор выбора, к-ый содержится внутри др. оператора выбора, вставки, обновления или удаления, внутри условного оператора или внутри другого подзапроса.

Подзапросы обычно содержатся в предложениях where или having SQL оператора или в списке выбора этого оператора. С пом. подзапросов можно проводить дальнейший отбор дан-х из рез-тов др. запросов. Оператор, содержащий подзапрос, может обрабатывать строки нек-ой таблицы, основываясь на рез-тах вычисления списка выбора подзапроса, к-ый в свою очередь может ссылаться на эту же таблицу как внешний запрос, или обращаться к др. таблице.

Операторы выбора, содержащие один или неск-ко подзапросов, наз-тся также составными запросами или составными операторами выбора. Возм-ть включения одного оператора выбора внутрь другого явл-тся одной из причин, по к-ой язык SQL наз-ется “структурированным” (Structured Query Language). Очень удобным ср-вом, позволяющим формулировать запросы более понятным образом, явл-тся возм-ть использования подзапросов, вложенных в основной запрос.

Пр1. Получить список поставщиков, статус которых меньше максимального статуса в таблице поставщиков (сравнение с подзапросом):

SELECT * FROM P WHERE P.STATYS < (SELECT MAX(P.STATUS) FROM P);

Замечание. Т.к. поле P.STATUS сравнивается с результатом подзапроса, то подзапрос должен быть сформулирован так, чтобы возвращать таблицу, состоящую ровно из одной строки и одной колонки.

Замечание. Результат выполнения запроса будет эквивалентен результату следующей последовательности действий:

  1. Выполнить один раз вложенный подзапрос и получить максимальное значение статуса.
  2. Просканировать таблицу поставщиков P, каждый раз сравнивая значение статуса поставщика с результатом подзапроса, и отобрать только те строки, в которых статус меньше максимального.

Пр2. Использование предиката NOT EXIST. Получить список поставщиков, не поставляющих деталь номер 2:

SELECT * FROM P WHERE NOT EXIST (SELECT * FROM PD WHERE PD.PNUM = P.PNUM AND PD.DNUM = 2);

Замечание. Также как и в предыдущем примере, здесь используется коррелируемый подзапрос. Отличие в том, что в основном запросе будут отобраны те строки из таблицы поставщиков, для которых вложенный подзапрос не выдаст ни одной строки.





Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 2575; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.