mysql - 用普通英文写SQL代码,让非程序员也看得懂

标签 mysql sql

是否有一个已知的标准来将SQL 逻辑编写成普通英语 以供非程序员理解?我生成的月度报告需要由客户验证,我认为我没有胆量将 SQL 塞进他的富人喉咙里。 :)

例如,这个:

SELECT cust.*
FROM sl_customers cust
LEFT JOIN sl_orders orders ON cust.id = orders.customer_id
WHERE 
    DATE_FORMAT(orders.delivery_date, '%Y-%m-%d') BETWEEN '2014-08-01' AND '2014-08-31'
    AND DATE_FORMAT(cust.created, '%Y-%m-%d') BETWEEN '2014-08-01' AND '2014-08-31'
    AND orders.status != 'cancelled'
    AND cust.entry = 'New User'
    AND cust.infosrc IN ('Ads - Newspaper', 'Ads - TV', 'Ads - Radio', 'Internet - Social Network')

最佳答案

这里主要是逐行翻译:

SELECT cust.*

获取客户信息...

FROM sl_customers cust
LEFT JOIN sl_orders orders ON cust.id = orders.customer_id

…对于每个订单(以及与订单的客户 ID 关联的客户),…

WHERE 
    DATE_FORMAT(orders.delivery_date, '%Y-%m-%d') BETWEEN '2014-08-01' AND '2014-08-31'

...订单的交货日期在 8 月 1 日至 31 日之间...

(旁白:这部分和下一部分可以更简单地用 SQL 编写为 orders.delivery_date BETWEEN '2014-08-01' AND '2014-08-31'。你这里不需要 DATE_FORMAT()。)

    AND DATE_FORMAT(cust.created, '%Y-%m-%d') BETWEEN '2014-08-01' AND '2014-08-31'

...客户的创建日期在 8 月 1 日至 31 日之间...

    AND orders.status != 'cancelled'

...订单状态不是“已取消”...

    AND cust.entry = 'New User'

…客户输入的是“新用户”(不管那是什么?)…

    AND cust.infosrc IN ('Ads - Newspaper', 'Ads - TV', 'Ads - Radio', 'Internet - Social Network')

…客户的 infosrc 是“广告 - 报纸”、“广告 - 电视”、“广告 - 广播”或“互联网 - 社交网络”。

关于mysql - 用普通英文写SQL代码,让非程序员也看得懂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25757144/

相关文章:

mysql - SQL-Server 和 MySQL 互操作性?

python - 在 Python 中将 SQL 转换为 json

mysql - 执行时间与行数成正比吗?

mysql - 在查询生成器中查询不同的行

python - 将大型记录集与 QTableView 和 QAbstractTableModel 结合使用——仅检索可见行

php - 如何在刷新页面时停止 'Conform form resubmission' 对话框

sql - 如何使用 TSQL 检查 .txt 文件是否存在?

sql - 使用 SQL 查询确定数据库的操作系统?

mysql - 如何根据四列对 My SQL 表的数据进行分组

sql - 替换 Excel 中数据连接中的 SQL 命令文本