数据库之连接查询与组合查询

一、连接查询

  本文中以r和s两个表为例,进行操作。

  r表:


  s表:


1、INNER JOIN

  内连接:在查询的几个表中,每个表都存在至少一个匹配时,INNER JOIN 关键字返回行。也就是共有部分,即,几个表的交集。

SELECT A,r.B,C,E
FROM r INNER JOIN s
ON r.B=s.B;

  查询结果:


2、LEFT JOIN

  左连接:返回左表中的所有的行,如果右表有不匹配的行,则直接填充为NULL。

SELECT A,r.B,C,E
FROM r LEFT JOIN s
ON r.B=s.B;

  查询结果:


3、RIGHT JOIN

  右连接:返回右表中的所有的行,如果左表有不匹配的行,则直接填充为NULL。

SELECT A,r.B,C,E
FROM r RIGHT JOIN s
ON r.B=s.B;


二、组合查询

  可用UNION操作符来组合数条SQL查询,其使用方法很简单,所需的只是给出每条SELECT语句,在各条语句之间放上UNION即可。

SELECT B
FROM r
WHERE C>5
UNION
SELECT B
FROM s;

  查询结果:


  在简单的例子中,使用UNION会比使用WHERE子句更复杂,但是对于更加复杂的过滤条件,使用UNION可能会使得处理更加简单。

  UNION使用规则:

  1)UNOIN必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔。

  2)UNION中的每个查询语句必须包含相同的列、表达式或聚集函数,但是各个列的次序不需要相同。

  3)列数据类型必须兼容,类型可以不同,但必须是DBMS可以隐含的转换的类型。

  从之前的查询结果可以看出,UNION自动删除了重复的行,如果想要返回所有的匹配行,可以使用UNION ALL。

SELECT B
FROM r
WHERE C>5
UNION ALL
SELECT B
FROM s;

  查询结果:


  注:在使用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后,而且排序结果是对整个查询结果进行的排序;不存在使用一种方式排序一部分,而又使用另一种方式排序另一部分的情况。

参考《数据库系统概论》和《MySQL必知必会》

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值