Написать вложенный SQL-запрос на примере любой базы данных

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

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

SELECT hst_name FROM hosts WHERE hst_pcode IN

(SELECT vis_hstcode FROM visits, sites

WHERE (sit_pcode = vis_sitcode) AND (sit_name LIKE 'www.dom2.ru'));

Рассмотрим этот запрос более пристально. Первый оператор SELECT нужен для выборки имен узлов. Чтобы выбрать требуемые нам имена, в запросе указана секция WHERE, в которой первичный ключ таблицы «Узлы» (hst_pcode) проверяется на принадлежность множеству (оператор IN). Судя по всему, множество для проверки на принадлежность должен вернуть второй оператор SELECT, находящийся в скобках. Рассмотрим его отдельно:

SELECT vis_hstcode FROM visits, sites WHERE (sit_pcode = vis_sitcode)

AND (sit_name LIKE 'www.dom2.ru')

Как видно из списка полей для выборки, запрос возвращает одно поле - vis_hstcode. Это коды узлов из таблицы «Посещения» (visits). Но после слова FROM указано две таблицы - visits и sites. Это нужно для удобства. Дело в том, что имена сайтов хранятся в таблице «Сайты» (sites), а в таблице «Посещения» - только идентификаторы сайтов. Таким образом, чтобы выбрать из таблицы «Посещения» данные только для сайта www.dom2.ru - мы связали две таблицы и указали в условии привычное для человека имя сайта. Подробнее о связывании речь пойдет чуть ниже. Таким образом, запрос, вернувший нам коды узлов будет являться вложенным запросом.

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

Добавление данных в таблицу:

В общем случае синтаксис оператора insert выглядит следующим образом:

insert [into] name_table [(name_field1,name_field2,....)] values (dat1, dat2,...)

где:

name_table - имя таблицы

name_field... - имя поля

dat... - данные

Использовать оператор insert можно и без перечисления полей, в этом случае данные будут вставляться в соответствии с позицией поля в таблице.

DELETE [LOW_PRIORITY | QUICK] FROM table_name

[WHERE where_definition]

[ORDER BY...]

[LIMIT rows]

или

DELETE [LOW_PRIORITY | QUICK] table_name[.*] [,table_name[.*]...]

FROM table-references

[WHERE where_definition]

oили

DELETE [LOW_PRIORITY | QUICK]

FROM table_name[.*], [table_name[.*]...]

USING table-references

[WHERE where_definition]

Оператор DELETE удаляет из таблицы table_name строки, удовлетворяющие заданным в where_definition условиям, и возвращает число удаленных записей.

БИЛЕТ № 13

Написать оператор выбора, осуществляющий выборку полей по нескольким критериям.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: