大佬教程收集整理的这篇文章主要介绍了18Oracle入门,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Oracle的监听服务:OralceOraDB12Home1TNSListener 需要通过程序链接数据库进行开发的时候,此服务必须打开,如果只是在本机使用,此服务可不启动
Oracle 的实例服务:OracleserviceORCL,默认启动
运行SQL Plus,输入用户名和密码。
如果需要解锁账户,打开cmd,输入@R_772_9731@us / as sysdba。在SQL提示符后面输入alter user system identified by root;alter user system account unlock;
访问Oracle的web端:https://localhost:5500/em/login
如果需要登录sys用户,用户名输入sys /as sysdba。
这样,@R_337_9@R_262_11248@@虚拟机上的Oracle连接。
Oracle文件中,后缀名为ora或dbf的表示数据文件,为ctl的是控制文件,为log的
是日志文件。
Oracle数据库指的是一个库。
一个Oracle实例有一系列的后台进程和内存结构组成。一个Oracle数据库可以有多个实例。
用户是建立在实例下的,不同的实例可以创建相同名字的用户 。
表空间是Oracle对物理数据库上相关数据的逻辑映射,一个数据库在逻辑上可以被划分为一个或者若干个表空间,每一个表空间包含了在逻辑上相关的一组结构。
每一个数据库实例至少有一个表空间(system表空间),每一个表空间有同一磁盘上的一个或多个文件组成,这些文件叫数据文件,一个数据文件只能属于一个表空间。
数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中,实际是在一个或者多个数据文件中。一旦数据文件被加入到某一个表空间后,就不能删除这个文件。
如果要删除某个数据文件,只能删除其所属的表空间才可以删除表的数据,是由用户放入某一个表空间的,而这个表空间会随机的把这些数据放到一个或者多个数据文件中。
Oracle数由用户和表空间对数据进行管理和存放的。表不是由表空间查询的,而是由用户去查询。
表空间和用户隶属于实例。
用户对表空间:多对一
表对数据文件:多对多
登录客户端,新建命令窗口。
-- 创建scott用户 create user scott identified by tiger; --为scoot赋予权限 Grant connect,resourcE,UNLIMITED TABLESPACE TO scott; --设置用户使用的表空间 ALTER USER scott default tablespace users; --设置用户的临时表空间 Alter user scott Temporary tablespace temp;
create user 用户名 identified by 密码;
grant xxx to 用户名;xxx可以是连接权限,资源权限,无限制的表空间权限。如果没有分配无限制表空间,则必须制定一个值。
alter user 用户名 default tablespacce 默认表空间名。
alter user 用户名 temporary tablespacce 暂时表空间名。
前提:该用户必须具备创建表的权限。
Oracle的数据类型
varchar2(sizE) 可变长字符串
char(sizE) 定长字符串
number(p,n) 可变长数值类型
date 日期型
long 可变长字符数据,最大可达2G
clob 字符数据,最大可达4G
blob 二进制数据,最大可达4G
追加列:add(列名 列类型 限定条件);
修改列:modify(列名 列类型 限定条件);
删除列:drop column列名;
重命名列:rename column 原来列名 to 新列名;
删除表:
drop table 表名;
清空表:
delete from 表名;
truncate table 表名;
delete和truncate的区别:delete删除的数据在未提交之前,可以回滚,不释放占有的空间和资源;truncate删除的数据,删除之后不可回滚,释放占有的存储空间和资源。
重命名表:
rename 表名 to 新表名;
SQL是一门语言 :结构化查询语言
SQL是最重要的关系型数据库操作语言,是所有的关系型数据库管理系统的标准语言。
关系型数据库: Oracle mysql sqlserver
nosql : redis mongdb Hbase
SQL 语言是一种非过程化语言,只需要提出做什么,而不需要指明怎么
sql语言的作用:
2 数据库的对象进行创建 修改 删除操作。
3 用户赋权限 取消权限 角色赋权限 取消权限 给用户关联角色
4 事务控制
DML:数据操纵语言
DDL:数据定义语言
DCL:数据控制语言
DML 用于查询与修改数据记录 包括:
用于定义数据看的结构 比如创建 修改或删除数据库对象。包括:
create table 创建数据库表
alter table :更改表结构 添加 删除 修改列
CRATE INDEX :在表上建立索引
drop index 删除索引
create view 创建试图
drop view 删除试图
用来控制数据库的访问,包括:
1 使用大小写规范提供词义的识别能力
在名称中仅使用字母 数字 下划线
列明 参数 变量等标量小写
模式对象名首字母大写:表 试图 存储过程 函数 触发器
保留关键字大写
2 使用空格提供良好的语言标记区分
等号的两边要使用空格
在逗号的后面使用空格
3 使用缩进提高语句的逻辑层次表达能力
4 使用垂直空白提供关键字和参数的区分能力
5 注释:
单行注释:--
多行注释:/* */
@H_461_1@mysql中的注释是:#
SELECT 标识选择的列
FROM 标识从那个表查询
注意:
sql语言大小写不敏感
SQL可以写在一行或者多行
关键字不能被缩写也不能分行
各个子句一般要分行写
使用缩进来提供代码的可读性
数字和日期使用的算术运算符: + - * /
+ - * /
先乘除后加减
同一优先级运算符从左往右依次运算
括号内的运算先执行
空值指的是null
空值是无效的 ,如果一个列没有指定值,或者是未知的 或者是不可预知的值
空值不是空格也不是0
包含空值的数学表达式的值为空值
别名紧跟列明之后,之间需要保留一个空格。也可以在别名和列明之间加入关键字 AS 别名可以使用双引号,以便在别名中包含空格或特殊的字符 并区分大小写
--查询所有的员工的姓名 职位 薪资 和奖金 以及年收入(薪资 * 12 ) + 奖金 SELECT ename AS name, job,sal salary,comm, sal *12 AS "year salary" FROM emp;
--查询所有员工的姓名 职位 薪资 作为员工的个人基本信息 拼接在一起 SELECT ename || '-' ||job || '-' ||sal AS "employee info" FROM emp;
拼接后的值成为一列
字符串可以是SELECT语句中的一个字符 数字 日期
日期 和字符只能出现在单引号中
每当返回一行时,字符串被输出一次
SQL:一种语言 控制数据库中的数据和结构的定义
SQL *PLUS 一种环境,提供了sql语句执行的一个环境
字符和日期 要包含在单引号中
字符大小写敏感的 日期格式敏感
默认的日期格式 :DD-MON月-RR
--查询20部门的所有雇员信息
SELEct * from emp where deptno=20; -- 查询姓名为SMITH的雇员的基本信息 此时的字符串的匹配 是严格匹配大写小的 SELEct * from emp where ename='SMITH'; -- 查询入职日期为17-12月-80的雇员信息 SELECT * FROM emp WHERE hiredate='17-12月-80';
与java中的关系运算符类型,注意相等判断是=。
between ... and 介于...之间
in(值1,值2,值3,...) 等于其中的任意一个
like 模糊查询 匹配查询
is null 值为空
and 且
or 或
not 非
sql语法中没有短路与和短路或
算术运算符 < 连接符 < 比较符 < is null 、like ,in < betweeN AND < NOT <AND <OR
ORDER BY子句
ASC:升序 从小到大
DESC: 降序 从大到小
order by 子句在SELEct 语句的结尾
函数就是java中的方法 :函数有输入有输出 输入就是参数 输出就是结果 而且输入可以是多个 输出的结果只有一个
SQL函数分为:单行函数和多行函数
单行函数:只能对一行进行变换,每行返回一个结果。可以转换数据类型 在使用的时候 还可以嵌套。参数可以是一列或一个值。
单行函数: 字符 数值 日期 转换 通用
控制大小写: LOWER UPPER INITCAP
分别返回全小写、全大写、首字母大写的值
字符的控制函数: CONCAT SUBSTR LENGTH TRIM LTRIM RTRIM LENGTHB
拼接、子串、长度、修剪空格
SUBSTR(c1,n1[,n2]) 取c1字符串的子串,从n1位置开始取,取n2个,没有n2参数为取全部。取到n1+n2-1下标的位置。
LENGTH:全角、汉字按1个字符算 LENGTHB:全角、汉字按2个字符算
SUBSTR和SUBSTRB同理
NLS_LOWER、NLS_UPPER 、NLS_INITCAP,第二个参数是Nls_param
Length函数返回字符的个数,使用定义是给定的字符集来计算字符的个数;LENGTHB给出该字符串的byte;LENGTHC使用纯Unicode;LENGTH2使用UCS2;LENGTH4使用UCS4
SOUNDX、TRANSLATE
SOUNDEX(c1)返回字符串的语音表示形式
TRANSLATE(c1,c2,c3):在c1中,将c2顺序换成对应的c3顺序。是部分的替换。
ASCII CHR
ABS SIGN MOD
ROUND TRUNC CEIL FLOOR
POWER EXP LOG LN SQRT
power(x,y):返回x的y次幂
exp(y):返回e的y次幂
log(x,y):返回以x为底的y的对数
ln(y):返回以e为底的y的对数
sqrt(X):返回x的平方根
三角函数
返回一个数字的正弦sin、双曲正弦sigh、余弦cos、反余弦cosh、正切tan、双曲正切tanh、反正弦asin、反余弦acos、反正切值atan
add_months last_day months_between next_day
new_time round trunc extract localtimestamp
current_time current_date sysdate
dbtimezone sessiontimezonE interval
dbtimezone:返回时区
sessiontimezone:返回会话时区
INTERVAL c1 set1:变动时期时间数值。c1 ”量“,set1起作用的时间单位
chatorowid rowidtochar convert hextoraw
chatorowid(c1): 转换varchar2类型为rowid类型。每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。
rowidtochar(rowid):转换rowid值为varchar2类型
hextoraw(c1):讲一个十六进制构成的字符串转换为二进制
nls_charset_id nls_charset_name
nls_charset_id(c1):返回字符集名称对应的id
nls_charset_name(id):返回字符集id对应的名称
TO_CHAR函数对日期的转换:TO_CHAR(date,'format_model')
必须包含单引号 其中的format_model是大小写敏感
可以包含任意的日期格式
数值型转换为字符型 TO_CHAR:TO_CHAR(123.45,'$999,999.00')->¥123.45
9 表示数字 0 表示0 $ 表示美元 L 表示本地货币 .表示小数点
avg sum stddev variance count max min
注意事项
group by语句中:如果查询结果中有列,那么列要么是以聚组函数的参数出现,要么是以group by后面的列名存在。
where后面不能出现group by和聚组函数 因为违反了先分组后过滤的原则
分组过滤:having having的过滤条件出现在group by后
去重统计count(disTinct deptno)
值域窗(RANGE WINDOW) range n preceding 仅对数值或日期类型有效,选定窗为排序后当前行之前,某列(即排序列)值大于/小于(当前行该列值 –/+ N)的所有行,因此与ORDER BY子句有关系。
行窗(ROW WINDOW) rows n preceding 选定窗为当前行及之前N行。 还可以加上betweeN AND 形式,例如row between m preceding and n following
使用函数分析窗中的内容
分组求和:group by
sum(exp)over(分区/排序):连续求和,只有最后一行的值才是sum()。第二行就是第一行+第二行。
rank()over(条件/排序/分区)
dense_rank()over(条件/排序/分区)
dense_rank在并列关系是,相关等级不会跳过。rank则跳过。 rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内) dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。
row_number()over(排序):先执行排序,再返回排序后的行号
SELEct name,seqno,description from(SELEct name,seqno,description,row_number() over (partition by name order by seqno) id from table_Name) where id<=3;
按照名字分区,再按照seqno升序排序得到排名id,只返回id前2的结果,最终返回过滤id后的结果
lag(expr,offset,default) lead(expr,offset,default)
lag(列):取上一个该列值作为值
lead(列):取下一个该列值作为值
OFFSET是缺省为1 的正数,表示相对行数。希望检索的当前行分区的偏移量
default是超出范围时自动返回的值,默认是null
user uid userenv
user:返回当前会话的数据库用户名
uid:返回当前会话的数据库用户id
userenv(param):返回当前会话上下文属性的值
NULLIF coalesce
rownum bfilENAME vsize
rownum:返回当前行号
bfilename:函数返回一个空的BFILE位置值指示符,函数用于初始化BFILE变量或者是BFILE列。
vsize:返回x的大小(字节)数
decode case...when...then...end
sys_guid sys_context DBMS_random
sys_guid():生产32位,十六进制的随机数字(A-F大写)
sys_context(c1,c2):返回系统c1对应的c2的值
DBMS_random包
DBMS_random.value:无参方法,这种用法没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0。第二种value带有两个参数,第一个指下限,第二个指上限,将会生成下限到上限之间的数字,但不包含上限
DBMS_random.String(c1,len):第一个参数有'u'-大写,'l'-小写,'a'-混合大小写,‘x’-大写字母和数字字符,'p'-返回的都是可读字符
DBMS_random.normal:返回符合正态分布的数。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。
DBMS_random.send:用于生成一个随机数种子,设置种子的目的是可以重复生成随机数,用于调试。否则每次不同,难以调度。
获取主机名和IP地址 utl_inaddr包:
多表查询要克服笛卡尔积的问题,需要使用where设置关联条件。
等值连接:where后面的逻辑运算符是=。
非等值连接:where后面使用其他逻辑运算符。
内连接:结果集中只包括匹配且关联列不为null的行。
外连接:结果集中也可以匹配关联列为null的行。
外链接的实现:(1)关键字left outer join /right outer join/full outer join
(2)在where子句的列后面加上'(+)',表示这个表可以有null,另一个表全部显示
全部显示的表是主表,另一个表是从表。
(+)在左边是右外连接。
(3)join 关键字后面用on不用where。(+)前面只能用where
叉集:cross join 得到笛卡尔积
自然连接:natural join 以表中具有相同名字的列作为条件,创建等值连接。
使用using子句创建连接:using(列名),using与join连用,不需要给表取别名
使用on子句创建连接:on与join连用,可以进行多表连接
子查询:where后面的子句是另一个查询的结果,称为子查询
子查询优先于父查询执行
多行子查询、嵌套子查询
子查询修饰符:
in等于列表中的任意一个
any和子查询返回的某一个值比较
all和子查询返回的所有值比较
以上是大佬教程为你收集整理的18Oracle入门全部内容,希望文章能够帮你解决18Oracle入门所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。