oracle数据库知识点汇总(下)
ccwgpt 2024-11-23 12:13 78 浏览 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
------码字不易,给个关注呗^_^
- 上一篇:ORACLE优化之SQL篇
- 下一篇:Oracle数据库之高级查询一
相关推荐
- VUE3前端开发入门系列教程二:使用iView框架辅助开发
-
1、安装iView新框架,支持VUE3npminstallview-ui-plus2、编辑src/main.js,添加以下内容,导入js和css到项目importViewUIPlusfrom...
- 万能前端框架uni app初探03:底部导航开发
-
前言本节我们使用uniapp的底部导航功能,点击不同tab会显示不同页面,这个功能在实际项目开发中几乎是必备的。一、基础知识1.tabBar如果应用是一个多tab应用,可以通过tabBar配...
- Rust Web 开发框架,前端你可以选择哪个?
-
Rust构建一切。在如今流行的语言中,Rust可谓是将构建和高效作为自己优美的身姿在大众视野中脱颖而出。它是一门赋予每个人构建可靠且高效软件能力的语言。它有什么特性呢?高性能。Rust速度惊人且内...
- 连载:前端开发中纠结的Javascript框架(上)
-
如今,前端开发有着许许多多的框架和库。其中一些好用,一些却不尽人意。通常我们会习惯性运用某一概念,模块或句法。事实上,并没有什么万能工具。这篇文章是关于未来框架的发展趋势——那就是没有框架!我从以下几...
- 前端开发框架的演进架构:提升用户体验和开发效率
-
前端开发框架是现代Web应用开发的重要工具,它不仅可以帮助开发者构建复杂的用户界面,还能够提升用户体验和开发效率。随着Web技术的不断发展,前端开发框架也在不断演进,为开发者提供了更丰富、更高效的工具...
- Google应用Mesh-TensorFlow框架,让CNN也能处理超高分辨率图像
-
为了要处理超高分辨率医疗图像数据,Google开发了一种空间数据分区(SpatialPartition)技术,在不牺牲图像分辨率的条件下,分析超高分辨率图像。Google使用Mesh-TensorF...
- 大模型安全挑战加剧:框架层漏洞成新靶心
-
近日,360数字安全集团发布了一份关于大模型安全漏洞的报告,揭示了当前大模型及围绕其构建的框架和应用中存在的严重安全问题。报告显示,360近期研究发现了近40个大模型相关的安全漏洞,其中既包括二进制内...
- Keras 3.0正式发布:可用于TensorFlow、JAX和PyTorch
-
机器之心报道编辑:陈萍经过5个月的更新迭代,Keras3.0终于来了。「大新闻:我们刚刚发布了Keras3.0版本!」Keras之父FrancoisChollet在X上激动的...
- TensorFlow和Keras入门必读教程(tensorflow与keras版本对应)
-
导读:本文对TensorFlow的框架和基本示例进行简要介绍。作者:本杰明·普朗什(BenjaminPlanche)艾略特·安德烈斯(EliotAndres)来源:华章科技01TensorFlo...
- 谷歌官方回应“TensorFlow遭弃”:还在投资开发,将与JAX并肩作战
-
鱼羊发自凹非寺量子位|公众号QbitAI终于,谷歌出面回应“TensorFlow遭弃”传闻:我们将继续致力于将TensorFlow打造为一流机器学习平台,与JAX并肩推动机器学习研究。这段时...
- 2025 年的PHP :现代 Web 开发的强大引擎
-
程序员还在吐槽PHP过时?2025年的PHP8.4直接封神了。看看最近更新的属性钩子、强类型系统,加上Laravel这些框架,老语言早就脱胎换骨。十年前说PHP弱类型容易崩代码的,现在脸疼不?联合类...
- 前端内卷终结者?htmx如何让开发者告别200行JS只做一个按钮
-
当你用React写一个点赞按钮需要引入3个状态管理库、编写80行JSX和120行钩子函数时,htmx只需要一行HTML:<buttonhx-post="/like"hx-sw...
- NativePHP桌面版V1.0正式发布(元气桌面电脑版下载)
-
导读:各位小伙伴,使用PHP构建桌面级系统的利器,NativePHP来了。概述NativePHP是一个用于使用PHP构建桌面应用的框架。它允许PHP开发人员使用熟悉的工具和技术创建跨平台的原生应用...
- PHP Laravel框架底层机制(php基本框架)
-
当然可以,Laravel是最受欢迎的PHP框架之一,以优雅的语法和丰富的生态而闻名。尽管开发体验非常“高端”,它的底层其实是由一系列结构清晰、职责分明的组件构成的。下面我从整体架构、核心流程、...
- PHP框架之Laravel框架教程:2. 控制器、路由、视图简单介绍
-
2.控制器、路由、视图简单介绍我们先建立控制器,目录是:app/Http/Controllers,新建控制器Ding.php,代码如下:Ding.php:<?phpnamespaceA...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- VUE3前端开发入门系列教程二:使用iView框架辅助开发
- 万能前端框架uni app初探03:底部导航开发
- Rust Web 开发框架,前端你可以选择哪个?
- 连载:前端开发中纠结的Javascript框架(上)
- 前端开发框架的演进架构:提升用户体验和开发效率
- Google应用Mesh-TensorFlow框架,让CNN也能处理超高分辨率图像
- 大模型安全挑战加剧:框架层漏洞成新靶心
- Keras 3.0正式发布:可用于TensorFlow、JAX和PyTorch
- TensorFlow和Keras入门必读教程(tensorflow与keras版本对应)
- 谷歌官方回应“TensorFlow遭弃”:还在投资开发,将与JAX并肩作战
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)