以文本方式查看主题 - 搭建论坛 (http://bbs.diylsoft.com:8118/starforum/index.asp) -- 数据库交流 (http://bbs.diylsoft.com:8118/starforum/list.asp?boardid=6) ---- 【数据库·经典讨论】两表连接的SQL语句 (http://bbs.diylsoft.com:8118/starforum/dispbbs.asp?boardid=6&id=30268) |
-- 作者:dbs -- 发布时间:2010-6-9 22:22:23 -- 【数据库·经典讨论】两表连接的SQL语句 两表连接的SQL语句:这两种写法哪种好?现在提倡用哪一种呢? 例如:一个二表连接的SQL,有两种写法: (2)select A.c1,A.c2,B.c1,B.c2 哪种写法好呢?现在提倡用哪一种? 我习惯用(1) ---这两个哪个好? 其中11楼的回答最为深入。其实这个问题还是有一定的历史原因的,不管你习惯什么样的写法只要知道来龙去脉就不会再被细枝末节来迷惑了。以下观点为个人认识,如有偏差欢迎指正。 简单的说,前者是ansi sql 86标准后者是ansi sql 92标准(*****) ,这个观点最容易被人接受。 什么是ansi?美国国家标准局,iso的重要成员之一,1918年就有了。 什么是sql?他是ibm发明的,oracle发扬广大的一门语言。 为什么是两家公司?。 所以,sql不是ansi 发明的,ansi 标准也不能通吃所有数据库平台。 比如下面这个是什么数据库的语法?反正ansi 标准在他那里是报错的。 那么在ansi86之前的数据库有哪些?oracle和db2是肯定的了。另外还有一些当时的小角色:Informix,dbase系列等。 而sybase的数据库和SQLServer是86年之后出来的,而前面那个奇怪的join语法的access是90后的。 古老的sqlserver和oracle我都没有用过,反正在02年用oracle8i时还不支持ansi 92的inner join,他是97年生的。一直到本世纪发布的oacle9i 才改了过来。用多了t-sql的人会问 left join咋办,where a.id=b.id(+) 就可以了,人家没那么笨的,t-sql以前还有*=这样的表示。
前者符合ansi 86 标准和ansi 92入门级标准,后者符合ansi92 过渡级标准。 不是oracle8i不符合ansi92,而是没有符合ansi92的高级别规范,而完全实现高级别标准的数据库系统是没有的。 早在oracle7就已经完全符合ansi92了,当然是指入门级,而且他就是ansi92 的模版范例。 --回到上面的话题,这两个哪个好? 如果想要优雅而易于维护且不容易写错的代码,当然用高标准的第二种方法。 ---- |