Oracle快速入门 | 黑马

news2025/1/22 18:05:24

简介

概述

Oracle目前使用最广的大型数据库管理系统,作为分布式数据库实现分布式处理功能。

广泛用于金融行业,大量数据而且需要很安全 

特点

  1. 支持多用户,大事务量的事务处理
  2. 数据安全性和完整性控制(主要卖售后的,售后服务非常好)
  3. 支持分布式数据处理
  4. 可移植性

体系结构

1、数据库

Oracle数据库的概念和其他数据库不一样,这里的数据库是一个操作系统只有一个库,可以看作Oracle就只有一个大数据库。        

2、实例

一个Oracle实例有一系列后台进程和内存结构组成,一个数据库可以有n个实例。你连这个实例就用这个实例的Oracle,你连那个实例就用那个实例的,相当于把磁盘读到内存,每个不互相干扰

3、数据文件dbf

dbf是数据文件的扩展名,数据文件是数据库的存储单位。

4、表空间

表空间是Oracle对物理数据库相关数据文件(ora或者dbf文件)的逻辑映射。

表空间下面分很多单位,段、区、数据块、磁盘块。

把表空间这个概念引入有利于数据库管理,一个表空间是逻辑单位,但是关联很多物理单位,这些物理单位可以分配到不同的服务器上,可以减轻磁盘的压力。

5、用户

Oracle是一个数据库有很多用户,一个用户下再建立很多的表。

基础语句

一、创建表空间、用户、授权

-----创建表空间
create tablespace waterboss
 datafile 'd:\waterboss.dbf' //写表空间所对应的数据文件
 size 100m      //指定表空间大小
 autoextend on      //自动扩展
 next 10m;         //满了就增长10m 

-----创建用户

create user wateruser
indentified by 123456  //用户的密码
default tablespace waterboss;  //指定用户属于哪个表空间

-----给用户授权

--给wateruser赋予dba权限
grant dba to wateruser

二、数据类型

语句和mysql基本一样,但是数据类型不同,我们先学习Oracle的数据类型

 字符型

  • CHAR:固定长度的字符类型,最多存2000个字节,少了后面自动空格补齐
  • VARCHAR2:多了个2,名字就是这样定义的,和mysql那个varchar是一样的,可变长度的字符串,不能超过4000个字节
  • LONG:大文本类型,最大可以存储2个G

 数值型

  • NUMBERR(n) 表示一个整数,长度是n
  • NUMBER(m,n) 表示一个数,总长度为m,小数是n,整数是m-n

 日期类型

  • DATA 表示日期类型

 特殊

  • CLOB 大对象,表示大文本数据类型 可存4G,图书
  • BLOB 大对象,表示二进制数据,可以存4G,一般存视频图片这些二进制文件

 三、创建表、修改表和删除表

创建表

create table person(
    pid number(20),
    pname varchar2(10)
);

修改表

----添加一列
alter table person add (gender number(1));

----修改列类型
alter table person modify gender char(1);

----修改列的名称
alter table person rename column gender to sex;

----删除一列
alter table person drop column sex;

数据的增删改

----添加一条记录
insert into person (pid,pname) values (1,"小明");
commit;     //除了查询其他修改表数据完一定要提交事务 

----修改一条记录 
update person set pname = '小马' where pid = 1;

----三个删除
--删除表中全部记录
delete from person;    
--删除表结构
drop table person;  
--先删除表,再创建表,效果等同于删除表中全部记录,在表中有索引的情况下,操作效率高
truncate table person;    

四、序列

我们发现我们的id是直接打进去的,但是实际中我们可能记不住他的增长,这时候就需要序列

----序列:默认从1开始,依次递增,主要用来给主键赋值
----序列不属于任何一张表,但是可以逻辑和表做绑定
create sequence s_person;

--dual是虚表,只是为了补全语法,没有任何意义,我们oracle语句查询就必须带from但是序列不属于任何表
select s_person.nextval from dual;//第一次要让他有值
--查询
select s_person.currval from dual;

--今后我们写插入
insert into person(pid,pname) values (s_person.nextval,'小张');
commit;

用户

system用户

超级管理员用户,密码orcl

scott用户

密码默认tiger,这个用户是初学者必须接触的,他可以模拟出各种复杂的查询

