Programlama

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:

  1. Tablo, satır ve sütun nedir
  2. SELECT ve FROM
  3. WHERE ile koşul
  4. INSERT ile yeni satır
  5. UPDATE ile değişiklik
  6. DELETE'i önce seçtiğiniz satırda denemek
  7. 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.

Bu konunun aracı