Skip to main content
•7 dk okuma

Derin Dalış: SQL ve İlişkisel Veri Tabanı Rehberi

Mustafa Kürşad BaşerMustafa Kürşad BAŞER
••
Derin Dalış: SQL ve İlişkisel Veri Tabanı Rehberi

SQL Database (Veri Tabanı) Nedir?

Çoğumuz yazılım serüveninin bir yerinde SQL ile karşılaştık. Açılımı Structured Query Language, yani Yapısal Sorgulama Dili. Onu diğer dillerden ayıran bir özelliği var: bildirimsel çalışır. Veriye nasıl ulaşılacağını değil, ne istediğinizi yazarsınız. Hangi indeksin kullanılacağına, tabloların hangi sırayla birleştirileceğine veri tabanının sorgu planlayıcısı karar verir.

Günlük kullanımın büyük kısmı dört fiile iniyor: INSERT, SELECT, UPDATE ve DELETE. Bunlara kısaca CRUD deniyor. Yaygın motorlar arasında PostgreSQL, MySQL, MSSQL ve Oracle sayılabilir. Hepsi SQL standardını temel alıyor ama her biri kendi eklerini getiriyor, o yüzden bir motorda çalışan sorgu diğerinde birebir çalışmayabiliyor.

İlişkisel Veri Tabanı (RDBMS) Nedir?

İlişkisel veri tabanı, veriyi satır ve sütunlardan oluşan tablolarda tutan sistem. "İlişkisel" olmasını sağlayan şey ise tabloların birbirine anahtarlarla bağlanabilmesi. Her tablonun kendi satırını benzersiz kılan bir birincil anahtarı (primary key) olur; başka bir tablo o satıra yabancı anahtarla (foreign key) işaret eder. Bu sayede aynı veriyi iki yerde tekrarlamazsınız, örneğin yazar bilgisi her kitap satırında değil, tek bir yazar tablosunda durur.

SQL İfadeleri

SELECT anahtar kelimesi, veritabanındaki verileri sorgulamak ve belirttiğimiz kriterlere göre elde etmek için kullanılır. Select anahtar sözcüğünden sonra tablo adı yazılır, istenilen sonuçların hangi tabloda sorgulanacağını belirtir. WHERE anahtar kelimesinden sonra koşul eklenir. Bu koşula göre hangi verilerin ya da satırların döndürüleceğini belirtir. (İsteğe bağlı olarak, zorunlu değildir.)

Örnek SQL İfadeleri

sql
SELECT "kolonAdi" FROM "tabloAdi" WHERE "koşul"

Bu SQL ifadesi, "ogrenciler" tablosunda "ogrenci_Adi" kolonu 'Mustafa' değerine eşit olan tüm satırları getirir.

sql
SELECT * FROM ogrenciler WHERE ogrenci_Adi = 'Mustafa'

Bu SQL ifadesi, "ogrenciler" tablosunda "ogrenci_Adi" kolonu 'Mustafa' olan kayıtların ogrenci_Adi, ogrenci_Soyadi, ogrenci_No kolonlarını getirir.

sql
SELECT ogrenci_Adi, ogrenci_Soyadi, ogrenci_NoFROM ogrencilerWHERE ogrenci_Adi LIKE 'Mustafa'

Bu SQL ifadesi, "ogrenciler" tablosunda "ogrenci_Adi" kolonu 'M' ile başlayan kayıtların ogrenci_Adi, ogrenci_Soyadi, ogrenci_No kolonlarını getirir.

sql
SELECT ogrenci_Adi, ogrenci_Soyadi, ogrenci_NoFROM ogrencilerWHERE ogrenci_Adi LIKE 'M%'

Bu SQL ifadesi, "ogrenciler" tablosunda "ogrenci_Adi" kolonu 'a' ile biten kayıtların ogrenci_Adi, ogrenci_Soyadi, ogrenci_No kolonlarını getirir.

sql
SELECT ogrenci_Adi, ogrenci_Soyadi, ogrenci_NoFROM ogrencilerWHERE ogrenci_Adi LIKE '%a'

Senaryo Üzerinden Örneklendirelim

Bir kitapçı dükkanının veritabanında şu tablolar olduğunu varsayalım:

  • Books: Kitapların bilgilerini içeren tablo.
  • Authors: Yazarların bilgilerini içeren tablo.
  • Orders: Siparişlerin bilgilerini içeren tablo.
  • Customers: Müşterilerin bilgilerini içeren tablo.

Tabloların Yapısı

Books

Column NameData Type
book_idINT
titleVARCHAR
author_idINT
priceDECIMAL
stockINT
Books Tablosu

Authors

