เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเดฏ DBMS

เดŽเดธเตโ€Œเด•เตเดฏเตเดŽเตฝ เดญเดพเดท เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดฑเดฟเดฒเต‡เดทเดฃเตฝ เดกเดฟเดฌเดฟเดŽเด‚เดŽเดธเตเด•เดณเดพเดฃเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เดณเตเดŸเต† เดฒเต‹เด•เดคเตเดคเต เดฆเต€เตผเด˜เด•เดพเดฒเด‚ เด†เดงเดฟเดชเดคเตเดฏเด‚ เดชเตเดฒเตผเดคเตเดคเตเดจเตเดจเดคเต. เด‰เดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจ เดตเด•เดญเต‡เดฆเด™เตเด™เดณเต† 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));

เดฐเดฃเตเดŸเต เดจเดŸเดชเตเดชเดพเด•เตเด•เดฒเตเด•เดณเตเด‚ เดคเตเดฒเตเดฏเดฎเดพเดฃเต. เด†เดฆเตเดฏ เดธเดจเตเดฆเตผเดญเดคเตเดคเดฟเตฝ, เด’เดฐเต เดฑเดฟเดฒเต‡เดทเดฃเตฝ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เตเดฐเดฟเดฏเต‡เดฑเตเดฑเต เดตเตเดฏเต‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚, เด…เดคเต‡ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดคเดจเตเดจเต† เด…เดคเดฟเตฝ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดตเด•เตเดชเตเดชเดฟเดจเตเดณเตเดณ เดชเดฐเดฎเดพเดตเดงเดฟ เดถเดฎเตเดชเดณเด‚ เด†เดฆเตเดฏเด‚ เด•เดฃเด•เตเด•เดพเด•เตเด•เตเด‚. เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดตเดฏเดฟเตฝ, เดตเตเดฏเด•เตเดคเดคเดฏเตเด•เตเด•เดพเดฏเดฟ, เดžเดพเตป เด†เดฆเตเดฏเดคเตเดคเต† เด•เต‡เดธเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เด•เดพเดฐเดฃเด‚ เด‡เดคเต เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเต† เดจเดจเตเดจเดพเดฏเดฟ เดชเตเดฐเดคเดฟเดซเดฒเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เดŸเดพเดธเตเด•เต 1.3

เดกเดฟเดชเตเดชเดพเตผเดŸเตเดŸเตโ€Œเดฎเต†เดจเตเดฑเต เดเดกเดฟเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเด•, 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

เดชเดฐเดฎเดพเดตเดงเดฟ เดฎเตŠเดคเตเดคเด‚ เดœเต€เดตเดจเด•เตเด•เดพเดฐเตเดŸเต† เดถเดฎเตเดชเดณเดฎเตเดณเตเดณ เดกเดฟเดชเตเดชเดพเตผเดŸเตเดŸเตโ€Œเดฎเต†เดจเตเดฑเต เดเดกเดฟเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เด•เดฃเตเดŸเต†เดคเตเดคเตเด•.

เดฑเดฟเดฒเต‡เดทเดฃเตฝ

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();

เดจเดฎเตเด•เตเด•เต เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดœเต‹เดฒเดฟเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚ เดฒเต‡เด–เดจเด™เตเด™เตพ. MS SQL-เตฝ เดˆ เดŸเดพเดธเตโ€Œเด•เต เดŽเด™เตเด™เดจเต† เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเด‚ เดŽเดจเตเดจเดคเดฟเดจเตเดฑเต† เดตเดฟเดถเดฆเดฎเดพเดฏ เดตเดฟเดถเด•เดฒเดจเด‚ เด‡เดคเดฟเตฝ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดŸเดพเดธเตเด•เต 2.1

1997-เตฝ เด‰เตฝเดชเตเดชเดจเตเดจ เดจเดฎเตเดชเตผ 30-เดจเตเดฑเต† 1-เดฒเดงเดฟเด•เด‚ เดฏเต‚เดฃเดฟเดฑเตเดฑเตเด•เตพ เดตเดฟเดฑเตเดฑเดคเต เดเดคเตŠเด•เตเด•เต†เดฏเดพเดฃเต?

