————————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;