刚安装完scott用户是被锁定的,解锁需要超级管理员身份

--解锁scott用户
alter user scott account unlock;

--解锁scott用户的密码(也可以重置密码)
alter user scott identified by tiger;

--切换到scott用户下

查询语句

简单查询很简单,但是如果是复杂查询,我们就需要用到函数

一、单行函数

作用于一行,返回一个值

1、字符函数

---upper就是小写换大写 lower就是大写换小写
select upper('yes') from dual;
select lower('YES') from dual;

2、数值函数

----这个表示四舍五入,后面的数就是保留的位数
select round(26.14,1) from dual;

----求余数
select mod(10,3) from dual;

3、日期函数 

----查询出emp表中所有员工入职距离现在几天
select sysdate-e.hiredate from emp e; 
//这里的e就相当于emp的别名 后面直接e.hiredate就可以调用emp表的属性了

----算出明天此刻
select sysdate+1 from dual;

----查出emp中所有员工入职距离现在几月
select months_between(sysdate,e.hiredate) from emp e;

----查出emp中所有员工入职距离现在几年
select months_between(sysdate,e.hiredate)/12 from emp e;

----查出emp中所有员工入职距离现在几周
select (sysdate-e.hiredate)/7 from emp e;
select round(sysdate-e.hiredate)/7 from emp e; //加个round四舍五入

----转换函数
--日期转字符串
select to_char(sysdate,'yyyy-mm-') from dual;
--字符串转日期
select to_date('2018-6-7 16:40:33','fm yyyy-mm-dd hh24:mi:ss') from dual;

 4、通用函数

----算出年薪
--奖金里面有null直接年终加12月薪做算术会得null的
select e.sal*12+nvl(e.comm,0) from emp e; //如果不是null就e.comm,是null就用0

二、条件表达式

mysql和oracle通用的写法

--给emp表的员工起中文名
select e.ename,
    case e.ename
        when 'Tom' then '汤姆'
            when 'tim' then '提姆'
                when 'jack' then '杰克'
                    else '无名'     //如果不写else其余人别名都是null
                        end
from emp e;

--判断emp表中员工工资,如果高10000显示高收入,5000到10000是中收入,低于5000低收入
select e.sal,
    case 
        when e.sal>10000 then '高收入'
            when e.sal>5000 then '中等收入'
                else '低收入'
                    end
from emp e;

oracle专用条件表达式(不建议用这种)

--给emp表的员工起中文名
select e.ename,
     decode(e.ename
        'Tom' '汤姆',
            'tim' '提姆',
                'jack' '杰克',
                    '无名')"中文名" 
from emp e;

三、多行函数(聚合函数)

作用于多行,返回一个值

---查询总数量
select count(1) from emp; 这里的1相当于*

---工资总和
select sum(sal) from emp;

---最大工资
select max(sal) from emp;

---最低工资
select min(sal) from emp;

---平均工资
select avg(sal) from emp;

四、分组查询

---分组查询
---查询出每个部门的平均工资
select e.deptno,avg(e.sal) from emp e group by e,deptno;
---分组查询中,出现在group by后面的才能出现在select后面
---没有出现在的列,想在select后面出现必须加上聚合函数(多行函数)
---因为group by分组后会改变表的结构,一个组有很多个数据不能单独查一个
---但是聚合函数可以把多行变成一个值
---查询平均工资高于6000的部门信息
select e.deptno,avg(e.sal) 
from emp e 
group by e.deptno
having avg(e.sal)>6000;
---所有条件都不能使用别名来判断

---查询每个部门工资高于800的员工平均工资
select e.deptno,avg(e.sal) asal
from emp e
where e.sal>4000
group by e.deptno;
---where是过滤分组前的数据,having是过滤分组后的数据
---where必须在分组前,having必须在分组后

五、多表查询

---笛卡尔积
select *
from emp e,dept d;

---等值连接
select *
from emp e,dept d
where e.deptno=d.deptno;

---内连接(早期写法)
select *
from emp e inner join dept d
on e.deptno = d.deptno;

---查询所有部门,以及部门下的员工信息【外连接】
select *
from emp e right join dept d
on e.deptno = d.deptno;

