统计学专业同学需要掌握的数据库基本用法

摘要:大数据时代,数据库已经成了统计学专业学生不得不掌握的一项基本技术。不论是对于基础理论知识薄弱的本科学生,或者是有一定理论基础的硕士,都要对数据库有所了解。然而,我们没必要全面的掌握数据库的所有知识,即便是常说的增删改查也没必要全部掌握。原因在于,数据分析、数据挖掘、机器学习是我们最日常的工作,我们需要的,仅仅是有能力从数据库中拿出想要的数据,因此,对于数据库,需要深刻理解和掌握的,通常就是一个字。
本文,将围绕这一主题,结合大量的实际例子,相对深入浅出的讲述这些基本知识,希望能对需要的读者产生一些帮助。

1.SQL查询语句总结

1.01 查询所有行列

SELECT * FROM Table

1.02 查询特定的行和列

SELECT col1,col2,col3 FROM Table --查询指定的列

1.03 在查询中使用AS更改列名

SELECT Name AS 姓名 FROM Table

1.04 查询空行(关键字:is null, is not null)

SELECT Name FROM Table WHERE email is null
SELECT Name FROM Table WHERE email is not null

1.05 查询返回限制行数(关键字:top, percent)

select top 4 name from Table --返回name列的前4行
select top 60 percent subject from Table --返回subject列的前60%

–除此之外,可以结合where等条件语句,实现任意部分的数据提取 //当每一条数据都有一个特定的ID的时候,使用between and 是一种非常好的方法

1.06 查询排序(关键字:order by, asc[升序], desc[降序])

select * from Table order by grade1 desc

1.07 使用like(not like)进行模糊查询

注:like命令只作用于字符串

select * from Table_1 where name like ‘[张]%’

补充:一些常用的正则表达式:

‘[张]%’–表示筛选出第一个字是张的名字—>’[张李]%‘表示筛选出第一个字是张或者李的名字,以此类推
‘_[张]%’–表示筛选出第二个字是张的名字–>’__[张]%'表示筛选出第三个字是张的名字
‘[^张]%’–表示筛选出除了第一个字是张的名字,和上面规则结合使用

1.08 使用between and(not between and)在某个范围内进行查询 --当每一行均有属于自己特定的ID时,可以使用该命令选择出第m到n行的数据

select * from Table_1 where grade1 between 70 and 90

注:sql server中不能使用limit

1.09 使用in在列举值内进行查询

select * from Table_1 where teacher in (‘王华’,‘李明’)


1.10 使用group by进行分组查询

select teacher as 任课老师, AVG(grade3) as 平均分 from Table_1 group by teacher

补充:group by和order by搭配使用

select teacher as 任课老师, AVG(grade3) as 平均分 from Table_1 group by teacher order by AVG(grade3) desc

1.11 使用having进行分组筛选

select teacher as 任课老师, AVG(grade3) as 平均分 from Table_1 group by teacher having AVG(grade3) >= 70

【一个小说明】
关于top, limit, rownum,在sql server 中使用top;在mysql中使用limit;在oracle中使用rownum。

2.处理日期的语句大全

2.1-- playing interval
select sysdate + interval ‘3’ day as “3天后”
from dual
SELECT SUBSTR(to_char(sysdate - interval ‘3’ year ,‘yyyyMMdd’),1,6) FROM dual
2.2–加法
SELECT SYSDATE,ADD_MONTHS(SYSDATE,12) FROM DUAL; --加1年
SELECT SYSDATE,ADD_MONTHS(SYSDATE,1) FROM DUAL; --加1月
SELECT SYSDATE,TO_CHAR(SYSDATE+7,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --加1星期
SELECT SYSDATE,TO_CHAR(SYSDATE+1,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --加1天
SELECT SYSDATE,TO_CHAR(SYSDATE+1/24,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --加1小时
SELECT SYSDATE,TO_CHAR(SYSDATE+1/24/60,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --加1分钟
SELECT SYSDATE,TO_CHAR(SYSDATE+1/24/60/60,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --加1秒
2.3–减法
SELECT SYSDATE,ADD_MONTHS(SYSDATE,-12) FROM DUAL; --减1年
SELECT SYSDATE,ADD_MONTHS(SYSDATE,-1) FROM DUAL; --减1月
SELECT SYSDATE,TO_CHAR(SYSDATE-7,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --减1星期
SELECT SYSDATE,TO_CHAR(SYSDATE-1,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --减1天
SELECT SYSDATE,TO_CHAR(SYSDATE-1/24,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --减1小时
SELECT SYSDATE,TO_CHAR(SYSDATE-1/24/60,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --减1分钟
SELECT SYSDATE,TO_CHAR(SYSDATE-1/24/60/60,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --减1秒

SELECT TO_CHAR(SYSDATE,‘YYYYMMDD W HH24:MI:SS’) FROM DUAL --获得当前日期是本月第几周
SELECT TO_CHAR(SYSDATE,‘W’) FROM DUAL --获得当前日期是本月第几周

SELECT SYSDATE,TO_CHAR(SYSDATE,‘D’) FROM DUAL --取得当前日期是一个星期中的第几天,【注意星期日是第一天】

SELECT TO_CHAR(SYSDATE,‘yyyy’) FROM DUAL; --年
SELECT TO_CHAR(SYSDATE,‘Q’ )FROM DUAL; --季
SELECT TO_CHAR(SYSDATE,‘mm’) FROM DUAL; --月
SELECT TO_CHAR(SYSDATE,‘dd’) FROM DUAL; --日
SELECT TO_CHAR(SYSDATE,‘day’) FROM DUAL --取当前日期是星期几

2.4–得到当前日期
SELECT TO_CHAR(SYSDATE,‘DDD’) FROM DUAL --今天是今年的第N天
SELECT ADD_MONTHS(SYSDATE,24) FROM DUAL --给现在的日期加上2年
SELECT DECODE(TO_CHAR(LAST_DAY(TRUNC(SYSDATE,‘y’)+31),‘dd’),‘29’,‘闰年’,‘平年’) FROM DUAL --判断某一日子所在年分是否为润年
SELECT DECODE(TO_CHAR(LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE,48),‘y’)+31),‘dd’),‘29’,‘闰年’,‘平年’) FROM DUAL --判断4年后是否是闰年

SELECT CEIL(TO_NUMBER(TO_CHAR(SYSDATE,‘mm’))/3) FROM DUAL; --得到日期的季度
SELECT TO_CHAR(SYSDATE, ‘Q’) FROM DUAL; --得到日期的季度

(参考链接:https://www.cnblogs.com/forever-love-zjl/p/9717413.html)

3.一些经常用到的函数

3.1. coalesce()函数

语法: coalesce(exp1,exp2) 如果exp1是NULL,则coalesce(exp1,exp2) = exp2 ,否则,coalesce(exp1,exp2) = exp1

3.2. over()函数

 题记:over, over, over ... ...

语法: over(partition by exp2, order by exp3) 根据exp2对结果进行分区,在各分区内对exp3进行排序

over()函数不能单独使用,需要与row_number, rank(), dense_rank(), lag(), 和 lead(), sum()等配合使用

举一反三的小插曲: group by 和 partition by 的区别

group by 是聚合函数,group by会将数据进行压缩,在计算一些数字特征,如:sigma, mu 等特征值的时候回非常有用
partition by 是分区函数,ta会对结果集按照指定字段分层排列,不会对结果集产生压缩效果
eg:将公司所有人按照部门进行分区,会发现结果集中同一部门的人会连续排列

根据配合使用的函数不同,分层次介绍:

  • row_number(),rank(),dense_rank()
  • lag()与lead()
  • sum()

1、与row_number(),rank(),dense_rank()的使用

这三个函数与over连用时,order by不能丢失,不写partition by时,默认结果集为一整个分区。

–具体看参考链接

(参考链接:https://blog.csdn.net/a1065423444/article/details/75635611)


– row_number()与over()搭配使用

– 先按照部门进行分区,再对金额进行排序 – rn不允许并列!!!

select xmda002 as 业务员id, xmda003 as 部门id,
row_number() over(partition by xmda003 order by xmda016xmda041) as rn,xmda016xmda041 as 金额
from xmda_t where xmda002 is not null and rownum <= 20


–rank()与over()搭配使用

–先按部门进行分区,再对金额进行排序 – rk允许并列,但是…唉,描述不来,懒得描述!!!

select xmda002 as 业务员id, xmda003 as 部门id,
rank() over(partition by xmda003 order by xmda016xmda041) as rk, xmda016xmda041 as 金额
from xmda_t where xmda002 is not null and rownum <= 20


–dense_rank()与over()搭配使用

–先按部门进行分区,再对金额进行排序 – drk允许并列,而且…唉,描述不来,懒得描述!!!

select xmda002 as 业务员id, xmda003 as 部门id,
dense_rank() over(partition by xmda003 order by xmda016xmda041) as drk, xmda016xmda041 as 金额
from xmda_t where xmda002 is not null and rownum <= 20

–以上三个搭配,各有各的应用场景,因地制宜即可!


– lag()与over()的搭配使用
– lag字段第一个值为空

select xmda002 as 业务员id, xmda003 as 部门id,
lag(xmda003) over(partition by xmda003 order by xmda016xmda041) as lag, xmda016xmda041 as 金额
from xmda_t where xmda002 is not null and rownum <= 20

– lead()与over()搭配使用
– lead字段最后一个值为空

select xmda002 as 业务员id, xmda003 as 部门id,
lead(xmda003) over(partition by xmda003 order by xmda016xmda041) as lead, xmda016xmda041 as 金额
from xmda_t where xmda002 is not null and rownum <= 20

– sum()与over() 搭配使用
– 啥玩意儿?跑一下就知道了!!!

select xmda002, xmda003, xmda016xmda041 as je,
sum(xmda016
xmda041) over(partition by xmda003) as yyqkn,
sum(xmda016xmda041) over(partition by xmda003 order by xmda016xmda041) as zn
from xmda_t
where xmda002 is not null and rownum <= 20

【一个小说明】
nvl()和coalesce()的区别:nvl()函数只适用用有限各参数,即nvl(a,b)
coalesce()函数可以适用于无限各参数,coalesce(a,b,c,d,e,f)
二者功能相同

结束语
熟练掌握了上述内容,再众里寻他千百度,应该可以满足统计学专业同学们的基本需求啦。希望对大家有所帮助。整理总结不容易,看完请给个赞,谢谢侬。
兴趣小贴士,关于PLS方法很不错的一篇文章:https://wenku.baidu.com/view/54fc75543b3567ec102d8aba.html

统计学专业同学需要掌握的数据库基本用法相关推荐

  1. 统计学要学的计算机课程有哪些,统计学专业主要课程学什么_课程设置安排及分类...

    [www.altdl.com.cn--专业课程] 2018年高考填报志愿时大学哪些专业就业前景好是广大考生和家长朋友们十分关系的问题,其实大学就业前景好的专业是和国家和社会的发展现状离不开的.统计学专 ...

  2. 经济统计学专业学C语言,2019经济统计学专业怎么样、学什么、前景好吗

    经济统计学是统计学在经济领域中的应用,是以经济数据为研究对象,包括经济数据的采集,以及用统计方法分析经济数据背后的经济现象以及复杂经济系统的规律,从而为经济和管理决策服务.下面是学习啦小编给大家带来的 ...

  3. 计算机科学和统计专业排名,2021统计学专业大学排名 哪个学校最好

    哪些大学开设了统计学专业?哪个学校统计学专业实力比较强?下面小编整理了统计学专业大学的排名,供大家参考! 2021统计学专业高校排行榜 在最新公布的统计学专业大学排名中,最好的学校是排名第一的南京大学 ...

  4. 杜克大学计算机统计学,杜克大学的统计学专业怎么样?

    杜克大学统计学专业简介: 杜克大学的统计学专业开设在统计学系(Department of Statistical Science)下,研究生开设有以下3个学位项目,即: 1.统计学硕士(MS in S ...

  5. 统计学专业未来从事大数据方向有优势吗?

    根据现在工业界的大数据就业情况来说(对于一般同学而非牛人),统计从事大数据来说优势小.对一般数据分析甚至建模有一定优势. 我这篇回答面向的是大部分水平还可以的统计本科生,他们也努力学习了专业课,编程基 ...

  6. 美国统计学专业研究生申请解析

    近几年美国统计学研究生申请比较热门,而且统计学专业在美国本土的就业前景十分乐观而且收入也很可观,所以申请这个专业的人和转专业的人非常多.接下来将为您详细解析美国统计学研究生申请. 美国统计学研究方向: ...

  7. 计算机统计学研究方向,在职研究生统计学专业的研究方向有哪些?

    统计学是通过搜索.整理.分析数据等手段,以达到推断所测对象的本质,甚至预测对象未来的一门综合性科学.在职研究生统计学专业中用到了大量的数学及其它学科的专业知识,它的使用范围几乎覆盖了社会科学和自然科学 ...

  8. 应用统计学和计算机哪个好学,东北大学应用统计学专业要学哪些课程,好学吗?...

    考生:请问东北大学应用统计学专业要学哪些课程,好学吗? 东北大学应用统计学专业要学的课程小编已经收集整理好啦,至于好不好学,这个真说不上来,因人而异吧. 专业中文名称应用统计学 专业英文名称Appli ...

  9. 应用统计学与计算机论文2000字,应用统计学专业论文范文

    摘 要:检索关于"医学稿件统计学方法误用"主题的中文研究论文,对论文中提及的统计学误用方法进行系统分析并汇总,总结关于该主题论文的分布规律和发展脉络,并提出对该问题的应对策略. 关 ...

最新文章

  1. python中读取文件内容-Python读取文件内容的三种常用方式及效率比较
  2. IO: BIO ? NIO ? AIO?
  3. JAVA单字节读取,java资料读取。(单字节读取和按行读取读取)
  4. [css] 不使用border画出1px高的线,在不同浏览器的标准和怪异模式下都能保持效果一样
  5. 2020年Airbnb爱彼迎中国房东社区报告
  6. RabbitMq 3.0.1 技术预演资料
  7. 北斗导航 | RAIM:基于速率监测的GNSS/INS完好性监测
  8. 数据结构(C语言)-数组
  9. 2022,微博稳了吗?
  10. oracle实现批量drop表,ORACLE下批量DROP表格
  11. bootloader 解析
  12. nacos启动报错 Unable to start embedded Tomcat 以及项目链接nacos报错 server is DOWN now, please try again later!
  13. 计算机组成原理——计算机基本组成
  14. 苹果手机有4g信号但是微信未连接服务器,苹果5s有显示4g网络但无上微信 是不是那里设置了 今天才出现的...
  15. java程序员学习路线指南
  16. 彼岸花开开彼岸,奈何桥前怎奈何
  17. Linux 中 which、whereis、locate、find的区别
  18. swi prolog 和java_在Java和SWI Prolog之间连接 - java
  19. linux查看硬盘命令 ok,linux查看硬件信息大全
  20. 2019创业新项目手游充值代理是骗人的还是风口?

热门文章

  1. 11款开放中文分词引擎大比拼 1
  2. 前端网络基础 - Cookie
  3. 关于OpenGL的常用初始化设置(选择独立显卡、设置垂直同步、抗锯齿)
  4. 消费新品周报 | 海信推出85吋8K智慧大屏电视;Sonos智能音响在京东、天猫平台发售...
  5. Sonos 大中华区总裁王汉华:我们不做内容、不做操作系统,做生态链的一环
  6. 如何用java实现每天给家人说晚安!!!
  7. Creo 10.0.0 安装包及安装教程
  8. Visual Studio 2022 c#中很实用的VS默认快捷键和原生功能
  9. html设置按钮样式表,如何使用样式表设置QToolButton的图标?
  10. 翌加科技:教抖音小店商家采取措施避免售后争议