百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

oracle数据库知识点汇总(上)

lipiwang 2024-12-04 13:40 7 浏览 0 评论

Oracle 数据库

1. Oracle数据库:

Oracle公司成立于1977年,最早开发数据库的厂商,经过近40年的发展,oracle公司目前已经是世界数据库以及相关领域领导者。

Oracle数据库系统是由Oracle公司(甲骨文)提供的一款关系数据库管理系统。

目前主流的版本是Oracle9i,Oracle10g,Oracle11g,Oracle12c

表是数据库中存储数据的基本单元。

2. 表空间:

1)表空间是用来存储数据库对象(表,视图,索引,序列...)的容器,一个表空间只能属于一个数据库。所有的数据库对象都存放到指定的表空间中 。

2)表空间是由一个或者若干个数据文件组成,这些数据文件是数据库实际存放数据的位置

3)每个数据库创建的时候,系统都会默认的创建一个SYSTEM表空间,一个数据库可以包含若干个表空间,也可以 只有一个SYSTEM表空间。

3.Oracle中常用数据类型

1)字符型:char, varchar,varchar2

a)char(n):用来保存固定长度的字符串,n代表字符串的长度,当实际数据库不足定义的长度,右边会使用空格补全

比如: char(10)'liu',实际保存时候占据10个存储空间,浪费了7个存储空间

b)varchar(n):可变的字符类型,n代表字符串的长度。当实际数据小于n的时候,则按照实际长度进行存储数据

比如:varchar2(10)。‘liu’实际保存时候占据3个存储空间,比较节约空间

c)varchar2(n):Oracle自行定义的类型,兼容性特别好,建议使用varchar2取代varchar类型。

2.)数值型:number

number:可以用来存储整数和小数类型。

number(n):只能保存整数m ,整数的最大的位数是n。

比如:number(3),表示能保存最大的整数的位数是3。

number(n,m):可以保存有效数字的位数最多是n,小数的位数最多是m,整数的最多的位数是n-m

比如:number(7,2),7表示有效数字的位数是7,2代表小数的位数,5代表整数的位数。

3)日期时间类型:date

data:包含(世纪),年,月,日,时,分,秒

DD-MON-YY(默认日期格式)

DD:几号

MON:月份

YY:年份,后两位年份

比如:2011-12-23 23-12月-11

SQL语句是学习的重点,掌握了SQL语句就可以操作任意的数据库。

SQL语句的分类:

1)数据定义语言(DDL):用来创建,修改,删除表结构

create(创建) drop(删除) alter(修改)

2)数据操作语言(DDL):用来操作表中的数据,完成插入,修改,删除功能

insert(插入) delete(删除) update(修改)

3)事务控制语言(TCL):用来管理数据库中的事务

commit rollback

4)数据查询语言(SQL):用来查询所需要的数据

select


5.创建表:

create table person1(

id number(4) primary key,

name varchar2(12),

age number(3)

);

create table person2(

id number(4) primary key,

name varchar2(12)

);

create table person3(

id number(4) primary key,

name varchar2(12),

job varchar2(12)

);

create table person4(

id number(4) primary key,

name varchar2(12),

address varchar2(12),

age number(3)

);

案例:创建一张表customer, cid number(4)

编号 主键,cname varchar2(12)姓名,

sex char(3)性别,address varchar2(12)地址,phone varchar2(11),email varchar2(50)


create table customer(

cid number(4) primary key,

cname varchar2(12),

sex char(3),

address varchar2(12),

phone varchar2(11),

email varchar2(50)

);

案例:创建一张book表,bid number(4)图书

编号 主键,bname varchar2(50)书名,pub varchar2(50) 出版社, author varchar2(50)作者,type varchar2(50)类型,numinput number(10)进货量,numstore number(10)库存量

create table book1(

bid number(4) primary key,

bname varchar2(50),

pub varchar2(50),

author varchar2(50),

type varchar2(50),

numinput number(10),

numstore number(10)

);


2) desc 表名:查询表结构

案例:desc person1;desc person2;


6插入操作(insert):

1)向所有列都插入列值

格式:

insert into 表名

values(列值1,列值2,列值3.....)

a)每次执行insert语句,往表中插入一条数据

