Oracle – PL-SQL LISTAGG (Satırı sütün olarak gürüntülemek)


Herhangi bir satır bilgisinin Sütün gibi virgülle yan yana yazılması için “LISTAGG” fonksiyonunu kullanılabilmektedir.

select

deptno,
listagg (ename, ‘,’) WITHIN GROUP (ORDER BY ename)
enames
from
emp
group by
deptno;

DEPTNO     ENAMES
———- ————————————————–
10 CLARK,KING,MILLER
20 ADAMS,FORD,JONES,SCOTT,SMITH
30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD

Sonuç Tablosundan Tablo Oluşturma



Select Into
 ifadesi kullanılarak, select sorgusu ile elde edilen veriler into ifadesi ile geçici bir tablo içine yazılabilir.

Geçici tablolar ikiye ayrılır:

  • Yerel Geçici Tablolar (Local Temporary Tables)
    SQL Server’a her bağlanıldığında SQL Server yeni bir oturum açar. Oluşturulan geçici tablolar sadece açılan oturumlar için geçerlidir. Yerel Geçici Tablolar (Local Temprory Tables), sadece tabloyu oluşturan kişi tarafından görülebilir ve o kişi oturumu kapattığı zaman otomatik olarak tablo silinir. Yerel geçici tablolar oluşturulurken tablo adının önüne “#” işareti konulur.
  • Genel Geçici Tablolar (Global Temporary Tables)

    Genel Geçici Tablolar (Global Temprory Tables) ise, açıldığı veritabanına bağlı olan kişiler tarafından görülebilir ve kullanılabilir, yerel geçici tablolardan tek farkı budur. Veritabanına bağlı kişilerin hepsinin oturumlarını kapatmasıyla genel geçici tablolar otomatik olarak silinirler. Genel geçici tablo oluşturmak için ise tablo adının önüne “##” işareti konulur.

Uygulama:

Uygulamada kullanılan ogrenci tablosu:

 

Ogrenci tablosundan istenilen verilerin çekilmesiyle oluşturulan Yerel Geçici Tablo:

SELECT
ad AS ogrenciAdi,
soyad AS ogrenciSoyadi,
girisYili,
(zorunluKredi – verilenKredi) AS kalanKredi,
(zorunluStajGunu – yapilanStajGunu) AS kalanStaj
INTO #OgrenciBilgi
FROM ogrenci

SELECT * FROM #OgrenciBilgi

Ogrenci tablosundan istenilen verilerin çekilmesiyle oluşturulan Genel Geçici Tablo:

SELECT
ad AS ogrenciAdi,
soyad AS ogrenciSoyadi,
bolum,
verilenKredi,
yapilanStajGunu
INTO ##OgrenciBilgi2
FROM ogrenci

SELECT * FROM ##OgrenciBilgi2

SQL UPDATE VE DELETE


UPDATE DEYİMİ:
Tablodaki verileri güncellemek için kullanılır. Genellikle güncelleştirilecek satırı belirtmek için WHERE sözcüğüyle kullanılır.
Mevcut bir tablodaki satırları değiştirmek için UPDATE deyimi kullanılır. UPDATE deyimi sadece bir tablo üzerinde kullanılmalıdır. UPDATE deyimi ile SET ve WHERE sözcüğü kullanılır.
SET sözcüğü değiştirilecek kolonları ve değerleri belirtir. WHERE sözcüğü ise değiştirilecek satırı belirtir.
Kullanım biçimi:
UPDATE tablo
SET kolon = ifade
WHERE arama_koşulu
Örnek: Aşağıdaki örnekte fiyat değerini %10 artırır.
UPDATE siparis
SET fiyatı= fiyatı * 1.1
Örneğin bir kaydı düzeltmek istersek ;
UPDATE Musteri
SET Ad = ‘Nuri Yılmaz’
WHERE kod=’1′;
Örneğin tüm musterilerin bakiyesini %10 artırmak istediğimizde;
UPDATE Musteri
SET bakiye=bakiye*1.1;