---查询所有员工信息,以及员工所属的部门【外连接】
select *
from emp e left join dept d
on e.deptno = d.deptno;

---oracle专用外连接(尽量选择通用)
select *
from emp e,dept d
where e.deptno(+) = d.deptno;  //+在这边就显示那边的全部数据

六、自连接概念和练习

我们要查员工对应的领导时,我们发现emp表里有员工编号以及他的领导编号

当我们一员工编号来看这个表可以是员工表,也可以以领导的编号看编程领导表

这时候就可以用到自连接

 把一张表当成两张表起别名,让1的领导编号等于2的员工编号

---查询员工姓名和员工领导姓名
select e1.ename,e2.ename
from emp e1,emp e2
where e1.mgr = e2.empno;

---查询员工姓名,员工部门名称,员工领导名称
select e1.ename,d.dname,e2.ename
from emp e1,emp e2,dept d
where e1.mgr = e2.empno
and e1.deptno=d.deptno;

---查询员工姓名,员工部门名称,员工领导名称,员工领导部门名称
select e1.ename,d1.dname,e2.ename,d2.dname
from emp e1,emp e2,dept d1,dept d2
where e1.mgr = e2.empno
and e1.deptno=d1.deptno
and e2.deptno=d2.deptno;

七、子查询

1、子查询返回一个值

---查询工资和scott一样的员工信息
select * from emp where sal = 
(select sal from emp where ename = 'scott');
--但是这个ename不是唯一的,如果重名就会查出集合 用=就报错
--所以保险起见我们这里改成in
select * from emp where sal in 
(select sal from emp where ename = 'scott');

2、子查询返回一个集合

---查询出工资和10号部门任意员工一样的员工信息
select * from emp where sal in
(select sal from emp where deptno = 10);

3、子查询返回一张表

---查询出每个部门最低工资,最低工资员工姓名,和改员工所在部门名称
--1、先查出每个部门最低工资
select deptno,min(sal) msal
from emp 
group by deptno;
--2、三表联查,得到最终结果
select t.deptno,t.msal,e.ename,d.dname
from (select deptno,min(sal) msal from emp group by deptno) t,emp e,dept d
where t.deptno = e.deptno 
and t.masl = e.sal 
and e.deptno = d.deptno

八、分页查询

orwnum行号:当我们做select操作的时候,没查询出一行记录,就会在改行上加一个行号

行号从1开始,依次递增,不能跳着走。 

---我们先试试rownum
select rownum,e.* from emp e order by e.sal desc
---排序操作会影响rownum的顺序,rownum是查询出的行,当我们按照规则排序后这个行肯定乱的

---但是我们可以先按照规则排序再加上行号rownum
select rownum,t* from(
select rownum,e* from emp e order by e.sal desc) t;

---emp表工资倒叙排列后,每页五条记录,查询第二页
select rownum,e.* from(
    select * from emp order by sal desc
) e where rownum<11 and rownum>5 
---我们这样是错的 rownum必须从1开始连续的 所有rownum>5错了
---我们要用这种,这就是分页查询的固定格式
select * from(
    select rownum rn,e.* from(
        select * from emp order by sal desc
    ) e where rownum<11
) where rn>5

视图

1、概念

视图就是提供查询的窗口,里面没有存放数据,所有数据来自于原表

2、作用

  • 可以屏蔽掉敏感的字段。比如工资这一列,我们为了不让大家看到工资就可以创建个没有工资的视图给大家看
  • 保证总部和分部数据及时统一。总公司有雨伞10万把,分部卖的东西不能多余总部,不然没货了,如果他们都各自查表,这时候总部突然卖没货,分部还没来得及查,继续卖就超卖了。这时候就可以用视图防止超卖,让总部从表中查,分部去看视图,总部数据改变,分部立马可以看到

3、创建视图

(1)切换dba权限用户

要创建视图必须右dba权限,所有我们要切换用户

(2)创建表

创建视图必须先由表,我们把刚刚scott用户下的表查出来创建

create table emp as select * from scott.emp;
select * from emp;

(3)创建视图

create view v_emp as selcet ename,job from emp;
---view是关键字 v_emp是视图名称

4、管理视图

---查询视图
select * from v_emp;

---修改视图
update v_emp set job='CLERK' where ename='ALLEN';
commit;

