阿里云天池SQL训练营 - Task 4

本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql

表的加减法

什么是集合运算

集合在数学领域表示“各种各样的事物的总和”, 在数据库领域表示记录的集合. 具体来说,表、视图和查询的执行结果都是记录的集合, 其中的元素为表或者查询结果中的每一行。

在标准 SQL 中, 分别对检索结果使用 UNIONINTERSECT, EXCEPT 来将检索结果进行并,交和差运算, 像UNION,INTERSECTEXCEPT这种用来进行集合运算的运算符称为集合运算符。

连结(JOIN)

内连结(INNER JOIN)

-- 内连结
FROM <tb_1> INNER JOIN <tb_2> ON <condition(s)>

关于内连结,需要注意以下三点:

要点一: 进行连结时需要在 FROM 子句中使用多张表.

要点二:必须使用 ON 子句来指定连结条件.

要点三: SELECT 子句中的列最好按照 表.列名 的格式来使用.

如果需要在使用内连结的时候同时使用 WHERE 子句对检索结果进行筛选, 则需要把 WHERE 子句写在 ON 子句的后边.

结合 GROUP BY 子句使用内连结, 需要根据分组列位于哪个表区别对待.最简单的情形, 是在内连结之前就使用 GROUP BY 子句.但是如果分组列和被聚合的列不在同一张表, 且二者都未被用于连结两张表, 则只能先连结, 再聚合.

一张表也可以与自身作连结, 这种连接称之为自连结.

自然连结并不是区别于内连结和外连结的第三种连结, 它其实是内连结的一种特例–当两个表进行自然连结时, 会按照两个表中都包含的列名来进行等值内连结, 此时无需使用 ON 来指定连接条件.

外连结(OUTER JOIN)

内连结会丢弃两张表中不满足 ON 条件的行,和内连结相对的就是外连结. 外连结会根据外连结的种类有选择地保留无法匹配到的行.

按照保留的行位于哪张表,外连结有三种形式: 左连结, 右连结和全外连结.

左连结会保存左表中无法按照 ON 子句匹配到的行, 此时对应右表的行均为缺失值; 右连结则会保存右表中无法按照 ON 子句匹配到的行, 此时对应左表的行均为缺失值; 而全外连结则会同时保存两个表中无法按照 ON子句匹配到的行, 相应的另一张表中的行用缺失值填充.

三种外连结的对应语法分别为:

-- 左连结     
FROM <tb_1> LEFT  OUTER JOIN <tb_2> ON <condition(s)>
-- 右连结     
FROM <tb_1> RIGHT OUTER JOIN <tb_2> ON <condition(s)>
-- 全外连结
FROM <tb_1> FULL  OUTER JOIN <tb_2> ON <condition(s)>

●外连结要点 1: 选取出单张表中全部的信息

外连结要点 2:使用 LEFT、RIGHT 来指定主表.

多表连结

通常连结只涉及 2 张表,但有时也会出现必须同时连结 3 张以上的表的情况, 原则上连结表的数量并没有限制。

多表进行内连结,多表进行外连结。

ON 子句进阶–非等值连结

交叉连结—— CROSS JOIN(笛卡尔积)

之前的无论是外连结内连结, 一个共同的必备条件就是连结条件–ON 子句, 用来指定连结的条件. 如果你试过不使用这个连结条件的连结查询, 你可能已经发现, 结果会有很多行. 在连结去掉 ON 子句, 就是所谓的交叉连结(CROSS JOIN), 交叉连结又叫笛卡尔积, 后者是一个数学术语. 两个集合做笛卡尔积, 就是使用集合 A 中的每一个元素与集合 B 中的每一个元素组成一个有序的组合. 数据库表(或者子查询)的并,交和差都是在纵向上对表进行扩张或筛选限制等运算的, 这要求表的列数及对应位置的列的数据类型"相容", 因此这些运算并不会增加新的列, 而交叉连接(笛卡尔积)则是在横向上对表进行扩张, 即增加新的列, 这一点和连结的功能是一致的. 但因为没有了ON子句的限制, 会对左表和右表的每一行进行组合, 这经常会导致很多无意义的行出现在检索结果中. 当然, 在某些查询需求中, 交叉连结也有一些用处.

交叉连结的语法有如下几种形式:

-- 1.使用关键字 CROSS JOIN 显式地进行交叉连结
SELECT SP.shop_id
       ,SP.shop_name
       ,SP.product_id
       ,P.product_name
       ,P.sale_price
  FROMshopproduct AS SP
 CROSS JOINproduct AS P;
--2.使用逗号分隔两个表,并省略 ON 子句
SELECT SP.shop_id
       ,SP.shop_name
       ,SP.product_id
       ,P.product_name
       ,P.sale_price
  FROMshopproduct AS SP ,product AS P;

【完整Oracle SQL开发教程课件如下】 数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf 数据库开发 Oracle数据库 SQL开发教程 第01章 Oracle数据库基础(共60页).pdf 数据库开发 Oracle数据库 SQL开发教程 第02章 编写简单的查询语句(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共48页).pdf 数据库开发 Oracle数据库 SQL开发教程 第06章 分组函数(共41页).pdf 数据库开发 Oracle数据库 SQL开发教程 第07章 子查询(共49页).pdf 数据库开发 Oracle数据库 SQL开发教程 第08章 集合运算(共20页).pdf 数据库开发 Oracle数据库 SQL开发教程 第09章 高级子查询(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第10章 层次查询(共17页).pdf 数据库开发 Oracle数据库 SQL开发教程 第11章 数据操作与事务控制(共52页).pdf 数据库开发 Oracle数据库 SQL开发教程 第12章 Oracle数据库网络连接(共39页).pdf 数据库开发 Oracle数据库 SQL开发教程 第13章 创建和维护表(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第14章 约束(共33页).pdf 数据库开发 Oracle数据库 SQL开发教程 第15章 视图(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第16章 序列、索引、同义词(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第17章 用户、权限和角色(共28页).pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值