1.0 安装
2.0 初始化
1)在cmd中输入sqlplus /nolog
conn sys/[email protected] as sysdba
3)解锁scott账户
alter user scott account unlock;
4)通过scott账户登录
conn scott/[email protected]
修改新的密码:
新密码:tiger(输入是不可见的)
确认新密码:tiger(输入是不可见的)
5)已连接
2.使用 可视化工具 连接oracle数据库
3.0 sql
3.1 select关键字
select关键字
作用:检索“列”
1) 列名后面一个空格后添加别名(别名中不许有“空格”)
2) 列名后面一个空格后使用双引号添加别名
3) 列名后面一个空格后使用as关键字,在as后面添加别名
2.distinct用于对显示结果的去重
1) distinct必须放在select后面
2) 如果查询有多列,必须满足多列值都相同时,方可去重。
from关键字
作用:检索“表”
注意:检索的表后可以添加别名(别名不需要被双引号引起)
3.2 where关键字
select ename,job,sal from emp;
--例:查询工资大于2000的员工信息
select * from emp where sal >2000
-- =,!=,<>,<,>,<=,>=,any,some,all
--查询员工信息,条件:薪水要大于1000,薪水还要大于1500,薪水还要大于2000
select * from emp where sal > any(1000,1500,2000);
-- is null,is not null
select * from emp where comm is not null;
--错误:select * from emp where comm = null;
--查询员工薪水在2000-3000的员工信息
-- between x and y
select * from emp where sal between 2000 and 3000
--and,or,not
select * from emp where sal >=2000 and sal <=3000
-- in(list),not in(list)
--查询职务为 MANAGER 和 ANALYST 的员工信息
select * from emp where job = ‘MANAGER‘ or job = ‘ANALYST‘
select * from emp where job in(‘MANAGER‘,‘ANALYST‘)
--查询工资为3000到50000的员工信息
select * from emp where sal in (3000,5000);
select * from emp where sal not in (3000,5000);
-- exists(sub-query)、not exists(sub-query)
select * from emp where exists(select * from dept where deptno =10)
select * from emp where not exists(select * from dept where deptno !=10)
-- like _,%,escape ‘\‘ _\% escape ‘\’
--模糊查询
--查询:员工姓名中含有“M”的员工信息
select * from emp where ename like ‘%M%‘
select * from emp where ename like ‘_M%‘
select * from emp where ename like ‘__O%‘
select * from emp where ename like ‘%E_‘
select * from emp where ename like ‘%\%%‘ escape ‘\‘
“%”:匹配零个或若干个字符
“_”:匹配一个字符
在模糊查询中,如果查询的数据中有“%”,“_”时,可以使用escape自定义转义字符
3.3 order by关键字
order by关键字
作用:用于对查询结果进行排序
用法:
1.利用asc 、desc对排序列进行升序或降序
2.order by后可以添加多个列(逗号分隔),当一个列的值相同时,在按第二列进行排序,依次类推
例子:
显示所有的姓名、工种、工资和奖金,按工种降序排列,若工种相同则按工资升序排列。
select ename,sal,comm from emp order by job desc,sal asc
3.4集合操作
- union 并集(相同显示一次)
select * from emp where deptno = 20
union
select * from emp where sal >2000;
- union all 全集( 相同显示多次)
select * from emp where deptno = 20
union all
select * from emp where sal >2000;
- intersect 交集
select * from emp where deptno = 20
intersect
select * from emp where sal >2000;
- minus 差集
select * from emp where deptno = 20
minus
select * from emp where sal >2000;
注意:
1.保证两个SQL查询的列数是个数一致的
2.保证两个SQL查询的列的数据类型是一致的
3.保证两个SQL查询的列是相同的,否则查询的结果是无意义的
3.5函数
3.5.1单行函数
单行函数:对单个数值进行操作,并返回一个值。
分类:
1.字符函数
1)concat(a,b) 拼接a,b两个字符串数据
2)initcap(x) 将每个单词x首字母大写
3)lower() / upper() 将字符串小写/将字符串大写
4)length() 获取字符串的长度
5)lpad(a,b,c) /rpad() 将a字符串左边填充至b长度,用c字符填充,如果c字符不填写,默认用空格填充
6)ltrim(a,b) / rtrim() 去除a字符串左边的b字符,如果b不传参,默认去除空格
7)replace(a,c) 将a中的b字符串替换为c
8)substr(a,c) 将a的字符串,从b位置开始截取,截c个长度
9)trim( a from b) 将b左右两边的a字符去除掉
2.数字函数
abs() 求取绝对值
ceil() 向上取整
floor() 向下取整
round() 四舍五入
power(x,y) x的y次幂
3.日期函数
sysdate 返回系统当前日期,注意没有括号
add_months(d1,d2) 在d1日期上,增加d2个月份
months_between(d1,d2) 返回d1和d2之间的相隔月份
last_day(d) 返回d日期所在月份最后一天的日期
next_day(d,X) 返回下一个“星期X”的日期
4.转换函数
to_char() 将数字、或日期转化为字符串
to_date() 将字符串转化为日期
to_number() 将字符串转化为数字
5.其他函数
nvl(x,y) 如果x为null,则显示为y,x和y的类型保持一致
decode() 条件取值,类同java的switch
case when then else end 条件取值,类同java的if-else if-else
3.5.2组函数
组函数又被称作聚合函数,用于对多行数据进行操作,并返回一个单一的结果
avg()求平均值,只能对数字类型进行处理,不处理空字段
sum()求和,只能对数字类型进行处理
count()计数,对任何类型生效,不处理空字段
max() 求最大值,对任何类型生效
min() 求最小值,对任何类型生效
3.6 group by关键字
作用:对查询结果进行分组处理
用法:
1.分组之后,不能将除分组字段之外的字段放在@H_602_502@select后面
2.group by 后面可以跟多个字段,则这多个字段值都相同时,才分为一组
3.分组之后,可以使用组函数对每个组进行数据处理
having 关键字
作用:用于对分组数据进行过滤
用法:
类似于where的用法
3.7 sql语句顺序
sql顺序分为两类:
1.sql的书写顺序
select from where group by having order by [asc/desc]
2.sql的执行顺序
from where group by having select order by [asc/desc]
3.8 连表查询
3.8.1 sql1992
1.笛卡尔积 (表乘表)
2.等值连接 表的连接条件使用“=”
3.非等值连接 表的连接条件使用“>、@H_602_502@>=、 @H_602_502@<、@H_602_502@<=、@H_602_502@!=、@H_602_502@any等”
4.自连接 自己连接自己
5.外连接
1.左外连接,“(+)”在等号右边
2.右外连接,“(+)”在等号左边
3.“(+)”在哪一边的列,该表就补充null
3.8.2 sql1999
1.cross join 交叉连接 (笛卡尔积) ,不需要@H_602_502@on关键字
2.natural join 自然连接 (找两个表中相同的列,进行等值匹配),不需要@H_602_502@on关键字
3.inner join 内连接
1)必须有@H_602_502@on关键字,@H_602_502@on表示连接条件
2)inner关键字可以省略
4.outer join 外连接,@H_602_502@outer关键字可以省略
1) left outer join
2) right outer join
3) full outer join
3.9 DML
insert关键字
作用:往表中插入一条(多条)数据
语法1:元祖值式的插入
语法1:@H_602_502@insert into tablename(column1,column2,...,columnN) values(value1,value2,valueN);
语法2:查询结果式的插入
语法2:@H_602_502@insert into tablename sub-query
delete关键字
作用:从表中删除数据
语法:delete [from] tablename [where condition]
update关键字
作用:更新表中的数据
语法:update tablename set column1=value1,column2=value2,columnN=valueN [where condition]
3.10事务
事务(Transaction)是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位。
目的:保证数据库的完整性
特点:事务不能嵌套
如何开启事务:
一个DML语句(@H_602_502@insert、@H_602_502@delete、@H_602_502@update)的执行
如何关闭事务:
1.显示的调用@H_602_502@commit或@H_602_502@rollback
2.当执行@H_602_502@DDL(Create、@H_602_502@Alter、@H_602_502@Drop)语句事务自动提交
4.系统崩溃或断电时事务自动回滚
3.11序列
一、概念:
序列(sequence):@H_602_502@oracle专有的专有对象
二、作用:
产生一个自动递增的数列
三、创建一个序列:
create sequence seq_name
increment by 1
start with 1
四、使用序列:
序列名.nextval
序列名.currval
3.12视图
一、定义:
视图(view):一种不占用物理空间的虚表。
二、作用:
三、语法:
create [or replace] view v$_name
as sub-query
[with read only]
四、需要注意的点:
1.视图也可以从视图中产生
2.我们把用于产生视图的表称之为基表
4.不能对多张表的数据,通过视图进行修改。
五、使用视图需要注意
1.一般来讲,只有重复出现非常多次的@H_602_502@sql语句,才会创建视图
2.数据库迁移,视图也得随之迁移,否则在新数据中是不能用的
3.创建视图时,尽量不要带@H_602_502@or replace
3.13数据类型
数据类型分类:
1.number(x,y) 数字类型,@H_602_502@x表示最大长度,@H_602_502@y表示精度
2.varchar2(x) 可变字符串,@H_602_502@x表示最大长度
3.char(x) 定长字符串,@H_602_502@x表示最大长度
4.long 长字符串,最大@H_602_502@2G
5.Date,日期(年月日时分秒)
6.TIMESTAMP 时间戳,精确到微秒
要掌握oracle数据类型,在@H_602_502@java中的对应数据类型
https://www.cnblogs.com/softidea/p/7101091.html
3.14 DDL
1.create关键字
作用:用于创建数据库对象(表、视图、序列等)
语法: create table tablename(column1 dataType,column2 dataType,columnN dataType)
语法2:@H_602_502@create table tablename as subquery
2.alert关键字
语法:
1)alter table tablename add(@H_602_502@columnname dataType)
2)alter table tablename modify( columnname dataType)
3)alter table tablename drop [column] columnname
3.drop关键字
语法:
drop table tablename
3.15约束
一、定义
约束(constraint):在建表时,为某些列添加一些特定的规则,保证数据库的数据满足某种用户的要求。添加约束之后,在往表中(插入、更新)数据时,如果数据不满足约束,则该条语句不能执行
二、约束的分类
①非空约束 @H_602_502@not null
②唯一约束 @H_602_502@unique
④主键约束 @H_602_502@primary key
⑤外键约束 @H_602_502@foreign key
三、如何添加约束
1)在建表的同时,可以为某一列添加约束
①在列后面直接追加约束
②在填写完所有列之后,添加约束
3.16三范式
第一范式
列不可分
第二范式
不能部分依赖
第三范式
不能存在传递依赖
3.17 索引
索引:类似于“书”的目录,索引可以加快对表的查询速度。
作用:在数据库中用来加速对表的查询,通过使用快速路径访问方法快速定位数据@H_602_502@,减少了磁盘的@H_602_502@I/O
使用:
CREATE INDEX index ON table (column[,column]...);
条件:
1.当数据量非常大的时候
2.当该列的值不经常重复的情况下
3.当该列的值不容易发生变化的情况下