浅学Oracles数据库

2023-11-01

一、Oracle数据库中的数据类型
1.1、关于mysql数据库中的数据类型

		* int		整数型
		* bigint	长整型
		* float	 	单精度浮点型
		* double	双精度浮点型
		* char		字符型【长度不可变】
		* varchar 	字符型【长度可变】
		* date		日期类型
		* blob		二进制大对象【Binary Large OBject,	      				存储图片、声音、视频...】
		* clob		字符大对象【Character Large OBject,可以存储4G+的字符串】

1.2、关于oracle数据库中的数据类型

* number
			-number(3)	整数型:3表示长度,最大值是999
			- number(3,2) 浮点型:3是有效数字的个数,2是小数位的个数
			- 案例:
				create table t_product(
					price number(3,2)
				);
				insert into t_product(price) values(10); //ORA-01438: 值大于为此列指定的允许精度
				insert into t_product(price) values(1); //可以
				insert into t_product(price) values(1.2356); //可以

	* char	   字符型【长度不可变】
	* varchar2 字符型【长度可变】
	* date	   日期类型
	* blob	   二进制大对象【Binary Large OBject,存储图片、声音、视频...】
	* clob	   字符大对象【Character Large OBject,可以存储4G+的字符串】

1.3、关于blob类型:

create table t_movie(
		id number(10) primary key,
		name varchar2(32),
		image blob
	);
	当一张表中的某个字段的数据类型是blob的时候,该字段插入数据的时候不能使用insert语句,
	insert语法无法完成,必须使用编程语言中提供的IO流来完成插入操作。

1.4、char和varchar的区别

	* char是定长字符串
	* varchar是可变长度字符串
	* 假设在建表的时候,给name字段设置的数据类型是char(10),将来向这个name字段中插入"jack"的时候,
	底层实际上存储的是:“jack+6个空格"。使用不恰当的时候会浪费存储空间。
	* 假设在建表的时候,给name字段设置的数据类型是varchar(10),将来向这个name字段中插入"jack"的时候,
	底层实际上存储的是:“jack"。它会根据数据的实际长度进行空间的分配。
	
	* char和varchar怎么选择使用?
		- 当某个字段中存储的数据长度是不变的,例如:性别、生日这样的字段还是采用char类型来定义,
		效率高,也不会浪费空间。
		- 当这个字段的长度不固定的时候,例如,这个字段是用来存储一个人的简介的时候,建议采用varchar类型。

1.5.varchar和varchar2的区别

	* varchar是SQL语句当中的标准,所有的数据库都支持。
	* varchar2是varchar第二代,是Oracle数据库中特有的,其它数据库中没有。
	* varchar采用一个字节编码
	* varchar2采用两个字节编码,所以varchar2可以容纳更多国家的语言。varchar2的容量较大。
	* 在实际开发中尽量使用标准,使用varchar,即使在程序中使用了varchar,到Oracle数据库中也会自动变成varchar2

二、数据处理函数
2.1什么是单行函数?

一个输入最终对应一个输出,这种函数不会一次处理多行,一行一行进行处理。

2.2常用的单行函数

* lower

		- SQL> select lower(ename) as ename from emp;
			ENAME
			--------------------
			smith
			allen
			ward
			jones
			martin
			blake
			clark
			king
			turner
			james
			ford
			miller
			以上由大写变成小写是查询结果集变成小写了。数据库表没有变,因为这只是一个DQL语句。

		- 需求:找出员工smith的薪水,前提是不知道数据库表中存储的是大写的SMITH,还是小写的smith,
		也有可能是大小写混合的Smith。
			SQL> select ename,sal from emp where lower(ename) = 'smith';
			ENAME                       SAL
			-------------------- ----------
			SMITH                       800

	* upper

		SQL> select ename,sal from emp where upper(ename) = 'SMITH';
			ENAME                       SAL
			-------------------- ----------
			SMITH                       800

		SQL> select lower('ABC') as ename from dual;
			ENAME
			------
			abc
		SQL> select upper('abc') as ename from dual;
			ENAME
			------
			ABC

	* substr

		- SQL> select substr('abcdef',3,2) as ename from dual;
			ENAM
			----
			cd
		
		- 找出员工名字中第二个字母是A的
			* 模糊查询
				select ename from emp where ename like '_A%';
				ENAME
				---------
				WARD
				MARTIN
				JAMES
				
			* select ename from emp where substr(ename,2,1) = 'A';
				ENAME
				----------
				WARD
				MARTIN
				JAMES

	* length
		SQL> select length('abc') as namelength from dual;

		NAMELENGTH
		----------
					3
	* trim
		SQL> select trim('           a  b  c             ') as ename from dual;
		ENAME
		--------------
		a  b  c

		SQL> select length(trim('           a  b  c             ')) as enamelength from dual;
		ENAMELENGTH
		-----------
					 7

	* concat
		SQL> select concat('abc','def') as ename from dual;
		ENAME
		------------
		abcdef

	* ||
		SQL> select 'abc'||'def'||'xx' as ename from dual;
		ENAME
		----------------
		abcdefxx
		
	* nvl
		- 在mysql数据库当中是ifnull,在Oracle数据库当中是nvl
		- 什么时候使用空值处理函数呢?
			* 只要有空值参与的数学运算需要提前进行空值处理。要不然最终结果就是空。
		- 计算年薪:
			select ename,(sal + comm) * 12 as yearsal from emp;
			ENAME                   YEARSAL
			-------------------- ----------
			SMITH
			ALLEN                     22800
			WARD                      21000
			JONES
			MARTIN                    31800
			BLAKE
			CLARK
			KING
			TURNER                    18000
			JAMES
			FORD
			MILLER

			select ename,(sal + nvl(comm,0)) * 12 as yearsal from emp;
			ENAME                   YEARSAL
			-------------------- ----------
			SMITH                      9600
			ALLEN                     22800
			WARD                      21000
			JONES                     35700
			MARTIN                    31800
			BLAKE                     34200
			CLARK                     29400
			KING                      60000
			TURNER                    18000
			JAMES                     11400
			FORD                      36000
			MILLER                    15600

	* case..when..then..when..then..else..end

		select 
			ename,sal,(case job when 'MANAGER' then sal * 1.1 when 'SALESMAN' then sal * 1.5 else sal end)newsal
		from
			emp;

			ENAME                       SAL     NEWSAL
			-------------------- ---------- ----------
			SMITH                       800        800
			ALLEN                      1600       2400
			WARD                       1250       1875
			JONES                      2975     3272.5
			MARTIN                     1250       1875
			BLAKE                      2850       3135
			CLARK                      2450       2695
			KING                       5000       5000
			TURNER                     1500       2250
			JAMES                       950        950
			FORD                       3000       3000
			MILLER                     1300       1300

	* decode【Oracle中特有的,和以上的case可以达到同等效果】

		select 
			ename,sal,decode(job,'MANAGER',sal * 1.1,'SALESMAN',sal * 1.5,sal) newsal
		from
			emp;
		
		这种方式别人写能看懂就行,不要求自己掌握。可读性差。

	* round

		SQL> select round(123.456) as result from dual;

			 RESULT
		----------
				 123

		SQL> select round(123.456,1) as result from dual;

			 RESULT
		----------
			  123.5

		SQL> select round(123.456,2) as result from dual;

			 RESULT
		----------
			 123.46

		SQL> select round(123.456,0) as result from dual;

			 RESULT
		----------
				 123

		SQL> select round(123.456,-1) as result from dual;

			 RESULT
		----------
				 120

	* to_date

	1、to_date函数的作用:将varchar类型转换成date类型

	2、to_date函数的最终运算结果类型是:DATE类型

	3、to_date函数的语法格式:to_date('字符串日期','日期格式')

	4、关于日期格式:
		
		* 回顾java中的日期格式:
			yyyy-MM-dd HH:mm:ss SSS【全日期格式】
		
		* 回顾java中:java.lang.String-->java.util.Date怎么转换?

			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Date time = sdf.parse("1980-10-11");
		
		* Oracle数据库中的日期格式:
			YYYY		年
			MM/MON	月【假设月份是七月份,MM表示的话:07,MON表示的话:7月】
			DD			日
			HH			时
			MI			分
			SS			秒
		
		* Oracle数据库默认的日期格式是:DD-MON-YY
		
	5、to_date函数的使用案例:
		
		* 创建一张学生表,学生有生日,生日用日期类型

			-删除学生表
				SQL> drop table t_student;  //Oracle和MySQL都支持
				SQL> drop table if exists t_student; //Oracle不支持,MySQL支持
			
			-创建表的DDL:
				create table t_student(
					name varchar(32),
					birth date
				);
		
		* 向t_student表中插入数据
			
			//错误:'1980-10-11'日期字符串和Oracle默认的日期格式不同,而且'1980-10-11'是字符串类型,类型不匹配。
			insert into t_student(name,birth) values('jack','1980-10-11'); 

			//可以:birth是date类型,'11-10月-80'这个字符串日期正好和Oracle数据库默认的日期格式相同
			//存在类型自动转换
			insert into t_student(name,birth) values('jack','11-10月-80'); 

			//可以:以下使用了手动转换
			insert into t_student(name,birth) values('jack',to_date('1980-10-11','YYYY-MM-DD')); 
		
	6、to_date函数多数使用在insert操作当中,数据库表中某个字段是日期类型,不能直接将字符串给这个字段,除非
	这个字符串的格式恰好和数据库默认的日期格式相同。要不然必须手动调用to_date函数进行类型转换。
------------------------------------------------------------------------------------------------------------------

* to_char
	
	1、to_char函数的作用:将DATE转换成具有特定格式的VARCHAR

	2、to_char函数的运算结果是:VARCHAR类型

	3、to_char函数的语法格式:to_char(日期数据,'日期格式')

	4、回顾java中的日期格式化:
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date time = new Date();
		String strTime = sdf.format(time);
	
	5、案例:

		查询所有学生的生日,要求学生生日显示格式是:"2000-10-11"
		select name,to_char(birth,'YYYY-MM-DD') as birth from t_student;
			NAME                                                             BIRTH
			---------------------------------------------------------------- -----------
			jack                                                             1980-10-11
			jack                                                             1980-10-11

		SQL> select name,birth from t_student; //存在自动类型转换,按照Oracle默认的日期格式转换
		NAME                                                             BIRTH
		---------------------------------------------------------------- --------------
		jack                                                             11-10月-80
		jack                                                             11-10月-80
		
		以上SQL语句还可以写成另外一种形式:
		select name,to_char(birth,'DD-MON-YY') as birth from t_student;
		NAME                                                             BIRTH
		---------------------------------------------------------------- --------------
		jack                                                             11-10月-80
		jack                                                             11-10月-80
	
	6、to_char函数多数使用在查询语句当中,以特定格式的字符串展示该日期的时候使用。

------------------------------------------------------------------------------------------------------------------

* to_number【了解】
	
	* VARCHAR ---> NUMBER

------------------------------------------------------------------------------------------------------------------

重点:

	在Oracle数据库当中怎么获取Oracle数据库的系统时间?

		SQL> select sysdate from dual;

		SYSDATE
		--------------
		15-8月 -16


		SQL> select to_char(sysdate,'YYYY-MON-DD HH:MI:SS') as nowTime from dual;

		NOWTIME
		--------------------------------------------------
		2016-8月 -15 03:58:16
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅学Oracles数据库 的相关文章

随机推荐

  • 项目中Swagger2、lombok(小辣椒)、以及短信API的调用 简单介绍

    一 使用Swagger2实时生成接口文档 分布式系统使用 Swagger 是一个规范和完整的框架 用于生成 描述 调用和可视化 RESTful 风格的 Web 服务 总体目标是使客户端和文件系统作为服务器以同样的速度来更新 文件的方法 参数
  • 2021-05-27

    k8s 根据CPU利用率实现pod的弹性伸缩 一 概念 1 弹性伸缩的作用 让集群的配置可以根据计算需求 自动增加或者自动减少 在服务器访问量突然增多 算力吃紧的情况下增加节点配置数量 直到访问量下降 计算后减少节点数 保证业务平稳健康运行
  • 使用BP神经网络预测锂电池健康状态(附Matlab源码)

    使用BP神经网络预测锂电池健康状态 附Matlab源码 随着电动汽车的普及 电池技术得到了广泛的关注 其中 锂电池因其能量密度高 环保等优点被广泛应用于电动汽车和储能系统中 然而 锂电池的寿命问题一直是制约其应用和发展的重要因素之一 针对这
  • jQuery+Ajax+js请求json格式数据并渲染到html页面

    1 先给json格式的数据 id 1 name stan id 2 name jack id 3 name lucy id 4 name mary id 5 name jerry id 6 name tom 2 通过访问html页面 获取并
  • 虚幻4学习笔记(3)地形工具和植被

    地形工具和植被 地貌编辑器 生成斜坡 雕刻工具 编辑样条曲线 光照进行构建解决方法 导入灰度图 植被工具使用 植被碰撞 B站UP谌嘉诚课程 https www bilibili com video BV164411Y732 地貌编辑器 生成
  • 分布式一致性算法的重要原理:鸽巢原理

    在分布式BASE理论 数据一致性模型有哪些 中 我们谈到了BASE理论的最终一致性 以及简单介绍了数据一致性模型 但我们都是站在一个使用者的角度 在发出数据更新的请求给分布式系统之后 观察返回的数据是否更新 为了更好使用 理解分布式系统 不
  • C#入门学习-----制作AVI播放器

    本实例主要用到了Microsoft Animation Control Version 6 0 组件 该组件可以一帧一帧地播放AVI文件 用到该组件 必须将Microsoft Animation Control Version 6 0组件添
  • 如何在宝塔面板后的阿里云服务器运行Flask项目并公网可以访问?

    在你的服务器安装宝塔面板 宝塔面板是服务器运维管理系统 使用宝塔前 手工输入命令安装各类软件 操作起来费时费力并且容易出错 而且需要记住很多Linux的命令 非常复杂 使用宝塔后 2分钟装好面板 一键管理服务器 鼠标点几下就能替代以前的复杂
  • JVM类加载过程和编译器优化

    文章目录 1 加载 2 链接 2 1 验证 2 2 准备 2 3 解析 3 初始化 3 1 类初始化练习 3 2 懒汉式单例练习 4 类加载器 4 1 启动类加载器 4 2 扩展类加载器 4 3 双亲委派模式 4 4 线程上下文类加载器 4
  • PCL——VTK读取、保存.ply模型数据

    目录 一 读取 ply文件 1 代码示例 2 结果展示 一 保存 ply文件 1 代码示例 2 结果展示 一 读取 ply文件 ReadPLY 是VTK内置的mesh模型读取函数 该函数仅支持 ply格式的mesh网格数据不支持读取 ply
  • 【STM32】HAL库——ADC

    前期准备 STM32CubeMX STM32RCT6核心板 IDE Keil MDK ARM STM32CubeMX部分 1 配置时钟 选择STM32F103RCTx系列芯片 配置时钟的同时会自动配置IO口引脚 将HCLK设置为最大频率72
  • Altera FPGA PCIE 例程仿真

    由于刚开始学PCIE接口 所以按照官方给的例程进行仿真操作 下面主要介绍下仿真的具体步骤 该例子是采用Cyclone V器件进行仿真 PCIE为gen1X4 的 Quartus II 版本号为15 0 Modelsim为ModelsimSE
  • 小米商城网页制作大全-完结篇

    时隔多日 小米商城网页基本完成 跳转的第二页面没有做 在这过程中遇到了很多小而细的问题 例如浏览器兼容性 字符图标不显示 动画效果不起作用等 抽时间整理一下 再继续完善 效果图如下 实际右侧固定栏只有个人中心 购物车 联系客服 回到顶部四项
  • 【websocket定义和使用】

    文章目录 前言 一 websocket定义 2 websocket使用 总结 前言 websocket就是服务端和客户端建立长连接的一种方式 多在直播 弹幕 聊天业务中使用 具体的自己百度吧 一 websocket定义 代码如下 示例 fu
  • docker 服务编排

    一 docker 服务编排 微服务的应用系统中一般包含若干个微服务 每个微服务一般都会部署多个实例 如果每个微服务都要手动启停 维护的工作量会很大 要从dockerfile build image 或者去 dockerhub 拉取image
  • Flutter 指针事件原理&点击穿透

    隔离的这14天 慢慢的研究了Flutter的指针事件 在这个过程中 又重新梳理了一下Element和Render Tree的形成过程 这篇文章 主要对指针事件在Fluter中如何下发到各个组件的过程进行梳理 指针是指针 手势是手势 手势是指
  • 软件工程课件

    软件工程 考点概述 软件工程概述 能力成度模型 能力成熟度模型集成 软件过程模型 逆向工程 软件需求 需求获取 数据流图 需求定义 考点概述 重点章节 软件工程概述 之前老版教程的 之前考过 能力成度模型 记忆 能力等级 和 特点 能力成熟
  • (读书笔记)python数据处理-(python读取csv、excel文件)

    文章目录 python读取csv文件 python解析excel文件 1 查看工作表中的sheet名 2 查看工作表指定sheet的内容 3 查看sheet中每个元素 4 将提取信息以字典形式展示 python 判断excel文件是否存在
  • Java使用RabbitMQ

    一 简介 rabbitMQ是什么 怎么用 怎么安装 网上文档一大把 请自行百度 本文给出的代码是rabbitMQ的fanout交换机模式 最原生的java代码 如果需要使用其他模式的rabbitMQ 请自行更改相应部分代码 二 代码 rab
  • 浅学Oracles数据库

    一 Oracle数据库中的数据类型 1 1 关于mysql数据库中的数据类型 int 整数型 bigint 长整型 float 单精度浮点型 double 双精度浮点型 char 字符型 长度不可变 varchar 字符型 长度可变 dat