SQL基础:《SQL HACKS》第一章,总共列举了6个tips,在命令中运行SQL、管道输入SQL等,下述为我对这6个tips的评析。
1、在命令中运行SQL
由于现在数据库软件都有强大的客户端管理工具,因此程序员完全可以利用客户端UI快速、方便的处理绝大多数sql操作,如postgresql的pgadmin(俗称大象)。但是在这3种情形下,我认为在命令中运行sql效率更高。
1)操作系统不能运行数据库客户端工具;
2)客户端没有的功能,如sybase数据库的查看对象依赖等;
3)事务并发测试、锁测试等,多个命令框运行sql语句是件很有乐趣的事情。
关于posgtresql,命令运行框,我认为大家只要熟知一个命令即可: /?,通过这个命令可以列举出所有pg的简单命令及使用方法。
2、在程序中连接到SQL上
对于Java程序员来说,程序员似乎无需关注sql连接,因为开发框架基本上都有数据库连接的管理功能,开发人员只要取连接即可,连接用完之后,框架基本上会自动回收该连接。即使如此,开发人员也需要详细了解JDBC编程。
3、执行条件INSERT
Insert是比较常见的一种数据库操作,开发人员只要关注1点:insert表的值可以来自select结果,如下:
1)可以 insert into table1(col1,col2,col3) values (‘v1’, ‘v2’,’v3’);
2)也可以 insert into table1(col1,col2,col3)
Select ‘v1’, ‘v2’, ‘v3’
4、更新数据库
Update也是很常见的一种数据库操作,开发人员需要注意2点。
1)update是基于行的,不是基于列的,因此在sql中想交换2列的值可以写如下sql:
Update table1 set col1 = col3, col3=col1 where …,如此满足条件行的col1, col3就相互交换了。
2)update操作时,必须注意不能覆盖之前的更新,这就需要我们在where后带额外条件,如原值、或者时间戳等。
5、使用sql求解填字游戏
这条Hack,我认为不应该在此列出,使用sql求解填字游戏说白了就是字符串函数的灵活运用。如作者提到的:
在字典中查找具有开头3个字符与结尾3个字符相同单词sql:
Select word from words
Where word like ‘%’ || substring(word,1,3)
And length(word)>3
这也侧面说明,熟知sql确实可以让sql可以处理更多的事情。
6、不反复执行相同的计算
作者给出的例子:
Select income, overhead,
(income – income*overhead/100) as residual,
0.2*(income – income*overhead/100) as est,
0.1*(income – income*overhead/100) as admin,
0.05*(income – income*overhead/100) as rsrv
From contract;
该sql一直在重复计算余额(income – income*overhead/100),可以简单写成如下:
Select income, overhead, residual,
0.2 * residual as est, 0.1*residual as admin, 0.05*residual as rsrv
From (select income, overhead, (income – income*overhead/100) as residual from contract) subquery;
评析:有时候子查询可以当临时变量来用。