Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 27 additions & 10 deletions labs/lab2.sql
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,14 @@ select categoryid, productname,
--5. Напишите запрос, возвращающий выборку следующего вида: ФИО сотрудника, месяц рождения сотрудника (название месяца, не число!!!!),
-- год рождения сотрудника, полный адрес (Страна, город, регион)
--
select lastname ',' firstname as "ФИО", to_char(birthdate, 'Month') as "месяц рождения", to_char(birthdate, 'YYYY') AS "год рождения", country || ', '
city || ', ' || region AS "Полный адрес"
--FIXED
select concat_ws(' ', lastname, firstname) as "ФИО", to_char(birthdate, 'Month') as "месяц рождения", to_char(birthdate, 'YYYY') as "год рождения", concat_ws(', ', country,
city,region) as "Полный адрес"
FROM "HR"."Employees";
--6. Напишите запрос, возвращающий следующие данные о сотрудниках: номер сотрудника, фамилия сотрудника, дата рождения и вычисляемый столбец «ДР».
-- Вычисляемый столбец должен содержать 1- если дня рождения еще не было, или 0 – если день рождения уже прошел.
--Отсортируйте результирующую выборку таким образом, чтобы работники у которых еще не было дня рождения были сверху, причем в порядке «приближения» дня рождения.
--FIXED
select empid as "Номер сотрудника",
lastname as "Фамилия сотрудника",
birthdate as "Дата рождения",
Expand All @@ -59,9 +61,10 @@ select empid as "Номер сотрудника",
else 0
end as "ДР"
from "HR"."Employees"
order by "ДР" ASC, to_char(birthdate,'MM') ASC, to_char(birthdate,'DD') ASC;
order by "ДР" DESC, to_char(birthdate,'MM') ASC, to_char(birthdate,'DD') ASC;
--1. Выведите из таблицы, содержащей сведения о заказах строки с 51 по 100, упорядоченные по дате заказа
select * from (select * from "Sales"."Orders" offset 50 limit 50) order by orderdate;
--FIXED
select * from "Sales"."Orders" order by orderdate offset 50 limit 50;
--2. Отобразите поставщиков, у которых отсутствует факс
select * from "Production"."Suppliers" where fax is null or fax='NULL';
--3. Выведите название и цену продуктов, при условии, что цена находится в диапазоне от 100 до 250.
Expand All @@ -74,16 +77,30 @@ select * from "Sales"."Orders" where orderdate > to_date('10.04.2008','DD.MM.YYY
--6. Напишите запрос, извлекающий запись о сотруднике с номером телефона (206) 555-0100
select * from "HR"."Employees" where phone = '(206) 555-0100';
--7. Выведите заказчиков с именами кроме “Linda”, “Robert”, “Ann”, “Venky”
--FIXED
select * from "Sales"."Customers"
where split_part(contactname,',',2) != 'Linda' and
split_part(contactname,',',2) != 'Robert' and
split_part(contactname,',',2) != 'Ann' and
split_part(contactname,',',2) != 'Venky';
where contactname not like '%Linda' and
contactname not like '%Robert' and
contactname not like '%Ann' and
contactname not like '%Venky';
--8. Выведите информацию о заказчиках, сформировав два вычисляемых столбца: Фамилия заказчика и Имя заказчика.
-- В результирующую выборку должны попасть только те заказчики, чье имя начинается либо на букву "P" либо на букву
-- "M", а фамилия при этом начинается либо на “S” либо на “K”. Фильтрация должна производится на исходных данных
-- столбца (не на вычисляемом выражении)
select split_part(contactname,',',2) as name, split_part(contactname,',',1) as fam from "Sales"."Customers" where (trim(split_part(contactname,',',2)) ilike 'P%' or trim(split_part(contactname,',',2)) ilike 'M%') and (trim(split_part(contactname,',',1)) ilike 'S%' or trim(split_part(contactname,',',1)) ilike 'K%');
--FIXED
select btrim(split_part(contactname,',',2)) as name,
btrim(split_part(contactname,',',1)) as fam
from "Sales"."Customers"
where (contactname ilike '%, P%'
or contactname ilike '%, M%') and (contactname ilike 'S%'
or contactname ilike 'K%');
--9. Выведите заказчиков, чьи контактные данные состоят из двух и более частей.
select * from "Sales"."Customers" where cardinality(regexp_split_to_array(contactname,','))>=2;
--FIXED
select * from "Sales"."Customers" where contactname like '%,%'

--1.5. 0.5, не обрабатываешь null значения у поля region.
--1.6. 0.7, по условию нужно было отсортировать так, чтобы в начале шли сотрудники, у которых ещё не было дня рождения.
--2.1. 0, можно решить без вложенных запросов (кстати, ими запрещено пользоваться в этой лабе, т. к. их ещё не проходили).
--2.7. 0.5, по условию пользоваться вычисляемыми столбцами при фильтрации не разрешено.
--2.8. 0.5, аналогичное замечание.
--2.9. 0.5, аналогичное замечание.