SQL Hasta-Personel Veri Tabanı Uygulaması #2

Bu yazıda sizlere bir önceki yazıda oluşturduğumuz veri tabanı üzerinde çeşitli örnek uygulamalardan bahsedeceğim.

Örnek 1: Veri tabanında yer alan tablolar arasındaki ilişkileri kurunuz.

Örnek 2: Personel tablosunda mesleği danışman olan personellerin maaşlarını 3500 TL olarak güncelleyelim.

USE Hasta_Personel_Veri_Tabani
UPDATE PersonelTablosu SET Maas = Maas + 300 WHERE MESLEK = 5
SELECT * FROM PersonelTablosu

Örnek 3: Personel tablosunda maaşı 4000-9000 TL arasında olan ve cinsiyeti erkek olan personelleri listeleyelim.

USE Hasta_Personel_Veri_Tabani
SELECT * FROM PersonelTablosu WHERE Maas BETWEEN 4000 AND 9000 AND Cinsiyet = 'E'

Örnek 4: Hasta tablosunda isminde E harfi geçen ama H harfi geçmeyen ve ziyarete uygun olan hastalarını listeleyelim.

USE Hasta_Personel_Veri_Tabani
SELECT * FROM HastaTablosu WHERE Ad_Soyad LIKE '%E%' AND Ad_Soyad NOT LIKE '%H%' AND ZiyaretDurumu = 1

Örnek 5: Personel tablosundaki toplam maaşı ve ortalama yaşı listeleyelim.

INPUT:
USE Hasta_Personel_Veri_Tabani
SELECT AVG(Yas) FROM PersonelTablosu

OUTPUT:
       36

INPUT:
USE Hasta_Personel_Veri_Tabani
SELECT SUM(Maas) FROM PersonelTablosu

OUTPUT:
       140800.00

Örnek 6: Hasta tablosunda  vefat eden hastaların ortalama yaşını listeleyelim.

INPUT:
USE Hasta_Personel_Veri_Tabani
SELECT AVG(Yas) FROM HastaTablosu WHERE SaglıkDurumu = 4

OUTPUT:
        63

Örnek 7: Hasta tablosunda sağlık durumu kritik olan hastalarımızın sayısını listeleyelim.

INPUT:
USE Hasta_Personel_Veri_Tabani
SELECT COUNT(*) FROM HastaTablosu WHERE SaglıkDurumu = 3


OUTPUT:
        7

Örnek 8: Personel tablosundaki en yaşlı ve en genç personelleri listeleyelim.

USE Hasta_Personel_Veri_Tabani
SELECT * FROM PersonelTablosu WHERE Yas = (SELECT MIN(Yas) FROM PersonelTablosu )

USE Hasta_Personel_Veri_Tabani
SELECT * FROM PersonelTablosu WHERE Yas = (SELECT MAX(Yas) FROM PersonelTablosu )

Örnek 9: Alt sorguları kullanarak personel tablosunda mesleği göz doktoru olan personelleri listeleyiniz.

INPUT:
USE Hasta_Personel_Veri_Tabani
SELECT AdSoyad,MeslekAdi FROM PersonelTablosu 
INNER JOIN MeslekTablosu ON PersonelTablosu.Meslek = MeslekTablosu.ID
WHERE MeslekAdi = (SELECT MeslekAdi FROM MeslekTablosu WHERE ID = 13)



OUTPUT:
       Atahan Adanır Göz Doktoru

Örnek 10: Personel tablosunda meslek adları yazacak şekilde Güvenlik personellerinin isimlerini ve mesleklerini listeleyelim.

INPUT:
USE Hasta_Personel_Veri_Tabani
SELECT AdSoyad,MeslekAdi FROM PersonelTablosu 
INNER JOIN MeslekTablosu ON PersonelTablosu.Meslek = MeslekTablosu.ID
WHERE MeslekAdi = 'Güvenlik Görevlisi'

Örnek 11: Personel tablosundaki tüm sütunlar için birleştirmeleri gerçekleştirelim.

CREATE VIEW View_1
AS
SELECT AdSoyad,Maas,Yas,Cinsiyet,SehirAdi,OgrenimTuru,MeslekAdi,HastalikAdi,MedeniHal,CocukSayisi,Calisma_Durumu,KademeAdi From PersonelTablosu 
INNER JOIN MeslekTablosu ON PersonelTablosu.Meslek = MeslekTablosu.ID 
INNER JOIN SehirTablosu ON PersonelTablosu.Sehir = SehirTablosu.ID
INNER JOIN OgrenimTablosu ON PersonelTablosu.Ögrenim = OgrenimTablosu.ID 
INNER JOIN HastalikTablosu ON PersonelTablosu.HastalikTürü = HastalikTablosu.ID  
INNER JOIN MedeniDurumTablosu ON PersonelTablosu.MedeniDurum = MedeniDurumTablosu.ID
INNER JOIN CalismaTablosu ON PersonelTablosu.CalismaDurumu = CalismaTablosu.ID  
INNER JOIN PersonelKademeTablosu ON PersonelTablosu.Kademe = PersonelKademeTablosu.ID 
SELECT * FROM View_1

Örnek 12: Hasta tablosundaki ad, hastalık, medeni durum,İlgilenenPersonel, SaglıkDurumu, ZiyaretDurumu ve HastanınBulunduğuKonum için birleştirmeleri gerçekleştirelim.

