sql從兩個(gè)表?xiàng)l件查詢數(shù)據(jù) sql多表聯(lián)查詢?cè)趺从茫?/h1>
sql多表聯(lián)查詢?cè)趺从茫靠梢杂弥^詞或聯(lián)結(jié)實(shí)現(xiàn):連接實(shí)現(xiàn):select * from b join a on b.id=a.id where a.b=21聯(lián)結(jié)實(shí)現(xiàn)的條件是兩表id來自同一值域,表示意義相
sql多表聯(lián)查詢?cè)趺从茫?/h2>
可以用謂詞或聯(lián)結(jié)實(shí)現(xiàn):
連接實(shí)現(xiàn):
select * from b join a on b.id=a.id where a.b=21
聯(lián)結(jié)實(shí)現(xiàn)的條件是兩表id來自同一值域,表示意義相同.在連接時(shí)其實(shí)兩可以作成一個(gè)表的:
也就是
id,a.b,a.c,b.b.b.c
但由于空值的問題,導(dǎo)致了部分依賴所以才會(huì)拆分成兩個(gè)表的.
使用謂詞實(shí)現(xiàn):
select * from b where id in (select id from a where a.b=21)
這個(gè)可以實(shí)現(xiàn)兩表id來自同一值域,但表示意義不同的情況.也就是說兩表中的id有無關(guān)性.
相比較而言,連接的方式更快一些,但這種情況是兩表來自同一值域,且意義相同,如果不是這種情況,可能得不到你正確的值的.而使用謂詞不管意義是否相同,都可以得到正確的值.
玩數(shù)據(jù)庫(kù)必須知道這兩個(gè)表是否具有相關(guān)性,也就是設(shè)計(jì)時(shí)的意義,否則優(yōu)化詞句什么的都沒有辦法去做的!
有幾種方式可以實(shí)現(xiàn)你的這個(gè)需求.
1. 使用表 關(guān)聯(lián)
SELECT * FROM 表2 JOIN 表1 ON ( 表2.ID = 表1.列1 )
2. 使用 IN
SELECT * FROM 表2 WHERE ID IN ( SELECT 列1 FROM 表1)
3.使用 EXISTS
SELECT * FROM 表2
WHERE EXISTS ( SELECT 1 FROM 表1 WHERE 表2.ID = 表1.列1 )
select * from t2 left join t1 on t2.ID = t1.列1 where t1需要啥條件 and t2需要啥條件
select * from 表2 where 某列 in (select 列1 from 表1) and id=1