เชกเซเชเชพเชฌเซเชเชจเซ เชฆเซเชจเชฟเชฏเชพเชฎเชพเช เชฒเชพเชเชฌเชพ เชธเชฎเชฏเชฅเซ เชฐเซเชฒเซเชถเชจเชฒ เชกเซเชฌเซเชเชฎเชเชธเชจเซเช เชตเชฐเซเชเชธเซเชต เชเซ, เชเซ 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);
เชเชพเชฐเซเชฏเซ
เชเชพเชฒเซ เช
เชจเซเชฐเซเชชเชฎเชพเชเชฅเซ เชฒเซเชตเชพเชฎเชพเช เชเชตเซเชฒเซ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช เชธเชฐเชณ เชธเชฎเชธเซเชฏเชพเชเชฅเซ เชชเซเชฐเชพเชฐเชเชญ เชเชฐเซเช
เชชเซเชฐเชฅเชฎ, เชเชพเชฒเซ เชกเซเชฎเซเชจ เชฒเซเชเชฟเช เชเชพเชนเซเชฐ เชเชฐเซเช (เชฐเชฟเชฒเซเชถเชจเชฒ เชกเซเชเชพเชฌเซเช เชฎเชพเชเซ เช เชเชชเชฐเชจเชพ เชฒเซเชเชฎเชพเช เชธเซเชงเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ).
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
เชฎเชนเชคเซเชคเชฎ เชเซเชฒ เชเชฐเซเชฎเชเชพเชฐเซ เชชเชเชพเชฐ เชธเชพเชฅเซ เชตเชฟเชญเชพเช 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) เชชเชเซ เชเชฒเซเชฒเซเชเชฟเชค เช เชญเชฟเชตเซเชฏเชเซเชคเชฟเชจเซ เชธเชฐเชตเชพเชณเซ เชเชฐเซ เชเซ, เชเชฒเซเชฒเซเชเชฟเชค เชเซเชฅเซเชฎเชพเช (เช เชนเซเช เชเซเชฐเชพเชนเช เช เชจเซ เชตเชฐเซเชท, เชชเชฐเชเชคเซ เชเซเชเชชเชฃ เช เชญเชฟเชตเซเชฏเชเซเชคเชฟ เชนเซเช เชถเชเซ เชเซ), 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: เชชเซเชฐเชฅเชฎ เช
เชจเซ เชฌเซเชเชพ เชซเซเชฆเชกเซ เชธเชพเชฅเซ เชธเชฎเชธเซเชฏเชพเชจเซเช เชธเชฎเชพเชงเชพเชจ
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 เชฌเชเชจเซ เชธเชฎเชพเชจ เชธเชฟเชจเซเชเซเชเซเชธ เชฌเชจเชพเชตเซ เชถเชเซ เชเซ.
เชตเชฐเซเชฃเชตเซเชฒ เชกเซเชเชพเชฌเซเช เชเซเชฏเชพเชฒ, เชฎเชพเชฐเชพ เชฎเชคเซ, เชจเซเชเซเชจเชพ เชซเชพเชฏเชฆเชพเช เชงเชฐเชพเชตเซ เชเซ:
- เชธเชฐเชณ. เช เชชเซเชฐเชฎเชพเชฃเชฎเชพเช เชตเซเชฏเชเซเชคเชฟเชฒเชเซเชทเซ เชธเซเชเช เชเซ เชเซ เชธเชฐเชณ เชเซเชธเซเชฎเชพเช เชธเซเชชเชทเซเช เชจเชฅเซ. เชชเชฐเชเชคเซ เชเซ เชคเชฎเซ เชตเชงเซ เชเชเชฟเชฒ เชเซเชธเซ เชเซเช (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชซเซเชฆเชกเซ เชธเชพเชฅเซเชจเซ เชธเชฎเชธเซเชฏเชพเช), เชคเซ เชชเชเซ, เชฎเชพเชฐเชพ เชฎเชคเซ, เชเชตเชพ เชชเซเชฐเชถเซเชจเซ เชฒเชเชตเชพ เชเซเชฌ เชธเชฐเชณ เชเซ.
- เชเชจเซเชเชชเซเชธเซเชฒเซเชฒเซเชถเชจ. เชเซเชเชฒเชพเช เชเชฆเชพเชนเชฐเชฃเซเชฎเชพเช เชฎเซเช เชฎเชงเซเชฏเชตเชฐเซเชคเซ เชเชพเชฐเซเชฏเซ เชเชพเชนเซเชฐ เชเชฐเซเชฏเชพ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชตเซเชเซ, เชเชฐเซเชฆเซ เชตเชเซเชฐเซ), เชเซเชฎเชพเชเชฅเซ เช เชจเซเชเชพเชฎเซ เชเชพเชฐเซเชฏเซ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชนเชคเชพ. เช เชคเชฎเชจเซ เชเซเชเซเชเชธ เชเชพเชฐเซเชฏเซเชจเชพ เชคเชฐเซเชเชจเซ เชฌเชฆเชฒเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ, เชเซ เชเชฐเซเชฐเซ เชนเซเชฏ เชคเซ, เชคเซเชฎเชจเชพ เชชเชฐ เชจเชฟเชฐเซเชญเชฐ เชฒเซเชเซเชจเชพ เชคเชฐเซเชเชจเซ เชฌเชฆเชฒเซเชฏเชพ เชตเชฟเชจเชพ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชคเชฎเซ เชตเซเชเชพเชฃ เชเชฐเซ เชถเชเซ เชเซ เชตเซเชเซ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เช เชฒเช เชตเชธเซเชคเซเชเชฎเชพเชเชฅเซ เชเชฃเชคเชฐเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ, เชเซเชฏเชพเชฐเซ เชฌเชพเชเซเชจเชพ เชคเชฐเซเช เชฌเชฆเชฒเชพเชถเซ เชจเชนเซเช. เชนเชพ, เช RDBMS เชฎเชพเช CREATE VIEW เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชฎเชฒ เชเชฐเซ เชถเชเชพเชฏ เชเซ. เชชเชฃ เชเซ เชคเชฎเชพเชฎ เชคเชฐเซเช เช เชฐเซเชคเซ เชฒเชเชตเชพเชฎเชพเช เชเชตเซ เชคเซ เชคเซ เชฌเชนเซ เชตเชพเชเชเชตเชพ เชเซเชตเซเช เชจเชนเชฟ เชฒเชพเชเซ.
- เชเซเช เชธเชฟเชฎเซเชจเซเชเซเช เชเซเชช เชจเชฅเซ. เชเชตเชพ เชกเซเชเชพเชฌเซเช เชเชพเชฐเซเชฏเซ เช
เชจเซ เชตเชฐเซเชเซ (เชเซเชทเซเชเชเซ เช
เชจเซ เชเซเชทเซเชคเซเชฐเซเชจเซ เชฌเชฆเชฒเซ) เชชเชฐ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ. เชเซเชฒเชพเชธเชฟเชเชฒ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเชเชจเซ เชเซเชฎ เช (เชเซ เชเชชเชฃเซ เชงเชพเชฐเซเช เชเซ เชชเชฆเซเชงเชคเชฟ เช เชตเชฐเซเชเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชชเซเชฐเชฅเชฎ เชชเชฐเชฟเชฎเชพเชฃ เชธเชพเชฅเซเชจเซเช เชซเชเชเซเชถเชจ เชเซ เชเซเชจเซ เชคเซ เชธเชเชฌเชเชง เชเซ). เชคเชฆเชจเซเชธเชพเชฐ, เชธเชพเชฐเซเชตเชคเซเชฐเชฟเช เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เชญเชพเชทเชพเช เชธเชพเชฅเซ "เชฎเชฟเชคเซเชฐเซ เชฌเชจเชพเชตเชตเชพ" เชเซเชฌ เชธเชฐเชณ เชนเซเชตเซเช เชเซเชเช. เชตเชงเซเชฎเชพเช, เช เชเซเชฏเชพเชฒ เชตเชงเซ เชเชเชฟเชฒ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพเชจเซ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพ เชฎเชพเชเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชคเชฎเซ เชเชชเชฐเซเชเชฐเซเชจเซ เชเชฎเซเชฌเซเชก เชเชฐเซ เชถเชเซ เชเซ เชเซเชฎ เชเซ:
CONSTRAINT sold(Employee e, 1, 2019) > 100 IF name(e) = 'ะะตัั' MESSAGE 'ะงัะพ-ัะพ ะะตัั ะฟัะพะดะฐะตั ัะปะธัะบะพะผ ะผะฝะพะณะพ ะพะดะฝะพะณะพ ัะพะฒะฐัะฐ ะฒ 2019 ะณะพะดั';
- เชตเชพเชฐเชธเซ เช เชจเซ เชชเซเชฒเซเชฎเซเชฐเซเชซเชฟเชเชฎ. เชเชพเชฐเซเชฏเชพเชคเซเชฎเช เชกเซเชเชพเชฌเซเชเชฎเชพเช, เชคเชฎเซ CLASS ClassP เชฆเซเชตเชพเชฐเชพ เชฌเชนเซเชตเชฟเชง เชตเชพเชฐเชธเชพ เชฆเชพเชเชฒ เชเชฐเซ เชถเชเซ เชเซ: Class1, Class2 เชฌเชนเซเชตเชฟเชง เชชเซเชฒเชฟเชฎเซเชฐเซเชซเชฟเชเชฎเชจเซเช เชจเชฟเชฐเซเชฎเชพเชฃ เช เชจเซ เช เชฎเชฒเซเชเชฐเชฃ เชเชฐเซ เชเซ. เชนเซเช เชเชฆเชพเช เชญเชตเชฟเชทเซเชฏเชจเชพ เชฒเซเชเซเชฎเชพเช เชฌเชฐเชพเชฌเชฐ เชเซเชตเซ เชฐเซเชคเซ เชฒเชเซเชถ.
เช เชฎเชพเชคเซเชฐ เชเช เชเซเชฏเชพเชฒ เชนเซเชตเชพ เชเชคเชพเช, เช
เชฎเชพเชฐเซ เชชเชพเชธเซ Java เชฎเชพเช เชชเชนเซเชฒเชพเชฅเซ เช เชเซเชเชฒเชพเช เช
เชฎเชฒเซเชเชฐเชฃ เชเซ เชเซ เชคเชฎเชพเชฎ เชเชพเชฐเซเชฏเชพเชคเซเชฎเช เชคเชฐเซเชเชจเซ เชฐเชฟเชฒเซเชถเชจเชฒ เชฒเซเชเชฟเชเชฎเชพเช เช
เชจเซเชตเชพเชฆเชฟเชค เชเชฐเซ เชเซ. เชเชชเชฐเชพเชเชค, เชฐเชเซเชเชคเซเชจเชพ เชคเชฐเซเช เช
เชจเซ เช
เชจเซเชฏ เชเชฃเซ เชฌเชงเซ เชตเชธเซเชคเซเช เชคเซเชจเซ เชธเชพเชฅเซ เชธเซเชเชฆเชฐ เชฐเซเชคเซ เชเซเชกเชพเชฏเซเชฒ เชเซ, เชเซเชจเซ เชเชญเชพเชฐ เชเชชเชฃเชจเซ เชธเชเชชเซเชฐเซเชฃ เชฎเชณเซ เชเซ.
เชธเซเชฐเซเชธ: www.habr.com