b)不要反复地执行同一条insert语句,避免出现重复数据。

c)insert语句中任意一个位置出现错误,则整个数据都无法插入表中。

insert into person1

values(1,'李世民',32);

d)主键所修饰的列的列值非空唯一。往person1表中任意插入3条数据

insert into person1

values(10,'程咬金',30);

insert into person1

values(11,'李靖',28);

insert into person1

values(12,'苏烈',24);

2)查询表中所有的数据:

select * from 表名;


insert into person2 values(1,'刘备');


2)向指定列插入列值

格式:

insert into 表名(列名1,列名2,列名3...)

values(列值1,列值2,列值3....)

a)表名中的列必须跟values中列值一一对应。

b)主键所在的列,必须要插入列值

insert into person4(id) values(1);

insert into person4(id,name) values(2,'曹操');


7.修改语句(update)

1)格式:

update 表名 set 列名1=该列新值,

列名2=该列新值,列名3=该列新值

where 条件:

2)根据where条件修改表中的数据,如果没有where条件修改表中所有的数据

person2;

ID NAME

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

1 刘备

2 关羽

3 张飞

4 诸葛亮

案例:修改person2表ID是2的信息,把姓名改为马超

update person2 set name='马超'

where id=2;



where条件

根据where条件修改表中对应的数据,如果没有where条件,修改表中所有的数据


案例:练习修改


2删除语句

1)使用delete删除

delete from 表名 where 条件

根据where条件,删除表中的数据,如果没有where条件,删除表中所有的数据

案例: 删除person表中所有的数据

案例2:删除person4表中id=1的数据

案例3:删除person4表中姓名是刘备的数据


2)使用truncate删除:直接删除表中所有的数据,而且删除速度很快,但是删除的数据不能还原(不能恢复)

格式:truncate table=表名

truncate table person4;

案例: 删除person2,person3表中的数据


3)删除表

格式:drop table 表名;

drop table person1;

案例:删除person2,person3,person4

4简单的查询语句(没有where条件)

1)查询表中所有的数据

格式:

select * from 表名(emp/dept)

2)查询表中某些列的列值

格式:

select 列名1,列名2,列名3....from表名

select empno,ename,job from emp

案例:查询emp表中员工的编号,姓名,职位,工资,入职时间

select empno,ename,job,sal,hiredate from emp

案例:查询emp表中员工的编号,姓名,上级领导(经理)的编号,入职时间

select empno,ename,mgr,hiredate from emp

案例:查询emp表中员工的姓名,工资,奖金,所属部门的编号

select ename,sal,comm,deptno from emp

案例:查询dept表中部门的名称和地址

select dname,loc from dept

案例:查询salgrade表中登记最低工资和最高工资

select losal,hisal from salgrade


5.别名:给表或者列起别名

1)给列起别名

a)使用as

格式:

select 列名1 as 别名1,列名2 as 别名2...from表名

--select empno as 员工的编号, enamel as 姓名,job as 职位 from emp


案例:查询emp表中员工的姓名,职位,上级领导的编号,入职时间以及工资,对查询的列起别名

select ename as 姓名,job as 职位,mgr as 上级领导的编号,hiredateas 入职时间,sal as 工资 from emp

案例:查询dept表中所有的信息,对查询返回的每一个列都起别名

--select deptno as 部门编号,dname as 部门名称,loc as 部门地址 from dept

b)使用空格起别名

格式:

select 列名1 别名1, 列名2 别名2.... from 表名

select deptno 部门编号,dname 部门名称 from dept

案例:查询emp表中员工的姓名,职位,工资,奖金以及所在部门的编号,对查询返回的每一个列都去起别名

--select ename 姓名,job 职位,sal 工资,comm 奖金,deptno 所在部门的编号

from emp

2)给表起别名:多表连接查询中,容易出现多张表中列名一致现象,通过给表起列名,别名指向对应表中的列

格式:

select 别名.列名1,别名.列名2....

from 表名 别名

select e.aname ,e.job,e.sal,e.hiredate

from emp e


6排序:对查询返回的结果,根据某一个列或者多个列的列值大小进行升序或者降序排列

1.根据某一个列的列值大小进行升序或者降序排列

