oracle 学习总结(一)

数据库的主要特点有:

1. 实现数据共享

        数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数 据库,并提供数据共享。

2. 减少数据的冗余度

        同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量 重复数据,减少了数据冗余,维护了数据的一致性。

3. 数据的独立性

        数据的独立性包括数据库中数据库的逻辑结构和应用程序相互独立,也包括数据物理结构的变化 不影响数据的逻辑结构。

4. 数据实现集中控制

        文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫 无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数 据间的联系。

5. 数据一致性和可维护性,以确保数据的安全性和可靠性

  • 安全性控制:以防止数据丢失、错误更新和越权使用;
  • 安全性控制:以防止数据丢失、错误更新和越权使用;
  • 并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常 交互作用;
  • 故障的发现和恢复:由数据库管理系统提供一套方法,可及时发现故障和修复故障;

6. 故障恢复

        由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系 统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误 操作造成的数据错误等。

        Oracle数据库作为企业级数据库的主打产品,Oracle数据库在众多关系型数据库之中,表现突出,性能优越。但是 oracle数据库的价格昂贵,如果再考虑到搭载oracle的服务器和存储设备的话,那么需要付出的成本也会更高。

        oracle的版本很多,除了这些商用的收费版本之后,还有一些免费版本,例如我们现在安装使用的版本。

服务

Oracle数据库安装成功后,系统中会增加几个和oracle相关的服务:

 这里面有俩个服务较为重要:

  • OracleServiceXE服务,如果不启动的话,Oracle无法正常使用,也不能使用sqlplus登录到oracle数据库中
  • OracleXETNSListener服务,如果不启动的话,就无法使用oracle自带管理系统登录到数据库中,之 后也无法在代码中使用JDBC连接到数据库中

Oracle自带管理系统登录地址:http://127.0.0.1:8080/apex

Oracle的官方网页端的端口是8080,与tomcat相同,注意是否被占用。

登录Oracle:

命令行输入:sqlplus(在任意路径下都可以)后面可以跟用户名和密码,但是不安全。

输入sqlplus 用户名 回车

会提示输入密码:这时候输入密码是不可见的,命令行也不会显示,输完之后直接回车,密码没出错的话会显示连接成功。

显示当前用户:

show user;

 如果当前会话是英文,可以输入命令改成中文环境:

alter session set nls_language='simplified chinese';

数据库对象:

  • 用户(user)
  • 表(table)
  • 视图(view)
  • 索引(index)
  • 触发器(trigger)
  • 储存过程(procedure)
  • 同义词(synonym)(用的少)
  • 序列(sequence)

sql语句的分类:

  • DQL(Data Query Language),数据查询语言,用来检索数据库中的数据,主要是select语句
  • DML(Data Manipulation Language),数据库操作语言,用于改变数据库中的数据,主要是INSERT,UPDATE,DELETE语句
  • DDL(Date Define language)数据库定义语言,用来建立,修改,删除数据库对象,主要是CREATE,ALTER,DROP,TRUNCATE语句
  • TCL(Transaction Control Language)事务控制语言,用于维护数据的一致性,主要是COMMIT,ROLLBACK,SAVEPOINT语句
  • DCL(Date Control Language)数据控制功能,用于执行权限授予和权限收回操作,主要是GRANT,REVOKE语句

 注意,DML语句需要事务的支持(产生事务),DDL语句会自动提交事务

 sql、sqlplus、pl/sql的区别:

  • sql,结构化的查询语句,操作关系型数据库的语言
  • sqlplus,oracle数据库软件自带工具,可以接收用户输入的sql语句,然后将sql执行结果显示出来
  • pl/sql,程序化的sql语句,在sql语句的基础上加入一定的逻辑操作,如 if  for

先建一张名为s_dept表,下面代码可直接复制执行

CREATE TABLE s_dept(
id NUMBER(7) CONSTRAINT s_dept_id_nn NOT NULL,
name VARCHAR2(25) CONSTRAINT s_dept_name_nn NOT NULL,
region_id NUMBER(7),
CONSTRAINT s_dept_id_pk PRIMARY KEY (id),
CONSTRAINT s_dept_name_region_id_uk UNIQUE (name, region_id)
);

select语句

        可以通过列名,把一行行的数据给查询出来,语法为:

select [distinct] *{col_name1,col_name2,..} from tb_name;

注意1,语法中出现的中括号[],表示该部分可有可无;

注意2,*号表示所有列;

注意3,col_name1,col_name2代表列名,如果有多个可以逗号分开;

例如,查看s_dept表中的所有记录

select *from s_dept;

例如,查看s_dept表中所有记录的指定三个字段:id,name,region_id

select id,name,region_id from s_dept;

语句中可以加入运算符,例如

select id,last_name,salary*12 from s_emp;

 注意,select语句永远不会对原始数据进行修改

 例如,查看每个员工的员工id,名字和月薪涨100以后的年薪

select id,last_name,(salary+100)*12 from s_emp;

 别名:

select old_column [as] new_column_name from tb_name;

注意,中括号里面的as是可选的

 例如,查看员工的员工id,名字和年薪,年薪列名为annual

select id,last_name,salary*12 as annual from s_emp;
select id,last_name,salary*12 annual from s_emp;

拼接:

select col_name||'spe_char'||col_name from tb_name

例如,查看员工的员工id,全名

select id,first_name||last_name from s_emp;

例如,查看员工的员工id,全名和职位名称,全名和职位名称合并成一列显示,且格式为:姓名,职位 名称

select id,first_name||' '||last_name||','||title as name from s_emp;

nvl:

使用nvl函数可以将null进行替换

select nvl(col_name,change_value) from tb_name;

distinct:去重

select distinct col_name,col_name from tb_name;

distinct关键词只能放在select关键词后面

如果 distinct 关键词后面如果出现多列,表示多列联合去重,即多列的值都相同的时候才会认为是重复的记录。

//test表中的数据为:

id id2

1 2

13

2 4

3 4

3 4

select distinct id,id2 from test;

//查询结果为:

id id2

1 2

1 3

2 4

sqlplus

使用 sqlplus 登录之后,可以使用buff(缓存)来存储/执行/修改上一条运行的sql语句 。

  • buff中只能存储一条sql语句,但是这条sql语句可能有很多行
  • 每次放入新的sql语句,会把之前的覆盖掉
  • 每次执行sql语句,都会把这个sql语句放到buff里面

sqlplus 相关的命令:

  • l 查看缓存中的sql语句
  • a 在[定位]的那一行后面追加新的内容
  • i 在[定位]的那一行下面插入新的一行
  • c 替换[定位]的那一行中的某些字符串 ,格式为:c/老的字符串/新的字符串
  • del 删除[定位]的那一行内容
  • n 后面加内容可以重写这一行 $ 后面跟一个终端命令,例如$cls清屏,linux中使用!
  • / 执行缓存sql命令

注意,使用 l 命令查看buff中的sql后,可以直接输入行数,然后回车,这就是定位到了这一行

 排序

查询数据的时候进行排序,就是根据某个字段的值,按照升序或者降序的情况将记录显示出来

select col_name,...
from tb_name
order by col_name [asc|desc]

注意1,order by语句,只对查询记录显示调整,并不改变查询结果,所以执行权最低,最后执行

注意2,排序的默认值是asc:表示升序,desc:表示降序

注意3,如果有多个列排序,后面的列排序的前提是前面的列排好序以后有重复(相同)的值。

条件查询

select col_name,...
from tb_name
where col_name 比较操作表达式

注意1,限制查询条件,使用where子句

注意2,条件可以多个,使用逻辑操作符或者小括号进行条件的逻辑整合

注意3,where子句的优先级别最高

注意4,比较操作表达式由操作符和值组成

  • 逻辑比较操作符
  • = > < >= <= !=
  • 不等于操作符,以下三个都表示不等于的意思,经常用的是 !=

 between and 操作符,表示在俩个值之间

例如,查看员工工资在700 到 1500之间的员工id和名字

select id,last_name,salary
from s_emp
where salary between 700 and 1500;

in() ,表示值在一个指定的列表中

例如,查看员工号1,3,5,7,9员工的工资

select id,last_name,salary
from s_emp
where id in (1,3,5,7,9);

like ,模糊查询,在值不精确的时候使用

  • % ,通配0到多个字符
  • _ ,通配一个字符,并且是一定要有一个字符
  • \ ,转义字符,需要使用 escape 关键字指定,转义字符只能转义后面的一个字符

例如,查看员工名字长度不小于5,且第四个字母为n字母的员工id和工资

select id,last_name,salary
from s_emp
where last_name like '___n_%';

is null ,判断值为null的时候使用,null值的判断不能使用等号

select id,last_name,commission_pct
from s_emp
where commission_pct is null;

类似的,还有 is not null

and 、 or ,逻辑操作符,当条件有多个的时候可以使用

and比or的优先级要高

select id,last_name,dept_id,title
from s_emp
where
dept_id = 41
and
title = 'Stock Clerk';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值