/*我們接著用上次建的兩個表。資料如下*/
sql> select * from l;
str v
left_1 1
left_2 2
left_3 3
left_4 4
sql> select * from r;
str v
right_3 3
right_4 4
right_5 5
right_6 6
/*如果要返回l表中有而r表為沒有的資料(v=1、2),那麼用not in寫應該如下*/
sql> select * from l where v not in(select r.v from r);
str v
left_1 1
left_2 2
/*如果r表中v有空值呢*/
sql> insert into r values(null,null);
1 row inserted
/*結果集返回錯誤*/
sql> select * from l where v not in(select r.v from r);
str v
/*這時要增加條件 r.v is not null*/
sql> select * from l where v not in(select r.v from r where r.v is not null);
str v
left_1 1
left_2 2
/*not exists語句不受null影響,因為not exists中是等值關係*/
sql> select * from l where not exists(selectnull from r where r.v = l.v);
str v
left_1 1
left_2 2
/*以上兩種都叫反聯接,也可以用join改寫解析如下*/
sql> select l.*,r.* from l left join ron l.v = r.v order by 2;
str v str v
left_1 1
left_2 2
left_3 3 right_3 3
left_4 4 right_4 4
/*如上所示,l中有,而r中沒有的,就是r.v為空的行,那麼加上這個條件後,返回的就是所需資料了*/
sql> select l.* from l left join r onl.v = r.v where r.v is null order by 2;
str v
left_1 1
left_2 2
/*如果能前的(+)寫法,應該如下,為了便於理解,我們仍分步執行來看*/
sql> select left_str,left_v from (selectl.str as left_str,l.v as left_v,r.str as right_str,r.v as right_v from l,rwhere l.v = r.v(+) order by 2);
left_str left_v
left_1 1
left_2 2
left_3 3
left_4 4
sql> select left_str,left_v from (selectl.str as left_str,l.v as left_v,r.str as right_str,r.v as right_v from l,rwhere l.v = r.v(+)) where right_v is null orderby 2;
left_str left_v
left_1 1
left_2 2
/*簡化後,語句如下*/
sql> select l.* from l,r where l.v =r.v(+) and r.v is null order by 2;
str v
left_1 1
left_2 2
/*有人把這兩種弄混了,寫為*/
select l.* from l left join r on (l.v =r.v) and r.v is null order by 2;
/*那麼我們把兩個表的資料都返回,看結果*/
sql> select l.*,r.* from l left join ron (l.v = r.v) and r.v is null order by 2;
str v str v
left_1 1
left_2 2
left_3 3
left_4 4
/*以上這句整理一下就是*/
sql> select l.*,r.* from l left join(select * from r where r.v is null)r on (l.v =r.v) order by 2;
str v str v
left_1 1
left_2 2
left_3 3
left_4 4
/*相當於是l與一空行join了*/
sql> select * from r where r.v is null;
str v
sql>
/*對join的方法引申一部,改為full join*/
sql> select l.*,r.* from l full join ron l.v = r.v order by 2,4;
str v str v
left_1 1
left_2 2
left_3 3 right_3 3
left_4 4 right_4 4
right_5 5
right_6 6
7 rows selected
sql>
/*看上述結果,對別對應l.v為空,與r.v為空就是兩個表不匹配的行*/
sql> select l.*,r.* from l full join ron l.v = r.v where (l.v is null or r.v is null)order by 2,4;
str v str v
left_1 1
left_2 2
right_5 5
right_6 6
sql>
ElasticSearch安裝及執行的坑
寫文章 sam dragon 發表於cnblogs訂閱 158 2.用 tar zxvf 解壓包 3.增加乙個elk使用者,elasticsearch7不可用root使用者執行 4.新建使用者必須要用 chown r 使用者名稱 資料夾 進行許可權分配 1 max file descriptors ...
iOS UISwitch縮放及布局的坑
如題,應設計要求,預設的switch大小不符合設計要求,所以對switch進行了縮放,方法如下 switch.transfrom cgaffinetransformmakescale 0.863,0.863 如上 大小縮放為了原來尺寸的0.863倍。but.坑來了 switch是放在cell中右側,...
pagehelper的使用及避坑
pagehelper是乙個非常簡單實用的分頁外掛程式,但是還是有乙個小坑在裡面的,話不多說,直接上乾貨。pageinfo pageinfo pagehelper.startpage pagenum,pagesize doselectpageinfo query 引數說明 pagenum 第幾頁 pa...