经典Oracle笔记.doc_第1页
经典Oracle笔记.doc_第2页
经典Oracle笔记.doc_第3页
经典Oracle笔记.doc_第4页
经典Oracle笔记.doc_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ORACLE笔 记-首先进入cmd 输入-sqlplus system/wangbo as sysdba SQLconn sys/wangbo as sysdba -切换到sys用户下 SQLalter user scott account unlock;-解锁scott用户 SQLcommit; -提交语句 SQLconn scott /tiger; -会提示密码过期,要求输入新密码最好还是tiger -在sys下创建表空间 SQLcreate tablespace wpj datafile e:scott.dbf size 10; -创建表空间 SQLcreate temporary tablespace wpj1203 tempfile e:wp.dbf size 5M;-创建临时表空间 SQLdrop tablespace wpj1203; -删除表空间 SQLcreate user wang identified by wang; -创建密码是wang的账户wang SQLdrop user wang; -删除用户 SQLgrant create session to wang; -授权会话 SQLgrant dba to wang; -授予管理员权限-修改密码 SQLalter user wang identified by wang;(sys账户下) SQLpassword (自己账户下) -利用scott做测试(环境设置) SQLset line 100 设置每行多少字节 SQLset pagesize 50 设置每页多少条记录 SQLset line 100 pagesize 50 SQLset autocommit on/off 开启/关闭自动提交服务 (只对当前用户进程有效) (备注:如果没有开启此项 每次增、删、改、查的时候数据没有录入到数据库,或者每次使用commit;命令)-查看表结构(查询语句)SQLdesc emp -查看表结构SQLselect * from emp; -查看emp这张表的结构SQLselect ename,sal from emp; -查看部分字段SQLselect ename 姓名,sal as 薪水 from emp; -给字段取别名(as是可选操作) SQLselect * from emp where comm is NULL; -注意is不能改为not-脚本 创建:edit c:a.sql 执行:start c:a.sql spool c:b.sql -start select * from emp; -将中间的sql语句,及sql语句执行 的结果放在指定文件中。 spool off -end-创建表 (1)create table stu(id number,name varchar2(20); (2)create table demo as select empno,ename from emp; 备注:不能复制约束条件.-修改表 (1)增加字段 alter table stu add sex char; (2)删除字段 alter table stu drop column sex; -column(列) (3)修改字段 alter table stu modify name varchar2(10); 备注:修改某个字段的数据类型的时候,该字段必须为空 (4)修改表名alter table stu rename to student; -方法一rename student to stu; -方法二-基本的sql语句 (1)select * from emp; select empno,ename from emp; (2)update stu set id=103 where id=102; (3)insert into stu values(103,Mark); insert into stu(id) values(104); (4)delete from stu; delete from stu where id=104;-select查询 (1)取别名 select id 学号,name as 姓名 from stu; (2)where查询(and or in) select * from emp where empno=7788; select sal from emp where ename=scott; select ename,sal from emp where sal ?; -?问好的值自己填写 select ename,sal from emp where sal (select sal from emp where ename=SCOTT);(备注:如果scott是小写 则查询不出结果)字段名、表名、关键字等大小写不敏感; 但是字符串的字段值大小写敏感。 select ename,job,sal from emp where job in(CLERK,MANAGER); 不等价一下语句: select ename,job,sal from emp where job=CLERK AND job=MANAGER -报错 备注:and 连接的两个条件中的字段不同 in 给定某个字段查询的范围 null查询:select * from emp where comm is (NOT)NULL; update emp set comm=nvl(comm,0)+200 where comm is null; 空值转换函数nvl(comm,0) 将comm中的空值用0替换 nvl(ename,NULL);1.查看所有用户:select * from dba_user;select * from all_users;select * from user_users;2.查看用户系统权限:select * from dba_sys_privs;select * from all_sys_privs;select * from user_sys_privs;3.查看用户对象权限:select * from dba_tab_privs;select * from all_tab_privs;select * from user_tab_privs;4.查看所有角色:select * from dba_roles;5.查看用户所拥有的角色:select * from dba_role_privs;select * from user_role_privs;MLDN课堂笔记1. sqlplus命令:两种命令方式:1.一种是dos风格的sqlplus 运行-sqlplus-显示输入用户名(scott)-输入口令:(tiger)注意密码不会显示 SQLselect * from emp; 2.另外一种是window风格的sqlplusw 用户名称 :scott 口 令 :tiger 主机字符串:(如果为空,此时会找到默认的已经可以使用的数据库实例。如果有多个数据库这一行就写数据库的名称) 范例:输入查询的指令:select * from emp;此时数据可以正常显示,但出现则痕,因为每行显示的数据长度没有设置. SQLset linesize 300; -设置每行显示的长度 SQLset pagesize 30; -设置每页显示的记录长度 (以上两个命令统一被称为格式化命令,但是这些格式化命令在sqlplus下的设置并不是很明显.但是sqlplusw虽然显示上方便一些,可是对于命令的编辑上却不是很方便,如果正常的操作命令写错了,则肯定使用方向键修改,但是在sqlplusw中,方向键只能控制屏幕的移动,所以这个命令根本不适合编辑,所以在sqlplusw之中提供了 ed 和指令,可以进行记事本的调用和执行。)使用 ed调用记事本程序 (ed a).SQLed a此时会提示用户说找不到“a.sql”的文件,询问是否创建,选择 “是”,但是使用 ed 打开记事本之后,oracle中的sqlplusw会进入阻塞状态,无法使用.使用执行程序:aSQLa但是在window之中,由于提供了许多方便的编辑软件,所以一般会在外部编辑程序,例如,在F盘下面建立一个demo.txt的文件,里面保存程序代码。这个时候要读取在硬盘上的文件,则必须写上完整的路径: F:demo.txt;(SQLF:demo.txt) ,而且如果现在这个文件的后缀是“*.sql”的话,则不用输入文件的后缀(demo.sql). (SQLF:demo)或者(SQLF:demo)在一个数据库中会有许多的用户,每一个用户下有多张自己的数据表,所以要想查看所有的数据表,则可以用如下命令:SQLselect * from tab; -查看表SQLdesc emp; -查看表结构由于当前的使用用户众多,所以如果我们想要知道当前的登录用户,可以使用:show user指令完成。SQLshow user; -查看当前用户在sqlplusw之中也可以直接进行用户登录切换,使用如下语法: 语法: conn 用户名/密码 as sysdba -中括号表示可选操作例如:切换到sys用户登录: conn sys/wangbo as sysdba SQL conn sys/wangbo as sysdba -但是如果一旦使用了sys了解之后则无法直接查询emp表数据. (备注:对于每一张表,都有其属于的用户,所以一张表的完整名称是”用户名.表名称” 或者“模式名.表名称”所以不同的用户要想访问其他用户的表,则应该加上用户名,即:现在访问名称:select * from scott.emp) SQLselect * from scott.emp; -在sys用户下查看scott的emp表,注意“.”别掉了 可是一旦使用了管理员登陆的话,可以通过命令手工的控制数据库实例的打开和关闭; 关闭数据库实例:shutdown immediate; SQL shutdown immediate; 一旦关闭后用户无法直接连接sqlplusw命令,此时可以先使用“/nolog”登陆,其他为空,然后使用管理员登陆:SQLconn sys/wangbo as sysdba;启动数据库实例:SQLstartup 另外,sqlplusw命令窗口也可以调用本机的操作系统命令,s使用“host” 作为前缀: SQL host copy f:demo.sql f:hello.sql -将F盘下面的demo.sql 拷贝一份到F盘名字为“hello.txt”总结:oracle数据库的四个主要用户: 超级管理员:sys/wangbo 普通管理员:system/wangbo 普通用户:scott/tiger 2. scott用户的表结构 2.1简单查询 1.SQLselect * from emp; 这种查询语句语句的结构主要指的是从emp表中查询出所需的指令,但是这个是属于SQL语句的范围。SQL功能强大,概括起来,可以分为以下几组:DML(Data Manipulation ,数据操作语言) -用于检索或者修改数据DDL(Data Definition Language,数据定义语言) -用于定义数据的结构,如修改、创建、或者删除对象。DCL(Data Control language,数据控制语言) -用于定义数据库用户的权限。简单查询语法如下:select distinct * | 字段 别名 from 表名称 别名 - | 表示或者 范例:查询dept表的全部记录SQLselect * from dept;范例:查询出每个雇员的编号、姓名、基本工资SQL select empno,ename,sal from emp; 范例:查询出每个雇员的职位SQL select job from emp; -职位有重复SQL select distinct job from emp; -职位没有重复 关键字(distinct)重复:每个列的记录都一样的时候才叫做重复。范例:查询出每个雇员的姓名、职位SQL select ename,job from emp;SQL select distinct ename,job from emp; -和上面语句效果一样的范例:查询出每个雇员的姓名、职位、年薪(月薪*12)SQL select ename,job,sal*12 from emp;但是执行上面语句的时候显示出一个”SAL*12”这个不方便浏览,这个时候可以起一个别名(尽量英文)SQL select ename,job,sal*12 income from emp;范例:由于公司福利好,每个月都有200元的伙食补贴以及100元车费报销,计算此时年薪SQL select ename,job,(sal+300)*12 income from emp;范例:公司每年都会多发一个月的工资SQL select ename,job,(sal+300)*12+sal income from emp; 备注:在简单查询中也可以使用“|”连接查询的字段。SQL select empno | , | ename from emp;由于“,”属于原样输出的字符串,所以必须使用单引号()括起来,单引号表示字符串。范例:要求现在的数据按照如下格式显示: “ 雇员编号是:7788的雇员姓名是:SCOTT,基本工资是:3000,职位是:ANALYST “ 现在相当于查找:empno、ename、sal、job字段并且使用双竖线( | )进行连接。SQL select 雇员编号是:|empno| 的雇员姓名是:| ename |,基本工资是:| sal |,职位是:| job | ! from emp;SQL select 雇员编号是:|empno| 的雇员姓名是:| ename |,基本工资是:| sal |,职位是:| job | ! 雇员信息 from emp; -与上面比较起了一个别名(备注:别名的内容上不要使用单引号或者双引号,而只在select 子句中出现的内容使用单引号,(select之后的语句叫select子句,from之后的叫from子句)2.2限定查询在之前的简单查询中,是将所有的记录显示,但是可以对现实的记录进行过滤的操作,而这就是限定查询的工作了,限定查询就是在之前语法的基础上增加一个where子句,用于指定特定的条件,此时语法如下:SELECT DISTINCT * | 字段 别名 FROM 表名称 别名WHERE 条件(s)Where:在where子句之后可以增加多个条件:最常见的条件爱你基本关系运算:、=、=、!=()、 Betweenand、like、in、is null、and、or、not;2.2.1关系运算范例:要求查询出基本工资大于1500的雇员信息SQL select * from emp where sal1500;范例:要求查询所有职位是办事员的信息SQL select * from emp where job=CLERK;注意在oracle数据库中所有的数据都是区分大小写的。如果clerk小写则显示不出来。范例:要求查询工资在1500到3000之间的信息SQL select * from emp where sal=1500 and sal select * from emp where job=SALESMAN or job=ANALYST;范例:查询出职位是办事员或者是销售员的基本信息,并且要求同志们的工资大于1200SQL select * from emp where (job=CLERK or job=SALESMAN) and sal1200;范例:查询所有不是办事员的基本信息SQL select * from emp where job!=CLERK;SQL select * from emp where jobCLERK;SQL select * from emp where not job=CLERK;2.2.2判断范围BETWEEN 最小值 AND 最大值,表示的是一个范围之间的判断过程。范例:要求查询基本工资在1500到3000的信息SQL select * from emp where sal between 1500 and 3000;范例:可以对between.and.操作求反SQL select * from emp where not sal between 1500 and 3000;between.and.不仅对数字有用,对日期也有用范例:要求查询出在1981年雇佣的全部雇员信息 时间范围:1981-01-01 - 1981-12-31SQL select * from emp where hiredate between 01-1月-1981 and 31-12月-81;2.2.3判断是否为空:is (not) null使用词语法可以判断某一个字段上的值是否是null,但是null和数字0是两个概念范例:要求查询所有领取奖金的雇员信息SQL select * from emp where comm is not null;SQL select * from emp where not comm is null;范例:要求查询所有不领取奖金的雇员信息SQL select * from emp where comm is null;2.2.4指定范围的判断:IN操作符 - In操作符表示指定一个查询范围范例:要求查询雇员编号是100、103、7788的雇员信息 最初的做法:select * from emp where empno=100 or empno=103 or empno=7788;-使用in语法SQL select * from emp where empno in(100,103,7788); 如果使用的是not in 表示不在此范围SQL select * from emp where empno not in (100,103,7788);注意点:关于not in的问题 如果现在使用了in操作符,查询的范围之中存在null,不影响查询SQL select * from emp where empno in (7369,7788,null); 现在使用的是not in操作符,如果查询范围之中有了null,则不会有任何查询结果返回SQL select * from emp where empno not in (7369,7788,null);-没有返回值2.2.5模糊查询:like子句Like子句的功能是提供了模糊查找的操作,例如:某些程序初夏女的搜索操作,都属于like子句的实现,但必须提醒的是搜索引擎山过的查询语句不是like。 但是要想使用like子句则必须认识两个匹配符号: 匹配单个字符:_; - 1个 匹配多个字符:%; - 0 个 、1个、多个 范例:要求查询出雇员姓名中以字母A开头的全部雇员信息。SQL select * from emp where ename like A%;范例:要求查询出雇员姓名中第二个字母是A的全部雇员信息。SQL select * from emp where ename like _A%;范例:姓名第三个字母是R的雇员信息SQL select * from emp where ename like _R%;范例:要求查询出雇员姓名中带有字母是A的全部雇员信息。SQL select * from emp where ename like %A%;范例:也可以使用not进行求反功能,查询出姓名中不包含字母ASQL select * from emp where ename not like %A%;范例:对于like子句,不一定只能在字符串数据上表示,可以在任意的数据上表示SQL select * from emp where ename like %A% or hiredate like %1% or sal like %1%;备注:关于like子句的使用在开发之中,数据库的模糊查询肯定使用like子句,但是在使用like子句的时候有一个最大的注意点:如果在迷糊查询上不设置任何的查询关键字 的话(%)则表示查询全部记录:SQL select * from emp where ename like % or hiredate like % or sal like %;3 数据的排序当数据返回查询结果之后,所有的数据默认情况下士按照雇员编号排列的,当然也可以使用“ORDER BY”子句指定所需的排序操作,SQL语句如下:SELECT DICTINCT *| 字段 别名 FROM 表名称 别名 WHERE 条件(s) ORDER BY 字段 ASC | DESC字段 ASC|DESC. 注意:”ORDER BY”子句是写在所有的SQL语句最后的内容,而且有以下几点说明: 排序的时候可以指定多个排序字段;排序的方式有两种:升序(ASC):默认,不屑也是升序降序(DESC):用户需要指定;由大到小范例:查询所有雇员的信息,要求按照工资排序SQL select * from emp order by sal; -升序SQL select * from emp order by sal ASC; -升序范例:进行降序排列SQL select * from emp order by sal desc; -降序范例:查询所有雇员的信息,要求按照工资由高到底,如果工资相同,则按照雇佣日期有早到晚排序SQL select * from emp order by sal DESC,hiredate ASC;4 单行函数、字符函数虽然各个数据库都是支持SQL语句的,但是每一个数据库也有每一个数据库自己所支持的操作函数,这些函数就是单行函数,而如果想要进行数据库开发的话,除了要会写SQL语句外,还要学习函数。 单行函数主要分为以下五类:字符函数、数字函数、日期函数、转换函数、通用函数;1.字符函数 UPPER (字符串 | 列): 将输入的字符串变为大写返回;LOWER (字符串 | 列): 将输入的字符串变为小写返回;INITCAP (字符串 | 列):开头首字母大写;LENGTH (字符串 | 列): 求出字符串长度;REPLACE (字符串 | 列):进行替换;SUBSTR (字符串 | 列,开始点 结束点):字符串截取; Oracle之中有一点比较麻烦,即使要验证字符串,也必须编写完整的SQL 语句,所以在Oracle数据库之中为了用户的查询方便,专门提供了一个“dual”的虚拟表。范例:观察转大写的函数SQL select UPPER(hello) from dual;大写转换的用处:在一般的使用之中,用户输入数据的时候去关心数据本身存放的是大写还是小写吗?SQL select * from emp where ename=&str; -无返回值此时如果输入的是小写,则肯定无法查询出数据,所以这个时候不能要求用户这么多,所以这个时候只能由程序自己去适应,加入一个函数:SQL select * from emp where ename=UPPER(&str); -有返回值当然以上的&的操作属于替代变量的内容。范例:观察转小写的函数,将所有的雇员姓名按照小写字母返回SQL select LOWER(ename) from emp; -返回ename都是小写范例:每一个雇员开头首字母大写SQL select INITCAP(ename) from emp; -返回ename首字母大写范例:查询出每个雇员姓名的长度SQL select ename,LENGTH(ename) from emp; -返回ename长度范例:查询出每个雇员姓名长度正好是5的SQLselect ename,LENGTH(ename) from emp where LENGTH(ename)=5;范例:使用字符_替换掉姓名中的所有字母ASQL select REPLACE(ename,A,_) from emp;字符串截取操作有两种语法:语法一:SUBSTR(字符串 | 列,开始点),表示从开始点一直截取到结尾;SQL select ename,SUBSTR(ename,3) from emp;语法二:SUBSTR(字符串 | 列,开始点,结束点),表示从开始点截取到结束点,截取部分内容;SQL select ename,SUBSTR(ename,0,3) from emp; -截取0-3SQL select ename,SUBSTR(ename,1,3) from emp; -截取1-3和上面结果相同注意:Oracle的下标0和1都是一样的效果范例:要求截取每个雇员姓名的后三个字母 正常思路:通过长度-2确定开始点(截取后四位-3)SQL select ename,SUBSTR(ename,LENGTH(ename)-2) from emp;新思路:设置负数,表示从后指定截取位置SQL select ename,SUBSTR(ename,-3) from emp;面试题:请问SUBSTR()函数截取的时候下表是从0还是从1开始?答:在Oracle数据库中,SUBSTR()函数从0或1开始都一样的;SUBSTR()也可以设置为负数,表示由后指定截取的开始点。5 数字函数数字函数一共有三个: ROUND(数字 | 列 保留小数的位数):四舍五入的操作 TRUNC(数字 | 列 保留小数的位数):舍弃指定位置的内容 MOD(数字1,数字2):取模,取余数;范例:验证ROUND()函数SQL select ROUND(903.5) from dual; -904四舍五入SQL select round(903.5367),round(-903.5367),round(903.5367,-1) from dual; -904 -904 900SQL select round(903.5678,2) from dual; -903.56保留两位小数SQL select round(903.5678,-1) from dual;-负数表示取整(整十整百) 900范例:验证TRUNC()函数SQLselect trunc(903.5367),trunc(-903.53567),trunc(903.5367,2),trunc(903.5367,-1) from dual;-903 -903 903.53 900 截取小数点指定位置的所有内容范例:取模操作SQL select MOD(10,3) from dual; -结果是16 日期函数1.取得当前日期,代码如下: SQL select sysdate from dual; -取得当前日期2.在日期中还可以进行计算: 日期 + 数字 = 日期,表示若干天之后的日期 SQL select sysdate + 3,sysdate + 300 from dual; -3天后日期 300天后日期 日期 - 数字 = 日期,表示若干天之前的日期 SQL select sysdate - 3,sysdate - 300 from dual; -若干天之前的日期 日期 -日期=数字,表示差 SQL select ename,hiredate,sysdate-hiredate from emp; 还有如下四个操作函数: LAST_DAY(日期):求出指定的日期的最后一天NEXT_DAY(日期,星期数):求出下一个指定星期X的日期ADD_MONTHS(日期,数字):求出若干月之后的日期MONTHS_BETWEEN(日期1,日期2):求出两个日期之间所经历的月份范例:求出本月的最后一天SQL select last_day(sysdate) from dual;范例:求出下一个星期一SQL select next_day(sysdate,星期一) from dual;范例:求出4个月之后的日期SQL select add_months(sysdate,4) from dual;范例:求出雇员到现在的工作月份SQL select ename,hiredate,months_between(sysdate,hiredate) from emp; -有小数SQL select ename,hiredate,trunc(months_between(sysdate,hiredate) from emp;-取整7 转换函数现在已经接触到了oracle数据库之中的三种数据:数字(NUMBER)、字符串(VARCHAR2)、日期(DATE),转换函数的主要功能是完成这几个数据间的相互转换的操作,一共有三种转换函数: TO_CHAR(字符串 | 列,格式字符串):将日期或者数字变为字符串显示;TO_DATE(字符串,格式字符串):将字符串变为DATE数据显示;TO_NUMBER(字符串):将字符串变为数字显示;1、 TO_CHAR()函数 SQLselect sysdate from dual;这个时候是按照“日、月、年”的格式显示,很明显这种显示格式不符合于正常的思路,正常的是“年-月-日“,所以这个时候可以使用TO_CHAR()函数,格式:年(yyyy)、月(mm)、日(dd). SQL select to_char(sysdate,yyyy-mm-dd) from dual; - 2012-06-20 SQL select to_char(sysdate,yyyy-mm-dd),to_char(sysdate,yyyy) year,to_char(sysdate,mm) months, to_char(sysdate,dd) day from dual; - 2012-06-20 2012 06 20注意:上面日期的月份中有前导0(例如:06),如果要想消除这个0,可以加入一个“fm“ SQL select to_char(sysdate,fmyyyy-mm-dd) from dual; - 2012-6-20 SQL select TO_CHAR(sysdate,yyyy-mm-dd hh:mi:ss) day from dual; -显示时间 12小时制 SQL select TO_CHAR(sysdate,yyyy-mm-dd hh24:mi:ss) day from dual;-24小时制 一定要注意,使用TO_CHAR()函数之后,所有的内容都是字符串,不是之前的DATE型数据,TO_CHAR()函数也可以用于数字的格式化上,这个时候每一个“9“表示一位数字的概念,而不是数字9的概念。 SQL select to_char(9874247843,999,999,999,999) from dual;- 987,424,如果希望表示货币,则在格式前面加上L(locale表示当前所在的语言环境下的货币符号) SQL select to_char(987654321,L999,999,999) from dual;-¥987,654,3211、 TO_DATE()函数 此函数的主要功能是将一个字符串变为DATE型数据。 SQL select TO_DATE(1989-08-08,yyyy-mm-dd) from dual;- 08-8月 -892、 TO_NUMBER()函数,基本不用 TO_NUMBER()函数是将字符串变数字SQL select TO_NUMBER(1)+ TO_NUMBER(2) from dual; -结果3 但是在oracle中以上功能不使用TO_NUMBER()也可以完成: SQL select 1 + 2 from dual; -结果38 通用函数通用函数主要是有两个:NVL()、DECODE(),这两个函数算是Oracle自己的特色函数了;1、 NVL()函数,处理null;范例:要求查处每个雇员的全部年薪SQL select ename,sal,comm,(sal+comm)*12 from emp;-注意这个时候有雇员的年薪变成了null,关键在于comm字段上为null,想要解决这一问题就必须加一种处理:将null变为0,这个时候就用到NVL()函数了。SQL select ename,sal,comm,(sal+NVL(comm,0)*12,NVL(comm,0) from emp;2、 DECODE()函数,多数值判断;(重点)DECODE()函数判断的是数值,而不是逻辑条件。范例:现在要求显示全部雇员的职位,但是这些职位替换为中文显示: CLERK:办事员 SALESMAN:销售员 MANAGER:经理ANALYST:分析员PRESIDENT:总裁DECODE:语法如下:DECODE(数值 | 列 , 判断值1,显示值1, 判断值2,显示值2, 判断值3, 显示值3.)SQL select empno,ename,job,DECODE(job,CLERK,办事员,SALESMAN,销售员,MANAGER,经理,ANALYST,分析员) from emp;注意:使用DECODE()函数的时候要一直到底,否则没有替换的会显示为null(没显示)练习题:1、找出部门30中的所有员工SQL select * from emp where deptno=30;2、列出所有办事员的姓名、编号和部门编号SQL select ename,empno,deptno from emp where job=CLERK;3、找出佣金高于薪金的员工SQL select * from emp where commsal;4、找出佣金高于薪金60%的员工SQL select * from emp where commsal*0.6;5、找出部门10中所有经理(MANAGER)和部门20中所有的办事员(CLERK)的资料SQL select * from emp where (deptno=10 and job=MANAGER) or (deptno=20 and job=CLERK);6、找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),以及既不是经理又不是办事员但其薪金大于或等于2000的所有员工的资料SQL select * from emp where(deptno=10 AND job=MANAGER) OR (deptno=20 AND job=CLERK) OR (job NOT IN (MANAGER,CLERK) AND sal=2000);7、找出收取佣金的员工的不同工作SQL select distinct job from emp where comm is not null;8、找出不收取佣金或者佣金小于300的雇员信息SQL select * from emp where comm is null or comm select * from emp where LAST_DAY(hiredate)-2=hiredate;10、找出早于12年前受雇的员工SQL select * from emp where MONTHS_BETWEEN(SYSDATE,hiredate)/1212;11、以手字母大写的方式显示所有员工的姓名SQL select INITCAP(ename) from emp;12、显示正好为5个字符的员工姓名SQLselect ename from emp where LENGTH(ename)=5;13、显示不带有R的员工的姓名SQL select * from emp where ename not like %R%14、显示所有员工姓名的前三个字符SQL select SUBSTR(ename,0,3) from emp;15、显示所有员工姓名,用a替换ASQL select REPLACE(ename,A,a) from emp;16、显示满10年服务年限的员工姓名和受雇日期。SQL select ename,hiredate from empwhere MONTHS_BETWEEN(SYSDATE,hiredate)/121017、显示员工的详细资料,按姓名排序。SQL select * from emp ORDER BY ename;18、显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面。SQL select ename,hiredate from emp ORDER BY hiredate;19、显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪排序。SQL select ename,job,sal from emp ORDER BY job DESC,sal;20、显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面。(本程序需要从日期中取出年份和月份,用TO_CHAR()函数完成)SQL select ename,TO_CHAR(hiredate,yyyy) year,TO_CHAR(hiredate,mm) months from emp ORDER BY months,year;21、显示在一个月为30天的情况所有员工的日薪金,忽略余数SQL select ename,sal,TRUNC(sal/30) from emp;22、找出在(任何年份的)2月受聘的所有雇员SQL select * from emp where TO_CHAR(hiredate,mm)=2;23、对于每个员工,显示其加入公司的天数SQL sel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论