一尘不染

SQL表/子查询别名约定

sql

我已经在各种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;

你怎么认为?我以为我会把它扔在那里,看看其他人对此有何感受。


阅读 293

收藏
2021-03-08

共1个答案

一尘不染

我不知道任何跨数据库命名表/查询别名的规范样式规则,尽管我知道Oracle建议使用三到四个字符的缩写。

通常会 避免使用单字母缩写, 除非 查询非常简单,以至于对于那些必须维护代码的人来说,它们应该完全明确-每个查询通常不超过两个或三个表。

通常,我也将避免使用长别名名,这些长别名应符合数据库表命名约定的一般样式,因为不清楚什么是数据库表名和什么是别名。

在所提供的示例中,sT1内联视图内的别名完全没有必要,因为在该内联视图内仅可访问一个表。这样一来,一个表就被连接到查询中的一个内联视图(基于同一个表)-在这种情况下,我将使用s该表s1作为别名,并作为内联视图的别名(以表明它正在查询相同的基础数据库表)。

2021-03-08