CREATE VIEW View_2
AS
SELECT Ad_Soyad,HastalikAdi,MedeniHal,AdSoyad,Saglik_Durumu,Ziyaret_Durumu,Konum From HastaTablosu 
INNER JOIN HastalikTablosu ON HastaTablosu.Hastalik = HastalikTablosu.ID  
INNER JOIN MedeniDurumTablosu ON HastaTablosu.MedeniDurum = MedeniDurumTablosu.ID
INNER JOIN PersonelTablosu ON HastaTablosu.İlgilenenPersonel = PersonelTablosu.ID  
INNER JOIN SaglikTablosu ON HastaTablosu.SaglıkDurumu = SaglikTablosu.ID  
INNER JOIN ZiyaretTablosu ON HastaTablosu.ZiyaretDurumu = ZiyaretTablosu.ID  
INNER JOIN HastaKonumTablosu ON HastaTablosu.HastanınBulunduğuKonum = HastaKonumTablosu.ID  

Örnek 13: Personel tablosundan eğitimi Lisans mezunu olan ve  hali hazırda çalışıyor olan personellerin adlarını, yaşlarını, cinsiyetlerini, maaşlarını ve mesleklerini listeleyelim.

USE Hasta_Personel_Veri_Tabani
SELECT AdSoyad,Yas,Cinsiyet,Maas,MeslekAdi FROM PersonelTablosu 
INNER JOIN MeslekTablosu ON PersonelTablosu.Meslek = MeslekTablosu.ID
WHERE Ögrenim = 5 AND CalismaDurumu = 1

Örnek 14: Hasta tablosunda yer alan hastalarımızı sağlık durumlarına göre gruplayalım. Sağlık durumlarını z’den a’ya doğru sıralayalım

USE Hasta_Personel_Veri_Tabani
SELECT Saglik_Durumu,COUNT(*) AS 'Sayısı' FROM HastaTablosu 
INNER JOIN SaglikTablosu ON HastaTablosu.SaglıkDurumu = SaglikTablosu.ID
GROUP BY Saglik_Durumu ORDER BY Saglik_Durumu DESC

Örnek 15: Personel tablosundaki personelleri kademelerine göre gruplayıp, üst kademe olan personelleri listeleyelim.

USE Hasta_Personel_Veri_Tabani
SELECT KademeAdi,COUNT(*) AS 'Sayısı' FROM PersonelTablosu 
INNER JOIN PersonelKademeTablosu ON PersonelTablosu.Kademe = PersonelKademeTablosu.ID
GROUP BY KademeAdi HAVING KademeAdi= 'Üst'


Örnek 16: Personel tablosunda mesleği göz doktoru olan personellerin maaşına 500 TL zam yapalım.

USE Hasta_Personel_Veri_Tabani
UPDATE PersonelTablosu SET Maas = Maas + Maas*0.30 WHERE Meslek = 19 
SELECT * FROM PersonelTablosu Where Meslek = 19


Örnek 17: Başhekim’in maaşını maksimum maaş tutarının 1000 TL fazlasına göre güncelleyelim.

USE Hasta_Personel_Veri_Tabani
UPDATE PersonelTablosu SET Maas = (SELECT Max(Maas) FROM PersonelTablosu) + 1000 WHERE Meslek = 16
SELECT * FROM PersonelTablosu Where Meslek = 16



Örnek 18: Personel tablomuzdaki tüm isimleri tersten yazan sorguyu yazalım.

USE Hasta_Personel_Veri_Tabani
SELECT AdSoyad,REVERSE(AdSoyad) AS 'Tersten Yazımı' FROM PersonelTablosu




Örnek 19: Personel tablomuzdaki personellerimizin maaşlarının standart sapmalarını hesaplayalım.

INPUT:
DECLARE @sayi1 Decimal(15,2), @sayi2 Decimal(15,2), @standartSapma Decimal(15,2)
SET @sayi1 = (SELECT AVG(Maas) from PersonelTablosu)
SET @sayi2 = (SELECT SUM(POWER((Maas-@sayi1),2)) from PersonelTablosu)
SET @standartSapma = (SELECT  SQRT(@sayi2/20))
PRINT @standartSapma

OUTPUT:
       3863.48


Örnek 20: Hasta tablomuzdaki 45 yaşından küçük olan hasta kadınların sağlık durumlarını listeleyen sorguyu yazalım.

USE Hasta_Personel_Veri_Tabani
SELECT Ad_Soyad,Yas,Cinsiyet,Saglik_Durumu FROM HastaTablosu
INNER JOIN SaglikTablosu ON HastaTablosu.SaglıkDurumu = SaglikTablosu.ID
WHERE Yas < 45 AND Cinsiyet = 'K' 



Örnek 21: Durumu kritik olan hastalarımızın adlarını, yaşlarını, hastalıklarını ve ziyaret durumlarını listeleyen sorgumuzu yazalım.

USE Hasta_Personel_Veri_Tabani
SELECT Ad_Soyad,Yas,Hastalik,Saglik_Durumu,Ziyaret_Durumu FROM HastaTablosu
INNER JOIN SaglikTablosu ON HastaTablosu.SaglıkDurumu = SaglikTablosu.ID
INNER JOIN ZiyaretTablosu ON HastaTablosu.ZiyaretDurumu = ZiyaretTablosu.ID
WHERE Saglik_Durumu = 'Kritik'



Örnek 22: Her bir personelimizin hastalığını ve yaşını listeleyelim.

USE Hasta_Personel_Veri_Tabani
SELECT AdSoyad,Yas,HastalikAdi FROM PersonelTablosu
INNER JOIN HastalikTablosu ON PersonelTablosu.HastalikTürü = HastalikTablosu.ID




Örnek 23: Her bir kademe için gereken minimum eğitim seviyesini listeyen sorguyu yazalım.

USE Hasta_Personel_Veri_Tabani
SELECT KademeAdi,OgrenimTuru AS 'Gereken Minimum Eğitim Seviyesi' FROM PersonelKademeTablosu
INNER JOIN OgrenimTablosu ON PersonelKademeTablosu.GerekenMinEgitim = OgrenimTablosu.ID





Örnek 24: Hastalarımızın ve personellerimizin ortalama yaşlarının farkını listeleyen sorguyu yazalım.

INPUT:
USE Hasta_Personel_Veri_Tabani
DECLARE @sayi1 DECIMAL(7,2), @sayi2 DECIMAL(7,2), @yasFarki DECIMAL(7,2)
SET @sayi1 = (SELECT AVG(Yas) FROM HastaTablosu)
SET @sayi2 = (SELECT AVG(Yas) FROM PersonelTablosu)
SET @yasFarki = @sayi1 - @sayi2 
PRINT @yasFarki


OUTPUT:
       15.00



Örnek 25: Cinsiyeti erkek olan hastaların sayısını listeleyen sorguyu yazalım.

INPUT:
USE Hasta_Personel_Veri_Tabani
SELECT COUNT(*) FROM HastaTablosu WHERE Cinsiyet = 'E'


OUTPUT:
        11



Bir önceki yazıya ulaşmak için buraya tıklayınız.

SQL19K777RYM81TP66
SQL Hasta-Personel Veri Tabanı Uygulaması #1

Bu bölümde örnek bir veri tabanı oluşturulmasından bahsedeceğim. Oluşturacağımız veri tabanı Hasta-Personel bilgilerini saklayan bir veri tabanı olacaktır. Veri tabanımızın yapısını aşağıdaki şema ile gösterebiliriz.

Veri Tabanı Diagramı

Bu tablolara eklenecek olan veriler aşağıdaki tablolarda listelenmiştir.

Veri Tabanındaki Tablolara Eklenecek Sütunlar
Ziyaret Durumu
Ziyarete Uygun
Kısıtlı Ziyaret
Ziyarete Kapalı
Sağlık Durumu
Normal
Rahatsız
Kritik
Vefat
Medeni Hal
Evli
Bekar
Dul
Boşanmış
Çalışma Durumu
Çalışıyor
Yıllık İzinde
Raporlu
İstifa Etti
Emekli Oldu
Hastanın Bulunduğu Yer
Hasta Odası
Ameliyathane
Morg
Yoğun Bakım
Öğrenim Türü
İlkokul Mezunu
Ortaokul Mezunu
Lise Mezunu
Önlisans Mezunu
Lisans Mezunu
Yüksek Lisans Mezunu
Doktora Mezunu
Hastalıklar Tablosu
Kalp-Damar Hastası
Böbrek Yetmezliği
Karaciğer Yetmezliği
Sinirsel Bozukluk
Alzheimer
Göz Bozukluğu
İşitme Sorunu
Şeker Hastalığı
Kolesterol Hastalığı
Kemik Erimesi
Solunum Yetmezliği
Bağırsak Kanseri
Yaralanma
Kırık-Çıkık
Hastalığı Yok
Prostat Kanseri
Şehir
İstanbul
Ankara
İzmir
Bursa
Kocaeli
Nevşehir
Antalya
Adana
Muğla
Diyarbakır
Mardin
Erzurum
Balıkesir
Trabzon
Niğde
Ordu
Osmaniye
Şanlıurfa
Sivas
Samsun
Meslekler
KBB Doktor
Hemşire
Hasta Bakıcı
Temizlik Personeli
Danışman
Güvenlik Görevlisi
Genel Cerrah
Anestezi Uzmanı
Morg Görevlisi
Adli Tıpçı
İç Hastalıkları Uzmanı
Beyin Cerrahı
Göz Doktoru
Üroloji Doktoru
Nefroloji Doktoru
BaşHekim
Ortopedi Doktoru
Kadın Hastalıkları Doktoru
Personel Kademesi
Alt Kademe
Orta Kademe
Üst Kademe

Böylece oluşturacağımız veri tabanı yapısını ve verileri görmüş olduk. Şimdi bu veri tabanını oluşturalım. Bunu sorgu komutları ile yapalım.

Veri Tabanı Ve Tabloların Kodlar İle Oluşturulması

CREATE DATABASE Hasta_Personel_Veri_Tabani

Sorguyu çalıştırdığımızda veri tabanımız oluşturulmuş olur. Veri tabanımızda oluşturmamız gereken tabloları isterseniz Object Explorer (Nesne gezgini) kısmından isterseniz sorgu komutları ile oluşturabilirsiniz. Sorgu komutları için aşağıdaki gibi komutlar kullanılabilir:

CREATE TABLE SehirTablosu(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  SehirAdı   varchar(30)
)
CREATE TABLE MeslekTablosu(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  MeslekAdi   varchar(30)
)
CREATE TABLE HastalıkTablosu(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  HastalikAdi   varchar(30)
)

Ziyaret durumu, sağlık durumu, medeni hal ve çalışma durumu gibi tabloların oluşturulma komutları yukarıdaki örnekler ile aynı olduğundan bunlar ve benzeri tabloların oluşturulma komutlarını buraya eklemiyorum. Bunlardan farklı olarak personel kademesi, çalışma durumu, hasta tablosu ve personel tablolarını oluşturalım.

