From 4b83d1f8891a543fbd47c3c81001c22ae3861f4d Mon Sep 17 00:00:00 2001 From: plidan123 Date: Thu, 25 Sep 2025 19:19:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=202=20(=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- labs/lab2.sql | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/labs/lab2.sql b/labs/lab2.sql index db07c64..921f7b4 100644 --- a/labs/lab2.sql +++ b/labs/lab2.sql @@ -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 "Дата рождения", @@ -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. @@ -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, аналогичное замечание.