Oracle数据库-第二章:排序和限制查询

1.排序:所谓排序,就是根据某个字段的值按照升序或者降序的情况将记录查询出来

语法:

select col_name,...

from tb_name

order by col_name [asc|desc],...

注意:1.排序使用order by字句,该子句只对查询记录显示调整,并不改变查询结果,所以执行权最低,即最后执行。

2.排序关键词:

asc:升序(默认,默认的意思是不加关键词的时候默认为生序排序)

desc:降序

3.如果有多个列排序,后面的列排序的前提是前面的列排好序以后有重复(相同)的值。

 

例子:

id        id2

1        2

2        3

3        4

4        1

4        2

 

语句:

select id,id2

from test

order by id,id2 desc;

 

结果:

id        id2

1        2

2        3

3        4

4        2

4        1

注意:先排第一列,如果第一列有重复的值再排第二列,以此类推

需求:查看员工的id,名字和薪资,按照薪资的降序排序显示。

 

4.order by 后面还可以跟数字,表示使用select后面的第几个列进行排序

例如:

//使用last_name列进行排序

select last_name,salary

from s_emp

order by 1;

 

//使用salary列进行排序

select last_name,salary

from s_emp

order by 2;

 

2.限制查询,即指定查询条件进行查询 行

语法:

select col_name,...

from tb_name

where col_name 比较操作表达式

逻辑操作符

      col_name 比较操作表达式

...

注意:

1.限制查询条件,使用where子句

2.条件可以多个,使用逻辑操作符和()进行条件的逻辑整合

3.where子句的优先级别最高

4.比较操作表达式由操作符和值组成

常见的操作:

1》逻辑比较操作符

=  >  <  >=  <=

2》不等于:三个都表示不等于的意思(经常用的是!=)

!=   <>   ^=

 

需求:查看员工工资小于1000的员工id和名字

select id,last_name,salary

from s_emp

where salary < 1000;

 

3》sql比较操作符SQL comparison operators

  BETWEEN ... AND...

ØIN(list)

ØLIKE

ØIS NULL

 

between and:在什么范围之内 [x,y]  包含边界值x和y

需求:查看员工工资在700 到 1500之间的员工id,和名字

select id,last_name,salary

from s_emp

where salary between 700 and 1500;

 

也可以在日期列上使用between and操作,但是要看当前session会话的语言环境来决定使用中文格式的日期还是英文格式的日期

alter session set nls_language='simplified chinese';

如果是中文的语言环境:

查询在90年3月8号到91年2月9号之间入职的员工信息

select id,last_name,start_date

from s_emp

where start_date between '08-3月-90' and '09-2月-91';

 

 

alter session set nls_language=english;

如果是英文的语言环境:

查询在90年3月8号到91年2月9号之间入职的员工信息

select id,last_name,start_date

from s_emp

where start_date between '08-MAR-90' and '09-FEB-91';

 

 

in(list):在一个列表中

需求:查看员工号1,3,5,7,9员工的工资

select id,last_name,salary

from s_emp

where id in (1,3,5,7,9);

 

需求:查看是在'08-3月-90'或者'09-2月-91'入职的员工信息

select id,last_name,start_date

from s_emp

where start_date in ('08-3月-90','09-2月-91');

 

需求:查看名字为Ngao或者Smith的员工信息        

select id,last_name,salary

from s_emp

where last_name in ('Ngao','Smith');

 

 

like:模糊查询,即值不是精确的值的时候使用

通配符,即可以代替任何内容的符号

% :通配0到多个字符

_ : 当且仅当通配一个字符

 

转义字符:

默认为\,可以指定 指定的时候用escape 符号指明即可,转义字符只能转义后面的一个字符

需求:查看员工名字以C字母开头的员工的id,工资。

select id,last_name,salary

from s_emp

where last_name like 'C%';

练习:查看员工名字长度不小于5,且第四个字母为n的员工id和工资

         select id,last_name,salary

from s_emp

where last_name like '___n_%';

需求:查看员工名字中包含一个_的员工id和工资

注意:_是一个特殊字符,所以要转义

select id,last_name,salary

from s_emp

where last_name like '%\_%' escape '\';

 

 

   is null:对null值操作特定义的操作符,不能使用=

需求:查看员工提成为空的员工的id和名字

select id,last_name,commission_pct

from s_emp

where commission_pct is null;

 

4》逻辑操作符

当条件有多个的时候使用

and:且逻辑

or: 或逻辑

注意:and逻辑比or逻辑要高

not:非逻辑

  NOT BETWEEN

ØNOT IN

ØNOT LIKE

ØIS NOT NULL

 

需求:查看员工部门id为41且职位名称为Stock Clerk(存库管理员)的员工id和名字

select id,last_name,dept_id,title

from s_emp

where dept_id = 41

and

title = 'Stock Clerk';

练习:查看员工部门为41 或者 44号部门 且工资大于1000的员工id和名字

select id,last_name,dept_id,salary

from s_emp

where salary > 1000

and

    (

dept_id = 41

    or

    dept_id = 44

);

    查看员工部门为41且工资大于1000 或者 44号部门的员工id和名字

select id,last_name,dept_id,salary

from s_emp

where salary > 1000

and

dept_id = 41

or

dept_id = 44;

 

 

需求:查看员工提成不为空的员工的id和名字

select id,last_name,commission_pct

from s_emp

where commission_pct is not null;

 

需求:查看员工名字不是以C字母开头的员工的id和工资。

select id,last_name,salary

from s_emp

where last_name not like 'C%';(必须大写)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值