- •1.1. Технические параметры баз данных
- •1.2. Организация субд
- •1.6. Сетевая и иерархическая модели данных
- •1.7. Case - методы проектирования баз данных
- •1.8. Понятия “сущность” и “взаимосвязь”
- •4. Складывание.
- •5.3. Индексированные файлы
- •5.4. Операции с поиском по неключевым полям
- •6.2. Типы данных в sql
- •Int Число без десятичной точки. Эквивалентно decimal, но без
- •6.3. Обозначения в командах sql
- •6.... Оператор in
- •6.... Оператор between
- •6.... Оператор like
- •6.... Оператор is null
- •7.5... Скалярное выражение на основе выбранных полей
- •7.6... Упорядочение вывода полей
- •7.7.. Объединения нескольких таблиц в запросе
- •7.8.. Создание обьединения
- •7.9..Объединение таблиц через справочную целостность
- •7.10.. Объединения таблиц по равенству значений
- •7.11.. Объединение более двух таблиц
- •7.12. Объединение таблицы с собой
- •8.2. Значения, которые могут выдавать подзапросы
- •8.3. Предикаты с подзапросами являются необратимыми
- •8.4. Использование агрегатных функций в подзапросах
- •8.5. Использование подзапросов которые выдают
- •8.8. Подзапросы в предложении having
- •Insert into Londonstaff
- •Insert into Daytotals (date, total)
- •Insert для этой таблицы. Null - это наиболее широко используемое
- •1009, И Hoffman и Clemens будут также автоматически изменены.
- •Insert Пользователь с этой привилегией может выполнять
- •Insauth Имеет ли пользователь привилегию insert
- •Values ( :id_num, :salesperson, :loc, :comm)
- •Values (:id_num, :salesperson, :loc, :comm);
- •Into :id_num, :salesperson, :loc, :comm
- •Into :salesnum
- •1. Команда выполнилась без ошибки, но не произвела никакого
- •Into :id_num, :salesperson, :loc, :comm;
- •Indicator.
- •Indicator, связывая ее с каждой переменной главного языка, специальным способом, эмулирующим поведение null значений sql.
- •Values (:Id_num, :salesperson, :loc:i_a, :comm:i_b);
- •Indicator. Переменные indicator следуют за другим именами переменных в команде sql, без каких бы то ни было посторонних символов
Values ( :id_num, :salesperson, :loc, :comm)
Текущие значения этих переменных будут помещены в таблицу. Как вы
можете видеть, переменная comm имеет то же самое имя, что и столбец, в
который это значение вкладывается.
Обратите внимание, что точка с запятой в конце команды отсутствует. Это
потому, что соответствующее завершение для вложенной команды SQL за-
висит от языка, для которого делается вложение.
Для Паскаля и PL/1, это будет точка с запятой; для КОБОЛА, слово
END-EXEC ; и для ФОРТРАНА не будет никакого завершения.
В других языках это зависит от реализации, и поэтому мы договоримся,
что будем использовать точку с запятой всегда, чтобы не противоречить интерактивному SQL и Паскалю. Паскаль завершает вложенный SQL и собственные команды одинаково - точкой с запятой.
Способ сделать команду полностью такой, как описана выше, состоит в
том, чтобы включать ее в цикл и повторять ее, с различными значениями переменных, как показано в следующем примере:
while not end-ot-file (input) do
begin
readln (id_num, salesperson, loc, comm);
EXEC SOL INSERT INTO Salespeople
Values (:id_num, :salesperson, :loc, :comm);
end;
Фрагмент программы на ПАСКАЛЕ, определяет цикл, который будет
считывать значения из файла, сохранять их в четырех проименованных
переменных, сохранять значения этих переменных в таблице Продавцов,
и затем считывать следующие четыре значения, повторяя этот процесс
до тех пор, пока весь входной файл не прочитается. Считается, что каждый набор значений завершается возвратом каретки ( для незнакомых с Паскалем, функция readln считывает вводимую информацию и переходит на следующую строку источника этой информации). Это дает вам простой способ передать данные из текстового файла в реляционную структуру.
Конечно, вы можете сначала обработать данные любыми возможными
способами на вашем главном языке, например для исключения всех комиссионных ниже значения .12
while not end-ot-file (input) do
begin
readln (id_num, salesperson, loc, comm);
if comm > = .12 then
EXEC SQL INSERT INTO Salespeople
VALUES (:id_num, :salesperson, :loc, :comm);
end;
Только строки, которые встретят условие comm >= .12 будут вставлены в
вывод. Это показывает, что можно использовать и циклы, и условия как
нормальные для главного языка.
ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ
Все переменные, на которые имеется ссылка в предложениях SQL, дол-
жны сначала быть обьявлены в SQL DECLARE SECTION ( РАЗДЕЛе ОБЪЯВЛЕНИЙ ), использующем обычный синтаксис главного языка. Вы можете иметь любое число таких разделов в программе, и они могут размещаться где-нибудь в коде перед используемой переменной, подчиненной ограничениям, определенным в соответствии с главным языком.
Раздел объявлений должен начинаться и кончаться командами BEGIN DECLARE SECTION ( Начало Раздела Объявлений ) и END DECLARE SECTION ( Конец Раздела Объявлений ), которым предшествует, как обычно EXEC SQL (Выполнить).
Чтобы обьявить переменные, используемые в предыдущем примере, вы
можете ввести следующее:
EXEC SQL BEGIN DECLARE SECTION;
Var
id-num: integer;
Salesperson: packed array (1 . .10) ot char;
loc: packed array (1. .10) ot char;
comm: real;
EXEC SQL END DECLARE SECTION;
Для незнакомых с ПАСКАЛем, Var - это заголовок который предшествует
ряду обьявляемых переменных, и упакованным ( или распакованным ) массивам.
Использование точки с запятой после каждой переменной указывает на то
что это Паскаль, а не SQL.
ИЗВЛЕЧЕНИЕ ЗНАЧЕНИЙ ПЕРЕМЕННЫХ
Кроме помещения значений переменных в таблицы при помощи команд
SQL, вы можете использовать SQL, чтобы получать значения для этих переменных. Один из способов делать это - с помощью разновидности команды SELECT, которая содержит предложение INTO. Давайте вернемся
к нашему предыдущему примеру и переместим строку Peel из таблицы
Продавцов в наши переменные главного языка.
EXEC SQL SELECT snum, sname, city, comm