ΠΠΈΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ Π΄Π°Π²Π½ΠΎ Π·Π°Ρ Π²Π°ΡΠ΅Π½ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π‘Π£ΠΠ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ·ΡΠΊ SQL. ΠΠ°ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ»ΡΠ½ΠΎ, ΡΡΠΎ ΠΏΠΎΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ NoSQL. ΠΠΌ ΡΠ΄Π°Π»ΠΎΡΡ ΠΎΡΠ±ΠΈΡΡ ΡΠ΅Π±Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π½Π° ΡΡΠΎΠΌ ΡΡΠ½ΠΊΠ΅, Π½ΠΎ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠ΅ Π‘Π£ΠΠ ΡΠΌΠΈΡΠ°ΡΡ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ, ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ ΡΠ΅Π»Π΅ΠΉ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Ρ
ΠΎΡΡ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
. ΠΠ»Ρ Π»ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, Ρ Π±ΡΠ΄Ρ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΏΡΡΠ΅ΠΌ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π·Π°Π΄Π°ΡΠΈ ΠΈΠ· ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠ΅ΡΡΠΎΠ² ΠΏΠΎ 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, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ ΡΠΈΠΏ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π‘Π£ΠΠ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΊΠΈΠΉ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ, ΠΈ ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ.
ΠΠ°Π΄Π°Π΄ΠΈΠΌ ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠΎΠ²Π°ΡΠ° / ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° / ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ°. ΠΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠ»Π΅ Π²ΡΠ΅ΠΌΡ. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊΠΎΠ² Π² ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠΏΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΊΠΎΠ΄:
Π Π΅Π»ΡΡΠΈΠΎΠ½Π½Π°Ρ
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);
ΠΠ°Π΄Π°ΡΠ° 1.1
ΠΡΠ²Π΅ΡΡΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ², ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΡ Π·Π°ΡΠ°Π±ΠΎΡΠ½ΡΡ ΠΏΠ»Π°ΡΡ Π±ΠΎΠ»ΡΡΡΡ ΡΠ΅ΠΌ Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ.
Π Π΅Π»ΡΡΠΈΠΎΠ½Π½Π°Ρ
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));
ΠΠ°Π΄Π°ΡΠ° 1.2
ΠΡΠ²Π΅ΡΡΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ², ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π·Π°ΡΠ°Π±ΠΎΡΠ½ΡΡ ΠΏΠ»Π°ΡΡ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΎΡΠ΄Π΅Π»Π΅
Π Π΅Π»ΡΡΠΈΠΎΠ½Π½Π°Ρ
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, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΡΡΠΈΡΠ°Π΅Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ΄Π΅Π»Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π·Π°ΡΠΏΠ»Π°ΡΡ Π² Π½Π΅ΠΌ. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Ρ Π΄Π»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π»ΡΡΡΠ΅ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠ°Π΄Π°ΡΠ° 1.3
ΠΡΠ²Π΅ΡΡΠΈ ΡΠΏΠΈΡΠΎΠΊ ID ΠΎΡΠ΄Π΅Π»ΠΎΠ², ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² Π² ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ 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;
ΠΠ°Π΄Π°ΡΠ° 1.4
ΠΡΠ²Π΅ΡΡΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ², Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΡ Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ Π² ΡΠΎΠΌ-ΠΆΠ΅ ΠΎΡΠ΄Π΅Π»Π΅.
Π Π΅Π»ΡΡΠΈΠΎΠ½Π½Π°Ρ
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));
ΠΠ°Π΄Π°ΡΠ° 1.5
ΠΠ°ΠΉΡΠΈ ΡΠΏΠΈΡΠΎΠΊ ID ΠΎΡΠ΄Π΅Π»ΠΎΠ² Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΠ°ΡΠ½ΠΎΠΉ Π·Π°ΡΠΏΠ»Π°ΡΠΎΠΉ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ².
Π Π΅Π»ΡΡΠΈΠΎΠ½Π½Π°Ρ
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();
ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ Π·Π°Π΄Π°ΡΠ°ΠΌ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠΉ
ΠΠ°Π΄Π°ΡΠ° 2.1
ΠΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ΄Π°Π²ΡΡ ΠΏΡΠΎΠ΄Π°Π»ΠΈ Π² 1997 Π³ΠΎΠ΄Ρ Π±ΠΎΠ»Π΅Π΅ 30 ΡΡΡΠΊ ΡΠΎΠ²Π°ΡΠ° β1?
ΠΠΎΠΌΠ΅Π½Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° (ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅ Π½Π° Π Π‘Π£ΠΠ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅):
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;
ΠΠ°Π΄Π°ΡΠ° 2.2
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠΊΡΠΏΠ°ΡΠ΅Π»Ρ (ΠΈΠΌΡ, ΡΠ°ΠΌΠΈΠ»ΠΈΡ) Π½Π°ΠΉΡΠΈ Π΄Π²Π° ΡΠΎΠ²Π°ΡΠ° (Π½Π°Π·Π²Π°Π½ΠΈΠ΅), Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΊΡΠΏΠ°ΡΠ΅Π»Ρ ΠΏΠΎΡΡΠ°ΡΠΈΠ» Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π΄Π΅Π½Π΅Π³ Π² 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), Π²Π½ΡΡΡΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π³ΡΡΠΏΠΏ (Π·Π΄Π΅ΡΡ Customer ΠΈ Year, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅), ΡΠΎΡΡΠΈΡΡΡ Π²Π½ΡΡΡΠΈ Π³ΡΡΠΏΠΏ ΠΏΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π² ORDER (Π·Π΄Π΅ΡΡ bought, Π° Π΅ΡΠ»ΠΈ ΡΠ°Π²Π½Ρ, ΡΠΎ ΠΏΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌΡ ΠΊΠΎΠ΄Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°).
ΠΠ°Π΄Π°ΡΠ° 2.3
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²Π°ΡΠΎΠ² Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΊΠ°Π·Π°ΡΡ Ρ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠΈΡ Π·Π°ΠΊΠ°Π·ΠΎΠ².
ΠΠΏΡΡΡ ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌ Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ:
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++, ΠΈ Python ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ.
ΠΠΏΠΈΡΠ°Π½Π½Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ:
- ΠΡΠΎΡΡΠΎΡΠ°. ΠΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½ Π½Π° ΠΏΡΠΎΡΡΡΡ ΡΠ»ΡΡΠ°ΡΡ . ΠΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π΄Π°ΡΠΈ ΡΠΎ Π·Π²Π΅Π·Π΄ΠΎΡΠΊΠ°ΠΌΠΈ), ΡΠΎ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅.
- ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Ρ ΠΎΠ±ΡΡΠ²Π»ΡΠ» ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, sold, bought ΠΈ Ρ.Π΄.), ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠΎΠΈΠ»ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π·Π°Π²ΠΈΡΡΡΠΈΡ ΠΎΡ Π½ΠΈΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π°ΠΆΠΈ sold ΡΡΠΈΡΠ°Π»ΠΈΡΡ ΠΎΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΡΡΠ°Π»ΡΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ. ΠΠ°, Π² Π Π‘Π£ΠΠ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ CREATE VIEW. ΠΠΎ Π΅ΡΠ»ΠΈ Π²ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΠΎΠΉ.
- ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΡΡΠ²Π°. Π’Π°ΠΊΠ°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ (Π²ΠΌΠ΅ΡΡΠΎ ΡΠ°Π±Π»ΠΈΡ ΠΈ ΠΏΠΎΠ»Π΅ΠΉ). Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ (Π΅ΡΠ»ΠΈ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π² Π²ΠΈΠ΄Π΅ ΠΊΠ»Π°ΡΡΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ). Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Β«ΠΏΠΎΠ΄ΡΡΠΆΠΈΡΡΒ» Ρ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π²ΠΈΠ΄Π°:
CONSTRAINTΒ sold(EmployeeΒ e,Β 1,Β 2019)Β >Β 100Β IFΒ name(e)Β =Β 'ΠΠ΅ΡΡ'Β MESSAGEΒ Β 'Π§ΡΠΎ-ΡΠΎΒ ΠΠ΅ΡΡΒ ΠΏΡΠΎΠ΄Π°Π΅ΡΒ ΡΠ»ΠΈΡΠΊΠΎΠΌΒ ΠΌΠ½ΠΎΠ³ΠΎΒ ΠΎΠ΄Π½ΠΎΠ³ΠΎΒ ΡΠΎΠ²Π°ΡΠ°Β Π²Β 2019Β Π³ΠΎΠ΄Ρ';
- ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ. Π ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ CLASS ClassP: Class1, Class2 ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ. ΠΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ°ΡΡΡΡ .
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΆΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Java, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ Π²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ. ΠΠ»ΡΡ ΠΊ Π½Π΅ΠΉ ΠΊΡΠ°ΡΠΈΠ²ΠΎ ΠΏΡΠΈΠΊΡΡΡΠ΅Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅Π»Π°Ρ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com