SQL Komutlarına Genel Bakış
SQL komutları, yaptıkları işe göre birkaç gruba ayrılır. Tablo en sık kullanacağınız komutları listeler; aşağıdaki her bölüm de bunlardan birini çalıştırır.
| Komut | Grup | Ne yapar |
|---|---|---|
CREATE TABLE | DDL | Yeni bir tablo ve sütunlarını tanımlar |
ALTER TABLE | DDL | Sütun ekler, bir sütunu ya da tabloyu yeniden adlandırır |
DROP TABLE | DDL | Bir tabloyu bütün satırlarıyla birlikte siler |
INSERT | DML | Yeni satırlar ekler |
UPDATE | DML | Var olan satırlardaki değerleri değiştirir |
DELETE | DML | Satırları siler |
SELECT | DQL | Satırları okur; WHERE ile filtreler, ORDER BY ile sıralar |
BEGIN, COMMIT, ROLLBACK | TCL | Değişiklikleri birlikte başarılı ya da birlikte başarısız olacak şekilde gruplar |
DDL veri tanımlama dili (data definition language), DML veri işleme dili (data manipulation language), DQL veri sorgulama dili (data query language), TCL ise transaction kontrol dilidir (transaction control language). Adlardan çok bu ayrım önemlidir: DDL veritabanının şeklini, DML ise içindekileri değiştirir.
CREATE TABLE: Tablo Tanımlama
CREATE TABLE tabloya bir ad verir ve sütunlarını türleri ve kurallarıyla birlikte listeler. Bu sayfadaki diğer bütün komutların üzerinde çalışacağı bir tabloya ihtiyacı vardır.
CREATE TABLE sayfası NOT NULL, UNIQUE ve DEFAULT gibi kuralları anlatır.
INSERT: Satır Ekleme
INSERT INTO bir ya da birden fazla satır ekler. Önce sütunları, sonra aynı sırayla değerleri yazın.
id sütunu kendiliğinden doldu: bir INTEGER PRIMARY KEY sütununu boş bıraktığınızda sıradaki numarayı alır. Ayrıntılar INSERT sayfasında.
SELECT: Satırları Okuma
SELECT en çok yazacağınız komuttur. Sütunları seçin, satırları WHERE ile filtreleyin ve ORDER BY ile sıralayın.
Yalnızca WHERE testini geçen satırlar döner, en yüksek not en başta. Ayrıntılar için SELECT temelleri ve WHERE sayfalarına bakın.
UPDATE: Satırları Değiştirme
UPDATE zaten var olan satırlara yeni değerler atar. Hangi satırların değişeceğine WHERE koşulu karar verir; onu yazmazsanız bütün satırlar değişir.
Bir WHERE koşulunun hangi satırları yakaladığından emin değilseniz, önce onu bir SELECT olarak çalıştırın. UPDATE sayfası başka kalıplar da gösterir.
DELETE: Satırları Silme
DELETE FROM, WHERE koşuluna uyan satırları siler. UPDATE gibi, koşul yoksa bütün satırları etkiler.
Chen'in satırı silindi, diğerlerine dokunulmadı. Ayrıntılar için DELETE sayfasına bakın.
ALTER TABLE ve DROP TABLE: Tabloyu Değiştirme veya Silme
ALTER TABLE var olan bir tabloyu satırlarını kaybetmeden değiştirir. DROP TABLE ise tabloyu tamamen siler.
Yeni bir sütun, siz doldurana kadar mevcut satırlarda NULL olarak başlar. ALTER ve DROP TABLE sayfası SQLite'ın nelere izin verdiğini listeler.
JOIN: Tabloları Birleştirme
Bir JOIN, ortak bir sütun üzerinden eşleştirerek iki tablodan aynı anda satır okur.
Boris'in hiç ders kaydı olmadığı için INNER JOIN onu dışarıda bırakır. Bir LEFT JOIN onu boş bir ders alanıyla birlikte tutardı.
GROUP BY: Satırları Özetleme
GROUP BY aynı değeri paylaşan satırları tek bir satırda toplar; COUNT ya da AVG gibi bir aggregate fonksiyon da her grubu özetler.
Aggregate fonksiyonlar ve GROUP BY ve HAVING sayfaları konuyu daha ileri taşır.
BEGIN, COMMIT ve ROLLBACK: Değişiklikleri Gruplama
Bir transaction, birkaç değişikliğin tek bir değişiklik gibi sayılmasını sağlar. COMMIT hepsini kalıcı yapar; ROLLBACK hepsini geri alır.
Para transferi commit edildi, ikinci değişiklik ise geri alındı; bu yüzden Ada 70, Boris 80 ile kalır. Transaction'lar sayfası bunları ne zaman kullanmanız gerektiğini anlatır.
SQLite'ın Farklı Olduğu Yerler
Bu sayfadaki komutlar standart SQL'dir ve burada öğrendikleriniz MySQL ile PostgreSQL'de de işe yarar. Ancak çalıştırılabilir örnekler SQLite için yazılmıştır ve daha büyük veritabanlarında üç ayrıntı değişir:
- Tabloları listelemek. Örnekler SQLite'ın kendi şema tablosu olan
sqlite_master'ı okur. MySQLSHOW TABLESkullanır, PostgreSQL iseinformation_schema.tablesgörünümünü (veyapsqliçinde\dt) kullanır. - Otomatik kimlikler. SQLite'ta
INTEGER PRIMARY KEYolarak tanımlanan bir sütun yeni satırları kendiliğinden numaralandırır;INSERTörneklerininidsütununu atlamasının nedeni budur. MySQL'de sütunaAUTO_INCREMENT, PostgreSQL'de ise bir kimlik sütunu (GENERATED BY DEFAULT AS IDENTITY) veyaSERIALgerekir. - İzinler ve şema değişiklikleri. SQLite'ta
GRANTveREVOKEyoktur, çünkü bir SQLite veritabanı kullanıcı hesabı olmayan tek bir dosyadır.ALTER TABLEkomutu da bir sütunun türünü değiştiremez.
Sıkça Sorulan Sorular
Temel SQL komutları nelerdir?
Günlük işlerin çoğunu beş komut karşılar: tablo tanımlamak için CREATE TABLE, satır eklemek için INSERT, satırları okumak için SELECT, değiştirmek için UPDATE ve silmek için DELETE. Ardından ALTER TABLE, DROP TABLE, JOIN, GROUP BY ve transaction komutları BEGIN, COMMIT ve ROLLBACK gelir.
DDL ile DML arasındaki fark nedir?
DDL (veri tanımlama dili) veritabanının yapısını değiştirir: CREATE, ALTER ve DROP. DML (veri işleme dili) tabloların içindeki satırları değiştirir: INSERT, UPDATE ve DELETE. SELECT yalnızca okuduğu için çoğu zaman ayrı olarak DQL diye listelenir.
SQL komutları büyük/küçük harfe duyarlı mı?
Hayır. SELECT, select ve Select hepsi çalışır. Anahtar sözcükleri büyük harfle yazmak, onları tablo ve sütun adlarından ayırmaya yarayan bir alışkanlıktır. Ancak tırnak içindeki metin birebir karşılaştırılır; bu yüzden büyük/küçük harfe duyarsız bir karşılaştırma istemediğiniz sürece 'Ada' ve 'ada' SQLite'ta farklı string'lerdir.
Bu komutlar MySQL ve PostgreSQL'de de aynı şekilde çalışır mı?
Komutlar standart SQL'dir ve üçünde de aynı anlama gelir, yani burada öğrendikleriniz diğerlerinde de işe yarar. Ancak çalıştırılabilir örnekler SQLite için yazılmıştır: tabloları listelemek için burada sqlite_master okunur, otomatik kimlikler MySQL'de AUTO_INCREMENT, PostgreSQL'de bir kimlik (identity) sütunu gerektirir ve SQLite'ta GRANT ile REVOKE yoktur.