当前位置:Gxlcms > 数据库问题 > 1-Oracle数据库

1-Oracle数据库

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

        1.Oracle Database的基本概念:

        一个Oracle服务器
            是一个数据库管理系统(RDBMS,关系型数据库管理系统——基于关系模型的数据库系统叫做RDBMS关系模型是指基于二维表的模型),它提供开发的,全面的,近乎完整的信息管理
            由一个Oracle数据库和多个Oracle实例组成

        2.Oracle数据库和Oracle实例

        Oracle数据库位于硬盘上实际存放数据的文件,这些文件组织在一起,成为一个逻辑整体,即为Oracle数据库。因此在Oracle看来,“数据库”是指硬盘上文件的逻辑集合,必须要与内存里的实例合作,才能对外提供数据管理服务
                Oracle实例位于物理内存里的数据结构。它由一个共享的内存池和多个后台进程所组成,共享的内存池可以被所有进程访问。用户如果要存取数据库(也就是硬盘上的文件)里的数据,必须通过实例才能实现,不能直接读取硬盘上的文件                区别:实例可以操作数据库;在任何时刻一个实例只能与一个数据库关联;大多数情况下,一个数据库上只有一个实例对其进行操作。

        3.Oracle数据库的体系结构(重要)

    技术分享
            客户端JDBC访问Oracle数据库时,如果是写入操作,会先将数据存在在实例内存中(可以有多个),然后将实例内存中的数据统一存放到系统全局区域,再统一调用系统进程的写操作,将数据写入到磁盘上的数据库文件;如果是读取操作,系统进程的读取操作会将数据读取到系统全局区域,再分别存储到实例内存中,再提供给客户端JDBC。

        4.集群:

    技术分享

        5.表空间(users)和数据文件

        技术分享
        表空间由多个数据文件组成,数据文件只能属于一个表空间。表空间为逻辑概念,数据文件为物理概念。

        6.段、区和块

        技术分享

        7.数据库的逻辑和物理结构

        技术分享

        8.其他知识:

          如果不想让Oracle数据库开机启动,可在服务中关闭OracleServiceORCL服务        Oracle客户机:如果想要从网的一台计算机上访问另外一台计算机上的Oracle服务,需要安装Oracle客户机才能够访问。安装Oracle客户机需要将客户机程序解压,然后将sqlplus所在目录添加到path路径中

        访问方式:sqlplus scott/tiger@192.168.56.101:1521/orcl
        解决中文乱码问题
        增加环境变量,设置NLS_LANG为SIMPLIFIED CHINESE_CHINA.ZHS16GBK        
        本机ip:192.168.56.1   虚拟机ip:192.168.56.101

二、基本的select语句

1.基本的登录语句:

  1. --登录Oracle
  2. sqlplus scott/tiger@192.168.56.101:1521/orcl
  3. --清屏
  4. host cls
  5. --当前用户
  6. show user
  7. USER "SCOTT"
        2.JDBC连接Oracle数据库的写法:
  1. jdbc:oracle:thin:@localhost:1521:orcl
  2. jdbc:oracle:oci:@loaclhost:1521:orcl

        第一种方式只需要一个jar包,第二种方式更复杂一些(功能更强大)。

        3.记录控制台屏幕语句:

  1. --开始记录
  2. spool d:\1.txt
  3. --结束记录
  4. spool off
        4.设置行宽和列宽

  1. --当前用户下的表(oracle中必须要有from
  2. select * from tab;
  3. --员工表的结构descdescribe的缩写
  4. desc emp
  5. --查询所有员工信息
  6. select * from emp;
  7. --显示设置行宽
  8. show linesize
  9. --结果linesize 80
  10. set linesize 120
  11. --设置列宽(col代表columna表示字符类型,8表示长度为8,9表示以为数字,9999表示四个数字,forformat的缩写)
  12. col ename for a8
  13. col sal for 9999
  14. --/表示引用上面的sql语句
  15. /

        5.change命令:

  1. --通过列名查询
  2. select empno,ename,job,mgr,hiredate,sal,comm,deptno form emp;
  3. --第 2 行出现错误: ORA-00923: 未找到要求的 FROM 关键字
  4. --c命令 change缩写
  5. --指定第二行
  6. 2
  7. --结果:2* form emp
  8. --/form原错误值/from新值
  9. c /form/from
  10. --改正结果:2* from emp
  11. --/代表引用上面的sql语句
  12. /

        6.滤空函数nvl

        将comm奖金中的null值变成0,从而不会出现总薪水的值为null

  1. select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0) from emp;

        7.edit方法

  1. --ededit的缩写
  2. ed
  3. --结果:已写入 file afiedt.buf
  4. --执行sql语句
  5. /

        8.别名的格式:

        "别名"或者不加引号,区别:别名中有空格或者关键字必须加上双引号

