今天在mapreduce的練習中看到了乙個題目:
file:
child parent---------- ----------
tom lucy
tom jack
jone lucy
jone jack
lucy mary
lucy ben
jack alice
jack jesse
terry alice
terry jesse
philip terry
philip alma
mark terry
mark alma
輸出結果要求:
grandchild grandparent---------- -----------
jone mary
jone ben
jone alice
jone jesse
mark alice
mark jesse
philip alice
philip jesse
tom mary
tom ben
tom alice
tom jesse
我在思考,這個如果是db2的乙個表,應該能通過表連線來實現這個要求。於是生成表parent:
[db2inst1@win ~
]$ db2 "select
*from
parent"
child parent
---------- ----------
tom lucy
tom jack
jone lucy
jone jack
lucy mary
lucy ben
jack alice
jack jesse
terry alice
terry jesse
philip terry
philip alma
mark terry
mark alma
14 record(s) selected.
要達到這樣的結果,一定要用到表的hash join。下面是我的sql實現:
[db2inst1@win ~
]$ db2 "select u.child grandchild, b.parent grandparent from (select
*from parent where parent in (select child from parent)) as u ,(select
*from parent where child in (select parent from parent)) as b where u.parent=b.child order
by u.child"
db2的優化器重寫成這樣:
optimized statement:-------------------
select
distinct q1.child as
"grandchild",
q3.parent
as"grandparent",
q3.child,
q1.parent
from
db2inst1.parent
asq1,
db2inst1.parent
asq2,
db2inst1.parent
asq3,
db2inst1.parent
asq4
where
(q1.parent
= q2.child) and
(q2.child
= q4.parent) and
(q2.child
=q3.child)
order
byq1.child
關於sql要怎麼優化這一方面還有很多不足。。。
DB2 物化查詢表
start db2 物化查詢表mqt materialized query tables 儲存了乙個查詢的結果,當我們查詢相關表時,db2會自動決定是使用原表還是使用物化查詢表。當資料庫中有海量資料時,使用物化查詢表可以極大的提高查詢速度。但是,有一利就有一弊,維護物化查詢表也是相當耗時的。所以,物...
表關聯查詢
一 內連線和外連線 內連線用於返回滿足連線條件的記錄 而外連線則是內連線的擴充套件,它不僅會滿足連線條件的記錄,而且還會返回不滿足連線條件的記錄,語法如下 oracle 1.select table1.column,table2.column from table1 inner left right...
表關聯查詢
一 表關聯查詢 1.表的關聯分兩類 有關係的關聯 無關係的關聯 2.表的有關係的關聯 內關聯 where 指定關聯關係 表1.欄位 表2.欄位 and 表2.欄位 表3.欄位 有關係關聯 通過字段關係,把多張表合併在一起.select s emp.id,first name,name from s ...