SQL语法树

#1. 为什么会出现SQL语法树?
假设有一个SQL语句

select name,age,count(name) as count_name,
count(id) as count_id from  mytable where id = ?  and name = ?

这是一条sql语句,如果你想运行这个语句(下面写伪代码,具体实现肯定不是这样的但是这是人实现的思想)
1.找到数据库表mytable这里要获取表名简单一个if判断
2.假设里面有1000条数据,那么我们先获取1000条

id name 	age  	sex  	birthday
1	梁川川  	23  	男		2015-04-08
2	梁川川1  23  	男		2015-04-08
3	梁川川2  23  	男		2015-04-08
。。。。。

3.然后根据语句获取我们需要的列,根据name,age,count(name) as count_name,count(id) as count_id获得id name age,这里我们可能需要些很多if去判断

id name 	age  	
1	梁川川  	23  	
2	梁川川1  23  	
3	梁川川2  23  	
。。。。。

4.然后开始过滤 ,后面的就不说了

对于这个问题,开始的设想比较简单,大致过程是:把Sql语句中不相同的关键字和函数名替换掉,如Oracle中的To_Date换成SqlServer的Convert,就可以在SqlServer上执行了.对一些简单的Sql语句这样确实可以,可是对复杂的应用来说,Sql语句可能多层嵌套,函数也有多层嵌套,如果只是简单的替换,代码中必然会有无数的if else,并且出错后的修改和调试几乎是不可能的。

通过对Oracle和SqlServer两种数据库的Sql语法的研究比较,认为必须采用语法分析,把Sql语句解析为一棵语法树,然后再按照语法的转换规

你可能感兴趣的:(大数据-spark,数据库-mysql,Sql,语法树)