- •Лабораторная работа №7
- •7 Типы запросов данных в sql
- •7.1 Дополнительный материал
- •7.1.1 Команды языка запросов sql
- •7.1.2 Создание таблицы базы данных
- •7.1.3 Дополнение записей в таблицы базы
- •Insert into Poshk_k nomp, famp, gord, stat
- •Values (“п6”, “быков”, “москва”, 10)
- •7.1.4 Формирование запросов из тбд командным способом
- •Команда delete (sql-оператор)
- •7.2 Оператор select, формируемый интерактивным способом
- •Файлы запросов на языке sql и результаты их выполнения. Запрос 1: запрос по точному совпадению значения одного поля
- •Запрос 2: запрос по точному несовпадению значения одного поля
- •Запрос 3: запрос по неточному совпадению значения одного поля
- •Into cursor Nomrd
- •Into cursor difficult
- •Многотабличные запросы
- •Сложные запросы.
- •Вложенные запросы.
- •7.6 Арифметические операции в опции where
Сложные запросы.
max.prg:
Переименование полей в запросе.
SELECT COUNT(*), SUM(Poski.kolw), AVG(Poski.kolw), MAX(Poski.kolw),;
MIN(Poski.kolw), MAX(Poski.data), MIN(Poski.data);
FROM data!poski;
INTO CURSOR difficult
browse;
title "Сложный запрос";
FIELDS Cnt : H = "Всего записей",;
Sum_kolw : H = "Сумма всего",;
Avg_kolw : H = "Среднее кол-во",;
Max_kolw : H = "Макс. кол-во",;
Min_kolw : H = "Мин. кол-во",;
Max_data : H = "Макс. дата",;
Min_data : H = "Мин. дата"
mnt.prg:
SELECT Poshk.nomp, Poshk.famp, Detl.nomd, Detl.naim, Poski.nomr, Poski.kolw,;
Poski.data;
FROM ;
data1!poshk ;
INNER JOIN data1!poski ;
ON Poshk.nomp = Poski.nomp ;
INNER JOIN data1!detl ;
ON Poski.nomd = Detl.nomd;
WHERE Detl.nomd <= ( "Д3" );
AND Poski.data BETWEEN CTOD("09/12/01") AND CTOD("09/20/01");
ORDER BY Poshk.nomp, Detl.nomd, Poski.nomr;
INTO TABLE mnt_pr.dbf
USE mnt_pr
BROWSE
SELECT Mnt_pr.nomp, Mnt_pr.famp, Mnt_pr.nomd, Mnt_pr.naim, Mnt_pr.nomr,;
Proek.npro, Mnt_pr.kolw, Mnt_pr.data;
FROM ;
data1!mnt_pr ;
INNER JOIN data1!proek ;
ON Mnt_pr.nomr = Proek.nomr;
ORDER BY Mnt_pr.nomp, Mnt_pr.nomd, Mnt_pr.nomr;
INTO CURSOR Ask
BROWSE
nomr_nomd.prg:
Оформление заголовков в шапке запроса
SELECT Poski.nomr, Poski.nomd;
FROM data1!poski;
ORDER BY Poski.nomr, Poski.nomd;
INTO CURSOR Nomrd
BROWSE;
title "Ctrl+N - вставка Ctrl+W - Выход Ctrl+T - удаление";
fields Nomr: H = "Номер разработчика": 27,;
Nomd: H = "Номер детали": 20
zap_k_vosm1.prg:
SELECT *;
FROM vozm;
WHERE vozm.nomp = "П5";
ORDER BY vozm.nomd
zap_k_vosm2.prg:
SELECT *;
FROM vozm;
WHERE vozm.nomd = "Д6";
ORDER BY vozm.nomp
Вложенные запросы.
vlog_zapr1.prg:
Выдать famp поставщиков, осуществившего наибольшее (наименьшее);
количество участий в поставках.
CLEAR
SELECT poshk.famp, poshk.nomp, sum(poski.kolw), COUNT(*) as Р1;
FROM data1!poshk INNER JOIN data1!poski;
ON poshk.nomp = poski.nomp;
GROUP BY poshk.nomp,poshk.famp;
INTO CURSOR Z11
BROWSE
WAIT
SELECT MAX (Р1) AS MP;
FROM Z11;
INTO CURSOR Z112
BROWSE
WAIT
SELECT Z11.famp, MP;
FROM Z11, Z112;
WHERE Р1 = MP;
INTO CURSOR Z113
BROWSE
WAIT
RETURN
7.3 SQL – оператор INSERT INTO
I NSERT INTO db1_name [(bname1[,bname2,…])]
имя таблицы для список полей таблицы
добавления записи
VALUES (eExpression1 [,eExpression2,…])
список заносимых значений в эти поля
Если список полей опущен, то значения должны быть указаны в таком же порядке, в каком они определены в строке таблицы.
USE poshk_k
INSERT INTO poshk_k(nomp, famp, gord, stat, first_name, last_name)
Values (‘П6’, ‘Быков’, ‘Москва’, 30, ‘Иван’, ‘Борисович’)
7.4 SQL – оператор UPDATE
UPDATE [DatabaseName1!]TableName 1
SET Column_Name 1 = eExspression1[,ColumnName2 = eExpression 2…]
новое имя
W HERE FilterCondition 1 [AND|OR FilterCondition 2…]
фильтр условия
Эта команда обновляет записи только в одной таблице.
Когда необходимо изменить только одно определённое значение, необходимо использовать опцию WHERE.
UPDATE data1!poshk_k SET FirstName = ‘Василий’;
WHERE FirstName = ‘Иван’ AND LastName = ‘Иваницкий’.
Заменить имя Иван на Василий.
7.5 SQL – оператор DELETE
Внимание! Будьте осторожны! Запрос Delete удаляет целые строки!
DELETE FROM [DatabaseName1!] TableName
[WHERE FilterCondition1 [AND|OR FilterCondition2…]]
Эта команда помечает записи для удаления.
Запрос DELETE полностью удаляет строку из таблицы.
Если надо удалить одно единственное поле, то нужно использовать запрос UPDATE и установить для этого поля значение, которое будет являться аналогом NULL (в структуре таблицы).
Запрос DELETE надо обязательно ограничивать условием WHERE, иначе можно потерять всё содержимое таблицы! После удаления строка не восстанавливается!
USE poshk_k
DELETE FROM data1!poshk_k;
WHERE nomp = ‘П6’ AND famp = ‘Иван’ AND gord = ‘КИЕВ’