Delphi | Сети | ПК | Маршрутизаторы | Моделирование | Протоколы | Экспертные системы |
Художественные возможности материалов
Удаленный доступ | Доменные имена развития компьютерной графики
Аплеты | SQL | Надежность | Задачи | Информационные процессы | Очередь JAVA | Отказы изделия | Расчет надежности показателей | Инфсис

Основные понятия и способы применения SQL - в примерах и задачах

SQL язык запросов к реляционным базам данных Учебник

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

SQL позволяет использовать одни запросы внутри других за­просов, то есть вкладывать запросы друг в друга. Предположим, известна фамилия студента («Петров»), но неизвестно значение поля STUDENT ID для него. Чтобы извлечь данные обо всех оценках этого студента, можно записать следующий запрос:

SELECT *

FROM EXAM_MARKS WHERE STUDENT_ID =

(SELECT STUDENT_ID FROM STUDENT SURNAME =  'Петров');

Как работает запрос SQL со связанным подзапросом?

Выбирается строка из таблицы, имя которой указано во внешнем запросе.

Выполняется подзапрос и полученное значение применяется для анализа этой строки в условии предложения WHERE внешнего запроса.

По результату оценки этого условия принимается решение о включении или не включении строки в состав выходных данных.

• Процедура повторяется для следующей строки таблицы

внешнего запроса.

Следует обратить внимание, что приведенный выше запрос корректен только в том случае, если в результате выпол­нения указанного в скобках подзапроса возвращается единст венное значение. Если в результате выполнения подзапроса бу­дет возвращено несколько значений, то этот подзапрос будет ошибочным. В данном примере это произойдет, если в табли­це STUDENT будет несколько записей со значениями поля SURNAME = 'Петров'.

В некоторых случаях для гарантии получения единственно­го значения в результате выполнения подзапроса используется DISTINCT. Одним из видов функций, которые автоматически всегда выдают в результате единственное значение для любого количества строк, являются агрегирующие функции.

Оператор IN также широко применяется в подзапросах. Он задает список значений, с которыми сравниваются другие зна­чения для определения истинности задаваемого этим операто­ром предиката.

Данные обо всех оценках (таблица EXAM_MARKS) студентов из Воронежа можно выбрать с помощью следующего запроса:

SELECT *

FROM EXAM_MARKS WHERE STUDENT_ID IN

(SELECT STUDENT_ID FROM STUDENT WHERE CITY = 'Воронеж');

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

SELECT COONT(DISTINCT SUBJ_IDj , MARK

FROM EXAM_MARKS GROUP BY MARK HAVING MARK >


(SELECT AVG(MARK) FROM EXAM_MARKS WHERE STUDENT_ID = 301) ;

Maya 3D графика в кино и телевидении Воздействие испытаний ядерного оружия на здоровье населения Объектно-ориентированный язык программирования Java Объектно-ориентированное программирование Delphi Библиотека визуальных компонентов VCL и ее базовые классы Кроссплатформенное программирование для Linux Элементы управления Win32 Элементы управления Windows XP Файлы и устройства ввода/вывода Что такое экспертная система? Объектно-ориентированное программирование Инструментальные средства разработки экспертных систем Программирование на языке CLIPS Критерии и количественные характеристики надежности Расчет характеристик надежности невостанавливаемых резервированных изделий Расчет надежности системы с постоянным резервированием Интегрирование тригонометрических функций ;