Cemre Acar
Veritabanlarında Sorgulama : SQL'e Giriş

Veritabanlarında Sorgulama : SQL'e Giriş

SQL Nedir ? SQL Açılımı Nedir ? SQL Temel Komutları Nelerdir ? Tüm bu soruları veritabanları üzerine yazdığım ER Diyagram , Normalizasyon ve Fonksiyonel Bağımlılık konularından sonra artık Veritabanı Tasarlama işini kavradığımızı düşünerek SQL'e Giriş yazısı ile cevaplandıracağım. İşte tam da burada SQL nedir sorusunu sormalıyız. SQL, ilişkisel bir veritabanındaki verilerin sorgulanması ve yönetimi için tasarlanmış bir veritabanı dilidir. SQL'in açılımı Türkçe'ye tam olarak Yapılandırılmış Sorgu Dili olarak çevrilebilir. Bu yazımda SQL’e hızlı bir başlangıç yapmanızı ve kısmen ileri kabul edilebilecek konularda bilgi sahibi olmanızı hedefledim. 

SQL İlişkisel Veritabanı Sistemi için standart dildir. MySQL, Oracle ve MSSQL gibi İlişkisel Veritabanı Yönetim Sistemleri SQL'i standart veritabanı dili olarak kullanır. Ancak hepsi kendi içinde ufak farklı söz dizimlerine sahiptir. Bu yazıyı MySQL baz alarak devam edeceğim. Sözü fazla uzatmadan SQL komutlarına geçelim.

SQL Komutları 4 temel gruba ayrılır ;
Data Query Language (Veri Sorgulama Dili) - DQL 
Data Manipulation Language (Veri İşleme Dili) - DML
Data Definition Language (Veri Tanımlama Dili) - DDL
Data Control Language (Veri Kontrol Dili) - DCL

Sizlerin mutlaka duymuş olduğu (Bu yazıyı okuyor olmanızdan dolayı duyduğunuzu varsayıyorum) SELECT , INSERT , UPDATE .. gibi komutlar bu 4 ana grubun içinde yer alır. Detaylı olarak inceleyelim.

- Data Query Language (Veri Sorgulama Dili) - DQL 
     SELECT: Veritabanından veri seçer.

- Data Manipulation Language (Veri İşleme Dili) - DML
     INSERT: Veritabanına yeni veri ekler.
     UPDATE: Veritabanındaki verileri günceller.
     DELETE: Veritabanındaki verileri siler.

- Data Definition Language (Veri Tanımlama Dili) - DDL
     
CREATE: Verilen komuta göre bir veritabanı veya veritabanı içinde tablo oluşturur.
     ALTER: Verilen komuta göre bir veritabanı veya veritabanı içindeki tabloyu değiştirir.
     DROP: Verilen komuta göre bir veritabanı veya veritabanı içindeki tabloyu siler.

- Data Control Language (Veri Kontrol Dili) - DCL (Bu grup bu yazıda işlenmeyecektir.)
     GRANT: Bir kullanıcıya yetki vermek için kullanılır.
     REVOKE: Kullanıcıya verilen yetkiyi geri almak için kullanılır.



Tüm komutları örnek üzerinde detaylı şekilde görelim. Öncelikle tüm uygulama işlemlerini yapacağımız MySQL Workbench'e sahip olmanız gerekmekte. Eğer bilgisayarınızda yüklü değil ise buradan ücretsiz indirebilirsiniz. Workbench içinde gerekli local ayarlarınızı yaptıktan sonra Query Tab'da işlemlerimize başlayalım.
Şimdi elimizde bir database olmadığını varsayalım ve öncelikle bir database oluşturalım. Ben veritabanımın ismini cemreacarcom olarak yazıyorum siz dilediğiniz bir isim verebilirsiniz. 

CREATE DATABASE cemreacarcom;

Şimdi artık bir veritabanımız var. Workbench içinde soldaki sidebarda yenile butonuna bastığınızda veritabanınızın oluştuğunu göreceksiniz. Şu an boş bir veritabanına sahibiz buna tablo ekleyelim. Ben bu yazıyı yazarken basit bir üniversite bilgi sisteminin veritabanını oluşturmaya çalışacağım. Bunun için öncelikle danışman tablosu oluşturalım.

CREATE TABLE cemreacarcom.Danisman (

DanismanID INTEGER PRIMARY KEY,

Isim varchar(255),

Soyisim varchar(255),

Sehir varchar(255)

);

İlk tablomuz oluştu. Bir de öğrenci tablosu oluşturalım.

CREATE TABLE cemreacarcom.Ogrenci (

OgrenciID INTEGER PRIMARY KEY,

Isim varchar(255),

Soyisim varchar(255),

Bolum varchar(255),

Danisman INTEGER,

FOREIGN KEY(Danisman) REFERENCES Danisman(DanismanID),

Sehir varchar(255)

);

