天天看点

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

这里介绍一下select基本结构和简单查询

1,

select

结构

select 字段名 from 表名  条件
           

用文字描述就是通过什么条件在哪个表里面查询哪个字段的信息。

在进行查询操作之前,先看看提前准备的数据表:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

这个数据来源于:点我获取上表数据

我使用的客户端是

PLSQL

,没有客户端的直接用

cmd

界面操作也行,只是看不到可视化界面而已,实际效果不影响,在

PLSQL

里面:

文件-->新建-->SQL窗口

打开命令行界面

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

2,简单查询:

2.1,查询所有信息:

select * from student;

*

表示查询所有信息,

sql

语句以

结尾,不写容易报错

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

2.2,查询表中某个字段的信息,比如

age

PLSQL

运行的时候要选中某一行sql代码运行,不然会直接运行整个

sql

界面的语法。

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

如上图所示,查询结果只显示

age

的,表中

age

是大写的,因为

oracle

数据库语法不区分大小写,且默认是大写的,不过要注意的是,数据是区分大小写的。

2.3,查询表中多个字段的数据:

查询结果如下图所示,查询多个字段的时候,字段之间用英文逗号隔开,并且查询结果是根据字段的前后顺序展示的,比如这里

name

在前,

math

在后,那么查询的结果也是这个顺序,可以根据这个规律自行调整查询结果的字段显示顺序。

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

3,去重、别名和排序

3.1 去重

目标:查询所有的数学成绩【重复的成绩只显示一个】:

结果如下图所示:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

可以发现查询的结果之中出现了重复的数据,要去掉这些重复的数据,需要用到关键字

distinct

,语法:

select distinct math from student;

,结果如下图所示:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

可以看到查询的数据中并没有重复的数据了。当然,如果多个字段去重,必须多个字段全部相同才能去重。

select distinct math,english from student;

,这里查询英语和数学成绩并且去重:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

这里可以看到查询到了所有的数据,虽然单个

math

或者

english

有相同的成绩,但是

math+english

不是完全一样的,可以看出去重是针对一条数据记录完全相同才会生效。

3.2、 起别名

方法1:直接在字段后面接别名的名称

例子,查询name和math字段,并且给字段起别名为姓名,数学成绩:

select name 姓名,math 数学成绩 from student;

,可以看到下图所示结果,查询的数据名称变成了我们设置的名称

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

方法2:使用as关键字,然后接别名名称

语法:

select name as 姓名,math as 数学成绩 from student;

,结果如下图所示:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

可以看到跟刚才效果一样,这两种都可以实现,第一种更简单而已。

3.3,排序

例子:查询所有内容并且按照年龄字段从高到低排序:

select * from student order by age desc;

,其中

desc

表示降序排序,升序排序的关键字为

asc

order by

后面接排序的标准,这里以年龄为排序的标准。结果如下图所示:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

可以看到年龄是降序排序的,升序排序只需要把

desc

关键字换成

asc

即可。

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

可以发现相同年龄的,数学成绩并不一样,可以在这个基础上,根据数学成绩再次排序:

这句

sql

的意思是查询表中所有内容,其中以

age

为排序标准进行升序排序,如果

age

相同的时候,以

math

成绩进行降序排序,结果如下图所示:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

这里要注意,只有第一个字段相同的时候,才会执行第二个字段。如果排序关键字没有写,则默认是

asc

升序排序。

4、伪列和虚表

4.1 伪列和表达式

说明:查询不存在的列就是伪列,当需要的结果不能直接从表中得到,需要经过计算来展示则可以使用

伪列+表达式

来实现

来看一个例子:

这句语法里面要查询字段名字为

1

的内容,实际上表里面并没有这个字段。

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

如上图所示,表里面并没有

1

这个字段,但是查询的时候自动拼接在了结果集后面,这种在原表里面并不存在的列,就叫做伪列。

接下来做一个例子,查询学生的姓名,年龄,以及平均分,

(math+english)/2

当成平均分,因为表中没有平均分这个字段,所以需要用伪列来实现这个。

这里增加一行伪列,并且给伪列起了别名叫做

平均分

,结果如下图所示

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

如果不起别名,默认伪列名为字段的样子,这里就是(math+english)/2,并且是英文大写的样式,这里不展示。

4.2,null处理

在进行数据处理的时候,比如加法,如果有一方为

null

,则结果是

null

,按照正常逻辑来想,加法如果一方为空,应该默认它的值是

,比如

88+null=88

,这是我们希望的。因为我的数据都设置了

not null

,就不展示具体图,只记录一下处理方法:

nvl():处理null值的方法,可以传两个参数。

例如

nvl(math,res)

,表示如果

math

成绩不是空,就返回

math

原本的值,如果为

null

值,就返回

res

这个值,比如把

res

设置为

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

上图是网上找的一个例子图片。

在进行升序或者降序排序的时候,也会遇到

null

的问题,比如进行降序排序的时候,如果有

null

值,

null

值会在最上面,然后再进行降序排序,比如下图【网图例子】

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

但是我们就想让

null

值在最下面,怎么办呢?

可以使用

nulls first

/

nulls last

来实现控制

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

顾名思义,

nulls first

就是

null

值排在前面,

nulls last

就是排在后面。

4.3,字符串拼接

这里进行拼接的内容可以是数字或者字符,拼接符号为:

||

例子:查询学生的姓名,姓名后面拼接一个

a

,这个起别名叫做

a名字

这个

a名字

列其实是一个伪列,结果如下图所示:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

这里有个小的注意点,

sql

里面字符要用单引号,双引号会报错。

当然还能进行其他的拼接,这里不一 个个展示了,有必要说一下如果拼接的对象有一方是

null

值,则自动变成一个空的内容,比如

name||null

结果是

name

,如下图【网图例子】

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

4.4,虚表:

oracle

里面有一个虚表叫做

dual

,是用来构成

select

的语法规则,

oracle

保证

dual

里面永远只有一条记录。该表只有一行一列,它和其他表一样,可以执行插入、更新、删除操作,还可以执行

drop

操作,但是千万别随便

drop

表,否则会使系统不能用,起不了数据库【这是只能重新安装】。

dual

主要用来选择系统变量或者是求一个表达式的值。如果我们不需要从具体的表来取得表中的数据,而是单纯的得到一些我们想要的信息,并且要通过

select

来完成时,就要借助一个对象,这个对象就是

dual

结果如下图所示:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

我们还能借助虚表来计算一些数值,比如计算

999*666

结果如下所示:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

但是如果我们查询

dual

表中的数据,会发现里面的值并没有改变:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

简单查询小总结:

查询表中所有记录:

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

语法解析顺序:

  1. 首先找到

    from

    后面这张表,知道要从哪里找数据
  2. 然后执行

    select

    ,知道要从表里面找哪些数据
  3. 然后才是

    order by

    ,对结果集进行排序。

根据这个原理,最后来看一个例子:

这个语法是查询平均分并且按照降序排序

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

上图是结果,思考一下,如果先执行了

from student

select ...

语句,那么是不是别名已经生效了,这时候

order by

后面是不是可以接别名:

看看结果:

oracle数据库:select基本语法【简单查询】1,select结构2,简单查询:3,去重、别名和排序4、伪列和虚表

如上图所示,确实可以这样操作,而是也验证了

sql

语句的执行顺序。