diff --git a/labs/lab_3.sql b/labs/lab_3.sql new file mode 100644 index 0000000..0efdde5 --- /dev/null +++ b/labs/lab_3.sql @@ -0,0 +1,106 @@ +--Лабораторная работа 3 +--Задание 1. SELECT к нескольким таблицам +--Фильтрация должна производится на исходных данных столбцов (не на вычисляемых выражениях)! +-- +--1. Выведите информацию о тех транспортных компаниях, которые доставляли заказы в декабре 2006 года в Швецию, а в декабре 2007 года в Данию +-- +select ord.shipperid, cust.companyname, cust.phone, ord.orderdate, ord.shipcountry +from "Sales"."Shippers" as cust join "Sales"."Orders" as ord on cust.shipperid=ord.shipperid +where (ord.shippeddate between '2006-12-01' and '2006-12-31' and ord.shipcountry='Sweden') +or (ord.shippeddate between '2007-12-01' and '2007-12-31' and ord.shipcountry='Denmark'); +-- +--2. Сформируйте выборку следующего вида: +-- +--В столбцах Название продукта и Поставщик необходимо исключить слова Product и Supplier, соответственно. +--В выборке должны присутствовать только те продукты, которые относятся к категориям с 1 по 5 и при этом их поставщики находятся в Европе. +-- +select btrim(split_part(prod.productname, ' ', 2)), prod.unitprice, cat.categoryname, btrim(split_part(sup.companyname, ' ', 2)), sup.phone, sup.country +from "Production"."Suppliers" as sup join "Production"."Products" as prod on +sup.supplierid=prod.supplierid join "Production"."Categories" as cat on prod.categoryid=cat.categoryid +where sup.country in ('Spain', 'Russia', 'UK', 'Sweden', 'Germany', 'Italy', 'Norway', 'France', 'Denmark', +'Netherlands', 'Finland') and prod.categoryid between 1 and 5 +-- +--3. Сформируйте выборку следующего вида: +--В столбцах Название продукта и Заказчик необходимо исключить слова Product и Customer, соответственно +--В столбце Стоимость с учетом скидки необходимо рассчитать сумму, которую должен заплатить за данный товар клиент с учетом количества товара и предоставленной скидки +--Выборка должна содержать информацию о Заказчиках из Бразилии и Канады, которые сделали заказы весной 2007 года, при этом адрес доставки должен совпадать с адресом Заказчика (под адресом подразумевается страна и город). +-- +select btrim(split_part(cust.companyname, ' ', 2)), concat(cust.country, cust.city), concat(ord.shipcountry, ord.shipcity),btrim(split_part(prod.productname, ' ', 2)), (orddet.unitprice * orddet.qty * (1-orddet.discount)) as cost +from "Sales"."Orders" as ord join "Sales"."OrderDetails" as orddet on orddet.orderid = ord.orderid +join "Production"."Products" as prod on orddet.productid=prod.productid +join "Sales"."Customers" as cust on cust.custid=ord.custid +where cust.country in ('Brazil','Canada') and ord.orderdate between '2007-03-01' and '2007-05-31' +and cust.country=ord.shipcountry and cust.city=ord.shipcity +--4. Сформируйте выборку следующего вида: +--Выборка должна содержать набор уникальных записей с информацией о сотрудниках магазина и их клиентах при условии, что: +--a) Сотрудник является мужчиной +select distinct concat(e.firstname,e.lastname), e.title, c.companyname, c.contactname, c.contacttitle +from "HR"."Employees" as e +join "Sales"."Orders" as o on e.empid=o.empid +join "Sales"."Customers" as c on o.custid=c.custid +where e.titleofcourtesy ilike 'mr%' and not e.titleofcourtesy ilike 'mrs%' +--b) Сотрудник проживает в том же городе где находится клиент (Учтите тот факт, что +--в разных странах могут быть города с одинаковыми названиями) +select distinct concat(e.firstname,e.lastname), e.title, c.companyname, c.contactname, c.contacttitle +from "HR"."Employees" as e +join "Sales"."Orders" as o on e.empid=o.empid +join "Sales"."Customers" as c on o.custid=c.custid +where c.country=e.country and e.city=c.city +--c) Должность сотрудника и должность контактного лица клиента совпадают +-- +select distinct concat(e.firstname,e.lastname), e.title, c.companyname, c.contactname, c.contacttitle +from "HR"."Employees" as e +join "Sales"."Orders" as o on e.empid=o.empid +join "Sales"."Customers" as c on o.custid=c.custid +where c.contacttitle=e.title +--5. Выведите полную информацию о сотрудниках, которые не оформили ни одного заказа +-- +select * +from "HR"."Employees" as e +left join "Sales"."Orders" as o on e.empid=o.empid +where o.empid is null +--6. Напишите запрос, возвращающий список заказов, которые не являются международными +-- (страна доставки заказа и страна клиента совпадают) +select * +from "Sales"."Orders" as o +join "Sales"."Customers" as c on c.custid=o.custid +where c.country=o.shipcountry +-- +--7. Выведите информацию о тех товарах, которые никогда не продавались (не вошли ни в один заказ) +-- +select p.productname, cat.categoryname, s.companyname, p.unitprice,p.discontinued +from "Production"."Products" as p +left join "Sales"."OrderDetails" as od on p.productid=od.productid +left join "Sales"."Orders" as o on o.orderid=od.orderid +left join "Production"."Categories" as cat on p.categoryid=cat.categoryid +left join "Production"."Suppliers" as s on p.supplierid=s.supplierid +where od.orderid is null +--8. Выведите уникальный список сотрудников, у которых есть в подчинении другие сотрудники +-- +select distinct e.empid, e.lastname, e.firstname, e.title +from "HR"."Employees" as e +left join "HR"."Employees" as emp on e.empid=emp.mgrid +where emp.empid is not null +-- +--9. Сформируйте выборки следующего вида: +-- +--a. Выборка должна содержать уникальный список товаров, которые находятся в одной категории и при этом имеют одинаковую цену +select distinct p.productid, p.productname, p.supplierid, p.categoryid, p.unitprice,p.discontinued +from "Production"."Products" as p +join "Production"."Products" as pr on pr.categoryid = p.categoryid and p.unitprice=pr.unitprice and p.productid!=pr.productid +--b. Выборка должна содержать уникальный список товаров, которые поставляются одним и тем же +--поставщиком и при этом имеют одинаковую цену +select distinct p.productid, p.productname, p.supplierid, p.categoryid, p.unitprice,p.discontinued +from "Production"."Products" as p +join "Production"."Products" as pr on p.unitprice=pr.unitprice and p.supplierid = pr.supplierid and p.productid!=pr.productid +--c. Выборка должна содержать уникальный список товаров, которые находятся в одной категории, +-- поставляются одним и тем же поставщиком и при этом имеют одинаковую цену +select distinct p.productid, p.productname, p.supplierid, p.categoryid, p.unitprice,p.discontinued +from "Production"."Products" as p +join "Production"."Products" as pr on pr.categoryid = p.categoryid and p.unitprice=pr.unitprice and p.supplierid = pr.supplierid and p.productid!=pr.productid +--d. Выборка должна содержать уникальный список товаров, которые находятся в одной категории, +--поставляются одним и тем же поставщиком и при этом имеют разную цену +-- +select distinct p.productid, p.productname, p.supplierid, p.categoryid, p.unitprice,p.discontinued +from "Production"."Products" as p +join "Production"."Products" as pr on pr.categoryid = p.categoryid and p.unitprice!=pr.unitprice and p.supplierid = pr.supplierid and p.productid!=pr.productid