рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рд╕рдВрд╕рд╛рд░ рд▓рд╛рдореЛ рд╕рдордпрджреЗрдЦрд┐ рд╕рдореНрдмрдиреНрдзрд┐рдд DBMSs рджреНрд╡рд╛рд░рд╛ рд╣рд╛рд╡реА рднрдПрдХреЛ рдЫ, рдЬрд╕рд▓реЗ SQL рднрд╛рд╖рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдпрддрд┐ рдзреЗрд░реИ рдЙрджреАрдпрдорд╛рди рднреЗрд░рд┐рдпрдиреНрдЯрд╣рд░реВрд▓рд╛рдИ NoSQL рднрдирд┐рдиреНрдЫред рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдпрд╕ рдмрдЬрд╛рд░рдорд╛ рдЖрдлреНрдиреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдард╛рдЙрдБ рдмрдирд╛рдЙрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реЗ, рддрд░ рд╕рдореНрдмрдиреНрдзрдЧрдд DBMS рд╣рд░реВ рдорд░реНрдиреЗ рдЫреИрдирдиреН, рд░ рд╕рдХреНрд░рд┐рдп рд░реВрдкрдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЙрджреНрджреЗрд╢реНрдпрдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫрдиреНред
рдпрд╕ рд▓реЗрдЦрдорд╛ рдо рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╡рд░реНрдгрди рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБред рд░рд╛рдореНрд░реЛ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, рдо рдпрд╕рд▓рд╛рдИ рд╢рд╛рд╕реНрддреНрд░реАрдп рд░рд┐рд▓реЗрд╢рдирд▓ рдореЛрдбреЗрд▓рд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реЗрд░ рдЧрд░реНрдиреЗрдЫреБред рдЗрдиреНрдЯрд░рдиреЗрдЯрдорд╛ рдкрд╛рдЗрдиреЗ рд╡рд┐рднрд┐рдиреНрди SQL рдкрд░реАрдХреНрд╖рдгрд╣рд░реВрдмрд╛рдЯ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫред
рдкрд░рд┐рдЪрдп
рд░рд┐рд▓реЗрд╢рдирд▓ рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВ рдЯреЗрдмрд▓ рд░ рдлрд┐рд▓реНрдбрд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрдЫрдиреНред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛, рдХрдХреНрд╖рд╛ рд░ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдХреНрд░рдорд╢рдГ рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫред N рдХреБрдЮреНрдЬреАрд╣рд░реВ рднрдПрдХреЛ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рд░рд╣реЗрдХреЛ рдлрд┐рд▓реНрдбрд▓рд╛рдИ N рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░рд┐рдиреЗрдЫред рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдмреАрдЪрдХреЛ рд╕рдореНрдмрдиреНрдзрдХреЛ рд╕рдЯреНрдЯрд╛, рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫ рдЬрд╕рд▓реЗ рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХреЛ рд╡рд░реНрдЧрдХрд╛ рд╡рд╕реНрддреБрд╣рд░реВ рдлрд░реНрдХрд╛рдЙрдБрдЫред JOIN рдХреЛ рд╕рдЯреНрдЯрд╛ рдкреНрд░рдХрд╛рд░реНрдп рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫред
рд╕рд┐рдзреИ рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдЬрд╛рдиреБ рдЕрдШрд┐, рдо рдбреЛрдореЗрди рддрд░реНрдХрдХреЛ рдХрд╛рд░реНрдп рд╡рд░реНрдгрди рдЧрд░реНрдиреЗрдЫреБред DDL рдХреЛ рд▓рд╛рдЧрд┐ рдо PostgreSQL рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреБред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛ рд▓рд╛рдЧреА рдпрд╕рдХреЛ рдЖрдлреНрдиреИ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдЫред
рддрд╛рд▓рд┐рдХрд╛ рд░ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ
рдирд╛рдо рд░ рдореВрд▓реНрдп рдХреНрд╖реЗрддреНрд░рд╣рд░реБ рд╕рдВрдЧ рдПрдХ рд╕рд╛рдзрд╛рд░рдг Sku рд╡рд╕реНрддреБ:
рд╕рдореНрдмрдиреНрдзрдЧрдд
CREATE TABLE Sku
(
id bigint NOT NULL,
name character varying(100),
price numeric(10,5),
CONSTRAINT id_pkey PRIMARY KEY (id)
)
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
CLASS Sku;
name = DATA STRING[100] (Sku);
price = DATA NUMERIC[10,5] (Sku);
рд╣рд╛рдореА рджреБрдИ рдШреЛрд╖рдгрд╛ рдЧрд░реНрдЫреМрдВ рдХрд╛рд░реНрдп, рдЬрд╕рд▓реЗ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдПрдХ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ Sku рд▓рд┐рдиреНрдЫ рд░ рдПрдХ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдлрд░реНрдХрд╛рдЙрдБрдЫред
рдпреЛ рдорд╛рдирд┐рдиреНрдЫ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ DBMS рдорд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБрдорд╛ рдХреЗрд╣рд┐ рдЖрдиреНрддрд░рд┐рдХ рдХреЛрдб рд╣реБрдиреЗрдЫ рдЬреБрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫ рд░ рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рдЙрддреНрдкрд╛рджрди/рд╕реНрдЯреЛрд░/рд╕рдкреНрд▓рд╛рдпрд░рдХреЛ рд▓рд╛рдЧрд┐ рдореВрд▓реНрдп рд╕реЗрдЯ рдЧрд░реМрдВред рдпреЛ рд╕рдордпрд╕рдБрдЧреИ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрди рд╕рдХреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдердкреМрдВред рдо рдХреЛрдб рдЫреЛрдЯреЛ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рд░рд┐рд▓реЗрд╕рдирд▓ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдШреЛрд╖рдгрд╛ рдЧрд░реНрди рдЫреЛрдбреНрдиреЗрдЫреБ:
рд╕рдореНрдмрдиреНрдзрдЧрдд
CREATE TABLE prices
(
skuId bigint NOT NULL,
storeId bigint NOT NULL,
supplierId bigint NOT NULL,
dateTime timestamp without time zone,
price numeric(10,5),
CONSTRAINT prices_pkey PRIMARY KEY (skuId, storeId, supplierId)
)
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
CLASS Sku;
CLASS Store;
CLASS Supplier;
dateTime = DATA DATETIME (Sku, Store, Supplier);
price = DATA NUMERIC[10,5] (Sku, Store, Supplier);
рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛
рдЕрдиреНрддрд┐рдо рдЙрджрд╛рд╣рд░рдгрдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рд╕рдмреИ рдХреБрдЮреНрдЬреАрд╣рд░реВ рд░ рдорд┐рддрд┐рд╣рд░реВрдорд╛ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗрдЫреМрдВ рддрд╛рдХрд┐ рд╣рд╛рдореАрд▓реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рджреНрд░реБрдд рд░реВрдкрдорд╛ рдореВрд▓реНрдп рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдХреМрдВред
рд╕рдореНрдмрдиреНрдзрдЧрдд
CREATE INDEX prices_date
ON prices
(skuId, storeId, supplierId, dateTime)
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
INDEX Sku sk, Store st, Supplier sp, dateTime(sk, st, sp);
рдХрд╛рд░реНрдпрд╣рд░реВ
рд╕рдВрдЧрддрдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрд╕рдБрдЧ рд╕реБрд░реБ рдЧрд░реМрдВ
рдкрд╣рд┐рд▓реЗ, рдбреЛрдореЗрди рддрд░реНрдХ рдШреЛрд╖рдгрд╛ рдЧрд░реМрдВ (рд╕рдореНрдмрдиреНрдзрд┐рдд рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдорд╛рдерд┐рдХреЛ рд▓реЗрдЦрдорд╛ рд╕реАрдзрд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ)ред
CLASS Department;
name = DATA STRING[100] (Department);
CLASS Employee;
department = DATA Department (Employee);
chief = DATA Employee (Employee);
name = DATA STRING[100] (Employee);
salary = DATA NUMERIC[14,2] (Employee);
рдХрд╛рд░реНрдп реи
рдЖрдлреНрдиреЛ рддрддреНрдХрд╛рд▓ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХрдХреЛ рднрдиреНрджрд╛ рдмрдвреА рддрд▓рдм рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реНред
рд╕рдореНрдмрдиреНрдзрдЧрдд
select a.*
from employee a, employee b
where b.id = a.chief_id
and a.salary > b.salary
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
SELECT name(Employee a) WHERE salary(a) > salary(chief(a));
рдХрд╛рд░реНрдп реи
рдЖрдлреНрдиреЛ рд╡рд┐рднрд╛рдЧрдорд╛ рдЕрдзрд┐рдХрддрдо рддрд▓рдм рдкрд╛рдЙрдиреЗ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН
рд╕рдореНрдмрдиреНрдзрдЧрдд
select a.*
from employee a
where a.salary = ( select max(salary) from employee b
where b.department_id = a.department_id )
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
maxSalary '╨Ь╨░╨║╤Б╨╕╨╝╨░╨╗╤М╨╜╨░╤П ╨╖╨░╤А╨┐╨╗╨░╤В╨░' (Department s) =
GROUP MAX salary(Employee e) IF department(e) = s;
SELECT name(Employee a) WHERE salary(a) = maxSalary(department(a));
// ╨╕╨╗╨╕ ╨╡╤Б╨╗╨╕ "╨╖╨░╨╕╨╜╨╗╨░╨╣╨╜╨╕╤В╤М"
SELECT name(Employee a) WHERE
salary(a) = maxSalary(GROUP MAX salary(Employee e) IF department(e) = department(a));
рджреБрд╡реИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдорд╛рди рдЫрдиреНред рдкрд╣рд┐рд▓реЛ рдХреЗрд╕рдХреЛ рд▓рд╛рдЧрд┐, рд░рд┐рд▓реЗрд╢рдирд▓ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рддрдкрд╛рдИрдВрд▓реЗ CREATE VIEW рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рдкрд╣рд┐рд▓реЗ рддреНрдпрд╕рдорд╛ рдХреБрдиреИ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рднрд╛рдЧрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдзрд┐рдХрддрдо рддрд▓рдм рдЧрдгрдирд╛ рдЧрд░реНрдиреЗрдЫред рдирд┐рдореНрдирдорд╛, рд╕реНрдкрд╖реНрдЯрддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рдо рдкрд╣рд┐рд▓реЛ рдХреЗрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреБ, рдХрд┐рдирдХрд┐ рдпрд╕рд▓реЗ рд╕рдорд╛рдзрд╛рдирд▓рд╛рдИ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рдЧрд░реНрджрдЫред
рдХрд╛рд░реНрдп реи
рд╡рд┐рднрд╛рдЧ рдЖрдИрдбреАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдЬрд╕рдорд╛ 3 рдЬрдирд╛ рднрдиреНрджрд╛ рдмрдвреА рдЫреИрдиред
рд╕рдореНрдмрдиреНрдзрдЧрдд
select department_id
from employee
group by department_id
having count(*) <= 3
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
countEmployees '╨Ъ╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╨╛╤В╤А╤Г╨┤╨╜╨╕╨║╨╛╨▓' (Department d) =
GROUP SUM 1 IF department(Employee e) = d;
SELECT Department d WHERE countEmployees(d) <= 3;
рдХрд╛рд░реНрдп реи
рдПрдЙрдЯреИ рд╡рд┐рднрд╛рдЧрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рддреЛрдХрд┐рдПрдХреЛ рдкреНрд░рдмрдиреНрдзрдХ рдирднрдПрдХрд╛ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реНред
рд╕рдореНрдмрдиреНрдзрдЧрдд
select a.*
from employee a
left join employee b on (b.id = a.chief_id and b.department_id = a.department_id)
where b.id is null
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
SELECT name(Employee a) WHERE NOT (department(chief(a)) = department(a));
рдХрд╛рд░реНрдп реи
рдЕрдзрд┐рдХрддрдо рдХреБрд▓ рдХрд░реНрдордЪрд╛рд░реА рд╡реЗрддрди рд╕рдВрдЧ рд╡рд┐рднрд╛рдЧ рдЖрдИрдбреА рдХреЛ рдПрдХ рд╕реВрдЪреА рдЦреЛрдЬреНрдиреБрд╣реЛрд╕реНред
рд╕рдореНрдмрдиреНрдзрдЧрдд
with sum_salary as
( select department_id, sum(salary) salary
from employee
group by department_id )
select department_id
from sum_salary a
where a.salary = ( select max(salary) from sum_salary )
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
salarySum '╨Ь╨░╨║╤Б╨╕╨╝╨░╨╗╤М╨╜╨░╤П ╨╖╨░╤А╨┐╨╗╨░╤В╨░' (Department d) =
GROUP SUM salary(Employee e) IF department(e) = d;
maxSalarySum '╨Ь╨░╨║╤Б╨╕╨╝╨░╨╗╤М╨╜╨░╤П ╨╖╨░╤А╨┐╨╗╨░╤В╨░ ╨╛╤В╨┤╨╡╨╗╨╛╨▓' () =
GROUP MAX salarySum(Department d);
SELECT Department d WHERE salarySum(d) = maxSalarySum();
рдЕрд░реНрдХреЛрдмрд╛рдЯ рдердк рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдЬрд╛рдФрдВ
рдХрд╛рд░реНрдп реи
рдХреБрди рдмрд┐рдХреНрд░реЗрддрд╛рд▓реЗ рд╕рдиреН резрепрепрен рдорд╛ рдЙрддреНрдкрд╛рджрди рдирдореНрдмрд░ рез рдХреЛ рейреж рднрдиреНрджрд╛ рдмрдвреА рдпреБрдирд┐рдЯ рдмреЗрдЪреЗрдХрд╛ рдерд┐рдП?
рдбреЛрдореЗрди рддрд░реНрдХ (RDBMS рдорд╛ рдкрд╣рд┐рд▓реЗ рдЬрд╕реНрддреИ рд╣рд╛рдореА рдШреЛрд╖рдгрд╛ рдЫреЛрдбреНрдЫреМрдВ):
CLASS Employee '╨Я╤А╨╛╨┤╨░╨▓╨╡╤Ж';
lastName '╨д╨░╨╝╨╕╨╗╨╕╤П' = DATA STRING[100] (Employee);
CLASS Product '╨Я╤А╨╛╨┤╤Г╨║╤В';
id = DATA INTEGER (Product);
name = DATA STRING[100] (Product);
CLASS Order '╨Ч╨░╨║╨░╨╖';
date = DATA DATE (Order);
employee = DATA Employee (Order);
CLASS Detail '╨б╤В╤А╨╛╨║╨░ ╨╖╨░╨║╨░╨╖╨░';
order = DATA Order (Detail);
product = DATA Product (Detail);
quantity = DATA NUMERIC[10,5] (Detail);
рд╕рдореНрдмрдиреНрдзрдЧрдд
select LastName
from Employees as e
where (
select sum(od.Quantity)
from [Order Details] as od
where od.ProductID = 1 and od.OrderID in (
select o.OrderID
from Orders as o
where year(o.OrderDate) = 1997 and e.EmployeeID = o.EmployeeID)
) > 30
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
sold (Employee e, INTEGER productId, INTEGER year) =
GROUP SUM quantity(OrderDetail d) IF
employee(order(d)) = e AND
id(product(d)) = productId AND
extractYear(date(order(d))) = year;
SELECT lastName(Employee e) WHERE sold(e, 1, 1997) > 30;
рдХрд╛рд░реНрдп реи
рдкреНрд░рддреНрдпреЗрдХ рдЦрд░рд┐рджрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ (рдирд╛рдо, рдерд░), рджреБрдИ рд╕рд╛рдорд╛рдирд╣рд░реВ (рдирд╛рдо) рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рдорд╛ рдЦрд░рд┐рджрдХрд░реНрддрд╛рд▓реЗ 1997 рдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рдзреЗрд░реИ рдкреИрд╕рд╛ рдЦрд░реНрдЪ рдЧрд░реНрдпреЛред
рд╣рд╛рдореАрд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрджрд╛рд╣рд░рдгрдмрд╛рдЯ рдбреЛрдореЗрди рддрд░реНрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдЫреМрдВ:
CLASS Customer '╨Ъ╨╗╨╕╨╡╨╜╤В';
contactName '╨д╨Ш╨Ю' = DATA STRING[100] (Customer);
customer = DATA Customer (Order);
unitPrice = DATA NUMERIC[14,2] (Detail);
discount = DATA NUMERIC[6,2] (Detail);
рд╕рдореНрдмрдиреНрдзрдЧрдд
SELECT ContactName, ProductName FROM (
SELECT c.ContactName, p.ProductName
, ROW_NUMBER() OVER (
PARTITION BY c.ContactName
ORDER BY SUM(od.Quantity * od.UnitPrice * (1 - od.Discount)) DESC
) AS RatingByAmt
FROM Customers c
JOIN Orders o ON o.CustomerID = c.CustomerID
JOIN [Order Details] od ON od.OrderID = o.OrderID
JOIN Products p ON p.ProductID = od.ProductID
WHERE YEAR(o.OrderDate) = 1997
GROUP BY c.ContactName, p.ProductName
) t
WHERE RatingByAmt < 3
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
sum (Detail d) = quantity(d) * unitPrice(d) * (1 - discount(d));
bought '╨Ъ╤Г╨┐╨╕╨╗' (Customer c, Product p, INTEGER y) =
GROUP SUM sum(Detail d) IF
customer(order(d)) = c AND
product(d) = p AND
extractYear(date(order(d))) = y;
rating '╨а╨╡╨╣╤В╨╕╨╜╨│' (Customer c, Product p, INTEGER y) =
PARTITION SUM 1 ORDER DESC bought(c, p, y), p BY c, y;
SELECT contactName(Customer c), name(Product p) WHERE rating(c, p, 1997) < 3;
PARTITION рдЕрдкрд░реЗрдЯрд░рд▓реЗ рдирд┐рдореНрди рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ: рдпрд╕рд▓реЗ SUM (рдпрд╣рд╛рдБ 1) рдкрдЫрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдХреЛ рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдореВрд╣рд╣рд░реВ рднрд┐рддреНрд░ (рдпрд╣рд╛рдБ рдЧреНрд░рд╛рд╣рдХ рд░ рд╡рд░реНрд╖, рддрд░ рдХреБрдиреИ рдкрдирд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реБрди рд╕рдХреНрдЫ), ORDER рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣рд╣рд░реВ рднрд┐рддреНрд░ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрджреИред рдпрд╣рд╛рдБ рдЦрд░рд┐рдж рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдпрджрд┐ рдмрд░рд╛рдмрд░ рдЫ рднрдиреЗ, рдЖрдиреНрддрд░рд┐рдХ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдЕрдиреБрд╕рд╛рд░)ред
рдХрд╛рд░реНрдп реи
рд╣рд╛рд▓рдХреЛ рдЕрд░реНрдбрд░рд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрди рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рд╣рд░реВрдмрд╛рдЯ рдХрддрд┐ рд╕рд╛рдорд╛рдирд╣рд░реВ рдЕрд░реНрдбрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
рдлреЗрд░рд┐ рдбреЛрдореЗрди рддрд░реНрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реМрдВ:
CLASS Supplier '╨Я╨╛╤Б╤В╨░╨▓╤Й╨╕╨║';
companyName = DATA STRING[100] (Supplier);
supplier = DATA Supplier (Product);
unitsInStock '╨Ю╤Б╤В╨░╤В╨╛╨║ ╨╜╨░ ╤Б╨║╨╗╨░╨┤╨╡' = DATA NUMERIC[10,3] (Product);
reorderLevel '╨Э╨╛╤А╨╝╨░ ╨┐╤А╨╛╨┤╨░╨╢╨╕' = DATA NUMERIC[10,3] (Product);
рд╕рдореНрдмрдиреНрдзрдЧрдд
select s.CompanyName, p.ProductName, sum(od.Quantity) + p.ReorderLevel тАФ p.UnitsInStock as ToOrder
from Orders o
join [Order Details] od on o.OrderID = od.OrderID
join Products p on od.ProductID = p.ProductID
join Suppliers s on p.SupplierID = s.SupplierID
where o.ShippedDate is null
group by s.CompanyName, p.ProductName, p.UnitsInStock, p.ReorderLevel
having p.UnitsInStock < sum(od.Quantity) + p.ReorderLevel
рдХрд╛рд░реНрдпрд╛рддреНрдордХ
orderedNotShipped '╨Ч╨░╨║╨░╨╖╨░╨╜╨╛, ╨╜╨╛ ╨╜╨╡ ╨╛╤В╨│╤А╤Г╨╢╨╡╨╜╨╛' (Product p) =
GROUP SUM quantity(OrderDetail d) IF product(d) = p;
toOrder '╨Ъ ╨╖╨░╨║╨░╨╖╤Г' (Product p) = orderedNotShipped(p) + reorderLevel(p) - unitsInStock(p);
SELECT companyName(supplier(Product p)), name(p), toOrder(p) WHERE toOrder(p) > 0;
рддрд╛рд░рд╛ рдЪрд┐рдиреНрд╣рдХреЛ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛
рд░ рдЕрдиреНрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛ рдореЗрд░реЛ рд╣реЛред рд╕рд╛рдорд╛рдЬрд┐рдХ рд╕рдЮреНрдЬрд╛рд▓рдХреЛ рддрд░реНрдХ рдЫред рдорд╛рдирд┐рд╕рд╣рд░реВ рдПрдХрдЕрд░реНрдХрд╛рдХреЛ рд╕рд╛рдереА рд░ рдПрдХрдЕрд░реНрдХрд╛рд▓рд╛рдИ рдорди рдкрд░рд╛рдЙрди рд╕рдХреНрдЫрдиреНред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдбрд╛рдЯрд╛рдмреЗрд╕ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдпрдмрд╛рдЯ рдпреЛ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
CLASS Person;
likes = DATA BOOLEAN (Person, Person);
friends = DATA BOOLEAN (Person, Person);
рдорд┐рддреНрд░рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдореНрднрд╛рд╡рд┐рдд рдЙрдореНрдореЗрджрд╡рд╛рд░рд╣рд░реВ рдЦреЛрдЬреНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдердк рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдкрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ A, B, C рд╕рдмреИ рдорд╛рдирд┐рд╕рд╣рд░реВрд▓рд╛рдИ рдЦреЛрдЬреНрдиреБ рдкрд░реНрдЫ рдХрд┐ A B рд╕рдБрдЧ рд╕рд╛рдереА рд╣реЛ, рд░ B C рдХреЛ рд╕рд╛рдереА рд╣реЛ, A рд▓реЗ C рд▓рд╛рдИ рдордирдкрд░реНрдЫ, рддрд░ A рд▓реЗ C рд╕рдБрдЧ рд╕рд╛рдереА рд╣реЛрдЗрдиред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдбрд╛рдЯрд╛рдмреЗрд╕ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдпрдмрд╛рдЯ, рдХреНрд╡реЗрд░реА рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
SELECT Person a, Person b, Person c WHERE
likes(a, c) AND NOT friends(a, c) AND
friends(a, b) AND friends(b, c);
рдкрд╛рдардХрд▓рд╛рдИ SQL рдорд╛ рдпреЛ рд╕рдорд╕реНрдпрд╛ рдЖрдлреИрдВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдЧрд░рд┐рдиреНрдЫред рдпреЛ рдорд╛рдирд┐рдиреНрдЫ рдХрд┐ рддрдкрд╛рдИрд▓рд╛рдИ рдордирдкрд░реНрдиреЗ рдорд╛рдиреНрдЫреЗ рднрдиреНрджрд╛ рдзреЗрд░реИ рдХрдо рд╕рд╛рдереАрд╣рд░реВ рдЫрдиреНред рддреНрдпрд╕реИрд▓реЗ рддрд┐рдиреАрд╣рд░реВ рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдЫрдиреНред рдпрджрд┐ рд╕рдлрд▓ рднрдПрдорд╛, рддреНрдпрд╣рд╛рдБ рджреБрдИ рддрд╛рд░рд╛ рд╕рд╣рд┐рддрдХреЛ рдХрд╛рд░реНрдп рдкрдирд┐ рдЫред рдпрд╕рдорд╛, рдорд┐рддреНрд░рддрд╛ рд╕рдордорд┐рдд рдЫреИрдиред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдпреЛ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
SELECT Person a, Person b, Person c WHERE
likes(a, c) AND NOT friends(a, c) AND
(friends(a, b) OR friends(b, a)) AND
(friends(b, c) OR friends(c, b));
UPD: рдкрд╣рд┐рд▓реЛ рд░ рджреЛрд╕реНрд░реЛ рддрд╛рд░рд╛ рдмрд╛рдЯ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рдорд╛рдзрд╛рди
SELECT
pl.PersonAID
,pf.PersonAID
,pff.PersonAID
FROM Persons AS p
--╨Ы╨░╨╣╨║╨╕
JOIN PersonRelationShip AS pl ON pl.PersonAID = p.PersonID
AND pl.Relation = 'Like'
--╨Ф╤А╤Г╨╖╤М╤П
JOIN PersonRelationShip AS pf ON pf.PersonAID = p.PersonID
AND pf.Relation = 'Friend'
--╨Ф╤А╤Г╨╖╤М╤П ╨Ф╤А╤Г╨╖╨╡╨╣
JOIN PersonRelationShip AS pff ON pff.PersonAID = pf.PersonBID
AND pff.PersonBID = pl.PersonBID
AND pff.Relation = 'Friend'
--╨Х╤Й╤С ╨╜╨╡ ╨┤╤А╤Г╨╢╨░╤В
LEFT JOIN PersonRelationShip AS pnf ON pnf.PersonAID = p.PersonID
AND pnf.PersonBID = pff.PersonBID
AND pnf.Relation = 'Friend'
WHERE pnf.PersonAID IS NULL
;WITH PersonRelationShipCollapsed AS (
SELECT pl.PersonAID
,pl.PersonBID
,pl.Relation
FROM #PersonRelationShip AS pl
UNION
SELECT pl.PersonBID AS PersonAID
,pl.PersonAID AS PersonBID
,pl.Relation
FROM #PersonRelationShip AS pl
)
SELECT
pl.PersonAID
,pf.PersonBID
,pff.PersonBID
FROM #Persons AS p
--╨Ы╨░╨╣╨║╨╕
JOIN PersonRelationShipCollapsed AS pl ON pl.PersonAID = p.PersonID
AND pl.Relation = 'Like'
--╨Ф╤А╤Г╨╖╤М╤П
JOIN PersonRelationShipCollapsed AS pf ON pf.PersonAID = p.PersonID
AND pf.Relation = 'Friend'
--╨Ф╤А╤Г╨╖╤М╤П ╨Ф╤А╤Г╨╖╨╡╨╣
JOIN PersonRelationShipCollapsed AS pff ON pff.PersonAID = pf.PersonBID
AND pff.PersonBID = pl.PersonBID
AND pff.Relation = 'Friend'
--╨Х╤Й╤С ╨╜╨╡ ╨┤╤А╤Г╨╢╨░╤В
LEFT JOIN PersonRelationShipCollapsed AS pnf ON pnf.PersonAID = p.PersonID
AND pnf.PersonBID = pff.PersonBID
AND pnf.Relation = 'Friend'
WHERE pnf.[PersonAID] IS NULL
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛
рдпреЛ рдзреНрдпрд╛рди рджрд┐рдиреБрдкрд░реНрдЫ рдХрд┐ рджрд┐рдЗрдПрдХреЛ рднрд╛рд╖рд╛ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рджрд┐рдЗрдПрдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рдорд╛рддреНрд░ рд╣реЛред SQL рд▓рд╛рдИ рдЖрдзрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдЗрдПрдХреЛ рдерд┐рдпреЛ, рд░ рд▓рдХреНрд╖реНрдп рдпреЛ рд╕рдореНрднрд╡ рднрдПрд╕рдореНрдо рд╕рдорд╛рди рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐ рдерд┐рдпреЛред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдХрд╕реИрд▓рд╛рдИ рдХреБрдЮреНрдЬреА рд╢рдмреНрджрд╣рд░реВ, рд╢рдмреНрдж рджрд░реНрддрд╛рд╣рд░реВ, рдЖрджрд┐рдХрд╛ рдирд╛рдорд╣рд░реВ рдордирдкрд░реНрджреИрдиред рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдХреБрд░рд╛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЖрдлреИ рд╣реЛред рдпрджрд┐ рдЪрд╛рд╣рд┐рдпреЛ рднрдиреЗ, рддрдкрд╛рдЗрдБ рджреБрдмреИ C++ рд░ рдкрд╛рдЗрдерди рд╕рдорд╛рди рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдмрдирд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛рдмреЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛, рдореЗрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, рдирд┐рдореНрди рдлрд╛рдЗрджрд╛рд╣рд░реВ рдЫрдиреН:
- рд╕рд░рд▓рддрд╛ред рдпреЛ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╕реВрдЪрдХ рд╣реЛ рдЬреБрди рд╕рд╛рдзрд╛рд░рдг рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╕реНрдкрд╖реНрдЯ рдЫреИрдиред рддрд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреЗрд╕рд╣рд░реВ рд╣реЗрд░реНрдиреБрд╣реБрдиреНрдЫ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрд╛рд░рд╛рд╣рд░реВрд╕рдБрдЧ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ), рддреНрдпрд╕рдкрдЫрд┐, рдореЗрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, рдпрд╕реНрддрд╛ рдкреНрд░рд╢реНрдирд╣рд░реВ рд▓реЗрдЦреНрди рдзреЗрд░реИ рд╕рдЬрд┐рд▓реЛ рдЫред
- Encapsulationред рдХреЗрд╣реА рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рдореИрд▓реЗ рдордзреНрдпрд╡рд░реНрддреА рдХрд╛рд░реНрдпрд╣рд░реВ рдШреЛрд╖рдгрд╛ рдЧрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдмреЗрдЪреЗ, рдЦрд░рд┐рдж рдЧрд░реНрдпреЛ рдЖрджрд┐), рдЬрд╕рдмрд╛рдЯ рдкрдЫрд┐рдХрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░рд┐рдПрдХрд╛ рдерд┐рдПред рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдХреЗрд╣реА рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рддрд░реНрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛, рддрд┐рдиреАрд╣рд░реВрдорд╛ рдирд┐рд░реНрднрд░ рд╣реБрдиреЗрд╣рд░реВрдХреЛ рддрд░реНрдХ рдкрд░рд┐рд╡рд░реНрддрди рдирдЧрд░реАред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВ рдмрд┐рдХреНрд░реА рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдмреЗрдЪреЗ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдлрд░рдХ рд╡рд╕реНрддреБрд╣рд░реВрдмрд╛рдЯ рдЧрдгрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЬрдмрдХрд┐ рдмрд╛рдБрдХреА рддрд░реНрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреЗрдЫреИрдиред рд╣реЛ, рдпреЛ RDBMS рдорд╛ CREATE VIEW рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рддрд░ рдпрджрд┐ рд╕рдмреИ рддрд░реНрдХ рдпрд╕рд░реА рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ рднрдиреЗ, рдпреЛ рдзреЗрд░реИ рдкрдвреНрди рдпреЛрдЧреНрдп рджреЗрдЦрд┐рдиреЗ рдЫреИрдиред
- рдХреБрдиреИ рд╕рд┐рдореЗрдиреНрдЯрд┐рдХ рдЧреНрдпрд╛рдк рдЫреИрдиред рдпрд╕реНрддреЛ рдбрд╛рдЯрд╛рдмреЗрд╕ рдкреНрд░рдХрд╛рд░реНрдп рд░ рд╡рд░реНрдЧрд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ (рдЯреЗрдмрд▓ рд░ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдХреЛ рд╕рдЯреНрдЯрд╛)ред рдЬрд╕реНрддреИ рдХреНрд▓рд╛рд╕рд┐рдХрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩрдорд╛ (рдпрджрд┐ рд╣рд╛рдореА рдорд╛рдиреНрджрдЫреМрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдкрд╣рд┐рд▓реЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд╕рд╛рде рдХреНрд▓рд╛рд╕рдХреЛ рд░реВрдкрдорд╛ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫ)ред рддрджрдиреБрд╕рд╛рд░, рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рд╣рд░реВрд╕рдБрдЧ "рд╕рд╛рдереА рдмрдирд╛рдЙрди" рдзреЗрд░реИ рд╕рдЬрд┐рд▓реЛ рд╣реБрдиреБрдкрд░реНрдЫред рдердк рд░реВрдкрдорд╛, рдпреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рд▓реЗ рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрд▓реЗ рдЕрдкрд░реЗрдЯрд░рд╣рд░реВрд▓рд╛рдИ рдЗрдореНрдмреЗрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬрд╕реНрддреИ:
CONSTRAINT sold(Employee e, 1, 2019) > 100 IF name(e) = '╨Я╨╡╤В╤П' MESSAGE '╨з╤В╨╛-╤В╨╛ ╨Я╨╡╤В╤П ╨┐╤А╨╛╨┤╨░╨╡╤В ╤Б╨╗╨╕╤И╨║╨╛╨╝ ╨╝╨╜╨╛╨│╨╛ ╨╛╨┤╨╜╨╛╨│╨╛ ╤В╨╛╨▓╨░╤А╨░ ╨▓ 2019 ╨│╨╛╨┤╤Г';
- рд╡рд┐рд░рд╛рд╕рдд рд░ рдмрд╣реБрд░реВрдкрддрд╛ред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛, рддрдкрд╛рдИрдВрд▓реЗ CLASS ClassP: Class1, Class2 рд▓реЗ рдмрд╣реБрд╡рд┐рдз рдмрд╣реБрд░реВрдкрддрд╛ рдирд┐рд░реНрдорд╛рдг рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рд░реНрдлрдд рдмрд╣реБ рд╡рд┐рд░рд╛рд╕рдд рдкрд░рд┐рдЪрдп рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдо рд╕рд╛рдпрдж рднрд╡рд┐рд╖реНрдпрдХрд╛ рд▓реЗрдЦрд╣рд░реВрдорд╛ рдХрд╕рд░реА рдареАрдХ рд▓реЗрдЦреНрдЫреБред
рдпрджреНрдпрдкрд┐ рдпреЛ рдХреЗрд╡рд▓ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реЛ, рд╣рд╛рдореАрд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ Java рдорд╛ рдХреЗрд╣рд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЫ рдЬрд╕рд▓реЗ рд╕рдмреИ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рддрд░реНрдХрд▓рд╛рдИ рд░рд┐рд▓реЗрд╢рдирд▓ рддрд░реНрдХрдорд╛ рдЕрдиреБрд╡рд╛рдж рдЧрд░реНрджрдЫред рд╕рд╛рдереИ, рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдХреЛ рддрд░реНрдХ рд░ рдЕрдиреНрдп рдзреЗрд░реИ рдЪреАрдЬрд╣рд░реВ рдпрд╕рдорд╛ рд░рд╛рдореНрд░рд░реА рд╕рдВрд▓рдЧреНрди рдЫрдиреН, рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВред
рд╕реНрд░реЛрдд: www.habr.com