格式:

select */列名 from 表名

order by 列名 asc/desc

asc:升序,默认值

desc:降序

案例:查询emp表中员工的编号,姓名,职位,根据与昂的编号进行降序排列

--select empno,ename,job from emp

order by empno desc

案例:查询emp表中员工的姓名,职位,工资,入职时间以及奖金,最后根据员工的工资进行升序排列

--select ename,job,sal,hiredate,comm from emp

order by sal asc

案例:查询emp表中员工的编号,姓名,入职时间以及上级领导的编号,最后根据入职时间进行升序排列

-- select empno,ename,hiredate,mgr from emp

order by hiredate asc

案例:查询emp表中员工的编号,姓名,职位以及所属部门的编号,最后根据部门的编号进行降序排列

--select empno,ename,job,deptno from emp

order by deptno desc


2)根据多个列的列值大小进行升序或者降序排列

格式:

select */列名 from 表名

order by 列名1 asc/desc,列名2 asc/desc

首先根据列名1中的列值大小进行升序或者降序排列,如果列名1中的列值大小一致,根据列名2中的列值大小进行升序或者降序排列

案例:查询emp表中员工的姓名,职位,工资,奖金。入职时间,首先根据员工的工资进行升序排列,如果工资一致根据员工的入职时间进行降序排列

-- select ename,job,sal,comm,hiredate from emp

order by sal ,hiredate desc

案例:查询emp表中员工的编号,姓名,职位,工资,入职时间以及所属部门的编号,根据员工 所属部门

的编号进行升序排列,如果部门编号一致,根据原的编号进行降序排列

-- select empno,ename,job,sal,hiredate,deptno from emp order by deptno,empno desc


3)排序永远是最后被执行的。



7.distinct:去掉重复的列值

案例:查询emp表中部门的编号

--select distinct deptno from emp

案例:查询emp表中员工的职位名称(去掉重复的职位)

--select DISTINCT job from emp

8.nvl()函数的使用:

1)数字类型的数据可以进行正常的算术运算

案例:查询emp表中员工的姓名,职位,工资以及入职的时间,年薪(工资*12)

-- select ename,job,sal,hiredate,sal*12 年薪 from emp



知识点:

1. nvl()函数的使用

案例:查询emp表中员工的姓名,职位,工资,以及入职时间和年薪(工资*12+奖金)

1)任何空值(null)使用“+”来连接其他类型的数据,返回的结果也是空值。

2)nvl()函数:专门用来处理空值的问题

nvl(列名,数值):如果改列的列值不为null,返回改列的列值;如果改列的列值为null,返回是数值。

nvl(comm,o):如果改列的列值不为null,返回comm的列值;如果改列的列值为null,返回时0

--select ename,job,sal,comm,sal*12+nvl(comm,0)年薪 from emp


2带条件的查询语句:

格式:

select */列名 from 表名

where 条件

根据where条件查询对应的数据

1)关系运算符;

>,>=(大于或者等于),<,<=(小于或者等于),=,

!=(不等于),<>(不等于)

案例:查询emp表中工资高于1000的所有元的编号,姓名,职位,工资

--select empno,ename,job,sal from emp

where sal > 1000

案例:查询emp表中姓名是King的 员工的编号,姓名,职位

select empno,ename,job from emp

where ename='KING'

案例:查询工资低于等于3000的所有员工的编号,姓名,职位,工资,最后根据工资进行升序排列

-- select empno,ename,job,sal from emp

where sal<=3000

order by sal

案例:查询emp表中职位不是‘manager’的所有元的编号,姓名,职位,工资,最后根据编号进行降序排列(两种方法)

-- select empno,ename,job,sal from emp

where job <> 'MANAGER'(job!='MANAGER')

order by empno desc

2)判断改列的列值是否为空值(null)

列名 is null:改列的列值为null

案例:查询emp表中奖金为空的员工的编号,姓名,职位以及奖金。

--select empno,ename,job,comm from emp

where comm is null

案例:查询emp表中没有上级领导的员工的编号,姓名,上级领导标号以及工资

--select empno,ename,mgr,sal from emp

where mgr is null

列名 is not null:改列的列值不为null

