เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ DBMS

เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจฆเฉเจจเฉ€เจ† เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจฐเจฟเจฒเฉ‡เจธเจผเจจเจฒ เจกเฉ€เจฌเฉ€เจเจฎเจเจธ เจฆเฉเจ†เจฐเจพ เจนเจพเจตเฉ€ เจฐเจนเฉ€ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ 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 เจจเฉ‚เฉฐ เจ‡เจจเจชเฉเจŸ เจตเจœเฉ‹เจ‚ เจฒเฉˆเจ‚เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจฎเฉเฉฑเจขเจฒเฉ€ เจ•เจฟเจธเจฎ เจตเจพเจชเจธ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค

เจ‡เจน เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจเจฒ 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);

เจ•เฉฐเจฎ

เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐเฉ€ เจคเฉฑเจ• เจฒเจฟเจ† เจฎเฉเจ•เจพเจฌเจฒเจคเจจ เจธเจงเจพเจฐเจจ เจธเจฎเฉฑเจธเจฟเจ† เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจ เจฒเฉ‡เจ– Habr 'เจคเฉ‡.

เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ“ เจกเฉ‹เจฎเฉ‡เจจ เจคเจฐเจ• เจฆเฉ€ เจ˜เฉ‹เจธเจผเจฃเจพ เจ•เจฐเฉ€เจ (เจฐเจฟเจฒเฉ‡เจธเจผเจจเจฒ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฒเจˆ เจ‡เจน เจ‰เจชเจฐเฉ‹เจ•เจค เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจธเจฟเฉฑเจงเจพ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ)เฅค

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

เจตเจฟเจญเจพเจ— เจ†เจˆเจกเฉ€ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเฉ‹, เจ•เจฐเจฎเจšเจพเจฐเฉ€เจ†เจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจœเจฟเจธ เจตเจฟเฉฑเจš 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

เจ…เจงเจฟเจ•เจคเจฎ เจ•เฉเฉฑเจฒ เจ•เจฐเจฎเจšเจพเจฐเฉ€ เจคเจจเจ–เจพเจน เจฆเฉ‡ เจจเจพเจฒ เจตเจฟเจญเจพเจ— IDs เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจฒเฉฑเจญเฉ‹.

เจธเฉฐเจฌเฉฐเจงเจค

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 เจคเฉ‹เจ‚ เจตเฉฑเจง เจฏเฉ‚เจจเจฟเจŸ เจตเฉ‡เจšเฉ‡ เจธเจจ?

เจกเฉ‹เจฎเฉ‡เจจ เจคเจฐเจ• (เจ†เจฐเจกเฉ€เจฌเฉ€เจเจฎเจเจธ 'เจคเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจตเจพเจ‚เจ— เจ…เจธเฉ€เจ‚ เจ˜เฉ‹เจธเจผเจฃเจพ เจจเฉ‚เฉฐ เจ›เฉฑเจก เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚):

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) เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจจเจฟเจฐเจฆเจฟเจธเจผเจŸ เจธเจฎเฉ€เจ•เจฐเจจ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆ, เจจเจฟเจธเจผเจšเจฟเจค เจธเจฎเฉ‚เจนเจพเจ‚ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ (เจ‡เฉฑเจฅเฉ‡ เจ—เจพเจนเจ• เจ…เจคเฉ‡ เจธเจพเจฒ, เจชเจฐ เจ•เฉ‹เจˆ เจตเฉ€ เจธเจฎเฉ€เจ•เจฐเจจ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ), ORDER เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ เจธเจฎเฉ€เจ•เจฐเจจเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจธเจฎเฉ‚เจนเจพเจ‚ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ›เจพเจ‚เจŸเฉ€ เจ•เจฐเจฆเจพ เจนเฉˆ ( เจ‡เฉฑเจฅเฉ‡ เจ–เจฐเฉ€เจฆเจฟเจ†, เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจฌเจฐเจพเจฌเจฐ เจนเฉˆ, เจคเจพเจ‚ เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจ‰เจคเจชเจพเจฆ เจ•เฉ‹เจก เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ)เฅค