CREATE TABLE CalismaTablosu(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  SaglikDurumu INT,
  CalismaDurumu INT,
)
CREATE TABLE PersonelKademeTablosu(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  GerekenMinEgitim INT,
  Kademe varchar(10),
)

CREATE TABLE PersonelTablosu(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  AdSoyad varchar(40),
  Yas TINYINT,
  Maas Decimal(10,2)
  Cinsiyet INT,
  Sehir INT,
  Ögrenim INT,
  Meslek INT,
  HastalikTürü INT,
  MedeniDurum INT,
  CocukSayisi TİNYİNT,
  CalismaDurumu INT
)
CREATE TABLE HastaTablosu(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  Ad_Soyad varchar(40),
  Yas TINYINT,
  Cinsiyet varchar(1),
  Hastalik INT,
  MedeniDurum INT,
  İlgilenenPersonel INT,
  SaglıkDurumu INT,
  ZiyaretDurumu INT,
  HastanınBulunduğuKonum INT,
  BosSutun char(5)
)

Örnekler

Bu komutları yazarken dikkat ettiyseniz bazı yerleri eksik, yanlış ya da alakasız değerler yazdık. Bunun sebebi DDL komutlarını bu örnek veri tabanı üzerinde basit de olsa görebilmektir.

Örnek 1:  Hasta tablosundan BosSutun adlı sütunu kaldırınız.

ALTER TABLE HastaTablosu DROP COLUMN BosSutun

Bu sorgunun ardından hasta tablomuzda BosSutun adlı bir sütun olmayacaktır. Bunu Object Explorer (Nesne gezgini) sekmesinden tabloyu görüntüleyerek görebilirsiniz.

Örnek 2:  Personel tablosuna Kademe adlı bir sütun ekleyiniz.

ALTER TABLE PersonelTablosu ADD Kademe INT

Örnek 3:  Personel tablosundaki cinsiyet sütununun veri türünü değiştiriniz.

ALTER TABLE PersonelTablosu ALTER COLUMN Cinsiyet Varchar(1)

Bu komutların ardından veri tabanında yer alan tablolar artık istediğimiz şekilde olacaktır. Bu sebeple tablolarımıza Object Explorer (Nesne gezgini) sekmesini kullanarak veri girişlerini yapalım. Veri girişlerinin ardından hasta tablosunu ve personel tablosunu listeleyelim.

Hasta Tablosu
Personel Tablosu

Örnek 4:  Personel tablosuna (Onur Taylan, 46, 5000, E, 5, 5, 9, 15, 1, 3, 1, 3) ve (Mehmet Emin, 38, 3200, E, 4, 3, 5, 15, 1, 3, 1, 2) kişileri ekleyelim.

INSERT INTO PersonelTablosu VALUES (‘Onur Taylan’, 46, 5000, ‘E’, 5, 5, 9, 15, 1, 3, 1, 3)

INSERT INTO PersonelTablosu VALUES (‘Mehmet Emin’, 38, 3200, ‘E’, 4, 3, 5, 15, 1, 3, 1, 2)

Örnek 5: Personel tablosundan Mehmet Emin isimli kişiyi çıkaralım.

DELETE FROM PersonelTablosu WHERE AdSoyad =’Mehmet Emin’

Buraya kadar yaptıklarımızla veri tabanını oluşturduk. Yukarıdaki veri tabanı şemasına baktığımızda tablolar arasında ilişkiler olduğu görülüyor. Bir sonraki yazıda veri tabanımız üzerindeki tablolar arası ilişkileri oluşturacağız, DML komutlarını ve Aggregate fonksiyonlarını kullanacağız. Bir sonraki yazıya ulaşmak için buraya tıklayınız.

SQL121378HK02225Y7
SQL Server İle Veri Tabanı İşlemleri #2

Bu yazıda sizlere SQL’de ilişkili tablolardan, SUM(), AVG(), MIN(), MAX() gibi Aggregate fonksiyonlarından, sütunların takma ad ile çağrılmasından, Between ve Distinct gibi komutlardan bahsedeceğim.

İlişkili Tablolar

İlişkili tabloları daha iyi anlayabilmek için bir personel tablomuzun olduğunu varsayalım. Bu tabloda personellerimizin adı, soyadı, yaşı, maaşı, departmanı, mesleği ve cinsiyeti gibi bilgiler olsun.

USE PersonelBilgileri
CREATE TABLE PersonelTablosu(
   ID INT IDENTITY(1,1) PRIMARY KEY,
   Ad Varchar(30),
   Soyad Varchar(30),
   Cinsiyet Char(1),
   Yas TINYINT,
   Maas DECIMAL(7,2),
   Departman INT,
   Meslek INT
)

Kod Bloğunu Çalıştırdığımızda Oluşan Personel Tablosu

Eğer bu şirketin çalışan sayısı çok fazla ise (örneğin 1000 ya da daha fazla) bu personellerin departmanları ve meslek bilgileri bellekte fazla yer tutmaya başlar. Bu sebeple her personelin departman ve meslek bilgisini yazmak yerine departman bilgilerini ve meslek bilgilerini tutan iki tablo oluşturabiliriz.

USE PersonelBilgileri
CREATE TABLE Departman(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  DepartmanAdi Varchar(30)
)
CREATE TABLE Meslek(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  MeslekDepartmanı INT,
  MeslekAdi Varchar(30)
)

Kod Bloğunu Çalıştırdığımızda Oluşan Departman Tablosu
Kod Bloğunu Çalıştırdığımızda Oluşan Meslek Tablosu

