表別名有什么用途?何時(shí)需要它?如何處理它?-創(chuàng)新互聯(lián)

SQL Prompt根據(jù)數(shù)據(jù)庫(kù)的對(duì)象名稱、語(yǔ)法和代碼片段自動(dòng)進(jìn)行檢索,為用戶提供合適的代碼選擇。自動(dòng)腳本設(shè)置使代碼簡(jiǎn)單易讀--當(dāng)開(kāi)發(fā)者不大熟悉腳本時(shí)尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。此外,用戶還可根據(jù)需要進(jìn)行自定義,使之以預(yù)想的方式工作。

成都創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè)|網(wǎng)站維護(hù)|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋陽(yáng)臺(tái)護(hù)欄等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身制作品質(zhì)網(wǎng)站。

本文探索了表別名的作用,解釋了何時(shí)需要表別名,并且說(shuō)明了它們的一般用途,對(duì)別名的合理命名的必要性,以及SQL Prompt如何處理它們。


表別名的主要目的(除了需要使用別名的情況之外)是使SQL查詢更易于閱讀和理解。不,這不是我輸入的錯(cuò)誤。別名并沒(méi)有使鍵入SQL查詢變得更加容易和快捷。如果您使用的是SQL Prompt,則尤其如此,因?yàn)樗鼤?huì)為您完成所有鍵入操作。

如果啟用其“分配別名”選項(xiàng),則在您輸入SQL語(yǔ)句時(shí),SQL Prompt會(huì)自動(dòng)建議一個(gè)或兩個(gè)字符的別名,只是因?yàn)樗仨毺峁┠承﹥?nèi)容但不能提供含義。這樣做不是因?yàn)楹?jiǎn)短的無(wú)意義的名稱更好。這僅意味著數(shù)據(jù)庫(kù)開(kāi)發(fā)人員應(yīng)改進(jìn)默認(rèn)別名以提供含義。

在哪里可以使用表別名?

在標(biāo)準(zhǔn)SQL中,僅在SELECT語(yǔ)句中使用別名。 可以說(shuō),您只能在具有FROM子句的語(yǔ)句中使用它們,因?yàn)镾QL Server的語(yǔ)法允許它在UPDATE和DELETE語(yǔ)句中使用FROM子句。 使用表別名時(shí),您只是為表引用的實(shí)例提供了特定的名稱,而不是實(shí)際的表。只有該引用才是別名。

我是否總是需要限定列名?

在SQL中,如果列名本身是模棱兩可的,則只需要使用對(duì)表源的引用來(lái)限定列名,因?yàn)榱忻旧砜赡軄?lái)自FROM子句中的一個(gè)或多個(gè)表源。在SQL Server中,使用合格的列名無(wú)論如何都會(huì)使解析器更輕松,并使查詢更易于閱讀。

但是,如果沒(méi)有JOIN子句,則在列名中添加任何種類的表限定符(無(wú)論是否帶別名)都是完全多余的,不應(yīng)使用。

我是否總是需要使用表別名?

要使一列符合其表的資格,通常不必使用表別名(在ANSI SQL中也稱為關(guān)聯(lián)名)。您可以只使用提供該列的表源的名稱。

僅當(dāng)引用不具有名稱的表源(例如派生表或行集函數(shù))或使用命名表源(例如表,視圖或表-)時(shí),才必須使用別名值函數(shù),在同一查詢中不止一次。一般而言,如果表源已經(jīng)有了合適的名稱,那么為什么要提供另一個(gè)名稱呢?通常,您這樣做只是為了使查詢的意圖更加清晰。如果沒(méi)有,那么它就會(huì)成為障礙。

什么時(shí)候需要?jiǎng)e名?

需要使用別名的原因之一是基表的名稱中包含非法字符。您可能看起來(lái)很生氣,說(shuō)您永遠(yuǎn)不會(huì)屈服于此,但是另一方面,在表名限定符的開(kāi)頭使用“@”是不合法的,因此表變量是一個(gè)問(wèn)題。例如,如果不為表變量提供別名,則必須提供方括號(hào)定界符以通過(guò)其全名引用它。當(dāng)然,如果表中確實(shí)包含非法字符,則表別名可以使您免于討厭的方括號(hào)。

您還必須使用表別名來(lái)限定一列,而不是依賴于表名(如果該表位于在JOIN中被兩次使用的表中)。 例如:

SELECT?Object_Schema_Name(TablesEtc.object_id)?+?'.'?+?TablesEtc.name?AS?TableName,
????Constraints.name?+?'?('?+?RTrim(Constraints.type)
??????+?')'?COLLATE?DATABASE_DEFAULT?AS?[Constraint]
??FROM?sys.objects?AS?TablesEtc
????INNER?JOIN?sys.objects?AS?Constraints
??????ON?Constraints.parent_object_id?=?TablesEtc.object_id
?????WHERE?TablesEtc.is_ms_shipped=0
?????ORDER?BY?TableName

表別名有什么用途?何時(shí)需要它?如何處理它?

sys.objects與sys.objects結(jié)合在一起,因此如果不使用別名就無(wú)法正常工作。 通過(guò)為他們選擇有意義的名稱,我們還可以避免錯(cuò)誤。

如果要加入表源(例如查詢),則需要提供一個(gè)名稱。不存在默認(rèn)名稱。在這里,我們將從多行值創(chuàng)建兩個(gè)表源,然后將它們聯(lián)接。

SELECT?numbers.number,?Coalesce(Names.NameForFrequency,'frequently')?AS?HowManyTimes??
FROM?
????(VALUES(0),(1),(2),(3),(4),(5))?AS?numbers(number)
?LEFT?OUTER?join
????(VALUES(0,'never'),(1,'once'),(2,'twice'),(3,'thrice'))?AS?Names(number,NameForFrequency)
ON?numbers.number=Names.number

表別名有什么用途?何時(shí)需要它?如何處理它?

在第一個(gè)示例中,我們使用了AS關(guān)鍵字來(lái)表明我們正在引入別名。它是可選的,因此您可以省略它,但這是一個(gè)不好的做法,因?yàn)樗鼤?huì)使您的意圖變得不太清楚。

SQL Prompt如何處理別名

啟用了“分配別名”選項(xiàng)(“SQL Prompt”>“選項(xiàng)”>“插入的代碼”>“別名”)后,SQL Prompt將自動(dòng)為表源分配別名。但是,它無(wú)法猜測(cè)SQL背后的故事,因此它不能為您提供有意義的別名,只能提供縮寫(xiě)。除非您提供當(dāng)前的命名約定作為自定義別名,否則它將盡可能使用表或視圖名稱的首字母生成別名。如果該初始字符已被使用,它將使用兩個(gè)字符。

如果您很不幸地被困在“tibbling”約定中(所有表都帶有tbl前綴),則可以告訴SQL Prompt忽略它們(通過(guò)將它們添加到“Prefixes to ignore”列表中)。 如果名稱帶有下劃線或連字符,或者由兩個(gè)CamelCase單詞組成(例如CustomerAccounts),則在生成兩個(gè)字母的別名時(shí),SQL Prompt會(huì)將其考慮在內(nèi)。

否則,當(dāng)在自聯(lián)接中使用SQL Prompt時(shí),SQL Prompt會(huì)為同一表創(chuàng)建其他別名。這是我們之前看到的相同代碼,用于獲取表的名稱及其約束,但帶有SQL Prompt的別名建議。它消除了歧義,但是在閱讀此版本時(shí),您是否會(huì)如此自信,以確保該ON子句正確無(wú)誤,甚至可以理解您打算提供的內(nèi)容和方式?

SELECT?Object_Schema_Name(O.object_id)?+?'.'?+?O.name?AS?TableName,
??O2.name?+?'?('?+?RTrim(O2.type)?+?')'?COLLATE?DATABASE_DEFAULT?AS?[Constraint]
??FROM?sys.objects?AS?O
????INNER?JOIN?sys.objects?AS?O2
??????ON?O2.parent_object_id?=?O.object_id
??WHERE?O.is_ms_shipped?=?0
??ORDER?BY?TableName;

當(dāng)SQL Prompt分配別名時(shí),它將在當(dāng)前查詢編輯器窗口中記住該別名,正如您在處理查詢并為其添加子句時(shí),從建議框中為您提供的建議中看到的那樣。

如果現(xiàn)有代碼使用聯(lián)接并且不使用表別名,則SQL Prompt將使用綠色曲線在表引用下劃線,表示違反了其ST010代碼分析樣式規(guī)則。就個(gè)人而言,我更喜歡禁用此規(guī)則,除非遵循一種樣式指南,該指南要求涉及多個(gè)表源的每個(gè)SELECT都使用別名作為限定符。更直接地,Prompt還強(qiáng)調(diào)了違反MI003的不合格列名。

表別名有什么用途?何時(shí)需要它?如何處理它?

如果添加表別名,然后運(yùn)行Format SQL命令,它將自動(dòng)使用別名來(lái)限定相關(guān)的列名(如果啟用了“限定對(duì)象名”操作)。

將自定義別名添加到SQL Prompt

您可以根據(jù)已建立的命名約定為表或視圖指定用戶定義的別名。與其他提示選項(xiàng)分開(kāi),SQL Prompt當(dāng)前不支持自定義別名的導(dǎo)入或?qū)С?,因此您必須一次鍵入一個(gè)。

要添加用戶定義的別名,請(qǐng)?jiān)凇斑x項(xiàng)”窗口的“別名”窗口的頭部。在“自定義別名”標(biāo)題下,單擊“新建”,然后輸入對(duì)象的名稱及其別名,然后單擊“保存”。

即使您可以提供有意義的自定義別名,它們的添加長(zhǎng)度也可能足以阻止它們適合“建議”框中建議的“ON表達(dá)式”。 在以下屏幕截圖中,我使用了一個(gè)愚蠢的別名TheTablesAsListedInTheSystemViews,只是為了說(shuō)明我的意思。 它溢出了建議框。

表別名有什么用途?何時(shí)需要它?如何處理它?

在這種情況下,一種更簡(jiǎn)單的解決方案是在查詢或例程完成后但保存之前,使用搜索和替換來(lái)更改Prompt提供的默認(rèn)值。

總結(jié)

表別名有時(shí)是必不可少的,通常對(duì)于幫助闡明更復(fù)雜的SQL查詢的目的很有用。 但是,它們并非始終都是必需的,如果沒(méi)有JOIN,則在FROM子句中使用它們不會(huì)有任何好處。

使用SQL Prompt,我選擇更改建議的簡(jiǎn)短別名,以提供更多解釋性的含義。它沒(méi)有怨恨,而是根據(jù)我選擇的自定義別名為我提供建議。這將節(jié)省大量的單調(diào)鍵入,對(duì)此我深表感謝。

新聞名稱:表別名有什么用途?何時(shí)需要它?如何處理它?-創(chuàng)新互聯(lián)
文章源于:http://muchs.cn/article14/ejode.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司、定制開(kāi)發(fā)、網(wǎng)站營(yíng)銷、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化