เดกเตŠเดฎเต†เดฏเตเตป เดฒเต‹เดœเดฟเด•เต (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;

เดŸเดพเดธเตเด•เต 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;

เดชเดพเตผเดŸเตเดŸเต€เดทเตป เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดคเดคเตเดคเตเดตเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต: SUM (เด‡เดตเดฟเดŸเต† 1), เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด—เตเดฐเต‚เดชเตเดชเตเด•เตพเด•เตเด•เตเดณเตเดณเดฟเตฝ (เด‡เดตเดฟเดŸเต† เด‰เดชเดญเต‹เด•เตเดคเดพเดตเตเด‚ เดตเตผเดทเดตเตเด‚, เดŽเดจเตเดจเดพเตฝ เดเดคเต เดชเดฆเดชเตเดฐเดฏเต‹เด—เดตเตเด‚ เด†เด•เดพเด‚), เด“เตผเดกเดฑเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดณเตเดณ เดŽเด•เตโ€Œเดธเตโ€Œเดชเตเดฐเดทเดจเตเด•เตพ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เด—เตเดฐเต‚เดชเตเดชเตเด•เตพเด•เตเด•เตเดณเตเดณเดฟเตฝ เดคเดฐเด‚เดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเดฆเดชเตเดฐเดฏเต‹เด—เดคเตเดคเต† เด‡เดคเต เดธเด‚เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดตเดฟเดŸเต† เดตเดพเด™เตเด™เดฟ, เดคเตเดฒเตเดฏเดฎเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด†เดจเตเดคเดฐเดฟเด• เด‰เตฝเดชเตเดชเดจเตเดจ เด•เต‹เดกเต เด…เดจเตเดธเดฐเดฟเดšเตเดšเต).

เดŸเดพเดธเตเด•เต 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: เด†เดฆเตเดฏเดคเตเดคเต†เดฏเตเด‚ เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต†เดฏเตเด‚ เดจเด•เตเดทเดคเตเดฐเดšเดฟเดนเตเดจเดคเตเดคเดฟเดฒเต† เดชเตเดฐเดถเตเดจเดคเตเดคเดฟเดจเตเดณเตเดณ เดชเดฐเดฟเดนเดพเดฐเด‚ dss_kalika:

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 

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดคเดจเตเดจเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด†เดถเดฏเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด“เดชเตเดทเดจเตเด•เดณเดฟเตฝ เด’เดจเตเดจเต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดญเดพเดทเดพ เดตเดพเด•เตเดฏเด˜เดŸเดจ เดŽเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต. เดŽเดธเตโ€Œเด•เตเดฏเตเดŽเตฝ เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเดฏเดฟ เดŽเดŸเตเด•เตเด•เดชเตเดชเต†เดŸเตเดŸเต, เด…เดคเดฟเดจเต‹เดŸเต เด•เดดเดฟเดฏเตเดจเตเดจเดคเตเดฐ เดธเดฎเดพเดจเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต เดฒเด•เตเดทเตเดฏเด‚. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดšเดฟเดฒเตผเด•เตเด•เต เด•เต€เดตเต‡เดกเตเด•เดณเตเดŸเต† เดชเต‡เดฐเตเด•เตพ, เดตเต‡เดกเต เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเตเด•เตพ เดฎเตเดคเดฒเดพเดฏเดต เด‡เดทเตเดŸเดชเตเดชเต†เดŸเตเดŸเต‡เด•เตเด•เดฟเดฒเตเดฒ. เด‡เดตเดฟเดŸเต† เดชเตเดฐเดงเดพเดจ เด•เดพเดฐเตเดฏเด‚ เด†เดถเดฏเด‚ เดคเดจเตเดจเต†เดฏเดพเดฃเต. เดตเต‡เดฃเดฎเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต C++, Python เดŽเดจเตเดจเดฟเดตเดฏเตเด‚ เดธเดฎเดพเดจเดฎเดพเดฏ เดตเดพเด•เตเดฏเด˜เดŸเดจ เด‰เดฃเตเดŸเดพเด•เตเด•เดพเด‚.

