专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » sql多表连接语句:两表连接的SQL语句 »正文

sql多表连接语句:两表连接的SQL语句

来源: 发布时间:星期一, 2009年8月17日 浏览:0次 评论:0
两表连接SQL语句:这两种写法哪种好?现在提倡用哪种呢? 例如:个 2表连接SQL,有两种写法:
(1)select A.c1,A.c2,B.c1,B.c2
from table1 A,table2 B
where A.id=B.id

(2)select A.c1,A.c2,B.c1,B.c2
from table1 A join table2 B
on A.id=B.id

哪种写法好呢?现在提倡用哪种?
你喜欢用哪种?

我习惯用(1)

---这两个哪个好?

其中11楼回答最为深入其实这个问题还是有历史原因不管你习惯什么样写法只要知道来龙去脉就不会再被细枝末节来迷惑了以下观点为个人认识如有偏差欢迎指正

简单前者是ansi sql 86标准后者是ansi sql 92标准(*****) 这个观点最容易被人接受

什么是ansi?美国国家标准局iso重要成员的1918年就有了
什么是ansi sql?就是ansi注意到了sql生产力于是规范标准化了

什么是sql?他是ibm发明oracle发扬广大门语言

为什么是两家公司?
70年代初ibm内部各方利益斗争激烈导致某大牛研究成果只能以论文方式发表
70年代末某小公司把此技术用在商业领域就成了oracle直到n年后ibm db2才出来

所以sql不是ansi 发明ansi 标准也不能通吃所有数据库平台

比如下面这个是什么数据库语法?反正ansi 标准在他那里是报错
select * from (a inner join b _disibledevent=> 那么在ansi86的前数据库有哪些?oracle和db2是肯定另外还有些当时小角色:Informixdbase系列等

而sybase数据库和SQLServer是86年的后出来而前面那个奇怪join语法access是90后

古老sqlserver和oracle我都没有用过反正在02年用oracle8i时还不支持ansi 92inner join他是97年生直到本世纪发布oacle9i 才改了过来用多了t-sql人会问 left join咋办where a.id=b.id(+) 就可以了人家没那么笨t-sql以前还有*=这样表示


那么这么看貌似ansi规范标准力度不够?其实不是国际标准化也不可能刀切在ansi92 当中定义了4个级别n多条款大意就是大家符合入门级就行了其他高级别仅供参考甚至iso根本不会验证其他级别..而诸如inner join和left join的类都是过渡级


所以我前面打了5个星星那句话并不是完全正确正确应该是

前者符合ansi 86 标准和ansi 92入门级标准后者符合ansi92 过渡级标准

不是oracle8i不符合ansi92而是没有符合ansi92高级别规范标准而完全实现高级别标准数据库系统是没有

早在oracle7就已经完全符合ansi92了当然是指入门级而且他就是ansi92 模版范例

--回到上面话题这两个哪个好?
性能当然完全区别只是习惯和喜好但也标准级别区别而具有区别风险

如果想要优雅而易于维护且不容易写错代码当然用高标准第 2种思路方法
如果必要考虑风险这个原因比如涉及到多种平台迁移或者整合你应该用第起码在两个表情况下他还是比较安全

----
顺带提ansi标准直在修订:具体有多少版本就不列举了我们得到好处自然是多多比如递归、对象、、xml等等在各主流数据库新版本中都陆续实现了

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: