Apakah ada perbedaan antara meletakkan alias kolom di awal atau di akhir definisi kolom?

12

Saya selalu melihat dan menulis alias kolom saya

SELECT 1 as ColumnName

tapi hari ini menemukan kueri yang digunakan

SELECT ColumnName = 1

Apakah ada perbedaan dalam bagaimana dua query ini dieksekusi? Atau adakah standar di antara DBA tentang yang mana yang akan digunakan?

Secara pribadi saya pikir ke-2 akan lebih mudah dibaca / dipelihara untuk definisi kolom yang lebih panjang (contoh yang baik di sini dari artikel ini ), namun saya belum pernah melihat sintaks ke-2 yang digunakan sebelum hari ini jadi saya bertanya-tanya apakah ada beberapa alasan saya tidak boleh menggunakannya.

Rachel
sumber
2
Perhatikan bahwa bentuk tugas dari aliasing komentar tidak portabel, jadi meskipun hal itu membuat hal-hal yang cukup mudah dibaca ketika Anda melakukan BANYAK pekerjaan kolom turunan, mungkin mengganggu jika harus mengubahnya nanti ke DBMS lain.
Cade Roux
@Cade Celko membuat argumen tentang hal-hal tertentu sepanjang waktu. Jika saya harus mengubah basis kode SQL Server ke Oracle atau PG atau MySQL, komposisi alias akan menjadi yang paling sedikit dari kekhawatiran saya. Karena, tidak seperti Celko, saya tidak tertarik untuk menghindari semua fitur kepemilikan jika kami pernah memindahkan seluruh arsitektur kami ke RDBMS yang berbeda. Saya ingin tahu seberapa sering itu benar-benar terjadi di luar ruang kelas ...
Aaron Bertrand
@ AaronBertrand Saya setuju tentang konversi massal. Saya mengonversi banyak hal menjadi Teradata dan ini adalah yang paling kecil dari masalahnya. Apa yang terus terjadi pada saya lebih sering adalah saya akan mengimpor seluruh data tabel mentah ke dalam SQL Server saya sendiri dan membuat tampilan atau kueri di atasnya atau apa pun yang saya lakukan untuk menganalisisnya, dan kemudian saya akan menulis kueri atau proc untuk sumbernya dialek sistem dipanggil dari SSIS atau apa pun untuk mendapatkan HANYA persis data yang saya inginkan di seluruh kawat. Dalam kasus tersebut, saya secara sadar menulis SQL gaya ANSI yang sangat umum. Dan kemudian saya masih harus mengubah hal-hal seperti fungsi tanggal.
Cade Roux

Jawaban:

17

Tidak ada perbedaan dalam fungsi yang mendasari kedua jenis aliasing ( aslawan =). Apa intinya adalah apa yang Anda sebutkan: Keterbacaan dan pemeliharaan.

Menurut pendapat saya , mantan ( <Expression> as <Alias>) jauh lebih mudah dibaca karena cukup jelas. Ketika Anda memiliki SELECT ColumnName = 1saya pikir itu akan sangat mudah untuk kesalahan itu sebagai pengaturan variabel pada malam-malam panjang yang lelah. Anda mungkin salah mengira bahwa sebagai SELECT @ColumnName = 1dan itu akan menjadi fungsi yang sama sekali berbeda. Oleh karena itu, untuk menghindari kemungkinan kueri "tampilan ganda", atau bahkan lebih buruk ... kesalahan dalam memahami / pengkodean, saya menggunakan SELECT 1 as ColumnName100% waktu.

Preferensi pribadi, tetapi konsistensi (untuk diri Anda dan dalam tim Anda) adalah raja . Apa pun yang Anda temukan paling mudah, ikuti dan lakukan sepanjang waktu. Tidak ada yang lebih menyebalkan daripada beralih bolak-balik untuk seseorang yang memecahkan masalah / meninjau / memelihara kode.

Cara ketiga yang tidak disebutkan adalah menggunakan <Expression> <Alias>. Dengan kata lain, cara kedua Anda tanpa askata kunci. Saya pikir ini sama buruknya dengan =simbol. Itu kurang mudah dibaca untuk mendapatkan apa? Tidak mengetik tiga karakter tambahan ( asdan spasi). Tidak layak.