เดตเดฟเดตเดฐเดฟเดšเตเดš เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด†เดถเดฏเดคเตเดคเดฟเดจเต, เดŽเดจเตเดฑเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตฝ, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด—เตเดฃเด™เตเด™เดณเตเดฃเตเดŸเต:

  • เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเดจเดพเดฏเดฟ. เด‡เดคเต เดคเดพเดฐเดคเดฎเตเดฏเต‡เดจ เด†เดคเตเดฎเดจเดฟเดทเตเด เดฎเดพเดฏ เดธเต‚เดšเด•เดฎเดพเดฃเต, เด‡เดคเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดฒเตเดฒ. เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เตพ เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เด•เต‡เดธเตเด•เตพ เดจเต‹เด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเด•เตเดทเดคเตเดฐเดšเดฟเดนเตเดจเด™เตเด™เดณเตเดฎเดพเดฏเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด™เตเด™เตพ), เดชเดฟเดจเตเดจเต†, เดŽเดจเตเดฑเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตฝ, เด…เดคเตเดคเดฐเด‚ เดšเต‹เดฆเตเดฏเด™เตเด™เตพ เดŽเดดเตเดคเตเดจเตเดจเดคเต เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต.
  • ะ˜ะฝะบะฐะฟััƒะปัั†ะธั. เดšเดฟเดฒ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเดฟเตฝ เดžเดพเตป เด‡เดจเตเดฑเตผเดฎเต€เดกเดฟเดฏเดฑเตเดฑเต เดซเด‚เด—เตโ€Œเดทเดจเตเด•เตพ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเดšเตเดšเต (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดตเดฟเดฑเตเดฑเต, เดตเดพเด™เตเด™เดฟเดฏ เดฎเตเดคเดฒเดพเดฏเดต), เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเต. เดšเดฟเดฒ เดซเด‚เด—เตโ€Œเดทเดจเตเด•เดณเตเดŸเต† เดฒเต‹เดœเดฟเด•เต เดฎเดพเดฑเตเดฑเดพเตป เด‡เดคเต เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต, เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เด…เดตเดฏเต† เด†เดถเตเดฐเดฏเดฟเด•เตเด•เตเดจเตเดจเดตเดฏเตเดŸเต† เดฏเตเด•เตเดคเดฟ เดฎเดพเดฑเตเดฑเดพเดคเต†. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดฟเตฝเดชเตเดชเดจ เดจเดŸเดคเตเดคเดพเด‚ เดตเดฟเดฑเตเดฑเต เดคเดฟเด•เดšเตเดšเตเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏ เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เดฃเด•เตเด•เดพเด•เตเด•เดฟเดฏเดตเดฏเดพเดฃเต, เด…เดคเต‡เดธเดฎเดฏเด‚ เดฏเตเด•เตเดคเดฟเดฏเตเดŸเต† เดฌเดพเด•เตเด•เดฟ เดญเดพเด—เด™เตเด™เตพ เดฎเดพเดฑเดฟเดฒเตเดฒ. เด…เดคเต†, CREATE VIEW เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‡เดคเต เด’เดฐเต RDBMS-เตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเด‚. เดŽเดจเตเดจเดพเตฝ เดŽเดฒเตเดฒเดพ เดฏเตเด•เตเดคเดฟเดฏเตเด‚ เด‡เด™เตเด™เดจเต† เดŽเดดเตเดคเดฟเดฏเดพเตฝ, เด…เดคเต เดตเดณเดฐเต† เดตเดพเดฏเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจเดคเดพเดฏเดฟ เด•เดพเดฃเดฟเดฒเตเดฒ.
  • เดธเต†เดฎเดพเดจเตเดฑเดฟเด•เต เดตเดฟเดŸเดตเดฟเดฒเตเดฒ. เด…เดคเตเดคเดฐเด‚ เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดซเด‚เด—เตเดทเดจเตเด•เดณเดฟเดฒเตเด‚ เด•เตเดฒเดพเดธเตเด•เดณเดฟเดฒเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต (เดชเดŸเตเดŸเดฟเด•เด•เตพเด•เตเด•เตเด‚ เดซเต€เตฝเดกเตเด•เตพเด•เตเด•เตเด‚ เดชเด•เดฐเด‚). เด•เตเดฒเดพเดธเดฟเด•เตเด•เตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเดฒเต†เดจเตเดจเดชเต‹เดฒเต† (เด’เดฐเต เดฐเต€เดคเดฟ เด…เดคเต เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจ เด•เตเดฒเดพเดธเดฟเดจเตเดฑเต† เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด†เดฆเตเดฏเดคเตเดคเต† เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเดณเตเดณ เด’เดฐเต เดซเด‚เด—เตเดทเดจเดพเดฃเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ). เด…เดคเดจเตเดธเดฐเดฟเดšเตเดšเต, เดธเดพเตผเดตเดคเตเดฐเดฟเด• เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเด•เดณเตเดฎเดพเดฏเดฟ "เดธเตเดนเตƒเดคเตเดคเตเด•เตเด•เดณเต† เด‰เดฃเตเดŸเดพเด•เตเด•เตเด•" เดŽเดจเตเดจเดคเต เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เด•เต‚เดŸเดพเดคเต†, เดˆ เด†เดถเดฏเด‚ เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดคเตเดชเต‹เดฒเตเดณเตเดณ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผเดฎเดพเดฐเต† เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดพเด‚:

    CONSTRAINT sold(Employee e, 1, 2019) > 100 IF name(e) = 'ะŸะตั‚ั' MESSAGE  'ะงั‚ะพ-ั‚ะพ ะŸะตั‚ั ะฟั€ะพะดะฐะตั‚ ัะปะธัˆะบะพะผ ะผะฝะพะณะพ ะพะดะฝะพะณะพ ั‚ะพะฒะฐั€ะฐ ะฒ 2019 ะณะพะดัƒ';

  • เดชเดพเดฐเดฎเตเดชเดฐเตเดฏเดตเตเด‚ เดชเต‹เดณเดฟเดฎเต‹เตผเดซเดฟเดธเดตเตเด‚. เด’เดฐเต เดซเด™เตเดทเดฃเตฝ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต CLASS ClassP เดตเดดเดฟ เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เด…เดจเดจเตเดคเดฐเดพเดตเด•เดพเดถเด‚ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚: Class1, Class2 เดจเดฟเตผเดฎเตเดฎเดพเดฃเด™เตเด™เดณเตเด‚ เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เดชเต‹เดณเดฟเดฎเต‹เตผเดซเดฟเดธเดตเตเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. เดญเดพเดตเดฟเดฏเดฟเดฒเต† เดฒเต‡เด–เดจเด™เตเด™เดณเดฟเตฝ เดžเดพเตป เด’เดฐเตเดชเด•เตเดทเต‡ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดŽเด™เตเด™เดจเต† เดŽเดดเตเดคเดพเด‚.

