- •1.1. Архитектура хост/терминал
- •1.2. Архитектура файл/серввр
- •2.1 Сетевая модель данных
- •2.2. Реляционная модель данных
- •4.2. Первичные ключи. Что выбрать в качестве первичных ключей для каждой из таблиц?
- •4.3. Нормализация данных
- •4.4. Типы данных
- •5.1. Предназначение IDEF1X
- •5.2. Сущности в IDEF1X и их атрибуты
- •5.3. Связи между сущностями
- •5.4. Идентификация сущностей. Представление о ключах
- •5.5.Классификация сущностей в IDEF1X. Зависимые и независимые сущности
- •5.7. Преимущества IDEF1X
- •6.2. Оператор SELECT
- •6.3. Работа с несколькими таблицами
- •6.5. Объединение множества запросов в один
- •6.6.Команды модификации данных
- •6.7. Модификация структуры данных
- •ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ СИСТЕМ УПРАВЛЕНИЯ
Вывести название группы, если в ней есть товар, цена которого > 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 БАНКИ-
В кавычках, после «юр. », необходимо поставить пробел, т.к. столбцы должны быть сравнимыми, т.е. должно быть выделено одинаковое количе ство символов.
Выходные данные:
Физ. Петров Физ. Кузнецов Физ. Иванов Физ. Золин
Выходные данные:
Юр. |
Альфабанк |
Юр. |
Западуралбанк |
Физ. |
Золин |
Физ. |
Иванов |
Физ. |
Киров |
Физ. |
Кузнецов |
Юр. |
Менатеп |
Юр. |
МММ |
Физ. |
Павлов |
Физ. |
Петров |
Физ. |
Петренко |
Юр. |
Сбербанк |
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, которая добавляет строки в таблицу. Фак тически случай вставки в таблицу результатов запроса, рассмотренный