oracle学习笔记(3)

2019-03-22 09:36

JOB中不包含'MANAGER'和'CLERK'的所有员工信息 SELECT ENAME,JOB,SAL FROM EMP_GH WHERE JOB NOT IN('MANAGER','CLERK')

***BETWEEN AND 在两者之间,小的在前,大的在后(包含上下线的一个范围 [1500,3000],如果

大的在前,就会出现无结果) SELECT ENAME,SAL,JOB FROM EMP_GH

WHERE sal BETWEEN 1500 AND 3000--[1500,3000] ***IS NULL IS NOT NULL

***ANY 和 ALL条件

ANY(LIST):大于列表其中之一即可 ALL(LIST):大于列表所有

不能单独使用,要配合>,<,=等使用,一般在子查询中使用 SELECT ENAME,SAL FROM EMP_GH

WHERE SAL>ANY(800,900,1500)--后期再列表中是,表达式,不是直接写结果. ***函数,表达式条件

SELECT ENAME,JOB,SAL FROM EMP_GH WHERE SAL*12>50000

SELECT ENAME,SAL,JOB FROM EMP_GH WHERE UPPER(ENAME) = UPPER('SCOTT') ***DISTINCT 去除重复

查看公司中有哪些职位,单字段去重 SELECT DISTINCT JOB FROM EMP_GH

多字段去重,保证,多字段的组合没有重复的 SELECT DISTINCT JOB,DEPTNO FROM EMP_GH *******排序 ORDER BY 语句

排序,ASC为升序,默认的,可以省略 DESC降序 ORDER BY语句只能出现在最后, 分为单字段排序和多字段排序,

**多字段排序是先按照第一个字段排序,如果出现相同情况下按照第二个字段进行排序,以此类推

*** null在排序的时候被认为最大值 工资按照升序排列

SELECT ENAME,SAL FROM EMP_GH ORDER BY SAL 工资按照降序排列

SELECT ENAME,SAL FROM EMP_GH ORDER BY SAL DESC 多字段排序

SELECT ENAME,DEPTNO,SAL FROM EMP_GH

ORDER BY DEPTNO DESC,SAL ASC --DEPTNO按照倒序先排,重复的在按SAL正序排列 NULL在排序中被认为最大

SELECT ENAME,COMM FROM EMP_GH ORDER BY COMM

******聚合函数/多行函数/分组函数 忽略null值

将结果集按照指定的字段进行统计然后得到一条记录 *** MAX(),MIN()指定字段的最大值,最小值 SELECT MAX(SAL),MIN(SAL) FROM EMP_GH

*** AVG() 和 SUM()

统计指定字段的平均值和总和

SELECT TRUNC(AVG(SAL),2) SAL,SUM(SAL) FROM EMP_GH

忽略null值,集合函数忽略null,在进行总体的统计时,需要将null值转化为0 SELECT AVG(NVL(COMM,0)) FROM EMP_GH *** COUNT()

统计指定字段不为NULL的记录的总数

忽略null就只统计不为null值得字段总数 SELECT COUNT(COMM) FROM EMP_GH

**查看一张表中的记录数常数:count(*) SELECT COUNT(*) FROM EMP_GH ***分组函数 GROUP BY

在集合函数中出现了其他字段,那么其他字段必须出现在GROUP BY 中,表示以该字段分组来进行统计

查看每个部门的平均工资 SELECT AVG(SAL),DEPTNO FROM EMP_GH GROUP BY DEPTNO

SELECT DEPTNO FROM EMP_GH GROUP BY DEPTNO

每个职位的工资总和

SELECT SUM(SAL),JOB FROM EMP_GH GROUP BY JOB

**多字段分组原则 GROUP BY

将这些字段值得组合相同的看做成成一组,

查看每个部门中每个职位的平均工资 SELECT AVG(SAL),DEPTNO,JOB FROM EMP_GH

GROUP BY DEPTNO,JOB

***WHERE 中不允许使用集合函数进行过滤条件 原因:时机不对

WHERE 是在查询表中每条数据时就进行过滤的,所以,where决定着那条数据被查

询出来

二分组统计是在表中数据查询出来后基于结果集进行的,所以根据分组统计的结果作为过滤条

件是不能再where中使用的 ***HAVING 字句

HAVING字句不能独立存在,必须跟在group BY 字句之后,HAVING 可以使用集合函数作为过滤

条件,它是用来根据统计结果决定保留哪些分组的 查看部门高于仨个人的部门平均工资 SELECT AVG(SAL),DEPTNO FROM EMP_GH GROUP BY DEPTNO HAVING COUNT(*)>3

最低工资高于1000的每种职位的人数,

SELECT COUNT(*) ,JOB FROM EMP_GH GROUP BY JOB

HAVING AVG(SAL)>1000 查询语句的语句,

***************************关联查询 where中写关联条件