เจŸเจพเจธเจ• 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_เจ•เจพเจฒเจฟเจ•เจพ:

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 เจฆเฉ‹เจตเฉ‡เจ‚ เจธเจฎเจพเจจ เจธเฉฐเจŸเฉˆเจ•เจธ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจตเจฐเจฃเจฟเจค เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจธเฉฐเจ•เจฒเจช, เจฎเฉ‡เจฐเฉ€ เจฐเจพเจ เจตเจฟเฉฑเจš, เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจซเจพเจ‡เจฆเฉ‡ เจนเจจ:

  • เจธเฉŒเจ–เจพ. เจ‡เจน เจ‡เฉฑเจ• เจฎเฉเจ•เจพเจฌเจฒเจคเจจ เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจธเฉ‚เจšเจ• เจนเฉˆ เจœเฉ‹ เจธเจงเจพเจฐเจจ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจธเจชเฉฑเจธเจผเจŸ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพเฅค เจชเจฐ เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจตเจงเฉ‡เจฐเฉ‡ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจ•เฉ‡เจธเจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเฉ‹ (เจ‰เจฆเจพเจนเจฐเจฃ เจตเจœเฉ‹เจ‚, เจคเจพเจฐเจฟเจ†เจ‚ เจจเจพเจฒ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚), เจคเจพเจ‚, เจฎเฉ‡เจฐเฉ€ เจฐเจพเจ เจตเจฟเฉฑเจš, เจ…เจœเจฟเจนเฉ‡ เจธเจตเจพเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจฟเจ–เจฃเจพ เจฌเจนเฉเจค เจธเฉŒเจ–เจพ เจนเฉˆ.
  • เจ‡เจจเจ•เฉˆเจชเจธเฉ‚เจฒเฉ‡เจธเจผเจจ. เจ•เฉเจ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ เจ‡เฉฐเจŸเจฐเจฎเฉ€เจกเฉ€เจเจŸ เจซเฉฐเจ•เจธเจผเจจ เจ˜เฉ‹เจธเจผเจฟเจค เจ•เฉ€เจคเจพ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจตเฉ‡เจšเจฟเจ†, เจ–เจฐเฉ€เจฆเฉ€ เจ†เจฆเจฟ), เจœเจฟเจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจฆเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจฌเจฃเจพเจ เจ—เจ เจธเจจเฅค เจ‡เจน เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉเจ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจคเจฐเจ• เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจœเฉ‡ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡, เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจคเจฐเจ• เจจเฉ‚เฉฐ เจฌเจฆเจฒเฉ‡ เจฌเจฟเจจเจพเจ‚ เจœเฉ‹ เจ‰เจนเจจเจพเจ‚ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจตเจฟเจ•เจฐเฉ€ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจตเฉ‡เจšเจฟเจ† เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจตเฉฑเจ–เจฐเฉ€เจ†เจ‚ เจตเจธเจคเฉ‚เจ†เจ‚ เจคเฉ‹เจ‚ เจ—เจฟเจฃเจฟเจ† เจ—เจฟเจ† เจธเฉ€, เจœเจฆเฉ‹เจ‚ เจ•เจฟ เจฌเจพเจ•เฉ€ เจคเจฐเจ• เจจเจนเฉ€เจ‚ เจฌเจฆเจฒเฉ‡เจ—เจพเฅค เจนเจพเจ‚, เจ‡เจธเจจเฉ‚เฉฐ CREATE VIEW เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• RDBMS เจตเจฟเฉฑเจš เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจชเจฐ เจœเฉ‡ เจธเจพเจฐเจพ เจคเจฐเจ• เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฒเจฟเจ–เจฟเจ† เจœเจพเจตเฉ‡ เจคเจพเจ‚ เจ‡เจน เจฌเจนเฉเจคเจพ เจชเฉœเฉเจนเจจเจฏเฉ‹เจ— เจจเจนเฉ€เจ‚ เจฒเฉฑเจ—เฉ‡เจ—เจพเฅค
  • เจ•เฉ‹เจˆ เจ…เจฐเจฅเจ—เจค เจ…เฉฐเจคเจฐ เจจเจนเฉ€เจ‚. เจ…เจœเจฟเจนเจพ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจ…เจคเฉ‡ เจ•เจฒเจพเจธเจพเจ‚ (เจŸเฉ‡เจฌเจฒ เจ…เจคเฉ‡ เจซเฉ€เจฒเจกเจพเจ‚ เจฆเฉ€ เจฌเจœเจพเจ) 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ•เจฒเจพเจธเฉ€เจ•เจฒ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจตเจฟเฉฑเจš (เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจ‡เจน เจฎเฉฐเจจ เจฒเจˆเจ เจ•เจฟ เจ‡เฉฑเจ• เจตเจฟเจงเฉ€ เจ•เจฒเจพเจธ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจชเจนเจฟเจฒเฉ‡ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจตเจพเจฒเจพ เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจ เจนเฉˆ เจœเจฟเจธ เจจเจพเจฒ เจ‡เจน เจธเฉฐเจฌเฉฐเจงเจฟเจค เจนเฉˆ)เฅค เจ‡เจธ เจ…เจจเฉเจธเจพเจฐ, เจฏเฉ‚เจจเฉ€เจตเจฐเจธเจฒ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพเจตเจพเจ‚ เจจเจพเจฒ "เจฆเฉ‹เจธเจค เจฌเจฃเจพเจ‰เจฃเจพ" เจฌเจนเฉเจค เจธเฉŒเจ–เจพ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เจน เจธเฉฐเจ•เจฒเจช เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฐเฉ‡เจŸเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจเจฎเจฌเฉ‡เจก เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ:

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

  • เจตเจฟเจฐเจพเจธเจค เจ…เจคเฉ‡ เจชเฉ‹เจฒเฉ€เจฎเฉ‹เจฐเจซเจฟเจœเจผเจฎ. เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจเจฒ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ CLASS ClassP เจฆเฉเจ†เจฐเจพ เจฎเจฒเจŸเฉ€เจชเจฒ เจตเจฟเจฐเจพเจธเจค เจจเฉ‚เฉฐ เจชเฉ‡เจธเจผ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹: Class1, Class2 เจฎเจฒเจŸเฉ€เจชเจฒ เจชเฉ‹เจฒเฉ€เจฎเฉ‹เจฐเจซเจฟเจœเจผเจฎ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจ…เจคเฉ‡ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจฎเฉˆเจ‚ เจธเจผเจพเจ‡เจฆ เจญเจตเจฟเฉฑเจ– เจฆเฉ‡ เจฒเฉ‡เจ–เจพเจ‚ เจตเจฟเฉฑเจš เจฌเจฟเจฒเจ•เฉเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจฒเจฟเจ–เจพเจ‚เจ—เจพ.