Böylece personelin departmanının adını ve meslek adını yazmak yerine o departman ve meslek bilgisinin ilgili tablolardaki ID’lerini yazabiliriz. Örneğin personelin mesleği Bilgisayar Mühendisliği ise bu bilgiyi yazmak yerine meslekler tablosundan  Bilgisayar mühendisliğinin ID numarasını yazabiliriz. Bu şekilde yaklaşık olarak 19 karakter fazladan bellekte bellekte yer tutmamış olacağız. Yaptığımız bu işlemle meslekler ve departmanlar tablosu ile personel tablosu ilişkili hale gelmiş olur. 3 tip ilişki türü vardır. Bunlar bire-bir ilişki, bire-çok ilişki ve çoka-çok ilişkidir. Bunları bu yazıda detaylı olarak anlatmayacağım. Bizim kullanacağımız genelde bire-çok ilişki türü olacaktır.

Bu tabloların ilişki içerisinde olduğunu SQL’in anlaması için bu ilişkiyi SQL üzerinde tanımlamamız gerekir. Bunun için Object Explorer penceresindeki Database Diagrams klasörüne sağ tıklayıp New Database Diagram’ı seçmemiz gerekir. Karşımıza gelen pencereden hangi tablolar ilişki içerisinde ise seçilmesi gerekir. Burada önemli bir husus daha vardır. Tablolarımızdaki ID sutununu Birincil Anahtar (Primary Key) olarak tanımlamış olmamız gerekir. Primary Key satırların birbirleri ile karışmaması ve ayırt edilebilmesi için kullanılan benzersiz alanlardır. Genellikle ID alanları için kullanılır. Bir sütunu birincil anahtar olarak tanımlamayı tablo yaratırken komut ile belirleyebileceğimiz gibi sonradan da belirleyebiliriz. Örnek olarak:

CREATE TABLE DenemeTablosu(
      ID INT IDENTITY(1,1) PRİMARY KEY,
       ……
)

verilebilir. Bu örnekte ID alanının birincil anahtar olduğunu ve 1’den başlayıp her bir satır için 1’er 1’er artması gerektiğini söyledik.

Eğer tablo üzerinden düzenleme yapabilme iznimiz var ise tablomuzdaki ID sütununa sağ tıklayıp “set primary key” dersek birincil anahtar olarak belirlemiş oluruz.

Bunun dışında Birincil anahtara çok benzeyen benzersiz anahtar (Unique Key) vardır. Birincil anahtardan farklı boş değer(null) alabiliyor olmasıdır.

Birincil anahtar olmayan ve başka bir tablo ile ilişkilendirilebilen alanlara ise Yabancıl Anahtar denir. Örneğin Personel tablosundaki departman ve meslek sütunları yabancıl anahtardır.

İlişkilendirmek istediğimiz tabloları seçtikten sonra hangi tabloların birincil anahtarları hangi tabloların yabancıl sütunu ile ilişkilendirilecekse, birincil anahtar sürüklenip yabancıl anahtarın üzerine bırakılmalıdır.

Tablolarımız Arasındaki İlişkilerin Kurulması

Böylece artık yabancıl anahtardaki değer birincil anahtarın olduğu tablodaki bir veriyi temsil eder. Örneğin personel tablosundaki Adil Kaşıkçı adlı personelin mesleğine 6 yazıldığından, meslekler tablosunda ID numarası 6 olan meslek bu personelin mesleği olur. Meslekler tablosunda ID numarası 6 olan meslek şef olduğundan Adil Kaşıkçı adlı personelin mesleği şef olmuş olur. SQL bunu anlar.

Meslek Tablosu

Departman Tablosu

Personel Tablosu (Tabloda yer alan kişiler hayalidir.)

Ancak biz listeleme yaparken personel tablosunu listelediğimizde bu personellerin departman ve meslek sütunları hala sayı olarak görünür. Eğer bu sütunların meslek ve departman adları ile görünmesini istersek birleştirmeleri kullanmamız gerekir. Bu konudan sonraki yazılarda bahsedeceğim. Şu ana kadar en az iki tablonun nasıl ilişkilendirileceğini gördük. Eğer ilişkide düzenleme ya da değişiklik yapacaksak Database Diagrams klasörünün altındaki ilişki diagramımıza sağ tıklayıp “modify” dememiz yeterli olacaktır. Açılan diagramda istediğiniz düzenlemeyi yapabilirsiniz.

Aggregate Fonksiyonları

Aggregate fonksiyonları bir tabloda kullanılabilecek SUM(), AVG(), COUNT(), MIN() ve MAX() gibi fonksiyonlardır. Bu fonksiyonları kullanarak örneğinm personel tablosunda personel sayısı, ortalama maaş, ortalama yaş ve en genç personel gibi değerler bulunabilir. Aggregate fonksiyonları Select komutu ile birlikte kullanılır. Bu komutlar aşağıdaki gibi özetlenebilir:

SUM()

İstenen sütunlardaki tüm veriyi toplamak için kullanılır. Toplaması yapılan sütunun sayısal değerlerden oluşması gerekir. Örnek kullanımı aşağıdaki gibidir:

SELECT SUM(sütun adı) FROM (tablo adi)

Eğer ihtiyaç duyulursa bu komuta şartta bağlanabilir. Örneğin yaşı 25’ten küçük olanların maaşı nedir? Dersek,

INPUT:
SELECT SUM(Maas) FROM PersonelTablosu WHERE Yas<25

OUTPUT:
5300.00 

sorgusunu kullanılabiliriz.

AVG()

İstenilen sütunlardaki ortalamayı hesaplamak için kullanılan komuttur. Örneğin personel tablosunda ortalama yaşı bulmak istersek,

