Kurs
İster SQL becerilerinizi uygulayabileceğiniz yeni bir fırsat arayan bir iş arayan olun, ister şirketinizdeki bir pozisyon için adayla görüşme yapacak bir işe alım yöneticisi olun, yaygın SQL mülakat sorularını ve cevaplarını bilmek şarttır.
Bu makale, 2026 için 99 SQL mülakat sorusu ve cevabını listeler; hazırlık, öğrenme ve etkili işe alım için yardımcı olacak temel SQL konularını aşağıdakiler dahil kapsar:
- Temel bilgi: RDBMS, anahtarlar ve SQL lehçelerinin net tanımları.
- Teknik ustalık: DDL ve DML, kısıtlar ve indeksleme üzerine derinlemesine incelemeler.
- Sorgu mantığı: Join'ler, Alt Sorgular ve Toplam Fonksiyonlarının açıklamaları.
- Pratik uygulama: n'inci en yüksek değeri bulma veya yinelenenleri kaldırma gibi gerçek hayattan kod çözümleri.
- Senaryo bazlı sorular: Kümülatif toplamlar, kopya tespiti, boşluk analizi ve daha fazlasını kapsayan mülakat tarzı problemler.
Bilgi ve becerilerini daha da geliştirmek isteyenler için, kapsamlı veri mühendisliği, bulut teknolojileri ve AWS kurslarımızı incelemeyi düşünün.
SQL Mülakat Sorularına Hızlı Bakış
SQL mülakatları, insanların dili gerçekte nasıl öğrendiğini yansıtma eğilimindedir.
Başlarda, birleştirme (join) nedir, SELECT nasıl çalışır ve DDL ile DML arasındaki fark nedir gibi kelime bilgisi ve dil bilgisiyle ilgilidir.
Dile aşina oldukça, odak "sorgu yazabilir misiniz"den "doğru sorguyu yazabilir misiniz"e kayar. Bir indeksin ne zaman yardımcı olacağını, normalleştirmenin neden önemli olduğunu ve DELETE ile TRUNCATE gibi ince farkları olan komutların perde arkasında nasıl davrandığını anlamaya başlarsınız.
Kıdemli seviyede ise sözdizimi zaten varsayılır ve gerçek sınav problem çözmedir: yinelenenler, NULL'lar, eşitlikler ve sıralama mantığını pencere fonksiyonları ve CTE'lerle ele almak; işlemler, eşzamanlılık ve performans hakkında akıl yürütmek.
Orta seviye uygulayıcılar için
-
SQL'de fonksiyonlar. Toplam (aggregate) ve skaler fonksiyonların yanı sıra yerleşik ve kullanıcı tanımlı fonksiyonları bilmelisiniz.
-
İleri komutlar. Sorular join'ler, birincil ve yabancı anahtarlar, indeksler ve SQL ilişkileri gibi konuları kapsayabilir.
-
Veritabanı tasarımı. Normalleştirme, normalleştirmeme ve
DELETE,TRUNCATEveDROPgibi çeşitli SQL ifadeleri arasındaki farklar hakkında sorular bekleyin. -
İleri sorgular. İçiçe ve korele alt sorguların yanı sıra bir sütunda n'inci en yüksek değeri bulma gibi belirli görevleri nasıl yapacağınız sorulabilir.
Genel SQL Mülakat Soruları
Teknik sorulara geçmeden önce, görüşmeci size SQL ile genel deneyiminiz hakkında bazı genel sorular sorabilir.\
SQL deneyiminiz sınırlıysa endişelenmeyin: görüşmeciniz bunu büyük olasılıkla özgeçmişinizden zaten biliyordur. Yine de sizinle konuşmak istediklerine göre, profiliniz şirketleri için uygun görülmüştür. Ayrıca yalnızca bir SQL lehçesiyle çalışmış olmanız tamamen normaldir. Unutmayın ki tüm SQL lehçeleri oldukça benzerdir. Bu nedenle, yalnızca birine aşina olmak, diğerlerini öğrenmeniz için sağlam bir temel oluşturur.
1. SQL nedir?
Structured Query Language'ın kısaltmasıdır ve ilişkisel veritabanı yönetim sistemleri (RDBMS) ile etkileşim için kullanılan bir programlama dilidir. Tablolardan veri çekmeyi, güncellemeyi, eklemeyi ve silmeyi kapsar.
2. SQL lehçeleri nelerdir? Bazı örnekler verin.
Ücretsiz ve ücretli çeşitli SQL sürümleri SQL lehçeleri olarak da adlandırılır. Tüm SQL lehçeleri çok benzer bir sözdizimine sahiptir ve yalnızca ek işlevselliklerde önemsiz farklılıklar gösterir. Bazı örnekler: Microsoft SQL Server, PostgreSQL, MySQL, SQLite, T-SQL ve Oracle.
3. SQL'in başlıca kullanım alanları nelerdir?
SQL kullanarak şunları yapabiliriz:
- Bir veritabanında tablolar oluşturmak, silmek ve güncellemek
- Bir tablodaki veriye erişmek, işlemek ve değiştirmek
- Gerekli bilgiyi bir veya birden fazla tablodan almak ve özetlemek
- Bir tablodan belirli satırları veya sütunları eklemek ya da kaldırmak
Yeni Başlayanlar için SQL Mülakat Soruları
Görüşmeci, daha kolay sorularla başlayarak süreci başlatabilir:
4. SQL ifadesi nedir?
SQL komutu olarak da bilinir. SQL motoru tarafından yasal bir komut olarak yorumlanan ve buna göre yürütülen karakter dizisidir. SQL ifadelerine örnek olarak SELECT, CREATE, DELETE, DROP, REVOKE vb. verilebilir.
5. SQL sorgusu nedir?
Sorgu, bir veritabanındaki verilere erişmek veya onları değiştirmek için SQL ile yazılan bir kod parçasıdır.
SQL sorguları iki türdür: veri getirme ve veri değiştirme sorguları. İlk grup gerekli veriyi almak için kullanılır (veriyi sınırlama, gruplama, sıralama, birden fazla tablodan veri çekme vb. dahil), ikinci grup ise veriyi oluşturmak, eklemek, silmek, güncellemek ve yeniden adlandırmak için kullanılır.
6. SQL alt sorgusu nedir?
İç sorgu olarak da adlandırılır; başka bir sorgunun içine yerleştirilmiş sorgudur (dış sorgu). Alt sorgu, SELECT, FROM, WHERE, UPDATE gibi cümleciklerde yer alabilir. Bir alt sorgunun içine başka bir alt sorgu koymak da mümkündür. En içteki alt sorgu önce çalışır ve sonucu onu içeren sorguya (veya alt sorguya) iletilir.
7. SQL join nedir?
İki veya daha fazla tablodan kayıtları birleştirmek ve getirmek için kullanılan bir cümleciktir. SQL tabloları, bu tabloların sütunları arasındaki ilişkiye göre birleştirilebilir. Daha fazla bağlam için SQL join'leri eğitimini ve ayrıca SQL join'leri mülakat soruları için özel rehberimizi inceleyin.
8. SQL yorumu nedir?
Belirli bir kod parçasının ne yaptığını insan tarafından okunabilir biçimde açıklamadır. SQL kod yorumları tek satırlık olabilir (çift tire -- ile başlar) veya birden fazla satıra yayılabilir (şu şekilde: /*comment_text*/). SQL motoru çalıştığında, kod yorumlarını yok sayar. SQL kod yorumlarının amacı, kodu gelecekte okuyacak kişiler için daha anlaşılır kılmaktır.
9. SQL takma ad (alias) nedir?
Belirli bir SQL sorgusu yürütülürken bir tabloya (veya tablodaki bir sütuna) verilen geçici addır. Takma adlar, kodun okunabilirliğini artırmak ve kodu daha derli toplu yapmak için kullanılır. Bir takma ad AS anahtar sözcüğü ile tanımlanır:
SELECT col_1 AS column
FROM table_name;
Teknik SQL Mülakat Soruları
Şimdi teknik SQL mülakat sorularına ve bunlara verilebilecek bazı yanıtlara geçelim.
Teknik soruları yanıtlarken en iyi strateji mümkün olduğunca net ve kesin cevaplar vermektir. Aksi takdirde, ana konudan sapma girişimi gibi görünebilir. Ayrıca, kendinizi daha az rahat hissettiğiniz ek soruları tetikleyebilir.
Özetle, SQL bir veritabanını birden fazla şekilde sorgulamaya olanak tanır. Ayrıca, SQL Python veya R gibi diğer programlama dilleriyle kolayca entegre olur; böylece birleşik güçlerinden yararlanabiliriz.
10. Hangi tür SQL komutlarını biliyorsunuz?
- Veri Tanımlama Dili (DDL) – bir veritabanının yapısını tanımlamak ve değiştirmek için.
- Veri Manipülasyon Dili (DML) – bir veritabanındaki veriye erişmek, onu işlemek ve değiştirmek için.
- Veri Denetim Dili (DCL) – veritabanındaki veriye kullanıcı erişimini kontrol etmek ve belirli bir kullanıcıya veya kullanıcı grubuna ayrıcalık vermek ya da geri almak için.
- İşlem Denetim Dili (TCL) – bir veritabanındaki işlemleri kontrol etmek için.
- Veri Sorgulama Dili (DQL) – bir veritabanındaki veriler üzerinde sorgulama yapmak ve gerekli bilgiyi elde etmek için.
11. Yaygın SQL komutlarına bazı örnekler verin.
-
DDL:
CREATE,ALTERTABLE,DROP,TRUNCATEveADD COLUMN -
DML:
UPDATE,DELETEveINSERT -
DCL:
GRANTveREVOKE -
TCL:
COMMIT,SET TRANSACTION,ROLLBACKveSAVEPOINT -
DQL: –
SELECT
12. DBMS nedir ve hangi DBMS türlerini biliyorsunuz?
Veritabanı Yönetim Sistemi anlamına gelir; bir veritabanında depolanan veriler üzerinde erişim, güncelleme, düzenleme, ekleme ve silme gibi çeşitli işlemler yapmak için kullanılan yazılım paketidir. Verinin sistemde nasıl düzenlendiğine, yapılandırıldığına ve saklandığına bağlı olarak ilişkisel, hiyerarşik, ağ, grafik veya nesne yönelimli gibi çeşitli DBMS türleri vardır.
13. RDBMS nedir? Bazı örnekler verin.
İlişkisel Veritabanı Yönetim Sistemi anlamına gelir. Ortak anahtarlar aracılığıyla birbiriyle ilişkili birden çok tabloda saklanan verilerle çalışmak için kullanılan en yaygın DBMS türüdür. SQL programlama dili RDBMS ile etkileşim için tasarlanmıştır. RDBMS örnekleri: MySQL, PostgreSQL, Oracle, MariaDB vb.
14. SQL'de tablolar ve alanlar nedir?
Tablo, satır ve sütunlardan oluşan tablo biçiminde depolanan, ilişkili verilerin düzenli bir kümesidir. Alan, bir tablonun sütunu için kullanılan başka bir terimdir.
15. Hangi SQL alt sorgu türlerini biliyorsunuz?
- Tek satırlı – en fazla bir satır döndürür.
- Çok satırlı – en az iki satır döndürür.
- Çok sütunlu – en az iki sütun döndürür.
- Korele – dış sorgudaki bilgilere bağlı alt sorgu.
- İçiçe – başka bir alt sorgunun içinde yer alan alt sorgu.
16. Kısıt (constraint) nedir ve neden kullanılır?
Bir tablonun her sütununa girilebilecek veri türünü tanımlayan koşullar kümesidir. Kısıtlar, tabloda veri bütünlüğünü sağlar ve istenmeyen eylemleri engeller.
17. Hangi SQL kısıtlarını biliyorsunuz?
-
DEFAULT– bir sütun için varsayılan değer sağlar. -
UNIQUE– yalnızca benzersiz değerlere izin verir. -
NOT NULL– yalnızca null olmayan değerlere izin verir. -
PRIMARY KEY– yalnızca benzersiz ve kesinlikle null olmayan değerlere izin verir (NOT NULLveUNIQUE). -
FOREIGN KEY– iki veya daha fazla tablo arasında paylaşılan anahtarlar sağlar.
18. Hangi join türlerini biliyorsunuz?
-
(INNER) JOIN– yalnızca her iki (veya tüm) tabloda tanımlı join koşulunu sağlayan kayıtları döndürür. Varsayılan SQL join'idir. -
LEFT (OUTER) JOIN– sol tablodaki tüm kayıtları ve sağ tablodaki, tanımlı join koşulunu sağlayan kayıtları döndürür. -
RIGHT (OUTER) JOIN– sağ tablodaki tüm kayıtları ve sol tablodaki, tanımlı join koşulunu sağlayan kayıtları döndürür. -
FULL (OUTER) JOIN– her iki (veya tüm) tablodaki tüm kayıtları döndürür. Sol ve sağ join'lerin birleşimi olarak görülebilir.
Not: FULL OUTER JOIN PostgreSQL, SQL Server, Oracle ve MySQL 8.0 ve üzeri tarafından desteklenir; ancak MySQL bunu yalnızca UNION kalıplarıyla sağlar; bu arada SQLite RIGHT JOIN desteklemez ve bu, LEFT JOIN ile UNION kombinasyonu kullanılarak taklit edilebilir.
19. SQL'de birincil anahtar (primary key) nedir?
Bir tablonun, PRIMARY KEY kısıtının uygulanarak o sütunda benzersiz ve null olmayan değerlerin garanti altına alındığı sütunu (veya birden çok sütunu). Başka bir deyişle, bir birincil anahtar, NOT NULL ve UNIQUE kısıtlarının birleşimidir. Birincil anahtar, tablodaki her kaydı benzersiz olarak tanımlar.
İlgili kavram — Vekil anahtar (surrogate key): Vekil anahtar, gerçek veri değerlerinden bağımsız olarak her kayda atanan yapay bir tanımlayıcıdır (tipik olarak artan tamsayı veya UUID). Doğal anahtarlardan (ör. e-posta adresi) farklı olarak, iş verileri değiştiğinde bile vekil anahtarlar sabit kalır; bu da onları üretim veritabanlarında birincil anahtar için popüler bir seçim yapar.
Her tablo en fazla bir PRIMARY KEY tanımlayabilir (bileşik olabilir). PRIMARY KEY şiddetle tavsiye edilir ancak tüm motorlar tarafından kesin bir zorunluluk değildir.
20. SQL'de benzersiz anahtar (unique key) nedir?
Bir tablonun, UNIQUE kısıtının uygulanarak o sütunda benzersiz değerlerin garanti altına alındığı sütunu (veya sütunları); buna mümkün olan NULL değeri de (yalnızca bir adet) dahildir.
Not:
- SQL Server: Yalnızca bir adet
NULLdeğere izin verilir; filtreli indeks kullanmadıkça. - PostgreSQL / Oracle / MySQL: Birden çok
NULLdeğerine izin verilir çünküNULL <> NULL.
21. SQL'de yabancı anahtar (foreign key) nedir?
Bir tablonun, FOREIGN KEY (veya UNIQUE anahtar) kısıtının uygulanarak, bu sütunun başka bir tablodaki (veya birkaç tablodaki) birincil anahtara bağlandığı sütunu (veya sütunları). Yabancı anahtarların amacı, bir veritabanındaki çeşitli tabloların bağlantıda kalmasını sağlamaktır.
22. SQL indeksi nedir?
Bir veritabanı tablosuyla ilişkili, onun önemli parçalarını saklamak ve daha hızlı veri arama/erişim sağlamak için kullanılan özel bir veri yapısıdır. İndeksler, özellikle büyük veritabanlarında sorgu performansını önemli ölçüde artırır.
23. Hangi indeks türlerini biliyorsunuz?
- Benzersiz indeks – bir tablo sütununda yinelenenlere izin vermez ve böylece veri bütünlüğünün korunmasına yardımcı olur.
- Kümelenmiş indeks (clustered) – bir veritabanı tablosundaki kayıtların fiziksel sırasını tanımlar ve anahtar değerlere göre veri araması yapar. Bir tabloda yalnızca bir kümelenmiş indeks olabilir.
- Kümelenmemiş indeks (non-clustered) – tablo kayıtlarının sırasını, diskteki gerçek verinin fiziksel sırasıyla eşleşmeyecek şekilde tutar. Bu, verinin bir yerde; kümelenmemiş indeksin ise başka bir yerde saklandığı anlamına gelir. Bir tabloda birden çok kümelenmemiş indeks olabilir.
24. Şema (schema) nedir?
Tablolar, saklı yordamlar, indeksler, fonksiyonlar ve tetikleyiciler gibi veritabanı yapısal öğelerinin bir koleksiyonudur. Genel veritabanı mimarisini gösterir, bir veritabanının çeşitli nesneleri arasındaki ilişkileri belirtir ve onlar için farklı erişim izinlerini tanımlar. Daha derin bir anlayış için veritabanı şeması rehberimizi okuyun.
25. SQL operatörü nedir?
Belirli bir işlemi gerçekleştirmek için SQL sorgularında kullanılan ayrılmış bir karakter, karakter kombinasyonu veya anahtar kelimedir. SQL operatörleri genellikle veriyi filtrelemek için koşul(lar) belirlemek üzere WHERE cümleciği ile birlikte kullanılır.
26. Hangi SQL operatörü türlerini biliyorsunuz?
-
Aritmetik (
+,-,*,/vb.) -
Karşılaştırma (
>,<,=,>=vb.) -
Bileşik (
+=,-=,*=,/=vb.) -
Mantıksal (
AND,OR,NOT,BETWEENvb.) -
Dizge (string) (
%,_,+,^vb.) -
Küme (
UNION,UNION ALL,INTERSECTveMINUS(veyaEXCEPT))
27. Cümlecik (clause) nedir?
İstenen sonucu elde etmek için veriyi filtrelemek üzere bir SQL sorgusuna uygulanan koşuldur. Örnekler: WHERE, LIMIT, HAVING, LIKE, AND, OR, ORDER BY vb.
28. SELECT sorgusu ile birlikte kullanılan yaygın ifadeler nelerdir?
En yaygın olanlar FROM, GROUP BY, JOIN, WHERE, ORDER BY, LIMIT ve HAVING'dir.
29. SQL'de tablo nasıl oluşturulur?
CREATE TABLE ifadesi kullanılarak. Örneğin, önceden tanımlanmış veri tiplerine sahip üç sütunlu bir tablo oluşturmak için aşağıdaki sözdizimini uygularız:
CREATE TABLE table_name (col_1 datatype,
col_2 datatype,
col_3 datatype);
30. Bir tablo nasıl güncellenir?
UPDATE ifadesi kullanılarak. Sözdizimi:
UPDATE table_name
SET col_1 = value_1, col_2 = value_2
WHERE condition;
31. Bir tablo veritabanından nasıl silinir?
DROP TABLE ifadesi kullanılarak. Sözdizimi: DROP TABLE table_name;.
32. Bir tablodaki kayıt sayısı nasıl alınır?
Yıldız işareti argümanıyla geçirilen COUNT() toplam fonksiyonu kullanılarak: SELECT COUNT(*) FROM table_name;.
33. Bir tablodaki kayıtlar nasıl sıralanır?
ORDER BY ifadesi kullanılarak:
SELECT * FROM table_name
ORDER BY col_1;
DESC anahtar sözcüğüyle azalan sıralama belirtilebilir; aksi halde, varsayılan olarak artan sırada olur. Ayrıca birden fazla sütuna göre sıralayabilir ve her biri için artan/azalan sıralamayı ayrı ayrı belirtebiliriz. Örneğin:
SELECT * FROM table_name
ORDER BY col_1 DESC, col_3, col_6 DESC;
34. Bir tablodaki tüm sütunlar nasıl seçilir?
Yıldız * ile SELECT ifadesi kullanılarak. Sözdizimi: SELECT * FROM table_name;.
35. İki tablodan ortak kayıtlar nasıl seçilir?
Şu ifade kullanılarak: INTERSECT:
SELECT col1, col2 FROM table_1
INTERSECT
SELECT col1, col2 FROM table_2;
Not: INTERSECT aynı sayıda sütun ve uyumlu tipler gerektirir.
36. DISTINCT ifadesi nedir ve nasıl kullanılır?
Bu ifade, bir tablonun bir sütunundaki yinelenenleri ayıklamak ve yalnızca benzersiz değerleri döndürmek için SELECT ile birlikte kullanılır. Sözdizimi:
SELECT DISTINCT col_1
FROM table_name;
37. İlişkiler (relationships) nedir? Bazı örnekler verin.
İlişkiler, varlıklar arasındaki bağlantı ve korelasyonlardır; temelde bir veritabanındaki iki veya daha fazla tablonun birbirleriyle nasıl ilişkili olduğunu ifade eder. Örneğin, aynı müşterinin kimliğini hem satış verileri tablosunda hem de müşteri tablosunda bulabiliriz.
38. NULL değer nedir? Sıfır veya boşlukla farkı nedir?
Bir NULL değer, bir tablonun belirli bir hücresi için verinin yokluğunu belirtir. Buna karşılık, sıfır geçerli bir sayısal değerdir ve boş dizge uzunluğu sıfır olan yasal bir metin dizgesidir.
39. SQL ve NoSQL arasındaki fark nedir?
SQL veritabanları ilişkisel, yapılandırılmıştır ve önceden tanımlı şemalara sahip tablolar kullanır; NoSQL veritabanları ise ilişkisel değildir, şemasızdır ve yapılandırılmamış veya yarı yapılandırılmış veriyi işlemek üzere tasarlanmıştır.
40. SQL veritabanlarıyla çalışırken yaygın zorluklar nelerdir?
Zorluklar arasında büyük veri kümeleri için performans ayarlaması, indeksleme stratejilerini yönetme, kısıtlarla veri bütünlüğünü sağlama, eşzamanlı işlemleri ele alma ve sorgu yürütmeyi optimize etme yer alır.
Orta Seviye SQL Mülakat Soruları
41. Ortak Tablo İfadesi (CTE) nedir?
Ortak Tablo İfadesi (CTE), bir SELECT, INSERT, UPDATE veya DELETE ifadesi içinde başvurabileceğiniz geçici adlandırılmış sonuç kümesidir. CTE'ler sorgu okunabilirliğini artırır ve karmaşık sorguları daha basit, yeniden kullanılabilir parçalara bölmenize olanak tanır. Sözdizimi WITH anahtar kelimesini kullanır:
WITH sales_summary AS (
SELECT product_id, SUM(amount) AS total_sales
FROM sales
GROUP BY product_id
)
SELECT p.product_name, s.total_sales
FROM products p
JOIN sales_summary s ON p.id = s.product_id
WHERE s.total_sales > 10000;
CTE'ler özellikle özyinelemeli sorgular (örgü şemaları gibi hiyerarşik veriler) ve aynı alt sorguya birden fazla kez başvurmanız gereken durumlarda kullanışlıdır.
42. Pencere fonksiyonları nedir ve toplam fonksiyonlardan nasıl farklıdır?
Pencere fonksiyonları, sonucu tek bir satıra indirgemeden, mevcut satırla ilişkili bir satır kümesi üzerinde hesaplamalar yapar. Satır penceresini tanımlamak için OVER() cümleciğini kullanırlar.
Başlıca pencere fonksiyonları:
ROW_NUMBER()– her satıra benzersiz artan bir numara atarRANK()– eşitlikler için boşluk bırakarak derece atarDENSE_RANK()– eşitliklerde boşluk bırakmadan derece atarLAG()/LEAD()– önceki/sonraki satırlardaki verilere erişirSUM() OVER(),AVG() OVER()– artan veya kümülatif hesaplamalar
Örnek: Satışların kümülatif toplamını hesaplayın
SELECT
order_date,
amount,
SUM(amount) OVER (ORDER BY order_date) AS running_total
FROM orders;
43. RANK(), DENSE_RANK() ve ROW_NUMBER() arasındaki fark nedir?
Üçü de sıralama yapan pencere fonksiyonlarıdır ancak eşitlikleri farklı ele alırlar:
ROW_NUMBER()– eşitliklerde bile her zaman benzersiz artan sayı atar (1, 2, 3, 4...)RANK()– eşitliklere aynı dereceyi verir, sonra numaraları atlar (1, 2, 2, 4...)DENSE_RANK()– eşitliklere aynı dereceyi verir, atlama yapmaz (1, 2, 2, 3...)
SELECT
name,
score,
ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num,
RANK() OVER (ORDER BY score DESC) AS rank,
DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM students;
Ties durumunda aynı sırayı paylaşmaları gerektiğinde "n'inci en yüksek" değeri bulurken DENSE_RANK() kullanın.
Bu bölümde, görüşmecinizden beklemeniz gereken en popüler orta seviye SQL soru ve cevaplarına göz atıyoruz.
44. SQL'de fonksiyon nedir?
Belirli bir görev için sıklıkla kullanılan bir dizi SQL ifadesini temsil eden veritabanı nesnesidir. Bir fonksiyon bazı giriş parametreleri alır, bunlar üzerinde hesaplama veya başka işlemler yapar ve sonucu döndürür. Fonksiyonlar, kod okunabilirliğini artırır ve aynı kod parçalarının tekrarını önler.
45. Hangi SQL fonksiyon türlerini biliyorsunuz?
- Toplam fonksiyonlar (aggregate) – sağlanan sütunlar için genellikle gruplanmış birden çok kayıt üzerinde çalışır ve tek bir değer döndürür (genellikle grup başına).
- Skaler fonksiyonlar – her bir değer üzerinde çalışır ve tek bir değer döndürür.
Diğer yandan, SQL fonksiyonları yerleşik (sistem tarafından tanımlı) veya kullanıcı tanımlı (kullanıcının özel ihtiyaçları için oluşturduğu) olabilir.
46. Hangi SQL toplam fonksiyonlarını biliyorsunuz?
-
AVG()– ortalama değeri döndürür -
SUM()– değerlerin toplamını döndürür -
MIN()– minimum değeri döndürür -
MAX()– maksimum değeri döndürür -
COUNT()– null değerli olanlar dahil satır sayısını döndürür
47. Hangi SQL skaler fonksiyonlarını biliyorsunuz?
-
LEN()(diğer SQL lehçelerinde –LENGTH()) – boşluklar dahil bir dizgenin uzunluğunu döndürür -
UCASE()(diğer SQL lehçelerinde –UPPER()) – bir dizgeyi büyük harfe çevirir -
LCASE()(diğer SQL lehçelerinde –LOWER()) – bir dizgeyi küçük harfe çevirir -
INITCAP() – bir dizgeyi başlık biçimine çevirir (yani dizgedeki her kelime büyük harfle başlar) -
MID()(diğer SQL lehçelerinde –SUBSTR()) – bir dizgeden alt dizge çıkarır -
ROUND()– sayısal değeri belirtilen ondalığa yuvarlar -
NOW()– geçerli tarih ve saati döndürür
48. SQL'de harf büyüklüğü (case) dönüştürme fonksiyonları nedir?
Harf büyüklüğü dönüştürme fonksiyonları, karakter fonksiyonlarının bir alt kümesini temsil eder ve metin verisinin harf büyüklüğünü değiştirmek için kullanılır. Bu fonksiyonlarla veriyi büyük, küçük veya başlık biçimine çevirebiliriz.
-
UCASE()(diğer SQL lehçelerinde –UPPER()) – bir dizgeyi büyük harfe çevirir -
LCASE()(diğer SQL lehçelerinde –LOWER()) – bir dizgeyi küçük harfe çevirir -
INITCAP()– bir dizgeyi başlık biçimine çevirir (yani her kelime büyük harfle başlar)
49. SQL'de karakter işleme fonksiyonları nedir?
Karakter işleme fonksiyonları, karakter fonksiyonlarının bir alt kümesidir ve metin verisini değiştirmek için kullanılır.
-
CONCAT()– iki veya daha fazla dizgeyi birleştirir; ikinci dizgeyi birincinin sonuna ekler -
SUBSTRING()/SUBSTR()– başlangıç ve bitiş noktalarını sağlayarak bir dizgenin parçasını döndürür -
LENGTH()(diğer SQL lehçelerinde –LEN()) – boşluklar dahil bir dizgenin uzunluğunu döndürür -
REPLACE()– sağlanan bir dizgedeki tanımlı alt dizgenin tüm oluşumlarını başka bir alt dizgeyle değiştirir -
INSTR()– sağlanan bir dizgedeki tanımlı alt dizgenin sayısal konumunu döndürür -
LPAD()veRPAD()– sağ/sola dayalı değer için sol/sağ karakter dolgusu döndürür -
TRIM()– tanımlı tüm karakterleri ve boşlukları, sağlanan bir dizgenin solundan, sağından veya her iki ucundan kaldırır
50. Yerel (local) ve genel (global) değişken arasındaki fark nedir?
Yerel değişkenlere yalnızca tanımlandıkları fonksiyon içinde erişilebilir. Genel değişkenler ise herhangi bir fonksiyonun dışında tanımlanır, sabit bellek yapılarında saklanır ve tüm program boyunca kullanılabilir.
51. SQL ile PL/SQL arasındaki fark nedir?
SQL, ilişkisel veritabanlarını sorgulamak ve yönetmek için standart bir dildir; öncelikle veri işleme ve getirme için kullanılır. PL/SQL (Procedural Language/SQL), Oracle veritabanlarında kullanılan ve döngüler, koşullar, hata yakalama gibi yordamlı programlama yapıları içeren, veritabanı içinde karmaşık iş mantıklarının uygulanmasına olanak tanıyan bir SQL uzantısıdır. Oracle bilginiz hakkında sorular alacağınızı biliyorsanız gözden geçirmek için iyi bir kaynak olan En İyi 20 PL/SQL Mülakat Sorusu ve Cevabı başlıklı başka bir makalemiz de var.
52. LEFT JOIN ile LEFT OUTER JOIN arasındaki fark nedir?
LEFT JOIN ile LEFT OUTER JOIN arasında fark yoktur. Birbirlerinin yerine kullanılabilirler. SQL, OUTER anahtar kelimesini isteğe bağlı kılar; bu nedenle LEFT JOIN, LEFT OUTER JOIN'in kısaltmasıdır. Her ikisi de sol tablodaki tüm kayıtları ve sağ tablodaki eşleşen kayıtları döndürür.
53. SQL'de indeksleme nedir ve performansı nasıl iyileştirir?
İndeksleme, veritabanının satırları daha verimli bulmasını sağlayarak veri getirmeyi hızlandıran özel bir veri yapısı oluşturur. Tüm tablo taramalarına olan ihtiyacı azaltan, optimize edilmiş bir arama tablosu gibi çalışır. Ancak aşırı indeksleme, indekslerin bakımı gerekeceğinden ekleme, güncelleme ve silme işlemlerini yavaşlatabilir.
54. Saklı yordam (stored procedure) nedir ve bir fonksiyondan farkı nedir?
Saklı yordam bir görevi gerçekleştirmek için bir bütün olarak yürütülen, önceden derlenmiş SQL ifadeleri kümesidir. Yordamlar veriyi veya şema nesnelerini değiştirebilir, işlemleri yönetebilir ve sıfır veya daha fazla sonuç kümesi döndürebilir. Fonksiyonlar ise genellikle SQL ifadelerinde kullanılır, bir değer döndürmek zorundadır (skaler veya tablo değerli) ve birçok veritabanında yan etkilere karşı kısıtlanmıştır. Tam davranış veritabanına göre değişir (örneğin T-SQL'de skaler ve tablo değerli fonksiyonlar vardır; PostgreSQL fonksiyonlar ve yordamlar arasında ayrım yapar).
55. ORDER BY ifadesinde varsayılan veri sıralaması nedir ve nasıl değiştirilir?
Varsayılan artandır (NULLS FIRST/LAST veritabanına göre değişir). Sütun bazında ASC/DESC anahtar sözcüklerini şu şekilde kullanın:
SELECT * FROM table_name
ORDER BY col_1 DESC;
56. SQL küme (set) operatörleri nelerdir?
-
UNION– iki sorgudan en az birinin elde ettiği kayıtları döndürür (yinelenenler hariç) -
UNION ALL– iki sorgudan en az birinin elde ettiği kayıtları döndürür (yinelenenler dahil) -
INTERSECT– her iki sorgunun da elde ettiği kayıtları döndürür -
EXCEPT(MySQL ve Oracle'daMINUSolarak adlandırılır) – yalnızca birinci sorgunun elde ettiği, ikinci sorgunun elde etmediği kayıtları döndürür
57. Desen eşleştirme (pattern matching) için sorguda hangi operatör kullanılır?
LIKE operatörü, % ve _ joker karakterleriyle birlikte kullanılır. % jokeri, sıfır dahil herhangi bir sayıda karakteri temsil ederken, _ – tam olarak bir karakteri temsil eder.
58. SQL'de birincil anahtar ile benzersiz anahtar arasındaki fark nedir?
Her iki anahtar türü de bir tablonun bir sütununda benzersiz değerleri garanti ederken, birincil anahtar tablonun her kaydını benzersiz olarak tanımlar; benzersiz anahtar ise o sütunda yinelenenleri engeller.
59. SQL bileşik birincil anahtar nedir?
Bir tablonun birden çok sütuna dayanan birincil anahtarıdır.
60. SELECT ifadesinde SQL cümleciklerinin tipik sırası nedir?
SELECT – FROM – JOIN – ON – WHERE – GROUP BY – HAVING – ORDER BY – LIMIT
61. Yorumlayıcı, SELECT sorgusundaki yaygın ifadeleri hangi sırayla yürütür?
SQL yürütme sırası şöyledir:
FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT/OFFSET (FETCH)
62. SQL'de view nedir?
Bir veya daha fazla veritabanı tablosundan (veya diğer view'lardan) alınan verilerin bir alt kümesini içeren sanal tablodur. Standart view'lar veri depolamaz; maddileştirilmiş view'lar depolar. View'lar sorguları basitleştirebilir, mantığı kapsülleyebilir ve ayrıcalıklarla birlikte sütun/satır kısıtlaması sağlayabilir. Birden çok tablodan veri birleştirip/özetleyebilirler.
63. SQL'de başka bir view'a dayalı view oluşturabilir miyiz?
Evet. Buna iç içe view'lar da denir. Ancak birden çok view'u iç içe kullanmaktan kaçınmalıyız; çünkü kod okunması ve hata ayıklanması zorlaşır.
64. Orijinal tablo silinirse view'ı kullanmaya devam edebilir miyiz?
Hayır. Bu tabloya dayalı herhangi bir view, temel tablo silindikten sonra geçersiz hale gelir. Yine de böyle bir view'ı kullanmaya çalışırsak hata mesajı alırız.
65. Hangi SQL ilişki türlerini biliyorsunuz?
- Bire bir – bir tablodaki her kayıt başka bir tablodaki yalnızca bir kayda karşılık gelir
- Birden çoğa – bir tablodaki her kayıt başka bir tablodaki birkaç kayda karşılık gelir
- Çoktan çoğa – her iki tablodaki her kayıt diğer tablodaki birden fazla kayda karşılık gelir
66. BOOLEAN veri alanının olası değerleri nelerdir?
PostgreSQL gibi bazı SQL lehçelerinde BOOLEAN veri türü açıkça vardır ve TRUE, FALSE veya NULL değerlerini alır. Microsoft SQL Server gibi diğer lehçelerde ise BIT veri türü, Boolean değerleri 1 (true) veya 0 (false) tamsayıları olarak saklamak için kullanılır.
67. SQL'de normalleştirme nedir?
Normalleştirme, veri tekrarını, bağımlılığını, kopyayı ve tutarsızlığı azaltacak şekilde veriyi düzenlemeyi ve yeniden yapılandırmayı içeren bir veritabanı tasarımı sürecidir. Bu, geliştirilmiş veri bütünlüğüne, veritabanında daha fazla tabloya, daha verimli veri erişimine ve güvenlik kontrolüne ve daha yüksek sorgu esnekliğine yol açar.
68. SQL'de normalleştirmeme (denormalization) nedir?
Normalleştirmeme, normalleştirmenin tersidir: veri tekrarını artırır ve birden çok tablodan veriyi birleştirir. Normalleştirmeme, okuma işlemlerinin yazma işlemlerinden daha önemli olduğu durumlarda, karmaşık join'lerden kaçınmaya ve sorgu çalışma süresini azaltmaya yardımcı olduğundan, veritabanı altyapısının performansını optimize eder.
69. Bir sütunu yeniden adlandırmak ile ona takma ad vermek arasındaki fark nedir?
Bir sütunu yeniden adlandırmak, orijinal tablodaki gerçek adını kalıcı olarak değiştirmek demektir. Bir sütuna takma ad vermek ise, bir SQL sorgusu yürütülürken kodu daha okunur ve derli toplu yapmak amacıyla ona geçici bir ad vermektir.
70. İçiçe ve korele alt sorgular arasındaki fark nedir?
Korele alt sorgu, yürütülmesi için dış sorgudaki değerlere başvuran, daha büyük (dış) bir sorgunun içine yerleştirilmiş iç sorgudur; yani korele alt sorgu dış sorgusuna bağlıdır. Buna karşılık, korele olmayan bir alt sorgu dış sorgudaki veriye bağlı değildir ve ondan bağımsız olarak çalıştırılabilir.
71. Kümelenmiş ve kümelenmemiş indeksler arasındaki fark nedir?
Kümelenmiş indeks bir tablonun kayıtlarının fiziksel sırasını tanımlarken ve anahtar değerlere göre veri araması yaparken; kümelenmemiş indeks, kayıtların sırasını diskteki gerçek verinin fiziksel sırasıyla eşleşmeyecek şekilde tutar. Bir tabloda yalnızca bir kümelenmiş indeks olabilir; ancak birçok kümelenmemiş indeks olabilir.
72. CASE() fonksiyonu nedir?
SQL'de if-then-else mantığını uygulamanın yoludur. Bu fonksiyon, WHEN cümleciklerinde sağlanan koşulları sırasıyla kontrol eder ve ilk koşul sağlandığında ilgili THEN cümleciğindeki değeri döndürür. Hiçbir koşul sağlanmazsa, ELSE cümleciği verilmişse oradaki değeri, aksi halde NULL döndürür. Sözdizimi:
CASE
WHEN condition_1 THEN value_1
WHEN condition_2 THEN value_2
WHEN condition_3 THEN value_3
...
ELSE value
END;
73. DELETE ve TRUNCATE ifadeleri arasındaki fark nedir?
DELETE, WHERE cümleciğinde bir koşula bağlı olarak bir tablodan bir veya daha fazla satırı kaldırmak için kullanılan bir DML (Veri Manipülasyon Dili) komutudur. Yalnızca bir işlem içinde (ROLLBACK ile) geri alınabilirdir.
TRUNCATE, sayfaları serbest bırakarak bir tablodaki tüm satırları kaldıran bir DDL (Veri Tanımlama Dili) komutudur. Daha hızlıdır ancak genellikle geri alınamaz ve yabancı anahtarla başvurulan tablolarda kullanılamaz.
74. DROP ve TRUNCATE ifadeleri arasındaki fark nedir?
DROP, bir tabloyu, tablo yapısı ve ilişkili tüm kısıtlar, diğer tablolarla ilişkiler ve erişim ayrıcalıkları dahil tamamen veritabanından siler. TRUNCATE ise tablo yapısını ve kısıtları etkilemeden bir tablodaki tüm satırları siler. Her ikisi de DDL'dir. DROP tabloyu ve meta verisini kaldırır; TRUNCATE tüm satırları siler ancak tablo tanımını tutar. Performans ve işlem davranışı veritabanı motoruna bağlıdır.
75. HAVING ve WHERE ifadeleri arasındaki fark nedir?
İlki, gruplandıktan sonra toplam veriler üzerinde çalışır; ikincisi ise her satırı ayrı ayrı kontrol eder. Her iki ifade de bir sorguda yer alıyorsa, şu sırayla görünürler:WHERE – GROUP BY – HAVING. SQL motoru da onları aynı sırada yorumlar.
76. Bir tabloya kayıt nasıl eklenir?
INSERT INTO ifadesi VALUES ile birlikte kullanılarak. Sözdizimi:
INSERT INTO table_name
VALUES (value_1, value_2, ...);
77. Bir tablodan kayıt nasıl silinir?
DELETE ifadesi kullanılarak. Sözdizimi:
DELETE FROM table_name
WHERE condition;
Bu şekilde, sağlanan koşulu sağlayan birden fazla kaydı da silebiliriz.
78. Bir tabloya sütun nasıl eklenir?
ALTER TABLE ifadesi ADD ile birlikte kullanılarak. Sözdizimi:
ALTER TABLE table_name
ADD column_name datatype;
79. Bir tablonun sütunu nasıl yeniden adlandırılır?
ALTER TABLE ifadesi RENAME COLUMN ... TO ... ile birlikte kullanılarak. Sözdizimi:
ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name;
80. Bir tablodan sütun nasıl silinir?
ALTER TABLE ifadesi DROP COLUMN ile birlikte kullanılarak. Sözdizimi:
ALTER TABLE table_name
DROP COLUMN column_name;
81. Bir tablodaki tüm çift veya tüm tek kayıtlar nasıl seçilir?
2'ye bölümün kalanını kontrol ederek. Bazı SQL sürümlerinde (ör. PostgreSQL ve MySQL) MOD fonksiyonunu; diğerlerinde (Microsoft SQL Server ve SQLite) modülüs (%) operatörünü kullanırız. MOD kullanarak tüm çift kayıtları seçmek için:
SELECT * FROM table_name
WHERE MOD(ID_column, 2) = 0;
% kullanarak tüm çift kayıtları seçmek için:
SELECT * FROM table_name
WHERE ID_column % 2 = 0;
Tüm tek kayıtları seçmek için her iki durumda da sözdizimi aynıdır, yalnızca = yerine <> eşitsizlik operatörünü kullanırız.
82. Sorgu yaparken yinelenen kayıtları nasıl önlersiniz?
DISTINCT ifadesini SELECT ile birlikte kullanarak veya o tablo için benzersiz bir anahtar oluşturarak.
83. Bir tabloya çok sayıda satır nasıl eklenir?
INSERT INTO ifadesi VALUES ile birlikte kullanılarak. Sözdizimi:
INSERT INTO table_name
VALUES (value_1, value_2, ...),
(value_3, value_4, ...),
(value_5, value_6, ...),
...;
84. Bir tablonun bir sütununda n'inci en yüksek değer nasıl bulunur?
Eşitlikleri doğru ele almak için pencere fonksiyonları kullanarak:
SELECT column_name
FROM (
SELECT column_name, DENSE_RANK() OVER (ORDER BY column_name DESC) AS rnk
FROM table_name
) t
WHERE rnk = :n;
Sıraya göre n'inci satır (eşitlikler göz ardı edilerek): ORDER BY column_name DESC OFFSET n-1 ROWS FETCH NEXT 1 ROW ONLY.
85. Bir tablodaki metin sütununda belirli bir harfle başlayan değerler nasıl bulunur?
LIKE operatörü % ve _ joker karakterleriyle birlikte kullanılarak. Örneğin, bir tabloda "A" ile başlayan tüm soyadları bulmamız gerekiyor. Sorgu:
SELECT * FROM table_name
WHERE surname LIKE 'A_';
Burada bir soyadın en az iki harf içermesi gerektiğini varsayıyoruz. Bu varsayım olmadan (yani soyad sadece A olabilir), sorgu şöyledir:
SELECT * FROM table_name
WHERE surname LIKE 'A%';
86. Bir tablodaki son id nasıl bulunur?
En basit yöntem, toplam fonksiyon MAX() kullanmaktır.
SELECT MAX(id) AS highest_id
FROM table_name;
ORDER BY ile LIMIT veya TOP
SELECT id
FROM table_name
ORDER BY id DESC
LIMIT 1;
87. Bir tablodan rastgele satırlar nasıl seçilir?
RAND() fonksiyonu, ORDER BY ve LIMIT ile birlikte kullanılarak. Bazı SQL lehçelerinde, örneğin PostgreSQL'de RANDOM() olarak adlandırılır. Örneğin, aşağıdaki kod MySQL'de bir tablodan rastgele beş satır döndürür:
SELECT * FROM table_name
ORDER BY RAND()
LIMIT 5;
Senaryo Bazlı SQL Mülakat Soruları
Senaryo bazlı sorular, iş dünyasındaki gerçek problemleri SQL ile çözme becerinizi test eder. Görüşmeciler, yalnızca sözdizimi bilginizi değil, aynı zamanda problem çözme yaklaşımınızı ve yinelenenler, NULL değerleri ve eşitlikler gibi uç durumları ele alma yeteneğinizi değerlendirmek için bunları kullanır.
88. Bir tablodaki yinelenen kayıtları nasıl bulur ve kaldırırsınız?
Yinelenenleri bulma:
SELECT email, COUNT(*) AS duplicate_count
FROM users
GROUP BY email
HAVING COUNT(*) > 1;
Yinelenenleri kaldırma (bir kaydı saklayarak):
WITH duplicates AS (
SELECT id,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
FROM users
)
DELETE FROM users
WHERE id IN (SELECT id FROM duplicates WHERE rn > 1);
Bu yaklaşım, ROW_NUMBER() ile yinelenenleri belirler ve en düşük ID'li kaydı saklar.
89. Kümülatif toplam (running total) nasıl hesaplanır?
SUM() pencere fonksiyonunu bir ORDER BY cümleciğiyle kullanın:
SELECT
transaction_date,
amount,
SUM(amount) OVER (ORDER BY transaction_date) AS running_total
FROM transactions;
Kategori başına kümülatif toplam (ör. müşteri bazında) için:
SELECT
customer_id,
transaction_date,
amount,
SUM(amount) OVER (
PARTITION BY customer_id
ORDER BY transaction_date
) AS customer_running_total
FROM transactions;
90. Departmanındaki ortalama maaştan fazla kazanan çalışanları nasıl bulursunuz?
Bu klasik bir korele alt sorgu senaryosudur:
SELECT e.name, e.department, e.salary
FROM employees e
WHERE e.salary > (
SELECT AVG(salary)
FROM employees
WHERE department = e.department
);
Alternatif olarak pencere fonksiyonu kullanarak:
SELECT name, department, salary
FROM (
SELECT
name,
department,
salary,
AVG(salary) OVER (PARTITION BY department) AS dept_avg
FROM employees
) t
WHERE salary > dept_avg;
91. Bir sayı dizisindeki boşlukları (ör. eksik fatura numaraları) nasıl bulursunuz?
Her değeri bir sonrakiyle karşılaştırmak için LEAD() kullanın:
SELECT
invoice_number,
LEAD(invoice_number) OVER (ORDER BY invoice_number) AS next_invoice,
LEAD(invoice_number) OVER (ORDER BY invoice_number) - invoice_number - 1 AS gap_size
FROM invoices
WHERE LEAD(invoice_number) OVER (ORDER BY invoice_number) - invoice_number > 1;
Bu, ardışık fatura numaraları arasındaki boşluğun 1'den büyük olduğu yerleri tanımlar.
92. Ardışık aylarda alışveriş yapan müşterileri nasıl bulursunuz?
Önceki satırla karşılaştırmak için LAG() kullanın:
WITH monthly_purchases AS (
SELECT
customer_id,
DATE_TRUNC('month', purchase_date) AS purchase_month,
LAG(DATE_TRUNC('month', purchase_date)) OVER (
PARTITION BY customer_id
ORDER BY DATE_TRUNC('month', purchase_date)
) AS prev_month
FROM purchases
GROUP BY customer_id, DATE_TRUNC('month', purchase_date)
)
SELECT DISTINCT customer_id
FROM monthly_purchases
WHERE purchase_month = prev_month + INTERVAL '1 month';
93. Veriyi satırlardan sütunlara nasıl döndürürsünüz (pivot)?
CASE ifadeleriyle koşullu toplama kullanın:
SELECT
product_name,
SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 1 THEN amount ELSE 0 END) AS jan_sales,
SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 2 THEN amount ELSE 0 END) AS feb_sales,
SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 3 THEN amount ELSE 0 END) AS mar_sales
FROM sales
GROUP BY product_name;
Bazı veritabanlarında (SQL Server, Oracle) bu işlem için yerel PIVOT sözdizimi vardır.
94. Her kategoride satışa göre en iyi 3 ürünü nasıl bulursunuz?
DENSE_RANK()'i PARTITION BY ile kullanın:
WITH ranked_products AS (
SELECT
category,
product_name,
SUM(sales_amount) AS total_sales,
DENSE_RANK() OVER (
PARTITION BY category
ORDER BY SUM(sales_amount) DESC
) AS sales_rank
FROM sales
GROUP BY category, product_name
)
SELECT category, product_name, total_sales
FROM ranked_products
WHERE sales_rank <= 3
ORDER BY category, sales_rank;
95. Veritabanı işlemlerinde ACID özellikleri nelerdir?
ACID, güvenilir veritabanı işlemlerini garanti eden dört temel özelliğin kısaltmasıdır:
- Atomiklik: Bir işlem "ya hep ya hiç"tir – ya tüm işlemler başarılı olur ya da hiçbiri olmaz
- Tutarlılık: Bir işlem, veritabanını tanımlı tüm kural ve kısıtları koruyarak bir geçerli durumdan diğerine taşır
- İzolasyon: Eşzamanlı işlemler birbirini etkilemez; her işlem verinin tutarlı bir anlık görüntüsünü görür
- Dayanıklılık: Bir işlem onaylandıktan (commit) sonra, sistem çökse bile değişiklikler kalıcıdır
Örnek işlem:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
96. Kilitlenme (deadlock) nedir ve nasıl önlenir?
Kilitlenme, iki veya daha fazla işlemin birbirlerinin kilitleri bırakmasını beklemesiyle oluşur; böylece hiçbirinin ilerleyemediği döngüsel bir bağımlılık oluşur.
Örnek senaryo: İşlem A Tablo X'i kilitler ve Tablo Y'yi bekler; İşlem B Tablo Y'yi kilitler ve Tablo X'i bekler.
Önleme stratejileri:
- Tutarlı kilit sıralaması: Tüm işlemler boyunca kilitleri her zaman aynı sırada alın
- İşlemleri kısa tutun: Mümkün olduğunca hızlı commit veya rollback yapın
- Uygun izolasyon seviyeleri kullanın: Daha düşük seviyeler kilit çekişmesini azaltır
- Yalnızca gereken verilere erişin: Gereksiz satırları kilitlemekten kaçının
- Kilitlenme yeniden denemelerini yönetin: Çoğu veritabanı kilitlenmeleri otomatik algılar ve bir işlemi geri alarak çözer
97. Yavaş çalışan bir SQL sorgusunu nasıl optimize edersiniz?
Başlıca optimizasyon stratejileri:
-
Uygun indeksler ekleyin:
WHERE,JOINveORDER BYcümleciklerinde kullanılan sütunlara indeks oluşturun -
Yürütme planlarını analiz edin: Darboğazları belirlemek için
EXPLAIN(PostgreSQL/MySQL) veyaEXPLAIN PLAN(Oracle) kullanın -
SELECT *'dan kaçının: Yalnızca ihtiyacınız olan sütunları getirin
-
Alt sorgular yerine JOIN kullanın:
JOIN'ler korele alt sorgulardan genellikle daha verimlidir -
Sonuç kümelerini sınırlayın: Tüm satırlara ihtiyacınız yoksa
LIMIT/TOPkullanın -
İndeksli sütunlarda fonksiyonlardan kaçının:
WHERE YEAR(date_col) = 2026indeks kullanamaz; bunun yerineWHERE date_col >= '2026-01-01'kullanın -
Bölümleme (partitioning) düşünün: Çok büyük tablolar için tarihe veya kategoriye göre bölümleyin
98. Hesaplamalarda ve karşılaştırmalarda NULL değerlerini nasıl ele alırsınız?
NULL, eksik veya bilinmeyen veriyi temsil eder ve özel işlem gerektirir:
-
Karşılaştırmalar:
= NULLyerineIS NULLveyaIS NOT NULLkullanın -
COALESCE(): İlk
NULLolmayan değeri döndürür:COALESCE(column, 'default') -
NULLIF(): İki değer eşitse
NULLdöndürür:NULLIF(a, b) -
ISNULL() / NVL():
NULLdeğerleri değiştirmek için veritabanına özgü fonksiyonlar
SELECT
name,
COALESCE(phone, email, 'No contact') AS contact_info,
CASE WHEN status IS NULL THEN 'Unknown' ELSE status END AS status
FROM customers;
99. Bir kullanıcı için ardışık giriş günlerinin en uzun serisini nasıl bulursunuz?
Bu, gelişmiş bir "ada ve boşluklar" problemidir:
WITH login_groups AS (
SELECT
user_id,
login_date,
login_date - ROW_NUMBER() OVER (
PARTITION BY user_id
ORDER BY login_date
) * INTERVAL '1 day' AS group_id
FROM user_logins
)
SELECT
user_id,
MIN(login_date) AS streak_start,
MAX(login_date) AS streak_end,
COUNT(*) AS streak_length
FROM login_groups
GROUP BY user_id, group_id
ORDER BY streak_length DESC
LIMIT 1;
İpucu, her tarihten bir satır numarasını çıkarmaktır – ardışık tarihler aynı "group_id" değerini üretir.
Ekibinizi SQL ile Geliştirin
SQL mülakat hazırlığı iş arayanlar ve işe alım yöneticileri için çok önemli olmakla birlikte, işletmelerin ekipleri için sürekli SQL eğitimine yatırım yapması da aynı derecede önemlidir. Verilerle çalışabilmek hiç olmadığı kadar önemli; bu nedenle çalışanlarınızın güçlü SQL becerilerine sahip olmasını sağlamak, şirketinizin başarısı için oyunun kurallarını değiştirebilir.
Tüm ekibinizin SQL'de yetkin olmasını sağlamak isteyen bir ekip lideri veya işletme sahibiyseniz, DataCamp for Business, çalışanlarınızın temellerden ileri kavramlara kadar SQL becerilerini ustalıkla öğrenmesine yardımcı olabilecek, özel olarak uyarlanmış eğitim programları sunar. Şunları sağlayabiliriz:
- Hedefe yönelik öğrenme yolları: Ekibinizin mevcut beceri seviyesi ve iş ihtiyaçlarına göre özelleştirilebilir.
- Uygulamalı alıştırmalar: Öğrenmeyi pekiştiren ve kalıcılığı artıran gerçek dünya senaryoları ve egzersizler.
- İlerleme takibi: Ekibinizin ilerlemesini izlemek ve değerlendirmek için araçlar; öğrenme hedeflerine ulaştıklarından emin olmanızı sağlar.
DataCamp gibi platformlar aracılığıyla SQL yetkinliğine yatırım yapmak, yalnızca ekibinizin yeteneklerini artırmakla kalmaz; aynı zamanda işletmenize rekabet avantajı da sağlar; rekabetçi kalmanızı ve sonuç üretmenizi mümkün kılar. Ekibimizle iletişime geçin ve bugün bir demo isteyin.
Sonuç
Özetle, başlangıç, orta ve senaryo bazlı 99 temel SQL mülakat sorusunu ve bunların doğru cevaplarını ele aldık. Umarız bu bilgiler, mülakata hazırlanmanıza ve kendinizi daha güvende hissetmenize yardımcı olur; ister SQL alanında iş arıyor olun ister orta seviye bir SQL pozisyonu için adayları işe alıyor olun.
Bir mülakata daha iyi hazırlanmak için daha fazla eğitime ihtiyacınız olduğunu düşünüyorsanız, SQL kurslarımızın tam listesine göz atmayı düşünün:
FAQs
SQL öğrenmeye nasıl başlayabilirim?
SQL öğrenmeye başlamak için, veritabanı kavramlarının ve ilişkisel veritabanı yönetim sistemlerinin temelleriyle başlayın. DataCamp'in başlangıç için birçok kaynağı vardır; örneğin Introduction to SQL kursu, Data Analyst in SQL Career Track ve SQL cheat sheet. Alternatif olarak tüm kaynaklara göz atmak için SQL courses sayfasını ziyaret edin.
Gerçek dünya SQL problemlerini nerede pratik edebilirim?
DataCamp platformunda her seviyeye uygun, becerilerinizi geliştirmenize yardımcı olacak birçok SQL projesi bulunmaktadır.
Yeni başlayanlar için yaygın SQL mülakat soruları nelerdir?
Başlangıç seviyesindeki adaylara genellikle temel SQL kavramlarını açıklamaları istenir; örneğin SELECT ve INSERT ifadeleri arasındaki fark, bir veritabanında anahtarların (birincil ve yabancı anahtarlar) amacı ve tek bir tablodan koşullar (WHERE cümleciği) kullanarak veri çekmeye yönelik basit sorgular.
Orta seviye uygulayıcılar için yaygın SQL mülakat soruları nelerdir?
Orta seviye uygulayıcılar, join'ler (INNER, LEFT, RIGHT, FULL), alt sorgular, toplama ve veriyi gruplama (GROUP BY) ve UNION, INTERSECT ve EXCEPT gibi küme işlemlerinin kullanımı gibi daha karmaşık SQL kavramlarıyla ilgili sorularla karşılaşabilir. Ayrıca performans optimizasyonu içeren problemleri çözmeleri de istenebilir.
Bir SQL mülakatına nasıl hazırlanmalıyım?
Bir SQL mülakatına hazırlık şunları içermelidir:
- SQL temelleri ve ileri kavramları gözden geçirmek.
- Yaygın problemleri çözmek için sorgu yazmayı pratik etmek.
- Veritabanı tasarımı ve normalleştirmeyi anlamak.
- İşverenin kullandığı belirli SQL lehçesine (ör. PostgreSQL, MySQL, SQL Server) aşina olmak.
- Çevrimiçi mevcut örnek mülakat sorularını ve problemlerini çözmek.
Teknik bir SQL mülakatında ne beklemeliyim ve becerilerimi en iyi nasıl gösterebilirim?
Teknik bir SQL mülakatında, SQL sözdizimi, veritabanı tasarımı, sorgu optimizasyonu ve SQL kullanarak problem çözme yeteneklerinizi test eden sorular bekleyebilirsiniz. Becerilerinizi göstermek için:
- SQL problemlerini çözerken düşünce sürecinizi açıklama pratiği yapın.
- Bir beyaz tahta veya çevrimiçi kodlama ortamında hatasız SQL sorguları yazmaya hazırlıklı olun.
- Join'ler, alt sorgular ve işlemler gibi karmaşık kavramları örneklerle anladığınızı gösterin.
- Veritabanlarıyla çalışma konusunda gerçek dünya deneyimleriniz varsa, üstesinden geldiğiniz zorlukları veya yaptığınız optimizasyonları vurgulayın.
Belirli SQL lehçelerini öğrenmek ne kadar önemli ve hangilerine odaklanmalıyım?
SQL'in temel sözdizimi farklı RDBMS'ler arasında tutarlı olmakla birlikte, her sistemin (MySQL, PostgreSQL, SQL Server, Oracle gibi) benzersiz özellik ve fonksiyonlara sahip kendi lehçesi vardır. Belirli bir RDBMS kullanan rolleri hedefliyorsanız, belirli bir SQL lehçesini öğrenmek önemlidir. Kariyer hedeflerinize en uygun veya sektörünüzde en yaygın kullanılan lehçeye odaklanın. Ancak, standart SQL'de sağlam bir temel, gerektiğinde farklı lehçelere uyum sağlamayı kolaylaştırır.
SQL mülakatlarına hazırlanmak için DataCamp'in ekstra ÜCRETSİZ kaynakları var mı?
Evet! Hâlihazırda bir üniversite öğretim elemanı veya öğrencisiyseniz, tüm premium kataloğumuza ÜCRETSİZ erişmek için DataCamp Classrooms'u kullanabilirsiniz. Buna SQL öğrenim yollarımız ve sertifikalarımız dahildir.
Ayrıca ücretsiz SQL Basics cheat sheet'imize de göz atabilirsiniz.
2026'da mülakatlar için çalışılması gereken en önemli SQL konuları nelerdir?
Şu temel alanlara odaklanın: (1) Join'ler ve alt sorgular – INNER, LEFT, RIGHT ve FULL join'leri ile korele ve korele olmayan alt sorgular; (2) Pencere fonksiyonları – ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD ve kümülatif toplamlar; (3) CTE'ler (Ortak Tablo İfadeleri) – okunabilir, bakımı kolay sorgular için; (4) Toplamalar ve GROUP BY – HAVING cümleciği kullanımı dahil; (5) Sorgu optimizasyonu – indeksleme stratejileri ve yürütme planları.
ROW_NUMBER, RANK ve DENSE_RANK arasındaki fark nedir?
Üçü de sıralama yapan pencere fonksiyonlarıdır ancak eşitlikleri farklı ele alırlar: ROW_NUMBER() eşitliklerde bile benzersiz artan sayılar atar (1, 2, 3, 4); RANK() eşitliklere aynı dereceyi verir ancak sonraki numaraları atlar (1, 2, 2, 4); DENSE_RANK() eşitliklere aynı dereceyi atlar olmadan verir (1, 2, 2, 3). Eşitliklerin aynı sırayı paylaşması gereken "n'inci en yüksek" değeri bulurken DENSE_RANK kullanın.
IBM Sertifikalı Veri Bilimci (2020); daha önce dünya genelindeki petrol ve gaz sahalarında 12+ yıllık uluslararası iş deneyimine sahip Petrol Jeoloğu/Jeomodelleyicisi. Python, R ve SQL konusunda yetkin. Uzmanlık alanları: veri temizleme, veri işleme, veri görselleştirme, veri analizi, veri modelleme, istatistik, hikâye anlatımı, makine öğrenimi. Veri bilimi topluluklarını yönetme ve veri bilimi ile kariyer konularında makale ve eğitim yazma/gözden geçirme konusunda kapsamlı deneyim.
