sql - 重构SQL

标签 sql refactoring

是否有任何类似于此列表的重构 SQL 的正式技术 here这是代码吗?

我目前正在对特定报告进行大规模查询,我确信这里有很大的重构空间,而我只是在一点一点地摸索着。

最佳答案

我从未见过像您提供的示例那样详尽的列表。

我见过的重构sql最有效的方法是使用with statement 。 它允许您将 sql 分解为可管理的部分,这些部分通常可以独立测试。此外,它还可以重用查询结果,有时可以使用系统临时表。这是非常值得花精力去研究的。

这是一个愚蠢的例子

WITH 
mnssnInfo AS
(
    SELECT SSN, 
           UPPER(LAST_NAME), 
           UPPER(FIRST_NAME), 
           TAXABLE_INCOME,          
           CHARITABLE_DONATIONS
    FROM IRS_MASTER_FILE
    WHERE STATE = 'MN'                 AND -- limit to Minne-so-tah
          TAXABLE_INCOME > 250000      AND -- is rich 
          CHARITABLE_DONATIONS > 5000      -- might donate too
),
doltishApplicants AS
(
    SELECT SSN, SAT_SCORE, SUBMISSION_DATE
    FROM COLLEGE_ADMISSIONS
    WHERE SAT_SCORE < 100          -- Not as smart as the average moose.
),
todaysAdmissions AS
(
    SELECT doltishApplicants.SSN, 
           TRUNC(SUBMISSION_DATE)  SUBMIT_DATE, 
           LAST_NAME, FIRST_NAME, 
           TAXABLE_INCOME
    FROM mnssnInfo,
         doltishApplicants
    WHERE mnssnInfo.SSN = doltishApplicants.SSN
)
SELECT 'Dear ' || FIRST_NAME || 
       ' your admission to WhatsaMattaU has been accepted.'
FROM todaysAdmissions
WHERE SUBMIT_DATE = TRUNC(SYSDATE)    -- For stuff received today only

我喜欢它的另一件事是,这种形式允许您将过滤与连接分开。因此,您可以经常复制子查询,并单独执行它们以查看与它们关联的结果集。

关于sql - 重构SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507359/

相关文章:

javascript - 如何在 javascript 中重构 switch 以获得更清晰的代码?

sql - 如何从 [存储过程] 中选择 [临时表1] = [子选择 1]、[临时表2] = [子选择 2]

mysql - 在重复键更新时将 CSV 导入 MySQL

java - 使用泛型避免在这个抽象工厂中陷入沮丧

sql - 有没有一个重构 SQL 的工具,有点像 ReSharper for SQL

visual-studio-2008 - 一次在多个属性上使用 "convert to auto property"

typescript - 在 Visual Studio Code 中提取 TypeScript 方法

mysql GROUP BY 与 DISTINCT 不匹配

sql - 聚合查询避免外部磁盘排序

sql - 使用自定义 "as"语句将行转换为列