0% found this document useful (0 votes)
3 views18 pages

Hf04sql II

Uploaded by

kberilsila
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views18 pages

Hf04sql II

Uploaded by

kberilsila
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

🧠 Veritabanı Yönetim Sistemleri – SQL Temelleri

📌 1. SQL Nedir?
SQL (Structured Query Language), ilişkisel veritabanlarında veri tanımlama, sorgulama,
güncelleme ve kontrol etme işlemlerini gerçekleştirmek için kullanılan standart bir dildir.
🧠

📌 2. Veritabanı Temel Kavramları


Terim Açıklama
Tablo (Table) Benzer verilerin satır ve sütunlar halinde saklandığı yapıdır.

Sütun (Column) Tablodaki her bir alanı ifade eder (örneğin: ad , soyad ).

Satır (Row) Bir kayda ait tüm bilgileri içerir (örneğin: bir öğrencinin tüm
bilgileri).

Alan (Field) Belirli bir satır ve sütunun kesişimindeki veridir.

Veri Türü (Data Her sütunun hangi tür veri içereceğini belirtir (örneğin: INT ,
Type) VARCHAR , DATE ).
🧠 Şekil 1’de bu kavramların görsel karşılığı bir tablo üzerinde gösterilmiştir.

📌 3. SQL Komut Türleri


SQL komutları işlevlerine göre üç ana gruba ayrılır:

Tür Açıklama Örnek Komutlar


DDL (Data Definition Veri yapısını tanımlar. CREATE , ALTER ,
Language) DROP

DML (Data Manipulation Veri üzerinde değişiklik INSERT , UPDATE ,


Language) yapar. DELETE

DQL (Data Query Language) Veri sorgular. SELECT


🧠 Şekil 2’de bu komut türlerinin kullanım amaçları özetlenmiştir.

📌 4. Temel SQL Sorgu Yapısı


sql
SELECT sütun1, sütun2
FROM tablo_adi
WHERE koşul
GROUP BY sütun1
HAVING koşul
ORDER BY sütun1 ASC|DESC;
SELECT: Hangi sütunların getirileceğini belirtir.
FROM: Verinin hangi tablodan alınacağını gösterir.
WHERE: Satırları filtreler.
GROUP BY: Gruplama yapar.
HAVING: Gruplama sonrası filtreleme yapar.
ORDER BY: Sıralama yapar.
🧠 Şekil 3’te bu yapının görsel akışı yer almaktadır.
📌 5. Birleştirmeler (JOINs)
JOIN ifadeleri, birden fazla tablodan veri çekmek için kullanılır. 🧠

JOIN Türü Açıklama


INNER JOIN Sadece eşleşen kayıtları getirir.

LEFT JOIN Sol tablodaki tüm kayıtları, sağ tablodaki eşleşenleri getirir.
Eşleşmeyenler için NULL döner.

RIGHT JOIN Sağ tablodaki tüm kayıtları, sol tablodaki eşleşenleri getirir.

FULL OUTER Her iki tablodaki tüm kayıtları getirir. Eşleşmeyenler için NULL döner.
JOIN

INNER JOIN -->>

LEFT JOIN -->>


RIGHT JOIN -->>

FULL JOIN -->>

🧠 Şekil 4’te farklı JOIN türlerinin görsel karşılaştırması yapılmıştır.

📌 6. Kümeleme (Aggregation) Fonksiyonları


Kümeleme fonksiyonları, birden fazla satırdan tek bir sonuç döndürür.

Fonksiyon Açıklama
COUNT() Satır sayısını döndürür.

SUM() Sayısal değerlerin toplamını verir.

AVG() Ortalama değeri hesaplar.

MIN() En küçük değeri bulur.

MAX() En büyük değeri bulur.


GROUP BY -->>

HAVING -->>
AGGREGATION Fonksiyonları -->>

🧠 Şekil 5’te bu fonksiyonların kullanım örnekleri tablo üzerinde


gösterilmiştir.

📌 7. Alt Sorgular (Subqueries)


