oracle中not exists用法 oracle in和exists的區(qū)別?
oracle in和exists的區(qū)別?一般來說,這兩個(gè)是用來做兩張(或更多)表聯(lián)合查詢用的,in是把外表和內(nèi)表作hash連接,而exists是對(duì)外表作loop循環(huán),假設(shè)有A、B兩個(gè)表,使用時(shí)是這樣的
oracle in和exists的區(qū)別?
一般來說,這兩個(gè)是用來做兩張(或更多)表聯(lián)合查詢用的,in是把外表和內(nèi)表作hash連接,而exists是對(duì)外表作loop循環(huán),假設(shè)有A、B兩個(gè)表,使用時(shí)是這樣的: 1、select*fromAwhereidin(selectidfromB)--使用in 2、select*fromAwhereexists(selectB.idfromBwhereB.id=A.id)--使用exists 也可以完全不使用in和exists: 3、selectA.*fromA,BwhereA.id=B.id--不使用in和exists 具體使用時(shí)到底選擇哪一個(gè),主要考慮查詢效率問題: 第一條語(yǔ)句使用了A表的索引; 第二條語(yǔ)句使用了B表的索引; 第三條語(yǔ)句同時(shí)使用了A表、B表的索引; 如果A、B表的數(shù)據(jù)量不大,那么這三個(gè)語(yǔ)句執(zhí)行效率幾乎無差別; 如果A表大,B表小,顯然第一條語(yǔ)句效率更高,反之,則第二條語(yǔ)句效率更高; 第三條語(yǔ)句盡管同時(shí)使用了A表、B表的索引,單掃描次數(shù)是笛卡爾乘積,效率最差。 以上純屬個(gè)人理解,僅供參考。
oracle存儲(chǔ)過程解析JSON?
Oracle 12.1.0.2版本有一個(gè)新功能就是可以存儲(chǔ)、查詢、索引JSON數(shù)據(jù)格式,而且也實(shí)現(xiàn)了使用SQL語(yǔ)句來解析JSON,非常方便。JSON數(shù)據(jù)在數(shù)據(jù)庫(kù)中以VARCHAR2, CLOB或者BLOB進(jìn)行存儲(chǔ)。Oracle建議用戶在插入JSON數(shù)據(jù)之前,使用is_json來驗(yàn)證輸入JSON數(shù)據(jù)的正確性。另外,Oracle也提供了相關(guān)的函數(shù):Functions:json_value, json_query, json_table.Conditions:json_exists, is json, is not json, json_textcontains.