DELETE DEYİMİ
Bir tablodaki verileri silmek için DELETE komutu kullanılır. Örneğin Öğrenci tablosundaki tüm verileri silmek için;
DELETE * from musteri;
Tabloda, bakiyesi 1000’den küçük olan müşterilerin satırlarını silmek için:
DELETE * FROM musteri WHERE bakiye <=1000
Kullanım biçimi:
DELETE tablo
WHERE arama_koşulu
Örnek: Tablodan satır silmek
Aşağıdaki örnekte müşteri tablosundan ‘B’ grubuna sahip olan müşteriler silinir.
DELETE musteri
WHERE grubu = ‘B’

UPDATE – Ornek Kayıt


update sis_user_def set cmp_code =’123′ where cmp_code = ‘000’
update değişim_yapılcak_tablo set değişim_yapılacak_kolon =’123′ where Arama_yapılacak_kolon = ‘000’

Flashback


select * from tmp_veri as of timestamp sysdate-2/1440 where batchno=1000 and seqno=0

SQL KOMUTLAR


SQL KOMUTLAR

DISTINCT: Birbirinin ayni olan satirlarin listelenmemesi için bu ifade kullanilir

“select distinct uyeadi from uyeler”

BETWEEN: Kosul belirtirken iki deger arasini belirtmek için kullanilir. Örnek:
Yasi 30 ile 40 arasindaki isçilerin kayitlarini listelemek için

“select * from uyeler where yas between 30 and 40”

LIKE: Eger aradigimiz kayitin bulunmasi için tam bir karsilastirma yapamiyorsak

“select * from uyeler where uyeadi like ’%a’”

IN: Kosul belirtirken kullaniriz. Mesela ismi netrobin, ali veya mehmet olan isçilerin
bilgilerini listelemek için.

“select * from uyeler where uyeadi in (’netrobin’,’ali’,’mehmet’ )”

SUM: Seçilen degerlerin toplamini bulur. Isçilerin aldigi toplam ücreti görmek için

“select sum(ucret ) from uyeler”

MAX, MIN, AVG: Verilen degerin en büyügünü, en küçügünü ve ortalamasini bulur.
MAX en büyük degeri, MIN en küçük degeri, AVG ise seçilen degerlerin ortalmasini bulur.

“select MAX(UCRET ), MIN(UCRET ), AVG(UCRET ) from uyeler where tarih>’01.01.1999’”

ORDER BY ASC: Tablodan seçtigimiz kayitlari alfabetik siralamak için kullanilir.

“select * from uyeler order by asc”

ORDER BY DESC: Tablodan seçtigimiz kayitlari son kayıt sırasına göre siralamak için kullanilir.

“select * from uyeler order by desc”

GROUP BY: Genelde istatistik amaçlar için kullanilir. Mesela hangi tarihte kaç isçinin ise
alindigini bulmak için.

ALIAS: Genelde tablonun veya kolonun adını başka bir şeymiş gibi değişirebiliriz.
Uyeler tablosundaki uyeadi kolonunun adını isim yaptık yani isim olarak çağırabiliriz.

“SELECT uyeadi AS isim FROM uyeler”

JOIN: Bazen iki yada daha fazla tablodan veri cekmemiz gerekebilir, bu gibi durumlarda bu
methodu kullanırız.
Birbiri ile ilişkilendirilmiş iki tablomuz var biri uyeler diğeride detaylar olsun.
İki tablodanda aynı anda sorgulama veya veri çekeceğiz. Uyeler tablosunda id=1 ise detaylar
tablosundaki karşılğı ise uyeno=1 olarak yapıyoruz.

“SELECT * FROM uyeler,detaylar WHERE uyeler.id=detaylar.uyeno”

INNER JOIN OLARAK

“SELECT * FROM uyeler INNER JOİN detaylar ON uyeler.id=detaylar.uyeno”

LEFT JOIN OLARAK

“SELECT * FROM uyeler LEFT JOİN detaylar ON uyeler.id=detaylar.uyeno”

UNION ve UNION ALL : Join methoduna benzer ama sadece aynı kolonlara sahip tabloları
birbirine bağlar. Uyeler ve Detylar tablosundaki uyeadlarını sorgular.

Select uyeadi from uyeler UNION Select uyeadi from detaylar”

Sadece UNION kullanırsak iki tabloa aynı isimler olsa bile tekrarlar.
UNION ALL kullanırsak iki tabloda aynı isimler olsa bile sadece tekini sorgular.

