เปเบฅเบเบเบญเบเบเบฒเบเบเปเปเบกเบนเบเปเบเปเบเบทเบเบเบญเบเบเปเบฒเบกเบฒเบเบปเบเบเบฒเบเปเบเบ DBMSs เบเบตเปเบเปเบฝเบงเบเปเบญเบ, เปเบเบดเปเบเปเบเปเบเบฒเบชเบฒ SQL. เบซเบผเบฒเบเบเบฑเปเบเบเบฑเปเบ variants เบเบตเปเบเบปเปเบเปเบเบฑเปเบเบเบทเปเบเบเบทเบเปเบญเบตเปเบเบงเปเบฒ NoSQL. เบเบงเบเปเบเบปเบฒเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเปเบเบฐเบชเบฐเบซเบผเบฑเบเบชเบฐเบเบฒเบเบเบตเปเบชเบฐเปเบเบฒเบฐเปเบเบซเบเบถเปเบเบชเปเบฒเบฅเบฑเบเบเบปเบเปเบญเบเปเบเบเบฐเบซเบผเบฒเบเบเบตเป, เปเบเป DBMSs เบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฐเบเปเปเบเบฒเบ, เปเบฅเบฐเบชเบทเบเบเปเปเบเบทเบเบเปเบฒเปเบเปเบขเปเบฒเบเบเบดเบเบเบฑเบเปเบเบทเปเบญเบเบธเบเบเบฐเบชเบปเบเบเบญเบเปเบเบปเบฒเปเบเบปเปเบฒ.
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเปเบญเบเบเปเบญเบเบเบฒเบเบญเบฐเบเบดเบเบฒเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบ. เบชเปเบฒเบฅเบฑเบเบเบงเบฒเบกเปเบเบปเปเบฒเปเบเบเบตเปเบเบตเบเบงเปเบฒ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเปเบฎเบฑเบเบชเบดเปเบเบเบตเปเปเบเบเบเบฒเบเบเบฝเบเบเบฝเบเบกเบฑเบเบเบฑเบเบเบปเบงเปเบเบเบเบงเบฒเบกเบชเปเบฒเบเบฑเบเบเบฅเบฒเบชเบชเบดเบ. เบเบฑเบเบซเบฒเบเบฒเบเบเบฒเบเบเบปเบเบชเบญเบ SQL เบเปเบฒเบเปเบเบตเปเบเบปเบเปเบซเบฑเบเบขเบนเปเปเบเบญเบดเบเปเบเบตเปเบเบฑเบเบเบฐเบเบทเบเบเปเบฒเปเบเปเปเบเบฑเบเบเบปเบงเบขเปเบฒเบ.
เบเบฒเบเบเปเบฒเบชเบฐเปเบซเบเบต
เบเบฒเบเบเปเปเบกเบนเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเปเบฒเปเบเบตเบเบเบฒเบเบขเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบเปเบฅเบฐเบเบฒเบเบชเบฐเบซเบเบฒเบก. เปเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบ, เบซเปเบญเบเบฎเบฝเบเปเบฅเบฐเบซเบเปเบฒเบเบตเปเบเบฐเบเบทเบเปเบเปเปเบเบ, เบเบฒเบกเบฅเปเบฒเบเบฑเบ. เบเปเบญเบเบเปเปเบกเบนเบเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบกเบตเบเบธเปเบก N เบเบฐเบเบทเบเบชเบฐเปเบเบเปเบเบฑเบเบซเบเปเบฒเบเบตเปเบเบญเบ N เบเบฒเบฅเบฒเบกเบดเปเบเบต. เปเบเบเบเบตเปเบเบฐเปเบเบฑเบเบเบฒเบเบเบปเบงเบเบฑเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบ, เบเบฑเบเบเบฑเบเบเบฐเบเบทเบเบเปเบฒเปเบเปเบเบตเปเบชเบปเปเบเบเบทเบเบงเบฑเบเบเบธเบเบญเบเบเบฑเปเบเบเบตเปเปเบเบทเปเบญเบกเบเปเป. เบญเบปเบเบเบฐเบเบญเบเบเบฑเบเบเบฑเบเบเบฐเบเบทเบเปเบเปเปเบเบ JOIN.
เบเปเบญเบเบเบตเปเบเบฐเปเบเบทเปเบญเบเบเปเบฒเบเปเบเบเบเบปเบเบเบฑเบเบงเบฝเบเบเบฒเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบญเบฐเบเบดเบเบฒเบเบงเบฝเบเบเบฒเบเบเบญเบเปเบซเบเบเบปเบเบเบญเบเปเบเปเบกเบ. เบชเปเบฒเบฅเบฑเบ DDL เบเปเบญเบเบเบฐเปเบเป syntax PostgreSQL. เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบ, เบกเบฑเบเบกเบต syntax เบเบญเบเบเบปเบเปเบญเบ.
เบเบฒเบเบฐเบฅเบฒเบเปเบฅเบฐเบเบฒเบเบชเบฐเบซเบเบฒเบก
เบงเบฑเบเบเบธ 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 เปเบเบฑเบ input เปเบฅเบฐเบชเบปเปเบเบเบทเบเปเบเบฑเบเบเบฐเปเบเบ primitive.
เบกเบฑเบเบชเบปเบกเบกเบธเบเบงเปเบฒเปเบ 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?
เปเบซเบเบเบปเบเบเบญเบเปเบเปเบกเบ (เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเปเบ 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;
เบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบ PARTITION เปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบซเบผเบฑเบเบเบฒเบเบเปเปเปเบเบเบตเป: เบกเบฑเบเบฅเบงเบกเปเบญเบปเบฒเบเบฒเบเบชเบฐเปเบเบเบญเบญเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเบซเบผเบฑเบเบเบฒเบ 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: เบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเบกเบตเบเบฒเบงเบเปเบฒเบญเบดเบเปเบฅเบฐเบเบตเบชเบญเบเบเบฒเบ
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
เบชเบฐเบซเบฅเบธเบ
เบกเบฑเบเบเบงเบเบเบฐเบชเบฑเบเปเบเบเบงเปเบฒ syntax เบเบฒเบชเบฒเบเบตเปเปเบเบฑเบเบเบฝเบเปเบเปเบซเบเบถเปเบเปเบเบเบฒเบเปเบฅเบทเบญเบเปเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบตเปเปเบซเป. SQL เปเบเปเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบฑเบเบเบทเปเบเบเบฒเบ, เปเบฅเบฐเปเบเบปเปเบฒเบซเบกเบฒเบเปเบกเปเบเปเบเบทเปเบญเปเบซเปเบกเบฑเบเบเปเบฒเบเบเบทเบเบฑเบเปเบเบปเปเบฒเบเบตเปเปเบเบฑเบเปเบเปเบเป. เปเบเปเบเบญเบ, เบเบฒเบเบเบปเบเบญเบฒเบเบเบฐเบเปเปเบกเบฑเบเบเบทเปเบเบญเบเบเปเบฒเบซเบฅเบฑเบ, เบเบฑเบเบเบถเบเบเปเบฒ, เปเบฅเบฐเบญเบทเปเบเป. เบชเบดเปเบเบเบตเปเบชเปเบฒเบเบฑเบเบขเบนเปเบเบตเปเบเบตเปเปเบกเปเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบเบกเบฑเบเปเบญเบ. เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบ syntax เบเปเบฒเบเบเบทเบเบฑเบ C ++ เปเบฅเบฐ Python.
เปเบเบงเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเบญเบฐเบเบดเบเบฒเบ, เปเบเบเบงเบฒเบกเบเบดเบเปเบซเบฑเบเบเบญเบเบเปเบญเบ, เบกเบตเบเปเปเบเบตเบเบฑเปเบเบเปเปเปเบเบเบตเป:
- เบเบงเบฒเบกเบชเบฐเบเบงเบ. เบเบตเปเปเบกเปเบเบเบปเบงเบเบตเปเบงเบฑเบเบเบตเปเบเปเบญเบเบเปเบฒเบเบเบตเปเบเปเปเบเบฑเบเปเบเบเปเบเบเปเบฅเบฐเบเบตเบเปเบฒเบเป. เปเบเปเบเปเบฒเบเปเบฒเบเปเบเบดเปเบเบเปเบฅเบฐเบเบตเบเบตเปเบชเบฑเบเบชเบปเบเบซเบผเบฒเบ (เบเบปเบงเบขเปเบฒเบ, เบเบฑเบเบซเบฒเบเบฑเบเบเบฒเบง), เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เปเบเบเบงเบฒเบกเบเบดเบเปเบซเบฑเบเบเบญเบเบเปเบญเบ, เบเบฒเบเบเบฝเบเปเบเบเบชเบญเบเบเบฒเบกเบเบฑเปเบเบเปเบฒเบงเปเบกเปเบเบเปเบฒเบเบเบถเปเบเบซเบผเบฒเบ.
- เบฅเบฒเบเบฐเบฅเบฐเบญเบฝเบ. เปเบเบเบฒเบเบเบปเบงเบขเปเบฒเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฐเบเบฒเบเบซเบเปเบฒเบเบตเปเบฅเบฐเบเบฑเบเบเบฒเบ (เบเบปเบงเบขเปเบฒเบ: เบเบฒเบเปเบเป, เบเบทเปเปเบเป เปเบฅเบฐเบญเบทเปเบเป), เบเบฒเบเบซเบเปเบฒเบเบตเปเบเปเปเบกเบฒเปเบเปเบเบทเบเบชเปเบฒเบเบเบถเปเบ. เบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฝเบเปเบซเบเบเบปเบเบเบญเบเบซเบเปเบฒเบเบตเปเบชเบฐเปเบเบฒเบฐเปเบเบซเบเบถเปเบ, เบเปเบฒเบเปเบฒเปเบเบฑเบ, เปเบเบเบเปเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบซเบเบเบปเบเบเบญเบเบชเบดเปเบเบเบตเปเบเบถเปเบเบเบฑเบเบเบงเบเบกเบฑเบ. เบเบปเบงเบขเปเบฒเบ, เปเบเบปเปเบฒเบชเบฒเบกเบฒเบเบเบฒเบเปเบเป เบเบฒเบเปเบเป เปเบเปเบเบทเบเบเบดเบเปเบฅเปเบเบฒเบเบงเบฑเบเบเบธเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบซเบกเบปเบ, เปเบเบเบฐเบเบฐเบเบตเปเบชเปเบงเบเบเบตเปเปเบซเบผเบทเบญเบเบญเบเปเบซเบเบเบปเบเบเบฐเบเปเปเบเปเบฝเบเปเบเบ. เปเบกเปเบเปเบฅเปเบง, เบเบตเปเบชเบฒเบกเบฒเบเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบ RDBMS เปเบเบเปเบเป CREATE VIEW. เปเบเปเบเปเบฒเปเบซเบเบเบปเบเบเบฑเบเบซเบกเบปเบเบเบทเบเบเบฝเบเบเปเบงเบเบงเบดเบเบตเบเบตเป, เบกเบฑเบเบเบฐเปเบเบดเปเบเบเปเปเปเบเปเบญเปเบฒเบเบซเบผเบฒเบ.
- เบเปเปเบกเบตเบเปเบญเบเบซเบงเปเบฒเบ semantic. เบเบฒเบเบเปเปเบกเบนเบเบเบฑเปเบเบเปเบฒเบงเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฝเบงเบเบฑเบเบซเบเปเบฒเบเบตเปเปเบฅเบฐเบเบฑเปเบเบฎเบฝเบ (เปเบเบเบเบตเปเบเบฐเปเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบเปเบฅเบฐเบเบฒเบเบชเบฐเบซเบเบฒเบก). เบเบทเบเบฑเบเบเบฑเบเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบฅเบฒเบชเบชเบดเบ (เบเปเบฒเบเบงเบเปเบฎเบปเบฒเบชเบปเบกเบกเบธเบเบงเปเบฒเบงเบดเบเบตเบเบฒเบเปเบกเปเบเบซเบเปเบฒเบเบตเปเบเบตเปเบกเบตเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเปเบฒเบญเบดเบเปเบเบฎเบนเบเปเบเบเบเบญเบเบซเปเบญเบเบฎเบฝเบเบเบตเปเบกเบฑเบเบเบถเปเบเบเบฑเบ). เบเบฒเบกเบเบฑเปเบเปเบฅเปเบง, เบกเบฑเบเบเบงเบเบเบฐเบเปเบฒเบเบเบถเปเบเบซเบผเบฒเบเบเบตเปเบเบฐ โเบชเปเบฒเบเปเบเบทเปเบญเบโ เบเปเบงเบเบเบฒเบชเบฒเบเบฒเบเบเบฝเบเปเบเบฃเปเบเบฃเบกเบเบปเปเบงเปเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เปเบเบงเบเบงเบฒเบกเบเบดเบเบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบฐเบเบดเบเบฑเบเบซเบเปเบฒเบเบตเปเบชเบฐเบฅเบฑเบเบชเบฑเบเบเปเบญเบเบซเบผเบฒเบ. เบเบปเบงเบขเปเบฒเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเบฑเปเบ:
CONSTRAINT sold(Employee e, 1, 2019) > 100 IF name(e) = 'ะะตัั' MESSAGE 'ะงัะพ-ัะพ ะะตัั ะฟัะพะดะฐะตั ัะปะธัะบะพะผ ะผะฝะพะณะพ ะพะดะฝะพะณะพ ัะพะฒะฐัะฐ ะฒ 2019 ะณะพะดั';
- เบกเปเบฅเบฐเบเบปเบเปเบฅเบฐ polymorphism. เปเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบฐเบเปเบฒเบเบฒเบเบชเบทเบเบเบญเบเบซเบผเบฒเบเปเบเบเบเปเบฒเบ CLASS ClassP: Class1, Class2 เบเบฒเบเบเปเปเบชเปเบฒเบเปเบฅเบฐเบเบฐเบเบดเบเบฑเบเบซเบผเบฒเบ polymorphism. เบเปเบญเบเบญเบฒเบเบเบฐเบเบฝเบเปเบเบงเปเบเปเบเปเปเบเบเบปเบเบเบงเบฒเบกเปเบเบญเบฐเบเบฒเบเบปเบ.
เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบตเปเปเบกเปเบเบเบฝเบเปเบเปเปเบเบงเบเบงเบฒเบกเบเบดเบ, เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบขเปเบฒเบเปเบ Java เบเบตเปเปเบเปเบซเบเบเบปเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบเบฑเบเบซเบกเบปเบเปเบเบปเปเบฒเปเบเปเบเปเบซเบเบเบปเบเบเบตเปเบเปเบฝเบงเบเปเบญเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เปเบซเบเบเบปเบเบเบญเบเบเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเปเบฅเบฐเบชเบดเปเบเบญเบทเปเบเปเบซเบผเบฒเบเปเบกเปเบเบเบดเบเบเบฑเบเบกเบฑเบเบเบตเปเบชเบงเบเบเบฒเบก, เบเบญเบเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบฑเบเบซเบกเบปเบ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com