
Лабы / Лаб2
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Федеральное государственное образовательное бюджетное учреждение
высшего профессионального образования
Московский технический университет связи и информатики
Кафедра интеллектуальных систем управления и автоматизации
Лабораторная работа №2
по дисциплине
Базы данных
Москва 2017
Цель: создание таблиц и форматирование запросов в СУРБД Oracle.
Задачи: построить таблицы, заполнив их информацией, сформировать по 2 запроса следующих типов:
-
выборка всех данных
-
запрос с условием
-
запрос с использованием синонимов
-
с использованием подзапроса
-
с использованием сортировки
-
с использованием группировки
-
с использованием конкатенации
-
выборка неповторяющихся записей
-
с использованием агрегатных функций
-
с использованием NOT
-
с использованием WHERE
Запросы сохранить в виде представлений
Создадим 3 таблицы CLIENT, PRODUCT, SDELKA.
SQL> create table CLIENT (
2 ID_Client int PRIMARY KEY,
3 Surname varchar(20) NOT NULL,
4 Name varchar(20) NOT NULL,
5 Last_Name varchar(30) NULL,
6 Phone varchar(15) NULL,
7 City varchar(25) NOT NULL,
8 Firma varchar(30) NULL);
Table created.
SQL> create table PRODUCT (
2 ID_Product int PRIMARY KEY,
3 Nazvanie varchar(30) NOT NULL,
4 Price int NOT NULL,
5 Copy int NULL,
6 Type varchar(30) NULL);
Table created.
SQL> create table SDELKA (
2 ID_Sdelka int PRIMARY KEY,
3 ID_Product int NOT NULL,
4 ID_Client int NOT NULL,
5 Kolichestvo int NULL,
6 DatePokupki date NOT NULL);
Table created.
Создадим связь между таблицами SDELKA и CLIENT, SDELKA и PRODUCT.
SQL> alter table SDELKA
2 ADD CONSTRAINT ProductFK FOREIGN KEY (ID_Product) REFERENCES PRODUCT;
Table altered.
SQL> alter table SDELKA
2 ADD CONSTRAINT ClientFK FOREIGN KEY (ID_Client) REFERENCES CLIENT;
Table altered.
Создадим следующие последовательности:
SQL> Create Sequence ID_Cl Increment by 1 start with 1;
Sequence created.
SQL> Create Sequence ID_Pr Increment by 1 start with 100;
Sequence created.
SQL> Create Sequence ID_Sd Increment by 1 start with 500;
Sequence created.
Заполним каждую таблицу информацией. Для этого создадим 3 файла table1.sql, table2.sql и table3.sql, в которые пропишем код для заполнения данных, и запустим их.
Table1.sql
Insert into CLIENT (ID_Client, Surname, Name, Last_Name, Phone, City, Firma)
Values (ID_Cl.NextVal,'Ivanov','Ivan','Ivanovich','1-234-56','Moscow','Silver');
Insert into CLIENT (ID_Client, Surname, Name, Last_Name, Phone, City, Firma)
Values (ID_Cl.NextVal,'Sidorov','Maksim','Alekseevich','3-741-86','Ryazan','GoldF');
Insert into CLIENT (ID_Client, Surname, Name, Last_Name, Phone, City, Firma)
Values (ID_Cl.NextVal,'Dmitrova','Alena','Viktorovna','7-123-71','Perm','Green');
Insert into CLIENT (ID_Client, Surname, Name, Last_Name, Phone, City, Firma)
Values (ID_Cl.NextVal,'Malisheva','Anna','Vladimirovna','3-281-32','Moscow','Silver');
Insert into CLIENT (ID_Client, Surname, Name, Last_Name, Phone, City, Firma)
Values (ID_Cl.NextVal,'Smirnov','Alexey','Ivanovich','4-571-83','Perm','Green');
SQL> start c:\tmp\table1.sql
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
Table2.sql
Insert into PRODUCT (ID_Product, Nazvanie, Price, Copy, Type)
Values (ID_Pr.NextVal,'Lenovo65','25000','12','Notebook');
Insert into PRODUCT (ID_Product, Nazvanie, Price, Copy, Type)
Values (ID_Pr.NextVal,'Nokia732','7500','15','Phone');
Insert into PRODUCT (ID_Product, Nazvanie, Price, Copy, Type)
Values (ID_Pr.NextVal,'Nokia3105','10150','15','Phone');
Insert into PRODUCT (ID_Product, Nazvanie, Price, Copy, Type)
Values (ID_Pr.NextVal,'ASUS123','32000','10','Notebook');
Insert into PRODUCT (ID_Product, Nazvanie, Price, Copy, Type)
Values (ID_Pr.NextVal,'Xiaomi35','16000','10','Planshet');
Insert into PRODUCT (ID_Product, Nazvanie, Price, Copy, Type)
Values (ID_Pr.NextVal,'Samsung21','12000','8','Planshet');
Insert into PRODUCT (ID_Product, Nazvanie, Price, Copy, Type)
Values (ID_Pr.NextVal,'Xiaomi5c','18500','13','Phone');
Insert into PRODUCT (ID_Product, Nazvanie, Price, Copy, Type)
Values (ID_Pr.NextVal,'LenovoM74','28000','11','Notebook');
SQL> start c:\tmp\table2.sql
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
Table3.sql
Insert into SDELKA (ID_Sdelka, ID_Product, ID_Client, Kolichestvo, DatePokupki)
Values (ID_Sd.NextVal,'103','3','1',TO_DATE('2016/04/17','YYYY/MM/DD'));
Insert into SDELKA (ID_Sdelka, ID_Product, ID_Client, Kolichestvo, DatePokupki)
Values (ID_Sd.NextVal,'106','1','1',TO_DATE('2016/08/21','YYYY/MM/DD'));
Insert into SDELKA (ID_Sdelka, ID_Product, ID_Client, Kolichestvo, DatePokupki)
Values (ID_Sd.NextVal,'100','5','1',TO_DATE('2016/11/01','YYYY/MM/DD'));
Insert into SDELKA (ID_Sdelka, ID_Product, ID_Client, Kolichestvo, DatePokupki)
Values (ID_Sd.NextVal,'106','4','2',TO_DATE('2017/02/22','YYYY/MM/DD'));
SQL> start c:\tmp\table3.sql
1 row created.
1 row created.
1 row created.
1 row created.
Выполнение задания:
-
Создание представлений с выборкой всех данных
SQL> create view Cl_View
2 as select * from client;
View created.
SQL> create view Pr_View
2 as select * from product;
View created.
SQL> create view Sd_View
2 as select * from sdelka;
View created.
-
Запрос с условием
Показать всех клиентов из г.Москва
SQL> create view Punct2_V1
2 as select ID_Client, Surname, Name, Last_Name from client
3 where city=’Moscow’;
View created.
SQL> select * from punct2_v1;
Показать товары, цена которых лежит в пределе от 11тыс. до 21тыс.
SQL> create view Punct2_V2
2 as select ID_Product, Nazvanie, Type from product
3 where price between ‘11000’ and ‘21000’;
View created.
SQL> select * from punct2_v2;
-
Запрос с использованием синонимов
SQL> create synonym C for CLIENT;
Synonym created.
SQL> create view Punct3_V1
2 as select Surname, Phone, Firma from C;
View created.
SQL> select * from punct3_v1;
-
С использованием подзапроса
SQL> create view Punct4_V1
2 as select Nazvanie from product
3 where ID_Product in (select ID_Product from Sdelka);
View created.
SQL> select * from punct4_v1;
-
С использованием сортировки
Сортировка товаров по названию (в алфавитном порядке)
SQL> create view Punct5_V1
2 as select Nazvanie, Price from product
3 order by Nazvanie;
View created.
SQL> select * from punct5_v1;
Сортировка товаров по цене (от max к min)
SQL> create view Punct5_V2
2 as select Nazvanie, Price from product
3 order by Price desc;
View created.
SQL> select * from punct5_v2;
-
С использованием группировки
SQL> create view Punct6_V1
2 as select Type, sum(copy) as allcopy from product
3 group by type;
View created.
SQL> select * from punct6_v1;
SQL> create view Punct6_V2
2 as select ID_Product, sum(Kolichistvo) as all_kol from sdelka
3 group by ID_Product;
View created.
SQL> select * from punct6_v2;
-
С использованием конкатенации
SQL> create view Punct7_V1
2 as select Sdelka.ID_Sdelka, Client.Surname, Sdelka.ID_Product
3 from sdelka inner join client
4 on Sdelka.ID_Client=Client.ID_Klient;
View created.
SQL> select * from punct7_v1;
-
Выборка неповторяющихся записей
SQL> create view Punct8_V1
2 as select distinct Type from Product;
SQL> select * from punct8_v1;
-
С использованием агрегатных функций
SQL> create view Punct9_V1
2 as select Type, max(price) as max_price from product
3 group by type;
View created.
SQL> select * from punct9_v1;
-
С использованием NOT.
Добавим двух клиентов, у которых не укажем номер телефона.
Insert into CLIENT (ID_Client, Surname, Name, Last_Name, City, Firma)
Values (ID_Cl.NextVal,'Pavlov',’Pavel','Ivanovich','Ryazan','GoldF');
Insert into CLIENT (ID_Client, Surname, Name, Last_Name, City, Firma)
Values (ID_Cl.NextVal,'Sidorova','Irina','Alexeevna',,'Moscow,'Silver');
SQL> create view Punct10_V1
2 as select ID_Client, Surname from client
3 where phone is null;
View created.
SQL> select * from punct10_v1;
SQL> create view Punct10_V2
2 as select ID_Client, Surname from client
3 where phone is not null;
View created.
SQL> select * from punct10_v2;
-
С использованием WHERE
SQL> create view Punct11_V1
2 as select ID_Client, Surname from client
3 where surname like ‘S%’;
View created.
SQL> select * from punct11_v1;
Конечные таблицы данных
SQL> select * from client;
SQL> select * from product;
SQL> select * from sdelka;