Bir sorgu içinde kullanılan başka bir sorgudur. 🧠
Skaler Alt Sorgu: Tek bir değer döndürür.
Çok Satırlı Alt Sorgu: Birden fazla satır döndürür.
İlişkili Alt Sorgu: Ana sorguya bağlı olarak çalışır.

🧠 Şekil 6’da bu alt sorgu türlerine örnekler verilmiştir.

📌 8. SQL Operatörleri
Karşılaştırma Operatörleri
Operatör Açıklama
= Eşittir

<> veya != Eşit değildir

< , > , <= , >= Küçüktür, büyüktür, küçük eşit, büyük eşit

BETWEEN Aralık kontrolü yapar

LIKE Desen eşleştirme yapar ( % ve _ joker karakterleri)

IN Belirli değerlerden birine sahip olup olmadığını kontrol


eder

IS NULL / IS NOT NULL değer kontrolü yapar


NULL

🧠 Şekil 7’de bu operatörlerin kullanım örnekleri yer almaktadır.

📌 9. Mantıksal Operatörler
Operatör Açıklama
AND Her iki koşul da doğru olmalı

OR En az bir koşul doğru olmalı

NOT Koşulun tersini alır


🧠 Şekil 8’de bu operatörlerin kullanım senaryoları özetlenmiştir.

📌 10. CASE WHEN İfadeleri


Koşullu durumlar için kullanılır. IF-THEN-ELSE yapısının SQL karşılığıdır.

sql
SELECT ad, soyad,
CASE
WHEN notu >= 90 THEN 'A'
WHEN notu >= 80 THEN 'B'
ELSE 'C'
END AS harf_notu
FROM ogrenciler;

🧠 Şekil 9’da CASE WHEN yapısının kullanımı örnekle açıklanmıştır.

📌 11. SQL Fonksiyonları


Metin Fonksiyonları
Fonksiyon Açıklama
CONCAT() Metinleri birleştirir

SUBSTRING() Metinden parça alır

LENGTH() Karakter sayısını verir

UPPER() / LOWER() Büyük/küçük harfe çevirir

TRIM() Boşlukları temizler

🧠 Şekil 10’da bu fonksiyonların örnek çıktıları yer almaktadır.


📌 12. Veri Türleri ve Kısıtlamalar (Constraints)
Yaygın Veri Türleri
INT : Tam sayı

VARCHAR(n) : Değişken uzunlukta metin

DATE : Tarih

DECIMAL(p,s) : Ondalıklı sayı

Kısıtlamalar (Constraints)
Kısıtlayıcı Açıklama
PRIMARY KEY Tekil ve NULL olamaz

FOREIGN KEY Başka bir tabloya bağlantı sağlar

NOT NULL NULL değer alamaz

UNIQUE Tekil olmalı

CHECK Belirli bir koşulu sağlamalı

DEFAULT Varsayılan değer atar

🧠 Şekil 11’de bu kısıtlamaların tablo oluşturma sırasında nasıl kullanıldığı


gösterilmiştir.
Aşağıda, Film VT (görseldeki şemaya göre) için basitten karmaşığa doğru ilerleyen SQL örnekleri
yer alıyor.

Her sorgunun üstünde Türkçe açıklaması, altında ise SQL ifadesi verilmiştir.

1) Tüm filmleri listele

SELECT *
FROM film;

2) Sadece film adı ve yıl bilgisi (yinelenenler hariç)

SELECT DISTINCT ad, yil


FROM film;
3) 2000 sonrası çekilmiş filmler

SELECT ad, yil


FROM film
WHERE yil > 2000
ORDER BY yil DESC;

4) Belirli bir kategoriye ait filmler

SELECT [Link], [Link]


FROM film f
JOIN kategoriler k ON [Link] = [Link]
WHERE [Link] IN ('Aksiyon', 'Komedi');

5) Hiç kategorisi tanımlanmamış filmler

SELECT [Link]
FROM film f
LEFT JOIN kategoriler k ON [Link] = [Link]
WHERE [Link] IS NULL;

6) Her kategoride kaç film var?

SELECT [Link], COUNT(*) AS film_sayisi


FROM kategoriler k
GROUP BY [Link]
HAVING COUNT(*) >= 3
ORDER BY film_sayisi DESC;
7) En pahalı 5 film

