Өрнектерді пайдалану
Сұраныс 3. 1500-ден аспайтын жалақының әрбір мәні үшін бұл мән мен
оқытушылардың санын, осындай жалақы алатындарды шығару.
SELECT Salary + Rise, C0UNT(*)
FROM TEACHER
WHERE Salary + Rise <= 1500 GROUP BY Salary + Rise;
Сұраныс 4. Бір лауазым атқаратын оқытушылардың әрбір тобы үшін ең
төменгі және ең жоғары ставкалар арасындағы орташа мәнді, сондай-ақ орташа
ставкалар арасындағы ең төменгі және ең жоғарғы мәндерді шығару.
SELECT AVG(MIN(Salary)) AS AVG_MIN,
AVG(MAX(Salary)) AS AVG_MAX,
MIN(AVG(Salary)) AS MIN_AVG,
MAX(AVG(Salary)) AS MAX_AVG
FROM TEACHER
GROUP BY Dolgnost ;
Алынған топтардың арасында жолдарды іріктеу үшін HAVING сөзін
қолданған жөн. Ол бастапқы кестелерге арналған WHERE фразасы сияқты
топтар үшін бірдей рөл атқарады және тек GROUP BY фразасы болғанда ғана
пайдаланылуы мүмкін.
SELECT сөйлемінде WHERE, GROUP BY және HAVING сөз тіркестері
келесі тәртіпте өңделеді.
WHERE
фразасы көрсетілген шартты қанағаттандыратын жолдарды таңдайды.
GROUP BY
фраза таңдалған жолдарды топтайды.
HAVING
фразасы онда көрсетілген шартты қанағаттандыратын топтар
іріктеледі.
Жоғарыда айтылғандарға байланысты, алдыңғы сұраныс салуды осылай
жазу қажет. Онда сұранысты осылай жазамыз:
Сұраныс 5. Жұмыс істейтін профессорлардың жиынтық саны 1-ден асатын
кафедралардың нөмірлерін шығару.
SELECT KOD_kafedru as "Кафедра номерлері" ,Count(*) as "Кафедрадағы
профессорлар саны"
FROM TEACHER
WHERE dolgnost='профессор'
85
GROUP BY KOD_kafedru
having count(dolgnost) > 1
HAVING фразасында бағандарды қолдана топтастыру.
Сұраныс 6. Бір немесе одан да көп профессорлар жұмыс істейтін
математика және информатика факультеті кафедраларының атауларын шығару.
Сондай-ақ профессорлардың санын және олардың жиынтық жалақысын
көрсету.
SELECT d.Name_kafedru, Count(*), SUM(t.salary + t.Rise)
FROM FACULTET f, KAFEDRA d, TEACHER t
WHERE f.KOD_FACULTETA = d.KOD_FACULTETA AND
d.KOD_kafedru = t.KOD_kafedru AND
LOWER(f.Name_faculteta) = 'математиктер және информатиктер' AND
LOWER(t.Dolgnost ) = 'профессор'
GROUP BY d.Name_kafedru
HAVING COUNT(*) > 0;
GROUP BY фразасынсыз HAVING фразасы
Бұл жағдайда SELECT сөз тіркестері тізімінде олармен тек
константаларды, агрегаттық функциялар мен өрнектерді ғана пайдалануға
болады.
Сұраныс 7. Егер барлық оқытушылардың жиынтық жалақысы 15 000-нан
асса, олардың ең төменгі мөлшерлемесін, ең жоғарғы үстемесін және жиынтық
жалақысын шығарыңыз.
SELECT MIN(Salary), MAX(Rise), SUM(Salary + Rise)
FROM TEACHER
HAVING SUM(Salary + Rise) > 15000;
WHERE фразасы бар болса, алдымен оның шартына сәйкес жолдарды
іріктеу жүргізіледі, содан кейін ғана HAVING фразасының шарты
қолданылады.
Сұраныс 8. Егер барлық ассистенттердің жиынтық жалақысы 2500-ден
асса, олардың орташа ставкасын, орташа үстемесін және жиынтық жалақысын
шығарсын.
SELECT AVG(Salary), AVG(Rise), SUM(Salary + Rise)
FROM TEACHER
WHERE LOWER(Dolgnost ) = 'ассистент'
HAVING SUM(Salary + Rise) > 2500;
Қорытынды жолдарды сұрыптау
Біз атап өткендей, Мәліметтер қорының кестелеріндегі жолдар ретсіз.
Сондай-ақ, сұраныстың қорытынды кестесінің жолдары реттелмеген, бірақ
оларды SELECT сөйлемінде реттеу үшін ORDER BY фразасын пайдалануға
86
болады. Ол онда көрсетілген бағандардың (және бағандардың үстіндегі
өрнектердің) мәні бойынша қорытынды сұраныс кестесі жолдарын
сұрыптайды.
Бұл фразаның синтаксисі келесі:
Достарыңызбен бөлісу: |