SQL
SQL Nedir?
SQL, ilişkisel bir veritabanındaki veriyi sorgulamak ve değiştirmek için kullanılan dildir. Tablo satır ve sütunlardan oluşur. SQL o tablodan satır seçer, yeni satır ekler, var olan satırı günceller veya siler.
SQL, Python veya JavaScript gibi genel amaçlı bir programlama dili değildir. İşi program penceresini kurmak değil, saklanan veriyle konuşmaktır. Bir site veya uygulama verisini çoğu zaman veritabanında tutar ve ona SQL ile ulaşır.
PostgreSQL, MySQL, SQLite ve SQL Server gibi sistemler SQL kabul eder. Ana komutlar benzerdir, ama her sistemin küçük farkları olabilir. Bir sistemde çalışan sorgu diğerinde aynı harflerle yazılmayabilir.
SQL Ne İçin Kullanılır?
SQL verinin durduğu yerde kullanılır:
- Gerekli satırları seçmek
- Yeni kayıt eklemek
- Var olan kaydı değiştirmek
- Artık gerekmeyen kaydı silmek
- Koşula göre saymak ve gruplamak
- Birden fazla tablodaki uyan satırları birleştirmek
Örneğin bir uygulama yalnızca kullanıcının kendi kayıtlarını göstermek istediğinde bu koşul genellikle SQL sorgusunda yazılır. Koşul yanlışsa ya hiçbir şey çıkmaz ya da gerekenden fazla satır çıkar.
SQL ile Neler Yapılabilir?
SQL ile bir tablo üzerinde temel işler yapılabilir:
- Tüm sütunları veya bir kısmını okumak
- Bir koşula uyan satırları bulmak
- Yeni satır yazmak
- Bir sütunun değerini değiştirmek
- Seçilen satırı silmek
Basit örnek
SELECT name FROM books WHERE year = 2026;
Bu sorgu books tablosundan yalnızca 2026 yılına ait adları seçer. Tablo ve sütunlar önceden var olmalıdır.
SQL Öğrenmek Zor mu?
İlk SELECT sorgusunu okumak zor değildir. Zorluk koşul, birden fazla tablo ve yanlış silme komutuyla başlar. WHERE olmadan yazılmış bir DELETE tablodaki bütün satırları silebilir.
Başlangıç için şu sıra faydalıdır:
- Tablo, satır ve sütun nedir
- SELECT ve FROM
- WHERE ile koşul
- INSERT ile yeni satır
- UPDATE ile değişiklik
- DELETE'i önce seçtiğiniz satırda denemek
- Küçük bir tabloda aynı sorguyu kendiniz değiştirmek
İlk sorguları gerçek bir projenin veritabanına değil, boş ve küçük bir tabloya yazmak daha güvenlidir.
Avantajları ve Dezavantajları
Avantajları
- Gerekli satırı bütün tabloyu elle gezmeden seçer
- Ana komutlar birkaç veritabanında benzerdir
- Koşul, sıralama ve sayma aynı sorguda yazılabilir
- Uygulama kodu verinin tamamını kendi içinde tutmak zorunda kalmaz
- Öğrenmek için ücretsiz veritabanı sistemleri vardır
Dezavantajları
- Sayfa, düğme veya oyun mantığı yazmaz
- Yazım her sistemde aynı değildir
- Koşulsuz güncelleme ve silme çok satırı değiştirebilir
- Kullanıcının yazdığı metni doğrudan sorgunun içine yapıştırmak tehlikelidir
Sözdizimi ve Temel Kavramlar
Sorgu genellikle ne yapılacağını söyleyen komutla başlar. SELECT okur, INSERT ekler, UPDATE değiştirir, DELETE siler. Tablo adı FROM veya INTO sonrasında yazılır.
Okumak
SELECT name, year FROM books WHERE year >= 2020;
Eklemek
INSERT INTO books (name, year)
VALUES ('Örnek kitap', 2026);Değiştirmek
UPDATE books SET year = 2025 WHERE name = 'Örnek kitap';
WHERE kısmı hangi satırlara dokunulacağını gösterir. Onu UPDATE ve DELETE içinde atlamak, koşula uyan bir satır yerine tablonun kalan satırlarını da değiştirebilir.
Kod Örnekleri
Bir koşula uyan satırlar
SELECT title FROM notes WHERE lang = 'tr';
Saymak
SELECT COUNT(*) FROM notes WHERE lang = 'tr';
Yalnızca seçilen satırı silmek
DELETE FROM notes WHERE id = 15;
Çalışan örnekler
Yukarıdaki kısa sorgular bir şeyi okur. Bu dördü küçük bir tablo kurar, sonra onu kullanır. Boş bir veritabanında sırayla çalıştır. SQLite yeter. Birincisi tabloyu kurar. İkincisi iki satır yazar. Üçüncüsü birini tutar. Dördüncüsü bir sayıyı değiştirir.
Tabloyu kurmak
CREATE TABLE students adında boş bir tablo kurar. id tam sayıdır ve birincil anahtardır, bu yüzden iki satır aynı id'yi paylaşamaz. name metindir ve NOT NULL'dur, adsız satır kabul edilmez. score tam sayıdır ve boş kalabilir. Bu satır Aysel'i veya Murad'ı eklemez. Yalnız sütunları kurar.
CREATE TABLE students ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, score INTEGER );
Bundan sonra tablo vardır ve sıfır satırdır. İkinci kez çalıştırırsan veritabanı tablo zaten var der.
İki öğrenci eklemek
INSERT satır yazar. Parantezdeki adlar sütunlardır. Değerler aynı sırayla gelir: id, name, score. Aysel'in notu 85'tir. Murad'ın notu 40'tır. Metin tırnak içindedir. Sayı tırnaksızdır. id 1'i yeniden eklersen birincil anahtar ikinci kopyayı durdurur.
INSERT INTO students (id, name, score) VALUES (1, 'Aysel', 85), (2, 'Murad', 40);
Tabloda artık iki satır vardır. SELECT ile sormazsan bir şey yazılmaz.
Yalnız geçen notu tutmak
SELECT sütun seçer. WHERE koşulu geçmeyen satırı atar. 85 kalır, 40 kalmaz, çünkü 40, 50'nin altındadır. ORDER BY score DESC büyük notu üste koyar. DESC azalan demektir. WHERE olmazsa iki öğrenciyi de görürsün. ORDER BY olmazsa veritabanı onları herhangi bir sırada verebilir.
SELECT name, score FROM students WHERE score >= 50 ORDER BY score DESC;
Bir satır döner: Aysel, 85. Murad tabloda durur. Bu sorgu onu yalnız gizledi.
Bir notu değiştirmek
UPDATE var olan sütuna yeni değer yazar. SET yeni notun 70 olduğunu söyler. WHERE yalnız adı Murad olan satırın değişeceğini söyler. Altındaki SELECT tabloyu yeniden okur, iki satırı da görürsün. WHERE'i unutursan her öğrencinin notu 70 olur. Olağan kaza budur.
UPDATE students SET score = 70 WHERE name = 'Murad'; SELECT name, score FROM students;
Murad artık 70'tir. Aysel 85 kalır. Eski 40 gitmiştir, çünkü UPDATE onun yerine yenisini yazar.
Sık Sorulan Sorular
SQL nedir?
SQL, ilişkisel veritabanındaki veriyi okumak ve değiştirmek için kullanılan sorgu dilidir.
SQL bir programlama dili midir?
O, veri için bir sorgu dilidir. Python gibi uygulamanın bütün parçasını yazmak için kullanılmaz.
SQL ücretsiz mi?
Dilin kendisini öğrenmek ücretsizdir. PostgreSQL ve SQLite gibi sistemler de ücretsiz kurulabilir. Bazı sunucu ürünlerinin ayrı koşulları olabilir.
SQL ile MySQL aynı mıdır?
Hayır. SQL dildir. MySQL ise bu dili kabul eden veritabanı sistemlerinden biridir.
Excel ile SQL aynı mıdır?
Hayır. Tablo fikir olarak yakındır, ama SQL sorgu ile çalışır ve veritabanında duran satırlar içindir.
Yanlış bir sorgu veriyi silebilir mi?
Evet. WHERE olmadan yazılmış DELETE veya UPDATE beklenenden fazla satıra dokunabilir. Önce küçük bir tabloda denemek gerekir.
Kullanıcının yazdığı metin sorguya doğrudan eklenebilir mi?
Eklenmemelidir. Metni sorgunun içine yapıştırmak yerine veritabanının kabul ettiği ayrı bir parametre kullanılmalıdır.