gpt4 book ai didi

SQL 表/子查询别名约定

转载 作者:行者123 更新时间:2023-12-05 04:18:46 25 4
gpt4 key购买 nike

多年来,我一直在各种 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 建议使用三到四个字符的缩写。

一般会避免使用单字母缩写,除了在查询非常简单的情况下,对于任何必须维护代码的人来说,这些缩写应该是完全明确的——通常没有每个查询超过两个或三个表。

我通常还会避免使用符合数据库表命名约定的一般风​​格的长别名,因为它可能变得不清楚什么是数据库表名以及什么是别名。

在提供的示例中,内联 View 中的别名 sT1 完全没有必要,因为在内联 View 中只有一个表被访问。这使得一个表在查询中连接到一个内联 View (基于同一个表)——在这种情况下,我会使用 s 作为表的别名,而 s1 作为内联 View 的别名(表明它正在查询相同的底层数据库表)。

关于SQL 表/子查询别名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com