進oracle專案組面試時問到了這個問題.
b表與a表表結構一樣,無則插入有則更新如何用一條sql語句完成.
使用merge into.
例如有a和b倆個表,表結構如下:
ids varchar2(32),
names varchar2(32)
merge into a a --目標表
using b b --源表
on a.ids = b.ids --如果a表的a.ids和b表的b.ids一樣,就讀when matched then裡的.
when matched then
update set a.names = b.names --注意此處不需要表名,自動把b插入到a.
when not matched then
insert (a.ids, a.names) values(b.ids, b.names) --注意此處語法,不需要into和表名.
關聯子查詢問題
select * from a a where exists(select * from b b where a.ids = b.ids)
注意這時是用外面a表的ids欄位和裡面b表的ids進行匹配.
假如a表有很多ids,那麼此時sql執行器不知道用哪個ids好,所以會依次用a的每個ids與b.ids比較.
所以實際上執行了count(a表) + 1次sql語句.
請注意,這是關聯子查詢.
mysql關聯子查詢 MySQL 關聯子查詢
mysql 關聯子查詢 關聯子查詢是指乙個包含對錶的引用的子查詢,該錶也顯示在外部查詢中。通俗一點來講,就是子查詢引用到了主查詢的資料資料。以乙個實際的例子來理解關聯子查詢 article 文章表 aidtitlecontentuid 文章1文章1正文內容.文章2文章2正文內容.文章3文章3正文內容...
子查詢和關聯查詢 效率
msdn對子查詢的定義是這樣的 可以將乙個查詢的結果用作另乙個查詢的輸入。可以將子查詢的結果用作使用 in 函式 exists 運算子或 from 子句的語句。一條好的值得稱讚的規則是盡量用連線代替所有的子查詢。優化器有時可以自動將子查詢 扁平化 並且用常規或外連線代替。但那樣也不總是有效。明確的連...
關於檔案關聯
檔案關聯就是某種型別的檔案和某個應用程式關聯起來。比如txt檔案用記事本開啟。要實現這個要腫麼辦呢?首先是登錄檔的hkey classes root根鍵下找到txt子項,該子項有預設和contenttype兩個值項,預設的資料值是txtfile。然後在登錄檔的hkey classes root根鍵下...