37  SQL Takma ad (Alias)

SQL Takma adları tablo ve kolonlarımıza verdiğimiz kısa isimlerdir. Özellikle uzun sorguları daha anlaşılır yaparlar. Takma ad verirken AS kullanılması tavsiye edilir ama bir çok veritabanı motoru AS kullanmadan da takma ad verilmesine izin verir.

SELECT C.* FROM Customer C;
SELECT C.* FROM Customer AS C;

Buradaki C.* kullanımı takma ad verdiğimiz bir tablonun tüm kolonlarını seçmek için güzel bir kullanımdır.

37.1 Takma ad hesaplanan kolonlar

Özellikle sorgulardaki hesaplanan kolonlara isim vermek için yararlıdırlar.

SELECT C.FirstName || ' '|| C.LastName AS TamAdi  FROM Customer AS C;

Benzer bir şekilde toplam fonksiyonlarına isim vermek için de yararlıdırlar.

SELECT AVG(Total) AS OrtalamaFaturaDegeri FROM Invoice i;

37.2 Takma ad GUI sorgu yazımı

Takma adın bir diğer yararı GUI araçlarında otomatik sorgu yazımında yardımcı olmalarıdır.

Dbeaver Sorgu Yardımcısı

37.3 Takma ad birleşim (join)

İleride göreceğimiz birleşim (join) kullanımında da çok işe yararlar. Eğer 2 aynı tablo aynı kolon isimlerine sahip iseler ya bunların tablo_adi.kolon_adi diye uzun uzun yazmamız gerekir. Ama takma ad kullanımı ile bunlar daha anlaşılır olurlar. Aşağıdaki örneğe bakınız.

SELECT
Track.TrackId, Track.Name,Album.AlbumId, 
Album.Title,Artist.ArtistId, Artist.Name
FROM Track  
JOIN Album  ON Album.AlbumId = Track.AlbumId
JOIN Artist  ON Artist.ArtistId = Album.ArtistId;

Bu sorgu takma adlar kullanarak hem daha kısa hem daha anlaşılır olarak yazılabilir.

SELECT
T.TrackId, T.Name As TrackName,A.AlbumId, 
A.Title,Ar.ArtistId, Ar.Name AS ArtistName
FROM Track T 
JOIN Album  A ON A.AlbumId = T.AlbumId
JOIN Artist Ar ON Ar.ArtistId = A.ArtistId;

37.4 Takma ad aynı tablo birleşim (self-join)

Eğer aynı tabloyu kendi kendine birleştiriyorsak takma ad kullanımı bir zorunluluktur. Aşağıdaki sorguyu takma ad kullanmadan yazamayız.

SELECT E1.EmployeeId, E1.FirstName ,E1.LastName,   
M.FirstName || ' ' || M.LastName AS ManagerFullName
FROM Employee E1 INNER JOIN 
Employee M ON E1.ReportsTo = M.EmployeeId;

37.5 Takma ad alt sorgu isim verme

Benzer bir şekilde karışık alt sorgulara isim vermek içinde yararlıdırlar.

SELECT * FROM
(
SELECT E1.EmployeeId, E1.FirstName ,E1.LastName,   
M.FirstName || ' ' || M.LastName AS ManagerFullName
FROM Employee E1 INNER JOIN 
Employee M ON E1.ReportsTo = M.EmployeeId
) Y
WHERE Y.ManagerFullName LIKE '%ar%'

37.6 SQL Select Anlamsal sıralama

  • [ FROM tablo kaynağı ]
  • [ WHERE arama kriterleri ]
  • [ GROUP BY gruplama ifadeleri ]
  • [ HAVING arama kriterleri ]
  • [ ORDER BY sıralama ifadeleri [ ASC | DESC ]]
  • SELECT seçilen kolonlar

Anlamsal sıralama, SELECT ifadesinin veritabanı motoru tarafından nasıl işlendiğini gösterir.

37.7 Anlamsal sıralama ve takma ad kullanımı

Bir takma adı kullanabilmemiz için bu takma adın anlamsal sıralamada daha önce verilmesi gerekmektedir. Örneğin aşağıdaki sorgu çalışmaz çünkü takma SELECT sırasında veriliyor ama WHERE aşamasında kullanılmak isteniyor. Anlamsal sıralamada SELECT daha sonra geldiği için SQL motoru bu takmadı bilmiyor ve bu yüzden hata veriyor.

SELECT C.FirstName || ' '|| C.LastName AS TamAdi  FROM Customer AS C
WHERE 
C.TamAdi LIKE 'A%';

Ama FROM sırasında verdiğim takma ad anlamsal sıralamada sonrasında gelenlerde örneğin WHERE kullanılabiliyor.

Anlamsal sıralamada SELECT daha sonra geldiği için SQL motoru bu takmadı bilmiyor ve bu yüzden hata veriyor. Aşağıdaki sorgu çalışıyor.

SELECT C.FirstName || ' '|| C.LastName AS TamAdi  FROM Customer AS C
WHERE 
C.FirstName LIKE 'A%';