视图可以修改,但是不推荐,因为操作的还是表数据,直接改表就行,公司为了防止修改视图,会创建只读视图 

create view v_emp1 as select ename,job form emp with read only;

索引

1、索引

索引就是在表的列上构建一个二叉树,达到大幅度提高查询效率的目的

但是索引会影响增删改的效率

2、单列索引

---创建单列索引
create index idx_ename on emp(ename);

---索引触发规则,条件必须是索引列中的原始值
select * from emp where ename='scott'
---如果加了单行函数或者模糊查询都不是原始值,不会触发索引

3、复合查询

---创建复合索引
create index idx_enamejob on emp(ename,job);

---复合索引中第一列为优先检索列
---如果要触发复合索引,必须包含有优先检索列中的原始值
select * from emp where ename = 'scott' and job='xx';
---触发复合索引
select * from emp where ename = 'scott';
---假如他又创建了单列索引,又创建了复合索引,生效的是单列索引

select * from emp where ename = 'scott' or job='xx';
---这种就不会触发索引 or相当于两个查询语句 一个触发一个不触发最后就不会触发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息安全工程实践笔记--Day1 信息收集漏洞扫描

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录实验目标&#xff08;一&#xff09;信息收集一、搜索引擎二、域名1.whois 查询2.子域名查询3.真实ip(1)什么是cdn&#xff1f;(2) 如何验证目标服务器是否挂载cdn&a…

吴恩达-机器学习-k-means聚类算法

目录 吴恩达-机器学习2022版 k-means聚类算法实现整理 1.核心函数四个&#xff1a; 1.find_closest_centroids &#xff1a;寻找最近的质心 2.compute_centroids &#xff1a;迭代重新计算质心 3.kMeans_init_centroids &#xff1a;随机初始化质心 4.run_kMean…

Centos安装Rclone,操作Minio基本命令

简介 Rclone 是一个用于和同步云平台同步文件和目录命令行工具。它允许在文件系统和云存储服务之间或在多个云存储服务之间访问和同步文件&#xff0c;它具有单向同步功能&#xff0c;使目录完全相同&#xff0c;它具有加密、缓存和联合后端&#xff0c;支持 Fuse 安装&#…

MindSpore是一种适用于端边云场景的新型开源深度学习训练/推理框架

MindSpore是一种适用于端边云场景的新型开源深度学习训练/推理框架。 MindSpore提供了友好的设计和高效的执行&#xff0c;旨在提升数据科学家和算法工程师的开发体验&#xff0c;并为Ascend AI处理器提供原生支持&#xff0c;以及软硬件协同优化。 同时&#xff0c;MindSpore…

【计算机网络】

1、应用层 web应用——http协议 请求消息格式&#xff1a;请求行&#xff0c;头部行&#xff0c;消息体 请求方法get&#xff0c;post&#xff0c;delete&#xff0c;put上传文件 Email应用——SMTP&#xff0c;POP3/IMAP DNS应用——DNS协议 P2P应用&#xff1a;文件分发等…

实战项目【7】MEMS惯性传感器的精度参数和单位换算

1 前言 有不少朋友在做项目的时候经常涉及到加速度计和陀螺仪的原始数据转换为其他的单位的问题&#xff0c;这篇文章梳理和推导一下。 1&#xff09;加速度计的原始数据 在应用时常见的转换单位有: g、m/s^2 、角度 2&#xff09;陀螺仪的原始数据 在应用时常见的转换单位有&a…

〖全域运营实战白宝书 - 运营角色认知篇⑤〗- “运营“ 是否有前途?

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

UE4 回合游戏项目 23- 进入战斗

在上一篇&#xff08;UE4 回合游戏项目 22- 控制新角色&#xff09;基础上继续增加两个角色进入战斗的逻辑 效果&#xff1a; 步骤&#xff1a; 1. 打开“gameMode1”&#xff0c;新增一个变量命名为“正在控制的所有玩家”&#xff0c;变量类型为“roleCategory”的数组 2.打…

Jitamin 安装与配置

Jitamin Jitamin (读作/ˈdʒɪtəmɪn/) 是一款免费、开源&#xff0c;使用PHP语言开发的项目管理系统。Jitamin灵感来自于Vitamin&#xff0c;并结合了Just In Time(准时)和敏的拼音min&#xff0c;意指效率与敏捷是项目管理的维他命。 功能特性 简洁、美观的界面支持多主题…

