{
  "assessmentTests": {
    "sql_test": {
      "name": "SQL Testi",
      "desc": "Filtreleme, birleştirmeler, toplama, alt sorgular ve pencere işlevleri konusunda 30 senaryo sorusu — SQL becerilerinizin iş ilanında SQL yeterliliğinin ne anlama geldiğini karşılayıp karşılamadığını öğrenin.",
      "recommendation": "SQL becerilerinizin profili",
      "results": {
        "beginner": {
          "name": "Başlangıç",
          "desc": "Çalışan bir SELECT ifadesi yazabilir ve birkaç koşulla filtreleyebilirsiniz, ancak kaçırdığınız sorular NULL işleme ve birleştirme mekanikleri etrafında kümelenir — bir sütunu NULL ile = kullanarak karşılaştırmak, LEFT JOIN gerçekte neyi koruduğu, BETWEEN sınırlarının tam olarak nasıl çalıştığı. Bunların hiçbiri veritabanlarında kötü olmakla ilgili değildir; bunlar deneme yanılma yoluyla SQL öğrenen insanları tam bu noktada tuzağa düşüren özel kurallardır. İşte önemlidirler çünkü her biri bir sorgunun makul görünen ancak yanlış satır sayısı döndürdüğü yerdir.",
          "recommendation": "Sırasıyla üç şeyle başlayın: WHERE col = NULL hiçbir zaman eşleşmez (bunun yerine IS NULL gereklidir), INNER JOIN eşleşmeyen satırları düşürürken LEFT JOIN onları tutar, ve BETWEEN tam olarak hangi sınırları içerir. Mode Analytics'in SQL öğreticisi ve PostgreSQL belgeleri her üçünü çalıştırılabilir örneklerle kapsar."
        },
        "intermediate": {
          "name": "Orta Seviye",
          "desc": "Günlük raporlama sorgularını rahatça işlersiniz — birleştirmeler, GROUP BY, basit filtreleme — ve rutin pano veya ad-hoc analiz çalışması tarafından yavaşlatılmazsınız. Buradan İleri Seviyeye kadar olan boşluk çoğunlukla cümlelerin etkileşim kurduğu zaman meydana gelen şeydir: JOIN yapılan tabloda bir WHERE cümlesinin sessizce bir LEFT JOIN'i INNER JOIN'e çevirmesi, birleştirme satır sayılarını bir agregat uygulanmadan önce çoğaltması, bir NOT IN sessizce tüm satırları bir NULL subsorguya kaydığında düşürmesi. Bunlar hızlı bir göz kontrolünü geçen ve yalnızca biri toplam olarak başka bir raporla karşılaştırdığında ortaya çıkan tür hatalarıdır.",
          "recommendation": "Her bir cümlecinin ne yaptığından ziyade cümlelerin nasıl etkileşim kurduğuna odaklanın: LEFT JOIN'in sağ tarafındaki sütunlara WHERE filtrelemesi, bir agregat uygulanmadan önce bir-çok birleştirmelerinden satır çarpması, ve neden NOT IN NULL varsa (EXISTS genellikle olmaz) tüm satırları kaldırır. Daha sonra HAVING vs WHERE, bu bölünme zaten her iki cümleyi de bilen insanları tuzağa düşürür."
        },
        "advanced": {
          "name": "İleri Seviye",
          "desc": "Bu, çoğu iş ilanının 'güçlü SQL' ile kastedilen seviyedir. Çok birleştirmeli bir sorguyu okur ve çalıştırmadan satır sayısını tahmin edebilirsiniz, sonuç kümesi neden değiştiğini sadece değiştiğini değil bilirsiniz, ve iç içe geçmiş bir sorgu yerine bir CTE veya pencere işlevi kullanırsınız, daha net araç olduğunda. Bu bandı tepeden ayıran şey, işin savunma tarafıdır: bağlılarda hangi sıralama işlevini kullanacağını bilmek, bir işlem eş zamanlı bir oturumdan neyi yalıtır, ve eksik bir ON DELETE kuralının veritabanı düzeyinde gerçekte ne yaptığı.",
          "recommendation": "Diğer insanların da dokunduğu veriye koruyan parçalara itilmek: RANK, DENSE_RANK ve bağlılarda ROW_NUMBER arasındaki fark, COMMIT gerçekten görünür kılar ve kime, ve dış anahtar DELETE davranışı. Pencere işlevleri ve işlem yalıtımı üzerine derinlemesine dalış için The Index newsletter veya SQL for Devs'i sonraki durak olarak kullanın."
        },
        "expert": {
          "name": "Uzman",
          "desc": "Her bölümün tepesinde puanlandı — filtreleme ve NULL semantiği, birleştirmeler ve küme işlemleri, toplama ve alt sorgular, pencere işlevleri, CTE'ler ve kısıtlamalar. Pratik olarak, bu, size bir yabancı çok birleştirmeli rapor sorgusu verilmesini ve neden sözdiziminin ne söylese değil de neden satır sayısını döndürdüğünü açıklayabileceğin anlamına gelir, bu daha zor ve daha değerli beceridir. Bu seviyede sorgu dili nadiren sınırlayıcı faktördür; sınırı genellikle şema tasarımı veya altındaki verilerin boyutudur.",
          "recommendation": "Getiriler artık yürütme planlarında ve tasarımda olur: bir sorguyu yavaş olduğunu varsaymadan önce EXPLAIN çıkışını okumak, yazma maliyetine karşı bir denge olarak indeksleme stratejisi, ve bir şema büyüdükçe tutmuş bu kararlar. Bir rol için taranıyorsanız, SQL özelliklerini adlandırmak yerine üretimde bulduğunuz birleştirme fan-otu veya NOT IN/NULL tuzağı gibi bir sorgu hatası açıklayın — bu mantığı gösterir, sadece kelime türünü göstermez."
        }
      },
      "questions": [
        {
          "question": "Boş bırakılabilir age sütununa sahip bir tablonuz var. SELECT * FROM users WHERE age = NULL çalıştırırsınız. Birkaç satırın age NULL olarak ayarlanmış olsa bile, bu kaç satır döndürür?",
          "options": [
            {
              "icon": "",
              "label": "age NULL olan tüm satırlar, çünkü = NULL'u herhangi bir değer gibi eşleştirir"
            },
            {
              "icon": "",
              "label": "Sıfır — herhangi bir şeyi NULL ile = karşılaştırma UNKNOWN üretir, hiçbir zaman TRUE olmaz, bu nedenle hiçbir satır eşleşmez; bunun yerine IS NULL gereklidir"
            },
            {
              "icon": "",
              "label": "Söz dizimi hatası — NULL, = işaretinin sağ tarafında görünemez"
            },
            {
              "icon": "",
              "label": "Tablodaki tüm satırlar, çünkü NULL karşılaştırmaları varsayılan olarak TRUE'ya dönüşür"
            }
          ]
        },
        {
          "question": "SELECT DISTINCT department, role FROM employees çalıştırırsınız. DISTINCT yinelenenleri neyin çoğunu kaldırır?",
          "options": [
            {
              "icon": "",
              "label": "Departman ve rolün bir bileşimi — bir satır, yalnızca her iki sütun da tam olarak başka bir satırla eşleşirse kaldırılır"
            },
            {
              "icon": "",
              "label": "Yalnızca yinelenen department değerleri, her role bakılmaksızın"
            },
            {
              "icon": "",
              "label": "Yalnızca yinelenen role değerleri, her departman bakılmaksızın"
            },
            {
              "icon": "",
              "label": "Hiçbir şey — DISTINCT yalnızca tek bir sütunla çalışır"
            }
          ]
        },
        {
          "question": "Bir name sütunu WHERE name LIKE 'A_' ile filtrelenir. Bu değerlerden hangisi eşleşir: 'A', 'Al', 'Ana', 'Ally'?",
          "options": [
            {
              "icon": "",
              "label": "'A' — alt çizgi isteğe bağlı ve sıfır veya daha fazla karakterle eşleşir"
            },
            {
              "icon": "",
              "label": "'Al' — alt çizgi tam olarak bir karakterle eşleşir, bu nedenle LIKE 'A_' A ile başlayan herhangi bir iki karakterli dizeyle eşleşir"
            },
            {
              "icon": "",
              "label": "'Ana' ve 'Ally' — alt çizgi herhangi bir sayıda sondaki karakterle eşleşir"
            },
            {
              "icon": "",
              "label": "Dört değerin tamamı eşleşir, çünkü LIKE uzunluğu görmezden gelir"
            }
          ]
        },
        {
          "question": "Bir price sütunu WHERE price BETWEEN 10 AND 20 ile filtrelenir. Tam olarak 10 veya tam olarak 20 fiyatla satırlar dahil edilir mi?",
          "options": [
            {
              "icon": "",
              "label": "Hayır — BETWEEN her iki uç noktayı hariç tutar"
            },
            {
              "icon": "",
              "label": "Evet — BETWEEN her iki tarafında kapsamlı, price >= 10 AND price <= 20 ile eşdeğerdir"
            },
            {
              "icon": "",
              "label": "Yalnızca price = 10 dahil edilir; üst sınır dışlamalıdır"
            },
            {
              "icon": "",
              "label": "Yalnızca price = 20 dahil edilir; alt sınır dışlamalıdır"
            }
          ]
        },
        {
          "question": "orders tablosunun 10 satırı var ve 3 tanesi NULL shipped_date'ye sahiptir. SELECT COUNT(*) FROM orders döndürür ne, ve SELECT COUNT(shipped_date) FROM orders döndürür ne?",
          "options": [
            {
              "icon": "",
              "label": "10, sonra 10 — COUNT her zaman NULL'lara bakılmaksızın satırları sayar"
            },
            {
              "icon": "",
              "label": "7, sonra 7 — her iki form da NULL satırlarını atlar"
            },
            {
              "icon": "",
              "label": "10, sonra 7 — COUNT(*) her satırı sayar, COUNT(column) yalnızca bu sütunun NULL olmadığı satırları sayar"
            },
            {
              "icon": "",
              "label": "10, sonra 3 — COUNT(column) yalnızca NULL değerlerini sayar"
            }
          ]
        },
        {
          "question": "SELECT name, salary FROM employees ORDER BY 2 DESC çalıştırırsınız. 2 neye atıfta bulunur?",
          "options": [
            {
              "icon": "",
              "label": "Söz dizimi hatası — ORDER BY yalnızca sütun adlarını kabul eder, sayıları değil"
            },
            {
              "icon": "",
              "label": "Sonucun ikinci satırı"
            },
            {
              "icon": "",
              "label": "Tiebreaker olarak kullanılan 2 değeri"
            },
            {
              "icon": "",
              "label": "SELECT listesindeki ikinci sütun, salary — ORDER BY kısayol olarak bir sütunun konum numarasını kabul eder"
            }
          ]
        },
        {
          "question": "Standart SQL'de, 'Ana' || ' ' || 'Lee' neye değerlendirilir?",
          "options": [
            {
              "icon": "",
              "label": "Söz dizimi hatası — SQL'in birleştirme operatörü yok"
            },
            {
              "icon": "",
              "label": "3 — || bir boolean OR olarak ele alınır ve sayı döndürür"
            },
            {
              "icon": "",
              "label": "'AnaLee' — || boşlukları korumadan birleştirir"
            },
            {
              "icon": "",
              "label": "'Ana Lee' — || standart SQL dize birleştirme operatörüdür"
            }
          ]
        },
        {
          "question": "Bunlardan hangisi tam olarak WHERE status IN ('open', 'pending', 'review')'ye eşdeğerdir?",
          "options": [
            {
              "icon": "",
              "label": "WHERE status = 'open' AND status = 'pending' AND status = 'review'"
            },
            {
              "icon": "",
              "label": "WHERE status != 'open' OR status != 'pending' OR status != 'review'"
            },
            {
              "icon": "",
              "label": "WHERE status = 'open' OR status = 'pending' OR status = 'review'"
            },
            {
              "icon": "",
              "label": "WHERE status LIKE 'open,pending,review'"
            }
          ]
        },
        {
          "question": "customers 100 satır var; 20 tanesi hiçbir zaman sipariş vermemiş. SELECT c.id FROM customers c INNER JOIN orders o ON c.id = o.customer_id çalıştırırsınız. Siparişi olmayan 20 müşteri sonuçta görünür mü?",
          "options": [
            {
              "icon": "",
              "label": "Evet, birer kere, o.id NULL olarak gösterilir"
            },
            {
              "icon": "",
              "label": "Evet, ancak yalnızca bir WHERE cümlesinde görünürlerse"
            },
            {
              "icon": "",
              "label": "Hayır — INNER JOIN yalnızca her iki tabloda da eşleşme olan satırları döndürür, bu nedenle sıfır sipariş olan müşteriler tamamen düşürülür"
            },
            {
              "icon": "",
              "label": "Evet, ancak orders'deki sütun başına bir kez çoğaltılmış"
            }
          ]
        },
        {
          "question": "Sipariş olsun veya olmasın her müşteri istiyorsunuz, bu nedenle SELECT c.id, o.total FROM customers c LEFT JOIN orders o ON c.id = o.customer_id WHERE o.total > 100 yazıyorsunuz. Bu yine de sıfır sipariş olan müşterileri döndürür mü?",
          "options": [
            {
              "icon": "",
              "label": "Hayır — WHERE cümlesindeki o.total filtrelemesi LEFT JOIN'in eşleşmeyen müşteriler için ürettiği NULL satırlarını atar, bu nedenle INNER JOIN gibi davranır"
            },
            {
              "icon": "",
              "label": "Evet — LEFT JOIN her zaman müşterilerden her satırı ne takip ettiğine bakılmaksızın korur"
            },
            {
              "icon": "",
              "label": "Evet, sıfır sipariş olan müşteriler için o.total 0 olarak gösterilir"
            },
            {
              "icon": "",
              "label": "Hayır — LEFT JOIN, bir WHERE cümlesinin eklendiğinde sessizce kendini RIGHT JOIN'e dönüştürür"
            }
          ]
        },
        {
          "question": "employees tablosu bir id sütununa ve başka bir satırın id'sine işaret eden bir manager_id sütununa sahiptir. Her çalışanı yöneticisinin adı yanında listelemek için, tabloyu kendisine katılırsınız: SELECT e.name, m.name FROM employees e JOIN employees m ON e.manager_id = m.id. Bu desen neye denir?",
          "options": [
            {
              "icon": "",
              "label": "Bir CROSS JOIN — her çalışan her yöneticiye eşleştirilir"
            },
            {
              "icon": "",
              "label": "Tekrarlamayan bir JOIN — tam yönetim zincirini alır"
            },
            {
              "icon": "",
              "label": "Bir self-join — aynı tablo iki farklı takma ad kullanılarak kendisine katılır"
            },
            {
              "icon": "",
              "label": "Bu geçersiz SQL'dir — bir tablo kendisine katılamaz"
            }
          ]
        },
        {
          "question": "İki SELECT sorgusu aynı sütunlarla UNION ile birleştirilir. Her iki sorgu da aynı satırı döndürürse, sonuçta kaç kopyası görünür?",
          "options": [
            {
              "icon": "",
              "label": "Bir — UNION birleştirilmiş sonuç arasında yinelenen satırları kaldırır; UNION ALL her iki kopyayı tutar"
            },
            {
              "icon": "",
              "label": "İki — UNION her sorgudan her satırı tutar"
            },
            {
              "icon": "",
              "label": "Sıfır — UNION her iki sorguda görünen herhangi bir satırı kaldırır"
            },
            {
              "icon": "",
              "label": "Hangi sorguda satırı ilk listelediğine bağlıdır"
            }
          ]
        },
        {
          "question": "sizes 3 satır var ve colors 4 satır var. SELECT * FROM sizes CROSS JOIN colors kaç satır döndürür?",
          "options": [
            {
              "icon": "",
              "label": "7 — CROSS JOIN satır sayılarını bir araya topar"
            },
            {
              "icon": "",
              "label": "12 — bir CROSS JOIN her iki tablonun satırlarının her olası kombinasyonunu döndürür (3 x 4)"
            },
            {
              "icon": "",
              "label": "3 — CROSS JOIN ilk tablonun satırı başına bir satırı döndürür"
            },
            {
              "icon": "",
              "label": "0 — CROSS JOIN bir ON koşulu gerektirir veya hiçbir şey döndürmez"
            }
          ]
        },
        {
          "question": "orders sipariş #100 için 1 satır var ve order_items sipariş #100 için 3 satır var (satır başına bir). SELECT o.id, o.total FROM orders o JOIN order_items i ON o.id = i.order_id WHERE o.id = 100 çalıştırırsınız. Sipariş #100 için kaç satır geri gelir?",
          "options": [
            {
              "icon": "",
              "label": "3 — JOIN her eşleşme order_items satırı başına bir çıkış satırı üretir, bu nedenle sipariş #100'ün tek satırı satır başına bir kez tekrarlanır"
            },
            {
              "icon": "",
              "label": "1 — orders yalnızca sipariş #100 için bir satır var, bu nedenle JOIN daha fazla üretenemez"
            },
            {
              "icon": "",
              "label": "4 — sipariş için bir satır, artı her satır kalemi için bir satır"
            },
            {
              "icon": "",
              "label": "0 — eşleşmeyen anahtar üzerinde tek satırlı bir tabloyu üç satırlı bir tabloya katmak başarısız olur"
            }
          ]
        },
        {
          "question": "SELECT c.name, o.id FROM customers c RIGHT JOIN orders o ON c.id = o.customer_id bunlardan hangisi ile aynı satırları döndürür?",
          "options": [
            {
              "icon": "",
              "label": "SELECT c.name, o.id FROM customers c INNER JOIN orders o ON c.id = o.customer_id"
            },
            {
              "icon": "",
              "label": "SELECT c.name, o.id FROM orders o LEFT JOIN customers c ON c.id = o.customer_id — tablo sırasını değiştirmek ve RIGHT JOIN yerine LEFT JOIN kullanmak eşdeğerdir"
            },
            {
              "icon": "",
              "label": "SELECT c.name, o.id FROM customers c LEFT JOIN orders o ON c.id = o.customer_id"
            },
            {
              "icon": "",
              "label": "SELECT c.name, o.id FROM orders o CROSS JOIN customers c"
            }
          ]
        },
        {
          "question": "Standart SQL'de, SELECT department, name, AVG(salary) FROM employees GROUP BY department çalıştırırsınız. Bu geçerli bir sorgu mu?",
          "options": [
            {
              "icon": "",
              "label": "Evet — GROUP BY yalnızca department'ı dahil etmesi gerekir çünkü ilk sırada listelenir"
            },
            {
              "icon": "",
              "label": "Hayır — name seçilmesi ancak ne aggregate ne de GROUP BY'de listelenmemesi, standart SQL'in her non-aggregate seçilen sütunun GROUP BY cümlesinde görünmesini gerektirir"
            },
            {
              "icon": "",
              "label": "Evet — SQL otomatik olarak departman başına keyfi bir name seçer"
            },
            {
              "icon": "",
              "label": "Hayır — AVG() aynı sorguda GROUP BY ile birleştirilemez"
            }
          ]
        },
        {
          "question": "Ortalama maaşı 80000'i aşan departmanları istiyorsunuz. AVG(salary) gibi toplu bir değerde filtre yapan cümle hangisidir — WHERE mi HAVING mi?",
          "options": [
            {
              "icon": "",
              "label": "WHERE — HAVING yalnızca UNION sorguları ile kullanılır"
            },
            {
              "icon": "",
              "label": "Her ikisi de toplama işlevleriyle aynı şekilde çalışır"
            },
            {
              "icon": "",
              "label": "İkisi de değil — toplama filtrelemesi bir alt sorgusu gerektirir"
            },
            {
              "icon": "",
              "label": "HAVING — WHERE gruplamadan önce bireysel satırları filtreler, HAVING toplama sonrası grupları filtreler"
            }
          ]
        },
        {
          "question": "SELECT salary * 1.1 AS new_salary FROM employees WHERE new_salary > 50000 yazıyorsunuz. Bu çalışır mı?",
          "options": [
            {
              "icon": "",
              "label": "Evet — SELECT'te tanımlanan takma adlar her zaman aynı sorguda WHERE'da kullanılabilir"
            },
            {
              "icon": "",
              "label": "Evet, ancak yalnızca sayısal takma adlar için"
            },
            {
              "icon": "",
              "label": "Hayır — AS, WHERE filtrelenen bir sorguda izin verilmez"
            },
            {
              "icon": "",
              "label": "Hayır — WHERE, SELECT, takma adı new_salary atamadan önce değerlendirilir, bu nedenle takma ad bu noktada henüz mevcut değildir"
            }
          ]
        },
        {
          "question": "SELECT name FROM employees e WHERE salary > (SELECT AVG(salary) FROM employees WHERE department = e.department). Neden buna ilişkili bir alt sorgu denir?",
          "options": [
            {
              "icon": "",
              "label": "Çünkü WHERE cümlesinin yerine bir JOIN kullanır"
            },
            {
              "icon": "",
              "label": "İç alt sorgu dış sorgudaki e.department'ı referans alır, bu nedenle dış sorgunun dikkate aldığı her satır için yeniden değerlendirilmesi gerekir"
            },
            {
              "icon": "",
              "label": "Çünkü birden fazla sütun döndürür"
            },
            {
              "icon": "",
              "label": "Çünkü dış sorgu başlamadan önce tam olarak bir kez çalıştırılır"
            }
          ]
        },
        {
          "question": "Bir alt sorgu SELECT manager_id FROM employees bazı NULL değerlerin yanı sıra gerçek id'ler döndürür. SELECT name FROM employees WHERE id NOT IN (SELECT manager_id FROM employees) çalıştırırsınız. Ne olur?",
          "options": [
            {
              "icon": "",
              "label": "NULL'ları görmezden gelen yönetici olmayan her çalışanı döndürür"
            },
            {
              "icon": "",
              "label": "Sıfır satırı döndürür — NOT IN listesinde tek bir NULL, her karşılaştırmayı UNKNOWN yapar, bu nedenle hiçbir satır koşulu yerine getiremez"
            },
            {
              "icon": "",
              "label": "NOT IN alt sorgular ile kullanalamadığı için bir hata oluşturur"
            },
            {
              "icon": "",
              "label": "NULL joker olarak ele alındığı için her çalışanı döndürür"
            }
          ]
        },
        {
          "question": "SELECT name FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id). Bu ne döndürür?",
          "options": [
            {
              "icon": "",
              "label": "orders'da en az bir satır olan her müşteri — EXISTS yalnızca alt sorgunun herhangi bir satır döndürüp döndürmediğini kontrol eder, içerdikleri değerleri değil"
            },
            {
              "icon": "",
              "label": "Her müşteri, çünkü SELECT 1 her zaman true döndürür"
            },
            {
              "icon": "",
              "label": "Bir sütun adı yerine bir sayı seçtiğinden bir hata"
            },
            {
              "icon": "",
              "label": "Tam olarak bir sipariş olan müşteriler"
            }
          ]
        },
        {
          "question": "SELECT name, (SELECT order_id FROM orders WHERE customer_id = c.id) AS last_order FROM customers c yazıyorsunuz, ve verilen bir müşterinin orders'de 3 satırı var. Bu sorgu çalıştığında ne olur?",
          "options": [
            {
              "icon": "",
              "label": "İlk eşleşen order_id'yi döndürür ve diğer ikisini sessizce görmezden gelir"
            },
            {
              "icon": "",
              "label": "Üç order_id'nin virgülle ayrılmış bir listesini döndürür"
            },
            {
              "icon": "",
              "label": "O müşteri için 3 satır döndürür, birer tane sipariş başına"
            },
            {
              "icon": "",
              "label": "SELECT listesindeki skaler alt sorgu en fazla bir satır döndürmelidir ve bu üç döndürdüğü için çalışma zamanı bir hatası oluşturur"
            }
          ]
        },
        {
          "question": "Dört satır en yüksek puanda eşitlenir. RANK() ORDER BY score DESC kullanarak, dördü de 1. sıra alır. Bir sonraki satır hangi sıra alır?",
          "options": [
            {
              "icon": "",
              "label": "5 — RANK() eşit satırların sayısına eşit bir boşluk bırakır ve ardından devam eder"
            },
            {
              "icon": "",
              "label": "2 — RANK() herhangi bir eşitlemeden sonra her zaman tam olarak birer tarafından artar"
            },
            {
              "icon": "",
              "label": "1 — sonraki her satır da 1. sıra alır"
            },
            {
              "icon": "",
              "label": "4 — RANK() saymaya eşitlik sayısından yeniden başlar"
            }
          ]
        },
        {
          "question": "Dört satır en yüksek puanda eşitlenir. DENSE_RANK() ORDER BY score DESC kullanarak, dördü de 1. sıra alır. Bir sonraki satır hangi sıra alır?",
          "options": [
            {
              "icon": "",
              "label": "5 — DENSE_RANK() tam olarak RANK() gibi davranır"
            },
            {
              "icon": "",
              "label": "1 — DENSE_RANK() kalan her satıra aynı sıra atar"
            },
            {
              "icon": "",
              "label": "2 — DENSE_RANK() boşluk bırakmaz, bu nedenle bir sonraki farklı değer her zaman sonraki sırayı art arda alır"
            },
            {
              "icon": "",
              "label": "3 — DENSE_RANK() eşit grup başına bir sıra atlar"
            }
          ]
        },
        {
          "question": "SUM(amount) OVER (PARTITION BY region ORDER BY amount) bir sorguya eklenir. PARTITION BY region burada ne yapar?",
          "options": [
            {
              "icon": "",
              "label": "Çalışan toplamı tüm sonuç kümesi arasında biriktirilmek yerine her bölge için ayrı olarak yeniden başlatılır"
            },
            {
              "icon": "",
              "label": "Sonuçları tek bir bölge ile filtreler"
            },
            {
              "icon": "",
              "label": "Satırları bölge başına bir satıra göre gruplandırır ve daraltır, GROUP BY gibi"
            },
            {
              "icon": "",
              "label": "Toplamadan önce bölgeleri alfabetik olarak sıralar"
            }
          ]
        },
        {
          "question": "ROW_NUMBER() OVER (ORDER BY score DESC) beş satıra uygulanır, ikisi tam olarak puanda eşittir. İki satır hiçbir zaman aynı satır numarasını alabilir mi?",
          "options": [
            {
              "icon": "",
              "label": "Evet — eşit satırlar her zaman aynı satır numarasını paylaşır"
            },
            {
              "icon": "",
              "label": "Yalnızca PARTITION BY de kullanılırsa"
            },
            {
              "icon": "",
              "label": "İlk mi son mı konumda eşit olup olmadığına bağlıdır"
            },
            {
              "icon": "",
              "label": "Hayır — ROW_NUMBER() her satıra benzersiz, kesinlikle artan bir tamsayı atar, değerler eşit olsa bile"
            }
          ]
        },
        {
          "question": "WITH high_earners AS (SELECT * FROM employees WHERE salary > 100000) SELECT department, COUNT(*) FROM high_earners GROUP BY department. high_earners nedir?",
          "options": [
            {
              "icon": "",
              "label": "Ortak tablo ifadesi (CTE) — sorgunun kalanının bir tablo gibi başvurabileceği adlı, geçici bir sonuç kümesi"
            },
            {
              "icon": "",
              "label": "Veritabanında oluşturulan kalıcı bir tablo"
            },
            {
              "icon": "",
              "label": "Sorgu bittikten sonra kalıcı bir görünüm"
            },
            {
              "icon": "",
              "label": "Ayrı olarak çağrılması gereken saklı bir yordam"
            }
          ]
        },
        {
          "question": "Bir sütun PRIMARY KEY olarak bildirilir. Bu sütunun NULL olduğu bir satırı ekleyebilir misiniz?",
          "options": [
            {
              "icon": "",
              "label": "Evet — PRIMARY KEY yalnızca benzersizliği zorlar, NULL-ness'i değil"
            },
            {
              "icon": "",
              "label": "Evet, ancak yalnızca bir NULL satıra izin verilir, bir UNIQUE kısıtlaması gibi"
            },
            {
              "icon": "",
              "label": "Hayır — bir PRIMARY KEY sütun örtülü olarak NOT NULL'dur, bu nedenle ona NULL'u eklemek reddedilir"
            },
            {
              "icon": "",
              "label": "Sütunun da varsayılan bir değere sahip olup olmadığına bağlıdır"
            }
          ]
        },
        {
          "question": "Açık bir işlemde, bir UPDATE çalıştırırsınız ancak henüz COMMIT'i çalıştırmadınız. Veritabanının ikinci, ayrı bir bağlantısından, bu güncelleme görünür mü?",
          "options": [
            {
              "icon": "",
              "label": "Evet — tüm bağlantılar her yazımı onu çalıştırır çalıştırmaz görürler"
            },
            {
              "icon": "",
              "label": "Evet, ancak yalnızca ikinci bağlantı da bir işlem açarsa"
            },
            {
              "icon": "",
              "label": "Yalnızca hangi tablo güncellendiğine bağlıdır"
            },
            {
              "icon": "",
              "label": "Hayır — taahhütsüz bir değişiklik, COMMIT'i onu dayanıklı hale getirene ve başkalarına görünür hale getirene kadar onu yapan işlemde görünür"
            }
          ]
        },
        {
          "question": "products.category_id categories.id'ye başvuran bir FOREIGN KEY kısıtlamasına sahiptir. Hala ona işaret eden ürünleri olan bir kategori satırını silmeye çalışırsınız, belirtilen ON DELETE kuralı yoktur. Ne olur?",
          "options": [
            {
              "icon": "",
              "label": "Kategori satırı silinir ve eşleşen products.category_id değerleri otomatik olarak NULL olarak ayarlanır"
            },
            {
              "icon": "",
              "label": "Kategori satırı silinir ve ona başvuran her ürün de silinir"
            },
            {
              "icon": "",
              "label": "DELETE reddedilir — varsayılan yabancı anahtar davranışı, bağımlı satırlar hala ona işaret ederken başvurulan bir satırı silmeyi engeller"
            },
            {
              "icon": "",
              "label": "DELETE sessizce başarılı olur, ürünlerin category_id'si artık mevcut olmayan bir kategoriye işaret bırakır"
            }
          ]
        }
      ],
      "optionOrderVersion": "e0466e547cfd8a45"
    }
  }
}
