八、連接查詢概念與左連接語法以及左右內連接的區別


  一張表,就是一個集合,一行數據就是集合的一個元素。
理論上講:不可能存在完全相同的兩個行,但是表中可以完全相同的兩行,
因為表內部有一個rowid
                     *
         *

 

集合相乘,就是笛卡爾積
其實就是兩個集合的完全組合
問:設集合AM個元素,M個元素各不相同
設集合B,有N個元素,N個元素各不相同
A*B,得到的積,有M*N個元素,不可能重復。
 
A9行,表B10
兩表相乘有9*10=90
select * from ta;
 
Id num
a,  5
b,  10
c,  15
d,  10
 
Select * from tb;
 
Id   num
b    5
c    10
d    20
e    99
 
select * from ta,tb;
id num id num
a 5 b 5
b 10 b 5
c 15 b 5
d 10 b 5
a 5 c 10
b 10 c 10
c 15 c 10
d 10 c 10
a 5 d 20
b 10 d 20
c 15 d 20
d 10 d 20
a 5 e 99
b 10 e 99
c 15 e 99
d 10 e 99
 
左連接,右連接,內連接
 
Goods表:
goods_id cat_id goods_name
1 4 KD876
4 8 諾基亞N85原裝充電器
3 8 諾基亞原裝5800耳機
5 11 索愛原裝M2卡讀卡器
6 11 勝創XINGMAX內存卡
7 8 諾基亞N85原裝立體聲耳機HS-82
8 3 飛利浦909V
9 3 諾基亞E66
10 3 索愛C702C
 
Category:
cat_id cat_name
1 手機類型
2 CDMA手機
3 GSM手機
4 3G手機
5 雙模手機
6 手機配件
7 充電器
8 耳機
9 電池
11 讀卡器和內存卡
12 充值卡
13 小靈通/固話充值卡
14 移動手機充值卡
15 聯通手機充值卡
 
要從goodscategory表取數據
然后,在兩表M*N的過程中,篩選,
以什么條件篩選,答:cat_id相同
1. 連接上表
2. 連接條件
 
select
goods_id,goods.cat_id,cat_name,goods_name,shop_price
from
goods left join category
on goods.cat_id = category.cat_id;
 
左連接:
Select 1,列2,列N from
tableA left join tableB
on tableA.= tableB.列   [此處表連接成一張大表,完全當成普通表看]wheregroup by having……..照常寫
 
右連接:
Select 1,列2,列N from
tableA right join tableB
on tableA.= tableB.列   [此處表連接成一張大表,完全當成普通表看]wheregroup by having……..照常寫
 
內連接:
Select 1,列2,列N from
tableA inner join tableB
on tableA.= tableB.列   [此處表連接成一張大表,完全當成普通表看]wheregroup by having……..照常寫
 
左連接:
以左表為准,去右邊找匹配數據,找不到匹配,用NULL補齊。
如何記憶:
1. 左右連接可以相互轉化。
2. 推薦把右連接轉換為左連接來使用
右連接:
A站在B的左邊《======B站在A的右邊
A left join B ========B right join A
 
內連接:
查詢左右表都有的數據,即不要左右連接中NULL的那一部分。內連接是左右連接的交集。
Select boy.*,girl.* from boy inner join girl on boy.flower = girl.flower;
 
思考:能否查出左右連接的並集
答:目前不能,目前的mysql不支持外連接。
但是可以用union來達到目的
先來個左連接,再來個右連接,左右連接union一下就行了
 
練習題:
1. goods表,category表,brand表,3表連接查詢,得出以下字段:
Good_id
Cat_id
Cat_name
Brand_id
Brand_name
Goods_name
2. 根據給出的表結構按要求寫出SQL語句。
Match 賽程表
字段名稱
字段類型
描述
matchID
int
主鍵
hostTeamID
Int
主隊的ID
guestTeamID
Int
客隊的ID
matchResult
Varchar(20)
比賽結果,如(20
matchTime
Date
比賽開始時間
Team參賽隊伍表
字段名稱
字段類型
描述
teamID
Int
主鍵
teamName
int
隊伍名稱
 
MatchhostTeamIDguestTeamID都與Team中的teamID關聯;查出2006-6-12006-7-1之間舉行的所有比賽,並且用以下形式列出;
拜仁   2:0   不萊梅  2006-6-21


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM