笔记:ORACLE数据库基础学习 第三天

来源:互联网 发布:开票软件下载程序 编辑:程序博客网 时间:2024/06/05 16:08
--列别名--当SELECT子句中一个字段是函数或者表达式--那么在结果中该字段的名字就是这个函数或--表达式,可读性差,为此可以为列提供一个列名,--这样在结果集中会使用该列名作为该字段的名字。--应当养成一个好习惯,即:凡是表达式或者函数都指定一个别名。SELECT ename,sal+NVL(comm,0) totalFROM emp_gl;--别名本身不区分大小写,若希望别名区分大小写或者--别名中包含空格,那么需要使用双引号将其括起来。SELECT ename,sal+NVL(comm,0) "Total"FROM emp_gl;--使用>,<,>=,<=,<>,!=,=SELECT ename,sal FROM emp_glWHERE sal<2000;SELECT ename,sal ,job FROM emp_glWHERE deptno<>10;SELECT ename ,sal,hiredate FROM emp_glWHERE hiredate>TO_DATE('1982-1-1','YYYY-MM-DD');--使用AND,OR关键字SELECT ename,sal,job FROM emp_glWHERE sal>1000 AND job ='CLERK';SELECT ename,sal,job FROM emp_glWHERE sal<1000 OR job='CLERK';--OR的优先级低于AND,所以若希望提高OR的优先级,可以使用括号。--工资大于1000的 职位是'SALESMAN'或者'CLERK'的员工SELECT ename,sal,job FROM emp_glWHERE sal>1000 AND (job='SALESMAN' OR job='CLERK');--LIKE用于模糊匹配字符串--支持两个通配符:--%:0-多个字符(任意个字符)--_:单一的一个字符--查看名字第二个字母是A的员工?SELECT ename,sal,deptnoFROM emp_glWHERE ename LIKE '_A%';--名字中含有K的员工?SELECT ename,sal,deptnoFROM emp_glWHERE ename LIKE '%K%';--IN(list) 和NOT IN(list)--判断在列表中和不在列表中--IN,NOT IN常被用在子查询上使用。--查看职位是CLERK和SALESMAN的员工?SELECT ename,job ,salFROM EMP_GLWHERE job  IN('CLERK','SALESMAN');SELECT ename FROM emp_glWHERE sal BETWEEN 1500 AND 3000--查看工资在1000-300之间,20-30号部门名字中含有A的员工SELECT ename, sal, deptno ,jobFROM emp_glWHERE (sal BETWEEN 1000 AND 3000) AND (deptno IN(20,30)) AND ename LIKE '%A%';--空值NULL是一个特殊的值,比较的时候不能日内该用“=”号,--必须使用IS NULL,否则不能得到正确的结果。--查询哪些职员的奖金数据为NULLSELECT ename,sal,comm FROM empWHERE comm IS NULL--ANY(list) ALL(list)--ANY,ALL是配合>,>=,<,<=使用的-->ANY(list):大于列表之一,大于最小--ALL(list):大于列表所有,大于最大--2000GROUP BY deptno--上面的SQL语句会抛出异常,WHERE子句中是不能使用聚合函数--做为过滤条件的,原因在于过滤的时机不对。--WHERE是伴随查询表中数据逐行进行过滤使用的,用来确定结果--集中可以查询出的条目数。而聚合函数是建立在查询出来的数据--基础上进行统计才能得到结果,所以使用聚合函数过滤应当是在--WHERE之后进行的。--HAVING子句可以根据聚合函数进行过滤,并且是用来根据条件过--滤GROUP BY的分组。--HAVING不能单独出现,不定义GROUP BY子句不能单独出现HAVING子句SELECT AVG(sal),deptnoFROM emp_glGROUP BY deptno HAVING AVG(sal)>2000--查看平均工资高于2000的那些部门的最高工资?SELECT MAX(sal),deptnoFROM emp_glGROUP BY deptno HAVING AVG(sal)>2000--关联查询--关联查询的结果集中的字段来自多张表,这就需要在查询的时候--联合多张表进行查询,根据给定的连接条件将表与表的数据建立--对应关系,再分别从这些记录中提取要查询的字段来形成结果集--中的每条记录。--查看每个员工的名字以及其所在部门的名字?SELECT ename,dnameFROM emp_gl,dept_glWHERE emp_gl.deptno=dept_gl.deptnoSELECT e.ename,e.deptno,d.dnameFROM emp_gl e,dept_gl dWHERE e.deptno=d.deptno--在进行关联查询时若有过滤条件,那么过滤条件必须与连接条件--同时成立。--查看在NEW YORK工作的员工都有谁?SELECT e.ename,e.deptno,d.dname,d.locFROM emp_gl e,dept_gl dWHERE e.deptno=d.deptno AND d.loc='NEW YORK'--关联查询中不指定连接条件或者连接条件无效时,--会产生笛卡尔积,这通常是一个无意义的结果!SELECT e.ename,d.dnameFROM emp_gl e,dept_gl d;--N表查询至少要有N-1个连接条件。--内连接--内连接也是用来完成关联查询的。--采用JOIN...ON...的形式关联多表。--查看每个员工的名字以及其所在部门SELECT e.ename,e.deptno,d.dnameFROM emp_gl e JOIN dept_gl dON(e.deptno = d.deptno)--将SCOTT的部门号改为50UPDATE emp_glSET deptno=50WHERE ename='SCOTT'--不满足关联条件的记录不会被查询出来.--外连接--外连接在关联查询中除了可以将满足连接条件的记录--查询出来之外,还可以将不满足连接条件的记录也列出来--外连接分为:--左外连接,右外连接,全外连接--左外连接:以JOIN左侧表作为驱动表,该表记录都要--查询出来,当某条记录不满足连接条件时,那么在结果--集中该条记录来自JOIN右侧表的字段的值全部为NULL。SELECT e.ename,e.deptno,d.dname,d.locFROM emp_gl e LEFT OUTER JOIN dept_gl dON(e.deptno=d.deptno)SELECT e.ename,e.deptno,d.dname,d.locFROM emp_gl e,dept_gl dWHERE e.deptno=d.deptno(+)--右外连接SELECT e.ename,e.deptno,d.dname,d.locFROM emp_gl e RIGHT OUTER JOIN dept_gl dON(e.deptno=d.deptno)SELECT e.ename,e.deptno,d.dname,d.locFROM emp_gl e,dept_gl dWHERE e.deptno(+)=d.deptno--全外连接SELECT e.ename,e.deptno,d.dname,d.locFROM emp_gl e FULL OUTER JOIN dept_gl dON(e.deptno=d.deptno)--自连接--自连接指的是当前表的一条数据可以对应当前表自己的多余数据--自连接是为了解决数据的属性相同,但是本身又存在上下级关系--的树状数据结构。SELECT e.ename,m.enameFROM emp_gl e,emp_gl mWHERE e.mgr=m.empno(+)SELECT e.ename,m.enameFROM emp_gl e LEFT OUTER JOIN emp_gl mON e.mgr=m.empno--1:查看工资高于2000的员工SELECT ename,salFROM emp_glWHERE sal>2000;--2:查看不是"CLERK"职位的员工SELECT ename,jobFROM emp_glWHERE job<>'CLERK';--3:查看工资在1000-2500之间的员工SELECT ename,salFROM emp_glWHERE sal BETWEEN 1000 AND 2500;--4:查看名字是以K结尾的员工SELECT enameFROM emp_glWHERE ename LIKE '%K';--5:查看20,30号部门的员工SELECT ename,deptnoFROM emp_glWHERE deptno IN(20,30);--6:查看奖金为NULL的员工SELECT ename,commFROM emp_glWHERE comm IS NULL;--7:查看年薪高于20000的员工SELECT ename,sal,sal*12FROM emp_glWHERE sal*12>20000;--8:查看公司共有多少种职位SELECT DISTINCT job FROM emp_gl;--9:按部门号从小到大排列查看员工SELECT ename,deptnoFROM emp_glORDER BY deptno ASC;--10:查看每个部门的最高,最低,平均工资,和工资总和SELECT MAX(sal),MIN(sal),AVG(sal),SUM(sal),deptnoFROM emp_glGROUP BY deptno;--11:查看平均工资高于2000的部门的最低薪水SELECT MIN(sal),deptnoFROM emp_glGROUP BY deptno HAVING AVG(sal)>2000;--12:查看在NEWYORK工作的员工SELECT e.ename,e.deptno,d.locFROM emp_gl e,dept_gl dWHERE e.deptno=d.deptno;--13:查看所有员工及所在部门信息,若该员工没有部门,则--   部门信息以NULL显示SELECT e.ename,e.deptno,d.dnameFROM emp_gl e,dept_gl dWHERE e.deptno=d.deptno(+);--14:查看ALLEN的上司是谁SELECT e.ename,m.enameFROM emp_gl e JOIN emp_gl m ON e.mgr=m.empnoWHERE e.ename='ALLEN';--15:查看SMITH上司在哪个城市工作?SELECT  e.ename,m.ename,m.deptno,d.locFROM emp_gl e JOIN emp_gl m ON e.mgr=m.empnoJOIN dept_gl d ON m.deptno =d.deptnoWHERE e.ename='SMITH';--16:查看平均工资高于2000的那些部门名字以及所在城市?SELECT e.deptno,d.locFROM emp_gl e JOIN dept_gl dON e.deptno=d.deptnoGROUP BY e.deptno,d.loc HAVING AVG(sal)>2000;--17:在NEW YORK工作的员工有多少人?SELECT COUNT(*) FROM emp_gl e JOIN dept_gl dON e.deptno=d.deptnoWHERE d.loc='NEW YORK';--18:在DALLAS工作的员工的平均工资是多少?SELECT AVG(e.sal)FROM emp_gl e JOIN dept_gl dON e.deptno=d.deptnoWHERE d.loc='DALLAS';
原创粉丝点击