oracle数据库:select基本语法简单查询
Posted 谦谦均
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库:select基本语法简单查询相关的知识,希望对你有一定的参考价值。
这里介绍一下select基本结构和简单查询
1,select
结构
select 字段名 from 表名 条件
用文字描述就是通过什么条件在哪个表里面查询哪个字段的信息。
在进行查询操作之前,先看看提前准备的数据表:
这个数据来源于:点我获取上表数据
我使用的客户端是PLSQL
,没有客户端的直接用cmd
界面操作也行,只是看不到可视化界面而已,实际效果不影响,在PLSQL
里面:
文件-->新建-->SQL窗口
打开命令行界面
2,简单查询:
2.1,查询所有信息:
select * from student;
*
表示查询所有信息,sql
语句以;
结尾,不写容易报错
2.2,查询表中某个字段的信息,比如age
:
select age from student;
在PLSQL
运行的时候要选中某一行sql代码运行,不然会直接运行整个sql
界面的语法。
如上图所示,查询结果只显示age
的,表中age
是大写的,因为oracle
数据库语法不区分大小写,且默认是大写的,不过要注意的是,数据是区分大小写的。
2.3,查询表中多个字段的数据:
select name,math from student;
查询结果如下图所示,查询多个字段的时候,字段之间用英文逗号隔开,并且查询结果是根据字段的前后顺序展示的,比如这里name
在前,math
在后,那么查询的结果也是这个顺序,可以根据这个规律自行调整查询结果的字段显示顺序。
3,去重、别名和排序
3.1 去重
目标:查询所有的数学成绩【重复的成绩只显示一个】:
select math from student;
结果如下图所示:
可以发现查询的结果之中出现了重复的数据,要去掉这些重复的数据,需要用到关键字distinct
,语法:select distinct math from student;
,结果如下图所示:
可以看到查询的数据中并没有重复的数据了。当然,如果多个字段去重,必须多个字段全部相同才能去重。select distinct math,english from student;
,这里查询英语和数学成绩并且去重:
这里可以看到查询到了所有的数据,虽然单个math
或者english
有相同的成绩,但是math+english
不是完全一样的,可以看出去重是针对一条数据记录完全相同才会生效。
3.2、 起别名
方法1:直接在字段后面接别名的名称
例子,查询name和math字段,并且给字段起别名为姓名,数学成绩:select name 姓名,math 数学成绩 from student;
,可以看到下图所示结果,查询的数据名称变成了我们设置的名称
方法2:使用as关键字,然后接别名名称
语法:select name as 姓名,math as 数学成绩 from student;
,结果如下图所示:
可以看到跟刚才效果一样,这两种都可以实现,第一种更简单而已。
3.3,排序
例子:查询所有内容并且按照年龄字段从高到低排序:select * from student order by age desc;
,其中desc
表示降序排序,升序排序的关键字为asc
,order by
后面接排序的标准,这里以年龄为排序的标准。结果如下图所示:
可以看到年龄是降序排序的,升序排序只需要把desc
关键字换成asc
即可。
可以发现相同年龄的,数学成绩并不一样,可以在这个基础上,根据数学成绩再次排序:
select * from student order by age asc,math desc;
这句sql
的意思是查询表中所有内容,其中以age
为排序标准进行升序排序,如果age
相同的时候,以math
成绩进行降序排序,结果如下图所示:
这里要注意,只有第一个字段相同的时候,才会执行第二个字段。如果排序关键字没有写,则默认是asc
升序排序。
4、伪列和虚表
4.1 伪列和表达式
说明:查询不存在的列就是伪列,当需要的结果不能直接从表中得到,需要经过计算来展示则可以使用伪列+表达式
来实现
来看一个例子:
select name,math,1 from student;
这句语法里面要查询字段名字为1
的内容,实际上表里面并没有这个字段。
如上图所示,表里面并没有1
这个字段,但是查询的时候自动拼接在了结果集后面,这种在原表里面并不存在的列,就叫做伪列。
接下来做一个例子,查询学生的姓名,年龄,以及平均分,(math+english)/2
当成平均分,因为表中没有平均分这个字段,所以需要用伪列来实现这个。
select name,age,(math+english)/2 平均分 from student;
这里增加一行伪列,并且给伪列起了别名叫做平均分
,结果如下图所示
如果不起别名,默认伪列名为字段的样子,这里就是(math+english)/2,并且是英文大写的样式,这里不展示。
4.2,null处理
在进行数据处理的时候,比如加法,如果有一方为null
,则结果是null
,按照正常逻辑来想,加法如果一方为空,应该默认它的值是0
,比如88+null=88
,这是我们希望的。因为我的数据都设置了not null
,就不展示具体图,只记录一下处理方法:nvl():处理null值的方法,可以传两个参数。
例如nvl(math,res)
,表示如果math
成绩不是空,就返回math
原本的值,如果为null
值,就返回res
这个值,比如把res
设置为0
。
上图是网上找的一个例子图片。
在进行升序或者降序排序的时候,也会遇到null
的问题,比如进行降序排序的时候,如果有null
值,null
值会在最上面,然后再进行降序排序,比如下图【网图例子】
但是我们就想让null
值在最下面,怎么办呢?
可以使用nulls first
/ nulls last
来实现控制
顾名思义,nulls first
就是null
值排在前面,nulls last
就是排在后面。
4.3,字符串拼接
这里进行拼接的内容可以是数字或者字符,拼接符号为:||
例子:查询学生的姓名,姓名后面拼接一个a
,这个起别名叫做a名字
:
select name,name||'a' a名字 from student;
这个a名字
列其实是一个伪列,结果如下图所示:
这里有个小的注意点,sql
里面字符要用单引号,双引号会报错。
当然还能进行其他的拼接,这里不一 个个展示了,有必要说一下如果拼接的对象有一方是null
值,则自动变成一个空的内容,比如name||null
结果是name
,如下图【网图例子】
4.4,虚表:
oracle
里面有一个虚表叫做dual
,是用来构成select
的语法规则,oracle
保证dual
里面永远只有一条记录。该表只有一行一列,它和其他表一样,可以执行插入、更新、删除操作,还可以执行drop
操作,但是千万别随便drop
表,否则会使系统不能用,起不了数据库【这是只能重新安装】。dual
主要用来选择系统变量或者是求一个表达式的值。如果我们不需要从具体的表来取得表中的数据,而是单纯的得到一些我们想要的信息,并且要通过select
来完成时,就要借助一个对象,这个对象就是dual
。
select * from dual;
结果如下图所示:
我们还能借助虚表来计算一些数值,比如计算999*666
:
select 999*666 from dual;
结果如下所示:
但是如果我们查询dual
表中的数据,会发现里面的值并没有改变:
简单查询小总结:
查询表中所有记录: select * from 表名;
查询某些字段的记录:select 字段1,字段2... from 表名;
去重: distinct
别名:字段 别名
,字段 as 别名
伪列:表达式,例如(math+english)/2
排序:order by desc
,默认为order by asc
null处理:nvl(exp,res)
字符串拼接:name||age
nulls:nulls first
,nulls last
语法解析顺序:
select ... from ... order by
- 首先找到
from
后面这张表,知道要从哪里找数据 - 然后执行
select
,知道要从表里面找哪些数据 - 然后才是
order by
,对结果集进行排序。
根据这个原理,最后来看一个例子:
select name,age,(math+english)/2 平均分 from student order by (math+english)/2 desc;
这个语法是查询平均分并且按照降序排序
上图是结果,思考一下,如果先执行了from student
和select ...
语句,那么是不是别名已经生效了,这时候order by
后面是不是可以接别名:
select name,age,(math+english)/2 平均分 from student order by 平均分 desc;
看看结果:
如上图所示,确实可以这样操作,而是也验证了sql
语句的执行顺序。
以上是关于oracle数据库:select基本语法简单查询的主要内容,如果未能解决你的问题,请参考以下文章