Oracle学习日记——单表查询(oracle如何查询表)
sinye56 2024-09-27 21:10 8 浏览 0 评论
Oracle学习同样是从单表查询开始,本篇内容主要是Oracle单表查询,主要包括全表查询、模糊查询、返回固定条数、以及返回随机数据。
1.查询表中所有的行和列
select * from 表名 * 表示所有的列
2.从表中检索部分行
select * from 表名 where 条件
eg:查询工资高于3000的员工信息
select * from emp where salary > 3000
3.查找空值
错误示例:查询工资为空的员工信息 select * from emp where salary = null;
错误原因:null 不能用 = 运算符,要用is null
正确写法:select * from emp where salary is null
同理,判断工资不为空: select * from emp where salary is not null;
注:null不支持加、减、乘、除、大小比较、相等比较,否则只能为空;
4.把空值转换为实际值
4.1:coalesce()查询第一个不是空值的值,括号里参数可以有多个
测试用例:
(1)在数据库中创建视图v,创建视图语句如下:
create or replace view v as
select null as c1,null as c2,1 as c3,null as c4,2 as c5,null as c6 from dual
union all
select null as c1,null as c2,null as c3,3 as c4,2 as c5,null as c6 from dual ;
(2)查询视图v
select * from v;
(3)用coalesce()函数查询
select coalesce(c1,c2,c3,c4,c5,c6) as c from v;
比较2和3的查询结果理解coalesce;
4.2:nvl(要转换的列,要转换的值)
nvl()用法举例:把工资是空值的值在查询结果中用0代替
select nvl(salary,0) from emp;
5.查询满足多个条件的行
and 和 or 连接
eg: (1)查询部门编码为10且工资高于3000的员工信息
select * from emp where salary > 3000 and deptno = 10
(2)查询部门编码为10或工资高于3000的员工信息
select * from emp where salary > 3000 or deptno = 10
注意:对于多个条件的组合,要使用括号,这样在更改维护语句是可以不必再考虑优先级问题,而且可以很容易的借助各种
工具找到各组合条件的起止位置。
6.从表中检索部分列
select 列名1,列名2,列名3 from 表名
eg:select name,borndate,salary from emp;
7.为列取有意义的名称
select 列名1 别名1,列名2 别名2,列名3 别名3 from 表名
eg:select name 员工姓名,sex 性别,borndate 生日 from emp;
8.在where子句中引用取别名的列
注意:在where条件中引用取别名的列需要嵌套一层,因为这个别名是在select以后才生效的;
select * from
(select salary 工资,name 姓名 from emp
) x
where 工资 > 3000;
9.拼接列
(1)希望返回的数据是特定格式,比如“张三的工资是3000元”
select name || '的工资是' ||salary || '元' from emp;
|| 把查询的内容拼接起来, 自己手动加的内容是字符串,要用单引号''框起来。
(2)进行批处理的时候可以生成批处理的语句 //不同语句的拼接。
10.在select语句中使用条件逻辑
case when 语句的用法
select name,salary,
case
when salary <=2000 then '过低'
when salary >=4000 then '过高'
else 'OK'
END AS STATUS
from emp;
eg:查询报表统计各个工资段的总人数
select 档次,count(*) as 人数
from (
select (
case
when salary <= 1000 then '0000-1000'
when salary <= 2000 then '1000-2000'
else '工资好高'
end
) as 档次,
name,salary from emp
) group by 档次
order by 1;
11.限制返回的行数
在查询的时候,并不是每次都需要查询所有的数据,比如,在抽查的时候只要求返回两条数据
可以用伪列rownum来过滤,rownum会对返回的每一条数据做一个标识
eg:select * from emp where rownum <= 2;
但是,如果直接用select * from emp where rownum = 2 查询是没有结果返回的
因为,rownum是对返回的数据做标记的,所以,需要把需要的数据返回来,才能进行取值,
select * from
(select rownum as sn,emp.* from emp) where sn = 2;
12.从表中随机返回n条数据
为了防止作假,需要对数据进行随机排序
使用dbms_random来进行随机排序
eg:select name
from (
select empno,name from emp order by dbms_random.value()
) where rownum <=3;
这里为什么要使用嵌套查询?
因为执行顺序的原因,在这个语句里面对数据库有三个操作:查询,生成序号,排序
因为是随机取数,所以我们应该先生成序号,再进行排序,最后取出数据;
如果不进行嵌套,会先取出数据,再进行嵌套,每次取出的结果都一样,达不到随机的效果。
验证方法(该写法错误):
select rownum 排序后,排序前,name 姓名 ran 随机数 from
(
select rownum 排序前,name,dbms_random.value ran
from emp
where rownum <=3
order by ran
);
13.模糊查询
测试用例:
建立视图v
CREATE OR REPLACE VIEW V AS
select 'ABCDEF' as vname FROM DUAL
UNION ALL
SELECT '_BDEFG' as vname FROM DUAL
UNION ALL
SELECT '_BCEDF' as vname FROM DUAL
UNION ALL
SELECT '_\BCEDF' as vname FROM DUAL;
查询包含BCD的信息
select * from v where vname like '%BCD%'
%被称为通配符(替代一个或多个字符)
数据库查询中有两个通配符,% 和 _
二者意思完全相同,
考虑一种情况,查询字符串中包含'_dfgh'的字符串
select * from v where vname like '_dfgh%'
如果正好有字符串为'asdfgh',也会做为查询结果被查询出来,因为系统把'_'作为通配符进行处理
解决方法:使用转义字符
select * from v where vname like '_\dfgh%' escape '\';
使用\对_ 进行了转义,使其不是本来的意思;
对于模糊查询条件中有“%”的处理方法和上面相同;
相关推荐
- 程序员: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 - 安装&配置
-
前提条件#检查是否存在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像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)