Oracle-day2:随机函数、innot in、大小写转换、范围查询、日期类型、空值与非空值、排序、条件判断
前提:
1、system账户
2、oracle数据库
3、操控的是scott的emp表
一、随机函数
/* 一、随机函数
*/
-- 随机函数:dbms_random.value()
select dbms_random.value() from dual;-- 传递参数范围(大于1,小于10)
select dbms_random.value(1,10) from dual;-- 如果想要到参数b的值,a可从0开始,后把随机数向上取整
select ceil(dbms_random.value(0,47)) from dual;-- 找出emp表中,工资>800 喝 工资<900 的销售员
select * from scott.emp where
(sal > 800 and job = 'CLERK' )
or
(sal > 900 and job = 'SALESMAN');
二、in() 和 not in() 子查询
/*二、、多列子查询分别有:not in() -- 不包含、 in() -- 包含这两个运算符用于where表达式中,以列表项的形式支持同一个项(列)的多个值选择例如:--1、 in()的举例select * from 表 where 查询项 in (val1,val2,......)--2、not in() 的举例 -- 不存在select * from 表 where 查询项 not in(val1,val2,......)
*/--2.1例题:查询出全部职员CLERK、分析员ANALYST或推销员SALESMAN的姓名、工种、工资和所在部门号
select ename,job,sal,deptno from scott.emp
where job in ('CLERK','ANALYST','SALESMAN'); -- 查询出job项中包含的三个字段数据
三、大小写转换
/*三、大小写转换函数3.1、upper('字符串') -- 字母转大写3.2、lower('字符串') -- 字母转小写
*/
-- 1、upper传入小写后转为大写
select ename,job,sal,deptno from scott.emp
where job in(upper('clerk'),'analyst');-- 2、在emp表中找出20号部门中,不是经理和分析员ANALYST的记录
select * from scott.emp where deptno = 20 and job <> 'MANAGER'
and job !='ANALYST';
-- 2.1 用 not in()
select * from scott.emp where deptno = 20 and job not in('MANAGER','ANALYST');
四、between A and B 范围内查询
/*四、某个范围内的判断:between A and B在A 和 B 之间 -- 相当于 >= A and <= B同时:也可以判断不在A到B的范围,加上 notnot between A and B 即:不在A到B之间,相当于 < A or > B
*/
-- 4.1 例题:查询所有薪水在2000-4000范围内的员工信息
select * from scott.emp where sal between 2000 and 4000;-- 4.2 查询所有薪水不在2000-4000范围内的员工信息
select * from scott.emp where sal not between 2000 and 4000;-- 数字、字符串可以用范围,日期也可以用到范围
-- 4.3 查询1981年之内入职的员工信息,雇佣日期是date类型
-- 1981年之间 --> 1981-01-01 到 1981-12-31
五、日期类型
5.1 日期格式字符串转为日期类型
/*五、日期类型5.1、date关键字 将日期格式的字符串转成日期 date'4位年份-2位月份-2位天数'
*/
--写法一、查询1981-01-01 到 1981-12-31的员工
select * from scott.emp
where hiredate >= date'1981-01-01' and hiredate <= date'1981-12-31';
--写法二
select * from scott.emp
where hiredate between date'1981-01-01' and date '1981-12-31';
5.2 中文日期格式
/*5.2 中文格式日期:'2位天数-数字+月-4位年份'
*/
-- 写法一:and
select * from scott.emp where
hiredate >= '01-1月-1981' and hiredate <= '31-12月-1981';-- 写法二、between
select * from scott.emp where
hiredate between '01-1月-1981' and '31-12月-1981';
5.3 to_date('日期str','格式') 转日期
/*5.3 to_date:将日期格式的字符串转成日期语法:to_date('日期格式字符串','日期格式')
*/
-- 写法1、and
select * from scott.emp where
hiredate >= to_date('1981-01-01','yyyy-mm-dd')
and
hiredate <= to_date('1981-12-31','yyyy-mm-dd');-- 写法2、between
select * from scott.emp where
hiredate between to_date('1981-01-01','yyyy-mm-dd')
and
to_date('1981-12-31','yyyy-mm-dd');
5.4 to_char 截取日期转字符串
/*5.4 to_char 转字符串返回值:字符串可用于将日期格式的列中的年份截取格式:to_char(日期字符串,'日期格式')
*/
-- 截取到hiredate中的年份
-- 1、查询截取到日期字符串的年份
select ename,hiredate,to_char(hiredate,'yyyy') from scott.emp;-- 2、查询年份为1981的
select * from scott.emp where to_char(hiredate,'yyyy') = '1981';-- 3、查询年份为1981,但是判断的值为数字类型(跟2同样有效)
select * from scott.emp where to_char(hiredate,'yyyy') = 1981;-- 4、能否截取其他格式?
-- 4.1 截取到年-月
select ename,hiredate,to_char(hiredate,'yyyy-mm') from scott.emp;
-- 4.2 截取到日-月
select ename,hiredate,to_char(hiredate,'ywmm-dd') from scott.emp;
5.5 练习
-- 5、统计1月份入职的员工信息(返回来的月是2位数)
-- 写法一、
select * from scott.emp where
to_char(hiredate,'mm') = '01';
-- 写法二、
select * from scott.emp where
to_char(hiredate,'mm') = 01;-- 6、统计1-6月份入职的员工信息
-- between
-- 写法一、in()找出满足1-6月的
select * from scott.emp where
to_char(hiredate,'mm') in('01','02','03','04','05','06');-- 写法二、not in() 找出不满足1-6月的
select * from scott.emp where
to_char(hiredate,'mm') not in('07','08','09','10','11','12');-- 写法三、通过逻辑运算符
select * from scott.emp where
to_char(hiredate,'mm') = '01' or
to_char(hiredate,'mm') = '02' or
to_char(hiredate,'mm') = '03' or
to_char(hiredate,'mm') = '04' or
to_char(hiredate,'mm') = '05' or
to_char(hiredate,'mm') = '06';-- 写法四、通过between A and B
select * from scott.emp where
to_char(hiredate,'mm') between 01 and 06;select * from scott.emp where
to_char(hiredate,'mm') between '01' and '06';-- 写法五、大于等于
select * from scott.emp where
to_char(hiredate,'mm') >= 01
and
to_char(hiredate,'mm') <= 06;
六、空与非空值
/*六、空值和非空空值:null非空:not null与这两者有关的查询:is null 和 is not null不能直接做 = null 或者 != nullnvl(a,b) 空值替换函数,如果a为空,则返回b,如果a不为空,则返回a
*/
-- 6.1 查找出emp表中所属经理(MGR)为空的职工的有关信息
select * from scott.emp where mgr is null; -- 正确写法
-- 需要注意到错误的写法
-- select * from scott.emp where mgr = null;
-- select * from scott.emp where mgr != not nul;-- 6.2 查找emp表中奖金为空的记录
select * from scott.emp where comm is null;-- 6.3 查找出emp表中奖金不为空的记录
select * from scott.emp where comm is not null;-- 6.4 查找emp表中奖金不为空(有奖金的情况下)出现为0的情况
select * from scott.emp where comm > 0;
-- 同时键入大于0且不为空
select * from scott.emp where comm is not null and comm > 0;-- nvl(a,b) 空值替换函数,如果a为空,则返回b,如果a不为空,则返回a-- 6.5 查询奖金,奖金为空返回0,奖金为空返回1,不为空的返回本体comm
select comm,nvl(comm,0),nvl(comm,1) from scott.emp;-- 6.6 查询emp表中,奖金comm不为0的
-- 这里如果comm是null,那么就返回0,但是0又<>0,所以获取到的是非0的值
select * from scott.emp where nvl(comm,0) <> 0;-- 6.7 查找emp表中没有奖金的记录(注意奖金为0的情况)
-- 写法1、
select * from scott.emp where comm is null or comm = 0;
-- 写法2、
select * from scott.emp where nvl(comm,0) = 0;-- 6.8 在emp表中查询工资+奖金之和大于1000的记录
-- 写法1、
select emp.*,sal+nvl(comm,0) from scott.emp where (sal + nvl(comm,0)) > 1000;-- 6.9 一个有效值 + 空值,返回的数据类型:null
select sal,comm,sal+comm from scott.emp;
-- 一个有效值+空值返回的类型是空值,这个时候需要对null值进行nvl处理
select sal,comm,sal+comm,sal+nvl(comm,0) from scott.emp;
七、排序
/*七、排序 order by语法: oorder by 列名(表达式)asc -- 默认,表示升序,从小到大,可省略desc -- 表示降序,从大到小 随机排序,校验数据时使用 -- 也使用到random.value(排序时,若一列的值相同,则以下一列做判断)(排序时,可用表达式、别名)(排序时,要考虑空值的情况,如果不处理空值,则空值的记录会影响排序)升序排列时空值会排在最后,降序时排在最前如果在排序中有多个排序,在order by 列1 排序,列2 排序... 即可
*/
-- 7.1 找出工资大于800的职员并按照工资高低排序
select * from scott.emp where
sal > 800 and job = 'CLERK'
-- 升序排序
order by sal;
;-- 7.2 找出工资大于800的职员 和 工资大于900的职员,并按工资升序,雇员编号降序
select * from scott.emp where
(sal > 900 and job = 'CLERK')
or
(sal > 900 and job = 'SALESMAN')
-- 工资升序
order by sal,empno desc;
;-- 7.3 找出工资增加500以后大于1500的信息并按增加后的工资降序雇员编号升序排列
select emp.*,nvl(sal,0)+500 as sal1 from scott.emp where
nvl(sal,0)+500 > 1500
-- 排序
order by sal1 desc,empno;
;-- 7.4 找出工资增加500后大于1500的信息 并按 奖金降序,雇员编号升序排列
select emp.*,nvl(sal,0)+500 as sal1 from scott.emp where
nvl(sal,0)+500 > 1500
-- 排序
order by nvl(comm,0) desc,empno;
;-- 7.5 随机排序 --
select * from scott.emp order by dbms_random.value();
八、以上相关练习
/*八、课时相关练习
*/
--1、查询emp表中所有记录按照部门号升序,员工编号降序排列
select * from scott.emp
--排序
order by deptno,empno desc;
;--2、计算每个员工的年度总报酬,并按总报酬由高到低顺序显示 (nvl空值处理函数)
select emp.*,nvl(sal,0) * 12 as sumSal from scott.emp
-- 排序
order by sumSal desc;
;--3、查找出工资高于1000元的职工的姓名、工种、工资和部门号,并按部门号由小到大排序显示
select ename,job,sal,deptno from scott.emp
where
nvl(sal,0) > 1000
order by deptno;
;--4、查找出奖金超过本人基本工资3%的职工的姓名,工资,奖金,奖金与工资的比例,并按其比例由高到低显示
select
ename,sal,nvl(comm,0),nvl(comm,0)/sal as commSal
from scott.emp
where
nvl(comm,0) > sal * 0.03
order by commSal desc;
;--5、按工种升序,而同工种按工资降序排列显示全部职工的姓名,工种,工资。
select ename,job,sal from scott.emp
order by job,nvl(sal,0) desc;
;--6、查询所有薪水在2000-4000范围内并且部门号是10或(和)30的员工信息
select * from scott.emp
where
nvl(sal,0) between 2000 and 4000;
and
deptno in(10,30)
;--7、查询所有没有奖金的部门不是30员工信息
select * from scott.emp
where
nvl(comm,0) = 0
and
deptno <> 30
;--8、查询所有部门编号是10或30,姓名里面包含A的记录
select * from scott.emp
where
deptno in(10,30)
and
ename like '%A%'
;--9、查询所有20部门并且薪水超过2000的姓名里面包含ALL的员工的记录
select * from scott.emp
where
deptno = 20
and
nvl(sal,0) > 2000
and
ename like '%ALL%'
;--10、查询年薪超过10000的员工的姓名,编号,薪水,年收入,按照年薪降序排列
select
ename,empno,nvl(sal,0),nvl(sal,0)*12 as sumSal
from scott.emp
where
nvl(sal,0)*12 > 10000;
order by sumSal desc;
;--11、查询入职日期在1981-5-1到1981-12-31至间的所有员工信息
select * from scott.emp
where
hiredate between to_date('1981-05-01','yyyy-mm-dd')
and
to_date('1981-12-31','yyyy-mm-dd')
;--12、找出1981年下半年入职的员工
select * from scott.emp
where
hiredate between to_date('1981-06-01','yyyy-mm-dd')
and
to_date('1981-12-31','yyyy-mm-dd')
;--13、要求查询基本工资不大于1500,同时不可以领取奖金的雇员信息
select * from scott.emp
where
nvl(sal,0) < 1500
and
nvl(comm,0) = 0
;
九、条件判断
*九、条件判断:case when 语句casewhen 条件判断1 then 条件1为true的时候执行when 条件判断2 then 条件2为true的时候执行when 条件判断n then 条件n为true的时候执行else所有条件都不成立的时候执行end [表示结束,可取别名,可中文]--------------------补充一个 decodedecode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
*/
-- 9.1 emp表中,工资<2000的为C,2000-3000的为B,3000以上为A,其他情况为D
select emp.*,casewhen sal < 2000 then 'C'when sal between 2000 and 3000 then 'B'when sal > 3000 then 'A'else 'D'end "工资等级"
from scott.emp;-- 9.2 emp表中,工资<2000的为C,2000-3000的为B,3000以上为A,其他情况为D -- 一级为一列
select emp.*,case when sal < 2000 then 'C' end "等级C",case when sal between 2000 and 3000 then 'B' end "等级B",case when sal > 3000 then 'A' end "等级A",case when sal is null then 'D' end "等级D"
from scott.emp;-- 9.3 1981年及以前入职的,显示为”老员工“,1982以后入职的,为新员工
select emp.*,case when to_char(hiredate,'yyyy') <= 1981 then '老员工' else '新员工'end "级别"
from scott.emp;-- 9.4 在emp表根据岗位分类,显示如果job是PRESIDENT显示为老板,job是MANAGER为经理,其他是员工
select emp.*,case when job = 'PRESIDENT' then '老板'when job = 'MANAGER' then '经理'else '员工'end 职位from scott.emp;
相关文章:
Oracle-day2:随机函数、innot in、大小写转换、范围查询、日期类型、空值与非空值、排序、条件判断
前提: 1、system账户 2、oracle数据库 3、操控的是scott的emp表 一、随机函数 /* 一、随机函数 */ -- 随机函数:dbms_random.value() select dbms_random.value() from dual;-- 传递参数范围(大于1,小于10) select dbms_rand…...

keepalived
在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是 Nginx。通过其反向代理的能力能够轻松实现负载均衡,当有服务出现异常,也能够自动剔除。但是负载均衡服…...
react-native-gesture-handler 手势的使用
要在React Native项目中使用react-native-gesture-handler,可以按照以下步骤进行设置: 1、首先,在你的React Native项目中安装react-native-gesture-handler。可以使用npm或者yarn命令来安装: npm install react-native-gesture…...
【SA8295P 源码分析】系列文章链接汇总 - 持续更新中
【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中 一、分区、下载、GPIO等杂项相关二、开机启动流程代码分析二、OpenWFD 显示屏模块三、Touch Panel 触摸屏模块四、QUPv3 及 QNX Host透传配置五、Camera 摄像头模块(当前正在更新中...)六、网络…...

springBoot防止重复提交
两种方法, 一种是后端实现,较复杂,要通过自定义注解和AOP以及Redis组合实现 另一种是前端实现,简单,只需通过js,设置过期时间,一定时间内,多次点击按钮只生效一次 后端实现 自定义注…...

lvs-dr模式+keepalived
一,keepalived概述 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器&am…...

[C++]笔记-知识点总结
一.输入密码时候,隐藏密码 用函数getch(),头文件#include<conio.h>输入一个字符时候不会回显,getc会回显实现思路: 输入一个字符,由于不知道密码长度,所以设置为死循环,如果不是回车键,即将该字符添加到存放密码的数组里,顺便打印一个星号,如果输入的为回车键,由于getch…...

1.RabbitMQ介绍
一、MQ是什么?为什么使用它 MQ(Message Queue,简称MQ)被称为消息队列。 是一种用于在应用程序之间传递消息的通信方式。它是一种异步通信模式,允许不同的应用程序、服务或组件之间通过将消息放入队列中来进行通信。这…...
软考高级系统架构设计师系列论文七十三:论中间件在SIM卡应用开发中的作用
软考高级系统架构设计师系列论文七十三:论中间件在SIM卡应用开发中的作用 一、中间件相关知识点二、摘要三、正文四、总结一、中间件相关知识点 软考高级系统架构设计师:构件与中间件技术二、摘要 我曾于近期参与过一个基于SIM卡应用的开发项目,并在项目中担任系统分析的工作…...

【Java架构-包管理工具】-Maven进阶(二)
本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具,在此咱们由浅入深,分三篇文章(Maven基础、Maven进阶、私服搭建)来深入学习Maven,此篇为开篇主要介绍Maven进阶知识,包含坐标、依赖、仓库、生…...
『C语言入门』分支和循环语句
文章目录 引言一、什么是语句?1.1表达式语句1.2赋值语句1.3函数调用语句1.4复合语句1.5空语句1.6控制语句 二、分支语句2.1 if语句2.1.1基本语法2.1.2使用else语句2.1.3嵌套if语句2.1.4多层if-else语句 2.2 switch语句2.2.1基本语法2.2.2示例2.2.3穿透 三、循环语句…...

【给自己挖个坑】三维视频重建(NSR技术)-KIRI Engine
文章目录 以下是我和AI的对话通过手机拍摄物体的视频,再根据视频生成三维模型,这个可实现吗我想开发类似上面的手机应用程序,如何开发呢 看了以上回答,还是洗洗睡吧NSR技术的实现原理是什么呢有案例吗我是名Java工程师,…...
Chrome历史版本下载和Selenium驱动版本下载
Python自动化必备: Selenium驱动版本下载 http://chromedriver.storage.googleapis.com/index.html Chrome浏览器历史版本下载 https://www.slimjet.com/chrome/google-chrome-old-version.php...

联合注入步骤
使用场景: 有回显,可以看到某些字段的回显信息 像下面的有具体的回显信息 一、判断注入位点 在原始的id(参数)的输入后面添加额外的条件 如果and 11 有结果,and10没有结果输出, 就说明我们添加的额外条件…...
后端项目开发:整合redis缓存
因为各种场合比如门户和后台,需要不同的redis配置,我们在common包配置通用的reids配置。 1.新建service目录,建立RedisService服务接口,同时编写工具类实现该接口。 public interface RedisService {/*** 保存属性*/void set(Str…...

美国访问学者签证好办吗?
近年来,随着国际交流与合作的不断深入,许多人对于美国访问学者签证的办理情况产生了浓厚的兴趣。那么,美国访问学者签证到底好办吗?让知识人网小编带您一起了解一下。 首先,美国作为世界上的科研、教育和创新中心之一&…...

Linux之基础IO文件系统讲解
基础IO文件系统讲解 回顾C语言读写文件读文件操作写文件操作输出信息到显示器的方法stdin & stdout & stderr总结 系统文件IOIO接口介绍文件描述符fd文件描述符的分配规则C标准库文件操作函数简易模拟实现重定向dup2 系统调用在minishell中添加重定向功能 FILE文件系统…...
Django主要特点
Django 是一个开源的 Python Web 开发框架,它提供了一系列的工具和功能,帮助开发人员快速、高效地构建 Web 应用程序。 以下是 Django 的一些主要特点: 1. 强大的 ORM(对象关系映射): Django 提供了一个…...

element-ui中的el-table合并单元格
描述: 在写项目的时候有时候会经常遇到把行和列合并起来的情况,因为有些数据是重复渲染的,不合并行列会使表格看起来非常的混乱,如下: 而我们想要的数据是下面这种情况,将重复的行进行合并,使表…...

自组织地图 (SOM) — 介绍、解释和实现
自组织地图 (SOM) — 介绍、解释和实现 一、说明 什么是SOM(self orgnize map)自组织地图,是GNN类似的图神经网络的概念。因为神经网络实质上可以解释为二部图的权重,因此无论GNN还是SOM都有共同的神经网络…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...