เจญเจพเจตเฉ‡เจ‚ เจ‡เจน เจ•เฉ‡เจตเจฒ เจ‡เฉฑเจ• เจงเจพเจฐเจจเจพ เจนเฉˆ, เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ Java เจตเจฟเฉฑเจš เจ•เฉเจ เจฒเจพเจ—เฉ‚เจ•เจฐเจจ เจนเฉˆ เจœเฉ‹ เจธเจพเจฐเฉ‡ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจคเจฐเจ• เจจเฉ‚เฉฐ เจฐเจฟเจฒเฉ‡เจธเจผเจจเจฒ เจคเจฐเจ• เจตเจฟเฉฑเจš เจ…เจจเฉเจตเจพเจฆ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจจเจพเจฒ เจนเฉ€, เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจคเจพเจตเจพเจ‚ เจฆเจพ เจคเจฐเจ• เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจ‡เจธ เจจเจพเจฒ เจธเฉเฉฐเจฆเจฐเจคเจพ เจจเจพเจฒ เจœเฉเฉœเฉ€เจ†เจ‚ เจนเฉ‹เจˆเจ†เจ‚ เจนเจจ, เจœเจฟเจธเจฆเจพ เจงเฉฐเจจเจตเจพเจฆ เจธเจพเจจเฉ‚เฉฐ เจชเฉ‚เจฐเจพ เจฎเจฟเจฒเจฆเจพ เจนเฉˆ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ. เจœเจผเจฐเฉ‚เจฐเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡, เจ…เจธเฉ€เจ‚ RDBMS (เจนเฉเจฃ เจฒเจˆ เจธเจฟเจฐเจซเจผ PostgreSQL) เจจเฉ‚เฉฐ "เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ" เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฆเฉ‡ เจนเจพเจ‚เฅค เจ‡เจธ เจ…เจจเฉเจตเจพเจฆ เจจเจพเจฒ เจ•เจˆ เจตเจพเจฐ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจชเฉˆเจฆเจพ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจ•เจฟเจ‰เจ‚เจ•เจฟ RDBMS เจ•เจฟเจŠเจฐเฉ€ เจ†เจชเจŸเฉ€เจฎเจพเจˆเจœเจผเจฐ เจ•เฉเจ เจ…เฉฐเจ•เฉœเฉ‡ เจจเจนเฉ€เจ‚ เจœเจพเจฃเจฆเจพ เจนเฉˆ เจœเฉ‹ FDBMS เจœเจพเจฃเจฆเจพ เจนเฉˆเฅค เจธเจฟเจงเจพเจ‚เจค เจตเจฟเฉฑเจš, เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจชเฉเจฐเจฌเฉฐเจงเจจ เจชเฉเจฐเจฃเจพเจฒเฉ€ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ เจธเฉฐเจญเจต เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจ• เจ–เจพเจธ เจขเจพเจ‚เจšเฉ‡ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจฆเฉ‡ เจคเฉŒเจฐ เจคเฉ‡ เจตเจฐเจคเฉ‡เจ—เจพ, เจ–เจพเจธ เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจคเจฐเจ• เจฒเจˆ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