Kurs
SQL, veri bilimciler ve veri mühendisleri için veritabanlarından içgörü elde etmenin vazgeçilmez aracıdır. Bir veritabanı birden çok tablodan oluşur ve PostgreSQL’den Snowflake’e kadar farklı SQL türleri vardır.
SQL’deki Veri Tanımlama Dili (DDL) komutları, veritabanı nesnelerinin yapısını tanımlamak ve yönetmek için kullanılır. Bu yazıda, bir Filmler Veritabanı kullanarak örneklerle SQL’deki DDL komutlarını açıklayacağım. Haydi başlayalım!
SQL’de DDL Komutları Nelerdir?
Veri Tanımlama Dili (DDL) komutları, SQL’de bir şemayı tanımlayıp yönetmeme olanak tanır. Kısaca, SQL’de bir şema; verilerin bir veritabanında nasıl düzenlendiğini ve veritabanındaki farklı tablolar arasındaki ilişkilerin nasıl yönetildiğini tanımlayan bir plandır.
DDL, farklı işlevlere sahip çeşitli komutlardan oluşur; aşağıdaki sırayla ele alacağım:
|
DDL Komutu |
AÇIKLAMA |
SÖZDİZİMİ |
|
|
Bir tabloyu ve sütunlarını veri tipleriyle birlikte oluşturur. |
|
|
|
Sütun adlarını değiştirir ve bir sütun ekler ya da siler. |
|
|
|
Tablonun adını değiştirir. |
|
|
|
Diğer ekip üyelerinin gözden geçirmesi için SQL koduna bir açıklama ekler. |
|
|
|
Tabloyu silmeden tablodaki verileri kaldırır. |
|
|
|
Tabloyu verileriyle birlikte siler. |
|
Örneklerle SQL’de DDL Komutları
Artık DDL komutlarının temelini ve amaçlarını bildiğimize göre, Filmler veritabanını kullanarak bazı pratik örneklere bakalım.
SQL’de CREATE komutu
Yeni bir tablo oluşturmam gerektiğinde, aşağıda görüldüğü gibi CREATE TABLE komutunu kullanırım:
CREATE TABLE table_name (
column_1 datatype,
column_2 datatype,
...,
column_n datatype
);
Yukarıdaki örnekte, farklı veri tiplerinde sütunlar tanımlarım. SQL çeşitli veri tiplerini destekler; en yaygın olanları genellikle STRING (metin), INT (tam sayılar), FLOAT (ondalıklı sayılar) ve DATE (tarih) tipleridir.
Örneğin, actor tablosunu oluşturmak isteseydim, CREATE TABLE’ı şu şekilde kullanırım:
CREATE TABLE actor (
actor_id String(32767),
first_name String(32767),
last_name String(32767),
last_update String(32767)
);
Burada:
actortablo adıdıractor_id, içeriğinin metin formatında (String) olması ve 32767 karakteri geçmemesi beklenen bir sütun adıdır.first_name, içeriğinin metin formatında (String) olması ve 32767 karakteri geçmemesi beklenen bir sütun adıdır.last_name, içeriğinin metin formatında (String) olması ve 32767 karakteri geçmemesi beklenen bir sütun adıdır.last_update, içeriğinin metin formatında (String) olması ve 32767 karakteri geçmemesi beklenen bir sütun adıdır.
Sorguyu çalıştırdığımda, yeni tablo diğer tablolarla birlikte görünür; böylece istediğim zaman ondan sorgu çekebilirim.
SQL’de ALTER komutu
SQL’de ALTER kullanarak, başka bir tablo oluşturup eskisini silmeye gerek kalmadan bir tabloyu güncelleyebilirim. Kurumların binlerce tablosu olabilir ve verileri kayıp riski olmadan güncel tutmayı bilmek kritik önemdedir.
ALTER komutunun farklı şekillerde kullanılabildiğini unutmamak gerekir; örneğin:
- Bir tabloya yeni sütun eklemek
- Bir tablodaki sütunları yeniden adlandırmak
- Bir tablodaki sütunları değiştirmek
- Bir tablodan sütun silmek
ALTER içinde ADD komutu
Bir sütun eklemek için, aşağıda görüldüğü gibi ALTER komutunu ADD ile birleştiririz:
ALTER TABLE table_name ADD column_name datatype;
Burada, aktör tablosuna STRING veri tipinde yeni bir nationality sütunu ekliyoruz.
ALTER TABLE actor ADD nationality String(32767);
SQL’deki tüm ALTER komutları benzer bir yapıyı izler; bu da SQL’i öğrenmesi ve ustalaşması doğal bir dil haline getirir.
ALTER içinde RENAME komutu
Bir sütun adını değiştirmem gerektiğinde, ALTER içinde RENAME komutunu şu şekilde kullanırım:
ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
Örneğin, last_name sütun adını, orta ad mı soyad mı olduğu konusundaki olası karışıklığı gidermek için family_name olarak değiştirelim. Bu durumda şu sorguyu çalıştırırım:
ALTER TABLE actor RENAME COLUMN last_name TO family_name;
ALTER içinde MODIFY komutu
Veri tipleri sütun özelliklerini tanımlar ve verinin kalitesini etkiler. Örneğin, last_update bir String(metin) olarak ayarlanmıştı; ancak veriler bunun tarih ve zamanı temsil ettiğini açıkça gösteriyor.
Farklı veri tiplerine bakıp sütundaki veriye döndüğümüzde, uygun veri tipi TIMESTAMP olur.
Bir sütunun veri tipini uygun şekilde güncellemek, diğer SQL komutlarıyla tarihe göre birleştirme ve filtrelemeyi kolaylaştırır. SQL’de MODIFY şu şekilde kullanılır:
ALTER TABLE table_name ALTER COLUMN column_name datatype;
Bunu last_update sütununa uygulamak için şu sorguyu kullanırım:
ALTER TABLE actor ALTER COLUMN last_update TIMESTAMP;
ALTER içinde DROP komutu
ALTER’ın sunduğu son seçenek bir sütunu kaldırmaktır. Bir sütunu DROP etmem için pek çok neden olabilir; bunlarla sınırlı olmamak üzere:
- Artık geçerli olmayan bilgiler,
- Aynı sütunun başka bir tabloda da bulunduğu yinelenen bilgiler,
- Veri kalitesi sorunları,
- Depolama alanını optimize etmek.
SQL’de sütun silmek kolaydır; ancak bu işlemi dikkatli kullanın, çünkü her zaman geri almak mümkün olmayabilir.
ALTER TABLE table_name DROP COLUMN column_name;
Bir sütunu silme komutu, sütun yeniden adlandırma komutuna benzer görünse de ikisi aynı değildir. Sütunu yeniden adlandırmak veriyi yerinde bırakır, yalnızca başlığı değiştirir. Öte yandan DROP komutu hem veriyi hem de başlığı kaldırır; sanki sütun hiç var olmamış gibi.
last_update sütununun, veritabanının yenilenip yenilenmediği dışında pek bilgi sunmadığını fark ettikten sonra, aşağıdaki sorguyla onu sildim:
ALTER TABLE actor DROP COLUMN last_update;
SQL’de RENAME komutu
RENAME komutu yalnızca tablonun adını değiştirmek için kullanılır ve ALTER’ın RENAME yetenekleriyle karıştırılmamalıdır. Nitekim, bir tablonun adını değiştirmek için sorgu basitçe şöyledir:
RENAME TABLE old_table_name TO new_table_name;
actor tablosu yalnızca isimleri içeriyor ve aktörler hakkında başka bilgi barındırmıyor. Bu yüzden tablo adını aşağıdaki gibi netleştirmek mantıklıdır:
RENAME TABLE actor TO actor_names;
SQL’de COMMENT
SQL’de yorum yazmak, sorgularınızı anlaşılır ve sürdürülebilir kılmak için kritik önemdedir. Karmaşık mantığı açıklamaya, değişiklikleri belgelendirmeye ve belirli tercihleri gerekçelendirmeye yardımcı olur. SQL’de iki şekilde yorum ekleyebilirsiniz:
- Tek satırlık yorumlar
- Çok satırlı yorumlar
Şimdi bunları uygulamada görelim.
SQL’de tek satırlık yorum
Tek satırlık yorumlar genellikle aşağıda olduğu gibi kodun yanında yer alır. Böylece kodu okurken bir meslektaşımın yorumunu da okuyabilirim.
actor tablosunda, actor_id ve last_update sezgisel değildir ve bir yorumla açıklama gerektirir.
CREATE TABLE actor (
actor_id String(32767), --unique identifier
first_name String(32767),
last_name String(32767),
last_update String(32767)--datetime of last update
);
SQL’de yorum yazmak, bu yazıdaki diğer komutlardan farklıdır; çünkü COMMENT adlı bir fonksiyon çağırmaz. Arada boşluk olmayan iki kısa çizgi ‘--’, bir yorumun başladığını gösterir. Sonrasında yazılan her şey kodun parçası sayılmaz.
SQL’de çok satırlı yorum
Açıklama daha uzunsa, çok satırlı yorum kullanın. Bir fonksiyonu açıklamak veya ayrıntılı bağlam sağlamak için tercih edilir. SQL’de çok satırlı yorum eklemek için /* ile başlayıp */ ile bitirin. SQL motoru, /* ile */ arasına yazılan her şeyi yok sayar ve sorgunun parçası olarak çalıştırmaz.
/* Create a table `actor` with the actors’ names. Store first and last name, and keep track of any updates*/
CREATE TABLE actor (
actor_id String(32767), --unique internal identifier
first_name String(32767),
last_name String(32767),
last_update String(32767)--datetime of last update
);
SQL’de TRUNCATE komutu
Bir tabloyu budamak (truncate) onu silmekle aynı şey değildir. Truncate tüm verileri kaldırır ama tablonun yapısını korur; silmek ise yapısı dahil tüm tabloyu kaldırır. Amaca uygun doğru komutu seçerken dikkatli olmak gerekir.
TRUNCATE’ın Excel’deki karşılığı, sütun adının altındaki tüm verileri seçip delete tuşuna basmaktır. SQL’de şöyle yazarım:
TRUNCATE TABLE table_name;
actor tablosunu budamak gerekirse, şu komutu çalıştırırım:
TRUNCATE TABLE actor;
Sonuç, yalnızca sütun adlarının kaldığı ve hiç değer bulunmayan bir tablo olur.
SQL’de DROP komutu
TRUNCATE’ın aksine, DROP DDL komutu tabloyu ve tüm değerlerini bütünüyle siler. Bu tür komutları çalıştırırken dikkatli olmak gerekir; çünkü bu işlem her zaman geri alınamayabilir. DROP komutunun yapısı TRUNCATE sorgusuna benzer:
DROP TABLE table_name;
Dolayısıyla actor tablosunu silmek de şu kadar basittir:
DROP TABLE actor;
Farklı SQL türleri sözdiziminde küçük değişiklikler gerektirebilir; ancak yukarıdaki DDL komutları, hangi SQL sürümünü kullanırsanız kullanın büyük ölçüde aynıdır.
DDL Komutları ve Diğer Komut Türleri
Önceki bölümde, DDL komutlarının tabloların yapısını nasıl tanımladığını ve gerektiğinde içeriklerini veya özelliklerini nasıl güncellediğini açıkladım. Diğer SQL komutu türleri, verileri farklı bir bakışla görmek için seçme, toplama, güncelleme ve hatta tabloları birleştirme olanağı tanır ve her komut setinin belirli bir amacı vardır.
|
Komut |
Tanım |
Amaç |
|
DQL |
Data Query Language |
Belirli bir kritere göre veritabanından veri çekmek |
|
DML |
Data Manipulation Language |
ALTER’dan daha fazla işlevle veritabanındaki tabloları değiştirmek. |
|
DCL |
Data Control Language |
Erişim ve yetki üzerinde izin kontrolleri. |
|
TCL |
Transaction Control Language |
DML komutlarıyla yapılan değişiklikleri veritabanına uygular |

DataCamp ile SQL Becerilerinizi Geliştirin
İyi veri kalitesi, veriler iyi tanımlanıp yapılandırıldığında elde edilir. SQL’deki DDL komutları, veri profesyonellerinin yapılandırılmış bir veritabanı kurup sürdürmesine yardımcı olur. DML komutları gibi diğer SQL komutları ise verileri görüntüleme, toplama, ekleme, filtreleme ve birleştirme olanağı tanır. Aşağıdaki kaynakları inceleyerek SQL hakkında daha fazla bilgi edinin ve becerilerinizi geliştirin:
- SQL ile çalışmak için farklı komut türlerini öğrenin
- En iyi uygulamalar ve sık kullanılan komutlara aşina olmak için bir SQL cheat sheet elinizin altında bulundurun.
- En İyi SQL Mülakat Rehberimiz ile bir SQL mülakatına hazırlanın
İstatistiksel tekniklerin yanı sıra zaman serileri, LLM, Sinir Ağı ve Grafik Teorisi gibi ileri modelleri kullanarak özel veri bilimi modelleri geliştirme konusunda kapsamlı deneyime sahip veri ve yapay zekâ profesyoneli.

