是否存在将 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')
答案 0 :(得分:1)
这是一个主要是逐行翻译:
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')
...而客户的信息是“广告 - 报纸”,“广告 - 电视”,“广告 - 广播”或“互联网 - 社交网络”。
答案 1 :(得分:0)
我不认为这是一个标准,但如果我试图向非SQL演讲者解释这一点,我会说:
这为我提供了8月份创建的所有新客户 谁拥有有效(未取消)的订单 八月份交付,来自 报纸,电视或广播广告,或通过社交媒体
答案 2 :(得分:0)
对于普通英语"没有#34; SQL逻辑。基本上,SQL是供开发人员理解的,而不是没有开发技能的高管。如果你有一些BA技能,如数据流模型图,数据流图或数据库图,那么你可以获得的最接近的是(专业)设计图。如果你不这样做,那就简单地用简单的英文写一下......
获取" new"来自广告,社交网络等的客户"有一个"有效订单"将于8月交付
另外,请考虑使用INNER JOIN
代替