русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ПОДЧИНЕННЫЕ ЗАПРОСЫ


Дата добавления: 2015-07-09; просмотров: 541; Нарушение авторских прав


Инструкция SELECT может быть вложена в другую инструкцию (SELECT, DELETE или UPDATE). Такой запрос называется подчиненным. Подчиненные запросы можно использовать в режиме SQL окна запроса, в ячейках “Условие отбора” и “Поле” конструктора запросов и в инструкциях SQL в программах на языке Access Basic. Ниже рассматривается лишь вариант подчиненного запроса в режиме SQL. В этом случае он представляется в виде инструкции SQL, заключенной в круглые скобки. Если инструкция SQL выдает единственное значение, то ее можно использовать в условных выражениях предложений WHERE и HAVING.

Пример

SELECT Группа, Студент

FROM Успеваемость

WHERE [Средний балл]>(SELECT Avg([Средний балл])

FROM Успеваемость);

Групповая функция Avg выдает единственное число – средний балл по всем студентам. Если средний балл студента в главном запросе превосходит это число, то данные о студенте включаются в результирующее множество.

Пример

SELECT У.Группа,У.Студент

FROM Успеваемость AS У

WHERE Группа=1 And У.[Средний балл]>=

ALL (SELECT Avg([Средний балл])

FROM Успеваемость

WHERE Группа=2 )

ORDER BY Студент;

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

[Средний балл]>=ALL(Подчиненный запрос)

В общем случае слева от знака сравнения стоит выражение, а знак сравнения может быть любым из списка (=,<>,<,>,<=,>=). Подчиненный запрос выдает множество значений. Значение выражения слева сравнивается с каждым из значений, возвращаемых подчиненным запросом. Результат сравнения принимает значение TRUE, если все сравнения со значениями подчиненного запроса истинны. В нашем случае в результирующее множество попадают студенты, средние баллы которых не меньше среднего балла любого студента второй группы.



Наряду с ALL находит применение предикат ANY (синоним SOME). В этом случае предикат принимает значение TRUE, когда результат сравнения хотя бы с одним из возвращаемых подчиненным запросом значений принимает значение TRUE.

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

В рассматриваемом примере выдается пустая таблица, так как в

  Экзаменаторы Таблица 3
Предмет Название предмета Преподаватель Дата
Информатика Математика Кибернетика 5.01.99 8.01.99 12.01.99

первой группе (табл. 1) нет студентов, средний балл которых был бы не ниже среднего балла любого из студентов второй группы, например Белкина. Если заменить предикат ALL на ANY (или SOME), то все 4 студента первой группы попадут в результирующую таблицу, так как

  Преподаватели   Таблица 4
Преподаватель ФИО Должность Степень Звание
Соловьев Щеглов Воробьев Ассистент Профессор Доцент   Д.т.н К.т.н   Профессор Доцент

все они учатся лучше Лисицына.

Пример

SELECT [Название предмета], Дата

FROM Экзаменаторы AS Э

WHERE Э.Преподаватель IN (SELECT Преподаватель

FROM Преподаватели

WHERE Должность=”Профессор”);

В этом примере применен предикат IN, сравнивающий выражение слева от него (поле “Преподаватель” из таблицы “Экзаменаторы”) со списком значений, выдаваемых подчиненным запросом. В результате главный запрос выдает название предмета и дату экзаменов, которые проводят профессора ( математика, 8.01.99 ).

В главном запросе введен псевдоним Э для таблицы “Экзаменаторы”. Для каждой таблицы и каждого запроса можно при желании определить альтернативное имя. Это имя можно использовать как псевдоним вместо полного имени таблицы при задании имен столбцов в списке выбора, в предложении WHERE или в подчиненных предложениях. Если имя таблицы или имя запроса совпадает с зарезервированным словом языка SQL (например ORDER), такое имя нужно заключить в квадратные скобки.

Пример

SELECT [Название предмета], Дата

FROM Экзаменаторы AS Э

WHERE NOT EXISTS

(SELECT * FROM Экзаменаторы

INNER JOIN Экзамены

ON Экзаменаторы.Предмет=Экзамены.Предмет

WHERE Оценка=2

AND Экзамены.Предмет=Э.Предмет);

Предикат EXISTS проверяет не значения отдельных полей, а наличие или отсутствие в подчиненном запросе записей, удовлетворяющих условиям отбора в предложениях WHERE и HAVING. Поскольку отдельные поля не возвращаются, в подчиненном запросе список полей представлен звездочкой. В данном примере запрос выдает список предметов, по которым нет двоек, и даты экзаменов (математика 8.01.99, кибернетика 12.01.99).

Внутренний запрос содержит ссылку на поле внешней таблицы (псевдоним Э). В таких случаях подчиненный запрос выполняется для каждой записи внешнего запроса.

UPDATE

Инструкция UPDATE позволяет производить изменения сразу во всех полях таблицы. Синтаксис:

UPDATE таблицы SET присваивания WHERE условие

Таблицы - отдельная таблица или объединение таблиц, как в предложении FROM.

Присваивания - последовательность присваиваний, разделенных запятыми. Каждое присваивание имеет вид “поле=выражение”.

В указанной таблице для всех записей, удовлетворяющих условию, производятся присваивания.

Пример

UPDATE Экзаменаторы SET [Дата]=[Дата]+1

WHERE [Название предмета]=”Информатика”

Даты всех экзаменов по информатике сдвигаются на один день вперед.

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

INSERT

Инструкция INSERT вставляет одну или несколько новых строк в таблицу или запрос. Вариант

INSERT INTO таблица SELECT …;

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

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

INSERT INTO Преподаватели

SELECT Преподаватель, ФИО, Должность, Степень, Звание

FROM [Новые преподаватели]

WHERE Дата<Now()-30;

Если требуется добавить только одну запись, можно использовать другой вариант инструкции INSERT.

INSERT INTO таблица VALUES(список_значений)

или

INSERT INTO таблица (список_полей) VALUES (список_значений)

Если список полей опущен, предложение VALUES должно содержать значения для каждого поля таблицы.

Пример

INSERT INTO Преподаватели (Преподаватель, ФИО,Должность)

VALUES (7, ”Журавлев”, ”Ассистент”);

DELETE

DELETE таблица.* FROM таблицы WHERE условие;

Инструкция DELETE позволяет удалять записи из таблиц, перечисленных в предложении FROM. Удаляются записи, удовлетворяющие условию WHERE.

Если в предложении FROM указана одна таблица, то ее можно обозначить звездочкой. Таблицу можно удалить с помощью инструкции

DROP таблица;

Удаление данных из отдельных полей можно осуществить с помощью инструкции UPDATE, в которой следует указать SET поле=Null.

Пример

DELETE * FROM Преподаватели WHERE Преподаватель=3;

Отменяются все экзамены преподавателя с шифром 3.



<== предыдущая лекция | следующая лекция ==>
 | CREATE TABLE


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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