SQL Nedir ve Temel SQL Komutları Nelerdir?
SQL (Structured Query Language), Türkçede Yapılandırılmış Sorgu Dili olarak adlandırılan ve ilişkisel veritabanlarıyla iletişim kurmak için kullanılan standart bir dildir. Veritabanlarında bilgi oluşturma, kaydetme, sorgulama, güncelleme ve silme işlemlerinin gerçekleştirilmesini sağlar.
SQL; MySQL, PostgreSQL, Microsoft SQL Server, Oracle Database ve SQLite gibi veritabanı yönetim sistemlerinde kullanılmaktadır.
SQL komutları sayesinde web sitelerinin kullanıcı bilgileri, e-ticaret sistemlerinin siparişleri, forumların mesajları ve kurumsal uygulamaların kayıtları yönetilebilir.
SQL'in Tarihçesi
Edgar F. Codd'un ilişkisel veri modeli üzerine yaptığı çalışmalar, SQL'in geliştirilmesinde önemli rol oynamıştır.
Donald D. Chamberlin ve Raymond F. Boyce tarafından geliştirilen SEQUEL adlı dil, SQL'in öncüsü olmuştur.
SQL, 1986 yılında ANSI ve 1987 yılında ISO tarafından standartlaştırılmıştır.
Sonraki yıllarda farklı veritabanı sistemleri tarafından benimsenmiş ve yeni özelliklerle geliştirilmiştir.
SQL Ne İşe Yarar?
SQL, veritabanlarında saklanan bilgilerin yönetilmesini sağlar.
Bir uygulamada yeni kullanıcı kaydı oluşturmak, ürün bilgilerini güncellemek veya siparişleri listelemek için SQL sorguları kullanılabilir.
SQL ile veritabanları ve tablolar oluşturulabilir.
Tablolara yeni kayıtlar eklenebilir, mevcut kayıtlar değiştirilebilir ve istenmeyen kayıtlar silinebilir.
Ayrıca farklı tablolardaki bilgiler birleştirilerek raporlar hazırlanabilir.
SQL Nasıl Çalışır?
SQL komutları, veritabanı yönetim sistemi tarafından işlenir.
Bir uygulama veya veritabanı istemcisi SQL sorgusunu sunucuya gönderir.
Veritabanı sistemi sorguyu çözümler, gerekli kontrolleri yapar ve uygun yürütme planını belirler.
Sorgunun türüne göre veriler okunur veya değiştirilir.
İşlem sonucunda uygulamaya kayıtlar, etkilenen satır sayısı veya hata bilgisi döndürülebilir.
SQL Komutları Kaç Gruba Ayrılır?
SQL komutları, işlevlerine göre çeşitli gruplarda incelenmektedir.
|
Komut grubu |
Açıklama |
Örnekler |
|---|---|---|
|
DDL |
Veri yapısı tanımlama |
CREATE, ALTER, DROP |
|
DML |
Veri değiştirme |
INSERT, UPDATE, DELETE |
|
DQL |
Veri sorgulama |
SELECT |
|
DCL |
Yetki kontrolü |
GRANT, REVOKE |
|
TCL |
İşlem kontrolü |
COMMIT, ROLLBACK, SAVEPOINT |
Bu sınıflandırma, SQL komutlarının görevlerini açıklamak için yaygın olarak kullanılmaktadır. Bazı kaynaklarda SELECT komutu DML içerisinde de değerlendirilmektedir.
CREATE DATABASE Komutu
CREATE DATABASE komutu, yeni bir veritabanı oluşturmak için kullanılır.
MySQL üzerinde örnek bir veritabanı oluşturmak için:
CREATE DATABASE forum;
Bu komut, forum adlı bir veritabanı oluşturur.
MySQL'de oluşturulan veritabanını seçmek için aşağıdaki komut kullanılabilir:
USE forum;
USE komutu MySQL tarafından desteklenmektedir. PostgreSQL'de veritabanı değiştirme işlemi bağlantı veya istemci üzerinden gerçekleştirilir.
CREATE TABLE Komutu
Örneğin kullanıcı bilgilerini saklamak için aşağıdaki MySQL tablosu hazırlanabilir:
CREATE TABLE kullanicilar (
id INT AUTO_INCREMENT PRIMARY KEY,
kullanici_adi VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
sehir VARCHAR(50),
kayit_tarihi DATETIME DEFAULT CURRENT_TIMESTAMP
);
Bu tabloda kullanıcı numarası, kullanıcı adı, e-posta adresi, şehir ve kayıt tarihi bilgileri saklanabilir.
AUTO_INCREMENT, MySQL'e özgü otomatik numaralandırma özelliğidir.
INSERT INTO Komutu
INSERT INTO komutu, tabloya yeni kayıt eklemek için kullanılır.
INSERT INTO kullanicilar
(kullanici_adi, email, sehir)
VALUES
('ahmet', 'ahmet@example.com', 'İstanbul');
Bu komut, kullanıcılar tablosuna yeni bir kayıt ekler.
Birden fazla kayıt aynı sorguyla eklenebilir:
INSERT INTO kullanicilar
(kullanici_adi, email, sehir)
VALUES
('ayse', 'ayse@example.com', 'Ankara'),
('mehmet', 'mehmet@example.com', 'İzmir');
SELECT Komutu
Veritabanındaki bilgileri sorgulamak için kullanılır.
SELECT * FROM kullanicilar;
Bu sorgu, kullanıcılar tablosundaki bütün sütunları ve kayıtları getirir.
Yalnızca belirli sütunları görüntülemek için:
SELECT kullanici_adi, email
FROM kullanicilar;
Bu sorgu yalnızca kullanıcı adı ve e-posta bilgilerini getirir.
WHERE Komutu
WHERE, sorgularda belirli koşullara uyan kayıtları seçmek için kullanılan bir ifadedir.
SELECT *
FROM kullanicilar
WHERE sehir = 'İstanbul';
Bu sorgu, şehir alanı İstanbul olan kullanıcıları getirir.
Sayısal karşılaştırmalar da yapılabilir:
SELECT *
FROM kullanicilar
WHERE id > 10;
Bu sorgu, ID değeri 10'dan büyük olan kayıtları seçer.
AND, OR ve NOT Operatörleri
SQL'de birden fazla koşulu birlikte değerlendirmek için mantıksal operatörler kullanılır.
AND, bütün koşulların doğru olmasını gerektirir.
SELECT *
FROM kullanicilar
WHERE sehir = 'İstanbul'
AND id > 5;
OR, koşullardan en az birinin doğru olması durumunda kullanılabilir.
SELECT *
FROM kullanicilar
WHERE sehir = 'İstanbul'
OR sehir = 'Ankara';
NOT ise bir koşulun olumsuzunu ifade eder.
SELECT *
FROM kullanicilar
WHERE NOT sehir = 'İstanbul';
SQL'de NULL değerler nedeniyle mantıksal ifadeler üç değerli mantığa göre değerlendirilir.
ORDER BY Komutu
ORDER BY, sorgu sonuçlarını belirli sütunlara göre sıralamak için kullanılır.
SELECT *
FROM kullanicilar
ORDER BY kullanici_adi ASC;
ASC, artan sıralamayı ifade eder.
Azalan sıralama için DESC kullanılır:
SELECT *
FROM kullanicilar
ORDER BY id DESC;
Bu sorgu, kayıtları ID değerine göre büyükten küçüğe sıralar.
LIMIT Komutu
LIMIT, sorgu sonucunda döndürülecek kayıt sayısını sınırlandırmak için kullanılır.
SELECT *
FROM kullanicilar
ORDER BY id DESC
LIMIT 10;
Bu sorgu, ID değeri en yüksek olan 10 kaydı getirir.
LIMIT, MySQL ve PostgreSQL gibi sistemlerde desteklenmektedir.
Microsoft SQL Server gibi bazı sistemlerde benzer işlemler için farklı sözdizimleri kullanılmaktadır.
UPDATE Komutu
UPDATE kullanicilar
SET sehir = 'Bursa'
WHERE id = 1;
Bu komut, ID değeri 1 olan kullanıcının şehir bilgisini Bursa olarak değiştirir.
Birden fazla sütun aynı sorguyla güncellenebilir.
UPDATE kullanicilar
SET kullanici_adi = 'ahmet123',
sehir = 'İzmir'
WHERE id = 1;
WHERE koşulu kullanılmazsa tablodaki bütün kayıtlar güncellenebilir.
DELETE Komutu
DELETE, tablodaki kayıtları silmek için kullanılır.
DELETE FROM kullanicilar
WHERE id = 1;
Bu sorgu, ID değeri 1 olan kaydı siler.
Birden fazla kayıt belirli koşullara göre silinebilir.
DELETE FROM kullanicilar
WHERE sehir = 'Ankara';
WHERE koşulu olmadan çalıştırılan DELETE komutu, tablodaki bütün satırları silebilir.
ALTER TABLE Komutu
ALTER TABLE, mevcut bir tablonun yapısını değiştirmek için kullanılır.
Örneğin kullanıcılar tablosuna telefon alanı eklenebilir.
ALTER TABLE kullanicilar
ADD COLUMN telefon VARCHAR(20);
Bu işlem, tabloya yeni bir sütun ekler.
Sütunların değiştirilmesi veya kaldırılması gibi işlemler de ALTER TABLE aracılığıyla gerçekleştirilebilir.
Ancak sözdizimi veritabanı sistemlerine göre farklılık gösterebilir.
DROP TABLE Komutu
DROP TABLE, bir tabloyu tamamen kaldırmak için kullanılır.
DROP TABLE kullanicilar;
Bu komut, tabloyu ve içerisindeki kayıtları kaldırır.
DROP TABLE işlemi, DELETE komutundan farklıdır.
DELETE kayıtları silerken DROP TABLE tablonun kendisini de kaldırır.
Bu nedenle işlem öncesinde gerekli yedeklerin alınması önemlidir.
TRUNCATE TABLE Komutu
TRUNCATE TABLE, bir tablodaki bütün kayıtları kaldırmak için kullanılır.
TRUNCATE TABLE kullanicilar;
Bu komut, tablonun yapısını koruyarak içindeki kayıtları temizler.
TRUNCATE ile DELETE arasında işlem yönetimi, otomatik numaralandırma ve tetikleyiciler bakımından farklılıklar bulunabilir.
Bu farklılıklar kullanılan veritabanı sistemine göre değişmektedir.
DISTINCT Komutu
DISTINCT, sorgu sonucunda tekrar eden değerlerin kaldırılmasını sağlar.
SELECT DISTINCT sehir
FROM kullanicilar;
Bu sorgu, kullanıcılar tablosundaki farklı şehir değerlerini listeler.
Aynı şehir birden fazla kullanıcıda bulunsa bile sonuçta tek bir kez görüntülenir.
LIKE Operatörü
LIKE, metin verileri üzerinde desen eşleştirmesi yapmak için kullanılır.
SELECT *
FROM kullanicilar
WHERE kullanici_adi LIKE 'a%';
Bu sorgu, kullanıcı adı a harfiyle başlayan kayıtları arar.
Yüzde işareti, sıfır veya daha fazla karakteri temsil eder.
Alt çizgi karakteri ise tek bir karakteri temsil eder.
LIKE karşılaştırmalarının büyük-küçük harf duyarlılığı, kullanılan veritabanına ve karşılaştırma ayarlarına göre değişebilir.
BETWEEN Operatörü
BETWEEN, belirli bir aralıkta bulunan değerleri sorgulamak için kullanılır.
SELECT *
FROM kullanicilar
WHERE id BETWEEN 5 AND 15;
Bu sorgu, ID değeri 5 ile 15 arasında olan kayıtları getirir.
BETWEEN ifadesi, belirtilen iki sınır değerini de kapsar.
Tarih ve sayısal veriler üzerinde kullanılabilir.
IN Operatörü
IN, bir sütunun belirli değerlerden biriyle eşleşip eşleşmediğini kontrol eder.
SELECT *
FROM kullanicilar
WHERE sehir IN ('İstanbul', 'Ankara', 'İzmir');
Bu sorgu, belirtilen üç şehirden birinde bulunan kullanıcıları getirir.
Birden fazla OR koşulu yazmak yerine IN kullanılması sorgunun daha kısa ve anlaşılır olmasını sağlayabilir.
COUNT, SUM, AVG, MIN ve MAX Fonksiyonları
|
Fonksiyon |
Görevi |
|---|---|
|
COUNT |
Kayıt veya NULL olmayan değer sayısını hesaplar |
|
SUM |
Sayısal değerleri toplar |
|
AVG |
Sayısal değerlerin ortalamasını hesaplar |
|
MIN |
En küçük değeri bulur |
|
MAX |
En büyük değeri bulur |
Örneğin toplam kullanıcı sayısını hesaplamak için:
SELECT COUNT(*) AS toplam_kullanici
FROM kullanicilar;
En yüksek kullanıcı ID değerini bulmak için:
SELECT MAX(id) AS en_buyuk_id
FROM kullanicilar;
GROUP BY Komutu
GROUP BY, kayıtları belirli alanlara göre gruplandırmak için kullanılır.
Örneğin şehirlerdeki kullanıcı sayılarını hesaplamak için:
SELECT sehir, COUNT(*) AS kullanici_sayisi
FROM kullanicilar
GROUP BY sehir;
Bu sorgu, kullanıcıları şehirlerine göre gruplandırır.
Her şehir için kullanıcı sayısını hesaplar.
GROUP BY özellikle raporlama ve istatistik işlemlerinde kullanılmaktadır.
HAVING Komutu
HAVING, gruplandırılmış sonuçlar üzerinde koşul uygulamak için kullanılır.
SELECT sehir, COUNT(*) AS kullanici_sayisi
FROM kullanicilar
GROUP BY sehir
HAVING COUNT(*) > 10;
Bu sorgu, kullanıcı sayısı 10'dan fazla olan şehirleri listeler.
WHERE, gruplandırma öncesinde satırları filtrelerken HAVING gruplar üzerinde filtreleme yapar.
JOIN Komutu
JOIN, farklı tablolardaki ilişkili bilgileri birleştirmek için kullanılır.
Örneğin kullanicilar ve konular adlı iki tablo bulunduğu varsayılsın.
Konular tablosunda kullanici_id ve baslik alanları yer alsın.
SELECT
kullanicilar.kullanici_adi,
konular.baslik
FROM kullanicilar
INNER JOIN konular
ON kullanicilar.id = konular.kullanici_id;
Bu sorgu, her konunun başlığını ve ilgili kullanıcının adını birlikte getirir.
SQL'de INNER JOIN, LEFT JOIN, RIGHT JOIN ve CROSS JOIN gibi farklı birleştirme türleri bulunmaktadır.
FULL OUTER JOIN desteği ise kullanılan veritabanına göre değişmektedir.
PRIMARY KEY ve FOREIGN KEY
FOREIGN KEY ise farklı tablolar arasında referans ilişkisi kurar.
Örneğin bir forum sisteminde her konunun belirli bir kullanıcıya ait olması sağlanabilir.
Bu ilişkiler, verilerin tutarlı biçimde saklanmasına yardımcı olur.
Yabancı anahtar desteği ve kısıtlamaların davranışı, kullanılan veritabanı sistemine ve depolama motoruna göre farklılık gösterebilir.
COMMIT ve ROLLBACK Komutları
COMMIT, etkin bir işlemin başarıyla tamamlanmasını sağlar.
ROLLBACK ise henüz kalıcı hâle getirilmemiş işlem değişikliklerini geri almak için kullanılır.
MySQL'in InnoDB depolama motorunda örnek bir işlem şu şekilde gerçekleştirilebilir:
START TRANSACTION;
UPDATE kullanicilar
SET sehir = 'Antalya'
WHERE id = 2;
ROLLBACK;
Bu örnekte UPDATE işlemi geri alınır.
ROLLBACK yerine COMMIT kullanılsaydı değişiklik kalıcı hâle getirilecekti.
Ancak her SQL komutu aynı işlem davranışına sahip değildir. Özellikle DDL komutlarının işlem yönetimi veritabanı sistemine göre değişebilir.
GRANT ve REVOKE Komutları
GRANT ve REVOKE, veritabanı kullanıcılarının erişim yetkilerini yönetmek için kullanılır.
GRANT, belirli yetkilerin verilmesini sağlar.
MySQL üzerinde örnek:
GRANT SELECT, INSERT
ON forum.*
TO 'forum_user'@'localhost';
Bu komut, kullanıcıya forum veritabanında okuma ve kayıt ekleme yetkisi verir.
REVOKE ise daha önce verilmiş yetkileri geri almak için kullanılır.
REVOKE INSERT
ON forum.*
FROM 'forum_user'@'localhost';
Bu komut, belirtilen kullanıcının INSERT yetkisini kaldırır.
Yetkilendirme sözdizimi veritabanı sistemlerine göre farklılık gösterebilir.
SQL Komutları Nerede Kullanılır?
MySQL için phpMyAdmin ve MySQL Workbench, PostgreSQL için pgAdmin, Microsoft SQL Server için SQL Server Management Studio kullanılabilmektedir.
Ayrıca SQL sorguları PHP, Python, Java, C# ve diğer programlama dilleriyle geliştirilen uygulamalardan çalıştırılabilir.
Web siteleri, mobil uygulamalar ve kurumsal yazılımlar, veritabanındaki kayıtları yönetmek için SQL sorgularından yararlanabilir.
SQL Kullanırken Nelere Dikkat Edilmelidir?
SQL sorguları hazırlanırken veri bütünlüğünün ve güvenliğin korunması önemlidir.
UPDATE ve DELETE komutlarında WHERE koşulları dikkatle kullanılmalıdır.
Uygulamalarda SQL enjeksiyonu saldırılarına karşı parametreli sorgular tercih edilmelidir.
Veritabanı kullanıcılarına yalnızca gerekli yetkiler verilmelidir.
Büyük tablolarda sorgu performansı için uygun indeksler oluşturulabilir.
Önemli veri değişikliklerinden önce yedek alınması ve sorguların test ortamında denenmesi veri kaybı riskini azaltabilir.
SQL Öğrenmenin Önemi
SQL, ilişkisel veritabanlarıyla çalışan yazılımların geliştirilmesinde kullanılan temel teknolojilerden biridir.
CREATE, INSERT, SELECT, UPDATE ve DELETE gibi komutlar, veritabanı işlemlerinin temelini oluşturur.
JOIN, GROUP BY, HAVING ve toplulaştırma fonksiyonları ise daha kapsamlı sorguların ve raporların hazırlanmasını sağlar.
SQL bilgisi; web geliştirme, veritabanı yönetimi, veri analizi ve kurumsal yazılım geliştirme alanlarında kullanılmaktadır.
Temel SQL komutlarının öğrenilmesi, MySQL ve PostgreSQL gibi veritabanı sistemlerinin daha etkili kullanılmasına yardımcı olur.






