————————JOIN(TABLOLARI BİRLEŞTİRME)————-
inner join = join
left outer join
right outer join
cross join
———————————-inner join = join————————–
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h , klinik k where h.klinik_id=k.klinik_id;
ile
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h inner join klinik k on(h.klinik_id=k.klinik_id);
ile
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h join klinik k on(h.klinik_id=k.klinik_id);
aynı sql sorgularıdır.her iki tabloda da ortak olan alanları getirir.
———————————left outer join——————————-
insert into klinik values(4,’psikiyatri’);
select * from klinik;
insert into hastalar(hasta_id,hasta_no,hasta_adi) values(6,500,’hasan’);
select * from hastalar;
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h left outer join klinik k on(h.klinik_id=k.klinik_id);
soldaki tabloda(hastalar) olupta,sağdaki tabloda(klinik) olmayan kayıtları getirir.
———————————-right outer join————————-
left outer join ‘in tersidir,yani;
sağdaki tabloda(klinik) olupta, soldaki tabloda(hastalar) olmayan kayıtları getirir.
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h right outer join klinik k on(h.klinik_id=k.klinik_id);
————————————cross join——————————
Her iki tabloyu çapraz olarak birleştirir.
Yani, ilk tablodaki her bir satır için ikinci tablodaki her satır sonuç olarak döner.
burada ortak alanlar eşitlenmez,sadece tablolar belirtilir.
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h cross join klinik k;
————————-UNION VE UNION ALL——————
UNION ve UNION ALL ifadeleri iki sorgu sonucunun birleştirilmesi için kullanılır.
Tek farkı, UNION mükerrer kayıtları getirmez, UNION ALL ise tüm kayıtları olduğu gibi listeler.
1-)İki tablonun sütun sayısı aynı olmalıdır.
2-)İlk tablodaki her sütunun veri tipi ikinci tabloda ona karşılık gelen sütunun veri tipiyle aynı olmalıdır.
3-)İki tablonun hiç biri ORDER BEY cümleciğiyle sıralanamaz.
select * from hastalar1;
select * from hastalar2;
delete from hastalar2;
insert into hastalar2 values(10,1500,’aaaaaaaaa’,1);
insert into hastalar2 values(20,2000,’bbbbbbbbb’,2);
select hasta_id,hasta_no,hasta_adi from hastalar1
where hasta_no<‘300′
union
select hasta_id,hasta_no,hasta_adi from hastalar2
where hasta_id between ’10’ and ’20’;
—2 tane ‘ahmet’ kaydı olduğu halde union tekrarlarını getirmez—
select hasta_adi from hastalar1
where hasta_adi=’ahmet’
union
select hasta_adi from hastalar2
where hasta_id between ’10’ and ’20’;
——–union all’ u kullanırsak tüm tekrarları da getirir————
select hasta_adi from hastalar1
where hasta_adi=’ahmet’
union all
select hasta_adi from hastalar2
where hasta_id between ’10’ and ’20’;
————-MINUS fark(A/B gibi)—————————-
select hasta_id,hasta_no,hasta_adi from hastalar1
where hasta_no<‘300′
minus
select hasta_id,hasta_no,hasta_adi from hastalar2
where hasta_id between ’10’ and ’20’;
————————————————————-
select hasta_id,hasta_no,hasta_adi from hastalar1
minus
select hasta_id,hasta_no,hasta_adi from hastalar2;
cross join ile alakalı:iki tablo arasına cross join ifadesi yazılmasada olabilir.SELECT * FROM table1, table2;ifadesi dogrudan cross joindir.
cross join kayıtları çaprazlamasına getirdiğinden ortak alanlar eşitlenmez, burada kullanılmaz, select * from table1, table2; sorgusunda da alanları belirtmediğimizden * ile her iki tablonun kayıtları çapraz olarak getirilir, select a.* from table1 a,table2 b;sorgusunda ise table1 tablosunun tüm alanlarını getirmiş oluruz,evet, dediğiniz şekildeki örnek en küçük bir cross join örneğidir.