sql曾经让人惊喜。一个初哥刚刚写程序的时候,发现需要连接两张表,并且做些排序之类的工作。在不知道sql的情况下,觉得真的很麻烦:需要自己做循环,装入A和b两张表,
循环一个,然后根据键值和另一个表的键值匹配,然后自己做排序。想起来好头痛。我和他说,OK,这是sql可以搞定的。
只要select * from a join b on a.id =b.aid order by c 。就这么简单。别笑他,他觉得兴奋而雀跃。
10年过去了,一点点发现sql真的很有改进空间。试着举例。
1. 单表查询可以更加简洁。
当我们需要带条件的查询一个表的时候,需要
select * from A where b = '' and c = 0
难道不可以
A?b=''&c=0
看起来是不是同样的效果,但是清爽的多呢?
2. 多表查询可以更简洁。
当我需要join的时候,比如
select * from a join b on a.id =b.aid order by c
好,我就这样写吧。
然后当我在其他地方需要a和b的时候,我还是一样的需要
a join b on a.id =b.aid
一个系统,这样的join非常多,于是这个on条件就要到处写。
可真实情况是:一旦表设计确定,a和b的链接基本上都是用a.id ,b.aid这样的主键和外键来链接的。
这样在系统中就有大量的重复了。
为什么不一次配置,然后到处使用这样的on条件呢?
比如:
set a join b on a.id =b.aid
select * from a ,b order by c
3. sql很笨。
有时候,我希望来一个select a* from b 把b表的所有a开头的字段都选择出来,可是sql不行。它一定要select ad,ae,af from b 一板一眼的把所有需要的字段写完。
或者我希望把b表的除了a字段外的其他字段选择出来,比如select [ all field except a] from b 。当然这样也是不行的。
可见,sql是冗余的,是不够清爽的。
有人说,hi,语法吗?关系不大了。请问为什么很多人喜欢c的语法,而不喜欢pascal的呢?为什么大量的语言都采用了c的语法,而不是pascal,或者该死的cobol呢?程序员总是
喜欢更加简洁的。
有人说,hi,重复一点有什么关系呢,还不是为了让人更加容易阅读吗?可是让人容易阅读并不非要冗余。重复带来的问题就很麻烦了。重构技术解决的就是冗余问题,sql生出来
的年代太早,并不会考虑到重构技术的要求;
有人说,hi,sql是标准啊。没有错,标准是够害人的。这些年计算机通用语言竞争激烈,方兴未艾,而sql一家独大也久矣,我们至少应该对新的sql寄予希望。
sql太老了,并且经年不变,需要引入新的血液了。
我认为htsql就是这样的尝试,它定位于初哥使用,而我的看法是它应该用htsql的这样的语言设计替代掉苍老的sql。
看看这个地址,很简单。也许你会喜欢它。
http://htsql.org/doc/tutorial.html