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%';(必须大写)