12--别名的使用select empno as "员工号",ename "姓名",sal "月  薪",sal*12,comm,sal*12+nvl(comm,0) from emp

        9.distinct的使用

12345678910111213--distinct去掉重复记录select distinct deptno from emp; --字符串连接--distinct作用于后面所有的列select distinct deptno,job from emp; --连接符--concatselect concat('Hello','  World'); --dual: 伪表select 'hello'||'  world' 字符串 from dual;

        10.其它注意点:

技术分享技术分享
技术分享技术分享
技术分享技术分享
技术分享技术分享
技术分享技术分享

三、过滤和排序

        1.基本用法

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465--字符串大小写敏感--查询名叫KING的员工select from emp where ename='KING'; --日期格式敏感--查询入职日期是17-11月-81的员工select from emp where hiredate='17-11月-81';--默认格式:DD-MON-RR --查看日期格式select from v$nls_parameters;--修改日期格式

alter session set NLS_DATE_FORMAT='yyyy-mm-dd';

--session|system,session表示当前会话有效,system表示系统内有效

--修改成默认alter session set NLS_DATE_FORMAT='DD-MON-RR'; --between and--查询工资1000~2000之间的员工select from emp where sal between 1000 and 2000; --between and: 1. 包含边界 2. 小值在前 大值在后--in 在集合中--查询10和20号部门的员工select from emp where deptno in (10,20); --null值 3. 如果集合中含有null,不能使用not in;但可以使用in--错误查找语句select from emp where deptno not in (10,20,null) --like 模糊查询-- %(任意位数字符)  _(一位字符)--查询名字以S打头的员工select from emp where ename like 'S%'; --\转义符号,转义_这个特殊符号select from emp where ename like '%\_%' escape '\' --回退已完成,oracle自动开启事务,所以可以直接回滚rollback; --排序--查询员工信息,按照月薪排序select from emp order by sal; --order by 后面 + 列,表达式,别名,序号select empno,ename,sal,sal*12 from emp order by sal*12 desc; --多个列排序(先按照第一个排序,相同时按照第二个排序)select from emp order by deptno,sal; --order by 作用于后面所有的列;desc只作用于离他最近的一列select from emp order by deptno desc,sal desc --查询员工信息,按照奖金排序--null 值 4. null的排序,默认情况下null最大select from emp order by comm; --oracle默认进行分页,可以设置每页记录数set pagesize 20 --a命令: append(在当前的sql语句的基础上添加desc)--a与后面的关键字之间要有两个空格(防止语句连到一起)a  desc select from emp order by comm desc nulls last(将null放到最后,默认情况下null最大)

        2.其它:

技术分享技术分享
技术分享技术分享
技术分享技术分享

四、单行函数(共六种,最后一个是条件表达式

        1.基本用法:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102--字符函数select lower('Hello WOrld') 转小写,upper('Hello WOrld') 转大写,initcap('hello world') 首字母大写 from dual; --substr(a,b) 从a中,第b位开始取select substr('Hello World',3) 子串 from dual; --substr(a,b,c) 从a中,第b位开始取,取c位select substr('Hello World',3,4) 子串 from dual; --length 字符数 lengthb 字节数(英文字符数和字节数相同,中文一个字符两个字节)select length('Hello World') 字符,lengthb('Hello World') 字节 from dual; --instr(a,b) 在a中,查找bselect instr('Hello World','ll') 位置 from dual; --lpad 左填充 rpad右填充-- abcd填充后共10位,左边右边分别填充特定符号select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右 from dual; --trim 去掉前后指定的字符select trim('H' from 'Hello WorldH') from dual; --replaceselect replace('Hello World','l','*'from dual; --四舍五入select round(45.926,2) 一,round(45.926,1) 二,round(45.926,0) 三,round(45.926,-1) 四,round(45.926,-2) 五 from dual;--结果        一         二         三         四         五                         ---------- ---------- ---------- -

人气教程排行