INPUT:
SELECT AVG(Yas) FROM PersonelTablosu

OUTPUT:
 29

sorgusunu kullanılabiliriz.

COUNT()

İstenen sütunlardaki verileri saymak için kullanılan komuttur. Örneğin personel tablosunda kaç tane veri olduğunu öğrenmek istiyorsak,

INPUT:
SELECT COUNT(*) FROM PersonelTablosu

OUTPUT:
  10

sorgusunu kullanabiliriz. Bir başka örnek olarak personel tablosunda maaşı 3000 TL’den büyük olan personellerin sayısını öğrenmek istersek,

INPUT:
SELECT COUNT(*) FROM PersonelTablosu WHERE Maas>3000

OUTPUT:
  8

sorgusunu kullanabiliriz.

MIN()-MAX()

İlgili sütuna ait en küçük ve en büyük değerleri listelemek için kullanılan komutlardır. Örneğin personel tablosundaki en genç ve en yaşlı personellerin yaşlarını listelemek istersek,

INPUT:
SELECT MIN(Yas) FROM PersonelTablosu

OUTPUT:
  22
INPUT:
SELECT MAX(Yas) FROM PersonelTablosu

OUTPUT:
  36

sorgularını kullanabiliriz.

Bir başka örnek olarak şirketimizde  en az maaş alan kişinin ne kadar maaş aldığını listelemek istersek,

INPUT:
SELECT MIN(Maas) FROM PersonelTablosu

OUTPUT:
  2500.00

sorgusunu kullanabiliriz.

Böylece Aggregate fonksiyonlarından bahsetmiş olduk. Şimdi ise listeleme yaparken listelediğimiz herhangi bir sütunu takma ad ile nasıl listeleyebileceğimizden bahsedelim.

ALIAS İFADESİ

Yukarıdaki örneklerde ortalama yaşı listelemek için bir sorgu komutu kullandık. Bu sorgu çalıştıktan sonra sonuç bize görünür ancak sütun adı “No Column Name” olarak görünür.

Eğer burada listelemek istediğimiz sonuç bir sütun adı ile görünsün istersek Alias ifadesini kullanmamız gerekir. Bu ifade sorguda AS olarak yazılır. Bahsettiğim örneği tekrar yazmak istersek,

INPUT:
SELECT AVG(Yas) AS “Ortalama Yaş” FROM PersonelTablosu

sorgusunu yazabiliriz.

NULL DEĞERLER

SQL’de eğer bir satırın herhangi bir sütununa değer girilmemiş ise o sütun NULL olarak görünür. Listemele yaparken NULL değeri bulunan verileri listelemek mümkündür.

DISTINCT KOMUTU

Bir tablodaki herhangi bir sütunda bulunan benzersiz verileri listelemek için kullanılan komuttur. Örneğin personel tablosunda isimleri benzersiz olanları listeleyelim.

INPUT:
SELECT DISTINCT(Ad) FROM PersonelTablosu

OUTPUT:
  Adil
  Ahmet
  Ayşe
  Betül
  Buse
  Didem
  Ferit
  Gizem
  Mehmet
  Ömer Faruk
BETWEEN OPERATÖRÜ

Bir tablodaki herhangi bir sütun için istediğimiz alt ve üst limitler arasındaki değere sahip verileri listelemek için kullanılan komuttur. Örneğin Personel tablosundaki yaş aralığı 30-35 ve maaş aralığı 2800-4000 TL olan verileri listeleyelim.

INPUT:
SELECT * FROM PersonelTablosu WHERE Yas BETWEEN 30 AND 35 AND Maas BETWEEN 2800 AND 4000

Bunların dışında kısaca aritmetik işlemlerden bahsetmek istiyorum. SQL’de aritmetik işlem yapmak herhangi bir programlama dilinde işlem yapmaya benzerdir. Aritmetik işlemler Select komutu ile kullanılabilir. Yapılmak istenen işleme göre matematiksel operatör kullanılarak aritmetik dört işlem gerçekleştirilir. Birkaç örnek gösterip yazımızı sonlandıralım.

INPUT:
SELECT 4+6 AS "TOPLAM"
SELECT 10*6 AS "ÇARPIM"
SELECT 60/2 AS "BÖLME"
SELECT 30-20 AS "ÇIKARMA"
SELECT (((30-5)+10)/7)*5 AS "DÖRT İŞLEM"

SQL27WU355YJ0IC75Y
SQL Server İle Veri Tabanı İşlemleri #1

Bu yazıda sizlere SQL SERVER’dan bahsedeceğim. Genel olarak yazının içeriğinde veri tabanı oluşturma, veri türleri, tablo oluşturma, DML komutları, DDL komutları gibi konulardan bahsedeceğim.

SQL Nedir?

SQL, veri tabanlarını ve tablolarını saklayan ve üzerinde işlem yapmamızı sağlayan veri tabanı yönetim sistemidir. Bu yazıda sorgular Managment Studio’da yazılacaktır. İsterseniz siz de bu programı kullanabilir ya da MySQL, Oracle, Access, vb. gibi veri tabanı yönetim sistemlerini kullanabilirsiniz. Veri tabanı kullanmanın başlıca faydaları aşağıdaki gibi özetlenebilir:

  • Veri tekrarının önüne geçer.
  • Veriye erişimi kolaylaştırır.
  • Veriler üzerinde işlem yapma olanağı sağlar.
  • Veri bütünlüğünü sağlar.
  • İstenen veriyi aramak sorgular ile çok hızlı gerçekleşebilir.

