CREATETABLE "Personel"."Personel" ( "personelNo"SERIAL,"adi"CHARACTER VARYING(40) NOT NULL,"soyadi"CHARACTER VARYING(40) NOT NULL,"personelTipi"CHARACTER(1) NOT NULL,CONSTRAINT"personelPK"PRIMARY KEY ("personelNo"));
CREATETABLE "Personel"."Danisman" ( "personelNo"INT,"sirket"CHARACTER VARYING(40) NOT NULL,CONSTRAINT"danismanPK"PRIMARY KEY ("personelNo"));
CREATETABLE "Personel"."SatisTemsilcisi" ( "personelNo"INT,"bolge"CHARACTER VARYING(40) NOT NULL,CONSTRAINT"satisTemsilcisiPK"PRIMARY KEY ("personelNo"));
Temel tablo ile çocuk tablo arasında bağıntı kurulumu. "CASCADE" kullanımının en uygun olduğu yer
INSERT INTO "Personel"."Danisman"("personelNo","sirket") VALUES (currval('"Personel"."Personel_personelNo_seq"'),'Şen Ltd.');
~~~sql
-- Fonksiyon tanımı içerisinde
$$
DECLARE personelNo integer;
BEGIN
INSERT INTO "Personel"."Personel"("adi","soyadi","personelTipi")
VALUES ('Mert','Şen','D' ) RETURNING "personelNo" INTO personelNo;
INSERT INTO "Personel"."Danisman"("personelNo","sirket")
VALUES (personelNo,'Şen Ltd.');
END
$$;
Bir veya daha fazla tablodan seçilen satırlar ve alanlardaki bilgilerin yeni bir tablo gibi ele alınmasını temin eden yapıdır.
Seçme (SELECT) işlemi için kısa yol tanımlar.
Tablo(lar)dan tüm satırlar seçilebileceği gibi yalnızca belli kriterlere uyan satırlar da seçilebilir.
Tablo(lar)daki tüm alanlar görünüme dahil edilebileceği gibi yalnızca belli alanlar da görünüme dahil edilebilir.
Genellikle, karmaşık olan seçme (SELECT) işlemlerini basit hale getirmek için kullanılır.
Dinamiktir. GÖRÜNÜM (VIEW) ile oluşturulan tabloya gerçekleştirilen her erişimde kendisini oluşturan ifadeler (görünüm – view ifadeleri) yeniden çalıştırılır.
Güvenliği sağlamak amacıyla da kullanılır.
Örneğin şirket personeli, müşterilerin genel bilgilerini (ad, soyad, adres v.b.) görebilsin ancak kredi kartı bilgilerine erişemesin isteniyorsa yalnızca görmesini istediğimiz bilgileri içeren bir görünüm oluşturulabilir ve ilgili personeli bu görünüme yetkilendiririz.
Aşağıdaki sorgular NorthWind Örnek Veritabanını Kullanmaktadır.
CREATE OR REPLACEVIEW "public"."SiparisMusteriSatisTemsilcisi"ASSELECT"orders"."OrderID","orders"."OrderDate","customers"."CompanyName","customers"."ContactName","employees"."FirstName","employees"."LastName"FROM"orders"INNER JOIN"employees"ON"orders"."EmployeeID"="employees"."EmployeeID"INNER JOIN"customers"ON"orders"."CustomerID"="customers"."CustomerID";
SELECT*FROM"SiparisMusteriSatisTemsilcisi";
DROPVIEW"SiparisMusteriSatisTemsilcisi";
Çoklu Satır Fonksiyonları
Aşağıdaki sorgular NorthWind Örnek Veritabanını Kullanmaktadır.
COUNT
COUNT (Satır sayısı)
Sorgu sonucunda oluşan sonuç kümesindeki satır sayısını döndürür.
Yalnızca bir sütun için uygulanırsa o sütundaki NULL olmayan kayıtların sayısı bulunur.
Sorgu sonucunu belirtilen alan(lar)a göre gruplayarak oluşturur.
Gruplama işleminde seçilecek alan, gruplama yapılan alan ya da çoklu satır fonksiyonları (COUNT, SUM, AVG vb.) olmalıdır.
Aşağıdaki sorgu, ü̈rünleri tedarikçilerine (SupplierID) göre gruplar ve her tedarikçinin sağladığı ürünlerin sayısını (COUNT) hesaplayarak tedarikçi bilgisi ile birlikte döndürür.
Aşağıdaki sorgu, siparişleri müşteri firma adına (CompanyName) göre gruplar ve her müşterinin satın aldığı ürün sayısını (COUNT) ve bu ürünlerin toplam (SUM) birim fiyatını hesaplar.
SELECT"customers"."CompanyName", COUNT("orders"."OrderID"), SUM("products"."UnitPrice")FROM"orders"INNER JOIN"customers"ON"orders"."CustomerID"="customers"."CustomerID"INNER JOIN"order_details"ON"order_details"."OrderID"="orders"."OrderID"LEFT OUTER JOIN"products"ON"order_details"."ProductID"="products"."ProductID"GROUP BY"CompanyName"ORDER BY1;```#### HAVING* Gruplandırılmış veriler üzerinde filtreleme yapmak için kullanılır. * Gruplama işleminden sonra koşul yazılabilmesi için WHERE yerine HAVING ifadesinin kullanılması gereklidir.* HAVING ile yazılan koşullar içerisinde çoklu satır fonksiyonları veya gruplama yapılan alan kullanılabilir.```sqlSELECT"SupplierID", COUNT("SupplierID") AS"urunSayisi"FROM"products"GROUP BY"SupplierID"HAVINGCOUNT("SupplierID") >2;``````sqlSELECT"SupplierID", COUNT("SupplierID") AS"urunSayisi"FROM"products"GROUP BY"SupplierID"HAVING"SupplierID"=2;```* Çoklu satır fonksiyonları ile WHERE kullanılmaz.* Aşağıdaki iki sorgu yanlıştır.```sqlSELECT"SupplierID", COUNT("SupplierID") AS"urunSayisi"FROM"products"WHERECOUNT("SupplierID") >2;``````sqlSELECT"SupplierID", COUNT("SupplierID") AS"urunSayisi"FROM"products"GROUP BY"SupplierID"WHERECOUNT("SupplierID") >2;```