笔记:ORACLE数据库基础学习 第三天
2017-08-17 19:38
615 查看
--列别名 --当SELECT子句中一个字段是函数或者表达式 --那么在结果中该字段的名字就是这个函数或 --表达式,可读性差,为此可以为列提供一个列名, --这样在结果集中会使用该列名作为该字段的名字。 --应当养成一个好习惯,即:凡是表达式或者函数都指定一个别名。 SELECT ename,sal+NVL(comm,0) total FROM emp_gl; --别名本身不区分大小写,若希望别名区分大小写或者 --别名中包含空格,那么需要使用双引号将其括起来。 SELECT ename,sal+NVL(comm,0) "Total" FROM emp_gl; --使用>,<,>=,<=,<>,!=,= SELECT ename,sal FROM emp_gl WHERE sal<2000; SELECT ename,sal ,job FROM emp_gl WHERE deptno<>10; SELECT ename ,sal,hiredate FROM emp_gl WHERE hiredate>TO_DATE('1982-1-1','YYYY-MM-DD'); --使用AND,OR关键字 SELECT ename,sal,job FROM emp_gl WHERE sal>1000 AND job ='CLERK'; SELECT ename,sal,job FROM emp_gl WHERE sal<1000 OR job='CLERK'; --OR的优先级低于AND,所以若希望提高OR的优先级,可以使用括号。 --工资大于1000的 职位是'SALESMAN'或者'CLERK'的员工 SELECT ename,sal,job FROM emp_gl WHERE sal>1000 AND (job='SALESMAN' OR job='CLERK'); --LIKE用于模糊匹配字符串 --支持两个通配符: --%:0-多个字符(任意个字符) --_:单一的一个字符 --查看名字第二个字母是A的员工? SELECT ename,sal,deptno FROM emp_gl WHERE ename LIKE '_A%'; --名字中含有K的员工? SELECT ename,sal,deptno FROM emp_gl WHERE ename LIKE '%K%'; --IN(list) 和NOT IN(list) --判断在列表中和不在列表中 --IN,NOT IN常被用在子查询上使用。 --查看职位是CLERK和SALESMAN的员工? SELECT ename,job ,sal FROM EMP_GL WHERE job IN('CLERK','SALESMAN'); SELECT ename FROM emp_gl WHERE sal BETWEEN 1500 AND 3000 --查看工资在1000-300之间,20-30号部门名字中含有A的员工 SELECT ename, sal, deptno ,job FROM emp_gl WHERE (sal BETWEEN 1000 AND 3000) AND (deptno IN(20,30)) AND ename LIKE '%A%'; --空值NULL是一个特殊的值,比较的时候不能日内该用“=”号, --必须使用IS NULL,否则不能得到正确的结果。 --查询哪些职员的奖金数据为NULL SELECT ename,sal,comm FROM emp WHERE comm IS NULL --ANY(list) ALL(list) --ANY,ALL是配合>,>=,<,<=使用的 -->ANY(list):大于列表之一,大于最小 --ALL(list):大于列表所有,大于最大 --2000 GROUP BY deptno --上面的SQL语句会抛出异常,WHERE子句中是不能使用聚合函数 --做为过滤条件的,原因在于过滤的时机不对。 --WHERE是伴随查询表中数据逐行进行过滤使用的,用来确定结果 --集中可以查询出的条目数。而聚合函数是建立在查询出来的数据 --基础上进行统计才能得到结果,所以使用聚合函数过滤应当是在 --WHERE之后进行的。 --HAVING子句可以根据聚合函数进行过滤,并且是用来根据条件过 --滤GROUP BY的分组。 --HAVING不能单独出现,不定义GROUP BY子句不能单独出现HAVING子句 SELECT AVG(sal),deptno FROM emp_gl GROUP BY deptno HAVING AVG(sal)>2000 --查看平均工资高于2000的那些部门的最高工资? SELECT MAX(sal),deptno FROM emp_gl GROUP BY deptno HAVING AVG(sal)>2000 --关联查询 --关联查询的结果集中的字段来自多张表,这就需要在查询的时候 --联合多张表进行查询,根据给定的连接条件将表与表的数据建立 --对应关系,再分别从这些记录中提取要查询的字段来形成结果集 --中的每条记录。 --查看每个员工的名字以及其所在部门的名字? SELECT ename,dname FROM emp_gl,dept_gl WHERE emp_gl.deptno=dept_gl.deptno SELECT e.ename,e.deptno,d.dname FROM emp_gl e,dept_gl d WHERE e.deptno=d.deptno --在进行关联查询时若有过滤条件,那么过滤条件必须与连接条件 --同时成立。 --查看在NEW YORK工作的员工都有谁? SELECT e.ename,e.deptno,d.dname,d.loc FROM emp_gl e,dept_gl d WHERE e.deptno=d.deptno AND d.loc='NEW YORK' --关联查询中不指定连接条件或者连接条件无效时, --会产生笛卡尔积,这通常是一个无意义的结果! SELECT e.ename,d.dname FROM emp_gl e,dept_gl d; --N表查询至少要有N-1个连接条件。 --内连接 --内连接也是用来完成关联查询的。 --采用JOIN...ON...的形式关联多表。 --查看每个员工的名字以及其所在部门 SELECT e.ename,e.deptno,d.dname FROM emp_gl e JOIN dept_gl d ON(e.deptno = d.deptno) --将SCOTT的部门号改为50 UPDATE emp_gl SET deptno=50 WHERE ename='SCOTT' --不满足关联条件的记录不会被查询出来. --外连接 --外连接在关联查询中除了可以将满足连接条件的记录 --查询出来之外,还可以将不满足连接条件的记录也列出来 --外连接分为: --左外连接,右外连接,全外连接 --左外连接:以JOIN左侧表作为驱动表,该表记录都要 --查询出来,当某条记录不满足连接条件时,那么在结果 --集中该条记录来自JOIN右侧表的字段的值全部为NULL。 SELECT e.ename,e.deptno,d.dname,d.loc FROM emp_gl e LEFT OUTER JOIN dept_gl d ON(e.deptno=d.deptno) SELECT e.ename,e.deptno,d.dname,d.loc FROM emp_gl e,dept_gl d WHERE e.deptno=d.deptno(+) --右外连接 SELECT e.ename,e.deptno,d.dname,d.loc FROM emp_gl e RIGHT OUTER JOIN dept_gl d ON(e.deptno=d.deptno) SELECT e.ename,e.deptno,d.dname,d.loc FROM emp_gl e,dept_gl d WHERE e.deptno(+)=d.deptno --全外连接 SELECT e.ename,e.deptno,d.dname,d.loc FROM emp_gl e FULL OUTER JOIN dept_gl d ON(e.deptno=d.deptno) --自连接 --自连接指的是当前表的一条数据可以对应当前表自己的多余数据 --自连接是为了解决数据的属性相同,但是本身又存在上下级关系 --的树状数据结构。 SELECT e.ename,m.ename FROM emp_gl e,emp_gl m WHERE e.mgr=m.empno(+) SELECT e.ename,m.ename FROM emp_gl e LEFT OUTER JOIN emp_gl m ON e.mgr=m.empno --1:查看工资高于2000的员工 SELECT ename,sal FROM emp_gl WHERE sal>2000; --2:查看不是"CLERK"职位的员工 SELECT ename,job FROM emp_gl WHERE job<>'CLERK'; --3:查看工资在1000-2500之间的员工 SELECT ename,sal FROM emp_gl WHERE sal BETWEEN 1000 AND 2500; --4:查看名字是以K结尾的员工 SELECT ename FROM emp_gl WHERE ename LIKE '%K'; --5:查看20,30号部门的员工 SELECT ename,deptno FROM emp_gl WHERE deptno IN(20,30); --6:查看奖金为NULL的员工 SELECT ename,comm FROM emp_gl WHERE comm IS NULL; --7:查看年薪高于20000的员工 SELECT ename,sal,sal*12 FROM emp_gl WHERE sal*12>20000; --8:查看公司共有多少种职位 SELECT DISTINCT job FROM emp_gl; --9:按部门号从小到大排列查看员工 SELECT ename,deptno FROM emp_gl ORDER BY deptno ASC; --10:查看每个部门的最高,最低,平均工资,和工资总和 SELECT MAX(sal),MIN(sal),AVG(sal),SUM(sal),deptno FROM emp_gl GROUP BY deptno; --11:查看平均工资高于2000的部门的最低薪水 SELECT MIN(sal),deptno FROM emp_gl GROUP BY deptno HAVING AVG(sal)>2000; --12:查看在NEWYORK工作的员工 SELECT e.ename,e.deptno,d.loc FROM emp_gl e,dept_gl d WHERE e.deptno=d.deptno; --13:查看所有员工及所在部门信息,若该员工没有部门,则 -- 部门信息以NULL显示 SELECT e.ename,e.deptno,d.dname FROM emp_gl e,dept_gl d WHERE e.deptno=d.deptno(+); --14:查看ALLEN的上司是谁 SELECT e.ename,m.ename FROM emp_gl e JOIN emp_gl m ON e.mgr=m.empno WHERE e.ename='ALLEN'; --15:查看SMITH上司在哪个城市工作? SELECT e.ename,m.ename,m.deptno,d.loc FROM emp_gl e JOIN emp_gl m ON e.mgr=m.empno JOIN dept_gl d ON m.deptno =d.deptno WHERE e.ename='SMITH'; --16:查看平均工资高于2000的那些部门名字以及所在城市? SELECT e.deptno,d.loc FROM emp_gl e JOIN dept_gl d ON e.deptno=d.deptno GROUP BY e.deptno,d.loc HAVING AVG(sal)>2000; --17:在NEW YORK工作的员工有多少人? SELECT COUNT(*) FROM emp_gl e JOIN dept_gl d ON e.deptno=d.deptno WHERE d.loc='NEW YORK'; --18:在DALLAS工作的员工的平均工资是多少? SELECT AVG(e.sal) FROM emp_gl e JOIN dept_gl d ON e.deptno=d.deptno WHERE d.loc='DALLAS';
相关文章推荐
- 笔记:ORACLE数据库基础学习 第五天
- 笔记:ORACLE数据库基础学习 第一天
- Oracle基础学习笔记
- 重新整理后的Oracle OAF学习笔记——3.应用构建基础之实现模型
- Silverlight学习笔记[4] - 在Silverlight中通过WCF连接ORACLE DB数据库(译)
- Oracle基础学习笔记(四)(VIEW)
- {传智播客} (学习笔记)--Oracle使用需要掌握的基础知识
- [ORACLE ]学习笔记一之数据库的导入导出
- Oracle基础学习笔记(1)
- 黑马程序员之ORACLE数据库学习笔记:oracle存储过程单步调试方法
- Oracle基础学习笔记(二)(Index)
- 黑马程序员之ORACLE数据库学习笔记:如何实现连接池及连接池的优缺点
- [学习笔记]java+oracle 存储图片到数据库中 a---存储
- Oracle基础学习笔记(2)
- Oracle基础学习笔记(五) (PL/SQL)
- Java学习笔记(八、数据库编程基础)
- oracle数据库基础学习
- 重新整理后的Oracle OAF学习笔记——4.应用构建基础之实现视图
- 倪蒙oralce学习笔记之Oracle创建删除用户、角色、表空间、导入导出数据库总结
- Oracle基础学习六之数据库权限及用户管理