Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
536.pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
2.31 Mб
Скачать

Вывести название группы, если в ней есть товар, цена которого > 20:

SELECT ГРУППЫ.НАЗВАНИЕ

 

,

Связывает таблицу

FROM ГРУППЫ

 

/

Группы из внешнего за­

WHERE EXISTS

 

/

проса и Перемещение

(SELECT ЦЕНА FROM ПЕРЕМЕЩЕНИЕ /

 

из внутреннего.

WHERE ЦЕНА> 20

/

 

 

AND ГРУППЫ.IDN = ПЕРЕМЕЩЕНИЕ.ИЖ_ ГРУППЫ)

Проверяется наличие товаров в данной группе товаров дороже 20.

Оператор EXISTS отметил, что подзапрос генерирует выходные данные и принимает значение «истина» для групп Газ. вода и Сигареты.

Выходные данные: НАЗВАНИЕ Газ. вода Сигареты

Приведем еще один вариант для примера из предыдущего раздела:

Получить все банки, которые не используются клиентами:

SELECT * FROM Банки

WHERE NOT EXISTS (SELECT * FROM Клиент

WHERE RrmeHT.IDN_6aHKa = Банки.ПЖ)

\Проверяется наличие клиентов, у которых ПЖ_банка соответствует идентификатору банка из внешнего запроса.______________________

6.5.Объединение множества запросов в один

UNION объединяет выходные данные двух и более SQL-запросов в единое множество строк и столбцов, для того чтобы получить сведения обо всех банках и городах, имя которых начинается с М.

 

Выбирается банк, имя которо­

SELECT РЕКВИЗИТЫ FROM БАНКИ

го начинается с М.

 

WHERE РЕКВИЗИТЫ LIKE ‘М%’

 

UNION

/ Выбирается город, имя кото­

SELECT НАЗВАНИЕ FROM ГОРОДА

рого начинается с М.

WHERE НАЗВАНИЕ LIKE СМ %\

 

Выходные данные:

МММ

Менатеп

Минск

Минск

Столбцы, выбранные с помощью двух команд, представлены в вы­ ходных данных так, как если бы они выбирались с помощью одного за­ проса. Заголовки столбцов отсутствуют, т.к. они выбирались из разных таблиц.

6.5.1. Когда можно выполнить объединение запросов? Для того что бы запросы можно было объединить (выполнить команду UNION), их столбцы, входящие в состав выходных данных, должны быть совмести­ мыми по объединению (union compatible). Это значит, что в каждом из за­ просов может быть указано одинаковое количество столбцов, причем пер­ вые столбцы каждого из запросов являются сравнимыми, вторые столбцы также сравнимы и т.д. по всем столбцам, включаемым в состав выходных данных.

«Столбцы сравнимые», значит:

числовые поля - полностью совпадает тип и размер, символьные поля - точно совпадающее количество (это значит, что

одинаковое количество выделено, но не обязательно заполнено).

Есть таблицы клиентов и банков, сделать таблицу объединения с указанием типа: банк - юридическое (юр.) лицо, клиент - физическое (физ.).

обращениектаблицеКлиент

SELECT ‘ физ.’, ИМЯ FROM

UNION

____

объединениерезультатовзапроса

..

 

 

обращениектаблицеБанки

SELECT ‘ юр.’, РЕКВИЗИТЫ FROM БАНКИ-

В кавычках, после «юр. », необходимо поставить пробел, т.к. столбцы должны быть сравнимыми, т.е. должно быть выделено одинаковое количе­ ство символов.

Выходные данные:

Физ. Петров Физ. Кузнецов Физ. Иванов Физ. Золин

В кавычках после «юр.» необходимо поставить пробел, т.к. столбцы должны быть сравнимыми, т.е. должно быть выделено одинаковое количе­ ство символов.
Упорядочиваетвторойстолбецпоалфавиту
\ Обращениектаблице Банки
Слияниерезультатовзапроса
SELECT ‘физ.\ ИМЯ FROM КЛИЕНТ ' UNION-----------------------------------------
SELECT ‘юр.’, РЕКВИЗИТЫ ИМЯ FROM БА Ж И ORDER BY 2
Физ. Киров Физ. Павлов Физ. Петренко Юр. МММ
Юр. Менатеп Юр. Западуралбанк Юр. Альфабанк Юр. Сбербанк
6.5.2. Использование UNION с ORDER BY. В предыдущем разделе по­ рядку представления выходных данных значения не придавалось. Снача­ ла представлялись выходные данные для первого запроса, затем - для вто­ рого. Такой способ расположения выходных данных выбран для более простого восприятия результатов выполнения команды.
Предложение ORDER BY применяется для упорядочения выходных данных объединения, так же как это делалось для отдельных запросов. Для этого необходимо после запроса указать:
ORDER BY А,
где А - целое число, задающее номер столбца, по которому будет произ­ водиться упорядочивание. Т.к. столбцы выходных данных, полученных в результате выполнения объединения, без имени, на столбец можно со­ слаться только по номеру, определяющему его место расположения сре­ ди столбцов выходных данных.
Есть таблицы клиентов и банков, сделать таблицу объединения с указанием типа: банк - юридическое (юр.) лицо, клиент - физическое (физ.). Упорядочить второй столбец по алфавиту:
ОбращениектаблицеКлиент

