当前位置:Gxlcms > 数据库问题 > Oracle学习笔记

Oracle学习笔记

时间:2021-07-01 10:21:17 帮助过:23人阅读

 

 

  1. <OPERATING_SYSTEM RELEASE="6.2">
  2. <VERSION VALUE="3"/>
  3. <ARCHITECTURE VALUE="32-bit"/>
  4. <NAME VALUE="Windows 10"/>
  5. <ENV_VAR_LIST>
  6. <ENV_VAR NAME="PATH" MAX_LENGTH="1023" />
  7. </ENV_VAR_LIST>
  8. </OPERATING_SYSTEM>
 

 

 

 SQL语言基础 1.数据查询语言 DQL,select  2.数据操纵语言DML (insert,update,delete)  3.事务控制语言TCL (commit,rollback,savepoint)  4.数据定义语言DDL(create,alter,drop) 5 数据控制语言DCL(grant,revoke)   实例模式SCOTT 默认账户/密码:scott/tiger alter user scott account unlock;   复杂查询     --检索指定的列 select job,ename,empno from emp; --带有表达是的select子句 select sal*(1+0.2),sal from emp;   --显示不重复的记录 select distinct job from emp;   --比较筛选   <> = select empno,ename,sal from emp where sal>1000;   select empno,ename,JOB from emp; select empno,ename,sal from emp where sal <>all(3000,950,800);   --特殊关键字筛选 --like  模糊查询 select empno,ename,job from emp where JOB like ‘S%‘;   --IN   --varchar select empno,ename,job from emp where job in(‘PRESIDENT‘,‘MANAGER‘,‘ANALYST‘); --NOT IN select empno,ename,job from emp where job not  in(‘PRESIDENT‘,‘MANAGER‘,‘ANALYST‘) ;   --BETWEEN   -numer ,inter select empno,ename,sal from emp where sal between 2000 and  3000; --NOT BETWEEN select empno,ename,sal from emp where sal  NOT between 2000 and  3000; --IS NULL/  is not null select * from emp where comm is NOT  null;   --逻辑筛选 --and   ,or,not       关系 于  -或  --非   select empno,ename,sal from emp where sal>=2000  and sal<=3000 ;   select empno,ename,sal from emp where sal<2000  or sal>3000 ;     --分组查询 select deptno,job from emp group by deptno,job order by deptno ;   select deptno as 部门编号,avg(sal) as 平均工资 from emp group by deptno;   select deptno as 部门编号,avg(sal) as 平均工资 from emp group by deptno having avg(sal)>2000; --group by 子条件 having      --排序查询Order by;  desc:逆序  asc默认 select deptno,empno,ename from emp order by deptno,EMPNO;     多表关联查询 --内连接 select e.empno as 员工编号, e.ename as 员工名称, d.dname as 部门  from emp e inner join dept d on e.deptno=d.deptno;            --左外连接 insert into emp(empno,ename,job) values(9527,‘EAST‘,‘SALESMAN‘);          select e.empno,e.ename,e.job,d.deptno,d.dname from emp e left join dept d on e.deptno=d.deptno;   --右外连接 select e.empno,e.ename,e.job,d.deptno,d.dname from emp e right join dept d on e.deptno=d.deptno;   --完全连接 select e.empno,e.ename,e.job,d.deptno,d.dname from emp e full join dept d on e.deptno=d.deptno;   --自然连接(共有的属性,会去除重复列) select empno,ename,job,dname from emp natural join dept where sal>2000;            /*自连接(self join)是SQL语句中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。 在emp中的每一个员工都有自己的mgr(经理),并且每一个经理自身也是公司的员工,自身也有自己的经理。*/   select?em2.enname??管理者,em1.enname??下属员工from?emp?em1?left?join?emp?em2?on?em1.mgr=em2.empno?order?by?em1.mgr;    /*交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数*/        select count(*)  from dept cross join emp;         Oracle常用系统函数 --ASCII(c)函数  CHR(I)   小写比大写 大32    小写a 97  小写z 122 select ascii(‘Z‘) A,ascii(‘y‘) a,ascii(‘D‘) D,ascii(‘#‘) space  from dual;   select chr(90),chr(122),chr(68),chr(32) s from dual;     --CONCAT(s1,s2) 函数  字符串拼接 select concat(‘Hello‘,‘ World!‘) information from dual;   --INiTCAP(S)函数  返回每个单词的第一个字母大写,其他小写  select initcap(‘gOod lUck For yOu!‘)  information from dual;     --在Oracle 11g中 ,从第三个字符开始查询字符串“1”第2次出现的位置 instr(‘s1‘,‘s2‘,‘1‘,‘1‘) select instr(‘o1racle 11g‘,‘1‘,3,2) abc from dual;  --2个参数默认值都是1   --lower(s)小写 upper(‘‘) 大写 函数   --LTRIM(s1,s2)-删除字符串s1左边的字符串s2,RTRIM(S1,S2)-删除字符串s1右边的s2,  --TRIM(s1,s2)函数 select ltrim(‘####East####‘,‘#‘),rtrim(‘East           ‘),trim(‘#‘ from ‘####East###‘) from  dual;   --- create or replace### DROP TABLE "SIMON"."T_LOG"; CREATE TABLE "SIMON"."T_LOG" ---除了表对象,其他都可以用functions, procedures, packages, types, synonyms, trigger and views   --REPLACE(s1,s2[,s3])函数 select replace(‘Bad Luck Bad Girl‘,‘Bad‘,‘Great‘) from dual;   --SUBSTR(s,i,[j])函数***  字符串截取函数 select substr(‘Message-Pretty-Box‘,9,6) from dual;   --CEIL(n)函数 返回大于或等于 数值n的最小整数 select ceil(7.8),ceil(7),ceil(-7.3) from dual;     --Round(n1,n2)函数  返回该函数舍入小数点右边n2位的n1的值 select round(3.1415926,2) from dual;     --日期和时间函数 select sysdate as 系统日期 from dual;   --在当前的日期下加6个月 select ADD_MONTHS(sysdate,6) from dual;   --转化类函数 *** select sysdate as 默认格式日期,to_char(sysdate,‘YYYY-MM-DD‘) as 转换后日期 from  dual;   --转化为10进制 select to_number(‘ABC‘,‘XXX‘) as 十进制 from dual;   --聚合类函数***** --avg()平均值,count()总记录数,max() --最大值,min() --最小值 ,sum()求和,variance()方差,STDDEV()标准差; select  count(empno) as 员工数,round(avg(sal),2) as 平均工资 from emp;   select  count(*) from emp;   子查询 --子查询: sql语句内的另外一条select语句,也曾为内查询或内select 查询 --任何在 select、insert、update或delete命令中允许表达式的地方都   --在emp表中查询部门名称(dname)为“RESEARCH”的员工信息; select empno,ename,job from emp where deptno=(select deptno from dept where dname =‘RESEARCH‘ );     --多表连接的方式 select empno,ename,job from emp join dept on emp.deptno=dept.deptno where dept.dname=‘RESEARCH‘;   --相对于多表关联查询,子查询的使用更加灵活、功能更强,而且更容易理解 --但是多表连接的效率要高于子查询;   --子查询语句 select deptno from dept where dname =‘RESEARCH‘ --外查询语句 select  empno,ename,job from emp;   --一般情况下,外查询语句检索一行,子查询语句需要检索一遍数据,然后判断外查询语句的条件是否满足。 --如果条件满足,将检索的数据添加的结果集中,不满足则检索下一行的数据,所以说子查询相对于关联查询要更慢一些; --(1)子查询必须用括号“()”括起来。(2)子查询不能包括ORDER BY子句。(3)子查询允许嵌套多层,但不能超过255层。     --(1)单行子查询 (2)多行子查询(3)关联子查询   --单行子查询 :查询emp表中既不是最高工资,也不是最低工资的员工信息; --子查询返回的是一行数据 select empno,ename,sal from emp where sal >(select min(sal) from emp) and sal <(select max(sal) from emp);   --多行子查询:查询不是销售部 的员工信息    (in,any,all) --子查询返回的是多行的数据 select empno,ename,job from emp where deptno in(select deptno from dept where dname <>‘SALES‘);   --查询工资大于部门编号为10 的任意一个员工即可的其他部门的员工信息 select deptno,ename,sal from emp where sal >any (select sal from emp where deptno =10) and deptno<>10;   --查询工资大于部门编号为30的所有员工的工资信息 select deptno,ename,sal from emp where sal>all (select sal from emp where deptno =30);   --关联子查询 --检索工资大于(同职位的平均工资)的员工信息 select empno,ename,sal from emp f where sal>(select avg(sal) from emp where job = f.job)order by job;   事务处理 --事务,当使用事务修改多个数据表时,在处理过程中出现了某种错误,如系统死机或断电,返回结果所有数据都没有保存 --使用事务可以提高数据的安全性,增强数据的处理效率 --访问Oracle附带模式HR      切换DBA ALTER USER hr ACCOUNT UNLOCK; ALTER USER hr IDENTIFIED BY 1234;   --sql> insert into jobs values(‘OFFICE‘,‘办公文员‘,3000,5000); savepoint sp; insert into jobs values(‘FINANCE‘,‘财务人员‘,4000,8000); select * from jobs; rollbcak to savepoint sp;     PLSQL编程 /*基本数据类型 数值 number, 字符类:varchar2 40000字节、char 2000字节、long 2GB、nchar,nvarchar2 根据各国的字符集来定   日期类型DATE, 布尔类型:boolean  值:True,false,null 代码美化:工具-PLSQL美化器 */   /*%type (1)不需要查看表中各个列的数据类型,就可以确保变量能够存储检索数据   (2)已有的列已经修改,不用考虑对已定义的变量的数据类型进行修改 ;%type 会根据实际项目自动调整自身的数据*/   declare  Num_sal emp.sal%type;  Var_ename emp.job%type;  begin      select ename,sal into Var_ename,Num_sal from emp     where empno=7369;     dbms_output.put_line(Var_ename||‘的工资是‘||Num_sal); end;*/   /*record类型*/   declare     type emp_type is record     (          var_ename varchar2(20),          var_sal number     );     empinfo emp_type;  begin      select ename,sal into empinfo from emp     where empno=7369;     dbms_output.put_line(empinfo.var_ename||‘的工资是‘||empinfo.var_sal); end;*/   /*rowtype*/ ---PLSQL GRANT debug any procedure, debug connect session TO scott; --修改注释  快捷键   declare   rowVar_emp emp%rowtype;   begin       select *into rowVar_emp from emp      where empno=7369;      dbms_output.put_line(rowVar_emp.ename||‘的工资是‘||rowVar_emp.Sal);  end;   --控制文件多路复用,复制控制文件先暂停OracleServicesORCL和OracleDBConsoleOrcl服务 alter system set control_files=       ‘D:\app\Administrator\oradata\orcl\CONTROL01.CTL‘,       ‘D:\app\Administrator\flash_recovery_area\orcl\CONTROL02.CTL‘,       ‘D:\OracleFiles\ControFiles\CONTROL03.CTL‘ scope=spfile;      VX:13037231781  

Oracle学习笔记

标签:trim   sql语言   备份   mon   and   多表连接   unlock   sql编程   小数   

人气教程排行