SELECT ad, sFiyat


FROM film
ORDER BY sFiyat DESC
LIMIT 5;

8) Ortalama film fiyatı ile en pahalı ve en ucuz film

SELECT
MIN(sFiyat) AS en_ucuz,
MAX(sFiyat) AS en_pahali,
AVG(sFiyat) AS ortalama_fiyat
FROM film;

9) Her meslekten kaç kullanıcı var?

SELECT [Link] AS meslek, COUNT(*) AS kullanici_sayisi


FROM kullanici k
JOIN meslekler m ON [Link] = [Link]
GROUP BY [Link]
ORDER BY kullanici_sayisi DESC;

10) Satın alma tutarı 50-150 TL arasındaki işlemler

SELECT [Link], [Link], [Link], [Link] AS kullanici


FROM satinAlma s
JOIN kullanici u ON [Link] = [Link]
WHERE [Link] BETWEEN 50 AND 150;
11) Hiç satın alma yapmayan kullanıcılar

SELECT [Link], [Link]


FROM kullanici u
LEFT JOIN satinAlma s ON [Link] = [Link]
WHERE [Link] IS NULL;

12) Her filmden kaç adet satılmış?

SELECT [Link], SUM([Link]) AS toplam_adet


FROM film f
JOIN satinAlma s ON [Link] = [Link]
GROUP BY [Link]
ORDER BY toplam_adet DESC;

13) Aynı isimde birden fazla film var mı?

SELECT ad, COUNT(*) AS adet


FROM film
GROUP BY ad
HAVING COUNT(*) > 1;

14) Her ülke için ortalama satın alma tutarı

SELECT [Link] AS ulke, AVG([Link]) AS ort_tutar


FROM satinAlma sa
JOIN kullanici k ON [Link] = [Link]
JOIN sehirler s ON [Link] = [Link]
JOIN ulkeler ul ON [Link] = [Link]
GROUP BY [Link]
ORDER BY ort_tutar DESC;
15) En az bir kez “Aksiyon” filmi satın alan kullanıcılar

SELECT DISTINCT [Link], [Link]


FROM kullanici ku
JOIN satinAlma sa ON [Link] = [Link]
JOIN film f ON [Link] = [Link]
JOIN kategoriler ka ON [Link] = [Link]
WHERE [Link] = 'Aksiyon';

16) Her kategoride en az 3 filmi olan ve toplam satış adedi 100+ olan
kategoriler

SELECT [Link],
COUNT(DISTINCT [Link]) AS film_sayisi,
SUM([Link]) AS toplam_adet
FROM kategoriler ka
JOIN film f ON [Link] = [Link]
JOIN satinAlma sa ON [Link] = [Link]
GROUP BY [Link]
HAVING COUNT(DISTINCT [Link]) >= 3
AND SUM([Link]) >= 100;

17) CROSS JOIN ile tüm kullanıcı-film kombinasyonları (satın alma olmasa
bile)

SELECT [Link] AS kullanici, [Link] AS film


FROM kullanici u
CROSS JOIN film f;
18) RIGHT OUTER JOIN ile hiç satılmamış filmler

SELECT [Link], COALESCE(SUM([Link]), 0) AS satilan_adet


FROM satinAlma s
RIGHT OUTER JOIN film f ON [Link] = [Link]
GROUP BY [Link]
HAVING COALESCE(SUM([Link]), 0) = 0;

19) INNER + LEFT + RIGHT birleşimi: tüm filmler, satışları ve kategorileri

SELECT [Link],
COALESCE(SUM([Link]), 0) AS satilan,
COALESCE(string_agg([Link], ', '), 'Kategori Yok') AS
kategoriler
FROM film f
LEFT JOIN satinAlma s ON [Link] = [Link]
LEFT JOIN kategoriler k ON [Link] = [Link]
GROUP BY [Link]
ORDER BY satilan DESC;

20) Alt sorgu: Ortalama fiyatın üzerinde olan filmler

SELECT ad, sFiyat


FROM film
WHERE sFiyat > (SELECT AVG(sFiyat) FROM film)
ORDER BY sFiyat DESC;

You might also like