İlişkisel Cebirdeki Bölme İşlemini SQL’de Nasıl Yaparız??


Elimizde aşağıda yer alan ilişki tablolarının olduğunu varsayalım:

Ogrenci(ogrNo, ogrIsmi, bolum)
Ders(dersNo, dersIsmi)
Hoca(hocaNo, hocaIsmi, bolum)
DersKayit(ogrNo, dersNo, donem, yil, not)
DersVerme(hocaNo, dersNo, donem, yil)

Bilgisayar Mühendisliği bölümü hocalarının hepsi tarafından verilmiş olan derslerin isimleri nelerdir?

Eğer relational algebrada çözüm üretiyor olsaydık;

ρ(DN, (∏hocaNo,dersNo DERSVERME) / (∏hocaNo (σbolum=’BilgisayarMuhendisliği’(HOCA))))
∏dersIsmi (DN ⋈ DERS)

olacaktı. SQL’de ise bölme işlemini şu şekilde ifade etmemiz gerekiyor. Alternatif çözüm olmakla beraber aşağıdaki çözümün daha kısa ve kolay olması tercih sebebidir 😉

SELECT DISTINCT D.dersIsmi
FROM DERS D
WHERE NOT EXISTS
((SELECT DISTINCT H.hocaNo
FROM HOCA H
WHERE H.bolum = ‘BilgisayarMuhendisligi’)
EXCEPT
(SELECT DV.hocaNo
FROM DERSVERME DV
WHERE DV.dersNo = D.dersNo));

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.