Oracle数据库入门

news2024/9/17 9:00:56

目录

  • Oracle基础概念
  • 数据库安装
  • 连接Oracle
    • 查看当前用户
  • 数据表的基本概念
    • 查看当前系统表
    • Orcale函数
      • 单行函数
      • 多行函数/组函数/聚合函数
  • SQL语句
    • DML
      • insert
      • 批量插入数据
        • 创建新表
        • 在旧表中插入
      • delete
        • 全表删除
      • update
    • DDL
      • create
      • alter
      • drop
  • 连接

Oracle基础概念

数据库:
数据的仓库

以前存数据:内存,文件
内存: int num = 10; 问题,临时
文件: xml/json 解析/操作起来麻烦

永久存放,方便解析/处理-> 数据库
主流关系型数据库:

  • Oracle

产品免费,服务收费,强大稳定性,安全性

  • MySQL

MySQL AB开源,2008被SUN公司收购,然后和java打包2009年卖给了Oracle!有社区版和企业版!产品免费,服务收费!

  • SqlServer

微软开发,强大的图形化工具,方便使用

  • db2

IBM,多个操作系统,多个硬件

Oracle版本:
oracle8i/9i:internet,开始走向网络,之前单机
oracle10g: grid网格计算,提高访问速度,避免舍近求远问题!
oracle 12c: cloud,云开发

oracle11g:目前主流

不同版本只有部署运维差异较大,其他没有很大区别!

数据库服务器:
将数据库部署在服务器上!
Oracle服务器:

  1. 基于关系型的数据库(RDBMS)
    关系型->二维表:Oracle/MySQL/SqlServer/DB2…
    非关系数据库: NoSQL:not noly sql, redis/mongodb: 基于key value结构
  2. 组成结构:
    一个PGA对应一个客户端
    两阶段提交:减少数据库访问次数!
    img

数据库安装

Oracle 安装过程

  1. 官网下载安装包
  2. 然后解压后,点击setup启动安装
    img
    img

img

img
img
img

  1. 配置数据库密码
    img
    img

  2. 继续安装
    img

  3. 等待加载
    img

img
Oracle数据库不像其他数据库一样,Oracle只有一个实例!

  1. 重点输入密码,继续安装
    img

  2. 安装成功
    img

  3. 验证
    通过刚刚我们未锁定的账户名和密码进行连接数据库!
    img

连接Oracle

  • 方式一
-- 打开cmd窗口
-- 1.输入sqlplus回车
sqlplus
-- 输入用户名
scott
-- 输入密码
123456

img

  • 方式二
    img
-- 找到sqlplus窗口
-- 然后操作和上述步骤一样
-- 输入用户名(方案名)
-- 输入密码

img

查看当前用户

show user;
img
方案就是用户,用户就是方案!

数据表的基本概念

实体:类似于java中的类
记录:java中的对象(一行数据)
字段:java中的属性,列
表:同一个实体中将记录和字段组合起来就是一张表!

查看当前系统表

  • select * from tab;
    img

  • 查看emp
    select * from emp
    img

  • 设置行长度!
    set linesize 150;
    如果我们设置行长度,可以看到一行显示不了这一条记录!
    img

  • set pagesize 300
    设置一页展示的大小
    img

  • 查看表结构
    desc table_name;
    img

  • 查询字段并起别名
    select empno as "编号",ename "姓名",job 月薪 from emp;
    img
    注意:
    as: 可以省略!
    "":当遇到一些特殊字符,Oracle关键字,空格不能省略
    img

  • 清屏
    host cls;
    img

  • 修改上一条语句错误
    c /form/from;

c /form/from;
--显示修改后的sql!
-- /斜杠表示确认修改执行sql
/