İki tablomuz da oluştuğuna göre buralarda ne yaptıklarımıza bir göz gezdirelim. Danışman tablomuza 4 nitelik tanımladık. DanışmanID niteliğimizin Primary Key (PK) olduğunu belirttik. Öğrenci tablomuzda 6 nitelik belirledik ve Danışman tablomuza göre farklı bir şeyler yaptık. Öğrencinin bir Danışmanı var ve bunu Foreign Key ile Danışman tablomuzdaki DanışmanID ile bağladık. Şimdi gelin bir kaç veri ekleyelim.

INSERT INTO cemreacarcom.Danisman VALUES (1,"Öznur","Köksal","Izmir");
INSERT INTO cemreacarcom.Danisman VALUES (2,"Mehmet","Özhan","İstanbul");
INSERT INTO cemreacarcom.Danisman VALUES (3,"Okan","Devrim","Izmir");

Danışman tablomuza 3 yeni veri ekledik. Bir de Öğrenci tablomuza veri ekleyelim.

INSERT INTO cemreacarcom.Ogrenci VALUES (1,"Selim","Karasu","Bilgisayar Mühendisliği",1,"Muğla");
INSERT INTO cemreacarcom.Ogrenci VALUES (2,"Adnan","Dereci","İşletme",1,"Sivas");
INSERT INTO cemreacarcom.Ogrenci VALUES (3,"Selçuk","Saygılı","Psikoloji",2,"Trabzon");
INSERT INTO cemreacarcom.Ogrenci VALUES (4,"Yunus","Akyar","Makine Mühendisliği",3,"Edirne");
INSERT INTO cemreacarcom.Ogrenci VALUES (5,"Umut","Akın","Ekonomi",2,"Manisa");

Öğrenci tablomuza da 5 yeni veri ekledik. Şimdi gelin bunları bir görüntüleyelim.

SELECT * FROM cemreacarcom.Ogrenci


Bu satır ile Öğrenci tablomuzu görmüş olduk. Girdiğimiz veriler eğer benim ile aynı şekilde girdiyseniz şu şekilde gözükecektir.

Danışman tablosunu da aynı şekilde görüntüleyebilirsiniz.
Şimdi harika bir veritabanına sahibiz. Bu veriler üzerinden çeşitli sorgulamalara da değinelim.

SELECT * FROM cemreacarcom.Ogrenci WHERE Danisman="2"

Burada sadece DanismanID'si 2 olan öğrencileri listelemiş olduk. 

SELECT * FROM cemreacarcom.Ogrenci order by Danisman

Burada da öğrencilerin tümünü DanismanID lerine göre sıraladık. Bir de LIKE komutuna bakalım.

SELECT * FROM cemreacarcom.Ogrenci WHERE Isim NOT LIKE '%a%';

Bu sorgumuzda da Öğrenci tablomuzdaki Isim niteliklerinin içinde 'a' harfi bulunmayanları listeledik. (Burada büyük küçük harf duyarlılığı mevcuttur.)
Yine tablomuzda toplam kaç kayıt var buna bakabilmek için COUNT kullanabiliriz. Bu komut ile birlikte DISTINCT komutuna da değineceğim. Bunun için şöyle bir şey yazalım.

SELECT COUNT(*) FROM cemreacarcom.Ogrenci;

Böylece kayıt sayımızı görmüş olduk. Peki bir de şöyle bir şey deneyelim. Bu tabloda kaç adet lisans bölümü mevcut ben bunları bilmek istiyorum. Ancak COUNT(Bolum) şeklinde bir komut kullandığımızda, eğer tablomuzda birden fazla Makine Mühendisliği ya da Psikoloji ya da herhangi bir bölüm varsa bunları da dahil edecek demektir. Ben yalnızca farklı bölümlerin sayısını bilmek istiyorum. Bunun için aşağıdaki şekilde DISTINCT komutunu kullanıyoruz.

SELECT DISTINCT COUNT(Bolum) FROM cemreacarcom.Ogrenci;

Böylece yalnızca Unique lisans bölümlerinin sayısını elde etmiş olduk.

SQL'e Giriş yazımı burada sonlandırıyorum. Temel seviyede SQL'e giriş yaptığımızı, çeşitli sorguları yapabiliyor olduğumuzu düşünüyorum. Daha ileri bir konu olan Trigger kullanımına MySQL Trigger Kullanımı isimli yazımdan ulaşabilirsiniz. Yazımda eksik ya da yetersiz bulduğunuz kısımları yorum olarak belirtebilirsiniz. İyi çalışmalar.

Heyy ! Blog'a abone olup yazılarımdan ilk sen haberdar olmak ister misin ?

ABONE OL!

Yorumlar

Neslihan | 25.03.2020

Çok faydalı, öğretici buldum. Anlatım dili açık ve net. Emeğine sağlık, yeni yazılarını bekliyorum.

Yorum Ekle

Yorumunuz onaylandıktan sonra yayınlanacaktır.