Column NameData Type
author_idINT
nameVARCHAR
countryVARCHAR
Authors Tablosu

Orders

Column NameData Type
order_idINT
customer_idINT
book_idINT
order_dateDATE
quantityINT
Orders Tablosu

Customers

Column NameData Type
customer_idINT
nameVARCHAR
emailVARCHAR
phoneVARCHAR
Customers Tablosu

SQL Sorguları

1. Veri Ekleme

Kitap Ekleme

sql
INSERT INTO Books (book_id, title, author_id, price, stock)VALUES (1, '1984', 1, 19.99, 50);

Yazar Ekleme

sql
INSERT INTO Authors (author_id, name, country)VALUES (1, 'George Orwell', 'UK');

Müşteri Ekleme

sql
INSERT INTO Customers (customer_id, name, email, phone)VALUES (1, 'John Doe', 'john.doe@example.com', '123-456-7890');

Sipariş Ekleme

sql
INSERT INTO Orders (order_id, customer_id, book_id, order_date, quantity)VALUES (1, 1, 1, '2023-10-01', 2);

2. Veri Sorgulama

Tüm Kitapları Listeleme

sql
SELECT * FROM Books;

Dönen sonuç:

sql
-- Sonuç:-- book_id | title | author_id | price | stock-- --------+-------+-----------+-------+--------- 1       | 1984  | 1         | 19.99 | 50

Belirli Bir Yazarın Kitaplarını Listeleme

sql
SELECT Books.title, Authors.nameFROM BooksJOIN Authors ON Books.author_id = Authors.author_idWHERE Authors.name = 'George Orwell';
sql
-- Sonuç:-- title | name-- ------+------------- 1984  | George Orwell

Belirli Bir Müşterinin Siparişlerini Listeleme

sql
SELECT Orders.order_id, Books.title, Orders.quantity, Orders.order_dateFROM OrdersJOIN Books ON Orders.book_id = Books.book_idWHERE Orders.customer_id = 1;

Dönen sonuç:

sql
-- Sonuç:-- order_id | title | quantity | order_date-- ---------+-------+----------+-------------- 1        | 1984  | 2        | 2023-10-01

3. Veri Güncelleme

Kitap Fiyatını Güncelleme

sql
UPDATE BooksSET price = 24.99WHERE book_id = 1;

Dönen sonuç:

sql
-- Sonuç:-- book_id | title | author_id | price | stock-- --------+-------+-----------+-------+--------- 1       | 1984  | 1         | 24.99 | 50

Müşteri E-postasını Güncelleme

sql
UPDATE CustomersSET email = 'john.newemail@example.com'WHERE customer_id = 1;

Dönen sonuç:

sql
-- Sonuç:-- customer_id | name    | email                    | phone-- ------------+---------+--------------------------+---------- 1           | John Doe | john.newemail@example.com | 123-456-7890

4. Veri Silme

Belirli Bir Kitabı Silme

sql
DELETE FROM BooksWHERE book_id = 1;

Belirli Bir Siparişi Silme

sql
DELETE FROM OrdersWHERE order_id = 1;

Bu örnekle senaryo ile, SQL sorgularının nasıl kullanıldığını ve veritabanı işlemlerinin nasıl gerçekleştirildiğini görmüş olduk.

Sonuç

Özetle SQL, veriyi tablolarda tutan ve tabloları anahtarlarla birbirine bağlayan sistemlerin ortak dili. Ne istediğinizi yazarsınız, nasıl getirileceğine motor karar verir.

Günlük işte akılda tutulacak birkaç şey var. Yavaş bir sorguyla karşılaştığınızda ilk bakılacak yer indeksler; WHERE ve JOIN koşullarında geçen sütunlar indeksli değilse motor tabloyu baştan sona tarar. Bir sorgunun neden yavaş olduğunu tahmin etmek yerine EXPLAIN ile planına bakın, motor size ne yaptığını doğrudan söyler. Ve şemayı baştan doğru kurmaya çalışın; veri girdikten sonra tablo yapısını değiştirmek, ilk gün değiştirmekten kat kat pahalıdır. Serinin ikinci yazısında NoSQL tarafına geçip iki yaklaşımı karşılaştıracağım.

Serinin devamına aşağıdan erişebilirsiniz. Şimdilik hoşça kalın!

Bu yazıyı paylaş

Link kopyalandı!
Mustafa Kürşad Başer
Yazar

Mustafa Kürşad Başer

Kıdemli Yazılım Mühendisi

Karmaşık sorunlara zarif çözümler üretmekten keyif alan, tutkulu bir yazılım mühendisi. Kodlamanın ötesinde, teknoloji, sanat ve insan bilincinin kesişim noktalarını keşfetmekle derinden ilgileniyor.