我们每天都在写很多查询,写了很多“选择,来自,分组等等。”
让我们看一个简单的查询:
SELECT * FROM table
WHERE column1 = 'value'
GROUP BY column2
ORDER BY column2
HAVING count(column2) > 10
上面有104个字符。但是,真正的信息是在62个字符以上,而42个字符只是垃圾,如“选择,在哪里,分组等”。因此,我的一半查询包含无用的字符。
我一次又一次地写这些是无聊的。那么,是否可以使用别名而不是这些语句? 不久,我想编写一个类似的查询:
S * F table
W column1 = 'value'
G column2
O column2
H count(column2) > 10
是否可以在SQL中使用它?
答案 0 :(得分:3)
您需要为自己的方言编写自己的解析器并将其转换为真正的SQL,然后考虑让人们试图直接看到试图阅读您的代码并向他们解释为什么他们可以使用它们。了解你的代码,因为你想保存42个字符。
这42个字符不是垃圾",让我们解决这个问题,因为这是真正的问题。人们误以为编程语言与计算机交谈。他们不是。他们是在和人交谈。
如果计算机语言与计算机交谈,那么我们都会在汇编中进行编程,那就是那样。计算机语言的存在是为了人们编写,阅读,修改和维护代码的好处和理解。为了读者的利益,我们说where
而不是w
(并且也避免与其他关键字,表格和列名称冲突),就像您为列命名一样{ {1}}而非name
。
此外,SQL是一种标准。 SQL是一个非常古老且无处不在的标准,很多人都知道并且很熟悉。这意味着他们可以坐下来使用您的代码,并有合理的机会找出您要查询的内容。或者,如果他们不了解SQL,他们可以查阅任意数量的教程和学习资源。
一旦你引入了特殊的雪花方言,那一切都消失了。现在,每个阅读代码的人都必须学习特殊的SQL方言。您现在负责为您的特殊方言编写所有文档和学习材料,并确保需要了解您的代码的人可以使用它。通过尝试保存42个字符,您为自己和每个阅读代码的人添加了大量工作。
出于多种原因,您最好使用SQL构建器库,Knex.js就是一个例子。除了平滑SQL方言之间的差异之外,它还允许您重用现有语句。说你想从表中得到一些东西......
n
然后可以添加约束
var all_things = knex.select().table('table')
然后可能订购结果
var just_one_thing = all_from_table.where({ column1: 'value' })
通过添加现有的,可能很复杂的查询,您可以大大减少需要编写的重复SQL的数量。
也许可以学习更快地触摸类型。
答案 1 :(得分:0)
Schwern的回答是针对目标的。但是,您不需要编写解析器来减少常用短语的输入。您可以使用宏扩展(以多种方式)来实现相同目标的大多数。
例如,使用AutoHotKey,我可以定义这样的替换。
.innerHTML
键入::selectstmt::SELECT * FROM table`nWHERE column1 = 'value'`nGROUP BY column2`nORDER BY column2`nHAVING count(column2) > 10
会扩展为
selectstmt