
Oracle查询
发布日期:2021-05-08 01:12:10
浏览次数:16
分类:精选文章
本文共 2733 字,大约阅读时间需要 9 分钟。
Oracle SQL 查询技巧指南
1. NVL() 函数处理 NULL 值
在 SQLPlus 客户端工具中,查询结果中可能会出现 NULL 值,且 NULL 不会被显示。为了解决这一问题,可以使用 NVL()
函数来替代 NULL 值。NVL(a, b)
的作用是:如果 a
是 NULL,则返回 b
;如果 a
不是 NULL,则返回 a
的值。
示例:
select empno "编号", ename "姓名", hiredate "入职时间", sal "月薪", sal * 12 "年薪", sal * 12 + NVL(comm, 0) "年收入" from emp;
2. 列别名的使用
在 SQL 查询中,可以通过在列名后面添加别名来更方便地展示结果。别名可以使用大小写,且可以省略 AS 关键字。以下是两种格式的示例:
格式一:
select empno AS "编号", ename AS "姓名", sal "月薪" from emp;
格式二:
select empno AS 编号, ename AS 姓名, sal 月薪 from emp;
注意事项:
- 不加双引号的别名不能有空格。
- 加了双引号的别名可以有空格。
- 在 Oracle 中,单引号表示字符串类型或日期类型,因此只能使用双引号。
示例:
select empno AS "编号", ename AS "姓名", sal "月薪" from emp;
3. 字符串连接符 ||
在 Oracle 中,可以使用 ||
字符串连接符来拼接字符串。需要注意的是,Oracle 的 from
关键字是必须写的。以下是两个示例:
查询 "hello world":
select 'hello' || ' world' "结果" from dual;
拼接薪水信息:
select ename || '的薪水是' || sal || '美元' from emp;
4. 获取当前时间
要获取系统当前时间,可以使用 sysdate
函数。默认情况下,Oracle 只会显示日期部分,格式为 YYYY-MM-DD
。
示例:
select sysdate from dual;
5. 范围查询
查询薪水在 1300 到 1600 之间的员工(包括 1300 和 1600):**
select * from emp where sal between 1300 and 1600;
查询薪水不在 1300 到 1600 之间的员工(不包括 1300 和 1600):**
select * from emp where sal not between 1300 and 1600;
查询入职时间在 "1981-2月-20" 到 "1982-1月-23" 之间的员工:**
select * from emp where hiredate between '20-2月-81' and '23-1月-82';
注意事项:
- 对于数值型,较小的数值在前。
- 对于日期型,较大的年份在前。
6. 转义处理
插入含有特殊字符的姓名
- 如果要插入姓名为 "T_IM" 的员工,可以直接使用以下查询:
insert into emp(empno, ename) values (1111, 'T_IM');
- 如果要查询含有
_
的姓名,可以使用like
函数并加上转义符:
select * from emp where ename like '%\_%' escape '\';
- 如果要插入一个名为 '' 的员工,可以使用以下查询:
insert into emp(empno, ename) values (2222, '''''');
- 如果要插入一个名为 '' 的员工,可以使用以下查询:
insert into emp(empno, ename) values (2222, ''''''');
7. is null 和 is not null
查询佣金为 NULL 的员工:
select * from emp where comm is null;
注意事项:
null
不能参与=
运算。null
可以参与number
、date
、varchar2
类型的运算。
查询佣金为非 NULL 的员工:
select * from emp where comm is not null;
8. in 运算
查询工资为 1500、3000 或 5000 的员工:
select * from emp where sal in (1500, 3000, 5000);
按工资排序查询员工:
select * from emp where sal in (1500, 3000, 5000) order by decode(sal, 1500, 1, 3000, 2, 5000, 3);
9. 不等于运算
查询工资不等于 1500 的员工:
select * from emp where sal != 1500;
查询职位是 "MANAGER" 或职位不是 "ANALYST" 的员工:
方式一:
select * from emp where (job='MANAGER') or (job != 'ANALYST');
方式二:
select * from emp where (job='MANAGER') or (not(job='ANALYST'));
10. order by 排序
按入职时间降序排序:
select empno, ename, sal, hiredate, sal*12 "年薪" from emp order by hiredate desc;
按年薪降序排序:
select empno, ename, sal, hiredate, sal*12 "年薪" from emp order by "年薪" desc;
按表达式排序:
select empno, ename, sal, hiredate, sal*12 "年薪" from emp order by sal*12 desc;
按列号排序(从 1 开始):
select empno, ename, sal, hiredate, sal*12 "年薪" from emp order by 5 desc;
以上内容可以根据实际需求进行调整和扩展。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月07日 14时45分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Vue学习—深入剖析函数式组件
2019-03-05
简单Makefile的编写
2019-03-05
使用BAT批处理 匹配查找指定文件夹,并在当文件夹下创建空文件
2019-03-05
wxpython的Hello,World代码探索
2019-03-05
【数字图像处理】OpenCV3 学习笔记
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
KeepAlived介绍、配置示例、KeepAlived配置IPVS、调用脚本进行监控
2019-03-05
【Numpy学习】np.count_nonzero()用法解析
2019-03-05
Scala集合-数组、元组
2019-03-05
Flink Standalone集群安装和部署
2019-03-05
JAVA网络爬虫01-http client爬取网络内容
2019-03-05
04 程序流程控制
2019-03-05
java并发编程(1)
2019-03-05
C++&&STL
2019-03-05
双指针算法思想
2019-03-05
分组背包问题
2019-03-05
子集(LeetCode 78)
2019-03-05
旋转数组的最小值
2019-03-05