SQL müsahibə sualları və cavabları (Oracle üzərində)
Bu səhifədə SQL müsahibələrində tez-tez soruşulan sualları qısa cavablarla topladıq. Nümunələr Oracle sintaksisindədir, amma əksər cavablar digər verilənlər bazaları üçün də keçərlidir. Vakansiyalarda SQL Server (T-SQL) də çox rast gəlinir, uyğun olduqda fərqi qeyd edirik.
Əsaslar
1. DDL, DML, DCL və TCL nədir?
DDL strukturu dəyişir (CREATE, ALTER, DROP, TRUNCATE). DML datanı dəyişir (INSERT, UPDATE, DELETE, MERGE). DCL hüquqları idarə edir (GRANT, REVOKE). TCL tranzaksiyanı idarə edir (COMMIT, ROLLBACK, SAVEPOINT). Oracle-da DDL əmri avtomatik COMMIT edir.
2. WHERE ilə HAVING fərqi nədir?
WHERE sətirləri qruplaşdırmadan əvvəl süzür, HAVING isə qruplaşdırmadan sonra qrupları süzür.
SELECT department_id, COUNT(*) AS cnt
FROM employees
WHERE salary > 3000
GROUP BY department_id
HAVING COUNT(*) > 5;
3. DELETE, TRUNCATE və DROP fərqi?
DELETE sətirləri şərtlə silir, geri qaytarıla bilər (ROLLBACK). TRUNCATE bütün sətirləri sürətlə silir, DDL-dir, geri qaytarılmır. DROP cədvəlin özünü silir.
4. PRIMARY KEY ilə UNIQUE fərqi?
Hər ikisi təkrarsızlığı təmin edir. Cədvəldə yalnız bir PRIMARY KEY ola bilər və NULL ola bilməz. UNIQUE bir neçə ola bilər və Oracle-da NULL-a icazə verir.
JOIN-lər
5. JOIN növləri hansılardır?
INNER JOIN yalnız uyğun gələn sətirləri qaytarır. LEFT JOIN sol cədvəlin bütün sətirlərini, RIGHT JOIN sağ cədvəlin bütün sətirlərini, FULL JOIN hər ikisini qaytarır. CROSS JOIN bütün cüt kombinasiyalarını verir.
6. İki cədvəldə uyğun gəlməyən sətirləri necə tapmaq olar?
LEFT JOIN və sağ tərəfin açarının IS NULL olması ilə.
SELECT c.customer_id
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.customer_id
WHERE o.order_id IS NULL;
7. UNION ilə UNION ALL fərqi?
UNION təkrarları silir (əlavə sıralama lazımdır), UNION ALL hamısını saxlayır və daha sürətlidir. Oracle-da fərqli olaraq MINUS birinci sorğudan ikincini çıxarır (digər bazalarda EXCEPT).
NULL və funksiyalar
8. NULL ilə necə müqayisə etmək olar?
= NULL heç vaxt doğru olmur. IS NULL / IS NOT NULL istifadə et. NULL-ı başqa dəyərlə əvəzləmək üçün NVL(x, 0) və ya standart COALESCE(x, y, 0).
Oracle-a xas: boş sətir ('') NULL kimi qəbul edilir.
9. NOT IN ilə NULL tələsi nədir?
Alt sorğuda NULL olarsa, NOT IN heç bir sətir qaytarmır, çünki müqayisə «naməlum» olur. Daha etibarlı variant NOT EXISTS-dir.
10. COUNT(*), COUNT(sütun) və COUNT(DISTINCT sütun) fərqi?
COUNT(*) bütün sətirləri sayır. COUNT(sütun) NULL olmayan dəyərləri sayır. COUNT(DISTINCT sütun) təkrarsız NULL olmayan dəyərləri sayır.
Alt sorğular və qruplaşdırma
11. Alt sorğu ilə JOIN fərqi və korrelyasiyalı alt sorğu nədir?
Alt sorğu başqa sorğunun içində işləyir. Korrelyasiyalı alt sorğu xarici sorğunun hər sətri üçün yenidən icra olunur və xarici sütunlara istinad edir. Çox vaxt JOIN daha sürətli və oxunaqlıdır, amma EXISTS ilə yazılmış alt sorğu böyük cədvəllərdə yaxşı işləyir.
12. EXISTS ilə IN fərqi?
IN dəyərlər siyahısını yoxlayır, EXISTS isə alt sorğunun ən azı bir sətir qaytarıb-qaytarmadığına baxır və NULL ilə daha təhlükəsizdir.
13. GROUP BY ilə DISTINCT fərqi?
DISTINCT təkrarları silir. GROUP BY qrup yaradır və aqreqat funksiyalar tətbiq etməyə imkan verir.
Window funksiyaları və Top N
14. ROW_NUMBER, RANK və DENSE_RANK fərqi?
ROW_NUMBER hər sətrə unikal nömrə verir. RANK bərabərlikdə eyni nömrə verir və sonrakı nömrəni atlayır (1, 1, 3). DENSE_RANK atlama etmir (1, 1, 2).
SELECT employee_id, salary,
RANK() OVER (ORDER BY salary DESC) AS rnk
FROM employees;
15. «Ən yüksək 3 maaşı» necə tapmaq olar?
Oracle 12c-dən: FETCH FIRST 3 ROWS ONLY. Köhnə üsulda alt sorğu və ROWNUM.
SELECT * FROM employees
ORDER BY salary DESC
FETCH FIRST 3 ROWS ONLY;
ROWNUM sıralamadan əvvəl təyin olunur, ona görə birbaşa WHERE ROWNUM <= 3 ORDER BY ... düzgün Top N vermir.
İndekslər, view-lar, tranzaksiyalar
16. İndeks nədir və nə vaxt işlədilir?
İndeks axtarışı sürətləndirən struktur verilənlərdir. WHERE, JOIN və ORDER BY-da tez-tez işlənən sütunlar üçün faydalıdır. Qiyməti: yazma (INSERT/UPDATE/DELETE) yavaşlayır və yer tutur. Az dəyər olan sütunda və kiçik cədvəldə fayda az olur.
17. View ilə materialized view fərqi? View sorğunun adlı adıdır və hər dəfə yenidən icra olunur. Materialized view nəticəni saxlayır və yenilənməyə ehtiyac duyur, hesabat və böyük aqreqatlar üçün sürət verir.
18. Sequence və identity sütunu nədir?
Sequence unikal ardıcıl ədədlər yaradan obyektdir. Oracle 12c-dən GENERATED AS IDENTITY ilə sütun avtomatik dəyər alır.
19. Tranzaksiya nədir və ACID nə deməkdir?
Tranzaksiya bir bütöv kimi icra olunan əməliyyatlar qrupudur. ACID: atomarlıq, ardıcıllıq (consistency), izolyasiya, dayanıqlılıq. COMMIT təsdiq edir, ROLLBACK geri qaytarır, SAVEPOINT ara nöqtə yaradır.
20. MERGE nə üçündür?
Bir əmrdə sətir varsa yeniləmək, yoxdursa əlavə etmək üçün (upsert).
PL/SQL sualları (Oracle vakansiyaları üçün)
21. Prosedur ilə funksiya fərqi?
Funksiya mütləq dəyər qaytarır və SQL ifadəsinin içində çağırıla bilər. Prosedur dəyər qaytarmaya bilər, OUT parametrlərlə nəticə verə bilər və ayrıca çağırılır.
22. İstisna idarəsi necə işləyir?
EXCEPTION bölməsində WHEN NO_DATA_FOUND, WHEN TOO_MANY_ROWS, WHEN OTHERS kimi handlerlər yazılır. Öz istisnan üçün RAISE və ya RAISE_APPLICATION_ERROR istifadə olunur.
23. Implicit və explicit kursor fərqi?
Implicit kursoru Oracle özü açır (SELECT INTO, DML). Explicit kursoru sən elan edib OPEN, FETCH, CLOSE ilə idarə edirsən, çox sətirli nəticə üçün istifadə olunur.
24. Paket (package) nəyə görə faydalıdır? Əlaqəli proseduru, funksiyanı və dəyişənləri bir yerdə saxlayır (spesifikasiya və gövdə), məlumatı gizlətməyə imkan verir və performansı artırır.
25. Trigger nədir?
Müəyyən hadisədən (INSERT, UPDATE, DELETE) əvvəl və ya sonra avtomatik işləyən PL/SQL blokudur. Sətir səviyyəli triggerdə :NEW və :OLD istifadə olunur.
Praktika
Cavabı bilmək kifayət deyil, SQL-i yazıb yoxlamaq lazımdır. - Avtomatik yoxlanan SQL tapşırıqları - Oracle 1Z0-071 imtahanına hazırlıq - Oracle 1Z0-149 (PL/SQL) imtahanına hazırlıq - IT və Data vakansiyaları
Tez-tez verilən suallar
SQL müsahibəsində ən çox hansı mövzular soruşulur?
JOIN növləri, NULL ilə davranış, GROUP BY və HAVING, alt sorğular, window funksiyaları, indekslər, DELETE ilə TRUNCATE fərqi və tranzaksiyalar. Oracle vakansiyalarında əlavə olaraq PL/SQL (prosedur, funksiya, kursor, paket) soruşula bilər.
Müsahibəyə necə hazırlaşmaq olar?
Sualları əzbərləməklə yox, hər cavabı özün SQL yazıb yoxlamaqla. Real cədvəllər üzərində tapşırıq həll et, nəticəni əvvəlcə təxmin et, sonra icra et.