24 -Oracle学习(1)

1 Oracle 11g 安装

  1. 下载安装包 https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.1 主机连接oracle

使用oracleInstanceClient 连接oracle

  1. 解压这两个文件
    在这里插入图片描述
  2. 配置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前台程序出现中文乱码的问题

  1. 在sqlplus中执行 select userenv('language') from dual;查看当前数据库的字符集为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK。我们只需要把客户端字符集和操作系统字符集都设置成这个就行了
  2. 在环境变量中查找一个名为“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值
  1. 包含null的表达式都为null
    SQL> select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0) from emp
  2. 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
  1. 去除重复
    SQL> select distinct deptno from emp;
    SQL> select job deptno from emp;
  2. 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;
在这里插入图片描述


||	
  1. 也表示字符串连接
    SQL> select 'Hello'||' World' 字符串 from dual;
  2. 查询员工信息: ***的薪水是****
    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 不在集合中
  1. 查询10和20号部门的员工
    SQL> select * from emp where deptno in(10,20);
  2. 查询不在10和20号部门的员工
    SQL> select * from emp where deptno not in(10,20);
    如果集合中含有null,不能使用not in; 但可以使用in

like 模糊查询
  1. 查询名字以S打头的员工
    SQL> select * from emp where ename like 'S%';
  2. 查询名字是4个字的员工,4个下划线即可
    SQL> select * from emp where ename like '____'
  3. 查询名字中含有下划线的员工 需要转意字符
    SQL> select * from emp where ename like '%\_%' escape '\';

rollback 回滚	Oracle是自动开启事务,不同mysql需要手动开启

order by 排序
  1. 查询员工信息 按照月薪排序
    SQL> select * from emp order by sal;
  2. 按年薪降序排序【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;列数
  3. 按部门升序然后按工资降序排序员工信息
    SQL> select * from emp order by deptno,sal desc
  4. 按部门降序然后按工资降序排序员工信息
    SQL> select * from emp order by deptno desc,sal desc
  5. order by 作用于后面所有的列;desc只作用于离他最近的列
  6. 查询员工信息 按照奖金降序排序,null值是最大,所以会排在最前面
    SQL> select * from emp order by comm desc;
    select * from emp order by comm desc nulls last;

set pagesize	SQL> set pagesize 20 设置分页大小
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章