SQL關聯查詢

2021-09-24 07:35:23 字數 2722 閱讀 4875

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 其他篩選條件 說明 如果不寫關聯條件,會出現一種現象 笛卡爾積 關聯條件的個數 ...