仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 954|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之两表毗连的SQL语句

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
2008年1月16号MySQLAB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。</p>两表毗连的SQL语句:这两种写法哪一种好?如今倡始用哪种呢?比方:一个二表毗连的SQL,有两种写法:
(1)selectA.c1,A.c2,B.c1,B.c2
fromtable1A,table2B
whereA.id=B.id
(2)selectA.c1,A.c2,B.c1,B.c2
fromtable1Ajointable2B
onA.id=B.id
哪一种写法好呢?如今倡始用哪种?
你喜好用哪种?
我习气用(1)
---这两个哪一个好?
个中11楼的回覆最为深切。实在这个成绩仍是有必定的汗青缘故原由的,不论你习气甚么样的写法只需晓得前因后果就不会再被细枝小节来利诱了。以下概念为团体熟悉,若有偏向接待斧正。
复杂的说,前者是ansisql86尺度后者是ansisql92尺度(*****),这个概念最简单被人承受。
甚么是ansi?美国国度尺度局,iso的主要成员之一,1918年就有了。
甚么是ansisql?就是ansi注重到了sql的临盆力,因而标准化了一下。
甚么是sql?他是ibm创造的,oracle发扬宽大的一门言语。
为何是两家公司?。
70年月初由于ibm外部各方好处奋斗剧烈,招致某年夜牛的研讨功效只能以论文体例宣布。
70年月末某小公司把此手艺用在贸易范畴就成了oracle,直到n年后ibmdb2才出来。
以是,sql不是ansi创造的,ansi尺度也不克不及通吃一切数据库平台。
好比上面这个是甚么数据库的语法?归正ansi尺度在他那边是报错的。
select*from(ainnerjoinbona.id=b.id)innerjoincona.id=c.id
那末在ansi86之前的数据库有哪些?oracle和db2是一定的了。别的另有一些事先的小脚色:Informix,dbase系列等。
而sybase的数据库和SQLServer是86年以后出来的,而后面谁人奇异的join语法的access是90后的。
陈旧的sqlserver和oracle我都没有效过,归正在02年用oracle8i时还不撑持ansi92的innerjoin,他是97年生的。一向到本世纪公布的oacle9i才改了过去。用多了t-sql的人会问leftjoin咋办,wherea.id=b.id(+)就能够了,人家没那末笨的,t-sql之前另有*=如许的暗示。

那末这么看貌似ansi的标准力度不敷?实在不是,国际尺度化也不成能一刀切,在ansi92傍边界说了4个级别,n多条目。粗心就是人人切合进门级就好了,其他初级别仅供参考,乃至iso基本不会考证其他级别..而诸如innerjoin和leftjoin之类的都是过渡级的,濉

以是我后面打了5个星星的那句话并非完整准确的,准确的应当是
前者切合ansi86尺度和ansi92进门级尺度,后者切合ansi92过渡级尺度。
不是oracle8i不切合ansi92,而是没有切合ansi92的初级别标准,而完整完成初级别尺度的数据库体系是没有的。
早在oracle7就已完整切合ansi92了,固然是指进门级,并且他就是ansi92的模版典范。
--回到下面的话题,这两个哪一个好?
功能固然完整一样,区分只是习气和喜欢,但也由于尺度级别分歧而具有分歧的风险。
假如想要文雅而易于保护且不简单写错的代码,固然用高尺度的第二种办法。
假如需要思索风险这个要素,好比触及到多种平台的迁徙大概整合,你应当用第一种,最少在两个表的情形下他仍是对照平安的。
----
顺带提一句,ansi尺度一向在订正:详细有几版本就不枚举了,我们失掉的优点天然是多多的,好比递回、工具、数组、xml等等在各支流数据库的新版本中都连续完成了
为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-19 06:18:17 来自手机 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
分手快乐 该用户已被删除
板凳
发表于 2015-1-26 07:36:08 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
兰色精灵 该用户已被删除
地板
发表于 2015-2-4 13:54:34 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
爱飞 该用户已被删除
5#
发表于 2015-2-10 01:34:44 | 只看该作者
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
admin 该用户已被删除
6#
发表于 2015-2-28 14:49:25 | 只看该作者
相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐
活着的死人 该用户已被删除
7#
发表于 2015-3-10 00:18:25 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
蒙在股里 该用户已被删除
8#
发表于 2015-3-17 03:49:42 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-23 18:19:31 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 19:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表