İşleme (Manipulation)
İşleme (Manipulation) İşlemleri (İlişkisel Cebir İşlemleri);
- Seçme (select) işlemi
- Projeksiyon (project) işlemi
- Kartezyen çarpım (cartesian product) işlemi
- Birleştirme (join) işlemi
- Toplama (union) işlemi
- Kesiştirme (intersect) işlemi
- Çıkarma (difference) işlemi
- Bölme (division) işlemi
Bu operasyonların sonucu yine bir ilişkidir.
Şimdi bu operasyonlara örnekler verelim. Bu modelin sorgu dili olarak ilerideki derslerde SQL’i kapsamlı olarak çalışacağız, ancak burada da sınırlı bir şekilde kullanacağız.
Örnek:
Yeni bir tuple’ın ilişkimiz İMALAT’a girişini SQL kullanarak şu şekilde yapabiliriz:
INSERT INTO İMALAT (İmalatçı, parça, proje)
VALUES (Hasan, kalem, proje2)
Örnek:
İmalatçı ismi ‘Hasan’ olan tüm tuple’ları silme işlemini şu şekilde yapabiliriz:
DELETE
FROM İMALAT I
WHERE I.imalatçı = ‘Hasan’
Örnek:
İMALAT ilişkisinde bir tuple’ı değiştirme işlemini şu şekilde yapabiliriz:
UPDATE IMALAT
SET parça=’kalem’
WHERE İmalatçı = ‘Ali’ AND proje = ‘proje2’
Değiştirme operasyonu bir tuple’daki bir ya da daha fazla niteliğin değerini değiştirmek istediğimizde kullanılır.
Değiştirme operasyonlarından oluşan ilişkisel cebir operasyonlarını şimdi örneklerle gösterelim
Seçme Operasyonu
Seçme operasyonunun gösterim şekli:
s<şart> (R)
R: ilişkinin ismidir.
<şart> : seçme koşullarıdır.
Örnek:
s<imalatçı=’Hasan’> (İMALAT)
Sonuç ilişki :
İMALAT
imalatçı parça proje Hasan cetvel proje3
Projeksiyon Operasyonu:
Projeksiyon operasyonunun gösterim şekli:
P<niteliklerin listesi>(R) Örnek:
P<imalatçı, parça>(İMALAT) Sonuç ilişki:
İMALAT
imalatçı parça Ali kalem Ali cetvel Adem kalem Hasan cetvel Adem silgi Örnekte de görülebileceği gibi projeksiyon operasyonunun sonundaki ilişkide tüm tupleların birbirinden farklı olduğunu garanti etmeliyiz.
Kartezyen Çarpımı:
Bu operasyonun gösterim şekli şu şekildedir:
R1 X R2 (Burada R 1 ve R2 iki ayrı ilişkidir.) Örnek:
ÖĞRENCİ
ö_no a_dersler 101 DB 101 AI 102 DB
HOCA
h_no v_dersler 201 DB 202 AI ÖĞRENCİ X HOCA
ö_no a_dersler h_no v_dersler 101 DB 201 DB 101 DB 202 AI 101 AI 201 DB 101 AI 202 AI 102 DB 201 DB 102 DB 202 AI Kartezyen Çarpımı operasyonu iki ilişkideki tupleları bir ilişkide bir araya getirir. Böylece ilişkili tupleları tanımak mümkün olur. Genel olarak, R(A1, … , An) X S(B 1, B2 , …, B m)’in sonucu bir Q ilişkisidir ve n+m nitelikten oluşur, Q(A1 , … , A n, B1 , … , Bm ). Eğer R ilişkisinde nr ve S ilişkisinde ns tuple varsa, sonuç Q ilişkisinde nr* ns tuple olacaktır.
Genel olarak Kartezyen Çarpımı operasyonu kullanıldıktan sonra seçme operasyonu ile ilişkili tuplelar seçilir. Bundan dolayı yeni bir operasyon olarak birleştirme(JOIN) operasyonu bu amaç için kullanılmak üzere tanımlanmıştır. Kartezyen Çarpımı operasyonunun kendi başına bir anlam taşıdığı durumlar çok azdır.
Birleştirme Operasyonu (JOIN)
Bu işlemin gösterimi şu şekildedir:
R1 <şart> R 2 Burada <şart> {= , , > , , < , }
Birleştirme operasyonu iki ilişkideki ilişkili tupleları tek bir ilişkide toplar.
R1 <şart> R2 s<şart> (R1 X R 2) Sonuç şema kartezyen çarpımdaki ile aynıdır.
Kartezyen çarpımından daha az sayıda tuple ile sonuçlanabilir. Bu yüzden daha etkin hesaplanabilir.
Birleştirme operasyonu bu hali ile Teta-Join olarak bilinir.
Teta-join dediğimiz birleştirme türünün özel bir hali Equi-Join olarak bilinir, bu birleştirmede <şart> her zaman eşitlik olarak uygulanır.Örnek :
Bu örnekte birleştirme şartı olarak ‘=’ i kullanacağız.
ÖĞRENCİ <Öğrenci.a_dersler = Hoca.v_dersler> HOCA
Ö_no
A_dersler
H_no
V_dersler
101
DB
201
DB
101
AI
202
AI
102
DB
201
DB
Örnekte görüldüğü üzere, ÖĞRENCİ ilişkisindeki A_dersler niteliği ile HOCA ilişkisindeki V_dersler niteliği kullanılarak bu iki ilişkideki ilişkili tuple’lar sonuç ilişkisinde yer almışlardır.
Doğal Birleştirme: Equi-join operasyonunun özel bir hali olup, iki ilişkideki ortak nitelikler üzerine uygulanır ve sonuç şemada sadece birleştirme niteliklerinden birinin kopyası tutulur.
Örnek:
R1
sno isim 20 Ali 25 Veli R2
sno yaş proje 20 41 p1 26 45 p2 28 20 p1 R1 *R2(Doğal Birleştirme)
sno yaş proje isim 20 41 p1 Ali
Toplama (U), Kesiştirme ( ) ve Küme-Çıkarma (-) Operasyonları
Bütün bu operasyonlar iki ilişkiyi girdi olarak alır, ancak bu ilişkilerin toplama-benzeri olmak zorunluluğu vardır. İki ilişkinin toplama-benzeri olma özelliği için iki şart mevcut olmak zorundadır:
- İki ilişkide de aynı sayıda nitelik olmalıdır.
- Birbirine karşı gelen nitelikler aynı tipte olmak zorundadır.
Bu üç operasyon için aşağıdaki örneği verelim:
R 1
no
isim
yaş
20
Ali
45
30
Veli
55
50
Hasan
35
R 2
no
isim
yaş
25
Murat
35
30
Veli
55
40
Selim
35
50
Hasan
35
R1 U R2
no isim yaş 20 Ali 45 30 Veli 55 50 Hasan 35 25 Murat 35 40 Selim 35
R1 R2
no isim yaş 30 Veli 55 50 Hasan 35
R1 – R2
no isim yaş 20 Ali 45
Bölme (/) Bu operasyon temel operasyonlardan biri değildir ancak “bölümdeki derslerin tümünü alan öğrencileri bulun” gibi sorgulara yanıt vermede kullanılırlar. Eğer R1 iki niteliğe (x ve y) ve R2 yalnızca y niteliğine sahipse;
R1 / R2 = {<x> | <x,y> R1 <y> R 2} Yani, R1 /R2 bütün x tuple’larını içerir, öyle ki R2 ‘deki her y tuple’ı için R1 ‘de xy tuple’ı vardır.
Örnek:
A
Ad
No
a
1
a
2
a
3
a
4
b
1
b
2
c
3
d
2
d
4
S1
no
2
S2
no
2
4
S3
no
1
2
3
4
A/S 1
Ad
a
b
d
A/S 2
Ad
a
d
A/S 3
Ad
a
İlişkisel cebirin temel operasyonları ya da fonksiyonel tamam seti aşağıdaki operasyonlardan oluşur.
- Seçme (s )
- Projeksiyon (P )
- Kartezyen Çarpımı (X)
- Küme Farkı (-)
- Toplama (ya da Kesiştirme) (U) ya da ( )
Her operasyon bir ilişkiyi döndürdüğü için operasyonlar birleştirilebilir(bir arada kullanılabilir).
Örnek Sorgu:
Daha önce çalıştığımız Öğrenci, Hoca ilişkilerini tekrar burada kullanalım.
“201 nolu hocanın verdiği dersleri alabilecek öğrencilerin numaralarını getiriniz.”
P ö_no (( s h_no=201 Hoca) Öğrenci) Sonuç:
Ö_no 101 102 Örnek Sorgu:
“101 ya da 102 nolu öğrencilerin aldıkları derslerin hocaların numaralarını ve verdikleri dersleri getiriniz.”
P h_no,v_dersler ((s (ö_no=101 V ö_no=102) Öğrenci) Hoca Sonuç:
H_no V_dersler 201 DB 202 AI