1 veritabanı sil (varsa) (eğer vt silinemiyorsa kullanıcı durumunu değiştir) "USE master; GO IF DB_ID('HastaneDb') IS NOT NULL BEGIN ALTER DATABASE HastaneDb SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE HastaneDb; END" 2 veritabanı oluştur ve kullan "CREATE DATABASE HastaneDb; GO -- Yeni veritabanını kullan USE HastaneDb; GO " 3 tabloları oluştur "-- Hastalar tablosu CREATE TABLE Hastalar ( HastaID INT IDENTITY(1,1), Ad NVARCHAR(50) NOT NULL, Soyad NVARCHAR(50) NOT NULL, DogumTarih DATE NOT NULL, Cinsiyet NVARCHAR(10) CHECK (Cinsiyet IN ('Erkek', 'Kadın')) NOT NULL ); -- Doktorlar tablosu CREATE TABLE Doktorlar ( DoktorID INT IDENTITY(1,1), Ad NVARCHAR(50) NOT NULL, Soyad NVARCHAR(50) NOT NULL, Brans NVARCHAR(100) NOT NULL ); -- Klinik tablosu CREATE TABLE Klinik ( KlinikID INT IDENTITY(1,1), Ad NVARCHAR(100) NOT NULL UNIQUE ); -- Klinik_Doktor eşleştirme tablosu CREATE TABLE Klinik_Doktor ( ID INT IDENTITY(1,1), KlinikID INT NOT NULL, DoktorID INT NOT NULL, UNIQUE(KlinikID, DoktorID) ); -- Randevu tablosu CREATE TABLE Randevu ( RandevuID INT IDENTITY(1,1), KlinikID INT NOT NULL, DoktorID INT NOT NULL, HastaID INT NOT NULL, Tarih DATE NOT NULL, Saat TIME NOT NULL CHECK (Saat >= '09:00' AND Saat <= '16:00'), Durum BIT NOT NULL DEFAULT 0 ); -- Tahlil tablosu CREATE TABLE Tahlil ( TahlilID INT IDENTITY(1,1), HastaID INT NOT NULL, DoktorID INT NOT NULL, KlinikID INT NOT NULL, Tip NVARCHAR(50) NOT NULL, Tarih DATE NOT NULL, Saat TIME NOT NULL CHECK (Saat >= '09:00' AND Saat <= '16:00') ); -- Tahlil Kategorileri tablosu CREATE TABLE Tahlil_Kategorileri ( KategoriID INT IDENTITY(1,1), KategoriAd NVARCHAR(50) NOT NULL UNIQUE ); -- Tahlil Detay tablosu CREATE TABLE TahlilDetay ( DetayID INT IDENTITY(1,1), TahlilID INT NOT NULL, KategoriID INT NOT NULL ); " 4 tablolardaki birinci anahtarı tanımla "-- Hastalar tablosu ALTER TABLE Hastalar ADD CONSTRAINT PK_Hastalar PRIMARY KEY (HastaID); -- Doktorlar tablosu ALTER TABLE Doktorlar ADD CONSTRAINT PK_Doktorlar PRIMARY KEY (DoktorID); -- Klinik tablosu ALTER TABLE Klinik ADD CONSTRAINT PK_Klinik PRIMARY KEY (KlinikID); -- Klinik_Doktor eşleştirme tablosu ALTER TABLE Klinik_Doktor ADD CONSTRAINT PK_Klinik_Doktor PRIMARY KEY (ID); -- Randevu tablosu ALTER TABLE Randevu ADD CONSTRAINT PK_Randevu PRIMARY KEY (RandevuID); -- Tahlil tablosu ALTER TABLE Tahlil ADD CONSTRAINT PK_Tahlil PRIMARY KEY (TahlilID); -- Tahlil Kategorileri tablosu ALTER TABLE Tahlil_Kategorileri ADD CONSTRAINT PK_Tahlil_Kategorileri PRIMARY KEY (KategoriID); -- Tahlil Detay tablosu ALTER TABLE TahlilDetay ADD CONSTRAINT PK_TahlilDetay PRIMARY KEY (DetayID);" 5 tablolar arası ilişkileri tanımla "-- Hastalar ve Randevu ilişkisi ALTER TABLE Randevu ADD CONSTRAINT FK_Randevu_Hasta FOREIGN KEY (HastaID) REFERENCES Hastalar(HastaID); -- Doktorlar ve Randevu ilişkisi ALTER TABLE Randevu ADD CONSTRAINT FK_Randevu_Doktor FOREIGN KEY (DoktorID) REFERENCES Doktorlar(DoktorID); -- Klinik ve Randevu ilişkisi ALTER TABLE Randevu ADD CONSTRAINT FK_Randevu_Klinik FOREIGN KEY (KlinikID) REFERENCES Klinik(KlinikID); -- Klinik ve Klinik_Doktor ilişkisi ALTER TABLE Klinik_Doktor ADD CONSTRAINT FK_Klinik_Doktor_Klinik FOREIGN KEY (KlinikID) REFERENCES Klinik(KlinikID); -- Doktorlar ve Klinik_Doktor ilişkisi ALTER TABLE Klinik_Doktor ADD CONSTRAINT FK_Klinik_Doktor_Doktor FOREIGN KEY (DoktorID) REFERENCES Doktorlar(DoktorID); -- Hastalar ve Tahlil ilişkisi ALTER TABLE Tahlil ADD CONSTRAINT FK_Tahlil_Hasta FOREIGN KEY (HastaID) REFERENCES Hastalar(HastaID); -- Doktorlar ve Tahlil ilişkisi ALTER TABLE Tahlil ADD CONSTRAINT FK_Tahlil_Doktor FOREIGN KEY (DoktorID) REFERENCES Doktorlar(DoktorID); -- Klinik ve Tahlil ilişkisi ALTER TABLE Tahlil ADD CONSTRAINT FK_Tahlil_Klinik FOREIGN KEY (KlinikID) REFERENCES Klinik(KlinikID); -- Tahlil ve TahlilDetay ilişkisi ALTER TABLE TahlilDetay ADD CONSTRAINT FK_TahlilDetay_Tahlil FOREIGN KEY (TahlilID) REFERENCES Tahlil(TahlilID); -- Tahlil_Kategorileri ve TahlilDetay ilişkisi ALTER TABLE TahlilDetay ADD CONSTRAINT FK_TahlilDetay_Kategori FOREIGN KEY (KategoriID) REFERENCES Tahlil_Kategorileri(KategoriID); " 6 5 hasta ekle "-- 5 hasta ekle INSERT INTO Hastalar (Ad, Soyad, DogumTarih, Cinsiyet) VALUES ('Ahmet', 'Yılmaz', '1985-02-15', 'Erkek'), ('Fatma', 'Kaya', '1990-07-20', 'Kadın'), ('Mehmet', 'Demir', '1978-03-10', 'Erkek'), ('Ayşe', 'Çelik', '2000-11-25', 'Kadın'), ('Ali', 'Şahin', '1988-06-18', 'Erkek');" 7 klinik ekle (KBB, Göz, Dahiliye) "INSERT INTO Klinik (Ad) VALUES ('KBB'), ('Göz'), ('Dahiliye');" 8 her klinik için en az 2 doktor ekle "INSERT INTO Doktorlar (Ad, Soyad, Brans) VALUES ('Murat', 'Güneş', 'KBB'), ('Selin', 'Aydın', 'KBB'), ('Ali', 'Ersoy', 'Göz'), ('Zeynep', 'Şimşek', 'Göz'), ('Hakan', 'Kurt', 'Dahiliye'), ('Ebru', 'Ak', 'Dahiliye');" 9 klinik ve doktor eşleştirmesini tabloya ekle "INSERT INTO Klinik_Doktor (KlinikID, DoktorID) VALUES (1, 1), (1, 2), (2, 3), (2, 4), (3, 5), (3, 6);" 10 her hasta için en az 2 randevu oluştur randevu oluştur (tarih kontrolü) "INSERT INTO Randevu (KlinikID, DoktorID, HastaID, Tarih, Saat, Durum) VALUES (1, 1, 1, '2024-12-18', '10:00', 0), (1, 2, 1, '2024-12-20', '14:00', 0), (2, 3, 2, '2024-12-19', '11:00', 0), (2, 4, 2, '2024-12-21', '15:00', 0), (3, 5, 3, '2024-12-18', '09:00', 0), (3, 6, 3, '2024-12-22', '13:00', 0), (1, 1, 4, '2024-12-23', '09:00', 0), (2, 3, 5, '2024-12-24', '10:00', 0);" 11 herhangi bir hastanın randevu tarihini değiştir UPDATE Randevu SET Tarih = '2024-12-25' WHERE RandevuID = 1; 12 bazı hastaların randevu durumunu, 1 (true) olarak değiştir UPDATE Randevu SET Durum = 1 WHERE RandevuID IN (1, 3); 13 herhangi bir hastanın randevusunu sil DELETE FROM Randevu WHERE RandevuID = 2; 14 randevu listesini göster SELECT * FROM Randevu; 15 herhangi bir klinikteki randevuları göster SELECT * FROM Randevu WHERE KlinikID = 1; 16 kliniklere, doktora ve tarihlere göre randevu sayısını göster SELECT Klinik.Ad AS Klinik, Doktorlar.Ad AS Doktor, Doktorlar.Soyad AS Soyad, COUNT(*) AS RandevuSayisi FROM Randevu JOIN Klinik ON Randevu.KlinikID = Klinik.KlinikID JOIN Doktorlar ON Randevu.DoktorID = Doktorlar.DoktorID GROUP BY Klinik.Ad, Doktorlar.Ad, Doktorlar.Soyad; 17 doktorlara göre aylık randevu sayısını göster SELECT Doktorlar.Ad AS DoktorAd, Doktorlar.Soyad AS DoktorSoyad, MONTH(Tarih) AS Ay, COUNT(*) AS RandevuSayisi FROM Randevu JOIN Doktorlar ON Randevu.DoktorID = Doktorlar.DoktorID GROUP BY Doktorlar.Ad, Doktorlar.Soyad, MONTH(Tarih); 18 En az randevu bulunan klinik ile en fazla randevunun bulunduğu kliniğin alt alta gösterilmesi -- En fazla randevu bulunan klinik SELECT TOP 1 Klinik.Ad AS Klinik, COUNT(Randevu.RandevuID) AS RandevuSayisi FROM Randevu JOIN Klinik ON Randevu.KlinikID = Klinik.KlinikID GROUP BY Klinik.Ad ORDER BY RandevuSayisi DESC; -- En az randevu bulunan klinik SELECT TOP 1 Klinik.Ad AS Klinik, COUNT(Randevu.RandevuID) AS RandevuSayisi FROM Randevu JOIN Klinik ON Randevu.KlinikID = Klinik.KlinikID GROUP BY Klinik.Ad ORDER BY RandevuSayisi ASC;