亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

從兩種SQL表連接寫法來了解過去

 更新時間:2009年08月11日 11:08:37   作者:  
如果想要優(yōu)雅而易于維護且不容易寫錯的代碼,當然用高標準的第二種方法。 如果必要考慮風險這個因素,比如涉及到多種平臺的遷移或者整合,你應該用第一種,起碼在兩個表的情況下他還是比較安全的。
例如:一個二表連接的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

哪種寫法好呢?現(xiàn)在提倡用哪一種?
你喜歡用哪一種?
復制代碼 代碼如下:

select * from a,b where a.id=b.id
select * from a inner join b on a.id=b.id


---這兩個哪個好?

其中11樓的回答最為深入。其實這個問題還是有一定的歷史原因的,不管你習慣什么樣的寫法只要知道來龍去脈就不會再被細枝末節(jié)來迷惑了。以下觀點為個人認識,如有偏差歡迎指正。

簡單的說,前者是ansi sql 86標準后者是ansi sql 92標準(*****) ,這個觀點最容易被人接受。

什么是ansi?美國國家標準局,iso的重要成員之一,1918年就有了。
什么是ansi sql?就是ansi注意到了sql的生產力,于是規(guī)范化了一下。

什么是sql?他是ibm發(fā)明的,oracle發(fā)揚廣大的一門語言。

為什么是兩家公司?。
70年代初因為ibm內部各方利益斗爭激烈,導致某大牛的研究成果只能以論文方式發(fā)表。
70年代末某小公司把此技術用在商業(yè)領域就成了oracle,直到n年后ibm db2才出來。

所以,sql不是ansi 發(fā)明的,ansi 標準也不能通吃所有數(shù)據(jù)庫平臺。

比如下面這個是什么數(shù)據(jù)庫的語法?反正ansi 標準在他那里是報錯的。
select * from (a inner join b on a.id=b.id) inner join c on a.id=c.id

那么在ansi86之前的數(shù)據(jù)庫有哪些?oracle和db2是肯定的了。另外還有一些當時的小角色:Informix,dbase系列等。

而sybase的數(shù)據(jù)庫和SQLServer是86年之后出來的,而前面那個奇怪的join語法的access是90后的。

古老的sqlserver和oracle我都沒有用過,反正在02年用oracle8i時還不支持ansi 92的inner join,他是97年生的。一直到本世紀發(fā)布的oacle9i 才改了過來。用多了t-sql的人會問 left join咋辦,where a.id=b.id(+) 就可以了,人家沒那么笨的,t-sql以前還有*=這樣的表示。


那么這么看貌似ansi的規(guī)范力度不夠?其實不是,國際標準化也不可能一刀切,在ansi92 當中定義了4個級別,n多條款。大意就是大家符合入門級就行了,其他高級別僅供參考,甚至iso根本不會驗證其他級別..而諸如inner join和left join之類的都是過渡級的,囧。


所以我前面打了5個星星的那句話并不是完全正確的,正確的應該是

前者符合ansi 86 標準和ansi 92入門級標準,后者符合ansi92 過渡級標準。

不是oracle8i不符合ansi92,而是沒有符合ansi92的高級別規(guī)范,而完全實現(xiàn)高級別標準的數(shù)據(jù)庫系統(tǒng)是沒有的。

早在oracle7就已經完全符合ansi92了,當然是指入門級,而且他就是ansi92 的模版范例。

--回到上面的話題,這兩個哪個好?
性能當然完全一樣,區(qū)別只是習慣和喜好,但也因為標準級別不同而具有不同的風險。

如果想要優(yōu)雅而易于維護且不容易寫錯的代碼,當然用高標準的第二種方法。
如果必要考慮風險這個因素,比如涉及到多種平臺的遷移或者整合,你應該用第一種,起碼在兩個表的情況下他還是比較安全的。

----
順帶提一句,ansi標準一直在修訂:具體有多少版本就不列舉了,我們得到的好處自然是多多的,比如遞歸、對象、數(shù)組、xml等等在各主流數(shù)據(jù)庫的新版本中都陸續(xù)實現(xiàn)了

相關文章

  • sql基本函數(shù)大全

    sql基本函數(shù)大全

    sql基本函數(shù)大全...
    2007-03-03
  • SQL SERVER 觸發(fā)器介紹

    SQL SERVER 觸發(fā)器介紹

    觸發(fā)器是一種特殊類型的存儲過程,它不同于之前的我們介紹的存儲過程。觸發(fā)器主要是通過事件進行觸發(fā)被自動調用執(zhí)行的。而存儲過程可以通過存儲過程的名稱被調用。
    2013-03-03
  • SQL中創(chuàng)建存儲過程

    SQL中創(chuàng)建存儲過程

    這篇文章主要介紹了SQL中創(chuàng)建存儲過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SQL Server存儲過程入門學習

    SQL Server存儲過程入門學習

    存儲過程(Stored Procedure),是一組為了完成特定功能的SQL 語句,集經編譯后存儲在數(shù)據(jù)庫中,用戶通過指定存儲過程的名字并給出參數(shù),如果該存儲過程帶有參數(shù)來執(zhí)行
    2013-08-08
  • SQL語句實現(xiàn)查詢Index使用狀況

    SQL語句實現(xiàn)查詢Index使用狀況

    這篇文章主要介紹了SQL語句實現(xiàn)查詢Index使用狀況,本文直接給出SQL腳本代碼,需要的朋友可以參考下
    2015-07-07
  • 解析SQL Server中datetimeset轉換datetime類型問題

    解析SQL Server中datetimeset轉換datetime類型問題

    這篇文章主要介紹了SQL Server中datetimeset轉換datetime類型問題淺析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • SQL Server誤區(qū)30日談 第29天 有關堆碎片的誤區(qū)

    SQL Server誤區(qū)30日談 第29天 有關堆碎片的誤區(qū)

    對堆建聚集索引再DROP在我看來是除了收縮數(shù)據(jù)庫之外最2的事了
    2013-01-01
  • SQL SERVER 與ACCESS、EXCEL的數(shù)據(jù)轉換方法分享

    SQL SERVER 與ACCESS、EXCEL的數(shù)據(jù)轉換方法分享

    熟悉SQL SERVER 2000的數(shù)據(jù)庫管理員都知道,其DTS可以進行數(shù)據(jù)的導入導出,其實,我們也可以使用Transact-SQL語句進行導入導出操作
    2012-02-02
  • SqlServer中用exec處理sql字符串中含有變量的小例子

    SqlServer中用exec處理sql字符串中含有變量的小例子

    這篇文章主要介紹了用exec處理sql字符串中含有變量的小例子,有需要的朋友可以參考一下
    2013-12-12
  • SQL?中的For?Xml?Path詳解

    SQL?中的For?Xml?Path詳解

    今天就給大家介紹一下FOR XML PATH,它就是用來處理低版本數(shù)據(jù)庫中數(shù)據(jù)合并的,是一個比較古老的功能了,新版本中也依然還能使用,對SQL?中的For?Xml?Path相關知識感興趣的朋友一起看看吧
    2022-08-08

最新評論