Bir Kolon ALIAS’ini Where ve Order by Içinde Kullanmak

Olusturdugumuz sorgularda neredeyse hepimiz where ve order by gibi kisimlarda kolon alias larini kullanmaya çalismisizdir. Where cümlesi içinde kullanmak istedigimiz de hata alirken order by içinde kullandigimiz da hata almiyoruz. Peki bunun nedeni nedir?

Ilk olarak iki örnekle olayi anlatmaya çalisayim.

Where içinde Alias kullanmak:

select 
	name as ObjeAdi, 
	YEAR(create_date) as YIL,
	create_date as OlusturmaTarihi
from 
	sys.objects
where YIL = 2012

Yukaridaki sorguyu çalistirdiginiz zaman “Invalid column name ‘YIL’.” hatasi alirsiniz.

Order by Içinde Kullanimi :

select 
	name as ObjeAdi, 
	YEAR(create_date) as YIL,
	create_date as OlusturmaTarihi
from 
	sys.objects
order by YIL desc

Yukaridaki sorguyu ise herhangi bir hata almadan çalistirabilirsiniz. Peki bunun sebebi nedir ?

SQL Server bir sorguyu islerken belirli bir siraya göre islem yapar. Bu sira genel hatlari ile su sekildedir. FROM -> ON -> WHERE -> SELECT -> ORDER BY

Sizin tanimladiginiz YIl alias i select içinde tanimlandigi ve WHERE kismi SQL de SELECT’ten önce çalistigi için, WHERE kismi çalisirken SQL engine daha YIL adindaki aliasin ne oldugunu bilmemekte. Bu yüzden de invalid column name hatasi vermekte.

ORDER BY ise SELECT’ten sonra çalistigi için bu kisimda artik YIl aliasi SQL engine tarafindan taninmaktadir. Buda hata almadan sorgumuzun tamamlanmasini saglamaktadir.

2 thoughts on “Bir Kolon ALIAS’ini Where ve Order by Içinde Kullanmak

  1. bu ?ekilde çaly?masy beklenir zaten, inner select kullanyldynda, bu veriyi tempdb ye yazarak onu yeni bir virtual table olarak kullanyr. burda dikkat etmeniz gereken where YIL = 2012 filtresini dy?ary yazdy?ynyzda performansy ne kadar etkileyece?idir. Bunu milyar satyrlyk bir tabloda denerseniz biraz sykynty ya?ayabilirsiniz.

  2. select f.* from (select
        name as ObjeAdi, 
        YEAR(create_date) as YIL,
        create_date as OlusturmaTarihi
    from
        sys.objects ) as f 
    where YIL = 2012
    ?eklinde halledilebilir.Execution için izlenen syrayy söylemi?siniz ama burda dikkat edilmesi gereken bir hususda SET THEORY’dir.. Bu sebeple result set’inde sorgulanabilir bir virtual table oldu?unu ve ufak bir editle çaly?abilir hale geldi?ini görebiliriz.
    Sevgiler.
    E2

mskunt için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir