Stored-Procedures
表別名是一種不好的做法嗎?
我記得在為資訊服務碩士學生開設的 DBMS 課程中學習如何做到這一點。為了節省一些輸入,您可以輸入:
SELECT t1.id, t2.stuff FROM someTable t1 INNER JOIN otherTable t2 ON t1.id=t2.id ;
但是……為什麼這在儲存過程等中是可以接受的?似乎它所做的只是損害了語句的可讀性,同時節省了極少的時間。這樣做是否有任何功能或邏輯原因?它似乎增加而不是消除歧義;我可以看到使用這種格式的唯一可接受的原因是如果您添加了一個語義上有意義的別名——例如
FROM someTable idsTable
——當表名描述性不夠時。表別名是一種不好的做法,還是只是濫用有用的系統?
表別名是一種常見且有用的做法。
- 在查詢中的任何位置引用列時**,它可以節省您的擊鍵次數。**
- 當您引用許多表時,**它提高了 SQL 的可讀性。**別名讓您可以給這些表起一個簡短的名稱,並為它們的使用方式提供一些含義。
- **當您將一個表連接到自身或多次連接到同一個表時,它甚至是必需的。**這是為了讓查詢優化器在您提及列時知道您引用的是哪個表。
以下報告摘錄很好地說明了上述所有要點:
INSERT INTO reporting.txns_extract SELECT -- 30+ columns snipped -- -- Would you want to type out full table names for each -- column here? FROM -- ... and in the JOIN conditions here? billing.financial_transactions ft_cdi -- alias required here INNER JOIN billing.cash_application_links cal ON ft_cdi.key_num = cal.applied_ft_key_num INNER JOIN billing.financial_transactions ft_pmt -- alias required here ON cal.owner_key_num = ft_pmt.key_num LEFT OUTER JOIN billing.invoice_lines invl ON ft_cdi.key_num = invl.invoice_key_num LEFT OUTER JOIN billing.charges chrg ON invl.creator_key_num = chrg.key_num LEFT OUTER JOIN billing.customer_services cs ON chrg.cs_key_num = cs.key_num INNER JOIN billing.billers bil ON ft_cdi.biller_account_key_num = bil.biller_account_key_num INNER JOIN billing.formal_entities fe ON bil.frml_key_num = fe.key_num WHERE -- ... and in the WHERE conditions here? ft_cdi.transaction_type <> 'Payment' -- alias tells me this table is not for payments AND ft_cdi.status = 'Approved' AND ft_pmt.transaction_type = 'Payment' -- alias tells me this table is for payments AND ft_pmt.status = 'Approved' AND ft_cdi.last_user_date > ft_last_user_date_begin AND ft_cdi.last_user_date <= ft_last_user_date_end ;