Veri Tabanı Oluşturma

Veri tabanı oluşturmak için hem Nesne gezgini (Object Explorer) kısmını hem de sorguları kullanabiliriz. Nesne gezgini penceresinden Database‘e sağ tıklayıp New Database’e tıklayarak karşımıza gelen pencereden veri tabanı bilgilerini girip istediğimiz veri tabanını oluşturabiliriz. Bunun dışında sorgu komutunu kullanarak da veri tabanı oluşturulabilir.

Tablo Oluşturma

Veri tabanı tablolardan, tablolar ise sütun ve satırdan oluşmaktadır. Verilerimiz veri tabanlarında sütun ve satırlarda saklanır. Tablo oluşturmanın iki yöntemi vardır. Bunlardan ilki Managment Studio ekranında sol kısımda yer alan Nesne gezgini (Object Explorer)penceresinde Databases  > Oluşturduğumuz veri tabanı > Tables (Sağ tık) > New > New table yolunu izlemektedir. Böylece daha önceden oluşturmuş olduğumuz veri  tabanı üzerinde bir tablo oluşturmuş oluruz. New table dedikten sonra karşımıza 3 sütunlu bir pencere açılacaktır. İlk sütun Column Name ismindedir. Buraya sütun ismi girilmelidir. Ardından ikinci sütun veri türü sütunudur. Buraya da oluşturduğumuz sütunun veri tipi girilmelidir. Son olarak bu sütunun boş değer alıp alamayacağını Allow Null kısmı ile belirledikten sonra tablomuzu oluşturmuş oluruz. Bunun dışında yine sorgu komutları ile sütun adlarını ve veri türlerini kullanarak tablo oluşturabiliriz.

Veri Tipleri

Bit

True ya da false şeklinde değer alan mantıksal veri tipidir.

Char (Değer)

Karakter, sembol, sayı ve metin gibi değerler alan veri tipidir. İçerisine yazılan sayı değeri kadar bellekte yer açar. Eğer girilen değerin karakter uzunluğu char içerisine yazılan değerden daha küçükse kalan kısımlara boşluk atanır.

Date

Yıl – ay – gün şeklinde tarih bilgisi tutan veri türüdür.

Datetime

Yıl –  ay – gün saat : dakika : saniye : milisaniye şeklinde tarih bilgisi tutan veri türüdür.

Float

Ondalık değerleri tutan veri türüdür.

Decimal (a,b)

Float’a göre hassas ondalık değerleri tutmak için kullanılan veri türüdür. İçerisine iki değer alır. Bunlardan a, girilen sayının toplam uzunluğu, b ise virgülden sonraki kısmın uzunluğunu ifade eder.

Int

-2.14.4783.648 ile + 2.14.4783.647 arasındaki tam sayı değerlerini tutan veri türüdür.

Money

Parasal türdeki verileri tutmak için kullanılan veri türüdür.

SQL Variant

Girilen değerin veri türünün belli olmadığı durumlarda kullanılan veri türüdür.

Smallint-Tinyint

Daha küçük aralıktaki tam sayı değerlerini tutmak için kullanılan veri türleridir. Smallint -32.768 ile +32.767 aralığındaki değerleri tutarken, Tinyint 0 ile 255 arasındaki sayıları tutmak için kullanılır.

Varchar (değer)

Char türüne benzer olarak karakter, sembol, sayı ve metin gibi değerleri tutmak için kullanılır. Char türündeki farkı içerisine girilen değerin uzunluğu kadar bellekte yer açar.

Uniqueidentifier

Benzersiz 16 byte boyutunda olan oluşturan veri türüdür. Her satırın ID numarası bu veri türünden oluşur.

Bunların dışından eğer veri türünün başında N ifadesi var ise o veri türü Latin alfabesi dışındaki karakterleri tutabilir anlamına gelir. Örneğin Nvarchar( ) gibi

DDL Komutları Nedir?

Data Definition Language (Veri tanımlama dili) kısaca DDL komutları, SQL’de veri tabanı oluşturmaya ve silmeye, tablo oluşturmaya, güncellemeye ve silmeye imkan sağlayan komutlardır. Bunların dışında da DDL komutlarını kullanmak mümkündür. Ancak bu konudan şimdi bahsedilmeyecek.  3 temel DDL komutu vardır. Bunlar aşağıdaki gibi özetlenebilir:

Create Komutu

Veri tabanı  ya da tablo oluşturmak için kullanılan komuttur. Veri tabanı oluşturmak için CREATE DATABASE (veri tabanı adı) şeklinde kullanmak mümkündür.

Tablo oluşturmak için  CREATE TABLE (tablo adı) (sütun1 veri türü, sütun2 veri türü, sütun3 veri türü, …) komutunu kullanmak mümkündür.

Drop Komutu

Veri tabanı, sütün ya da tablo silmek için kullanılan komuttur. Veri tabanı silmek için DROP DATABASE (veri tabanı ismi) komutu kullanılabilir. Tablo silmek için DROP TABLE (tablo ismi) komutu kullanılabilir. Sütun silmek için ise ALTER TABLE (tablo ismi) DROP COLUMN (sütun adı) komutu kullanılabilir. Sütun silme kısmı son DDL komutu olan ALTER komutunun anlatımından sonra daha anlaşılır olacaktır.

Alter Komutu

Bu komut ile tablo üzerinde güncellemeler yapmak mümkündür. Örneğin tablodaki sütunun veri türünü değiştirebiliriz. Bunun dışında da bu komut ile sütun silinebilir ya da eklenebilir. Tablo üzerinde yapılacak işleme göre kullanım şekli değişir. Örneğin sütunun veri türünü değiştirmek için kullanım şekli aşağıdaki gibidir:

ALTER TABLE (tablo ismi) ALTER COLUMN (sütun adı) (yeni veri türü).

Sütun eklemek için ise aşağıdaki komut kullanılabilir:

ALTER TABLE (tablo ismi) ADD COLUMN (sütun adı) (veri türü).

Bu komutları kullanırken şunu belirtmekte fayda var; DDL komutları verilere müdehale etmemize olanak sağlamaz. Bu tür işlemler DML komutlar ile gerçekleştirilir. DDL komutları ile daha çok veri tabanı ve tablolara müdehale etmek mümkündür.

DML Komutları

Data Managment Language (Veri manipülasyon dili) kısaca DML komutları, SQL’de tabloya veri eklemek, tablodaki veriyi silmek ve tablodaki verileri güncellemek için kullanılan komutlardır. Bunun dışında istenen herhangi bir şarta bağlı olarak ya da bağlı olmadan verileri listemek için kullanılabilir. 4 tane DML komutu vardır. Bunlar aşağıdaki gibi özetlenebilir:

SELECT KOMUTU

Herhangi bir şarta bağlı olarak ya da bağlı olmadan verileri seçip listelemek için kullanılan komuttur. Kullanımı aşağıdaki gibi olabilir:

SELECT (sütun adları) FROM (tablo adı).

Bu şekilde kullanılır ise herhangi bir şart olmadan listeleme yapılır. Böylece listelenen sütunlardaki tüm veriler gelir. Eğer SELECT * FROM (tablo adi) şeklinde kullanılırsa tüm sütunlardaki tüm veriler herhangi bir şart olmadan listelenir.

Herhangi bir şarta ya da şartlara göre verileri listelemek istersek, WHERE  komutunu sorguya eklememiz gerekir. Birden fazla şart eklemek istenirse and ve or gibi operatörler kullanılabilir. Örnek kullanımı aşağıdaki gibidir:

SELECT * FROM (tablo adi) WHERE şart1 and şart2.

Bunun dışında SELECT komutu ile beraber kullanılabilecek LİKE, NOT LİKE, IN ve NOT IN  gibi işleçlerde vardır. Bunlar sırasıyla aşağıdaki gibi açıklanabilir.

LIKE İŞLECİ

Listeleme yaparken WHERE komutundan sonra yazılır. İlgili sütunda, yazılan karakter ya da kelimeleri içeren verileri çekmek için kullanılır. Örnek kullanım şekli aşağıdaki gibidir:

SELECT (sütun adları) FROM (tablo adı) WHERE (sütun adı) LİKE (‘%aranmak istenen değer%’).

Aramak istediğimiz karakteri ‘%(aranmak istenen değer)’ arasına yazarsak arama işlemi son harfe göre yapılırken, ‘(aranmak istenen değer)%’ içerisine yazarsak arama işlemini baş harfe göre yapar.

NOT LİKE işleci ise LIKE işlecinin tam tersini gerçekleştirmektedir. Yazdığımız karakter ya da kelimeyi içermeyen verileri karşımıza listeler. Kullanımı LIKE işleci ile aynıdır.

IN İŞLECİ

Listeleme yaparken kullanılan bu işleç WHERE komutundan sonra yazılmaktadır. IN işleci, içerisine yazdığımız parametreleri barından satırların listelenmesini sağlar. Birden fazla or işleci kullanılmasının önüne geçer. Örnek kullanımı aşağıdaki gibidir:

SELECT (sütun adları) FROM (tablo ismi) WHERE (sütun adı) IN(‘değer1’,’değer2’,…).

NOT IN işleci ise IN işlecinin tam tersi olarak içerisine girilen parametreleri barındırmayan satırları listeler. Kullanımı IN komutuna benzerdir.

INSERT KOMUTU

Tablolarımıza yeni veri eklemek için kullanılan komuttur. Kullanımı aşağıdaki gibidir:

INSERT INTO (tablo adi) (sütun1,sütun2,…) VALUES (değer1,değer2,…).

Burada dikkat edilmesi gereken husus; veriler sütunlara sırasıyla yazılır. Yani sütun1’e değer1, sütun2’ye değer2,… şeklinde tabloya veri eklenir.

DELETE KOMUTU

Tablodan veri silmek için kullanılan komuttur. Silme işlemini sütuna göre değil satıra göre yapar. Silme işlemi yaptığımız satırın tüm sütunlarına ait verileri tablodan çıkarır. Şarta bağlı olarak silme yapılmalıdır yoksa tablonun diğer satırlarındaki verilerden silinir. Kullanım şekli  aşağıdaki gibidir:

DELETE FROM (tablo adi) WHERE şart1.

UPDATE KOMUTU

Tablodaki verilerimizi güncellemek için kullanılır. Kullanılırken şarta bağlı olarak kullanılmalıdır yoksa diğer satırlarda bu güncelleme işleminden etkilenir. Kullanımı aşağıdaki gibidir:

UPTADE (tablo adi) SET (sütun1 = değer1, sütun2 = değer2,…) WHERE şart1

Buraya kadar yaptıklarımızda SQL SERVER’de veri tabanı ve tablo oluşturma, veri türleri, DDL komutları ve DML komutları gibi temel konularda bilgi sahibi olduk. Bir sonraki yazıda SQL’de veri tabanı işlemlerini devam edeceğiz.

SQL5VQ3P6Y10ZRQ42A