4 курс (заочка) / Лабораторные работы / Лабораторная работа 2
.docxФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ
ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ БЮДЖЕТНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ
Кафедра «Интеллектуальные системы в управлении и автоматизации»
Лабораторная работа №2
По дисциплине «Технологии баз данных»
Выполнила: Иванова Иоанна, студентка группы БСТ17xx
Цель работы
Освоить создание таблиц и формирование запросов в СУБД Oracle.
Задачи
Построить таблицы, заполнить их информацией, сформировать по 2 запроса следующих типов:
Выборка всех данных
Запрос с условием
Запрос с использованием синонимов
С использованием подзапроса
С использованием сортировки
С использованием группировки
С использованием конкатенации
Выборка неповторяющихся записей
С использованием агрегатных функций
С использованием NOT
С использованием WHERE
Запросы сохранить в виде представлений.
Ход выполнения
Создание соответствующих таблиц.
Создадим таблицы CUSTOMER, PRODUCT, DEAL.
CREATE TABLE CUSTOMER(
customer_id NUMBER NOT NULL,
surname VARCHAR2(20) NOT NULL,
name VARCHAR2(20) NOT NULL,
patronym VARCHAR2(30),
phone_num VARCHAR2(16) NOT NULL,
city VARCHAR2(25) NOT NULL,
firm VARCHAR2(30),
CONSTRAINT customer_pk PRIMARY KEY (customer_id)
);
Рисунок 1. - Структура таблицы CUSTOMER.
CREATE TABLE PRODUCT (
product_id NUMBER NOT NULL,
manufacturer VARCHAR2(20) NOT NULL,
product_name VARCHAR2(30) NOT NULL,
price NUMBER NOT NULL,
type VARCHAR2(30),
CONSTRAINT product_pk PRIMARY KEY (product_id)
);
Рисунок 2. Структура таблицы PRODUCT.
CREATE TABLE DEAL (
deal_id NUMBER NOT NULL,
product_id NUMBER NOT NULL,
customer_id NUMBER NOT NULL,
quantity NUMBER NOT NULL,
ddate DATE NOT NULL ENABLE,
CONSTRAINT deal_pk PRIMARY KEY (deal_id )
);
ALTER TABLE DEAL ADD CONSTRAINT customer_fk FOREIGN KEY (customer_id)
REFERENCES CUSTOMER (customer_id);
ALTER TABLE DEAL ADD CONSTRAINT product_fk FOREIGN KEY (product_id)
REFERENCES PRODUCT (product_id);
Рисунок 3. Структура таблицы DEAL.
Заполнение таблиц информацией
Создадим следующие последовательности:
Create Sequence CUSTOMER_SEQ Increment by 1 start with 1;
Create Sequence PRODUCT_SEQ Increment by 1 start with 10000;
Create Sequence DEAL_SEQ Increment by 1 start with 500;
Рисунок 4. - Таблица CUSTOMER.
Рисунок 5. - Таблица PRODUCT.
Рисунок 6. - Таблица DEAL.
Построение запросов
Выборка всех данных
CREATE VIEW CUST_VIEW (customer_id, surname, name, patronym, phone_num, city, firm) AS
SELECT * FROM CUSTOMER;
Рисунок 7. Представление CUST_VIEW.
CREATE VIEW PROD_VIEW (product_id, manufacturer, product_name, price, type) AS
SELECT * FROM PRODUCT;
Рисунок 8. Представление PROD_VIEW.
Запрос с условием
CREATE VIEW MOSCUSTOMERS (customer_id, surname, name, patronym) AS
SELECT customer_id, surname, name, patronym
FROM CUSTOMER
WHERE CITY = 'MOSCOW';
Рисунок 10. Представление MOSCUSTOMERS.
CREATE VIEW 20K_TO_40K (product_id, manufacturer, product_name, type) AS
SELECT product_id, manufacturer, product_name, type FROM PRODUCT
WHERE PRICE BETWEEN 20000 AND 40000;
Рисунок 11. Представление 20K_TO_40K.
Запрос с использованием синонимов
CREATE SYNONYM C FOR CUSTOMER;
CREATE VIEW CUST_SYN (surname, phone_num, firm) AS
SELECT surname, phone_num, firm FROM C;
Рисунок 12. Представление CUST_SYN.
CREATE SYNONYM P FOR PRODUCT;
CREATE VIEW PROD_SYN (product_name, price, type) AS
SELECT product_name, price, type FROM P;
Рисунок 13. Представление PROD_SYN.
С использованием подзапроса
CREATE VIEW SUBQUERY (manufacturer, product_name, type) AS
SELECT manufacturer, product_name, type FROM PRODUCT
WHERE product_id IN (SELECT product_id FROM DEAL);
CREATE VIEW SUBQUERY_VIEW (product_name) AS
SELECT product_name FROM SUBQUERY;
CREATE VIEW SUBQUERY_VIEW2 (type) AS
SELECT type FROM SUBQUERY;
Рисунок 14. Представление SUBQUERY.
Рисунок 15. SUBQUERY_VIEW. Рисунок 16. SUBQUERY_VIEW2.
С использованием сортировки
CREATE VIEW MAN_SORT (manufacturer, product_name, price) AS
SELECT manufacturer, product_name, price FROM PRODUCT
ORDER BY MANUFACTURER;
Рисунок 17. Представление MAN_SORT.
CREATE VIEW PRICE_SORT (manufacturer, product_name, price) AS
SELECT manufacturer, product_name, price FROM PRODUCT
ORDER BY PRICE;
Рисунок 18. Представление PRICE_SORT.
С использованием группировки
CREATE VIEW MAN_TOTAL (manufacturer, total) AS
SELECT manufacturer, SUM(price) AS total FROM PRODUCT
GROUP BY manufacturer;
Рисунок 19. Представление MAN_TOTAL.
CREATE VIEW D_QUANTITY (product_id, total_q) AS
SELECT product_id, SUM(quantity) AS total_q FROM DEAL
GROUP BY product_id;
Рисунок 20. Представление D_QUANTITY
С использованием конкатенации
CREATE VIEW DEAL_BY_SURNAME (deal_id, surname, product_id) AS
SELECT DEAL.deal_id, CUSTOMER.surname, DEAL.product_id
FROM DEAL INNER JOIN CUSTOMER
ON DEAL.customer_id = CUSTOMER.customer_id;
Рисунок 21. Представление DEAL_BY_SURNAME.
CREATE VIEW DEAL_BY_PRODUCT (deal_id, product_name, product_id) AS
SELECT DEAL.deal_id, PRODUCT.product_name, DEAL.product_id
FROM DEAL INNER JOIN PRODUCT
ON DEAL.product_id = PRODUCT.product_id;
Рисунок 22. Представление DEAL_BY_PRODUCT.
Выборка неповторяющихся записей
CREATE VIEW NONREPEATABLE (manufacturer) AS
SELECT DISTINCT manufacturer FROM PRODUCT;
Рисунок 23. Представление NONREPEATABLE.
CREATE VIEW NONREPEATABLE2 (city) AS
SELECT DISTINCT city FROM CUSTOMER;
Рисунок 24. Представление NONREPEATABLE2.
С использованием агрегатных функций
CREATE VIEW MAX_PRICE (manufacturer, max_price) AS
SELECT manufacturer, MAX(price) AS max _ price FROM PRODUCT
GROUP BY manufacturer;
Рисунок 25. Представление MAX_PRICE.
CREATE VIEW MAX_QUANTITY (product_id, quantity) AS
SELECT product_id, MAX(quantity) AS quantity FROM DEAL
GROUP BY product_id;
Рисунок 26. Представление MAX_QUANTITY
С использованием NOT
CREATE VIEW PERSON (customer_id, surname) AS
SELECT customer_id, surname FROM CUSTOMER
WHERE firm IS NULL;
Рисунок 27. Представление PERSON.
CREATE VIEW FIRM (customer_id, surname) AS
SELECT customer_id, surname FROM CUSTOMER
WHERE firm IS NOT NULL;
Рисунок 28. Представление FIRM.
С использованием WHERE
CREATE VIEW K_SURNAME (customer_id, surname) AS
SELECT customer_id, surname FROM CUSTOMER
WHERE surname LIKE 'K%';
Рисунок 29. Представление K_SURNAME.
CREATE VIEW P_MODEL (product_id, product_name) AS
SELECT product_id, product_name FROM PRODUCT
WHERE product_name LIKE 'P%';
Рисунок 30. Представление P_MODEL.
Выводы
В процессе выполнения данной лабораторной работы были освоены навыки создания таблиц и построения запросов в СУБД Oracle.
Москва, 2020