--包含join遺忘的行
select getdate() --2009-01-05 22:54:33.763 in 西安 by 陳亮
/*--生成資料
use tempdb
if object_id('customer') is not null
drop table customer
gocreate table customer (id int ,name varchar(20))
goinsert into customer
select 1,'bety' union all
select 2,'robert' union all
select 3,'janette'
--if object_id('invoice') is not null
drop table invoice
gocreate table invoice (id int ,whn datetime,custid int ,cost int)
goinsert into invoice
select 1,'2009-01-01',1,100 union all
select 2,'2009-01-02',1,500 union all
select 3,'2009-01-05',3,200
--*/
--預設情況下,join就是inner join。 它將僅僅給出同時匹配兩個表的資料行:
select *
from customer inner join invoice
on (customer.id=custid);
/*id name id whn custid cost
1 bety 1 2009-01-01 00:00:00.000 1 100
1 bety 2 2009-01-02 00:00:00.000 1 500
3 janette 3 2009-01-05 00:00:00.000 3 200
*/--與此相反,left outer join 將包括左表中的所有行——即使有的行不匹配右側表的任意行業是如此:
select *
from customer left outer join invoice
on (customer.id=custid);
/*id name id whn custid cost
1 bety 1 2009-01-01 00:00:00.000 1 100
1 bety 2 2009-01-02 00:00:00.000 1 500
2 robert null null null null
3 janette 3 2009-01-05 00:00:00.000 3 200
*/--能夠使用短語left join 取代 left outer join 。單詞outer是個可選詞彙。
--類似地,如果你在使用內連線,那麼可以通過使用inner join 來取代join 來明確說明連線型別。這點要求在access中是強制性的。
--過濾必須在連線條件(on子句)中完成。在sql中,首先執行join子句,然後應用where條件。
--如果想得到robbert的數量0,那麼需要使用left outer join ,這樣,左表(customer)的每一行都出現在結果中:
select [name] ,count(custid)
from customer left join invoice on (customer.id=custid)
group by name
/*name count(custid)
bety 2
janette 1
robert 0
*/--注意
select [name] ,count(*)
from customer left join invoice on (customer.id=custid)
group by name
/*name count(*)
bety 2
janette 1
robert 1
*/select [name] ,count(name)
from customer left join invoice on (customer.id=custid)
group by name
/*name count(name)
bety 2
janette 1
robert 1
*/--使用union也可以解決問題,編寫第二個查詢,它對不在invoice中的客戶返回0:
select [name] ,count(*)
from customer join invoice on (customer.id=custid)
group by name
union
select name ,0
from customer a
where not exists (select * from invoice b where b.custid=a.id)
--end*/
《劍指offer》26 包含min功能的棧
包含min功能的棧 要求設計乙個棧,除了正常進出棧以外,還有乙個輸出最小值的功能。首先自然而然可以想到python自帶的min函式 其實沿著min函式的思路走,如果我們想要搜尋乙個list的最小值,我們可以從左往右遍歷,然後先找到前兩個元素的較小者,再將其與第三個元素比較,得出更小者,再向後比較,以...
20 包含min的函式
定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 在該棧中,呼叫min push及pop的時間複雜度應為o 1 把每次壓棧時的最小元素 每次新壓棧元素和之前的最小元素進行比較 放進另外乙個專門存放最小值的輔助棧中。例如 1 初始空棧,壓入元素3,目前3是最小值,放入輔助棧,...
18 包含min函式的棧
包含min函式的棧 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。劍指offer上的例子講解的非常精彩。error control may reach end of non void function werror,wreturn type 意為無法找到non void fu...