Celix是什么?能做什么?

半路突然看到了OSGI,又学习了一下&#xff0c;大概了解了架构的一些基础知识。 像MVC&#xff0c;MVP等其实就是分层架构&#xff0c;这类是最容易想到的。 然后其实我就没有接触&#xff0c;如微服务架构&#xff0c;微内核架构。 是什么&#xff1f; 而Celix就是属于微内…

[附源码]java毕业设计校园网学生成绩查询系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Redis源码篇(6)——主从复制

主从复制 从服务器执行 SLAVEOF IP PORT 命令即可实现对主服务器的复制。 复制又分为完整同步和部分同步&#xff08;2.8之后&#xff09; 完整同步&#xff1a;与混合持久化过程类似&#xff0c;先以rdb的方式保存rdb文件然后发送给从服务器。再将期间的命令保存到复制缓存区…

[论文评析]基于人体姿态识别的立定跳远 动作智能评估系统

基于人体姿态识别的立定跳远 动作智能评估系统论文信息背景方法系统总体设计立定跳远动作智能评估系统标准动作库子系统动作采集子系统人体姿态动作评估子系统人体姿态评估模型立定跳远关键帧匹配姿态评估及对比总结论文信息 题目&#xff1a;基于人体姿态识别的立定跳远 动作…

AMBA:AXI/AHB/APB学习笔记

AMBA、AXI、AHB、APB学习笔记AMBA总线&#xff1a;各模块之间的连接AHB特性&#xff1a;组成部分&#xff1a;AXIAPBAMBA总线&#xff1a;各模块之间的连接 advanced microcontroller bus architecture高级微控制器总线架构 AHB Advanced High-performance Bus 高级高性能总…

微信小程序|搭建一个博客小程序

文章目录一、文章前言二、创建小程序三、功能开发&#xff08;1&#xff09;首页&#xff08;2&#xff09;领域页&#xff08;3&#xff09;博客详情页&#xff08;4&#xff09;个人中心页一、文章前言 此文主要通过小程序搭建一个博客系统&#xff0c;实现博客的一些基础功能…

AD环境下域用户的离线缓存登录

缓存登录主要是为了解决当公司域控制器发生故障联系不上DC或用户拿笔记本电脑回家不拔VPN的情况下&#xff0c;依然能够登录到系统&#xff0c;进行办公。如果用户登录的时候联系不到DC&#xff0c;那么就凭用户登录时输入的用户名和密码去缓存中校验&#xff0c;如果能联系上D…

如果在学习spring的时候没看过这份学习笔记+源码剖析,真的亏大了!

Spring 是一个开源的设计层面框架&#xff0c;它解决的是业务逻辑层和其他各层的松耦合问题&#xff0c;因此它将面向接口的编程思想贯穿整个系统应用。包括在此基础上衍生的 Spring MVC、 Spring Boot 、Spring Cloud 等&#xff0c;在现在企业中的应用越来越广泛。因此对于 S…

YOLOv7移植经验分享

目录 一、背景 二、环境 2.1 服务器环境 2.2 SDK环境 2.3 docker环境 三、移植开发 3.1 模型迁移 3.2 算法迁移 四、部署 一、背景 YOLOv7在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器&#xff0c;并且在 GPU V100 上 30 FPS 或更高的所有…

python基于OCR深度学习实现商品配料表识别

1、概述 当前人民和国家对食品安全十分重视&#xff0c;但商家为了保证食品长时间储存&#xff0c;味道鲜美&#xff0c;在食品中添加超量或对人有严重危害得食品添加剂&#xff0c;严重危害到人民的安全&#xff0c;我们以方便面为例&#xff0c;一包方便面最多可有25种食品添…

十年开发老手,深度解析企业用人标准为何越来越高?!

涛哥作为一个10多年的开发老手&#xff0c;经历过很多场面试&#xff0c;也面试过很多人&#xff0c;这么多年下来&#xff0c;切身体会到企业的用人标准越来越高&#xff0c;企业对开发工程师的要求也越来越"过分"。所以涛哥今天就借此机会&#xff0c;我们一起来分…