TL;DR
Alias SQL adalah nama sementara yang kamu kasih ke kolom atau tabel di dalam satu query, pakai keyword AS. Sintaksnya SELECT nama_kolom AS nama_baru FROM nama_tabel AS t. Alias cuma hidup selama query itu jalan dan gak mengubah nama asli di database. Alias kolom bisa dipakai di ORDER BY dan GROUP BY, tapi gak bisa di WHERE, gara-gara urutan eksekusi SQL.
Alias SQL adalah nama sementara yang kamu kasih ke kolom atau tabel di dalam satu query. Bikinnya pakai keyword AS.
Namanya cuma hidup selama query itu jalan. Nama asli di database gak ke-sentuh sama sekali.
Kedengarannya sepele. Tapi tanpa alias, kamu gak bisa nulis self join, gak bisa bikin subquery di klausa FROM, dan tiap laporan yang kamu kirim ke bos bakal punya header SUM(total_belanja), bukan "Total Penjualan".
Alias adalah nama pengganti buat kolom atau tabel yang cuma berlaku di dalam query tempat dia ditulis. Kamu tulis AS nama_baru setelah nama kolom atau tabel, dan hasil query bakal pakai nama itu.
Ada dua jenis alias di SQL:
Semua contoh di bawah pakai dua tabel toko_berkah: pelanggan (6 baris) dan transaksi (8 baris). DDL lengkapnya ada di bagian query kalau kamu mau ikut praktek.
Tulis AS setelah nama kolom, lalu nama barunya:
SELECT nama_pelanggan AS pelanggan,
kota AS asal_kota
FROM pelanggan;
Hasilnya:
| pelanggan | asal_kota |
|---|---|
| Wati Kurnia | Bandung |
| Toni Wijaya | Surabaya |
| Sinta Dewi | Bandung |
Alias jadi beneran kepakai waktu kolomnya hasil hitungan. Tanpa alias, header kolomnya bakal jelek banget:
SELECT id_pelanggan,
SUM(total_belanja) AS total_omzet,
COUNT(*) AS jumlah_transaksi,
SUM(total_belanja) / COUNT(*) AS rata_rata_belanja
FROM transaksi
GROUP BY id_pelanggan
ORDER BY total_omzet DESC;
Perhatiin ORDER BY total_omzet di baris terakhir. Alias boleh dipakai di ORDER BY. Ini alasan lain kenapa ngasih alias itu ngirit ketikan.
Fungsi hitungannya sendiri aku bahas terpisah di halaman fungsi SUM.
Sama persis, tapi ditaruh setelah nama tabel di klausa FROM atau JOIN:
SELECT p.nama_pelanggan AS pelanggan,
p.kota,
t.tgl_transaksi AS tanggal,
t.total_belanja AS nilai
FROM transaksi AS t
JOIN pelanggan AS p ON t.id_pelanggan = p.id_pelanggan
ORDER BY t.tgl_transaksi;
Begitu tabelnya punya alias t dan p, kamu bisa nulis t.total_belanja alih-alih transaksi.total_belanja. Di query yang nge-join 4 tabel, ini nghemat ratusan karakter dan bikin query muat di satu layar.
Konvensi yang aku pakai: alias tabel 1-3 huruf, diambil dari huruf awal nama tabelnya. t buat transaksi, p buat pelanggan, pr buat produk. Jangan pakai a, b, c. Tiga bulan lagi kamu sendiri yang bingung baca query-nya.
Ada tiga situasi di mana query kamu langsung error kalau alias-nya gak ada.
Kamu nge-join satu tabel ke salinan dirinya sendiri. Database gak bisa bedain mana tabel kiri dan mana tabel kanan kalau namanya sama.
SELECT a.nama_pelanggan AS pelanggan_1,
b.nama_pelanggan AS pelanggan_2,
a.kota
FROM pelanggan a
JOIN pelanggan b
ON a.kota = b.kota
AND a.id_pelanggan < b.id_pelanggan;
Query ini nyari pasangan pelanggan yang tinggal di kota sama. Tanpa alias a dan b, SQL langsung nolak. Contoh lengkapnya ada di artikel SELF JOIN SQL.
Kalau tabel pelanggan dan transaksi sama-sama punya kolom id_pelanggan, nulis SELECT id_pelanggan doang bikin error "ambiguous column". Alias tabel yang mastiin database tau kamu maksud yang mana.
PostgreSQL dan MySQL mewajibkan subquery di FROM punya alias:
SELECT ringkasan.kota,
ringkasan.total_omzet
FROM (
SELECT p.kota,
SUM(t.total_belanja) AS total_omzet
FROM transaksi t
JOIN pelanggan p ON t.id_pelanggan = p.id_pelanggan
GROUP BY p.kota
) AS ringkasan
WHERE ringkasan.total_omzet > 200000
ORDER BY ringkasan.total_omzet DESC;
Hapus AS ringkasan dan PostgreSQL bakal nyemprot: subquery in FROM must have an alias.
Ini pertanyaan yang paling sering bikin pemula stuck. Query di bawah kelihatan masuk akal, tapi error:
-- SALAH
SELECT total_belanja * 0.11 AS ppn
FROM transaksi
WHERE ppn > 20000; -- column "ppn" does not exist
Penyebabnya urutan eksekusi. Database jalanin klausa dengan urutan begini:
Waktu WHERE dieksekusi, alias ppn belum ada. Makanya error.
Perbaikannya: tulis ulang ekspresinya di WHERE.
SELECT id_transaksi,
total_belanja * 0.11 AS ppn
FROM transaksi
WHERE total_belanja * 0.11 > 20000;
Atau bungkus jadi subquery, terus saring di lapisan luar. Lebih enak dibaca kalau ekspresinya panjang.
Urutan yang sama juga jelasin kenapa alias boleh di ORDER BY: klausa itu jalan setelah SELECT. Detail resminya ada di dokumentasi PostgreSQL soal table expressions.
Bu Sari minta satu tabel yang bisa langsung dia tempel ke laporan bulanan. Header-nya harus kebaca manusia, bukan bahasa mesin.
SELECT p.kota AS "Kota",
COUNT(t.id_transaksi) AS "Jumlah Transaksi",
SUM(t.total_belanja) AS "Total Penjualan"
FROM pelanggan p
JOIN transaksi t ON p.id_pelanggan = t.id_pelanggan
GROUP BY p.kota
ORDER BY "Total Penjualan" DESC;
| Kota | Jumlah Transaksi | Total Penjualan |
|---|---|---|
| Bandung | 5 | 868.500 |
| Surabaya | 3 | 419.000 |
Dari 8 transaksi di data ini, Bandung nyumbang 67% omzet cuma dari 3 pelanggan. Semarang nol. Bagas daftar 11 Januari tapi belum pernah belanja sekali pun.
Alias berspasi kayak "Total Penjualan" bikin hasil query bisa langsung diekspor ke Excel tanpa perlu rename kolom manual. Di PostgreSQL, SQLite, dan Oracle pakai tanda kutip ganda. MySQL pakai backtick. SQL Server pakai kurung siku.
SELECT nama_pelanggan kota FROM pelanggan; gak error, tapi hasilnya bukan yang kamu mau. SQL bakal nganggep kota itu alias buat kolom nama_pelanggan, dan kolom kota beneran gak ikut keluar. Bug diam-diam yang paling sering kejadian.
Begitu kamu nulis FROM transaksi AS t, nama transaksi gak bisa dipakai lagi di query itu. SELECT transaksi.total_belanja bakal error. Pilih satu, konsisten.
AS order, AS group, AS select, semuanya bikin masalah. Kalau kepaksa, bungkus pakai tanda kutip ganda. Lebih gampang: pilih nama lain.
Header cantik enak buat laporan akhir. Tapi kalau query itu bakal jadi subquery buat query lain, tiap referensi ke "Total Penjualan" harus pakai kutip terus. Pakai total_penjualan di query dalam, alias cantik cuma di lapisan paling luar.
Gak. SELECT total_belanja AS omzet dan SELECT total_belanja omzet hasilnya sama. Buat alias tabel, FROM transaksi t juga sah. Tapi nulis AS di alias kolom bikin query lebih gampang dibaca, dan ngurangin risiko bug "lupa koma" di atas.
Nggak. Alias cuma hidup selama query jalan. Nama kolom di tabel aslinya tetap utuh. Kalau kamu mau ganti nama kolom permanen, itu kerjaan ALTER TABLE.
Di PostgreSQL dan MySQL bisa, soalnya dua database itu ngizinin alias SELECT dibaca di GROUP BY. Di SQL Server dan Oracle gak bisa, kamu harus tulis ulang ekspresi lengkapnya. Kalau query kamu harus jalan di banyak database, tulis ulang aja biar aman.
Nol. Alias diproses waktu query di-parse, sebelum data disentuh. Query dengan alias dan tanpa alias punya rencana eksekusi yang sama persis. Alias murni buat manusia, bukan buat mesin.
Alias kolom bikin header laporan kebaca. Alias tabel bikin JOIN muat di satu layar.
Dan di tiga kasus (self join, kolom ambigu, subquery di FROM), alias itu syarat, bukan pilihan.
Satu aturan yang bikin kamu gak kena bug: kalau alias-nya ekspresi hitungan, jangan coba pakai dia di WHERE. Tulis ulang ekspresinya, atau bungkus jadi subquery.
Coba tulis ulang satu query panjang di kerjaan kamu pakai alias tabel. Lanjut latihannya di panduan SELECT SQL kalau kamu masih ngerapiin dasar-dasarnya.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Analisa per kuartal, hari kerja, atau musim jadi ribet kalau tiap query ngitung ulang atribut tanggal. Tabel kalender nyimpen semua atribut itu sekali, biar tinggal di-JOIN.
Laporan penjualan harian sering bolong di hari tanpa transaksi. Ini cara bikin deret tanggal lengkap di SQL biar tiap hari muncul, walau nilainya nol.
Struktur organisasi tersimpan sebagai kolom id_atasan yang saling nunjuk. Ini cara narik rantai jabatan, hitung total bawahan, dan span of control cuma pakai SQL.