案例:查询emp表中含有上级领导的员工 所有的信息

--select* from emp where mgr is not null

案例:查询emp表中含有奖金的员工的编号,姓名,职位,工资,奖金,最后根据编号进行降序排列

3)like:模糊查询

%:指代任意的0个或者多个字符。

_:指代任意的一个字符


案例:查询emp表中员工的姓名的第一个字符时‘s’的员工的姓名

分析:‘s’的后面可能有也有可能没有字符 s%

--select ename from emp

where ename like 'S%'

案例:查询emp表中名字中的最后一个字符是“e”的员工的姓名

--select ename from emp

where ename like '%E'

案例:查询emp表中名字中包含‘E’的所有员工的信息

分析:1)以“E”开头 E%

2)以“E”结尾 %E

3)包含“E”%E%

%E%包含所有的可能性

--select * from emp

where ename like '%E%'

案例:查询emp表中名字的倒数第2个字符是‘k’的员工的姓名

分析:首先字符 'k'DE 前面可能有字符也有可能没有字符,在'k'的后面一定只有一个字符

--select * from emp

where ename like '%K_'

案例:查询emp表中员工的倒数第三个字符是'i'的员工的姓名

--select ename from emp

where ename like '%I_ _'

not like:

案例:查询emp表中名字不是以‘S’开头的信息

--select *from emp

where ename not like 'S%'

案例:查询emp表中名字的最后一个字母不是'N'的员工的姓名

案例:查询emp表中姓名中没有字母k所有员工的编号,姓名,工资,最后根据原的编号进行升序排列

3.逻辑运算符:and,or,not

1)and:并且,连接多个条件,都必须满足

案例:查询emp表中员工的工资在1000-3000之间的每一个员工的编号,姓名,职位,工资

--select empno,ename,job,sal from emp

where sal >=1000 and sal <=3000

案例:查询emp表中员工的职位是'MANAGER',并且在30号部门所在的所有员工的所有信息

-- select * from emp

where job='MANAGER' and deptno='30'

案例:查询emp表中含有上级领导的员工,并且名字中不包含字母‘s’的所有员工的编号,姓名,职位,工资,最后根据员工的编号进行升序排列

-- select empno,ename,job,sal from emp

where mgr is not null and ename not like '%S%'

order by empno

2)or:或者,连接多个或者关系的条件

案例:查询emp表中员工的工资高于1000,或者员工在20号部门的员工的所有信息

select * from emp

where sal > 1000 or deptno = 20

案例:查询emp表中名字的倒数第二个字母是‘L’或者没有上级的员工的编号,姓名,职位,工资,最后根据工资进行升序排列,如果工资一致,根据员工的编号进行降序排列

--select empno,ename,job,sal from emp

where ename like '%L_' or mgr is null

order by sal, empno desc

案例:查询emp表中员工不在10号部门。或者工资低于3000的所有员工的编号,姓名,职位,工资。所在部门的编号以及入职时间,最后根据入职时间进行升序排列

-- select empno,ename,job,sal,deptno,hiredate from emp

where deptno != '10' or sal < 3000

order by hiredate

3)not:否定,对整个条件的否定(取反)

案例:查询emp表中名字不是king的信息

--select * from emp

where ename <> 'KING'

select * from emp

where not ename ='KING'

案例:查询emp表中不是30号部门的所有员工的姓名,编号

--select empno,ename, deptno from emp

where not deptno=30

4 聚合函数(分组):

count(),sun(),avg(),max(),min()

1)count(*/列名):“*”统计该表中数据的总条数;“列名”统计该列中列值不为null的数据的总条数。

案例:查询emp表中员工总人数

--select count(*) from emp

案例:查询emp表中查询含有上级领导的员工的数量

-- select count(mgr) from emp

案例:查询emp表中含有奖金的员工的数量

-- select count(comm) from emp

案例:查询emp表中职位种类的个数

-- select count(distinct job)from emp

2)sum(列名):统计该列的列值总和

--select sum (sal) from emp

案例:查询emp表中奖金的累加之和

--select sum(comm) from emp

3)avg(列名):统计该列的平均值

--select avg(comm) from emp

案例:查询emp表中工资的平均值

- -select avg(sal) from emp

