【Java学习日志】3.Oracle笔记

数据库

​ oracle是数据库的一种 可共享;尽可能小的冗余;与应用程序彼此独立
​ 关系型数据库:Oracle Mysql DB2(银行常用) PostgreSQL 以及微软的数据库Microsoft SQL service //用SQL语言读写

​ 非关系型数据库:Redis MongoDB Big Table //用命令读写

​ 关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织,支持事务一致特性
​ 优点:都是用表结构,SQL语言通用,支持一个表和多个表之间非常复杂的查询
​ 缺点:性能差,对于海量数据对于磁盘I/O有很高要求;存储方式不灵活

​ 非关系型数据库
​ 严格来说是数据结构化存储方式的集合,可以是文档或者是键值对等。不支持事物的一致性
​ 优点:存储方式灵活,可以是key.value格式的、文档格式的、图片格式的; 高扩展性:基于键值对,数据没有耦合性,容易扩展 无需经过SQL解析,读写性能很高;
​ 缺点:不支持sql语言,学习成本高; 无事务处理能力; 不支持复杂查询;

Oracle数据库

​ 存储数据的集合就是磁盘中的文件,Oracale数据库由数据文件,控制文件,日志文件构成
​ Oracle在创建表空间的同时就会创建数据文件(.dbf)
​ 控制文件(.ctl) 是一个二进制文件,主要记录数据库名称,存储位置等信息,一个控制文件只属于一个数据库,若丢失,则数据库无法操作;
​ 日志文件(.log) 分为重做日志文件和归档日志文件 重做日志文件记录了数据库的操作过程,用于备份和还原数据库
​ 实例 数据库启动后分配的内存和建立的后台进程 //一个实例和一个数据库一一对应
​ 其他: 版本 i internet 联网 g grid网格计算 c cloud 云计算

Oracle 自带的Sql plus

​ sys用户登录命令:sys as sysdba/sysoper
​ sys用户登录命令:system
pl/sql developer plsql安装

			tips:select * from all_users; //查找当前所有用户  command windows下	回车执行
			tips:select * from all_users //不用加分号   Sql windows 下	execute选项来执行

Oracle的表空间

​ default tablespace 永久表空间 和 temporary tablespace临时表空间
​ 永久表空间 所有数据库对象都存在指定表空间中,但主要存放的是表
​ 临时表空间 做查询和存放一些缓冲区数据 重启数据库可以释放临时表空间
​ 创建永久表空间命令:
​ creat tablespace 永久表空间名称 datafile ‘永久表空间物理文件位置’ size 15M autoextend on next 10M permanent online;(创建一个15M的表空间,可以拓展10M的空间)
​ 在user中右键就可以创建用户,通过session登录
​ 分配用户权限
​ sys账户分配权限 右键edit选项 三种privilege的分配,对象,角色,系统权限分配,比如分配connector角色使用户可以链接数据库 系统权限:creat any table 创建任意表

Oracle链接配置

​ 保存在三个位置 sqlnet.ora 通过字符串标识符来定义oracle链接地址
​ tnsnames.ora oracle client客户端 用户配置连接数据库的别名参数,就像系统文件中的hosts文件一样;
​ listenr.ora oracle server客户端 可配置Oracle监听端口
​ 以上三个文件位置 /oracle/product/11.2.0/dbhome_1/NETWORK/ADMIN 文件夹下

Oracle自带图形化工具

​ Net Configuration Assistant 位置Oracle/配置与移植工具
​ 监听程序配置和本地网络服务配置 可视化配置listener.ora

Oracle本地网络服务配置 防火墙需要关闭;设备之间相互可以ping通

Oracle的数据类型

字符型(char定长度的,使用空格填充至最大长度(12字节unicode编码英文数字都为一字节,汉字为3字节), varchar2(可变长度的,不会用空格补全),nvarchar2(可变长度,并且是用unicode编码过的,所以长度为10就可以打10个汉字),数字(number可以存储浮点型//格式为number(20,5)20表示整数位数,5表示小数位数,integer只能是整数),浮点(binary_double比binary_float更精准),日期(DATE类型,//timestamp with loacal time zone)
LOB类型(CLOB二进制数据,存储单字节和多字节字符数据,最大4G,BLOB存储非结构化的二进制数据大对象,可以认为是没有字符集语义的比特流,比如图像,声音,视频等文件,最大长度4G;NCLOB类型,存储unicode类型数据,最大4G)
LONG,ROW&LONG RAW (LONG存储变长字符串,2G;LONG RAW存储2Gb原始二进制数据,可存放多媒体图像声音;RAW定长度但是字符或多媒体都可以存储;

Oracle创建表

​ 表名要求和java一样,但其本身不区分大小写,如果想区分大小写或使用空格等非法符号,就需要在表明前后加“"

表的约束

​ 对插入表中的数据进行约束 表名_约束的简写
​ 给表的列进行入门筛选
​ 在key中添加约束,直接可视化进行就可以
​ 主键约束primary:必须具备唯一性和非空性
​ 唯一约束unique:必须唯一
​ 检查约束check:用户自定义对于数值范围,格式 //(age > 1 and age < 10)
​ 非空约束
​ 外键约束 foreign
​ column当作表中的列来翻译
​ 可以在default中设定默认值
一对多表 外键永远在多方的那个表中
一对一表 外键可以在任意一方,需要让外键一方具备唯一约束
多对多 需要建立中间表,中间表对两边形成一对多的关系,外键允许有重复,所以还需要唯一约束和非空约束,也即是主键约束,所以需要中间表的联合主键来发挥作用,直接选>>变成联合主键
​ 所以删除数据的时候先从含有外键的多方开始删起
SQL

​ 结构化查询语言sequal
​ 数据查询语言 select… from… where…
​ 数据操纵语言 import delete update
​ 事务处理语言 commit rollback savepoint
​ 数据控制语言 grant授予用户权限 revork撤销权限
​ 数据定义语言 create drop arter修改数据库对象 rename
HR用户介绍

​ oracle自带的示例用户,用来练习
​ TIPS:desc 查看所有内容

DQL语言

select 列选择,行选择,连接(多表选择)
SELECT * ||{[DISTINCT] COLUMN||EXPRESSION [ALIAS],…}FROM table; //select选择哪些列,from确定哪张表, DISTINCT关键字表示去除重复字,column|expression选择指定的字段或表达式,alias给所选择的列不同的标题
只是对查询之后的结果集进行运算,并不会修改原表;

select定义空值 就是null空值,算术表达式中只要有空值就会返回空值
别名 改变结果表的名字 employee_id AS name//AS是关键字 或者直接在类名和别名间保留一个空格就可以 //严格区分大小写需要用”"
连字运算符(||) 连接列或者字符串到结果列
文字字符串 日期和字符文字必须放在单引号中,数字不需要 //也就是选出名字和代码,然后输出名字 is a 代码这句话
也就是 last_name || ’ is a’ || job_id//如果想加入数字就不用引号
去除重复项 直接放在select后面distinct,如果是引入两个表就变成了比较两个表的相同项并去除;

用选择限制行 SELECT * ||{[DISTINCT] COLUMN||EXPRESSION [ALIAS],…}FROM table [WHERE CONDITIONS];//条件可以由列名,表达式,常数,和比较操作构成//也即是返回值为布尔值的类型
字符串和日期 字符串和日期的值必须放在单引号中,日期是DD-MON-RR //英文版用jan. 中文版用1月
其他比较条件 between.(小值)…AND.(大值)… IN(SET)匹配一个任意值列表in (1,2,3)(本质上等于 a =1 or a=2 or a =3) LIKE匹配一个字符模板(搜索串值,%表示一个或多个字符 _表示一个占位符)(举例 where last_name like ‘%a%’; //表示名字中含有a,百分号代表任意多个字符,而如果换成_则只代表一个字符 //使用ESCAPE 将like中的转义符变成示例中的符号,查询id中以SA_开头的(where job_id like ‘SA_%’ escape ‘’)// 注解:\也可以换成任意一个符号,只需要在紧跟着用escape表明那个符号为转义符
IS NULL是一空值

逻辑条件运算符 AND OR NOT

使用order by排序 ASC升序排列 和 DESC降序排列

​ ORDER BY 子句 在 SELECT 子句最后
​ ORDER BY子句后面指定需要排序列,然后再加上ASC DESC //空值当成最大的

Oracle函数 能够处理查询结果的方法

​ 单行函数:对单个行进行运算返回结果
​ 多行函数:能够对成组的行运算,并对行组给出结果,也被称为组函数。
​ 单行函数:字符,数字,日期,转换,通用

Spring项目配置Oracle数据库

		# 配置 Oracle
		pring:
  			datasource:
    			driver-class-name: oracle.jdbc.driver.OracleDriver # 固定
   				 url: jdbc:oracle:thin:@localhost:1521:orcl # 按你本地的来
   				 data-username: system # 按你本地的来
    			password: Wy1234567 # 按你本地的来
# oracle数据库的驱动是固定的,连接时,直接写oracle.jdbc.driver.OracleDriver即可
#oracle数据库的url是有些变化的:
#jdbc:oracle:thin:@localhost:1521:orcl这是完整的url,jdbc:oracle:thin:是固定的,@localhost代表本地IP地址127.0.0.1,
#1521代表端口号,根据个人数据库配置而有所区别,一般默认是1521或者1522,
#orcl代表数据库名称,orcl是默认的数据库名称,一般在安装oracle数据库时指定。

Oracle 函数

执行数据计算,修改单个数据项,格式化显示的日期和数字,转换列数据类型,函数有输入参数并总有一个返回值

​ 单行函数:对单个行进行运算返回结果
​ 多行函数:能够对成组的行运算,并对行组给出结果,也被称为组函数。
​ 单行函数:字符,数字,日期,转换,通用

函数语法

​ function_name(arg1,arg2)函数名+参数列表

单行函数

​ 作用于每一个返回行,且每行返回一个结果,可以转换成不同的数据类型,可以嵌套,可以在select,where和order by子句中

比如select * from employees where lower(last_name)= ‘king’; 所有姓是king的人,不论大小写,这些是字符控制函数

转换函数 Oracle会自动完成下列转换varchar2会和NUMBER互相转化,会和DATE互相转化

显示转换 使用 TO_DATE TO_NUMBER,TO_CHAR来显示表示数据类型的转换

通用函数(适合于任何数据类型,包括空值)

nvl(commission_pct,0) 这个函数表明,如果前面的值为空值,就用后面的值代替,用来解决运算时如果有空值参与则返回值就是空值的定律。(前后值必须为同一类型,如果不行就使用to_char等函数进行转换

if条件语句(select employee_id,department_id,case department_id when 10 then salary * 1.1 when 20 then salary *1.2 when 30 then salary *1.3 else salary *1.4 end new_sal from employees)

多表查询

等值连接如果想在两个表中查询数据,而两个表中又有相同名称的列名,可以使用where 1_id = 2_id 使得两个东西相同的部分作为同一筛选条件进行选择。也就是需要一个连接条件将同一事物存在不同表中的属性对应输出(或者使用 from表a join 表b on 条件句,然后使用left outer join和right outer join进行连接,或者使用full outer join)

非等值连接 就是在where条件句中使用between。。and语句来执行,

内连接和外连接 :内连接就是两表中共有的部分,外连接就是返回不满足连接条件的数据,分为左外连接和右外连接 ,就是在where条件判断的等式左右加上(+)表明右边和左边不符合条件的东西的输出

使用natural join连接会把所有匹配的条件连接上,可以加上using(department_id),使用cross join连接则会放弃所有匹配条件的连接,产生笛卡尔积

多行函数

​ 组函数(最大,最小,平均等),GROUP BY 子句对数据进行分组,HAVING子句过滤分组结果集

avg,sum求平均和求和函数是针对Number类型的,而min,max最大最小值则是可以针对任意类型的

count返回表中的记录数量,针对任何数据类型,返回不为空的记录的数量

查询select的各个列只要不是组函数(也就是需要输出的目标值)就需要将其放在Group By中表明

组函数不能放在where中,但是可以把where换成having,这时having可以放在groupby后面,也可以放在前面。

子查询

就是使用括号分为内外部查询

any()表示括号中的任意一个都可以

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340