前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《10步完全理解SQL》收获

《10步完全理解SQL》收获

作者头像
SuperHeroes
发布2019-03-12 14:55:14
6130
发布2019-03-12 14:55:14
举报
文章被收录于专栏:云霄雨霁云霄雨霁

先贴蓝色神秘串:http://blog.jobbole.com/55086/#article-comment

非常好的一篇文章啊,读后收获颇多。虽然在校刚刚学完数据库系统,但课程重在讲述数据库系统原理,SQL只是讲了基本语法。自己虽然平时也用MySQL和Oracle,但也只是会用而已,对于语句背后的执行和意义并没有过多了了解。可能也是自己学习不精,没有去把SQL和数据库原理中的关系运算等知识联系在一起。下面是一些收获点:

1  SQL是一种声明式语言

SQL是一种声明式语言,所以在使用SQL时一定要转变传统编程观念--定义执行逻辑和顺序去指示数据库操作。我们在使用SQL的时候只是声明我们想要的结果集即可,数据库会自己处理好逻辑并返回结果。

2  SQL语法不按语法顺序执行

SQL语法执行顺序应该是:

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION -> ORDER BY

FROM是第一个执行的这不难理解,因为要先将数据读入内存再进行WHERE和GROUP BY的筛选。SELECT是在之后执行的,这也是为什么一些数据库不支持在FROM中使用SELECT中定义的别名。

UNION是在ORDER BY之前执行的,也就是说我们的ORDER BY是可以将拼接后的结果进行排序的,也就是能保证拼接后有序。

3  SQL语句的核心是对表的引用

SQL的核心是对表的引用而不是SELECT。一个完整SQL执行过程就是一张张中间表的生成和传递的过程。

FROM语句输出一张“联合“表,来自所有引用的表在某一维度的集合。然后通过WHERE语句筛选和GROUP BY处理生成新的输出表。

注意这里GROUP BY也是对表的引用进行操作,它将WHERE过后的表的引用转换为一种新的引用方式。(注意GROUP BY语句的限制:用GROUP BY的时候,SELECT后没有使用聚合函数的列都要出现在GROUP BY后面)

这里如果结合数据库系统原理课上学的关系代数(集合论)来看,一张数据库的表就是一组数据元的关系,而每个 SQL 语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。

4  灵活的引用表可以创建功能强大的SQL语句

引用表主要通过JOIN关键字来实现。JOIN并不是SELECT语句的一部分,它是构建连接表的关键字。

尽量不要使用逗号来代替JOIN进行表连接。因为JOIN有两个优势在这里:安全和更多的连接方式。

JOIN有很多变体,提供内连接、外连接、半连接、全连接等等功能。

5  使用SQL中的派生表

派生表其实就是括号之间的子查询。使用派生表可以有效避免由于SQL逻辑产生的问题,同时一些情况下也可以提高SQL查询效率。

同样,因为SQL的核心是对表的引用,而不是对字段的引用,所以派生表是可以重用的。重用派生表可以通过WITH关键字实现。

6  SELECT实质是对关系的映射

这个不用过多解释,但SELECT语句有很多特殊规则,一些重要的如下:

  1. 你仅能够使用那些能通过表引用而得来的字段;
  2. 如果你有 GROUP BY 语句,你只能够使用 GROUP BY 语句后面的字段或者聚合函数;
  3. 当你的语句中没有 GROUP BY 的时候,可以使用开窗函数代替聚合函数;
  4. 当你的语句中没有 GROUP BY 的时候,你不能同时使用聚合函数和其它函数;
  5. 有一些方法可以将普通函数封装在聚合函数中;

7  灵活使用SQL语句中的几个关键字

  • DISTINCT:在映射之后对数据进行去重
  • UNION:将两个子查询拼接起来并去重
  • UNION ALL:将两个子查询拼接起来但不去重
  • EXCEPT:将第二个子查询中的结果从第一个子查询中去除
  • INTERSECT:保留两个子查询中都有的结果并去重
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/08/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1  SQL是一种声明式语言
  • 2  SQL语法不按语法顺序执行
  • 3  SQL语句的核心是对表的引用
  • 4  灵活的引用表可以创建功能强大的SQL语句
  • 5  使用SQL中的派生表
  • 6  SELECT实质是对关系的映射
  • 7  灵活使用SQL语句中的几个关键字
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档