Sütun ve Tablo Takma Adları (Alias) – Bölüm 9

Bir tablo veya view kaynağından T-SQL ile veri çekilirken her sütuna birer isim verir. SELECT ifadesinde takma ad tanımlayarak sütunları yeniden isimlendirmek mümkündür. Sütunlara özel isimler verilebilir. Bu işlemi tablo düzeyinde yapmak için FROM deyimiyle birlikte belirlediğimiz takma adları yazarız. Bu sayede bu takma adı kullanarak sorgu içerisinde başka bir yerde bu tabloya ulaşabiliriz.

Sütunlarla İşlem Yaparken Takma Adları Kullanmak

Sütun takma adları, sorgunun sonuçlarını döndürürken sütunları yeniden etiketlemek için kullanılabilir. Örneğin, “qty” gibi şifreli sütun isimleri “quantity” (miktar) şeklinde değiştirilebilir.

Tablodaki kaynak sütuna dayanmayan ifadelerin sonuç kümesinde herhangi karşılığı yoktur. Buna hesaplama ifadeleri ve fonksiyon kullanımı da dahildir. Takma adları kullanmak zorunlu olmasa da okunabilirlik açısından iyi bir fikirdir.

T-SQL’de, bir sütun için takma adı oluşturmanın birden çok yöntemi bulunmaktadır. İlk yöntem, sütunu veya ifadeyi takma addan ayırmak için AS anahtar sözcüğünü kullanmaktır:

SELECT orderid, unitprice, qty AS quantity
FROM Sales.OrderDetails;

Diğer bir yöntem ise eşittir işareti kullanarak takma adı sütun ya da ifadeden önce yazarak atama yapmaktır:

SELECT orderid, unitprice, quantity = qty
FROM Sales.OrderDetails;

Son olarak önerilen bir yöntem olmasa da, sütun adını yazdıktan hemen sonra takma adı yazmaktır:

SELECT orderid, unitprice, qty quantity
FROM Sales.OrderDetails;

Performans veya pratikte herhangi bir fark olmamasına rağmen okunabilirlik farkından dolayı biri ötekine tercih edilebilir.

SELECT ifadesinde takma adlar tanımlanırken herhangi iki sütun adı arasındaki virgül unutulursa dönen sonuçta yanlışlıkla oluşturulabilir.

Örneğin, aşağıda quantity sütunu çekilmek isterken virgül unutulmuş, bu sebeple quantity kelimesi unitprice takma adı olarak işlenmiştir.

SELECT orderid, unitprice quantity
FROM Sales.OrderDetails;

Sonuç:

 orderid quantity
--------- --------------------
10248 14.00
10248 9.80
10248 34.80
10248 18.60

Görüldüğü üzere bu hatanın bir client uygulamasında bulunup düzeltilmesi zor olabilir. Bu sorunu önlemenin tek yolu, sütunları dikkatlice listelemek, virgüllerle ayırmak ve AS takma ad stilini benimseyerek hataları tespit etmeyi kolaylaştırmaktır.

Tablolarla İşlem Yaparken Takma Adları Kullanmak

Takma adlar, FROM ifadesinde bir tabloyla çalışmak için de kullanılabilir. Bu şekilde tabloyu sorguda başka bir yerde referans kullanarak okurken script’in okunabilirliği de artırılır.

FROM ifadesinde bir tablo takma adı oluşturmak için sütun takma adı tekniğine benzer bir syntax kullanırız.

Aşağıda gösterildiği gibi tablo adını takma addan ayırmak için AS anahtar sözcüğü kullanılmaktadır:

SELECT orderid, unitprice, qty
FROM Sales.OrderDetails AS OD;

AS anahtar sözcüğünü kullanabilir veya tablo adını takma adla yan yana yazarak takma ad tanımlayabilirsiniz:

SELECT orderid, unitprice, qty
FROM Sales.OrderDetails OD;

Tablo ve sütun takma adlarını aynı SELECT ifadesinde birleştirmek için aşağıdaki yaklaşımı kullanabilirsiniz:

SELECT OD.orderid, OD.unitprice, OD.qty AS Quantity
FROM Sales.OrderDetails AS OD;

Not: Bir tablo için takma ad tanımlarken eşittir (=) kullanılamaz.

Bu bölümde sadece küçük ve tek tablolarla örnek gösterdiğimizden alias kullanmanın henüz bir yararını göremeyebilirsiniz. Sonraki bölümlerde bir SELECT ifadesinde birden fazla tablodan veri almayı göreceğiz. Bu sorgularda, tabloları temsil etmek için tablo takma adlarının kullanılması yararlı olacaktır.

Mantıksal İşlem Sırasının Takma Adlara Etkisi

Sütun takma adları kullanılırken bir sorun ortaya çıkabilir. SELECT ifadesinde oluşturulan takma adlar, sorguda diğer ifadeler içerisinde (örneğin WHERE veya HAVING ifadesinde) erişilemeyebilir. Bunun sebebi mantıksal işlem sırasınından kaynaklanmaktadır. WHERE ve HAVING ifadeleri, SELECT ifadesi ve takma adlar işleme konmadan önce işlenir (HAVING ve WHERE ifadeleri sonraki yazılarda ele alınmıştır). Bunun bir istisnası ise ORDER BY ifadesidir.

Aşağıdaki örnek hatasız çalışacaktır:

SELECT orderid, unitprice, qty AS quantity
FROM Sales.OrderDetails
ORDER BY quantity;

Fakat aşağıdaki örnekteki SELECT ifadesinde bir takma ad tanımlamadan önce WHERE deyimi işlendiğinden dolayı hata basacaktır:

SELECT orderid, unitprice, qty AS quantity
FROM Sales.OrderDetails
WHERE quantity > 10;

Ortaya çıkan hata mesajı:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'quantity'.

Sonuç olarak SELECT içerisinde takma ad oluşturduğunuzda WHERE veya HAVING deyimlerinde takma ad yerine orijinalini kullanmanız gerekebilir:

SELECT orderid, YEAR(orderdate) AS orderyear
FROM Sales.Orders
WHERE YEAR(orderdate) = '2008'

Ek olarak SELECT ifadesinde, sütun sırasına bakılmaksızın, aynı SELECT ifadesi içerisinde tanımladığınız sütun takma adını kullanamazsınız.

Aşağıdaki sorgu hata döndürecektir:

SELECT productid, unitprice AS price, price * qty AS total
FROM Sales.OrderDetails;

Ortaya çıkan hata:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'price'.

Leave a Reply

Your email address will not be published. Required fields are marked *