Bire Çok İlişki

Tablolar ve Alanları*

Departmanlar
  • Id
  • Ad
Calisanlar
  • Id
  • Ad

* Aşağıda istenenler noktasında ekleme yapmanız gerekebilir.

Sizden bir şirketin çalışanlarını ve departmanlarını saklamak üzere bir veritabanı tasarlamanız istenmektedir. Bir departmanda birden çok çalışan olabilir ancak bir çalışan birden çok departmanda aynı anda çalışamaz. Bir çalışanın henüz bir departmanı bulunmayabilir ve benzer şekilde bir departman oluşturulmuş ancak henüz altında çalışan bir çalışanı olmayabilir.

Departmanlar ve Çalışanları

  • Muhasebe: Ali, Can, Cem
  • İnsan Kaynakları: Ayşe, Zeynep, Ece
  • Bilgi İşlem: Fatih, Özgür
  • Satış ve Pazarlama

Departmansız Çalışanlar: Arzu, Berk

Görevler

  1. SQL dilini kullanarak, bu bilgiler ışığında tabloları kurgulayın, oluşturun ve verilerini girin.
  2. Tüm çalışanları departman bilgileriyle birlikte aynı satırda gözükecek şekilde sorgulayın.
  3. Bir departman altında çalışanları departman bilgileriyle birlikte aynı satırda gözükecek şekilde sorgulayın.
  4. Tüm departmanları varsa çalışanlarının bilgileri aynı satırda gözükecek şekilde sorgulayın.
  5. Tüm departmanları tüm çalışanlarla birlikte departmanı olan çalışanların departman bilgisi aynı satırda olacak şekilde sorgulayın.
  6. Departmanları çalışan sayılarıyla gösterin. 
USE master;
GO

CREATE DATABASE SirketDb;
GO

USE SirketDb;
GO

CREATE TABLE Departmanlar
(
	Id INT PRIMARY KEY IDENTITY,
	Ad NVARCHAR(50) NOT NULL
);
GO

CREATE TABLE Calisanlar
(
	Id INT PRIMARY KEY IDENTITY,
	Ad NVARCHAR(50) NOT NULL,
	DepartmanId INT NOT NULL FOREIGN KEY REFERENCES Departmanlar(Id)
);
GO

INSERT INTO Departmanlar(Ad) VALUES
(N'Muhasebe'),
(N'İnsan Kaynakları'),
(N'Bilgi İşlem'),
(N'Satış ve Pazarlama');

INSERT INTO Calisanlar(Ad, DepartmanId) VALUES
(N'Ali', 1),(N'Can', 1),(N'Cem', 1),
(N'Ayşe', 2),(N'Zeynep', 2),(N'Ece', 2),
(N'Fatih', 3),(N'Özgür', 3),
(N'Arzu', NULL),(N'Berk', NULL);

-- Tüm çalışanları departman bilgileriyle birlikte aynı satırda gözükecek şekilde sorgulayın.
SELECT * FROM Calisanlar LEFT JOIN Departmanlar ON Calisanlar.DepartmanId = Departmanlar.Id;

-- Bir departman altında çalışanları departman bilgileriyle birlikte aynı satırda gözükecek şekilde sorgulayın.
SELECT * FROM Departmanlar d JOIN Calisanlar c ON c.DepartmanId = d.Id;

-- Tüm departmanları varsa çalışanlarının bilgileri aynı satırda gözükecek şekilde sorgulayın.
SELECT * FROM Departmanlar d LEFT OUTER JOIN Calisanlar c ON c.DepartmanId = d.Id;

-- Tüm departmanları tüm çalışanlarla birlikte departmanı olan çalışanların departman bilgisi aynı satırda olacak şekilde sorgulayın.
SELECT * FROM Departmanlar d FULL JOIN Calisanlar c ON c.DepartmanId = d.Id;

-- Departmanları çalışan sayılarıyla gösterin.
SELECT 
	d.Ad [Departman Adı],
	COUNT(c.Id) [Çalışan Sayısı]
FROM Departmanlar d LEFT OUTER JOIN Calisanlar c ON c.DepartmanId = d.Id
GROUP BY d.Ad;