新聞中心
AQL是一種基于ArangoDB數(shù)據(jù)庫(kù)的查詢語(yǔ)言,它的語(yǔ)法特點(diǎn)類似于SQL,具有良好的可讀性和可維護(hù)性。其中not in操作是AQL語(yǔ)言中常用的一種操作符,用于判斷一個(gè)值是否不在另一個(gè)中。本文將介紹not in操作的語(yǔ)法和使用方法,以便讀者更好地掌握AQL語(yǔ)言的技能。

一、not in操作的語(yǔ)法
在AQL語(yǔ)言中,not in操作的語(yǔ)法格式如下:
“`
expression NOT IN (setExpression)
“`
其中,expression表示需要進(jìn)行判斷的值,setExpression表示用于判斷的。這個(gè)可以是一個(gè)數(shù)組,也可以是一個(gè)subquery查詢結(jié)果。
二、not in操作的使用方法
not in操作的本質(zhì)是一個(gè)布爾運(yùn)算,它返回一個(gè)布爾值,表示expression是否不在setExpression中。在實(shí)際應(yīng)用中,not in操作有多種用法,主要有以下兩種:
1、判斷值是否不在數(shù)組中
判斷一個(gè)值是否存在于一個(gè)數(shù)組中,可以使用not in操作符。例如,以下AQL語(yǔ)句可以判斷”apple”是否不在fruits數(shù)組中:
“`
FOR fruit IN fruits
FILTER “apple” NOT IN fruit
RETURN fruit
“`
其中,fruits是一個(gè)數(shù)組,fruit表示數(shù)組中的每一個(gè)元素,如果結(jié)果集包含的元素中不包含”apple”,那么該元素就會(huì)被返還。相反,如果結(jié)果集中包含”apple”,那么該元素就不會(huì)被返回。
2、判斷值是否不在subquery子查詢的結(jié)果中
在AQL語(yǔ)言中,not in操作也可以用于子查詢中,用于判斷一個(gè)值是否不在subquery子查詢的結(jié)果中。例如,以下AQL語(yǔ)句可以判斷“user1”是否不是book表中的作者:
“`
FOR b IN book
FILTER b.author NOT IN (
FOR u IN user
FILTER u.name == “user1”
RETURN u.following
)
RETURN b
“`
其中,book和user分別為book表和user表。這個(gè)AQL語(yǔ)句會(huì)先在user表中查詢名為”user1″的記錄,然后查詢這個(gè)用戶關(guān)注的所有用戶,返回這個(gè)作為not in操作中的setExpression。它會(huì)在book表中查詢出所有不屬于這個(gè)作者的書籍,并將它們作為結(jié)果集返回。
三、not in操作的實(shí)際應(yīng)用
not in操作在實(shí)際應(yīng)用中有廣泛的場(chǎng)景,例如:
1、過(guò)濾掉排除中的數(shù)據(jù)
not in操作可以用于過(guò)濾掉排除中的數(shù)據(jù),例如在查詢出某個(gè)用戶的好友列表時(shí),如果需要排除掉某些用戶,可以使用not in操作。
2、根據(jù)關(guān)聯(lián)表的數(shù)據(jù)推算出數(shù)據(jù)缺失的情況
not in操作還可以根據(jù)關(guān)聯(lián)表的數(shù)據(jù),推算出當(dāng)前數(shù)據(jù)是否缺失,例如在查詢出用戶的評(píng)價(jià)信息時(shí),如果評(píng)價(jià)表中缺失了某些用戶的評(píng)價(jià)信息,就可以使用not in操作來(lái)判斷。此時(shí),setExpression就等于用戶表,expression就等于評(píng)價(jià)表中的用戶ID,通過(guò)對(duì)比兩個(gè)之間的差異,就可以得出缺失數(shù)據(jù)的信息。
以上就是not in操作在AQL語(yǔ)言中的使用方法和實(shí)際應(yīng)用場(chǎng)景,希望本文能夠幫助讀者更好地掌握AQL語(yǔ)言的技能。
相關(guān)問(wèn)題拓展閱讀:
- 存儲(chǔ)過(guò)程SQL語(yǔ)句 not in問(wèn)題
- sql not in問(wèn)題
存儲(chǔ)過(guò)程SQL語(yǔ)句 not in問(wèn)題
樓上的不排除投機(jī)取巧(褒義)呵呵、
如果user真的有存在的房號(hào),人不在房間的問(wèn)題,不與username比較是不是也顯示不出來(lái)了呢。呵呵!
select roomid,’房間號(hào)不存在’
from
where roomid not in (select distinct roomid from room )
union all
select roomid,’此人不在此房間中’
from
where username not in (select a.username from room a, b where a.roomid = b.roomid and a.username = b.username)
and roomid not in (select roomid
from
where roomid not in (select distinct roomid from room ))
這個(gè)就OK了。
下面操作必須執(zhí)行,要篩選人和房間的匹配哦,雖然辦法垃圾,只是在外層查詢篩選不存在的房間,不過(guò)也是一種辦法哦。呵呵!~
第二問(wèn)題我不是很明白你的意思。代替值為空可以用ISNULL。
select roomid,’房間號(hào)不存在‘
from user
where roomid not in (select distinct roomid from room )
union all
select username,’此人不在此房間中’
from user
where not exists (select a.username from room a,user b where a.roomid = b.roomid and a.username = b.username)
這樣應(yīng)該行了
select roomid
,status = isnull((select 1 from room where user.roomid = roomid)
,’房間號(hào)不存在‘)
from user
union all
……
sql not in問(wèn)題
這個(gè)效率肯定是很慢的,因?yàn)椴涣w擾游單單是not in效率較低,group by效率也高不到哪兒去!
這種情況可以看出是由于設(shè)計(jì)表時(shí)進(jìn)行了錯(cuò)誤的分析,導(dǎo)致出現(xiàn)了大量的冗余。
id->地址.id->地區(qū),地址->地區(qū)
這是函數(shù)依賴關(guān)系,也就李正是說(shuō)如果id是主鍵的情況下,存在者有屬性對(duì)非主屬性的兄銷依賴,這張表不符合2NF,所以會(huì)出現(xiàn)大量的冗余,而這個(gè)才是效率低下的真正原因!也就是說(shuō)你的語(yǔ)句上的只是效率問(wèn)題,而數(shù)據(jù)庫(kù)才是執(zhí)行慢的真正原因!如果合理的數(shù)據(jù)庫(kù),存在1K左右的記錄,就算你還使用group by與not in也不會(huì)等到10分鐘的!
NOT IN速度當(dāng)然很慢,因?yàn)檫@樣會(huì)存在兩個(gè)全表檢索的情況,使用NOT EXISTS會(huì)快很多。
delete from t_b where exists (select 1 from t_b a where isnull(a.cost,0) > isnull(t_b.cost,0) and a.cost t_b.cost)
DELETE FROM CIDZ WHERE EXISTS (SELECT 1 FROM CIDZ A WHERE A.ID >模則 CIDZ.ID)
這個(gè)旦咐棚刪除之后,會(huì)只剩下這個(gè)表中ID更大的一行,沒有別的連接條件了么?如果這么已刪除,表中只剩下一行了,我覺得你的意思是不是只留下每個(gè)地址分組后ID更大的簡(jiǎn)汪一行?。?/p>
關(guān)于aql數(shù)據(jù)庫(kù)中not in的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)——四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,高電服務(wù)器托管,算力服務(wù)器租用,可選線路電信、移動(dòng)、聯(lián)通機(jī)房等。
分享文章:AQL數(shù)據(jù)庫(kù)中notin操作的使用方法(aql數(shù)據(jù)庫(kù)中notin)
文章分享:http://www.dlmjj.cn/article/coeehds.html


咨詢
建站咨詢
