SQL-də ümumi funksiyalar

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

1. WHERE bəndindən HAVING bəndindən fərq nədir?

Həm HARADA, həm HAVING müddəası vəziyyəti yoxlamaq üçün və nəticədə əldə edilən məlumatlarda filtrlərə sahib olmaq üçün istifadə olunur. Ancaq hər ikisi fərqli yarışmada istifadə olunur. WHERE müddəası sadə SELECT ifadəsi ilə istifadə olunur və bir və ya daha çox cədvəldən məlumatların alt dəstinə sahib olmaq üçün istifadə olunur. Bu bənd şərtləri əlavə edəcək və nəticədəki məlumat dəstini süzəcəkdir. WHERE maddəsi olmayan sadə SELECT ifadəsi cədvəl / lərdən bütün məlumatları seçəcəkdir. Cədvəldən məlumatların yalnız bir hissəsini və ya alt hissəsini görmək istəyiriksə, WHERE bəndini daxil edəcəyik.

HAVING maddəsi, SELECT ifadəsində istifadə olunsa da, əslində məcmu dəyərləri müqayisə etmək üçün istifadə olunur. yəni; yalnız SUM (), MAX (), MIN (), AVG () və COUNT () kimi məcmu funksiyaların dəyərlərini müqayisə edə bilər. WHERE bəndində ümumi dəyərləri müqayisə edərkən WHERE bəndində olduğu kimi hər hansı bir sadə şərtləri müqayisə edə bilməz. Beləliklə, hər ikisi müqayisə üçün istifadə olunsa da, fərqli dəyərləri müqayisə edirlər.

Əmək haqqı 5000-dən çox olan işçiləri seçməli olduğumuz nümunəni nəzərdən keçirək. Burada ƏMƏK sütunundakı şərtlə müqayisə etmək lazımdır. Müqayisə yalnız əmək haqqının 5000-dən çox olub olmadığını yoxlayacaqdır. Burada ümumi bir işləmə tələb olunmur. Beləliklə, işçilərin maaşının İŞÇİLƏR cədvəlində 5000-dən çox olmasını müqayisə etmək üçün WHERE maddəsini istifadə edə bilərik.

SELECT * FROM EMPLOYEES 
WHERE SALARY > 5000;

İndi işçinin orta əmək haqqı 5000-dən çox olan şöbələri tapmaq məcburiyyətində olduğumuz vəziyyəti nəzərdən keçirin. Burada hər şöbədə çalışanların maaşlarını müqayisə etməyimiz istənilmir. Əksinə, hər şöbədə işçilərin orta maaşını tapmalıyıq və bu orta əmək haqqının 5000-dən çox olduğunu müqayisə etməliyik. Yəni GROUP BY funksiyasının nəticəsini müqayisə etməliyik. Bu səbəbdən hər şöbənin orta əmək haqqını müqayisə etmək üçün HAVING bəndindən istifadə etməliyik.

SELECT DEPARTMENT_ID, AVG (SALARY) AS AVG_SAL 
	FROM EMPLOYEES 
	GROUP BY DEPARTMENT_ID 
	HAVING AVG (SALARY)> 5000;

Burada bütün məlumatlar seçildikdən sonra GROUP BY tətbiq olunduğunu sorğuda qeyd edə bilərik. Yəni buradakı şöbələr üzrə qrup tətbiq etmək üçün əvvəlcə İŞÇİLƏR cədvəlindən məlumat seçməliyik. Yuxarıdakı vəziyyətimizdə əvvəlcə İşçilər cədvəlindəki bütün şöbələri və əmək haqqını seçməliyik. Sorğuda WHERE bəndimiz varsa, məlumatların alt hissəsini əldə etmək üçün bu şərti də tətbiq etməliyik. Yalnız bundan sonra düzgün nəticə əldə etmək üçün məlumatları qruplaşdıra bilərik. WHERE bəndini tətbiq etmədən əvvəl GROUP BY bəndini tətbiq etsək, bütün cədvəl məlumatlarını qruplaşdıracaq və düzgün nəticə əldə edə bilmərik. Nəticəni fərqli şöbələrə qruplaşdırmaq üçün GROUP BY bəndini tətbiq edəcəyik və yenidən orta əmək haqqı şərtini tətbiq edirik. Bu, ayrıca WHERE bəndinə və HAVING bəndinə sahib olmağımızın başqa bir səbəbidir. WHERE bəndindəki məcmu dəyərlərin müqayisəsi gətirilməyən və hesablanmayan dəyərlərin müqayisəsi ilə eynidir. Bu məcmu dəyərlər yalnız WHERE bəndinin tətbiqindən və GROUP BY funksiyası tətbiq edildikdən sonra hesablanır.