4)max(列名):统计该列的最大值

案例:查询emp表中员工的最高工资

-- select max(sal) from emp

案例:查询emp表中员工的编号最大值

-- select max(empno) from emp

5)min(列名):统计该列的最小值

案例:查询emp表中员工的最低工资和最低奖金

--select min(sal) 最低工资, min(comm) 最低奖金 from emp

案例:查询emp表中员工的人数,工资的总和,平均工资,最高工资,最低工资,对查询返回的列都起别名

-- select count(*) 总人数,SUM(sal) 工资总和,avg(sal) 平均工资,max(sal) 最高工资,

min(sal) 最低工资 from emp


5.分组:根据某一个列把表中的数据分成几组,然后经常对每一组的数据使用聚合函数(分组函数)。

1)格式:

select 列名/聚合函数 from 表名

where 条件

group by 列名

order by 别名/列名/聚合函数 asc/desc

2)执行的顺序:首先执行where条件,对表中所有的数据进行过滤,然后执行group by根据某一个列进行分组(分组以后的每一组数据使用聚合函数),最后执行order by,对查询返回的结果进行排序。

案例:查询emp表中每一个部门的编号,人数,最低工资,最高工资,最后根据部门的编号进行升序排序

--select deptno,count(*),min(sal),max(sal)

from emp

group by deptno

order by deptno asc

案例:查询emp表中工资在1000-3000之间的员工的信息,根据部门分组,查询每个部门的编号,人数,工资总和,平均工资,最后根据平均工资,进行降序排序

--select deptno,count(*),sum(sal),avg(sal) 平均工资

from emp

where sal>=1000 and sal<=3000

group by deptno

order by avg(sal) 平均工资desc

案例:查询emp表中含有上级领导的员工,每个职业的名称,人数,平均工资,工资总和,最后根据人数进行升序排列,如果人数一直根据工资总和进行降序排列

-- select job,count(*),avg(sal),sum(sal) from emp

where mgr is not null

group by job

order by count(*) asc,avg(sal) desc

案例:查询emp表中名字不是以‘s’开头,并且不在20号部门的员工,每个职业的名字,人数,最高工资和最低工资,最后根据最高工资进行降序排列

-- select job,count(*),max(sal),min(sal) from emp

where empno not like 'S%' and not deptno=20

group by job

order by max(sal) desc


6.Oracle中常用字符处理函数:用来处理char,varchar,varchar2类型数据。

1)length(列名/字符串):统计当前列值/字符串中字符的个数

--select ename,length(ename) from emp

--select length('hello word') from emp

2)dual:虚拟表,Oracle中专门用来测试的表

--select length('hello werld') from dual

3)upper(列名/字符串):把当前的列值/字符串中的小写字母改为大写字母

--select upper('hello WORLD') from dual

4)lower(列名/字符串):把当前的列值/字符串中的大写字母改为小写字母。

--select lower('hello WORLD') from dual

案例:查询emp表中员工的姓名和职位 把姓名和职位所有的字母都改为小写字母显示

-- select ename,lower(ename), job,lower(job) from emp

5)trim(列名/字符串):删除列名/字符串两端的空格

--select trim (' hello world ') from dual

6)串联字符串

a)||

--select ename || job from emp

--select ename ||','|| job from emp

b)concat(字符串1,字符串2)

select concat('努力','学习') from dual

7)substr(参数1,参数2,参数3):用于截取字符串

参数1:要截取列名/字符串

参数2:如果为正数表示从1开始,根据正数的位置开始往后截取,如果为负数,表示从倒数第几个开始往后截取

参数3:要截取的字符个数

--select substr('hello',3,2) from dual

--select substr('hello',-3,2) from dual

案例:查询emp表中员工的姓名和姓名中倒数后两个字符

-- select ename,substr(ename,-2,2) from emp

length(ename)-1:倒数第2个字符位置

--select ename,substr(ename,

length(ename)-1,2)

from emp

案例:查询emp表中员工姓名的倒数后3个字符

--select ename,substr(ename,-3,3) from emp

---select ename,substr(ename,

length(ename)-2,3)

from emp


------------码字不易,给个关注呗^_^

相关推荐

