select * from a, b(, c) 或者
select * from a cross join b (cross join c);
注:沒有任何關聯條件,結果是 笛卡爾積,結果集 會很大,沒有意義,很少使用。
select * from a, b where a.id = b.id 或者
select * from a inner join b on a.id = b.id;
注:多表中同時符合某種條件的資料記錄的集合。
內連線分為三類:
① 等值連線:on a.id = b.id
;
② 不等值連線:on a.id > b.id
;
③ 自連線:select * from a t1 inner join a t2 on t1.id = t2.pid
;
外鏈結又分為左外鏈結(left join)和右外鏈結(right join)
1)左外鏈結
left outer join
,以左表為主,先查詢出左表,按照on
後的關聯條件匹配右表,沒有匹配到的用null
填充,可以簡寫 成left join
.
2)右外鏈結
right outer join
,以右表為主,先查詢出右表,按照on
後的關聯條件匹配坐表,沒有匹配到的用null
填充,可以簡寫 成right join
.
select * from a union select * from b union ......
注:
select * from a left join b on a.id = b.id union select * from a right join b on a.id = b.id;
mysql本身不支援全連線,如果要使用全連線,可以使用 left join 和 union 和 right join 聯合使用。
team:參賽隊伍表
欄位名型別
描述teamid
int主鍵
teamname
varchar(20)
隊伍名稱
match:賽程表
欄位名稱
型別描述
matchid
int主鍵
hostteamid
int主隊id
guestteamid
int客隊id
matchresult
varchar(20)
比賽結果
matchtime
date
比賽日期
其中,match賽程表 中的 hostteamid 與 guestteamid 都和 team表 中的 teamid關聯,查詢 2006-6-1 到 2006-7-1 之間舉行的所有比賽,並且用以下形式列出:拜仁 2:0 不萊梅 2006-6-21。
解題思路:
先找出我們的結果需求:主隊名稱 比賽結果 客隊名稱 比賽日期
分析表與表之間的關聯關係,match表中的主隊id(hostteamid)和客隊id(guestteamid)都和team表中的teamid關聯,通過關聯查詢可以獲得主隊名稱和客隊名稱
根據match表中的matchtime欄位查詢 2006-6-1到2006-7-1之間舉行的比賽即可
方法一:
select
t1.teamname,
m.matchresult,
t2.teamname,
m.matchtime
from
`match` as m
left join team as t1 on m.hostteamid = t1.teamid
left join team as t2 on m.guestteamid = t2.teamid
where
m.matchtime between '2006-6-1'
and '2006-7-1';
方法二:
select
t1.teamname,
m.matchresult,
t2.teamname,
m.matchtime
from
team t1,
team t2,
`match` m
where
t1.teamid = m.hostteamid
and t2.teamid = m.guestteamid
and m.matchtime >= "2006-06-01「 and m.matchtime <=」2006-07-01";
最後的時間比較也可用 between ... and SQL關聯查詢
一 關聯基礎 連線查詢 查詢兩個或兩個以上資料表或檢視的查詢,通常建立在存在相互關係的父子表之間。關聯查詢 查詢的結果集中的字段可能來自多張表。要從多張表中獲取資料時,就要找到這幾張表記錄的對應關係,然後建立聯絡後分別獲取。所以連線條件 指明表之間記錄的對應關係 在關聯查詢中十分關鍵。n 張表關聯查...
sql關聯查詢
1.內連線 是最普遍的一種連線方式,選出相連的兩張表都互相滿足連線條件的資料。寫法 select ainner joinb on a.id b.aid 其中inner可忽略 舉例 a表 查詢語句 select from a inner join b on a.id b.id。將a表的每一條資料拿出來...
SQL關聯查詢
從2張或多張表中,取出有關聯的資料 關聯查詢一共有幾種情況 內連線 inner join cross join 1 形式一 select 字段列表 from a表 inner join b表 on 關聯條件 where 其他篩選條件 說明 如果不寫關聯條件,會出現一種現象 笛卡爾積 關聯條件的個數 ...