修改密码:使用sqlplus,以sys用户登录Cmd------输入sqlplus,回车密码任意修改密码:alterusersystemidentifiedbyaaa;创建用户:createuserllidentifiedbyaaa;授权:grantconnect,resourcetoll;删除用户:dropuserllcascade;表的管理Sql:Ddl:数据定义语言:createalterdropDml:数据处理语言:insertupdatedeleteDtl:事务处理:commitrollbacksavepointDcl:数据控制语言:grantreleaseDql:数据查询语言:selectOracle常用数据类型Number:数值number(3),number(8,2)Varchar2:长度可变字符varchar2(10)abcChar:长度不可变字符char(18)abcDate:日期类型建表:createtable表名(字段名类型字段级约束类型,字段名类型字段级约束类型,表级约束)主键约束:primarykey外键约束:foreignkeyreference非空约束:notnull唯一约束:unique检查约束:check主表,从表Createtableemp(Empnonumber(4)primarykey,Enamevarchar2(10),Salnumber(8,2),Commnumber(6,2),Hiredatedate,Jobvarchar2(18),Mgrnumber(4),Deptnonumber(2));Createtabledept(Deptnonumber(2)primarykey,Dnamevarchar2(10),Locvarchar2(20));添加外键约束:Altertableempaddforeignkey(mgr)Referencesemp(empno);Altertableempaddfroeignkey(deptno)Referencesdept(deptno);约束例子:constraintstudent_sex_nnnotnull,Constraintstudent_sex_checkcheck(sexin(‘0’,’1’)),删除表:Droptablestudent;--删除表结构Deletefromstudent;--删除表数据Truncatetablestudent;--截断表修改表结构删除列:Altertablestudentdropcolumnemail;添加列:Altertablestudentaddismarynumber(1);修改列类型Altertablestudentmodifyemailvarchar2(20);添加外键约束:Altertablestudentaddforeignkey(sid)Referencestable(sid)复制表:Createtablestudent_copyasselectfromstudent;DmlInsert:需求1:向dept表中添加4个部门Insertintodeptvalues(10,‘研发部’,‘北京海淀’);Insertintodept(deptno,dname,loc)values(11,‘人事部’,‘北京朝阳’);(效率高)Commit提交复制表,包括结构和数据,不会复制约束Createtabledept_copyasselect*fromdept;复制数据Insertintodept_copyselect*fromdept_copy;需求2:向员工表中添加10条记录Insertintoemp(empno,ename,sal,comm,hiredate,mgr,job,deptno)values(5000,’网易’,4300,null,’1-1月-2013’,null,’总裁’,10)一个总裁,3个经理,9个普通员工,员工都分配在10,20,30不同的部门中,职位有总裁,经理,数据分析员,普通员工,奖金没有的为nullUpdateUpdateempsetsal=sal+2000;Updateempsetsal=sal+1000Whereempno=5007;Updateempsetsal=sal+1000,comm=comm+100Wherehiredate’1-9月-2013’andjob=’普通员工’;DeleteDeletefromstudentwhereid=1000;DqlSelect基本查询Selectename,salfromemp;Select*fromemp;(一般开发不使用)条件查询Selectename,empno,salfromempwhere条件:===不等:,!=需求列出没有奖金的员工号,姓名,工资,职位selectempno,ename,sal,comm,jobfromempwherecommisnull;()对null值的处理selectempno,ename,sal,comm,jobfromempwherecommisnotnull;包含:in,notin需求:列出10,20员工姓名,工资,职位selectename,sal,job,deptnofromempwheredeptnoin(10,20);范围:Between。。。andNotBetween。。。and需求:工资在2000到3000之间的员工名和工资selectename,salfromempwheresalbetween2000and10000;布尔连接:And:与(优先级高于or)Or:或需求,10号部门中的普通员工的姓名,职位,部门号selectename,job,deptnofromempwheredeptno=10andjob='普通员工';需求,列出10号部门或经理的姓名职位部门号selectename,job,deptnofromempwheredeptno=10orjob='经理';模糊查询:Like通配符下划线(_):一位任意字符百分号(%):任意位数的任意字符需求:查询姓张的员工号,员工名,工资selectename,empno,salfromempwhereenamelike'张%';列出名字在第二个字符子的员工工资,姓名selectename,empno,salfromempwhereenamelike'_子%';查询使用函数字符函数Upper();lower();拼接字符:||selectename||'-'||salfromemp;instr();oracle中字符索引从1开始selectinstr(‘abcd‘,’a‘)fromdual;dual,oracle中的一个虚表,完整查询语句select89*89fromdual;substr(’’,2,5)从第二个字符开始截取5个selectsubstr(‘aaaaaaaaaaa‘,2,5)fromdual;日期函数SysdateSelectsysdatefromdual;Next_day:某个日期下周的日期Selectnext_day(sysdate,’星期五’)fromdual;Last_day:返回某月份最后一天的日期Selectlast_day(sysdate)fromdual;Add_months:下个月的这天的日期Selsctadd_months(sysdate,1)fromdual;数学函数Round()四舍五入Selectround(1.1)fromdual;Trunc()截取Selecttrunc(1.1,1)fromdual;Mod()求模Selectmod(3,5)fromdual转换函数:To_date():Varchar2到日期updateempsethiredate=to_date('2013-1-2','yyyy-MM-DD')whereempno=5000;updateempsethiredate=to_date('2013年1月3日','yyyy年MM月DD日')whereempno=5000;使用特殊字符作为oracle的日期格式,特殊字符需要使用双引号。To_char:日期到特殊的字符格式;需求:列出员工姓名,入职日期,入职日期按‘2013年1月1日’selectename,to_char(hiredate,'yyyy年MM月DD日')fromemp;to_char:将数字转换特殊的字符串格式5000.00¥5000.00$9:表示任意一位数字$:表示美元符号¥:表示人民币符号SELECTename,to_char(sal,'L999,999,999.99')fromemp;to_number:字符串转换到数字selectto_number('60')+20fromdual;distinct:去重selectDISTINCTJOBfromemp;排序查询Orderby指定排序字段Asc默认,升序Desc降序需求:显示员工名,入职日期,工资根据入职日期排序,如果相同再根据工资降序排序selectename,hiredate,salfromemporderbyhiredateasc;selectename,hiredate,salfromemporderbyhiredate,salDESC;需求:列出员工名,入职日期,工资根据工资降序排序selectename,hiredate,salFROMempWHEREjob='普通员工'ORDERBYsalDESC;分组查询分组字段:组函数(聚合函数):分组后的结果再过滤:分组查询注意:需求1:查询每个部门的平均工资SELECTdeptno,AVG(sal)FROMempGROUPBYdeptno;需求2:查询每个部门的工资总和SELECTdeptno,SUM(sal)FROMempGROUPBYdeptno;需求3:查询每个部门的最大工资SELECTdeptno,MAX(sal)FROMempGROUPBYdeptno;需求4:查询每个部门的最小工资SELECTdeptno,MIN(sal)FROMempGROUPBYdeptno;需求5:查询每个部门的员工数SELECTdeptno,COUNT(*)FROMempGROUPBYdeptno;统计字段如果是null,会被忽略需求6:查询每种职位的平均工资,只列出平均工资大于5000的职位的平均工资SELECTjob,AVG(sal)FROMempGROUPBYjobHAVINGAVG(sal)7000;(使用having)需求7:查询经理,普通员工,数据分析师,职位的平均工资(只保留整数)只列出平均工资大于5000的职位和平均工资,按照平均工资排序需求8:列出公司的职位SELECTjobFROMempGROUPBYjob;分组查询只能查询分组字段和组函数运算的结果需求9:列出员工名,每个部门的平均工资(需求错误)需求10:列出相同部门,相同职位的员工平均工资SELECTdeptno,job,AVG(sal)FROMempGROUPBYdeptno,job子查询普通子查询子查询可以独立执行需求:查询网易的同部门同事名,工资SELECTename,salFROMempWHEREdeptno=(SELECTdeptnoFROMempWHEREename='网易')ANDename'网易';需求:查询工资大于网易部门平均工资的员工名和工资SELECTename,salFROMempWHEREsal(SELECTAVG(sal)FROMempWHEREdeptno=(SELECTdeptnoFROMempWHEREename='网易'));关联子查询子查询需要使用主查询的数据子查询不能独立执行需求1:列出比本部门平均工资低的员工姓名,员工工资,部门号SELECTename,sal,deptnoFROMempeWHEREsal(SELECTAVG(sal)FROMempWH