Rastgele Yazılar : ORACLE - XML - 1
Rastgele Yazılar : Real Application Clusters Yazılımı Mimarisi
Rastgele Yazılar : Informaticadaki Transformation Çeşitleri
Rastgele Yazılar : Veri Madenciliği Nedir
Rastgele Yazılar : SGA & PGA
Rastgele Yazılar : Oracle Data pump(import/export işlemi)
Rastgele Yazılar : Oracle 11g RMAN ile gelen List Failure, Advise Failure ...
Rastgele Yazılar : ODI da Model Oluşturma(Creating Models)
Rastgele Yazılar : Eğitim Sonrası Yorumlar
Rastgele Yazılar : SQL Server 2008 Enterprise R2 Kurulumu
İlişkisel veritabanların da bilgiler tablolarda saklanır. Bu tabloların birleşimi ile View'ler oluşturulabilir. View'ler veri tutmaz. Sadece tabloların bir 'görünümü' dür. View aslında sanal bir tablodur. Örneğin bir view iki tablonun birleşimi olabilir. Basit bir örnek ile daha anlamlı gelecektir tanımımız, Bunun için 2 birbiri ile ilişkisel tablo oluşturacağız ve data insert edeceğiz:
create table taraftarlar
(
id number,
isim varchar2(10)
);
insert into taraftarlar(id,isim) values (1,'Anıl');
insert into taraftarlar(id,isim) values (2,'Hikmet');
insert into taraftarlar(id,isim) values (3,'Mustafa');
select * from taraftarlar;
Taraftarlar adında bir tablo oluşturuldu ve üç adet data insert edildi:
create table takimlar
kisi_id number,
takim varchar2(10)
insert into takimlar(id,kisi_id,takim) values (1,3,'Beşiktaş');
insert into takimlar(id,kisi_id,takim) values (2,1,'Fenerbahçe');
insert into takimlar(id,kisi_id,takim) values (3,2,'Arsenal');
Takimlar adında bir tablo oluşturuldu ve üç adet data insert edildi:
Taraftarlar ve Takimlar tablosun da ortak bir kolon bulunmaktadır o da; taraftalar tablosunda ki id ve takimlar tablosunda ki kişi_id ortak kolon olarak gözükmektedir. Bu iki tabloyu inner join i kullanarak ilişkilendirmesini yapıp daha sonrasında ise view yapısı ile tablonun görünümünü tutacağız, yani:
create or replace view adiyok
as
select a.id,isim,b.id takim_id,takim from taraftarlar a,takimlar b
where a.ID=b.KISI_ID;
select * from adiyok order by 1 asc;
Resimde de gözüktüğü gibi artık taraftarlar ve takimlar tablosunu bir view yapısına çevirdik ve basit sorgular ile istediğimiz sonuçları elde edebiliriz. Bu tablonun bir de yapısını görelim:
describe adiyok;
veya
adiyok + F4 ile :
Yapılan işlemleri, yani create view yapısını görsel olarak inceleyelim :
With Check Option Constraint : Tablonun birebir karakteristik özelliğini alır. Kullanımı :
create or replace view benim_view
select * from employees
where department_id=90
with check option constraint benim_view_ck;
select * from benim_view;
Oracle ın veritabanını kullaranarak With Check Option Constraint özelliğini gördük. With Read Only özelleiği ise, view oluştururken kullandığımız da view ı salt okunur yapar, yani update, insert gibi işlemleri uygulamamızı engeller. Kullanımı:
create or replace view sadece_oku
with read only;
View, with read only özelliği ile oluşturuldu şimdi de update işlemini kullanarak test edeceğiz:
update sadece_oku
set first_name = 'Alex'
where employee_id = 101;
Çalıştırdığımız da, alttaki uyarıyı alırız.
Gelişmiş bir örnek ile view konusunu pekiştireceğiz:
create or replace view karmasik_join
select employee_id kisi_id,first_name isim,max(salary) max_maas,avg(salary) ort_maas,e.department_id,location_id
from hr.employees e,hr.departments d
where e.department_id = d.department_id(+)
group by employee_id,first_name,e.department_id,location_id
having max(salary) > (select salary from hr.employees where employee_id = 115)
order by 1 desc, 2 asc,5;
select * from karmasik_join;
Yukarıda ki kod kümesinde dikkat edilmesi gereken birkaç nokta var; birinci nokta, group by da kullanılan kolonları inceleyecek olursak group fonksiyonları kullandığımız kolonların dışında kalanları aldık ve having kısmında ki şartta ise employee_id = 115 olan datanın maaşından büyük olanlar yani maaşı 3100 den büyük olan dataları istedik. Son olarak da kendi koymuş olduğumuz kıstaslara göre de bir sıralama yaptık ve 77 data yı bu işleme dahil ettiğimizi resimdeki gibi gördük.
View yapısını size, birkaç basit örnek ile anlatmaya çalıştım umarım faydalı olmuştur, bir sonraki GROUP BY & HAVING konulu makalem de görüşmek dileği ile… Anıl ERDOĞAN