EkoPC Bilişim Ltd. Eğitim Hizmetleri SQL Diliyle Veritabanı Yönetimine Giriş Eğitmen Murat Altınok info@altinok.info
Eğitim İçeriği Giriş: SQL ve ilişkisel veritabanı Konu 1: SQL deyimlerine giriş Konu 2: Veritabanının oluşturulması Konu 3: Tabloların yaratılması Konu 4: İndekslerin yaratılması Konu 5: Verilerin tablolara işlenmesi Konu 6: Verilerin sorgulanması Konu 7: Gruplama ve özetleme Konu 8: Birden fazla tablo ile çalışma (join) Konu 9: Alt sorgular ile çalışma (sub query) Konu 10: Örnek uygulama
SQL ve İlişkisel Veritabanı İlişkisel Veritabanı Nedir ? Verinin, disk üzerindeki yapısının tamamıyla veritabanı yönetim sistemi (DBMS; Oracle, MSSQL, MySQL, Progress, vb.) tarafından idare edildiği, veriler arasındaki ilişkilerin tablolar ve tabloların birbiriyle olan bağlantılarıyla sağlandığı veri saklama ve yönetim ortamlarına ilişkisel veritabanı denir.
SQL ve İlişkisel Veritabanı SQL Nedir, Ne Değildir ? SQL, Yapısal Sorgulama Dili olarak tanımlanan bir bilgisayar dilidir (Structured Query Language). Duruma göre tek başına veya bir program grubu ile birlikte kullanılır. Genel olarak bu dili yorumlayan yani çalıştıran bir ara birim programı vardır. Bu program veritabanı ile kullanıcı arasında bir köprü kurarak SQL komutlarını işletir ve sonuçlarını kullanıcı arayüzü sayesinde aktarır. (devam ediyor...)
SQL ve İlişkisel Veritabanı SQL Nedir Ne Değildir ? SQL paket uygulama değildir. Bir tuşa basarak SQL'den sonuç alamazsınız. Sonuç alabilmek, ancak istenen sonuçlara uygun sorgu cümleleri oluşturmak ve işletmekle mümkündür. SQL temel komutlarının yanı sıra kullanılan veritabanına göre özel komutlar içerebilir. Bu komutlar sadece o veritabanı için geçerlidir ve diğer veritabanları tarafından yorumlanmaz.
SQL ve İlişkisel Veritabanı SQL üç alt grupta incelenir; DDL (Data Definition Language) Veri tabanı üzerinde nesne tanımlama amaçlı kullanılır. CREATE nesne_adi ALTER nesne_adi DROP nesne_adi (devam ediyor...)
SQL ve İlişkisel Veritabanı SQL üç alt grupta incelenir; DML (Data Manipulation Language) Veri tabanı içindeki verileri sorgulamak ve üzerlerinde işlem yapabilmek amacıyla kullanılır. SELECT INSERT UPDATE DELETE (devam ediyor...)
SQL ve İlişkisel Veritabanı SQL üç alt grupta incelenir; DCL (Data Control Language) İşlem izinleri ve yasakları gibi işlemleri yapmak için kullanılır. GRANT DENY REVOKE
Konu 1: SQL deyimlerine giriş
SQL Deyimlerine Giriş SQL deyimleri günlük kullanım diline yakın kelimelerden oluşan ve birlikte kullanıldığında veritabanı işlemlerini yerine getiren komutlardır. Bu komutlar, giriş kısmında belirttiğimiz gibi işlem alanlarına göre üçe ayrılırlar. Komutlar, kullanılan SQL arabirim programına göre, hazır menü seçenekleri üzerinden de çalıştırılabilir.
SQL Deyimlerine Giriş SQL Yardımcı Araçları SQL komutları yardımcı araçları kullanılan veritabanına göre değişebilir. Genel olarak her veri tabanının kendine özgü bir SQL çalıştırma arabirimi vardır. Bu arabirimler, ilgili veritabanının tüm özelliklerini kullanabilen komut ve komut gruplarını çalıştırabilecek yetenektedir. (...devam ediyor)
SQL Yardımcı Araçlarına Örnekler; SQL Deyimlerine Giriş SQL Yardımcı Araçlarına Örnekler; Access: tek başına bir veri tabanı da olan Access, ODBC sürücüleri yardımı ile diğer veritabanlarına bağlanarak kendi içinde SQL işlemlerini yapabilmektedir. QA: Query Analyzer Microsoft ailesine ait bir SQL kullanım aracıdır. SQL Server Ent. Manager: SQL Server üzerinde yapmak istenen her türlü işlemin yapılabildiği kapsamlı bir konfigürasyon aracıdır.
SQL Deyimlerine Giriş SQL deyimlerinin, SQL destekli veritabanları üzerinde yerine getirdiği işlemlere göz atacak olursak; Veritabanı yaratmak için CREATE DATABASE, Tablo oluşturmak için CREATE TABLE, Ekleme yapmak için INSERT, Güncelleme yapmak için UPDATE, Silme yapmak için DELETE, Veritabanından sorgulama yapmak için SELECT komutları sıkça kullanılır.
Konu 2: Veritabanının oluşturulması
Veritabanın Oluşturulması Veritabanı yaratmadan önce, saklanacak tüm veri yapısının planlanmış olması gerekir. Bu plan kapsamında; Hangi tip veriler, ne büyüklüklerde, hangi tablolarda olacak ? Bu tabloların ilişkileri hangi alanlar üzerinden kurulacak ? Bu alanlardaki verilerden hangileri tekil olacak ? Hangileri otomatik olarak artacak ? ... gibi bilgilerin hazır olması gerekir.
Veritabanın Oluşturulması Kullanılan veritabanı yönetim sistemine göre, yaratılacak veritabanının hangi kayıt ortamında duracağı, nasıl büyüyeceği, “transaction log” dosyasının nerede olacağı (veya olmayacağı) kararlarının verilmesi gerekir. Bu karar verildikten sonra veritabanı yaratmak için veritabanına bir isim vermek gerekir. Veritabanı isimlerinde boşluk karakteri kullanılamaz. Kullanım amacına yönelik açıklayıcı kelimelerden oluşan bir isim verilmesi uygundur. Bu ismin uzun olmaması tercih nedenidir.
Veritabanın Oluşturulması CREATE DATABASE veritabani_ismi [ ON [ PRIMARY ] [ <filespec> [ ,...n ] [ , <filegroup> [ ,...n ] ] [ LOG ON { <filespec> [ ,...n ] } ] ] [ COLLATE collation_name ] [ WITH <external_access_option> ] [;]
Veritabanın Oluşturulması CREATE DATABASE Satis ON ( NAME = Satis_dat, FILENAME = ''+ @veri_dizini + 'satisdat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = Satis_log, FILENAME = ''+ @veri_dizini + 'satislog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )
Konu 3: Tabloların yaratılması
Tabloların Yaratılması Veritabanı üzerinde tablo yaratmak için CREATE TABLE deyimi kullanılır. Yapısı: CREATE tablo_adi Örnek: CREATE TABLE Musteri ( mus_id char(4) NOT NULL, mus_ad varchar(40) NULL, ili varchar(20) NULL, ulke char(2) NULL, adres varchar(30) NULL, pk int NULL )
Tabloların Yaratılması Tablolarda, aşağıdaki veri tipleri kullanılabilir. Veri tipleri, veritabanı yönetim sistemine göre farklılıklar gösterir.
Konu 4: İndekslerin yaratılması
İndekslerin Yaratılması Veritabanı üzerinde bir indeks yaratmak için CREATE INDEX deyimi kullanılır. Yapısı: CREATE INDEX indeks_adi ON tablo_adi (kolon_adi) Örnek: CREATE INDEX indeks_mus_id ON Musteri (mus_id) Veritabanı üzerinde tekil bir indeks yaratmak için CREATE UNIQUE INDEX deyimi kullanılır. Yapısı: CREATE UNIQUE INDEX indeks_adi ON tablo_adi (kolon_adi) CREATE UNIQUE INDEX indeks_mus_id ON Musteri (mus_id)
Konu 5: Verilerin tablolara işlenmesi
Verilerin Tablolara İşlenmesi Tablolara veri girişi için INSERT deyimi kullanılır. Yapısı: INSERT INTO tablo_adi VALUES (deger1, deger2,....) INSERT INTO tablo_adi (alan1,...) VALUES (deger1,..) Örnek: INSERT INTO Musteri VALUES (1,'Ahmet Korkmaz', 'Istanbul', 'TR', 'Kadıköy', 34718)
Verilerin Tablolara İşlenmesi Tablolardaki verileri güncellemek için UPDATE deyimi kullanılır. Yapısı: UPDATE tablo_adi SET alan_adi=deger,... WHERE kolon_adi = kriter_degeri Örnek: UPDATE Musteri SET adres = 'Bostancı' WHERE mus_id = 1
Verilerin Tablolara İşlenmesi Tablolardaki verileri silmek için DELETE deyimi kullanılır. Yapısı: DELETE FROM tablo_adi WHERE kolon_adi = kriter_degeri Örnek: DELETE FROM Musteri WHERE mus_id = 1
Konu 6: Verilerin sorgulanması
Verilerin Sorgulanması Tablolardaki verileri sorgulamak için SELECT deyimi kullanılır. Yapısı: SELECT [alan_isimleri] FROM tablo_adi WHERE kosul Örnekler: SELECT * FROM Musteri WHERE ulke = 'TR' SELECT mus_id,ulke FROM Musteri WHERE ulke = 'TR' SELECT DISTINCT pk FROM Musteri WHERE ulke = 'TR' SELECT * FROM Musteri WHERE ili LIKE '%IS%' SELECT * FROM Musteri WHERE id IN (1,2,...) SELECT * FROM Musteri ORDER BY ulke,isim SELECT COUNT(*) FROM musteri WHERE ulke = 'TR'
Verilerin Sorgulanması Veritabanı sorgulamaları sırasında, WHERE koşul cümleciği kullanılır. Bu cümleden sonra, istenen kriterler aşağıdaki operatörler kullanılarak alanlara uygulanır. Birden fazla kriterin uygulanması gerektiğinde kriterler arasına AND (ve), OR (veya) bağlaçları eklenir. AND durumunda, AND bağlacının her iki tarafındaki kriterlerin beklenen sonucu vermesi gerekir. OR bağlacı için ise kriterlerden bir tanesinin beklenen sonucu vermesi yeterlidir. Birden fazla AND veya OR kullanılacak ise kriterlerin parantezler içerisine alınması gerekir.
Konu 7: Gruplama ve özetleme
Gruplama ve Özetleme Tablolardaki verilerin özetlenmesi ve belirli bir alana göre gruplanması için GROUP BY deyimi kullanılır. GROUP BY deyimi genellikle SUM, COUNT, AVG,... gibi SQL fonksiyonlarının sonuçlarını almak için kullanılır. Yapısı: SELECT alan1,SUM(alan2) FROM tablo_adi WHERE kosul GROUP BY kolon_adi Örnekler: SELECT mus_id, SUM(borc) AS musteri_borcu FROM Musteri WHERE ulke = 'TR' GROUP BY mus_id SELECT ulke, COUNT(mus_id) AS musteri_sayisi FROM Musteri GROUP BY ulke HAVING musteri_sayisi > 5 SELECT ulke,AVG(yas) AS ortalama_yas FROM Musteri GROUP BY ulke
Konu 8: Birden fazla tablo ile çalışma (join)
Birden Fazla Tablo İle Çalışma Zaman zaman, birden fazla tablonun aynı anda kullanılmasını gerektiren sorgular çalıştırmak istenebilir. Örneğin müşteri bilgileri ile müşterinin cari hareketleri tablolarını bir arada raporlamak gerekebilir. Bu ve benzeri durumlarda, ihtiyacımız olan verileri birden fazla tablo üzerinden belirli anahtar alanlar kullanılarak toplamamız ve belli bir hiyerarşide göstermemiz gerekebilir. İşte bu durumlarda, JOIN işlemi yapmamız gerekir. JOIN, kelime anlamı ile de birleştirmek demektir.
Birden Fazla Tablo İle Çalışma SELECT A.mus_id,A.mus_isim,B.fis_no,B.aciklama FROM musteri AS A INNER JOIN musteri_hareket AS B ON B.mus_id = A.mus_id
Birden Fazla Tablo İle Çalışma INNER JOIN: Her iki tabloda da şarta uygun olan kayıtlar gelir LEFT JOIN: Sol tablodaki tüm kayıtlar (sağ tabloda karşılıkları olmasa dahi), sağ tablodan ise koşulu sağlayan kayıtlar gelir RIGHT JOIN: Sağ tablodaki tüm kayıtlar (sol tabloda karşılıkları olmasa dahi), sol tablodan ise koşula uygun kayıtlar gelir Yukarıda sayılanların dışında, veritabanı yönetim sistemine bağlı olarak çok daha farklı JOIN koşulları bulunabilir.
Konu 9: Alt sorgular ile çalışma (sub query)
Alt Sorgular İle Çalışma Sorgulama sonuçlarının, bazı durumlarda başka tablolarla bağlantılı çalışması gerekebilir. Bu durumda sorgunun bir tablo mantığı ile işlemesi ve sorguya dahil edilmesi beklenir. Bu tip sorgular, alışılagelmiş yapının dışında değildir. Tek farkları, parantez içine alınarak bir rumuz (alias) verilerek sorgu içerisinde kullanılır.
Alt Sorgular İle Çalışma Tablo şeklinde kullanacağımız sorgumuz; SELECT * FROM Musteri WHERE ulke = 'TR' Bu sorgumuz tek başına çalıştığında ülke kodu TR olan tüm müşterilerimizi listeleyecektir. Biz bu sorgu içerisinden mus_id ve adres alanlarını listeleyeceğimiz ve adresi Istanbul olan başka bir sorgu oluşturacağız. Bu sorgu şu şekilde olacaktır; SELECT A.mus_id, A.adres FROM (SELECT * FROM Musteri WHERE ulke = 'TR') AS A WHERE A.adres LIKE '%Istanbul%'
Alt Sorgular İle Çalışma Alt sorgular, veri güncelleme amacıyla da kullanılabilir; UPDATE mus_promosyon SET promosyon_kodu = '948' WHERE (SELECT * FROM Musteri WHERE ulke = 'EN') Subquery ile insert işlemi Eklenecek olan kayıtlar SELECT mus_id,... diger alanlar FROM musteri WHERE ulke = 'TR' eklem sorgusu INSERT INTO musteri (mus_id,... diğer alanlar) SELECT mus_id,... diger alanlar) FROM musteri WHERE ulke = 'TR'
Konu 10: Örnek Uygulama
Teşekkürler