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