mysql與oracle在groupby語句上的細節差異

來源:互聯網
上載者:User

標籤:

前言

之所以去糾那麼細節的問題,是因為之前有過一個這樣的情境:

有個同學,給了一條資料庫的語句給我,問,為啥這樣子的語句在oracle語句下執行不了。

select * from xx where xxx is not null group by yy;

 

拿到這條語句的第一時間,其實,我也並沒有看出是什麼錯。仔細一想之後才想起,在基礎的SQL中包含該group by的select語句,select語句部分是有限制的,一般是彙總函式和group by 的欄位。隨後,我就告訴他,這條語句本身是有錯的。

然而,我同學卻反駁說,這條語句他在其他資料庫中是能啟動並執行。然後,就有了這篇部落格

細說

為了詢證,我詢問了同學他說能啟動並執行資料庫是什麼資料庫。結果同學說是mysql。

,相同類型的語句,在oracle和mysql執行,一個是可以正常啟動並執行,而在oracle上,卻是沒能通過語句的校正。為啥呢?

回過頭看看,現在市場上的關係型資料庫可謂不少,其實他們都在SQL語句的解析上,都遵循著SQL國際標準,只是各自遵循的嚴格程度不同而已,同時,各個資料庫也在SQL標準上擴充開了,有了自己支援的特色的資料庫語句,如mysql的limit。也就是這樣,才有了上述情況。SQL標準中,其實在包含group by 的 select 語句能查詢的資料是有限制的。Oracle比較嚴格的遵守了這一限制,而mysql 則並沒有,這樣才使得使用慣了mysql的朋友在剛開始的時候有這樣的錯覺,覺得明明正確的語句為啥就是執行不了。

思考

在標準這方面,要論對錯,其實是沒必要的。很多時候,標準制定出來,只是一種美好的期望而已。然而,作為技術,其實應該的更多的是迴歸本質,更多的瞭解原理,就不會因為某個工具並沒嚴格要求的東西,養成不良的習慣。

 

此博文同步更新於 http://blog.e65535.com/2016/05/26/mysql-oracle-groupby/

 

mysql與oracle在groupby語句上的細節差異

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.