1 Oracle 11g 安装
- 下载安装包
https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
1.1 主机连接oracle
使用oracleInstanceClient 连接oracle
- 解压这两个文件
- 配置path环境变量
2 oracle的一些基本概念
2.1 oracle服务器
- 是一个数据管理系统(RDBMS),它提供开放的,全面的,近乎完善的信息管理
- 由一个oracle数据库和多个Oracle实例组成
2.2 oracle数据库和oracle实例
- Oracle数据库:位于硬盘上实际存放数据的文件,这些文件组织在一起,成为一个逻辑的整体,即为Oracle数据库,因此oracler看来,数据库 是指硬盘上文件的逻辑集合,必须要与内存里实例合作,才能对外提供数据管理服务。
- oracle实例:位于物理内存里的数据结构,它由一个共享的内存池和多个后台进程所组成,共享的内存池可以被所有进程访问,用户如果要存取数据库里的数据,必有通过实例才能实现,不能直接读取硬盘上的文件
- 区别:实例可以操作数据库,在任何时刻一个实例只能与一个数据库关联,多数据情况下,一个数据库上只能有一个实例对其进行操作
2.3 表空间和数据库文件
- 表空间是由多个数据文件组成,数据文件只能属于一个表空间
- 表空间为逻辑概念,数据文件为物理概念
2.4 段、区、块
- 段存在于表空间中
- 段是区的集合
- 区是数据块的集合
- 数据块会被映射到磁盘块中
3 oracle的基本查询、过滤和排序
3.1 解决SqlPlus前台程序出现中文乱码的问题
- 在sqlplus中执行
select userenv('language') from dual
;查看当前数据库的字符集为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
。我们只需要把客户端字符集和操作系统字符集都设置成这个就行了 - 在环境变量中查找一个名为“
NLS_LANG
”的环境变量,如果找不到,则新建一个,把变量值赋值为:“SIMPLIFIED CHINESE_CHINA.ZHS16GBK
”
3.2 基本查询语句
spool:
- 保存sql语句到文件
spool off
写入内容到文件
host cls: 清屏
show user 显示当前登录用户
select * from tab; 当前用户下的表
desc 查询表的结构【desc emp;】
show linesize 显示行宽
set linesize 150 设置列宽
col ename for a8 设置ename列宽,显示8个字符,a表示字符
col sal for 9999 设置sal列显示4个数字,9表示数字
/ 表示执行上一条语句
c Change 命令,输错语句时用【如:c /form/from】
* +
乘法和加法运算
【查询员工信息: 员工号 姓名 月薪 年薪 奖金 年收入】
SQL>select empno,ename,sal,sal*12,comm,sal*12+comm
SQL中的null值
- 包含null的表达式都为null
SQL> select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0) from emp
- null永远 !=null
如:查询奖金为null的员工
SQL> select * from emp where comm=null;
SQL> select * from emp where comm is null;
【正确写法】
as
列的别名
SQL> select empno as "员工号",ename "姓名"
ed 写入进入缓存文件 file afiedt.buf
distinct
- 去除重复
SQL> select distinct deptno from emp;
SQL> select job deptno from emp;
- distinct作用于后面所有的列【了解】
SQL> select distinct deptno, job from emp;
concat 字符串连接
SQL> select concat('Hello',' World')
dual 伪表
SQL> select concat('Hello',' World') from dual;
SQL> select 3+2 from dual;
||
- 也表示字符串连接
SQL> select 'Hello'||' World' 字符串 from dual;
- 查询员工信息:
***的薪水是****
SQL> select ename||'的薪水是'||sal 信息 from emp;
3.3 oracle过滤和排序
字符大小写敏感
如查询员工为SMITH的信息
SQL> select * from emp where ename='SMITH';
SQL> select * from emp where ename='SMITh';
日期格式敏感
SQL> select * from v$nls_parameters;
【查看当前的日期格式】
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
【修改当前会话的日期格式】
查询日期:
SQL> select * from emp where hiredate='17-12月-80';
SQL> select * from emp where hiredate='1980-12-17';
between and
查询薪水1000~2000之间的员工,结果是包含1000和2000的
SQL> select * from emp where sal between 1000 and 2000;
注:含有边界 小值在前 大值在后,下面写是不合法的
in 在集合中
not in 不在集合中
- 查询10和20号部门的员工
SQL> select * from emp where deptno in(10,20);
- 查询不在10和20号部门的员工
SQL> select * from emp where deptno not in(10,20);
如果集合中含有null,不能使用not in; 但可以使用in
like 模糊查询
- 查询名字以S打头的员工
SQL> select * from emp where ename like 'S%';
- 查询名字是4个字的员工,4个下划线即可
SQL> select * from emp where ename like '____'
- 查询名字中含有下划线的员工 需要转意字符
SQL> select * from emp where ename like '%\_%' escape '\';
rollback 回滚 Oracle是自动开启事务,不同mysql需要手动开启
order by 排序
- 查询员工信息 按照月薪排序
SQL> select * from emp order by sal;
- 按年薪降序排序【order by后面 + 列,表达式,别名,序号】
SQL> select empno,ename,sal,sal*12 from emp order by sal*12 desc;
SQL> select empno,ename,sal,sal*12 年薪 from emp order by 年薪 desc;别名
SQL> select empno,ename,sal,sal*12 年薪 from emp order by 4 desc;列数
- 按部门升序然后按工资降序排序员工信息
SQL> select * from emp order by deptno,sal desc
- 按部门降序然后按工资降序排序员工信息
SQL> select * from emp order by deptno desc,sal desc
- order by 作用于后面所有的列;desc只作用于离他最近的列
- 查询员工信息 按照奖金降序排序,null值是最大,所以会排在最前面
SQL> select * from emp order by comm desc;
select * from emp order by comm desc nulls last;
set pagesize SQL> set pagesize 20 设置分页大小