img

  • ed直接在记事本中修改上一条错误语句
    img
    记得要有权限!管理员cmd窗口下可进行!
    关闭,回车,预览结果,/确认!
    img

  • 列的计算
    select empno, sal, sal*12 年薪 from emp;
    img

  • select控制列,where控制行!
    img

  • 日期/字符串/字符. 用单引号''
    img

  • 关键字/命令大小写不敏感
    img

  • 数据大小写敏感
    img

  • 运算符
    操作运算符: + - * / %
    关系运算符:> >= < <= =
    注意:
    等于:=
    不等于: !=或者<>
    null判断:is null或者is not null
    img
    逻辑运算符: or and not
    img
    注意: 执行顺序
    where执行顺序:从右往左!

  • null的计算
    任何数字和null计算都为null
    img
    需要对null处理: null->0

    • nvl:if
      nvl(comm,0): if comm is null comm=0
      img
    • nvl2: if else
      nvl2(comm,comm,0): if(comm==null) return 0 else return comm;
      img
  • 对查询的结果集去重
    distinct
    img

  • 连接符
    concat()或者 ||
    类似于java中字符串拼接hello+world-> helloworld
    img
    注意:字符单引号

  • dual临时表
    单行单列,学习时使用的临时表
    img

  • 日期
    修改日期格式 alter session set nls_date_format='yyyy-mm-dd';
    img

  • 范围查询:数字/日期
    between min and max; [min,max 闭区间
    img
    img

  • 模糊查询
    like 通配符 %:任意字符 _:匹配一个字符
    img
    查询姓名长度大于4的员工信息不可用函数
    img
    查询字段中包含_的结果
    _进行转义,转义符可以任意!
    like '%\_%' escape '\';escape:表示转义字符!

  • not in里不能出现null
    出现了null查询结果就必然为空!
    img
    等价写法:
    select * from emp where comm not(comm = 300 or comm = 500);
    所以null不能和=判断!

  • 排序
    order by asc(默认升序) desc(降序)
    order by 字段名|表达式|序号
    img
    序号(就是第几列)
    img
    表达式
    img

  • null默认是最大值
    img
    通过nulls lastnull放最后!
    img

  • 追加命令
    a :append
    img

  • 多列排序
    select * from emp order by sal desc,comm asc;
    img

Orcale函数

单行函数:一次操作一行
多行函数:一次操作多行返回一个结果

单行函数

字符函数:

  • lower(变小写),upper(变大写),initcap(每个单词首字母大写)
    img
  • substr(str,begin,len); begin:从1开始数!
    img
  • length(str); 字符长度!
    img
  • lengthb(str) 字节数
    img
    注意: 英文/数字字符和字节数一样!
    中文/特殊符号就不同!
    utf8: 一个汉字/符号 占3个字节!
    gbk: 占2个字节!
    img
    img
  • instr(str1,str2); 在str1找str2返回位置(开始位置为0)
    img
  • lpad(str,n,'c')/rpad():str需要占n位,不够就用字符c填充!
    img
  • trim():去首尾任意字符,无参默认去空格!trim(c from str) 去指定字符c
    img
  • replace(str,c,r);: 将str字符中的c替换成r
    img

数值函数

  • round(num,n);numn位四舍五入,保留n位!
    n>0:保留几位小数!
    n=0:保留整数
    n<0:保留几位整数

img

  • trunc(num,n);截取,舍尾!
    img
  • mod(num,n);num进行n求余!
    img

日期函数

  • sysdate:关键字当前时间
    img
  • 格式化:日期-> 字符
    to_cahr(date,format) 日期date转成fromat格式字符
    img
  • 日期+-数字: 步幅是天,结果是日期
    img
  • 日期-日期:结果是天数
    img
  • months_between(日期1,日期2);:日期1-日期2得出相差多少月
    img
  • add_months(日期,n):日期+n个月
    img
  • last_day(日期):当前月最后是那一天img
  • next_day(date,w):下一个w星期几的时间!
    img
  • round(date,x)/trunc(date,x):对日期四舍五入或舍去 x可取:month/year/day对年月日四舍五入或者舍去

通用函数

  • nvl,nvl2 :if if else
  • nullif(a,b): if(a==b) null else a
    img
  • coalesce(a,b) if a!=null: a elif b!=null: b else null返回第一个不为null的值!
    img
  • 条件判断函数
    decode(字段,条件1,返回值1,条件2,返回2...最后表达式);
    img
  • case表达式
case 表达式
when 条件1 then 返回1
when 条件2 then 返回2
...
else 返回值n
end

![img])(https://i-blog.csdnimg.cn/blog_migrate/5fc8ec0c8f0e2f4d1748157ace1ad3d5.png)

转换函数

源类型目标类型
nvarchar2/nchar等字符number/date
number/datenvarchar2/nchar等字符

img
img

  • 显式转换
    img
    to_number格式
格式简介
9数字
00
$美元符号
L本地货币符号
.小数点
,千分位

to_date格式

格式简介示例
yyyy数字表示年2019
year英文表示年twenty twelve
mm数字表示的月09
mon月(与系统语言相关)9月
dy星期几(与系统语言相关)星期一
day星期几(与系统语言相关)星期一
dd每个月的第几天02

img
img
img
img
img

多行函数/组函数/聚合函数

  • count():求字段列数,且自动排除null
    img
    distinct组合使用可以求部门数!
    img
  • count max sum min avg这里和mysql一样!
    img
  • group by 分组注意事项

分组查询时,不在聚合函数中的列,必须在group by中!

img
多次分组
img

  • 对组进行筛选 having
    img

SQL语句

SQL语句类型:
SQL:数据查询语言select
DML:数据操作语言insert,delete,update
DDL: 数据定义语言 create/drop/truncate/alter table
DCL:数据控制语言 grant,revoke

DML

insert

语法:
insert into table_name (字段1,字段2,...) value (字段值1,字段值2...);
字段值和字段值一一对应,数据类型个数顺序一致!
注意:这里的into不能省略
img

img
多行插入

img
Oracle并不支持像MySQL一样的多行插入
insert into table_name (...)values(...),(...)...;
多行插入语法

insert all 
       into table_name  VALUES ('活塞',1990)
       INTO table_name  VALUES ('公牛',1991)
       INTO table_name  VALUES ('公牛',1992)
       SELECT 1 FROM DUAL; --需要借助dual表!

img
注意:
SQL92不能省略字段,SQL99标准可以省略字段名insert emp (可省略) values();

  • 动态输入插入的值
    & 通过&占位符进行动态输入
insert into table_name(&name1,&name2...) values(&value1,&value2...);

img
img

批量插入数据

创建新表

批量插入前表不存在,插入后就生成了新表!创建表好插入数据一次搞定!

create table table_name
as select * from emp;

不但复制了emp表中的数据,并且将emp表结构也复制了!

1.复制表结构和全部数据
img
2.复制表结构和部分数据
img
3.创建表结构不存在数据
img

在旧表中插入

已存在表,然后进行数据插入!

方式一:

insert into table_name (empno,ename,sal) select empno,ename,sal from emp; 

img
方式二:

可以通过事务的方式进行多行插入!

begin
insert into emp
values(-1,'lisi','m',7788,'03-12月-81',9998,1000,20);
insert into emp
values(-2,'zhan','m',7788,'03-12月-81',9998,1000,20);
end;

img

如果插入海量数据:
1.数据泵
2.SQL Loader
3.外部表

delete

delete删除

语法:

delete from tab_name 
where ...;

注意:

1.不加where为全表删除,可以通过rollback回退
2.加上where删除表中部分数据
3.delete from tab_name*

全表删除

delete from tab_name; 删除表中的数据,删除完后可rollback回退

img
truncate from tab_name; 属于DDL语句不能回退!

img
测试deletetruncate删除全表的时间

打开sql执行时间
set timing on;
关闭sql执行时间
set timing off;

img
img
总结:

事务:
delete支持事务,truncat不支持事务!
时间:
对于少量数据: delete效率高,一行一行删除
对于海量数据:truncate效率高

  • a. drop table丢弃整张表

  • b. 重新创建表

闪回:
delete支持闪回,truncate不支持闪回
空间:
delete不会释放空间(换个空间放数据,类似于回收站)
truncate会释放空间,彻底删除
delete会产生碎片,truncate不会
产生碎片太多,可以整理碎片
a. alter table tab_name move;
img
b.可以通过数据导入导出

update

update tab_name set 字段名1=value1,字段名2 = value ...
where ...;

修改整张表数据!
img
where语句修改指定数据

DDL

create/drop/truncate/alter

create

创建表:
create table tab_name
(
	id number,
	name varchar(10),
	age number
);

img
注意事项:

1.权限和空间问题
2.表名命名规则:
a.字母开头
b.表名只包含:大小写字母,数字,_,&,#;
c.长度1-30个字符
d.不能与其他数据库中的对象重名(表,视图,索引,触发器,存储过程…)
e.不能与保留字重命
查看保留字: DBA账户
sqlplus / as sysdba
然后执行语句…

  • 设置某个字段宽度:
    字符:col 字段名 for a7;
    数字: col 字段名 for 9999;
    img

alter

  • 追加新列
alter table tab_name add 字段名 字段类型;

img

  • 修改列
    • 修改列的长度
      alter table tab_name modify 字段名 字段类型;
    • 修改类的类型
      alter table tab_name modify 字段名 字段类型;

img
注意:

blob/clob不能修改 ->先删除此列,重新追加!

  • 删除列
    alter table tab_name drop column 字段名;
    img

  • 重命名列
    alter table tab_name rename column 字段名 to 新字段名名;

img

drop

drop删除表(放入回收站)

drop table tab_name;

img
drop删除后,表还在tab中,也就是放入了回收站

  • 查看回收站:
    show recyclebin;
    img

  • 清空回收站:
    purge recyclebin;
    img

  • 还原回收站:
    闪回

删除表并清空回收站
drop table tab_name purge;
img

连接

内连接/外连接/自连接/层次连接

交叉连接(笛卡尔积),所有情况的组合,不推荐使用
select * from tab_name1,tab_name2;
img

  • 内连接:
    • 通过where连接
      img

    • 通过inner join on连接
      img

多张表通过相同字段连接,匹配成功则显示,否则不显示

  • 外连接

    • 左外连接

    以左表为基准,去匹配右表数据,如果匹配成功,则全部显示,匹配不成功右边部分为null

    --方式1
    select * from tab1 left (outer) join tab2 on 条件;
    -- 方式2 Oracle独有
    select * from tab1 t1,tab2 t2 where t1.no = t1.no(+); 
    

    img

    • 右外连接

    以右表为基准,去匹配左表数据,如果匹配成功,则全部显示,匹配不成功左边部分为null

    -- 方式1
    select * from tab1 right (outer) join tab2 on 条件;
    -- 方式2 Oracle独有
    select * from tab1 t1,tab2 t2 where t1.no(+) = t1.no; 
    

    [!(img-ZVL9XlK3-1721894681792)(https://i-blog.csdnimg.cn/blog_migrate/58ced5ebf39c5b407d7cdec3b382a8b9.png)

    • 全外连接

    左外连接加上右外连接然后去重

  • 自连接

    一张表当两张表用

select * from tab t1,tab t2 where ...;
  • 层次连接

树形层次

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

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

相关文章

探索大模型的“心理理论”能力:TMBENCH基准测试

人工智能咨询培训老师叶梓 转载标明出处 心理理论是理解他人信念、意图、情感等心理状态的能力&#xff0c;对人类社会交往至关重要。近期研究引发了关于LLMs是否展现出ToM的辩论。然而&#xff0c;现有的评估方法受限于范围狭窄、主观判断和潜在的数据污染等问题&#xff0c;无…

万能DIY预约小程序源码系统 自由DIY 适合任何行业的在线预约小程序 带源代码包以及搭建部署教程

系统概述 随着移动互联网的发展&#xff0c;小程序作为一种轻量级应用&#xff0c;因其便捷性和易用性而受到广大用户的喜爱。各行各业都在积极探索如何利用小程序提升服务体验。小编给大家分享一款万能DIY预约小程序的源码系统&#xff0c;该系统支持自由定制&#xff0c;适用…

S3GCL Spectral, Swift, Spatial Graph Contrastive Learning

发表于:PMLR24 推荐指数: #paper/⭐⭐⭐ 总结做了什么: 利用gcn对比学习训练mlp来提取特征嵌入,使得训练完毕使用的时候,可以更快的得到嵌入(类似于师生蒸馏的加速).其中,结合了异配图的chebnet2,以及高通低通过滤,和非对称对比学习等 看图解释:作者将全通的MLP训练得到的嵌入…

PostgreSQL入门与进阶学习,体系化的SQL知识,完成终极目标高可用与容灾,性能优化与架构设计,以及安全策略

​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 概述基础篇初级篇进阶篇…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 7月31日,星期三

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年7月31日 星期三 农历六月廿六 1、 海关总署&#xff1a;我国关税总水平目前已经降至7.3%&#xff0c;接近发达国家平均水平。 2、 网络身份证要来了&#xff1a;两部门征求意见&#xff0c;拟为社会公众统一签发网号、网证…

HighConcurrencyCommFramework c++通讯服务器框架 :网路通迅实战

数据总在两端进行&#xff0c;一个客户端&#xff0c;一个服务器端 连接建立起来&#xff0c;数据双向流动&#xff0c;这叫双工&#xff0c;你可以发给我我也可以发给你 既然服务器端是被动的接受的&#xff0c;那么客户端必须得知道服务器的地址 我浏览器要访问的淘宝网&a…

基于Spring boot + Vue的加油站系统

项目名称&#xff1a;加油站系统 作者的B站地址&#xff1a;程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址&#xff1a;程序员云翼-CSDN博客 1.项目技术栈&#xff1a; 前后端分离的项目 后端&#xff1a;Springboot MybatisPlus 前端&#xff1a;Vue…

Jetbrains Idea插件开发教程

背景介绍 痛点&#xff1a;在idea开发过程中&#xff0c;希望按需驼峰选中文本。现在默认是一整个单词选中&#xff0c;只有在设置–>智能按键 中开启了使用"CamelHumps单词"时能够驼峰选中。但是这种情况比较粗暴&#xff0c;直接全局开启了。但是在日常开发中&…

论文《Few-Shot Object Detection with Model Calibration》的解读

《Few-Shot Object Detection with Model Calibration》论文的解读 作者&#xff1a;Qi Fan1, Chi-Keung Tang1 , and Yu-Wing Tai1,2 单位&#xff1a;1 The Hong Kong University of Science and Technology, 2 Kuaishou Technology 邮箱&#xff1a;fanqicsgmail.com, ckta…

Unity | Shader基础知识(第二十一集:应用-怪兽膨胀、顶点着色器和表面着色器合并)

目录 一、前言 二、资源介绍 三、顶点着色器和表面着色器一起使用基础 1.使用表面着色器代码 2.光照选择 3.加入顶点着色器 4.补充表面着色器 四、在顶点着色器中完成怪兽膨胀功能 1.膨胀原理解释 2.完成膨胀代码 1&#xff09;.写出需要的结构体 2&#xff09…

修改所属用户/用户组——chown

目录 &#xff08;1&#xff09;修改所属用户 &#xff08;2&#xff09;修改所属用户组 &#xff08;3&#xff09;修改所属用户和用户组 &#xff08;4&#xff09; 选项 -R 使用 chown 可以修改文件/文件夹的所属用户&#xff0c;所属用户组&#xff1b; 当然与 chmod …

7thonline第七在线出席中服协时尚科技峰会 探讨AI商品管理落地

7月25-26日&#xff0c;中国服装协会2024中国时尚科技创新峰会在杭州隆重举行&#xff0c;本次大会以“新质焕能&#xff0c;革故鼎新”为主题&#xff0c;为持续推动服装产业鼎力创新&#xff0c;以新质生产力的新特征为引领&#xff0c;布局高质量发展新赛道&#xff0c;充分…

MySQL基础练习题15-进店却未进行交易过的顾客

题目&#xff1a;有一些顾客可能光顾了购物中心但没有进行交易。来查找这些顾客的 ID &#xff0c;以及他们只光顾不交易的次数。 准备数据 分析数据 题目&#xff1a;有一些顾客可能光顾了购物中心但没有进行交易。来查找这些顾客的 ID &#xff0c;以及他们只光顾不交易的次…

c++迭代器的介绍

迭代器主要的作用就是为了可以像数组那样实现指针向后移动到下一个数据。同时迭代器统一了所有容器&#xff0c;让所有容器可以通过迭代器互通数据。 那么下面我们来看看迭代器 数组的优势 我们数组的优势就是内存连续&#xff0c;那么我们将首地址的地址进行加减就可以访问…

【多线程】补充内容 {线程池;线程安全的单例模式;STL容器、智能指针的线程安全;其他常见的各种锁:自旋锁、读写锁}

一、线程池 1.1 概念 线程池一种线程使用模式&#xff1a; 线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。 而线程池维护着多个线程&#xff0c;等待着监督管理者分配可并发执行的任务&#xff1a;&#xff08;线程池的优点&#xff09; 这避免了在处…

将真实世界带入实验室—如何使用ALPS进行网络损伤仿真测试

不完美的真实世界网络 不同于稳定、可控的传统网络实验室的网络环境&#xff0c;真实世界的网络环境面临着许多挑战和风险&#xff0c;这些挑战在很大程度上增加了网络的脆弱性和复杂性&#xff1a; &#xff08;1&#xff09;物理损伤&#xff1a;真实世界的网络基础设施&am…

Java扫码点餐系统奶茶店类型堂食配送小程序源码

&#x1f964;【奶茶新风尚&#xff01;扫码点餐系统&#xff0c;堂食配送两不误】&#x1f964; &#x1f3e0;【堂食新体验&#xff1a;一键下单&#xff0c;即享美味】&#x1f3e0; 踏入心仪的奶茶店&#xff0c;不再需要排队等候点单&#xff0c;只需拿起手机&#xff0…

TongHttpServer 简介

1. 概述 随着网络技术的飞速发展,高并发大用户场景越来越普遍,单一应用服务节点已经不能满足并发需求,为了提高整个系统可靠性,扩展性,吞吐率,通常将多个应用服务器通过硬负载/软负载组成集群,负载均衡器根据不同负载算法将请求分发到各个应用服务器节点。 Tong…

飞书打卡 快捷指令

使用快捷指令定时飞书打卡 在网上找了一圈&#xff0c;只有钉钉打卡的快捷指令&#xff0c;但是公司换飞书&#xff0c;哪个打工人不怕忘记打卡呢&#xff0c;所以自己研究了一下&#xff0c;其实也很简单。 找url 问题的最关键是打开飞书的打卡界面 如果只是打开飞书APP 很…

手动上电电路(电路收藏)

SW1按下 V1栅极对地 V1通 Vout给Mcu工作 GPIO2 高电平 V2通 SW1松开 V1栅极依然通过V2对地 维持V1通 Vout。再次按下SW1 GPIO1 对地 使Mcu收到中断 将GPIO2 输出低电平 V2关 松开SW1 V1栅极悬空 V1断开 Vout被截断