2. Niyə GROUP BY bəndində SEÇİM siyahısında seçilmiş eyni sütunlardan istifadə etməliyik?

Çünki qeydləri bəzi sütunlara əsasən qruplaşdırdığımızda və nəticəni həmin sütunlar olmadan görsək, nəticənin nə olduğunu başa düşməyəcəyik. Nəticəni qruplaşdırılmış sütunlarla birlikdə görsək, mənalı bir nəticə əldə edəcəyik və onları da başa düşəcəyik.

Aşağıdakı nəticədə AVG_SAL-ı təkbaşına görsək, bunun nədən ibarət olduğunu anlamayacağıq. AVG_SAL ilə birlikdə DEPARTMENT_ID-i gördükdə, şöbələrə əsaslanan orta əmək haqqı olduğunu başa düşəcəyik. Buna görə SELECT siyahısında eyni sütunlara və GROUP BY bəndinə ehtiyacımız var.

3. Niyə aqreqat funksiyasının bir hissəsi olaraq GROUP BY bəndinə daxil olmayan sütunlara sahib olmalıyıq?

Bu da yuxarıdakı ilə eyni səbəbdir. SEÇİM siyahısında GROUP BY bəndinin bir hissəsi olmayan bəzi sütunlarımız varsa, o zaman sorğunun özü dəyişdiriləcəkdir. Yenə də onları SEÇİM siyahısına daxil etməliyik, amma GROUP BY bəndinə daxil etməməyimiz lazım olsa, dəyərlər dəyişməz qalması üçün SEÇMƏ siyahısında görünəcək şəkildə bəzi məcmu funksiyasından istifadə etdik.

4. Qrup qrupu bəndinə sütunlar əlavə edərək xətanın düzəldilməsi düzgün nəticə ilə nəticələnəcəkmi?

Həmişə deyil. Həmişə cədvəlin məlumatlarından və quruluşundan asılıdır.

5. SQL-də müddəa ilə bəyanat qrupu arasındakı fərq nədir?

Bildiriş qrupu, müəyyən sütunların hər bir dəyərini qruplaşdırmaq və sonra ümumi dəyərləri hesablamaq üçün istifadə olunur. yəni; COLUMN_NAME qrupu istifadə edildikdə, əvvəlcə cədvəlin sütunundakı bütün DISTINCT dəyərlərini tapır. Sonra bu qruplaşdırılmış sütuna / s-lərə əsaslanan məcmu dəyərləri tapır. Bu ümumi dəyərin dəyərini müqayisə etmək lazımdırsa, bunu WHERE bəndinə daxil edə bilmərik. Bunun əvəzinə ümumi dəyərləri müqayisə etmək üçün HAVING bəndini qoymalıyıq.

Bir sorğuda GROUP BY yerinə yetirdiyimiz zaman əvvəlcə bir və ya daha çoxundan seçilən bütün sütunları seçir. masaları WHERE bəndindəki şərtləri və filtrləri tətbiq edərək. Bu nəticəni əldə etdikdən sonra qeydlərin qruplaşdırılması GROUP BY ifadəsi ilə aparılır. İndi bu qruplaşdırılmış rekord dəsti heç bir məcmu olmadan qala bilər və ya cəmi, ortalamanı, sayını və s. Əldə etmək üçün toplana bilər. İndi bu məcmu dəyərləri müqayisə etməli olsaq, WHERE maddəsini istifadə edə bilmərik. Bunun səbəbi, WHERE bəndinin artıq icra edildiyi və bundan sonra bu məcmu dəyərlərə sahib olduğumuzdur. Beləliklə, bu məcmu dəyərləri müqayisə etmək üçün başqa bir bəndə ehtiyacımız var. Beləliklə, SUM, AVG, COUNT, MIN və MAX kimi məcmu dəyərləri müqayisə etmək üçün HAVING maddəsindən istifadə edirik.

Hər şöbədə ən azı 1 işçisi olan işçilərin sayını tapmaq üçün aşağıdakı sorğunu nəzərdən keçirin. Yəni əvvəlcə ƏMƏKDAŞLAR cədvəlindən bütün işçiləri seçməliyik, sonra bu nəticəni DEPARTMENT_ID-ə əsasən qruplaşdırmalı və hər şöbədəki işçilərin sayını tapmalıyıq. Bu say əldə edildikdən sonra, sayının sıfıra bərabər olmadığını tapmaq lazımdır.

SELECT DEPARTMENT_ID, COUNT (1) NUM_OF_EMPLOYEES
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING COUNT (1) <> 0;

Crack Sistemi Dizayn Müsahibələri
Translate »