SQL Server 入门查询(中)

多表连接
在关系数据库中,一个查询往往会涉及多个表,因为很少数据库只有一个表,而如果大多查询只涉及到一个表的,那么那个表也往往低于 第三范式,存在大量的冗余和异常。
因此,连接就是一种把多个表连接成一个表的重要手段

 

迪卡尔积
笛卡尔积在SQL中实现方式为 交叉连接(Cross Join),所有连接都会先生成临时笛卡尔积表,表示两个表中的每一行数据进行组合,也就是行*行=结果表,本身上没什么实际意义,通过WHERE过滤才有意义,Cross Join后面不加ON只能加WHERE
SELECT * FROM table1 CROSS JOIN table2 where table1.colunm = table2.colunm

 

内连接

按照上面的理解,内连接可以先看作对两个表进行交叉连接,再通过添加限制条件ON剔除不符合条件的行的子集,得到的结果就是内连接的效果了

1.等值连接

在连接条件用‘=’运算符,相当于两个表的交集(实际运用多)

SELECT * FROM table1 a INNER JOIN table2 b ON a.xx = b.xx

2.不等连接
在连接条件用除了‘=’以外的比较运算符‘>','<' ,'>=','<=','<>'   (实际上得出的表没实际意义)
SELECT * FROM table1 a INNER JOIN table2 b ON a.xx > b.xx

外连接
分为左连接(LEFT JOIN / LEFT OUTER JOIN),右连接(RIGHT JOIN / RIGHT OUTER JOIN),全连接(FULL JOIN / FULL OUTER JOIN)
1.左连接
返回左表的所有行的子集,和右表中与左表相同行的子集,如果右表中的行在左表中没有相匹配,则返回NULL
2.右连接
返回右表的所有行的子集,和左表中与右表相同行的子集,如果左表中的行在右表中没有相匹配,则返回NULL
3.全连接
返回左表与右表中所有行的子集,当某一行在另一个表中没有匹配,则那一行返回NULL,相当于左连接与右连接的结合
例子:
table1 id value   table2 id value
           1     a                  1     b
           2     c                  3     d
           4     e 
SELECT * FROM table1 a LEFT JOIN table2 b ON a.id = b.id(左连接)
结果:
id value id value
1     a     1     b
2     c    null  null
4     e    null  null
SELECT * FROM table1 a RIGHT JOIN table2 b ON a.id = b.id(右连接)
结果:
id value id value
1     a     1     b
null null 3     d
SELECT * FROM table1 a FULL JOIN table2 b ON a.id = b.id(全连接)
结果:
id value id value
1     a     1     b
2     c    null  null
null null 3     d
4     e    null  null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值