SQL之多表查询

--标量子查询
子查询:嵌套在其它查询中的查询
标量子查询:只返回一行一列(即一个单元格数据)的子查询。相当于是一个数
SELECT ...               ---查询的内容不做限制
  FROM ...
 WHERE (                 ---表示大小关系的>/=/<
        SELECT...        ---目标值:一行一列一个值,当做常数处理
          FROM...
         WHERE...);

--关联子查询
嵌套在其他表中的查询。只用于组内比较。
子查询返回一列数据:子查询的结果,与主查询的目标列存在一定的关联。
SELECT ...               ---查询的内容不做限制
  FROM ...
 WHERE (                 ---表示大小关系的>/=/<
        SELECT...        ---目标值:一列值
          FROM...
         WHERE...);     ---注意关联条件的位置
(具体解释详见:https://blog.csdn.net/qq_34988996/article/details/119937359)


--普通子查询
子查询:嵌套在其它查询中的查询。
子查询返回一列数据:将子查询的结果列,作为主查询的取值范围。
SELECT ...               ---查询的内容不做限制
  FROM ...
 WHERE (                 ---表示取值范围的IN
        SELECT...        ---目标值:一列值
          FROM...
         WHERE...);     ---注意关联条件的位置

--表联结
关系型数据库将数据保存在不同的表中,原则:一类数据一个表,表之间相互关联
分解数据为多个表,能有效方便地处理数据,但是检索数据的时候必须使用 联结
1.联结:一种机制,关联多个表,返回一组输出。在一条SELECT语句中实现
2.主键:唯一的标识,可以是ID或任何唯一值
SELECT 列名               ---指定的检索列,可以出自不同的表
  FROM 表1,表2           ---从一个表扩充到两个表,也可以是更多的表,中间用逗号相连
 WHERE 表1.列a = 表2.列b   ---过滤条件外,多了一个联结条件。逐行匹配
注意:
1.必须完整的列名,否则会出现二义性,而返回错误
2.必须是一个连续的联结关系,不允许有表单独存在。

--内部联结
联结的前提:必须有共同列
联结结果:所有表的所有列、共同列重复的行
SELECT ...               
  FROM 表1 INNER JOIN 表2,... 
    ON 表1.列a = 表2.列b,...        ---联结条件
注意:
相比子查询,性能更好,且可以从多个表中的选择结果字段,而子查询只能从主表中选择结果字段。

--外部联结
联结的前提:必须有共同列
联结结果:所有表的所有列、包含相关表中没有关联行的行
SELECT ...               
  FROM 表1 RRIGHT(包含右边表的所有行)/LEFT(包含左边表的所有行)/FULL(包含两边边表的所有行)
 OUTER JOIN 表2,... 
    ON 表1.列a = 表2.列b,...        ---联结条件
注意:
多表联结先测试每一个联结

--在联结中使用聚集函数:
SELECT ...               
  FROM (SELECT...        
          FROM...
         WHERE...)            ---构建一个虚拟表
 GROUP BY...;                ---聚合函数
    
--组合查询 UNION(表的加法,并集)
SELECT 列字段               
  FROM 单表/多个表
UNION
SELECT 列字段               
  FROM 单表/多个表
注意
1.自动过滤重复行
2.两条及两条以上的SELECT语句,每两条语句之间UNION一次
3.UNION ALL关键字,重复行也保留
4.列字段中必须有相同的列,表达式或聚集函数
5.列字段数据类型必须一致(允许隐式转换)
6.最终列字段名由第一条SELECT语句决定
7.在最后一个SELECT语句中可以使用ORDER BY子句,且作用于整个检索结果。
8.字段名由SELECT展示结果决定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值