Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Вложенные запросы




Допускается использование GROUP BY с несколькими полями

SNUM

3412 4

3413 4

3414 3

3416 5

а) SELECT SNUM, UDATE, MIN (OCENKA)

FROM USP

GROUP BY SNUM, UDATE

Если необходимо увидеть оценку минимальную, но меньшую «5» запрос запишем так:

б) SELECT SNUM, UDATE, MIN (OCENKA)

FROM USP

GROUP BY SNUM, UDATE

HAVING MIN (OCENKA) < 5

HAVING используется для удаления определенных групп из вывода, как это делает WHERE. Кроме того, можно выбрать определенные группы с помощью директивы HAVING, которая позволяет сравнивать некоторое свойство с константой. Если группа удовлетворяет условию из директивы HAVING, то она включается в результате запроса.

Для вывода наименьших оценок для студентов с номером 3412 и 3413 используется следующий запрос:

с) SELECT SNUM, MIN (OCENKA)

FROM USP

GROUP BY SNUM

HAVING SNUM IN (3412, 3413)

Нельзя использовать агрегатную функцию от агрегатной функции

Запросы могут управлять другими запросами – это делается путем размещения запроса внутрь предиката другого, который использует вывод внутреннего запроса для установления верного или неверного значения предиката. Оператор SELECT, который вложен в другой оператор SELECT, называется субзапросом (subquery). Для создания субзапроса оператор SELECT следует заключить в круглые скобки.

Например требуется информация об успеваемости студента с фамилией Поляков, но неизвестен номер этого студента. Этот номер извлекается из таблицы с данными о студентах и результат применяется к таблице успеваемости.

SELECT *

FROM USP

WHERE SNUM=

(SELECT SNUM FROM STUDENTS

WHERE SFAM = ‘Поляков’)

Подзапрос должен отображать только одну строку вывода, если их несколько, то рекомендуется использовать оператор DISTINCT.

Для отображения дисциплины, которую ведет преподаватель Вакулина используется подзапрос:

SELECT *

FROM PREDMET

WHERE TNUM =

(SELECT DISTINCT TNUM

FROM TEACHERS

WHERE TEAM = ’Вакулина’)

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

<выражение> <оператор> <подзапрос>

В подзапросах допускается использовать агрегатные функции:

1. Вывести оценки по всем учебным дисциплинам, значения которых выше среднего:

SELECT * FROM USP

WHERE OCENKA >

(SELECT AVG (OCENKA) FROM USP)

2. В подзапросах можно использовать оператор IN вместо знака равенства

SELECT * FROM PREDMET

WHERE TNUM IN

(SELECT TNUM FROM TEACHERS

WHERE TFAM = ‘Вакулина’)

Подзапрос исходит в таблице TEACHERS код преподавателя, а затем по этому коду определяет предметы из таблицы PREDMET.

Подзапросы всегда определяет одиночные столбцы, поэтому в подзапросе нельзя использовать команду SELECT *

В подзапросе допускается использовать выражение, основанное на поле. Это может быть выполнено с помощью реляционных операторов или при использовании IN.

Например.

SELECT *

FROM PREDMET

WHERE PNUM =

(SELECT PNUM – 1 FROM PREDMET

WHERE PNAME = ‘Философия’)

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

Можно также использовать подзапросы внутри предложения HAVING.

Эти подзапросы могут использовать свои собственные агрегатные функции, если они не производят многочисленных значений, или использовать GROUP BY или HAVING.

Например:

SELECT OCENKA, COUNT (DISTINCT SNUM)

FROM USP

GROUP BY OCENKA >=

(SELECT AVG (OCENKA) FROM USP

WHERE PNUM = 2003)

Этот запрос подсчитывает количество студентов с оценками выше средней, чем по дисциплине PNUM = 2003.




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


Дата добавления: 2014-01-20; Просмотров: 515; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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