Oracle快速入门(基本概念+查询大全) | |
---|---|
Oracle快速入门(常用函数大全) | |
Oracle快速入门(多表查询大全) |
一、Oracle的体系结构
1、Oracle相关概念
(1)数据库
文件系统
Oracle数据库服务器由一个数据库和至少一个数据库实例组成。 数据库是一组存储数据的文件,而数据库实例则是管理数据库文件的内存结构。此外,数据库是由后台进程组成。
(2)数据库实例
通常情况下,oracle数据库只有一个实例ORCL,‘’
数据库和实例是紧密相连的,所以我们一般说的Oracle数据库,通常指的就是实例和数据库。
(3)表空间(逻辑单位)
Oracle数据库使用逻辑存储结构对磁盘空间使用情况进行精细控制。以下是Oracle数据库中的逻辑存储结构:
● 数据块(Data blocks)
● 范围(Extents)
● 段(Segments)
● 表空间(Tablespaces)
(4)数据文件(物理单位)
物理存储结构是存储数据的纯文件。当执行一个CREATE DATABASE语句来创建一个新的数据库时,创建文件
(5)逻辑和物理存储结构之间的关系
(6)MySQL和Oracle的区别
- 对比MySQL和Oracle创建项目
MYSQL:创建一个数据库,创建相应的表
Oracle:创建一个表空间,创建用户,用户去创建表
- Oracle和MySQL的差别
Oracle是多用户的,Mysql是多数据库的
1)都是遵循SQL标准
2)不同厂家,不同的数据库产品,但是有自己的方言。
3)使用自己的方言也可以完成相同订单功能
4)Oracle安全级别较高,MySQL是开源免费
(7)下图说明了Oracle数据库体系结构:
二、SCOTT和HR账户
1、SCOTT用户下的表
部门表
2、HR用户下的表
三、基本查询,在登录SCOTT用户后
1、SQL:结构化查询语言
2、SQL分4类
(1)DDL:数据定义语言
create
alter
drop
truncate
(2)DML:数据操纵语言
insert
update
delete
(3)DCL:数据控制语言
安全级别
授权
grant
revoke
(4)DQL:数据查询语言
select
from字句
where字句
3、查询语句的结构
select {列名} {*} from 表名 {where 条件} {group by 分组条件}{having 过滤}{order by 排序}
select * from emp;
4、方言特征
select 1+1;//在mysql当中会输出2不会报错,但是在Oracle当中会报错
在Oracle当中需要这样做
select 1+1 from dual;
dual表是oracle的虚表,伪表,主要是用来补齐语法结构
四、别名查询:使用as 关键字,可以省略
select ename 姓名,sal 工资 from emp;
在刚安装完Oracle需要解决中文乱码的问题
中文乱码问题解决
1、查看服务器端编码
select userenv('language') from dual;
我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK
2、执行语句
select * from V$NLS_PARAMETERS
查看第一行中PARAMETER项中为NLS_LANGUAGE 对应的VALUE项中是否和第一步得到的值一样。
如果不是,需要设置环境变量.
否则PLSQL客户端使用的编码和服务器端编码不一致,插入中文时就会出现乱码.
3、设置环境变量
计算机->属性->高级系统设置->环境变量->新建
设置变量名:NLS_LANG,变量值:第1步查到的值, 我的是AMERICAN_AMERICA.ZHS16GBK
4、重新启动PLSQL,插入数据正常
5、别名查询的时候不能有特殊字符或者关键字
select ename 姓 名,sal 工资 from emp;
select ename 姓%名,sal 工资 from emp;
需要在汉字外加上""
select ename "姓 名",sal 工资 from emp;
查询成功
五、查询的时候去除重复数据distinct
1、单列去除重复数据
(1)查询emp表当中的job列有重复数据
(2)在对应列前面加distinct关键字
select distinct job from emp;
2、多列去除重复数据
(1)同时查询job列和deptno列有重复数据
select job,deptno from emp;
(2)在对应多列前面加distinct关键字:去除重复数据
select distinct job,deptno from emp;
六、查询当中的四则运算
加法运算
select 1+1 from dual;
七、查询员工年薪
select ename,12*sal 年薪 from emp;
八、查询员工年薪+奖金
1、注意:当加空(null)的项的时候所有对应的内容都会为空
null代表不确定 不可预知的内容,不可以做四则运算
select ename,12*sal+comm from emp;
2、解决方法:需要在有null向的列上使用nvl函数:参数1为null,就返回参数2
如果返回值当中有null则设为0
select ename,12*sal+nvl(comm,0) from emp;
九、字符串拼接
Java当中+号拼接
Oracle当中使用||拼接
mysql当中使用拼接需要使用函数concat(str1,str2)函数,这个函数在mysql当中和oracle当中都有
1、查询员工姓名: 姓名:SCOTT
在oracle
双引号是用来起别名
这里使用的是单引号,单引号当中引起来的是字符
select '姓名:' || ename from emp;
2、使用函数拼接concat()
在mysql当中可以使用在oracle当中也可以使用
select concat('姓名:',ename) from emp;
十、条件查询{where后面的算法}
1、关系运算符: > >= < <= != <>
2、逻辑运算符: and or not
3、其他运算符:
like : 模糊运算符
in(set) :在某个集合内
between..and.. :在某个区间内
is null :判断为空
is not null :判断不为空
十一、条件相关练习
1、查询每月能得到奖金的员工信息
select * from emp where comm is not null;
2、查询工资在1500–3000之间的员工信息
查询对应条件的信息
select * from emp where sal >= 1500 and sal <= 3000;
select * from emp where sal between 1500 and 3000;
3、查询名字在某个范围的员工信息
select * from emp where ename in ('JONES','SCOTT','FORD');
十二、模糊查询
like
%匹配多个字符
_ 匹配单个字符
1、查询员工姓名第三个字符是o的员工信息
select * from emp where ename like '__O%';
2、查询员工姓名中,包含%的员工信息
(1)修改信息设置带有%的信息
update emp set ename = 'TUR%NET' where ename = 'TURNER';
(2)查询员工姓名中,包含%的员工信息
如果模糊查询的时候有特殊字符则需要使用escape转意
escape告诉oracle后面在字符是转意字符
select * from emp where ename like '%\%%' escape '\';
十三、排序查询order by
升序asc
: ascend
降序desc
: descend
1、查询员工信息,按照奖金由高到低排序
select * from emp order by comm desc;
- 排序注意空值问题:设置空值不排在前面,将空值排序到后面
nulls last或者first
select * from emp order by comm desc nulls last;
2、查询部门编号和工资 按照部门升序排序,工资降序排序
select deptno,sal from emp order by deptno asc,sal desc;
工资在部门升序的基础上降序