八、连接查询概念与左连接语法以及左右内连接的区别

 一张表,就是一个集合,一行数据就是集合的一个元素。
理论上讲:不可能存在完全相同的两个行,但是表中可以完全相同的两行,
因为表内部有一个rowid。
                     *
         *

 

集合相乘,就是笛卡尔积
其实就是两个集合的完全组合
问:设集合A有M个元素,M个元素各不相同
设集合B,有N个元素,N个元素各不相同
A*B,得到的积,有M*N个元素,不可能重复。
 
表A有9行,表B有10行
两表相乘有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 联通手机充值卡
 
要从goods,category表取数据
然后,在两表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.列   [此处表连接成一张大表,完全当成普通表看]where,group by having……..照常写
 
右连接:
Select 列1,列2,列N from
tableA right join tableB
on tableA.列 = tableB.列   [此处表连接成一张大表,完全当成普通表看]where,group by having……..照常写
 
内连接:
Select 列1,列2,列N from
tableA inner join tableB
on tableA.列 = tableB.列   [此处表连接成一张大表,完全当成普通表看]where,group 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)
比赛结果,如(2:0)
matchTime
Date
比赛开始时间
Team参赛队伍表
字段名称
字段类型
描述
teamID
Int
主键
teamName
int
队伍名称
 
Match的hostTeamID与guestTeamID都与Team中的teamID关联;查出2006-6-1到2006-7-1之间举行的所有比赛,并且用以下形式列出;
拜仁   2:0   不莱梅  2006-6-21
posted @ 2019-08-12 15:41  Paco_Pig  阅读(1746)  评论(0)    收藏  举报