我已经在各种DBMS(Oracle,SQL Server,MySQL,Access等)上编写SQL已有多年了,而一直困扰着我的一件事是,表和子目录似乎缺乏命名约定。查询别名。
我一直都读过表别名是解决问题的方法,尽管我并不总是使用它们,但是当我这样做时,我总是会卡在要使用的名称之间。我已经从使用描述性名称变为单个字符,例如“ t”,“ s”或“ q”,然后再返回。以我刚刚编写的此MS Access查询为例,即使使用相对简单的查询,我对使用的别名仍然不完全满意,我仍然认为它不那么容易阅读:
SELECT stkTrans.StockName , stkTrans.Sedol , stkTrans.BookCode , SUM(IIF(stkTrans.TransactionType="S", -1 * stkTrans.Units, 0)) AS [Sell Shares] , SUM(IIF(stkTrans.TransactionType="B", stkTrans.Units, 0)) AS [Buy Shares] , SUM(IIF(stkTrans.TransactionType="B", -1 * stkTrans.Price, 0) * stkTrans1.Min_Units) + SUM(IIF(stkTrans.TransactionType="S", stkTrans.Price, 0) * stkTrans1.Min_Units) AS [PnL] , "" AS [Comment] FROM tblStockTransactions AS stkTrans INNER JOIN (SELECT sT1.BookCode , sT1.Sedol , MIN(sT1.Units) AS [Min_Units] FROM tblStockTransactions sT1 GROUP BY sT1.BookCode, sT1.Sedol HAVING (SUM(IIF(sT1.TransactionType="S", 1, 0)) > 0 AND SUM(IIF(sT1.TransactionType="B", 1, 0)) > 0)) AS stkTrans1 ON (stkTrans.BookCode = stkTrans1.BookCode) AND (stkTrans.Sedol = stkTrans1.Sedol) GROUP BY stkTrans.BookCode, stkTrans.StockName, stkTrans.Sedol;
你怎么认为?我以为我会把它扔在那里,看看其他人对此有何感受。
我不知道任何跨数据库命名表/查询别名的规范样式规则,尽管我知道Oracle建议使用三到四个字符的缩写。
我 通常会 避免使用单字母缩写, 除非 查询非常简单,以至于对于那些必须维护代码的人来说,它们应该完全明确-每个查询通常不超过两个或三个表。
通常,我也将避免使用长别名名,这些长别名应符合数据库表命名约定的一般样式,因为不清楚什么是数据库表名和什么是别名。
在所提供的示例中,sT1内联视图内的别名完全没有必要,因为在该内联视图内仅可访问一个表。这样一来,一个表就被连接到查询中的一个内联视图(基于同一个表)-在这种情况下,我将使用s该表s1作为别名,并作为内联视图的别名(以表明它正在查询相同的基础数据库表)。
sT1
s
s1