Выходные данные:

Юр.

Альфабанк

Юр.

Западуралбанк

Физ.

Золин

Физ.

Иванов

Физ.

Киров

Физ.

Кузнецов

Юр.

Менатеп

Юр.

МММ

Физ.

Павлов

Физ.

Петров

Физ.

Петренко

Юр.

Сбербанк

6.6.Команды модификации данных

Значения могут быть помещены и удалены из полей тремя командами подмножества SQL - языка DML (Язык Манипулирования Данными):

INSERT (ВСТАВИТЬ),

UPDATE (МОДИФИЦИРОВАТЬ), DELETE (УДАЛИТЬ).

6.6.1. Ввод значений (INSERT). Все строки в SQL вводятся с использо­ ванием команды модификации INSERT. В самой простой форме INSERT использует следующий синтаксис:

INSERT INTO <table name>

VALUES (<value>, <value> .);

Так, например, чтобы ввести строку в таблицу Клиент, мы можем ис­ пользовать следующий запрос (напомним последовательность полей для этой таблицы ГОЫ;ГОЫ_города;название;реквизиты;ГО^банка):

INSERT INTO Клиент

VALUES (1001,23, ‘Рога&Копыта’, ‘Приморский бульвар 9М2);

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

INSERT INTO Клиент

VALUES (1001, 23, ‘Рога&Копыта’ NULL, .12);

Так как NULL - это специальный маркер, а не просто символьное значение, он не включается в кавычки.

Именование названий столбцов для вставки. Мы можем также ука­ зывать столбцы, куда мы хотим вставить значение имени. Это позволяет нам вставлять имена в любом порядке. Предположим, что мы хотим вве­ сти в таблицу Клиент данные только об имени клиента его идентификато­ ре и идентификаторе города:

INSERT INTO Клиент (название; IDN;IDN_ropofla)

VALUES (‘Рога&Копыта’, 1001,23);

Поля, не указанные в запросе, автоматически установлены в значение «по умолчанию». Если при создании таблицы не указано иное, по умолча­ нию устанавливается NULL,

Вставка результатов запроса. Вы можете также использовать ко­ манду INSERT, чтобы получать значения из одной таблицы и помещать их в другую. Чтобы сделать это, вы просто заменяете предложение VALUES (из предыдущего примера) на соответствующий запрос:

INSERT INTO Londonstaff

SELECT *

FROM Salespeople

WHERE city = ’London';

Общее правило то, что вставляемые столбцы таблицы должны совпа­ дать со столбцами, выводимыми подзапросом.

6.6.2. Удаление строк из таблиц (DELETE). Мы можем удалять строки из таблицы командой модификации - DELETE, которая может удалять только целые строки, а не отдельные значения полей. Чтобы удалить все содержание таблицы Клиент, нам нужно ввести:

DELETE FROM Клиент;

Чаще нам нужно удалить только некоторые определенные строки из таблицы. Чтобы определить, какие строки будут удалены, мы используем WHERE, так же как это делали для запросов SELECT. Например, чтобы удалить из таблицы Клиент с идентификатором 666, мы вводим:

DELETE FROM Клиент

WHERE IDN = 1003;

Можно также использовать DELETE с предикатом, который бы вы­ бирал группу строк, как показано в этом примере:

DELETE FROM Клиент

WHERE ЮЫ^города = 33;

6.6.3. Изменение значений поля (UPDATE). UPDATE изменяет значе­ ния строк в таблице. Например, можно повысить IDN всех клиентов на 5:

UPDATE КЛИЕНТ

SET IDN= IDN +5

Выходные данные:

 

 

 

IDN

IDN ГОРОДА

ИМЯ

РЕКВИЗИТЫ IDN БАНКА

204

106

Петров

 

311

205

109

Кузнецов

 

314

206

107

Иванов

 

317

208

109

Золин

311

210

110

Киров

 

323

212

108

Павлов

 

317

215

ПО

Петренко

 

318

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

Следующий пример позволяет поменять идентификатор банка для всех клиентов, у которых он равен 23:

UPDATE КЛИЕНТ

SET ГОЫ_банка = IDN_6aHKa 54

WHERE Г осбанка = 23

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

UPDATE КЛИЕНТ

SET Название = ‘Московские баранки’, Реквизиты = ‘Политехнический проезд 12’

WHERE IDN = 1001

6.6.4. Использование подзапросов для команд модификации данных.

Использование подзапросов в INSERT. Наиболее часто подзапрос ис­ пользуется с командой INSERT, которая добавляет строки в таблицу. Фак­ тически случай вставки в таблицу результатов запроса, рассмотренный

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]