① Mysql資料庫多表聯合查詢有幾種方法
示例:select
*
from
table1
t1
inner
join
table2
t2
on
t1.id=t2.id
內連接
right
join
--on
右外連接
left
join
--on
左外連接
替換關鍵字就可以
② sql 多表聯查詢
可以用謂詞或聯結實現:
連接實現:
select * from b join a on b.id=a.id where a.b=21
聯結實現的條件是兩表id來自同一值域,表示意義相同。在連接時其實兩可以作成一個表的:
也就是
id,a.b,a.c,b.b.b.c
但由於空值的問題,導致了部分依賴所以才會拆分成兩個表的。
使用謂詞實現:
select * from b where id in (select id from a where a.b=21)
這個可以實現兩表id來自同一值域,但表示意義不同的情況。也就是說兩表中的id有無關性。
相比較而言,連接的方式更快一些,但這種情況是兩表來自同一值域,且意義相同,如果不是這種情況,可能得不到你正確的值的。而使用謂詞不管意義是否相同,都可以得到正確的值。
玩資料庫必須知道這兩個表是否具有相關性,也就是設計時的意義,否則優化詞句什麼的都沒有辦法去做的!
③ 多表連接查詢中,有幾種連接方式
主要分為三種:內連接、外連接、交叉連接。
④ java中如何實現多表查詢
使用join on
如 表 A(AID , ANAME) 表B(BID,BNAME,AID(外鍵參考表A(AID) )
查詢語句 select * from A join B on A.AID==B.BID where 條件
如果需要還有其他表的話可以 在A.AID==B.BID 後面加 and 類似的 A.AID==B.BID 主外鍵約束列
其中 默認 join 是完全匹配 也就說 A表中的在B表中的都存在
如果要左表中的數據都顯示用 left join 同理有 right join
⑤ SQL如何實現多表查詢
大體上的方法有兩種
(1)聯合查詢
select dbo.vipcard.cardno,........,dbo.viptype.typename as cardtype from dbo.vipcard inner join dbo.viptype on dbo.vipcard.cardtype=dbo.viptype.ctypeid
(2)子查詢
select dbo.vipcard.cardno,........,(select typename from viptype where dbo.vipcard.cardtype=dbo.viptype.ctypeid) as cardtype from dbo.vipcard
⑥ sql資料庫 多表查詢
可以有兩種處理方法,
1、兩表先合並,後求和
select 日期,sum( 數值) as 數值 from
( select 日期, 金額 as 數值 from A表
union all
select 日期,數量 as 數值 from B表 )
group by 日期
2、先求和後合並,再求和
select 日期,sum( 數值) as 數值 from
( select 日期, sum(金額) as 數值 from A表 group by 日期
union all
select 日期,sum(數量) as 數值 from B表 group by 日期 )
group by 日期
對於「如果要實現總和的相乘、相除,或者相減得話,應該怎麼寫呢?」,你得提出明確需求,那後才能設計。
如果 是相乘、相除,或者相減,得有條件,還像上面,用日期關聯,A表 - B表,
A表求和:select 日期,sum(金額) as 數值 from A表 group by 日期
B表求和:select 日期,sum(數量) as 數值 from B表 group by 日期
在執行 A表 - B表 時,由於用日期關聯,則某一日期對應的記錄可能會產生三種情況: A表B表都有;A表有B表無;A表無B表有。
1、需要先找出所有日期,
select 日期 from A表
union
select 日期 from B表
2、對於A表中所有數據以上表中日期為依據構造所有相關日期數據,如果有日期數據,則為原數據,否則為0。
select a.日期 as 日期,
case when b.數值 is NULL then b.數值 else 0 end as 數值
from
( select 日期 from A表
union
select 日期 from B表 ) a
left join
( select 日期,sum(金額) as 數值 from A表 group by 日期 ) b
on a.日期 = b.日期
3、同樣對於B表也如此。
4、2表相減即得。
select a3.日期 as 日期, a3.數值 - b3.數值 as 數值
from
(
select a1.日期 as 日期,
case when b1.數值 is NULL then b1.數值 else 0 end as 數值
from
( select 日期 from A表
union
select 日期 from B表 ) a1
left join
( select 日期,sum(金額) as 數值 from A表 group by 日期 ) b1
on a1.日期 = b1.日期
) a3 ,
(
select a2.日期 as 日期,
case when b2.數值 is NULL then b2.數值 else 0 end as 數值
from
( select 日期 from A表
union
select 日期 from B表 ) a2
left join
( select 日期,sum(金額) as 數值 from B表 group by 日期 ) b2
on a2.日期 = b2.日期
) b3
where a3.日期 = b3.日期
當然,以上只是一種方法,還有其他方法也可以實現,盡供參考。
⑦ sql資料庫多表查詢
1.
select
st.StudentNumber,
st.Name,
count(*)
from
studentst,
sbooksk
where
st.StudentNumber=sk.StudentNumber
andto_char(sk.BorrowingTime,'yyyy')='2008'
groupby
st.StudentNumber,
st.Name
2.
select
b.BookNumber,
b.BookName,
st.Name,
sk.BorrowingTime,
sk.ShouldReturnTime
from
studentst,
sbooksk,
bookb
where
st.StudentNumber=sk.StudentNumber
andsk.BookNumber=b.BookNumber
andmonth(sk.BorrowingTime)=month(sysdate)
3.
CreateviewyourViewNameas
select
b.BookNumber,
b.BookName,
st.Name,
sk.BorrowingTime,
sk.ShouldReturnTime
from
studentst,
sbooksk,
bookb
where
st.StudentNumber=sk.StudentNumber
andsk.BookNumber=b.BookNumber
andmonth(sk.BorrowingTime)=month(sysdate)
沒運行過可能有點問題
⑧ 怎樣使資料庫中的多表實現聯合查詢
連接可以在SELECT 語句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出連接時有助於將連接操作與WHERE子句中的搜索條件區分開來。所以,在Transact-SQL中推薦使用這種方法。
SQL-92標准所定義的FROM子句的連接語法格式為:
FROM join_table join_type join_table
[ON (join_condition)]
其中join_table指出參與連接操作的表名,連接可以對同一個表操作,也可以對多表操作,對同一個表操作的連接又稱做自連接。
join_type 指出連接類型,可分為三種:內連接、外連接和交叉連接。
內連接(INNER JOIN)使用比較運算符進行表間某(些)列數據的比較操作,並列出這些表中與連接條件相匹配的數據行。根據所使用的比較方式不同,內連接又分為等值連接、自然連接和不等連接三種。
外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時)、右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數據行。
交叉連接(CROSS JOIN)沒有WHERE 子句,它返回連接表中所有數據行的笛卡爾積,其結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
連接操作中的ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運算符、邏輯運算符等構成。
無論哪種連接都不能對text、ntext和image數據類型列進行直接連接,但可以對這三種列進行間接連接。例如:
SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
(一)內連接
內連接查詢操作列出與連接條件匹配的數據行,它使用比較運算符比較被連接列的列值。內連接分三種:
1、等值連接:在連接條件中使用等於號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重復列。
2、不等連接: 在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值。這些運算符包括>、>=、<=、<、!>、!<和<>。
3、自然連接:在連接條件中使用等於(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連接表中的重復列。
例,下面使用等值連接列出authors和publishers表中位於同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然連接,在選擇列表中刪除authors 和publishers 表中重復列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二)外連接
內連接時,返回查詢結果集合中的僅是符合查詢條件( WHERE 搜索條件或 HAVING 條件)和連接條件的行。而採用外連接時,它返回到查詢結果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時)、右表(右外連接時)或兩個邊接表(全外連接)中的所有數據行。
如下面使用左外連接將論壇內容和作者信息連接起來:
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
左連接:(也叫左外連接,給出兩個表的配匹行,並且以左邊的表為准,如果左邊表有而右邊表沒有的行,則在右邊表的相應行選擇的列顯示為NULL,允許左邊的基準表對應右邊表多條滿足條件的記錄)左連接就是返回左邊的匹配行,不考慮右邊的表是否有相應的行,如:select field1,field2 from table1 left join table2
on field1=field2(基準欄位,可以多個)
where table1.field3=table2.field3
右連接:(也叫右外連接,給出兩個表的配匹行,並且以右邊的表為准,如果右邊表有而左邊表沒有的行,則在右邊表的相應行選擇的列顯示為NULL,允許右邊的基準表對應左邊表多條滿足條件的記錄)
(三)交叉連接
交叉連接不帶WHERE 子句,它返回被連接的兩個表所有數據行的笛卡爾積,返回到結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數將等於6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY
⑨ 在SQL中如何進行多表查詢
要想多表查詢,是有條件的。一般是幾張表結構相似或者是有一樣的ID號關聯。例如:
select * from 表1,表2,表3 這是把3張表結果全部查出來
select * from 表1 where not exists(select 0 from 表2 where
表1.id=表2.id)
⑩ 如何進行多表查詢
如果你說的是select語句,那你可以用表連接的方式查詢.
即select ..... from ...... join .....
語法不是很復雜,但是解釋起來很費勁,因為連接有幾種方式,不同情況使用不同方式.所以我還是給你個網址,你自己看看吧.
http://www.webjx.com/htmldata/2005-12-25/1135513837.html
另外你也可以找一些其他的關於表連接查詢的資料.