sql思维
写sql的思路不同于常规编程语言(C、python)等等。前者,考虑如何一步步地得到最终答案;后者,考虑如何一步步地收缩数据范围。
简而言之,前者是面向过程化(for each row do x),后者是面向集合(do all -> another all)。
具体来讲,写sql从两种角度考虑:
一、集合
- 首先考虑,要得到正确结果,需要把哪些表,以何种形式连接起来;
- 对连接之后的大集合,做怎么样的过滤 (where、having)
- 根据需要做出合适的投影 (select)
- 可能需要重复前面三步
select T1.x, T1.y
from T1 left outer join T2
where T1.z = T2.z
二、变量替换
传统语言,变量部分要么用变身本身,要么用函数代替。如 a = b; a = f(b)
1、变量部分可以用子查询代替
sql语句的任意一部分(select、from、where、having)都可以用子查询去做,比如
select:这地方的子查询必须是标量子查询(明确返回只有一个值的集合,如sum(x)等)
from:select x from (select ...) tmp_table ...
where: exist(select ...)、 in (select ...)
having:比较符号(〉〈)后面跟的,肯定也只能是标量子查询
2、变量部分也可以用语句代替
表内容:
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负
如果要生成下列结果, 该如何写sql语句?
胜 负
2005-05-09 2 2
2005-05-10 1 2 select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',
sum(case when shengfu='负' then 1 else 0 end)'负'
from #tmp
group by rq
参考资料:http://www.ituring.com.cn/article/472
sql思维的更多相关文章
- 数据可视化之powerBI技巧(十一)基于SQL思维的PowerBI DAX实战
本文来自于PowerBI星球嘉宾天行老师的分享,天行老师不仅DAX使用娴熟,更是精通SQL,下面就来欣赏他利用SQL思维编写DAX解决问题的一个实战案例. 基于SQL思维使用DAX解决实战问题 作者: ...
- SQL思维导图总结
- SQL思维导图
- 数据库系统学习(十)-嵌入式SQL语言之动态SQL
第十讲 嵌入式SQL语言之动态SQL 静态SQL 区别变量和属性:高级语言向嵌入式SQL传递变量的方法 动态SQL 动态构造SQL语句是应用程序员必须掌握的重要手段 SQL语句的动态构造示例 根据界面 ...
- 优化笔记: jxrsfxrxx_D_20140916.gz
表的重复扫描. ----------------------------------想进一步研究,继续往下看------------------------------ 1. 所有相似 ...
- SQL到NOSQL的思维转变
NOSQL系统一般都会宣传一个特性,那就是性能好,然后为什么呢?关系型数据库发展了这么多年,各种优化工作已经做得很深了,NOSQL系统一般都是吸收关系型数据库的技术,然后,到底是什么因素束缚了关系型数 ...
- [原创] 思维导图笔记(二):SQL
为了补一补知识体系上的缺漏,最近找了看完了Ben Forta写的<Sams Teach Yourself SQL in 10 Minutes>,翻译过来叫<SQL必知必会>.从 ...
- SQL 到 NOSQL 的思维转变
转自:http://blogread.cn/it/article/3130?f=wb SQL 到 NOSQL 的思维转变 NOSQL系统一般都会宣传一个特性,那就是性能好,然后为什么呢?关系型数据库发 ...
- PCB SQL SERVER 数据库阻塞进程关系以思维导图方式呈现的实现方法
最近公司服务数据库同步机制常发生阻塞,时不时的导致PCB工程系统卡死现象,只有找到阻塞源头并处理掉,才以消除阻塞,但数据库中查看会话阻塞是通过二维表方式展示的父子会话进程ID的,是很难清楚的展示各会话 ...
随机推荐
- karma+angular
下面的介绍以karma能正常运行为前提,看karma系列文章:http://www.cnblogs.com/laixiangran/tag/Karma/ 目录结构 步骤 安装 npm install ...
- Python主文件路径和当前模块路径
主执行文件路径sys.argv[0] ...
- EF Core » 关系
对初学者理解关系很有用,先留下来,有时间边看边翻译. Caution 注意 This documentation is for EF Core. For EF6.x and earlier relea ...
- android上传文件到wamp服务器
1.php server(wamp)部分 建立unload.php页面代码如下 <?php move_uploaded_file($_FILES["file1"][" ...
- jquery函数
1.ready函数 当 DOM(文档对象模型) 已经加载,并且页面(包括图像)已经完全呈现时,会发生 ready 事件. $(document).ready(function (){alert('11 ...
- 连续型变量的推断性分析——t检验
连续型变量的推断性分析方法主要有t检验和方差分析两种,这两种方法可以解决一些实际的分析问题,下面我们分别来介绍一下这两种方法 一.t检验(Student's t test) t检验也称student ...
- Tomcat Manager用户配置详解
Tomcat Manager是Tomcat自带的.用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用.Tomcat是Java领域使用最广泛的服务器之一,因此Tomcat Ma ...
- 小例子(三)、winform控件的移动
程序:Do You Love Me ? 说明:就是鼠标移动到“不爱”按钮上按钮就会移动到其他地方 代码: //鼠标进入控件表面的事件MouseEnter //this.ClientSize.Width ...
- Css:背景色透明,内容不透明之终极方法!兼容所有浏览器
转载 http://www.cnblogs.com/jikey/archive/2012/08/31/2665880.html <!DOCTYPE html PUBLIC "-//W3 ...
- java 中遇到的问题及解决方法
1.经常发现明明导入jar包,还是会报java.lang.NoSuchMethodError和java.lang.NoClassDefFoundError 试试网上的各种方法,包括重新导入jar包.重 ...