เด‡เดคเตŠเดฐเต เด†เดถเดฏเด‚ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต†เด™เตเด•เดฟเดฒเตเด‚, เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเดชเดฐเดฎเดพเดฏ เดฒเต‹เดœเดฟเด•เตเด•เตเด•เดณเตเด‚ เดฑเดฟเดฒเต‡เดทเดฃเตฝ เดฒเต‹เดœเดฟเด•เตเด•เดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดšเดฟเดฒ เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ เดœเดพเดตเดฏเดฟเตฝ เดจเดฎเตเด•เตเด•เตเดฃเตเดŸเต. เด•เต‚เดŸเดพเดคเต†, เดชเตเดฐเดคเดฟเดจเดฟเดงเดพเดจเด™เตเด™เดณเตเดŸเต† เดฏเตเด•เตเดคเดฟเดฏเตเด‚ เดฎเดฑเตเดฑเต เดชเดฒ เด•เดพเดฐเตเดฏเด™เตเด™เดณเตเด‚ เด…เดคเดฟเดจเต‹เดŸเต เดฎเดจเต‹เดนเดฐเดฎเดพเดฏเดฟ เด˜เดŸเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเต เดจเดจเตเดฆเดฟ เดžเด™เตเด™เตพเด•เตเด•เต เดฎเตŠเดคเตเดคเดคเตเดคเดฟเตฝ เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚. เด…เดŸเดฟเดธเตเดฅเดพเดจเดชเดฐเดฎเดพเดฏเดฟ, เดžเด™เตเด™เตพ RDBMS (เด‡เดชเตเดชเต‹เตพ PostgreSQL เดฎเดพเดคเตเดฐเด‚) เด’เดฐเต "เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป" เด†เดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. FDBMS-เดจเต เด…เดฑเดฟเดฏเดพเดตเตเดจเตเดจ เดšเดฟเดฒ เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเด•เตเด•เดฃเด•เตเด•เตเด•เตพ RDBMS เด…เดจเตเดตเต‡เดทเดฃ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเตผ เด…เดฑเดฟเดฏเดพเดคเตเดคเดคเดฟเดจเดพเตฝ เดˆ เดตเดฟเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เดšเดฟเดฒเดชเตเดชเต‹เตพ เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเด•เดพเดฑเตเดฃเตเดŸเต. เดธเดฟเดฆเตเดงเดพเดจเตเดคเดคเตเดคเดฟเตฝ, เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เดธเดพเดงเดฟเด•เตเด•เตเด‚, เด…เดคเต เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เด˜เดŸเดจ เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เด…เดคเต เดซเด™เตเดทเดฃเตฝ เดฒเต‹เดœเดฟเด•เตเด•เดฟเดจเต เดชเตเดฐเดคเตเดฏเต‡เด•เด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฃเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•