Untuk tujuan berlebihan, lihat kueri seperti ini:

use AdventureWorks2012;
go

select
    [New Name] = Name,
    NewDepId = DepartmentID,
    GroupName as GName,
    ModifiedDate MyModDate
from HumanResources.Department;

Bukan kode yang ingin saya tinjau.

Thomas Stringer
sumber
5
selalu mengganggu saya untuk melihat yang terakhir, di mana mereka mengecualikan kata kunci "sebagai". Tidak diperlukan tetapi rasa sakit untuk membaca ketika melihat banyak kode.
10

Secara pribadi saya merasa alias = expressionlebih mudah untuk membaca dan memahami. Alasannya adalah bahwa ketika saya memecahkan masalah SELECTpernyataan yang memiliki ekspresi panjang, saya mungkin ingin menemukan ekspresi melalui nama kolom, bukan sebaliknya. Cepat, temukan ekspresi yang dilihat aplikasi alias2:

SELECT
  alias1 = (long expression with aggregates and multiple column references),
  (long expression with aggregates and multiple column references AS alias2
FROM ...

Itu pilihan saya. Milik Anda mungkin berbeda. Tidak ada keuntungan sejati untuk menggunakan satu atau yang lain kecuali untuk alasan subjektif / rasa. Yang penting adalah bahwa Anda memilih satu cara untuk melakukannya, dan melakukannya secara konsisten (dan kecuali Anda melempar koin, dapat mempertahankan pilihan Anda ketika Anda menghadapi seseorang yang menyukai cara lain). Tetapi jika Anda menulis kode untuk DBA yang cerewet seperti saya, bersiaplah untuk itu akan ditulis ulang. :-)

Saya sudah membuat blog tentang hal ini .

Satu hal yang saya rasa lebih kuat adalah penggunaan tanda kutip tunggal di sekitar nama alias, misalnya

column AS 'alias'
'alias' = column

Satu bentuk sudah usang tetapi keduanya sangat sulit dibaca - dan banyak pemula mengira alias sebagai string literal, karena seperti itulah bentuknya. Untuk alasan yang sama, saya benar-benar membenci penggunaan tanda kutip ganda ( "alias"). Jika Anda perlu keluar dari alias karena kata tersebut dilindungi undang-undang atau tidak dipilih atau diformat dengan buruk, gunakan [square brackets].

Aaron Bertrand
sumber
2
Sepenuhnya setuju pada aspek kutipan. Sedangkan untuk ekspresi panjang, apa yang saya pribadi lakukan adalah menggunakan carriage returns dan newline tabbing dan kemudian letakkan as <Alias>di baris terakhir dari definisi kolom. Tapi pasti setuju, itu sama pribadi dengan bagaimana Anda suka kopi Anda.
Thomas Stringer
@ ThomasStringer melihat saya lebih suka carriage mengembalikan ekspresi. Jika sebuah baris dimulai dengan AS Aliasitu AStidak terlalu berguna ketika saya memindai secara vertikal untuk nama tabel tertentu. Saya yakin kita tidak akan setuju di mana menempatkan koma juga. :-)
Aaron Bertrand
Saya mencoba menggunakan tanda kutip tunggal di alias kolom saya sekali karena itu membuat mereka Merah yang menonjol di SSMS, tetapi gangguan mengetik kunci kutipan begitu cepat menjadi terlalu banyak bagi saya dan saya kembali pada cara malas saya. Juga, itu tidak berfungsi dengan baik untuk tujuan yang dimaksudkan ketika saya memiliki string dalam permintaan saya. Saya mungkin akan tetap dengan ASkarena itulah yang kami gunakan sekarang (saya biasanya menambahkan baris baru sebelum AS ColumnNamejadi mereka berbaris), tapi saya setuju itu =jauh lebih mudah dibaca dalam definisi kolom yang lebih panjang.
Rachel
2
@AaronBertrand Argumen saya untuk menempatkan koma pertama adalah membuatnya lebih mudah untuk mengatakan di mana definisi kolom dimulai, terutama dengan definisi kolom multi-line.
Rachel
1
@AaronBertrand Saya biasanya tidak bekerja dengan kode indentasi masuk akal>. <
Rachel