SELECT EMP_GH.ENAME,DEPT_GH.DNAME FROM EMP_GH,DEPT_GH

WHERE EMP_GH.DEPTNO = DEPT_GH.DEPTNO

表名也可以使用别名 SELECT E.ENAME,D.DNAME

FROM EMP_GH E,DEPT_GH D WHERE E.DEPTNO = D.DEPTNO

查看sales部门的员工信息,可以将查询条件和关联条件放在一起

SELECT E.ENAME,E.SAL,D.DNAME FROM EMP_GH E,DEPT_GH D

WHERE E.DEPTNO = D.DEPTNO AND D.DNAME = 'SALES'

查看在new yourk工作的都有谁 SELECT E.ENAME

FROM EMP_GH E,DEPT_GH D

WHERE E.DEPTNO = D.DEPTNO AND D.LOC ='NEW YOUK'

查看每个地区工作的人数 SELECT COUNT(*),D.LOC FROM EMP_GH E,DEPT_GH D WHERE E.DEPTNO = D.DEPTNO

GROUP BY D.LOC

如果不进行关联条件,则进行笛卡尔积,

在关联查询中,若不指定连接条件,则会产生笛卡尔积,该结果集 会将每张表中的每条记录分别连接一次,

组成一条记录,开销巨大,通常是一个没有意义的结果集,结果集是表中数据的乘积, 有N张表就应当有N-1个连接条件

******************内部连接****************************** ***JOIN内关联的

SELECT E.ENAME,D.DNAME

FROM EMP_GH E JOIN DEPT_GH D ON E.DEPTNO = D.DEPTNO WHERE D.DNAME='SALES'

***无论关联查询还是内部查询,都忽略不满足连接条件的记录

*******************外链接

外链接可以在关联条件不满足的数据进行查询,分为: 左外连接:LEST OUTER JOIN 以join左侧的表作为驱动表(主要显示数据的表),该表中的数据全部进行查询,当不满足条件

的数据,在右侧表中都会补充NULL值 右外链接:RIGHT OUTER JOIN 全外链接:FULL OUTER JOIN

SELECT E.ENAME,D.DNAME

FROM EMP_GH E LEFT OUTER JOIN DEPT_GH D ON E.DEPTNO = D.DEPTNO

SELECT E.ENAME ,D.DNAME

FROM EMP_GH E RIGHT OUTER JOIN DEPT_GH D ON E.DEPTNO = D.DEPTNO

SELECT E.ENAME,D.DNAME

FROM EMP_GH E FULL OUTER JOIN DEPT_GH D ON E.DEPTNO = D.DEPTNO

***普通的外链接可以用以下 +号在那边,那边补null 右外链接,

SELECT E.ENAME,D.DNAME FROM EMP_GH E,DEPT_GH D

WHERE E.DEPTNO(+) = D.DEPTNO 做外链接

SELECT E.ENAME,D.DNAME FROM EMP_GH E,DEPT_GH D

WHERE E.DEPTNO = D.DEPTNO(+) ************自连接

用于解决相同类型数据,但是又存在上下级关系的树状结构的储存,

自连接,当前表的记录与当前表的其他记录有对应的关系

查看员工的名字及领导的名字 SELECT E.ENAME,M.ENAME FROM EMP_GH E,EMP_GH M WHERE E.MGR=M.EMPNO(+)

查看每个员工的领导在哪儿工作

分析,员工,领导,工作地三张表进行关联查询 SELECT E.ENAME,M.ENAME,D.LOC FROM EMP_GH E JOIN EMP_GH M ON E.MGR=M.EMPNO0 JOIN DEPT_GH D

ON M.DEPTNO = D.DEPTNO 或

SELECT E.ENAME,M.ENAME,D.LOC FROM EMP_GH E,EMP_GH M,DEPT_GH D

WHERE E.MGR=M.EMPNO AND M.DEPTNO=D.DEPTNO

*****************************TEST************************* 1:查看工资高于2000的员工 SELECT ENAME FROM EMP_GH WHERE SAL>2000

2:查看不是\职位的员工 SELECT ENAME FROM EMP_GH WHERE JOB<>'CLERK'

3:查看工资在1000-2500之间的员工 SELECT ENAME FROM EMP_GH

WHERE SAL BETWEEN 1000 AND 2500 4:查看名字是以K结尾的员工 SELECT ENAME FROM EMP_GH WHERE ENAME LIKE '%K' 5:查看20,30号部门的员工

SELECT ENAME,DEPTNO FROM EMP_GH WHERE DEPTNO=20 OR DEPTNO=30 6:查看奖金为NULL的员工

SELECT ENAME,COMM FROM EMP_GH

WHERE COMM IS NULL--NULL不能用=号,要用is null 7:查看年薪高于20000的员工 SELECT

ENAME,SAL*12


oracle学习笔记(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:形势与政策

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: