Текст задания:
- Создайте Базу Данных для магазина. Структура её должна обеспечить получение информации в следующих разрезах:
– список товаров с указанием цены;
– список категорий товаров с количеством видов товаров в заданной категории. Имеется в виду не запасы на складе, а количество видов товаров в категории. Например, швейные машины – 3 шт. (это швейные машины Zinger M1, Zinger M2, Чайка).
2. Напишите запрос на получение информации вида швейные машины – 3 шт., микроволновые печи – 7 шт.
Решение:
- Запускаем APEX (найти инструкцию можно здесь http://www.vr-online.ru/blog/rabota-s-lokalnoj-bazoj-dannyh-oracle-xe-6722) .
Для создания базы данных (таблиц) необходимо зайти в раздел SQL Workshop, затем в подраздел Object Browser, нажать Create и выбрать объект Table (подробное описание см. здесь http://www.vr-online.ru/blog/rabota-s-lokalnoj-bazoj-dannyh-oracle-xe-6722)
Создадим таблицы:
Cat (таблица будет содержать id и категорию товара)
Tovar (содержит id, товар, цену товара)
Svod (будет содержать id, id категории, id товара). Эта таблица по сути будет объединять в себе таблицы CAT и TOVAR.
Связь между таблицами показана на схеме ниже:
Затем вставим строки в таблицы. Это можно сделать следующими способами:
Способ 1. Нажать вкладку Data, выбрать InsertRow, заполнить все поля, кроме поля «id».
После заполнения нажать Create.
Таким же образом добавить остальные строки.
Примечание:
- для удаления строки необходимо, находясь во вкладке Data, нажать в таблице в удаляемой строке на значок в столбце EDIT.
Способ 2. Зайти в раздел SQL Workshop, затем в подраздел SQL Commands, указать максимальное значение строки (Rows-100000), записать команду следующего вида:
INSERT INTO имя таблиц (имя столбцов через запятую)
VALUES (значения через запятую);
По окончанию нажимать Run.
Примечания:
- знак «;» ставится в конце строки, если добавляются несколько строк сразу;
- в кавычках вставляются строковые символы, числовые символы вставляются без кавычек.
Добавим строки в таблицы:
[cc lang=”plsql” tab_size=”2″ line_numbers=”false” no_links=”false”]
INSERT INTO CAT (CATEGORIA) VALUES (‘Швейные машины’);
INSERT INTO CAT (CATEGORIA) VALUES (‘Микроволновые печи’);
INSERT INTO TOVAR (TOVAR,CENA) VALUES (‘SM KL56445B’, 16000);
INSERT INTO TOVAR (TOVAR,CENA) VALUES (‘SM BJMKLLY’, 12345);
INSERT INTO TOVAR (TOVAR,CENA) VALUES (‘SM BJMKLLY’, 17000);
INSERT INTO TOVAR (TOVAR,CENA) VALUES (‘SM SDRVGJ’, 5680);
INSERT INTO TOVAR (TOVAR,CENA) VALUES (‘SM JKMJ’, 13000);
INSERT INTO TOVAR (TOVAR,CENA) VALUES (‘SM DFG345F’, 13500);
INSERT INTO TOVAR (TOVAR,CENA) VALUES (‘SM 4562379G’, 15000);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘SM DJ’, 15050);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘SM DGHKL’, 11000);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘SM TYUUIOOP’, 12500);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘SM HHHHHHHH’, 6000);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘SM KKNBBFFRT’, 6940);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘SM HOZBIT’, 5976);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘SM LASTOCHKA’, 3900);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘SM GHJKLLB’, 4500);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘ZANUSHL15’, 275610);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘ZANUSSI’, 32620);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘ZANUSSIJKL’, 30200);
INSERT INTO SPISOK (TOVAR,CENA) VALUES (‘FATON’, 35210);
INSERT INTO SPISOK (TOVAR, CENA) VALUES(‘Zil’, 25000);
INSERT INTO SPISOK (TOVAR, CENA) VALUES(‘Atlant’, 15750);
INSERT INTO SPISOK (TOVAR, CENA) VALUES(‘Samsung2’, 17500);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 14);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 16);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 17);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 20);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 21);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 22);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 24);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 27);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 26);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 25);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 23);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 19);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 18);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (2, 15);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 8);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 3);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 2);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 13);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 11);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 6);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 5);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 1);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 7);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 12);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 10);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 9);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 8);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 7);
INSERT INTO SVOD (CAT_ID, TOVAR_ID) VALUES (1, 4);
[/cc]
Примечания:
- Проверить, все ли строки добавлены в таблицу, можно, перейдя в раздел Data в Object Browser.
- Для редактирования/обновления строки используется следующая команда: UPDATE имя таблицы SET имя столбца = новое значение, имя столбца = новое значение WHERE ID = условие отбора, т.е. значение ID строки, которую необходимо редактировать/обновить
Пример:
[cc lang=”plsql” tab_size=”2″ line_numbers=”false” no_links=”false”]
UPDATE SPISOK SET TOVAR=’AZIMUT’, CENA=5320 WHERE ID=6
[/cc]
- Для удаления строки используется команда: DELETE FROM имя таблицы WHERE ID = условие отбора, т.е. значение ID строки, которую необходимо удалить
Пример:
[cc lang=”plsql” tab_size=”2″ line_numbers=”false” no_links=”false”]
DELETE FROM SVOD WHERE ID=30
[/cc]
База данных создана.
2. Напишем запросы (в подразделе SQL Commands раздела SQL Workshop):
[cc lang=”plsql” tab_size=”2″ line_numbers=”false” no_links=”false” escaped=”true”]
SELECT CATEGORIA, TOVAR, CENA //выбрать данные из столбцов CATEGORIA, TOVAR, CENA
FROM CAT //из
JOIN SVOD ON CAT.ID = SVOD.CAT_ID //соединить таблицу CAT с таблицей SVOD по условию: ID таблицы CAT и CAT_ID таблицы SVOD
JOIN TOVAR ON TOVAR.ID = SVOD.TOVAR_ID //соединить таблицу TOVAR с таблицей SVOD по условию: ID таблицы TOVAR и TOVAR_ID таблицы SVOD
WHERE CATEGORIA = ‘Швейные машины ’ //условие отбора
AND ROWNUM <=3 //псевдостолбец для ограничения количества выводимых данных в запросе
UNION //объединение результатов запросов в единую таблицу
SELECT CATEGORIA, TOVAR, CENA //выбрать данные из столбцов CATEGORIA, TOVAR, CENA
FROM CAT //из
JOIN SVOD ON CAT.ID = SVOD.CAT_ID //соединить таблицу CAT с таблицей SVOD по условию: ID таблицы CAT и CAT_ID таблицы SVOD
JOIN TOVAR ON TOVAR.ID = SVOD.TOVAR_ID //соединить таблицу TOVAR с таблицей SVOD по условию: ID таблицы TOVAR и TOVAR_ID таблицы SVOD
WHERE CATEGORIA = ‘Микроволновые печи’ //условие отбора
AND ROWNUM <=7 //псевдостолбец для ограничения количества выводимых данных в запросе
[/cc]
Результат запросов выводится в подразделе Results: