百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

oracle数据库知识点汇总(下)(oracle数据库精讲与疑难解析)

sinye56 2024-09-19 02:18 7 浏览 0 评论

知识点:

1.Oracle中常用的字符处理函数(2)

to_char():把其他类型的数据转换为字符类型

‘100’字符

100 数字

to_char(数字:)把数字转换为字符起显示作用

select to_char(10000000)||'哥未来的工资'

from dual

2. between....and...

案例:求出emp表中员工的工资在2000-5000之间的所有员工的编号,姓名,职位,工资

--select empno,ename,job,sal

from emp

where sal between 2000 and 5000

列名 between 初值 and 终值

该列的列值从初值到终值之间的所有的列值

案例:查询emp表中员工的编号在7499到7902之间所有员工的编号,姓名,职位,入职时间,最后根据编号进行降序排列

-- select empno,ename,job,hiredate

from emp

where empno between 7499 and 7902

order by empno desc

列名 not between 初值 and 终值

案例:查询emp表中工资不在1000-2000之间的所有员工的编号,姓名,职位,工资

-- select empno,ename,job,sal

from emp

where sal not between 1000 and 2000

案例:查询emp表中员工的编号不在7566-7902之间所有员工的编号,姓名,职位,最后根据编号进行降序排列

-- select empno,ename,job

from emp

where empno not between 7566 and 7902

order by empno desc

案例:查询emp表中员工的编号是7369,7499,7566,7698,7844,7900的员工的姓名,职位,工资(or)

-- select empno,ename,job,sal

from emp

where empno=7369 or empno=7499 or empno=7566

or empno=7698 or empno=7844 or empno=7900


3.in:查询同一个列的多个列值,等价于多个or

列名 in(列值1,列值2,列值3)......

案例:查询emp表中员工的编号是7369,7499,7566,7698,7844,7900的员工的姓名,职位,工资(or)

-- select empno,ename,job,sal

from emp

where empno in(7369,7499,7566,7698,7844,7900)

案例:查询emp表中员工的姓名是SLLEN,JONES,BLAKE,CLARK,KING的所有信息

-- select * from emp

where ename in('ALLEN','JONES','BLAKE','CLARK','KING')

列名 not in(列值1,列值2,列值3...)

案例:查询emp表中工资不是800,2975,2850,2450,5000的所有员工的编号,姓名,工资

-- select empno,ename,sal

from emp

where sal not in(800,2975,2850,2450,5000)

案例:查询emp表中员工的职位不是clerk,salesman,manager,analyst的员工信息

-- select * from emp

where job not in('CLERK','SALESMAN','MANAGER','ANALYST')

4.数值处理函数:主要处理数值

1)abs(列名/数值):求出绝对值

-- select abs(100) from dual---100

-- select abs(0) from dual -------0

-- select abs(-100) from dual-----100

2)sqrt(数值):求出平方根

10*10=100 10就是100的平方根

--select sqrt(100) from dual-- 10

3)power(底数,指数):求出乘方

--select power(10,3) from dual--1000

4)mod(参数1,参数2):求出余数

--select mod(10,3) from dual-- 1

5)sign(数值):判断数值的正负性,如果数值是正数。返回值是1;如果数值是负数,返回值是-1;如果数值是0,返回值是0

--select sign(100) from dual--------------- 1

--select sign(-100) from dual------------ -1

--select sign(0) from dual------------------ 0

6)round():四舍五入

round(参数1,参数2):

参数1:要进行四舍五入的数据

参数2:如果是正数,表示保留几位小数;如果是0,表示只有整数;如果是负数,表示对小数点前第几位进行四舍五入。

--select round(45.926,2) from dual------- 45.93

--select round(45.926,1) from dual------- 45.9

--select round(45.926,0) from dual------- 46

-- select round(45.926,-1) from dual----- 50

--:注释,只起到解释说明的作用,不参与程序的执行

--select round(45.926,-2) from dual------ 0

--select round(55.926,-2) from dual------ 100

7)trunc():截取函数

trunc(参数1,参数2)

参数1:要截取数值。

参数2:如果是正数,表示保留几位小数;如果是0,表示舍弃所有的小数:如果是负数,表示舍弃小数点前第几位

--select trunc(45.926,2) from dual -- 45.92

--select trunc(45.926,1) from dual-- 45.9

-- select trunc(45.926,0) from dual-- 45

--select trunc(45.926,-1)from dual-- 40

--select trunc(45.926,-2)from dual-- 0


5.约束:设计表的时候提前对表中的数据设置一些规则,只有满足这些规则,才可以把数据插入到表中,这些规则就是约束。

约束的类型:

主键约束

唯一约束

检查约束

外键约束

默认值约束

非空约束


6.主键约束:主键约束的作用用来保持数据的唯一性,避免出现冗余的数据(防止表中出现完全相同的数据)。

1)一张表中只能有一个主键(主键约束),被主键约束修饰的列,该列的列值必须要非空而且唯一。

2)可以使用主键约束修饰一个列或者多个列的组值。

create table worker1(

id number(4) primary key,

name varchar2(50),

age number(3)

)

--insert into worker1 values(1,'王勃',16)

反例:

--insert into worker1(name,age)

volues('李密',21)

3)在创建表的时候指定主键约束的名字

create table worker2(

id number(4) constraint pk_id_w2

primary key,

name varchar2(50)

)

insert into worker2 values(1,'张三')

--反例

insert into worker2 values(1,'李四')

4)如果使用主键约束修饰多个列的组合值,称为联合主键(复合主键)

5)创建表的时候,设置联合主键

create table worker3(

in number(3),

name varchar2(50)

age number(3),

constraint pk_id_name_w3

primary key(id,name)

)

6)修改表的时候设置主键约束

格式:

alter table 表名

add constraint 约束名

primary key(列名1,列名2,列名3...)

create table worker4(

id number(4),

name varchar2(50)

)

alter table worker4

add constraint pk_id_w4

primary key(id)


create table worker5(

id number(4),

name varchar2(50),

job varchar2(50),

age number(3)

)

alter table worker5

add constraint pk_id_name_w5

primary key(id,name)


a案例:创建一张表customer2,IDnumber(4),name

varchar2(50),password varchar2(50),age number(3),address varchar2(50),修改customer2的时候设置主键约束pk_id_name_cus2修饰id和name的组合值

-- create table customer2(

id number(4),

name varchar2(50),

password varchar2(50),

age number(3),

address varchar2(50)

)

alter table customer2

add constraint pk_id_name_cus2

primary key(id,name)

7)删除主键:

a)格式1:只能删除主键

alter table 表名 drop primary key

alter table worker1 drop primary ket

案例:删除worker2,worker3中的主键

-- alter table worker2 drop primary key

alter table worker3 drop primary key

b)格式2:

alter table 表名 drop constraint 约束名

alter table worker4 drop constraint pk_id_w4

案例:删除worker5中的主键约束


7日期处理函数:date

1)常用的日期格式:

YYYY-MM-dd:年月日

y:年份 m:月份 d:几号

eg:1999-12-11

yyyy-mm-dd hh24:mi:ss 年月日 时分秒

h:小时 mi:分钟 ss:秒钟

eg:2011-11-11 11:11:11

默认的日期格式:

dd-mon月-yy

eg:2012-12-22 22-12月-12

2)sysdate;当前的系统时间

select sysdate from dual

sysdate以天为单位

案例:查询今天,昨天,明天

select sysdate,sysdate-1,sysdate+1 from dual

3)to_char(日期数据,'日期格式'):把日期类型数据(date)按照指定的格式转换为char类型字符串显示。

select sysdate,

to_char(sysdate,'yyyy-mm-dd')

from dual

案例:查询当前的系统时间,按照yyyy-mm-dd hh24:mi:ss的格式显示

-- select sysdate,

to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')

from dual

案例:查询emp表中员工的姓名,职位,工资,入职时间,入职时间按照yyyy-mm-dd hh:mi:ss格式显示

select ename,job,sal,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp

4)使用to_char()函数获得日期的某一个部分

select sysdate,to_char(sysdate,'yyyy') from dual

案例:查询emp表中员工的编号,姓名,入职时间以及入职的月份

-- select empno,ename,hiredate,

to_char(hiredate,'mm')from emp

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

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

where to_char(hiredate,'mm')='12'

5)to_date('日期字符串','日期的格式'):把满足日期格式的char类型数据转换为对应的date类型的数据,经常用于插入操作。

create table worker6(

id number(4) primary key,

name varchar2(50),

hiredate date

)

insert into worker6

values(1,'李世民',to_date('2000-10-20 13:11:15','yyyy-mm-dd hh24:mi:ss'))

往worker6插入3条数据

6使用默认的日期格式插入数据

insert into worker6

values(5,'曹操','12-12月-09')

不能插入时分秒

往worker6表中插入3条数据

values(6,'夏侯惇','15-10月-16')

insert into worker6

values(7,'典韦','31-12月-17')

insert into worker6

values(8,'夏侯渊','30-11月-15')

修改:

update worker6 set hiredate=to_date('2013','yyyy')


7)months_between(d1,d2):求出日期d1和d2之间间隔了多少个月

案例:查询emp表中员工的姓名,职位,工资,入职时间,以及工作了多少个月

select ename,job,sal,hiredate,sysdate,

months_between(sysdate,hiredate)

from emp

8)add_months(d1,数字):在日期d1之后数字个月

select add_months(sysdate,6) from dual



知识点:

1.唯一约束:唯一约束用于指定某一个或者多个列的组合值具有唯一性,防止在该列中输入重复的列值。

1)使用唯一约束修饰的列,该列的列值必须唯一,但是可以输入空值。

2)一张表中可以出现多个唯一约束。

3)不要使用唯一约束修饰主键所在的列。

create table worker7(

id number(4) primary key,

name varchar2(50) unique

)

insert into worker7 values(1,'张三')

insert into worker7 values(2,null)

--反例

insert into worker7 values(3,'张三')(违反唯一约束条件)

4)使用一个唯一约束修饰多个列的组合值(唯一值)

5)修改表的时候,设置唯一约束

alter table 表名

add constreint 约束名

unique(列名1,列名2,列名3...)

create table worker8(

in number(4) primary key,

name varchar2(50)

)

alter table worker8

add constraint uq_name_w8

unique(name)

insert into worker8 values(1,'李白')

反例:

insert into worker8 values(2,'李白')

create table worker9(

id number(4) primary key,

name varchar2(50),

password varchar2(50),

email varchar2(50)

)

alter table worker9

add constraint uq_name_password_w9

unique(name,password)

案例:创建一张表BOOK3,id number(4)

name varchar2(50) 书名, author carchar2(50) 作者,pub varchar2(50) 出版社, numinput namber(10)进货量, 修改book3,设置主键约束pk_id_name_b3修饰ID和name的列,设置唯一约束uq_author_pub_b3修饰author和pub的列

-- create table book3(

id nu mber(4),

name varchar2(50),

author varchar2(50),

pub varchar2(50),

numinput number(10)

)

alter table book3

add constraint pk_id_name_b3

primary key(id,name)

alter table book3

add constraint pk_author_pub_b3

unique(author,pub)


6.删除唯一约束:

格式:

alter table 表名

drop constraint 约束名

alter table worker8

drop constraint uq_name_w8

案例:删除worker9中的唯一约束

alter table worker9

arop constraint uq_name_password_w9


7)主键约束和唯一约束之间的区别

a)一张表中只能定义一个主键约束,但可以定义多个唯一约束。

b)对于指定为主键修饰一个列或者多个列的组合值,其中任何一个列都不能出现空值,而对于唯一约束的列,该列的列值可以为空。


2索引:索引是建立在表中列上的数据库对象,用于提高数据的查询速度。

1)索引是提高查询效率的机制。

2)索引一旦创建以后就由Oracle系统自动进行维护,编写sql语句的时候不需要知道使用的是哪一个索引


补充:

having 子句:对分组以后的数据再次进行过滤,经常跟聚合函数结合使用

格式

select 列名/聚合函数

from 表名

where 条件

group by 列名

having 子句

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

where条件对整张表中所有的数据进行过滤

having子句对分组以后的数据进行过滤

--案例

查询emp表中每一个部门最低工资高于900的部门编号,人数,工资总和以及最低工资,最后根据部门编号进行升序排列

select deptno,count(*),sum(sal),min(sal)

from emp

group by deptno

having min(sal)>900

order by deptno

语法规则:首先执行where条件,对表中所有的数据过滤,然后使用group by进行分组,之后通过having子句对分组以后的数据再次进行过滤,最后执行order by进行排序

注意:having子句一定要跟group by集合使用,而且having子句经常跟聚合函数结合使用

练习:查询emp表中名字中没有字母A,或者所在部门编号是30号部门,查询每个部门最高工资低于5000的部门编号,人数,平均工资,最高工资,最后根据人数进行升序排列,如果人数一致,根据最高工资进行降序排列

用到group by 分组,select只能有一个列名,后面均为聚合函数,此列名作为分组列名

select deptno,count(*),max(sal),avg(sal)

from emp

where deptno=30 or ename not like '%A%'

group by deptno

having max(sal)<5000

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

练习2:查询emp表中含有上级领导,并且岗位不是SALESMAN,每个职位人数小于3个人的职位名称,人数,平均工资,工资总和,根据人数进行升序排列,如果人数一致根据平均工资再进行升序排列

select job,count(*),avg(sal),sum(sal)

from emp

where mgr is not null and job<>'SALESMAN'

group by job

having count(*)<3

order by count(*),avg(sal)


关联查询(表的连接查询)

所需要查询的数据来源多张表,使用关联查询,把多张表连接起来进行查询

案例:查询emp表中员工的编号,姓名以及所在部门的编号,部门名称

格式:

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

from 表名 别名1,,表2别名2

where 关联条件

select e.empno,e.ename,e.deptno,d.dname

from emp e,dept d

笛卡尔积现象:

是数学中的一个概念,表示两个表中的每一行数据任意组合,在表的关联查询中,如果没有关联条件,则表中的数据会出现乘积现象,称为笛卡尔积

关联条件:用来描述两张表之间的关联关系,通过添加关联条件,有效的避免出现笛卡尔积现象

emp表和dept表之间的关联关系:emp表中的deptno等于dept表中的deptno

关联条件:emp.deptno=dept.deptno

练习:查询emp表中的员工编号,姓名,职位,以及所在部门的编号,地址,最后根据部门编号进行升序排列,如果部门编号一致根据员工的编号进行降序排列

select e.empno,e.ename,e.job,e.sal,d.deptno,d.loc

from emp e, dept d

where e.deptno=d.deptno

order by deptno,empno desc


非等值连接:关联条件不是使用“=”进行连接

案例:查询emp表中员工的姓名,职位,工资以及该工资的等级

select e.ename,e.job,e.sal,s.grade

from emp e, salgrade s

where e.sal between s.losal and s.hisal

分析:emp表中员工的工资sal在salgrade(工资等级表)中的最低工资losal和最高工资hisal之间

emp表和salgrade表之间的关联关系:

e.sal between s.losal and s.hisal

练习:查询工资的等级在1,3,4,5等级下员工的编号,姓名,职位,工资以及当前的工资等级,最后根据工资的等级进行降序排序,如果等级一致,根据员工的编号进行升序排列

select e.empno,e.ename,e.job,e.sal,s.grade

from emp e, salgrade s

where e.sal between s.losal and s.hisal and s.grade in(1,3,4,5)

order by s.grade desc,e.empno

练习2:查询emp表中员工的编号,姓名,职位,工资,该工资的等级以及该员工所在部门的编号,名称

select e.ename,e.job,e.sal,s.grade,d.deptno,d.dname

from emp e, salgrade s,dept d

where e.sal between s.losal and s.hisal and e.deptno=d.deptno

练习3:查询emp表中职位是SALESMAN,MANAGER,ANALYST,PRESIDENT下员工的编号,姓名,职位,工资,奖金,入职时间,工资的等级,以及该等级最低工资所在部门的名称,最后根据工资的等级进行升序排列,如果工资等级一致,根据员工的编号降序排列

select e.empno,e.ename,e.job,e.sal,e.comm,e.hiredate,s.grade,s.losal,d.dname

from emp e, salgrade s,dept d

where e.sal between s.losal and s.hisal and e.deptno=d.deptno and

e.job in('SALESMAN','MANAGER','ANALYST','PRESIDENT')

order by s.grade,e.empno desc

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

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&amp;配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: