Veritabanları ve SQL: açıklamalı alıştırma soruları

İpuçları ve açıklamalarla ücretsiz Veritabanları ve SQL çoktan seçmeli alıştırma soruları, üç seviyede: temel terimler ve bilgiler, kavramları uygulama, vakalar ve analiz.

Ücretsiz alıştırma sorusuKolay

Hangi kısıt bir sütunun asla boş (NULL) bırakılamayacağını garanti eder?

Sonraki soru →

Neler çalışırsınız

  1. Kolaytemel terimler ve bilgiler
  2. Ortakavramları uygulama
  3. Zorvakalar ve analiz

Veritabanları ve SQL konusunu sıfırdan öğrenin

1İlişkisel veritabanı nedir

Bir ilişkisel veritabanı veriyi tablolarda saklar. Bir tablo elektronik tabloya benzer: her satır bir kayıt, her sütun bir özelliktir.

Bir mağazanın id, name ve city sütunlarıyla bir customers tablosu ve id, customer_id ve total sütunlarıyla bir orders tablosu olabilir.

Birincil anahtar, her satırı benzersiz biçimde tanımlayan bir sütun ya da sütun kümesidir. Hiçbir zaman tekrarlanamaz ve boş olamaz. Burada bu, her tablonun id’sidir.

Yabancı anahtar, başka bir tablonun birincil anahtarına başvuran bir sütundur. orders içinde customer_id, siparişi hangi müşterinin verdiğini söyler.

Tablolar böyle bağlanır: bir müşterinin çok siparişi olabilir ama her sipariş tek bir müşteriye aittir. Bu bir bire-çok ilişkidir.

SQL (Yapılandırılmış Sorgu Dili), tablo oluşturmak, veriyi değiştirmek ve hakkında sorular sormak için kullandığınız dildir.

Kendini sına Birincil anahtar nedir?
  1. Aramaları hızlandıran bir indeks
  2. Başka bir tablodaki bir satıra başvuran sütun
  3. Her satırı benzersiz biçimde tanımlayan bir sütun ya da sütun kümesi
  4. Her tablonun ilk sütunu

Cevap: Her satırı benzersiz biçimde tanımlayan bir sütun ya da sütun kümesi. Birincil anahtar benzersizdir ve hiçbir zaman NULL olmaz, bu yüzden tam olarak bir satırı seçer. Başka bir tabloya başvuran sütun yabancı anahtardır.

2SELECT ile veri okumak

Soruların çoğu SELECT deyimiyle ilgilidir. Her zaman bu sırayla yazılan yan tümcelerden oluşur:

SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY …
  • SELECT istediğiniz sütunları listeler. DISTINCT yinelenen satırları kaldırır.
  • FROM tabloyu ya da birleştirilen tabloları adlandırır.
  • WHERE yalnızca bir koşulu sağlayan satırları tutar, örneğin WHERE total > 20.
  • GROUP BY aynı değere sahip satırları bir gruba koyar, böylece grup başına sayabilir ya da toplayabilirsiniz.
  • HAVING yalnızca bir koşulu sağlayan grupları tutar. WHERE’in kullanamadığı toplama işlevlerini kullanabilir.
  • ORDER BY sonucu sıralar, varsayılan olarak artan; en yüksek önce için DESC ekleyin.

Toplama işlevleri birçok satırı tek bir değere özetler: COUNT, SUM, AVG, MIN ve MAX.

Veritabanı yan tümceleri yazdığınız sırayla çalıştırmaz. Önce FROM, sonra WHERE, GROUP BY, HAVING, SELECT ve en sonda ORDER BY çalıştırır.

Diğer deyimler veriyi değiştirir: INSERT satır ekler, UPDATE satırları değiştirir ve DELETE satırları siler. CREATE, ALTER ve DROP tabloların kendisini değiştirir.

Kendini sına Yalnızca 5’ten fazla siparişi olan müşterileri istiyorsunuz. COUNT(*) > 5 üzerinde hangi yan tümce filtreler?
  1. DISTINCT
  2. HAVING
  3. ORDER BY
  4. WHERE

Cevap: HAVING. Sayı ancak satırlar gruplandıktan sonra vardır ve HAVING grupları filtreler. WHERE gruplamadan önce çalışır, bu yüzden COUNT gibi bir toplama işlevini kullanamaz.

3Birleştirmeler, normalleştirme ve işlemler

Bir birleştirme (join), iki tablonun satırlarını bir koşulla, genellikle yabancı anahtar = birincil anahtar ile birleştirir:

FROM customers c JOIN orders o ON o.customer_id = c.id
  • INNER JOIN (ya da JOIN) yalnızca iki tabloda da eşleşmesi olan satırları tutar.
  • LEFT JOIN sol tablonun her satırını tutar. Eşleşme olmayan yerde sağ tablonun sütunları NULL olur.
  • NULL, bir değerin eksik ya da bilinmediği anlamına gelir. IS NULL ile sınayın, asla = NULL ile değil.

Normalleştirme, her olgunun bir kez saklanması için tabloları böler. Bu, aynı olgunun birkaç yerde güncellenmesini önler.

  • 1NF: her hücre tek bir atomik değer tutar, tekrarlayan grup yoktur.
  • 2NF: 1NF’dir ve her anahtar olmayan sütun, bileşik anahtarın bir kısmına değil, anahtarın tamamına bağlıdır.
  • 3NF: 2NF’dir ve hiçbir anahtar olmayan sütun başka bir anahtar olmayan sütuna bağlı değildir.

Bir işlem (transaction), deyimleri tek bir birim olarak gruplar. COMMIT onu kalıcı yapar, ROLLBACK geri alır. İşlemler ACID’i izler: atomiklik (ya hep ya hiç), tutarlılık, yalıtım ve dayanıklılık.

Kendini sına Bir müşteri hiç sipariş vermemiştir. customers LEFT JOIN orders içinde bu müşteriye ne olur?
  1. Müşteri bir kez görünür, sipariş sütunlarında NULL ile
  2. Müşteri sonuçtan çıkarılır
  3. Müşteri tablodaki her sipariş için bir kez görünür
  4. Sorgu bir hatayla başarısız olur

Cevap: Müşteri bir kez görünür, sipariş sütunlarında NULL ile. LEFT JOIN sol tablonun her satırını tutar ve eksik sağ tarafı NULL ile doldurur. Müşteriyi dışarıda bırakmak INNER JOIN’in yaptığı şeydir.

4Adım adım yöntem

Bir sorgu yazmak ya da verilen bir sorgunun ne döndürdüğünü bulmak için:

  1. Veriyi tutan tabloları ve anahtarlarla nasıl bağlandıklarını bulun.
  2. FROM’u birleştirmelerle yazın. Eşleşmesi olmayan satırların kalması gerektiğinde LEFT JOIN seçin.
  3. Tek satırlar üzerindeki koşullar için WHERE ekleyin.
  4. Soru “başına” ya da “her biri için” diyorsa GROUP BY ve toplama işlevini ekleyin.
  5. Toplama işlevi üzerindeki koşullar için HAVING, sıra önemliyse ORDER BY ekleyin.
  6. Sonucu küçük bir örnekle kontrol edin: her yan tümceden sonra, veritabanının çalıştırdığı sırayla satırları listeleyin.

Bir kuram sorusunda önce kavramı adlandırın (bir anahtar, bir birleştirme türü, bir normal form, bir ACID özelliği), sonra tanımına uyan seçeneği seçin.

5Çözümlü bir örnek

Her adımı izleyin. Açmadan önce bir sonrakini tahmin etmeye çalışın.

Çözümlü örnek

customers tablosunda (1, Ana), (2, Ben) ve (3, Cas) satırları vardır. orders tablosunda (id, customer_id) = (10, 1), (11, 1), (12, 2) ve (13, 1) satırları vardır. Bu sorgu ne döndürür? SELECT c.name, COUNT(o.id) FROM customers c LEFT JOIN orders o ON o.customer_id = c.id GROUP BY c.name

1

FROM ve birleştirmeyi çalıştırın

Her müşteri, kendi id’sini taşıyan siparişlerle eşleştirilir. Ana, 10, 11 ve 13 numaralı siparişlerle eşleşir. Ben, 12 numaralı siparişle eşleşir.

Cas’ın siparişi yoktur. Bir LEFT JOIN olduğu için Cas sonuçta kalır, o.id için NULL ile.

2

Birleşen satırları listeleyin

  • Ana, 10
  • Ana, 11
  • Ana, 13
  • Ben, 12
  • Cas, NULL

Bu 5 satırdır.

3

Ada göre gruplayın

GROUP BY c.name üç grup yapar: 3 satırlı Ana, 1 satırlı Ben ve 1 satırlı Cas.

4

Grup başına sayın

COUNT(o.id) yalnızca NULL olmayan değerleri sayar. Ana 3, Ben 1 alır.

Cas’ın bir satırı vardır ama o.id’si NULL’dur, bu yüzden Cas 0 alır.

5

Cevabı kontrol edin

Ana, Ben ve Cas birlikte 3 + 1 + 0 = 4 siparişe sahiptir; bu, orders içindeki satır sayısıyla aynıdır. COUNT(*) ile Cas yanlışlıkla 1 alırdı, çünkü COUNT(*) satırın kendisini sayar.

Cevap

Ana 3, Ben 1, Cas 0.

6Sık yapılan hatalar

  • WHERE içinde toplama işlevi kullanmak. COUNT, SUM ya da AVG üzerindeki koşullar HAVING’e aittir.
  • = NULL yazmak. NULL ile her karşılaştırma bilinmezdir; IS NULL ya da IS NOT NULL kullanın.
  • Eşleşmesi olmayan satırların kalması gerekirken INNER JOIN kullanmak. LEFT JOIN kullanın.
  • Birleştirme koşulunu unutmak. ON olmadan her satır her satırla eşleşir (çapraz birleştirme).
  • Ne GROUP BY içinde ne de bir toplama işlevinin içinde olan bir sütunu seçmek.
  • DELETE (satırları siler) ile DROP TABLE’ı (tablonun tamamını siler) karıştırmak.
  • WHERE olmadan UPDATE ya da DELETE çalıştırmak. Tablodaki her satırı değiştirir.
Kendini sına Bir tablonun 10 satırı vardır ve col sütunu her satırda NULL’dur. SELECT COUNT(col) ne döndürür?
  1. 0
  2. 10
  3. 1
  4. NULL

Cevap: 0. COUNT(col) yalnızca NULL olmayan değerleri sayar, bu yüzden 0 döndürür. COUNT(*) satırları sayar ve 10 döndürürdü.

7Sınav soruları nasıl görünür

  • Kolay: anahtar terimler ve olgular. SELECT, WHERE, ORDER BY ya da DELETE’in ne yaptığı, birincil ve yabancı anahtarlar, NULL’un ne demek olduğu.
  • Orta: kavramları uygulama. Bir görev için doğru sorgu, WHERE ve HAVING farkı, iç ve dış birleştirmeler, normal formlar, ACID.
  • Zor: olgular ve analiz. Alt sorgular, yalıtım düzeyleri ve anomalileri, BCNF, pencere işlevleri, indeksler ve sorgu performansı, SQL enjeksiyonu.

Bir sorgu verildiğinde onu birkaç satır üzerinde FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY sırasıyla izleyin. Tuzakların çoğu üç satır içinde ortaya çıkar.

Uygulamada adım adım öğreninUygulamada adım adım öğrenin

Örnek sorular

Örnek 1Kolay

UNION iki SELECT sorgusunun sonuçlarıyla ne yapar?

  1. AOnları bir anahtara göre yan yana birleştirir
  2. BYalnızca her ikisinde görünen satırları tutar
  3. COnları tek bir sonuçta birleştirir ve yinelenen satırları kaldırır
  4. DYalnızca birinci sorguda görünüp ikincide görünmeyen satırları tutar
İpuçlarını göster
  1. Her iki sorgu da aynı sayıda uyumlu sütuna sahip olmalıdır.
  2. İki yanlış cevap artık üstü çizili. Kalan ikisinden biri doğru.
Cevabı ve açıklamayı göster

Cevap neden bu

UNION her iki sorgunun satırlarını alt alta ekler ve yinelenenleri kaldırır; UNION ALL yinelenenleri tutar.

Cevap

C · Onları tek bir sonuçta birleştirir ve yinelenen satırları kaldırır
Örnek 2Orta

WHERE yan tümcesi hiçbir satırla eşleşmediğinde SELECT SUM(amount) FROM orders ne döndürür?

  1. ABir hata
  2. B0
  3. CNULL
  4. DBoş bir dizge
İpuçlarını göster
  1. SUM burada COUNT'tan farklıdır.
  2. İki yanlış cevap artık üstü çizili. Kalan ikisinden biri doğru.
Cevabı ve açıklamayı göster

Cevap neden bu

SUM, AVG, MIN ve MAX boş bir kümede NULL döndürür, COUNT ise 0 döndürür; COALESCE(SUM(amount), 0) bunun yerine 0 verir.

Cevap

C · NULL
Örnek 3Zor

SELECT name, dept, AVG(salary) OVER (PARTITION BY dept) FROM emp ne döndürür?

  1. AYalnızca departman ortalamasından fazla kazanan çalışanları
  2. BHer çalışan satırını, çalıştığı departmanın ortalama maaşıyla birlikte
  3. Cname bir GROUP BY içinde olmadığı için bir hata
  4. DDepartman başına ortalama maaşıyla bir satır
İpuçlarını göster
  1. Pencere fonksiyonları satırları birleştirip daraltmaz.
  2. İki yanlış cevap artık üstü çizili. Kalan ikisinden biri doğru.
Cevabı ve açıklamayı göster

Cevap neden bu

GROUP BY'dan farklı olarak bir pencere fonksiyonu her girdi satırını tutar ve bölümü (burada departman) üzerinden hesaplanan bir değer ekler.

Cevap

B · Her çalışan satırını, çalıştığı departmanın ortalama maaşıyla birlikte

Sorular ve cevaplar

Veritabanları ve SQL nedir?

Bir ilişkisel veritabanı veriyi tablolarda saklar. Bir tablo elektronik tabloya benzer: her satır bir kayıt, her sütun bir özelliktir.

Bir mağazanın id, name ve city sütunlarıyla bir customers tablosu ve id, customer_id ve total sütunlarıyla bir orders tablosu olabilir.

Veritabanları ve SQL adım adım nasıl öğrenilir?
  1. İlişkisel veritabanı nedir
  2. SELECT ile veri okumak
  3. Birleştirmeler, normalleştirme ve işlemler
  4. Adım adım yöntem
  5. Çözümlü bir örnek
  6. Sık yapılan hatalar
  7. Sınav soruları nasıl görünür
Veritabanları ve SQL alıştırmaları neleri kapsar?
  • Kolay: temel terimler ve bilgiler
  • Orta: kavramları uygulama
  • Zor: vakalar ve analiz

Her sorunun dört seçeneği vardır ve yalnızca biri doğrudur. Takıldınız mı? Önce küçük bir ipucu açın, tam açıklamayı ise yalnızca gerektiğinde.

Çalışma nasıl işler

  • Her sorunun dört seçeneği vardır ve yalnızca biri doğrudur.
  • Takıldınız mı? Önce küçük bir ipucu açın, tam açıklamayı ise yalnızca gerektiğinde.
  • İlerlemeniz, hatalarınız ve kaydettiğiniz sorular saklanır; böylece sınavdan önce gözden geçirebilirsiniz.

Bu konuyu içeren dersler

Bilgisayar bilimi alanında diğer konular

Yazdırılabilir çalışma kâğıdı