软件测试|MySQL CROSS JOIN:交叉连接的详细解析

简介在MySQL数据库中,CROSSJOIN是一种用于生成两个或多个表的笛卡尔积的连接方法。CROSSJOIN不需要任何连接条件,它将左表的每一行与右表的每一行进行组合,从而生成一个包含所...

「MySQL笔记」left join-on-and 与 left join-on-where 的区别

1.摘要关于这两种写法的重要知识点摘要如下:left-join时,即使有相同的查询条件,二者的查询结果集也不同,原因是优先级导致的,on的优先级比where高on-and是进行韦恩运算连接...

MySQL中的JOIN——联合查询的基本语法

MySQL中的JOIN指令用来将两个或多个表中的数据进行联合查询,根据连接条件来匹配记录,从而得到需要的结果集。在MySQL中,常见的JOIN类型包括INNERJOIN、LEFTJOIN和RIGH...

MySQL 中的 CROSS JOIN:强大的连接工具

CROSSJOIN在MySQL里是一种挺特别的连接操作,它能弄出连接表的笛卡尔积。这就是说,要是表A有m行,表B有n行,那ACROSSJOINB的结果就会有m*n...

大厂必问:MySQL 三表 JOIN 操作的解析与性能优化,效率又如何?

大厂必问:MySQL三表JOIN操作的解析与性能优化策略,效率又如何?点击关注,开启技术之旅!大家好,这里是互联网技术学堂,无论你是一名程序员、设计师、还是对技术充满好奇心的普通人,都欢迎你加入...

面试题:MySQL 的 JOIN 查询优化(mysql查询优化方法)

MySQL的JOIN查询优化是提升数据库性能的关键环节。以下是综合多个技术文档的核心优化策略,按优先级和实现难度分类:一、索引优化:性能提升的基础为连接字段建立索引确保参与JOIN的列(通常...

Flink中处理维表关联技术实现路径

在Flink中处理维表关联大体氛围TableSQLLookupJoin和DataStream算子函数,主要技术实现路径:I.FlinkSQL/TableAPI中的Lookup...

深入剖析Zookeeper原理(一)整体设计

1.ZK集群架构设计与特性1.ZK集群架构设计:ZK主要分为三种角色:Leader(领导者):一个Zookeeper集群同一时间只会有一个实际工作的Leader,它会发起并维护与各Follwer及...

多种负载均衡算法及其Java代码实现

首先给大家介绍下什么是负载均衡负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡,英...

一分钟了解SpringCloud中的ribbon到底是什么,原理是啥?

1.概念ribbon是一款客户端负载均衡器,用于微服务之间的负载均衡。首先,什么是客户端负载均衡?如图,ribbon可以通过注册中心获取服务列表,然后自己执行自己的负载均衡策略来决定要访问哪个微服务,...

Step by Step之腾讯云短信-验证码实践

在商城小程序和前端上线用了一阵子之后,用户提出了体验提升的需求,如忘记密码、绑定用户、快捷注册等,作为业界最佳实践的短信验证码登录、重置密码和注册等功能开发也就提上日程了,本文就以重置密码为例,将验证...

10分钟入门响应式:Springboot整合kafka实现reactive

Springboot引入Reactor已经有一段时间了,笔者潜伏在各种技术群里暗中观察发现,好像scala圈子的同仁们,似乎对响应式更热衷一点。也许是因为他们对fp理解的更深吧,所以领悟起来障碍性更少...

使用java随机生成有个性的用户名,LOL地名+水浒传,合计2808个

*随机生成用户名*取水浒传108好汉名字*取LOL地名26个,组合而成*一共可以生成2808个不同特色的用户名如果你在上网的时候,用户名难取的话,这里有很多可选择的用户名,现提供100个...

深入理解Math.random()的概率分布特性

直接上源码/***Returnsa{@codedouble}valuewithapositivesign,*返回一个带符号的double类型的数字,说人话就是返回一个非负...

编程英文 - 创建/生成/构建 (create/generate/build)

在软件开发中,create、generate和build这三个词经常被用到,它们都与"创造"或"产生"某些东西有关,但在具体使用场景和含义上有所不同。基本含义creat...

取消回复欢迎 发表评论: