用普通英语编写SQL代码,供非程序员理解

时间:2014-09-10 04:08:23

标签: 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')

3 个答案:

答案 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代替