“Select uyeadi from uyeler UNION ALL Select uyeadi from detaylar”

SQL FONKSİYONLARI

sql kendi içinde bir cok fonksiyonu barındırır, bunlar sayım ve hesaplama için kullanılabilir.

Fonksiyon sözdizimi kuruluşu;
SELECT fonksiyon(kolon ) FROM tablo

Fonksiyon tipleri;
sql fonksiyonları birkaç temel tip ve kategoriye sahiptir. Temel fonksiyon tipleri:

++ Aggregate (birleşik degerli ) fonksiyonlar
++ Scalar (tekil degerli ) fonksiyonlar

Aggregate (birleşik degerli ) fonksiyonlar
Bu tip fonksiyonlar birçok deger ile çalışır ama sonucu tek bir degerdir.

Bu fonksiyonların MS Access e uygun olanları:
AVG(kolon ): girilen kolondaki sayıların aritmetik ortalama degerini geri yollar
COUNT(kolon ): Boş degerler haric, girilen kolondaki satır sayısını yollar
COUNT(* ): Verilen tablodaki satır sayısını yollar
FIRST(kolon ): girilen kolondaki ilk degeri yollar
LAST(kolon ): girilen kolondaki son degeri yollar
MAX(kolon ): girilen kolondaki en yuksek degeri yollar
MIN(kolon ): girilen kolondaki en dusuk degeri yollar
STDEV(kolon ): girilen kolondaki basit istatiksel standard sapma degerini yollar
STDEVP(kolon ): girilen kolondaki nüfus istatiksel standard sapma degerini yollar
SUM(kolon ): girilen kolondaki sayıların toplamını yollar

Bu fonksiyonların sql Server a uygun olanları:
AVG(kolon ): girilen kolondaki sayıların aritmetik ortalama degerini geri yollar
BINARY_CHECKSUM: tablonun verilen satırındaki ikilik tabandaki checksum degerini yollar
CHECKSUM: tablonun verilen satırındaki checksum degerini yollar
CHECKSUM_AGG: boş degerler haricindeki verilerin checksum degerini yollar
COUNT(kolon ): Boş degerler haric, girilen kolondaki satır sayısını yollar
COUNT(* ): Verilen tablodaki satır sayısını yollar
COUNT(DISTINCT kolon ): Verilen tablodaki satır sayısını yollar, fakat cift veri bulunan satırları bir defa sayar
FIRST(kolon ): girilen kolondaki ilk degeri yollar
LAST(kolon ): girilen kolondaki son degeri yollar
MAX(kolon ): girilen kolondaki en yuksek degeri yollar
MIN(kolon ): girilen kolondaki en dusuk degeri yollar
STDEV(kolon ): girilen kolondaki basit istatiksel standard sapma degerini yollar
STDEVP(kolon ): girilen kolondaki nüfus istatiksel standard sapma degerini yollar
SUM(kolon ): girilen kolondaki sayıların toplamını yollar

Scalar (tekil degerli ) fonksiyonlar
Girilen degere gore bir deger ile calısır ve sonuc olarak bir deger yollar.

Bu fonksiyonların MS Access e uygun olanları:
UCASE(c ): bolgedeki karakterlerin hepsini buyuk yapar
LCASE(c ): bolgedeki karakterlerin hepsini kucuk yapar
MID(c,start[,end] ): yazı alanından karakterleri calıstırır
INSTR(c ): yazı alanından karakterleri gosterir
LEFT(c,karakterNumarasi ): text alanının girilen sayıya kadar olan kısmını yollar (soldan sayar )
RIGHT(c,number_of_char ): text alanının girilen sayıya kadar olan kısmını yollar (sagdan sayar )
ROUND(c,hassasiyet ): sayı alanını verilen hassasiyete gore yuvarlar
MOD(x,y ): bolme işleminde kalanı gosterir (mod işlemi yapar )
NOW( ): o anki sistem zamanını gosterir
FORMAT(c,format ): alanın gosterim biçimini degiştirir
DATEDIFF(d,birinciTarih,ikinciTarih ): tarih hesaplarını yapmak için kullanılır