Agregat funktsiyasi - Berdiyev B. Mirzayev I. Ma’lumotlar bazasini boshqarish tizimlari

|
Berdiyev B. Mirzayev I. Ma’lumotlar bazasini boshqarish tizimlari
|
bet | 6/17 | Sana | 27.12.2023 | Hajmi | 1,22 Mb. | | #128650 |
Bog'liq MBBTAgregat funktsiyasi
Agregat funktsiyasi argument sifatida har qanday ma'lumotlar ustunini to'liq qabul qiladi va ma'lum bir tarzda ushbu ustunni sarhisob qiladigan bitta qiymatni qaytaradi.
SUM (ifoda | [DISTINCT] ustun_nomi) - [turli] raqamli qiymatlarning yig'indisi
AVG (ifoda | [DISTINCT] ustun_nomi) - [turli] raqamli qiymatlarning o'rtacha qiymati
MIN (ifoda | ustun_nomi) - barcha qiymatlar orasida eng kichigi
MAX (ifoda | ustun_nomi) - barcha qiymatlar orasida eng kattasi
COUNT ([DISTINCT] ustun nomi) - ustundagi qiymatlar sonini hisoblaydi
COUNT (*) - so'rov natijalari jadvalidagi qatorlar sonini hisoblaydi
Eslatma: umumiy funktsiyalarni WHERE bandida qo'llash mumkin emas
1-misol. Talabalar stipendiyasining umumiy, o'rtacha, minimal va maksimal qiymatini toping.
SELECT SUM(st Stipend) Asm, AVR(stStipend) AS Av, MIN(stStipend) AS Mn, МАХ(stStipend) ASMx FROM Students
2-misol. Stipendiya olgan talabalar sonini toping.
SELECT COUNT(*) AS Cnt FROM Students WHERE stStipend > 0
Natijalarni saralash so’rovi. ORDER BY
qaerda, ASC – ortib borayotgan, DESC-kamayib borayotgan tartiblash tartibi.
Misol. Ki-125 guruhidagi talabalarning familiyalari ro'yxatini teskari alifbo tartibida ko'rsating.
SELECT sname FROM Students, Groups WHERE Students.stNum = roups.grNum AND Groups.grName = 'ki-125' ORDER BY name DESC
Guruhlash bilan so'rovlar. GROUP BY taklifi
GROUP BY iborasidan foydalanish satrlarni belgilangan maydon qiymatlari bir xil bo'lgan guruhlarga guruhlash imkonini beradi:
gr Name ORDER BY grName GROUP BY grName
KI-121 KI-101 KI-101
PI-111 = KI-121 = KI-121
KI-101 KI-121 PI-111
KI-121 PI-111
GROUP BY taklifidan so'ng olingan guruhlarga har qanday standart agregat funktsiyalari qo'llanilishi mumkin.
1-misol. Talabalar ro'yxatini va ularning o'rtacha ballini oling.
SELECT sname, AVG(mark) AS AvgMark FROM Students, Marks WHERE Students.stNum = Marks.stNum GROUP BY stName
Eslatma. GROUP BY bo'limini o'z ichiga olgan SELECT operatorining tanlangan maydonlari ro'yxatida faqat guruhlash shartiga kiritilgan agregat funksiyalari va maydonlarni kiritish mumkin.
Bir nechta ustunlarni guruhlash:
Misol. Talabalar ro'yxatini va ularning har bir semestr uchun o'rtacha ballini oling.
SELECT sname, semestr, AVG(mark) AS AvgMark
FROM Students, Marks
WHERE Students.stNum = Marks.stNum
GROUP BY stName, semestr
Guruhlash ustunlaridagi NULL qiymatlari
Bir xil guruhlash ustunlarida NULL va boshqa barcha guruhlash ustunlarida bir xil qiymatlarga ega bo'lgan satrlar bitta guruhga joylashtiriladi.
Guruhlarni qidirish shartlari. HAVING taklifi:
GROUP BY bilan birgalikda ishlatiladigan HAVING taklifi shartni qondirmaydigan guruhlarni natijadan chiqarib tashlashga imkon beradi (xuddi WHERE kabi qatorlarni chiqarib tashlashga imkon beradi).
1-misol. Talabalar soni 15 dan kam bo'lgan KI mutaxassisliklari guruhlari ro'yxatini oling.
SELECT gr Name, COUNT(*) AS Cnt Students FROM Students, Groups WHERE Students.gtNum = Groups.grNum AND Groups.grName LIKE ‘КI%’GROUP BY grName HAVING COUNT(*) < 15
Ichma ich joylashgan so’rovlar:
Ichki so'rov - bu boshqa SQL bayonotining WHERE yoki HAVING bandidagi so'rov.
1-misol. 4 dan kichik ball olingan fanlarr ro'yxatini saralang.
SELECT subname FROM Subjects WHERE subjNum IN ( SELECT subjNum
FROM Marks WHERE mark < 4)
O'zaro bog'langan ichkii so'rov:
O'zaro bog'langan ichkii so'rov-bu tashqi so'rovlar jadvalining ustunlariga havolani o'z ichiga olgan ichki so'rov.
2-misol. O'rtacha ballari 4,5 dan yuqori bo'lgan talabalar ro'yxatini tuzing.
SELECT sname FROM Students WHERE (SELECT AVG(mark FROM Marks
WHERE Marks.st Num = Students.stNum) > 4.5
Ichki so'rovlarning xususiyatlari:
ichki so'rov har doim qavs ichida bo'ladi;
ichki so'rov natijalari jadvali har doim bitta ustundan iborat;
ichki so'rov ORDER BY taklifni o'z ichiga olmaydi.
Jadvallarning ichki ulanishi (INNER JOIN)
Misol. Talabalar ro'yxatini va ular o'qiyotgan guruhlarning nomlarini ko'rsating.
SELECT sname, sname FROM Students INNER JOIN Groups ON Students.grNum = Groups.grNum;
Agar jadvallar bir xil nomdagi ustunlarning tengligi bilan birlashtirilishi kerak bo'lsa, unda ON jumlasi o'rniga USING bandi ishlatiladi, unda bog'langan ustunlarning nomlari ko'rsatilgan.
Misol.
SELECT sname, sname FROM Students INNER JOIN Groups USING (grNum);
SQL - 92 ikki turdagi tashqi ulanish tushunchasini qo'llab-quvvatlaydi:
chap tomon (LEFT OUTER JOIN, *=);
o'ng tomon (RIGHT OUTER JOIN, =*).
Ma'lumotlarni o'zgartirish operatsiyalari (DML)
Ma'lumotlarni o'zgartirish uchun uchta operator ishlatiladi: INSERT, DELETE va UPDATE.
Ma'lumotlar bazasi jadvaliga qator qo'shish INSERT (qo'shish)operatori yordamida amalga oshiriladi.:
INSERT INTO Jadval_nomi (ustun_nomi,...)
VALUES (o'zgarmas | NULL,...)
Misol. Ma'lumotlar bazasiga yangi "ki-111" guruhi haqida yozuv qo'shing.
INSERT INTO Groups (grNum, grName, gr Head)
VALUES (6, 'KI-111', 11234);
Ma'lumotlar bazasi jadvalidagi satrlarni o'chirish operatori yordamida amalga oshiriladi DELETE (o'chirish):
DELETE FROM Jadval_nomi
[WHERE qidiruv_sharti],
bu erda qidirish sharti ichki so'rov bo'lishi mumkin.
Misol. Imtihon varaqasi nomeri 12345 bo'lgan talaba haqidagi ma'lumotlarni olib tashlang.
DELETE FROM Students WHERE snum = 12345;
Eslatma. WHERE bandining yo'qligi ko'rsatilgan jadvaldagi barcha qatorlarni olib tashlashga olib keladi.
Bitta ma'lumotlar bazasi jadvalining tanlangan satrlarida bir yoki bir nechta ustunlarning qiymatini yangilash UPDATE (yangilash) operatori yordamida amalga oshiriladi:
UPDATE Jadval_nomi SET ustun_name = ifodan, …
[WHERE qidiruv_sharti]
Misol. Talabalar uchun stipendiya miqdorini 20% ga oshiring.
UPDATE Students SET stStipend = 1.2 * stStipend
WHERE stStipend IS NOT NULL;
Eslatma. WHERE bandining yo'qligi ko'rsatilgan jadvaldagi barcha satrlarning yangilanishiga olib keladi.
DDL buyruqlari:
CREATE-ma'lumotlar bazasi ob'ektini yaratadi;
ALTER-mavjud ob'ektning tarkibin o'zgartiradi;
DROP-ilgari yaratilgan ob'ektni o'chiradi.
Jadvallarni hosil qilish
SQL tili yordamida jadvallar yaratish
SQL tilida jadval yaratish uchun CREATE TABLE iborasi ishlatiladi:
CREATE TABLE < jadval_nomi> (< maydon_nomi > < maydon_tipi > [,
< maydon_nomi > < maydon_tipi>]...) [[CONSTRAINT < cheklash_nomi>] < ustun darajasini cheklash>]…[[CONSTRAINT < cheklash_nomi>] < jadval darajasini cheklash>]
Cheklovlar:
PRIMARY KEY-jadvalning ichki kalitini aniqlash;
UNIQUE-ustundagi qiymatlarning o'ziga xosligini ta'minlash;
NULL / NOT NULL – ustundagi aniqlanmagan qiymatlarni hal qilish yoki taqiqlash;
CHECK < shart > - ustundagi ma'lumotlar qiymati uchun shartni belgilash;
[FOREIGN KEY < maydon_nomi>] REFERENCES < jadval_nomi > < maydon_nomi> jadval uchun tashqi kalitni aniqlash.
Misol:
CREATE TABLE student (numZach integer CONSTRAINT pk PRIMARY KEY,
fio char(30),stipend integer CHECK (stipend BETWEEN 500 AND 800),
pol char (1) CHECK (pol='m' yoki pol='f'), gr Num integer REFERENCES groups (grNum) ON DELETE CASCADE);
Jadvallarni o'zgartirish. ALTER TABLE operatori:
ALTER TABLE jadvalining nomi
ADD ustun_ ta'rifini
ALTER ustunning nomi
SET DEFAULT qiymati / DROP DEFAULT
DROP ustunining nomi CASCADE | RESTRICT
ADD ichki kalitni aniqlash
ADD tashqi kalitni aniqlash
ADD ma'lumotning_unikallik_shartlari
ADD tekshirish_sharti
Drop CONSTRAINT cheklov_nomi
CASCADE | RESTRICT
Misol. Talabalar jadvaliga asosiy kalitni qo'shing
ALTER TABLE student ADD CONSTRAINT “pk”
PRIMARY KEY (num Zach);
Jadvalni o'chirish:
Jadvalni ma'lumotlar bazasidan o'chirish uchun SQL tilida DROP TABLE iborasidan foydalanadi:
DROP TABLE < jadval_nomi> CASCADE / RESTRICT
Trigger:
Trigger (trigger) ma'lumotlar bazalari-bu ma'lum bir hodisalar sodir bo'lganda (INSERT, UPDATE, DELETE) avtomatik ravishda chaqiriladigan maxsus turdagi saqlanadigan protsedura.
Foydalanish
Trigger jadvallarga o'zgartirish kiritish yoki odatdagi tarzda amalga oshirib bo'lmaydigan murakkab cheklovlarni bajarish uchun ishlatiladi.
Trigger u bilan bog'liq bo'lgan jadvaldan tashqari hech qanday ma'lumotlar bazasi ob'ektlariga kirmasligi kerak.
Triggerda DDL (CREATE, ALTER, DROP) bayonotlarini bajarishga yo'l qo'yilmaydi.
Trigger tanasida har qanday saqlangan protseduralar, shu jumladan tizimli protseduralar chaqirilishi mumkin.
CREATE TRIGGER change_Starball AFTER INSERT ON Marks FOR EACH ROW EXECUTE PROCEDURE update_Sr Ball
|
| |