作者:iamlaosong
多表連接查詢中最常用的事內連接,內連接中最常用的是等值連接,即在連接條件中使用等於號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重復列。例如:
select * from tb_evt_mail_clct a, tb_evt_dlv c
where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
to_date('2015-6-11', 'yyyy-mm-dd')
and a.mail_num=c.mail_num;
上述查詢中,A表(收寄表)和C表(投遞表)中的郵件號碼mail_num不一定是一一對應的,有可能A表中存在的,C表中不存在,按上面的語句查詢,這些郵件將不會出現,如果需要出現,我們一般在等式的右邊添加一個“(+)”,這樣就可以列出A表中的所有內容,如下所示:
select * from tb_evt_mail_clct a, tb_evt_dlv c
where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
to_date('2015-6-11', 'yyyy-mm-dd')
and a.mail_num=c.mail_num(+);
如果我們要統計A表中存在C表中不存在的郵件量(未投遞郵件量),可以用下面語句:
select count(*) from tb_evt_mail_clct a, tb_evt_dlv c
where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
to_date('2015-6-11', 'yyyy-mm-dd')
and a.mail_num=c.mail_num(+)
and c.mail_num is null;
我們可以用下面語句統計妥投郵件量,妥投的條件是c.dlv_sts_code = 'I',即:
select count(*) from tb_evt_mail_clct a, tb_evt_dlv c
where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
to_date('2015-6-11', 'yyyy-mm-dd')
and a.mail_num=c.mail_num(+)
and c.dlv_sts_code = 'I';
select count(*) from tb_evt_mail_clct a, tb_evt_dlv c
where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
to_date('2015-6-11', 'yyyy-mm-dd')
and a.mail_num=c.mail_num(+)
and c.dlv_sts_code = 'I'
and c.mail_num is null;
這是因為,c.mail_num is null這個條件成立時,c.dlv_sts_code 的值也是null,不可能等於‘I',所以,統計的結果為0,也就是說,當統計C表mail_num為空的量時,是不能用其它篩選條件的,確實需要統計的話,需要用下面語句: select count(*) from tb_evt_mail_clct a