SELECT *
FROM Z_OUT_IN_01
WHERE JAMI_KELGAN IS NULL OR QOLGAN<0
|
TOVAR_ID
|
|
|
TOVAR_NAME
|
|
|
EDIN_NAME
|
|
|
JAMI_KELGAN
|
|
|
SOTILGAN
|
|
|
QOLGAN
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
|
|
Карам
|
|
Кг
|
|
70
|
|
91
|
|
-21
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6
|
|
Олма
|
|
Кг
|
|
20
|
|
70
|
|
-50
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
|
Нок
|
|
Кг
|
|
30
|
|
59
|
|
-29
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9
|
|
Гилос
|
|
Кг
|
|
NULL
|
|
39
|
|
NULL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11
|
|
|
Ананас
|
|
Кг
|
|
10
|
|
44
|
|
-34
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12
|
|
|
Банан
|
|
Д
|
|
60
|
|
83
|
|
-23
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13
|
|
|
Киви
|
|
Кг
|
|
25
|
|
30
|
|
-5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17
|
|
|
Кўй гўшти
|
|
Д
|
|
30
|
|
61
|
|
-31
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18
|
|
|
Товук гўшти
|
|
Д
|
|
40
|
|
56
|
|
-16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20
|
|
|
Дудланган гўшт
|
|
Д
|
|
40
|
|
45
|
|
-5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27
|
|
|
Патир
|
|
Д
|
|
60
|
|
99
|
|
-39
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Topshiriqlarni bajaring va ballarni qo‘lga kiriting.
Topshiriqlarni alohida “Topshiriq savollari” jildidan olishingiz mumkin
17-18- Laboratoriya ishi
Mavzu: SQLda funksiyalar yaratish. SQLda triggerlar yaratish
Amaliy masalaning nomi: MySQL MBBTda Savdo markazlari ma’lumotlar bazasida maxsus amallarni bajarish uchun saqlanuvchi funksiya va protseduralar yaratish, shuningdek, MBda jarayonlarni bajarilishini nazorat qiluvchi triggerlar ishlab chiqish
Masalaning qo‘yilishi: Savdo markazlari MBni bilan ishlashda maxsus funksiyalar va protseduralar hamda voqealiqlarga asoslangan triggerlarni yaratish va ulardan foydalanish.
Saqlanuvchi funksiyalar
SQL da standart funksiyalar agregat, vaqtga bog‘liq, matematik, satrli kabi bir nechta turlarga ajratiladi. Umumiy holda funksiya qaytaruvchi qiymat bir nechta yozuv qiymatlari asosida amalga oshirilishi agregat funksiya, aks holda bitta yozuv qiymatlarini argument sifatida qayta ishlash stanlart funksiya bo‘lib hisoblanadi. Misol uchun agregat funksiyalarga Max, Min, Avg, Count, Sum kabilar, standart funksiyalarga
Now, Year, Day, Strlen, Concat, Rpad, Trim кабилар киради.
Eslatma: SQL tilida funksiyalar SELECT operatori orqali va\yoki uning tarkibida ishlatiladi. Misol uchun Select now().
MB bilan ishlashda shunday xolatlar bo‘lishi mumkinki, bunda ish samaradorligini osonlashtirish yoki maxsus xisoblashlarni olib borishda mavjud funksiyalar masalani yecha olmaydi. Bunday xolatlarda foydalanuvchi ko‘rsatilgan MBda doimiy saqlanuvchi yangi funksiya yaratishi va unidan istalgan vaqtda foydalanishi mumkin.
Mazkur bo‘limda maxsus saqlanuvchi funksiyalarni yaratish va undan foydalanish masalasini qarab o‘tiladi. Saqlanuvchi funksiyani yaratish sintaksisi
FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body func_parameter:
param_name type
characteristic: COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
Amaliy masala uchun MB jadvaldagi ma’lum ustunlardagi foizlar natijalariga qiymat qaytaruvchi funksiya yaratish olinsin
Yuqorida savdo majmuasiga kelgan tovarlar hisobini Z_INPUT_JAMI va umumiy sotilgan tovarlar hisobini Z_OUTPUT_JAMI1 tasavvurlarda saqlagan edi.
Endi ushbu hisobot tasavvurlardan foydalangan holda savdo majmuasiga kirgan tovarlarning rejalashtirilgan o‘rtacha sotish narxidan qancha foiz foyda bilan sotilganini aniqlash so‘rovini ishlab chiqish talab etilgan bo‘lsin. Bunda kelish narxidan past sotilgan tovarlarga “zararli foydali”, 0-10% foyda bilan sotilgan tovarlarga “kam foydali”, 10-20% foydali tovarlarga “yaxshi foydali” va 20%dan yuqori foyda ko‘rilganlarga “yuqori foydali” tovar degan yozuvlar chiqaruvchi funksiyadan foydalanish talab etilsin
Buning uchun dastlab savdo majmuasiga kirgan tovarlarning o‘rtacha donalab va ko‘tara sotish rejalari baholari hamda shuningdek, sotilganlarni tovarlarning donalab va ko‘tara sotilishning o‘rtacha narxlarini hisoblovchi yangi so‘rov shakllantiriladi.
CREATE VIEW Z_OUT_IN_TOVAR_BAXO AS
SELECT I.TOVAR_ID, I.TOVAR_NAME,
I.JAMI_KELGAN AS SON_KELGAN,
ROUND(I.REJA_DONALAB_SOTISH/I.JAMI_KELGAN) AS REJA_DONA,
ROUND(I.REJA_KUTARA_SOTISH/I.JAMI_KELGAN) AS REJA_KUTARA,
O.JAMI_DONALAB_SOTILGAN AS SON_SOTILGAN_DONA,
IF(O.JAMI_DONALAB_SOTILGAN<>0,
ROUND(O.JAMI_DONALAB_SOTILGAN_BAXO/O.JAMI_DONALAB_SOTILGAN), 0) AS
SOTISH_DONA,
O.JAMI_KUTARA_SOTILGAN AS SON_SOTILGAN_KUTARA,
IF(O.JAMI_KUTARA_SOTILGAN<>0,
ROUND(O.JAMI_KUTARA_SOTILGAN_BAXO/O.JAMI_KUTARA_SOTILGAN), 0) AS
SOTISH_KUTARA
FROM Z_OUTPUT_JAMI1 O
INNER JOIN Z_INPUT_JAMI I ON O.TOVAR_ID = I.TOVAR_ID
0>
Do'stlaringiz bilan baham: |