正确高效的编写sql语句的境界是将一个复杂问题分解成一个一个简单的小问题。
雨燕fly 2012-07-26 07:12:45 很多人觉得sql简单,select,where的简单例子让人们产生了一种误解:sql不过如此,没有什么精妙可言。可是,我要对那些在心中没有sql地位的人说一句:sql是一门计算机语言,它的编写过程蕴含了精妙的逻辑思维,它的功能十分强大,足可以跟java,c#媲美。我瞧不起那种没有学习几天sql就对它指指点点的人,也瞧不起那种拿到sql程序上上下下看几眼就告诉别人它是干什么的人。我觉得至少需要2个月的时间,每天有2个小时的学习与实践时间才能真正的入门sql,才会体会出sql的精妙的逻辑思维。
上面我说了sql的入门,下面我想说一下sql的提高和编写sql的境界。我认为正确编写sql的境界是:将一个复杂问题分解成一个一个简单的小问题。例如我要实现三个表的联查的时候,我分为以下几个步骤:
(1)首先从port_e1表中查出e1端口的条数:
select * from port_e1;
结果为为295条。
(2)然后联查一下port表和port_e1表:
select
`port`.`PORT_ID` AS `PORT_ID`,
`port`.`CARD_ID` AS `CARD_ID`,
`port`.`PORT_INDEX` AS `PORT_INDEX`,
`port`.`PORT_NAME` AS `PORT_NAME`,
`port_e1`.`LOOPBACK_TYPE` AS `LOOPBACK_TYPE`
from `port`
JOIN `port_e1` ON (`port`.`PORT_ID`= `port_e1`.`PORT_ID`);
得出的记录仍然应该是295条,说明我这一步是正确的。
(3)最后根据左联查,查出e1对应的Z1_TP:
select
`port`.`PORT_ID` AS `PORT_ID`,
`port`.`CARD_ID` AS `CARD_ID`,
`port`.`PORT_INDEX` AS `PORT_INDEX`,
`port`.`PORT_NAME` AS `PORT_NAME`,
`port_e1`.`LOOPBACK_TYPE` AS `LOOPBACK_TYPE`,
ems_cxc_common.Z1_TP AS `Z1_TP`
from `port`
JOIN `port_e1` ON (`port`.`PORT_ID`= `port_e1`.`PORT_ID`)
LEFT JOIN ems_cxc_common ON (port_e1.PORT_ID = ems_cxc_common.Z1_TP)
最后结果仍然是295条。从而最后证明了我所编写的数据库脚本是正确的。
如果编写sql语句之前,没有清晰的条理,最后的结果一定会让你的脑袋瞬间爆炸。千万不要在脑袋里面构建一个sql的主题架构,然后立马运行脚本。别以为sql简单,自己可以掌控全局。当你执行毫无条理的sql,你面对的调试是非常困难的,你会想象不到的困难。
本文有鸟啼音本人原创。未经同意不得转载。
鸟啼音:www.birdsing.net