Professional Documents
Culture Documents
Лабораториски Бази 6
Лабораториски Бази 6
Внатрешни
и надворешни обединување.
Условни (CASE) изрази.
Користење на CASE изрази за
создавање на вкрстени упити.
Лабораториска вежба 6
Содржина
За извлекување и обработка на податоци од повеќе од една табела се извршува
обединување на табели, тоа обединување се изразува во комбинирање на колоните на
примарните и надворешните клучеви (на соодветните табели) на соодветните редови. Во
SQL синтакса ANSI - стандардот JOIN има пет типа на операции:
• INNER JOIN
• LEFT JOIN
• RIGHT JOIN
• FULL JOIN
• CROSS JOIN
• Задача
Пример:
1) Упит со кој се извлекуваат имињата на вработените, дати на
продажби, сума од општата вредност на продажбите,
реализирани од соодветниот служител на соодветната дата.
SELECT ProductName,
CASE discontinued
WHEN 0 THEN 'Continued'
WHEN 1 THEN 'Discontinued'
ELSE 'Unknown'
END AS DiscontinuedProducts
FROM Products
II. Синтакса при вториот случај е:
CASE
{WHEN boolean_expression
THEN {value_expression | NULL}}…
[ELSE {value_expression | NULL}]
END
Пример:
SELECT SaleID, ProductID, Quantity, Price,
CASE
WHEN Quantity >= 20 THEN 0.05
WHEN Quantity >= 15 THEN 0.03
WHEN Quantity >= 10 THEN 0.02
ELSE 0
END AS ComputedDiscount
FROM SaleDetails
• CASE изразот во SQL Server се состои од три функции:
NULLIF и COALESCE, кои се дел од ANSI SQL92 -
стандардот; ISNULL е дополнителна функција во SQL Server и
не е дел од ANSI SQL92 - стандардот.
CASE value_expression1
WHEN value_expression2 THEN NULL
ELSE value_expression1
END
• COALESCE го враќа првиот израз, кој не е NULL на списокот со изрази. Ако
сите вредности се NULL, COALESCE враќа NULL. COALESCE
(value_expression1, ..., value_expressionN) може да се запише преку
еквивалентен CASE израз на следниов начин:
CASE
WHEN value_expression1 IS NOT NULL
THEN value_expression1
WHEN value_expression2 IS NOT NULL
THEN value_expression2
…
ELSE value_expressionN
END
Пример: за прикажување на следната вредност во колоната идентификатор на
производ преку изнаоѓање на највисоката тековна вредност во колоната
идентификатор на производ (ProductID) од табелата за производите (Products)
и додавање на единица (може да се користи во конструкција пресметка на
следната вредност на колоната ProductID):
Решение:
CASE StoreName
WHEN 'Some store name'
THEN s.TotalForSale*(1-s.discount)
ELSE 0
END