2.条件查询

1.排序查询 order by

定义:将查询结果按照一定的规则排序

语法:

select *|列|函数|常量|计算表达式 ----3

from 表名 ---1

where 过滤条件 ----2

order by 排序的内容 [asc]|desc; --asc:升序排序 desc:降序排序 ----4

nulls first --可以控制空值放在首位

nulls last --可以控制空值放在末位

select * from emp order by comm desc nulls last;

例题:

1-查询20号部门的员工姓名,工资,年薪,并且按照年薪降序排序

select ename,sal,(sal+nvl(comm,0))*12 
from emp where deptno=20 order by  (sal+nvl(comm,0))*12 desc;

select ename,sal,(sal+nvl(comm,0))*12 as "年薪" 
from emp where deptno=20 order by  年薪 desc;  --用别名排序

2-查询emp表中的员工信息,结果按照奖金升序展示

select * from emp order by comm asc; ---null 默认最大

查询emp表中的员工信息,结果按照奖金降序展示

select * from emp order by comm desc; ---null 默认最大

3.查询员工信息表中部门编号是10或者部门编号是20,并且岗位是经理的,并且入职日期早于1982/01/01的员工编号、员工姓名,工资,年薪,并且按照部门编号和年薪降序排序

select empno, ename, sal, (sal + nvl(comm, 0)) * 12 as 年薪
  from emp
 where deptno in (10, 20)
   and job = 'MANAGER'
   and hiredate < to_date('1982-01-01', 'yyyy-mm-dd')--日期的比较
 order by deptno desc, 年薪 desc;

select empno, ename, sal, (sal + nvl(comm, 0)) * 12 as 年薪
  from emp
 where (deptno =10 or deptno=20)
   and job = 'MANAGER'
   and hiredate < to_date('1982-01-01', 'yyyy-mm-dd')
 order by deptno desc, 年薪 desc;

2-条件查询 where

定义:按照一定的规则或者条件 过滤掉不需要的数据(不符合条件的数据)

语法:

select *|列名|函数|常量|计算表达式 ----3.将满足条件的数据检索并展示出来

from 表名 表别名 ---1 找到某张表

where 过滤条件; ---2 数据要满足过滤条件

3.常见数据类型

1.数值型(数字型): number 靠右

number(4) --数字代表数据精度,存储数据的长度

number(7,2)--7 代表整个数据的长度,2代表的小数位的长度

number --默认38位

2.字符型:varchar2 靠左

varchar2--是oracle中特有的字符数据类型,可变长度字符串,指数据存储的时候,按照实际长度来存储

char --固定长度的字符类型

varchar2(10) ---10是数据的最大存储长度,如果实际只有5位,按照实际长度5位来存储

char(10) ---10是数据的最大存储长度,如果实际只有5位,

--即长度达不到定义的长度,则右侧以空格填充,长度固定达到10

varchar --标准sql中的可变长度字符类型

注意:where enme='张三' ;字符型数据需要加单引号,即数据为字符型常量数据。

3.日期型:date 后边有一个小箭头

select * from emp where hiredate=to_date('1981-2-20','yyyy-mm-dd');

转变数据类型为日期,否则会报错,数据类型不一致。逻辑运算两边的数据类型要保持:

to_date(参数1,参数2) 将字符型数据转为日期型数据

参数1:要转换的内容(字符型数据)

参数2:日期格式

select to_date('1982','yyyy') from emp; ---获取数据库所在服务器上的时间中的所在月的第一天

4.过滤条件

1.逻辑运算 等于:= 不等于:!=,<>,>,<,>=,<= 。and or

2.包含查询 in 和 not in

3.范围查询 between and边界值可以取到

4.模糊查询 like 和 not like %未知符 _占用符(占用一个位置)

5.null 判断 is null 和 is not null

6. any 和 all

1.逻辑运算

逻辑运算符:=,不等于:!=,<>,>,<,>=,<=

条件之间的逻辑运算符:and: 并且 和(与) and 两边连接的条件必须同时满足

or: 或者 或 or两边连接的条件满足其一即可

and 和 or 同时存在,优先运算and,

优先级: and>or 括号可以改变优先级

2.包含查询 in

in(集合) ---在集合里即满足条件

not in(集合) --不在集合里即满足条件

集合:同一类型数据的组合

3.范围查询 between and

between m and n m<n ---在m和 n 之间,边界值可以取到 等价 >=m and <=n

not between m and n m<n --不在m和n 之间 等价于 <m or >n

4.模糊查询 like

like 像,匹配

not like 不像 不匹配

% 通配符 --未知位数的未知字符

_ 占位符 --只占一位的未知字符

例:询姓名中包含字母S的员工信息

select * from emp where ename like '%S%';

5. null 判断

is null --为空

is not null --不为空

6. any 和 all

any 任意

all 所有 全部

any(集合) --满足集合任意一个即满足条件

all(集合) --满足集合中所有值 即满足条件

>any()大于集合中的最小值

<any()小于集合中的最大值

>all()大于集合中的最大值

<all() 小于集合中的最小值

select * from emp where deptno >any(24,34,45,78);

select * from emp where deptno >all(3,4,9,10);

练习

条件查询作业:

--1.查询除职位为SALESMAN的 其他职位的员工信息

select * from emp where job != 'SALESMAN';

select * from emp where job not in ('SALESMAN');

--2.查询名字的倒数第三个字母是O的员工信息

select * from emp where ename like '%O__';

--3.查询工资范围不在2000 到3000的员工信息(两种方法)

select * from emp where sal not between 2000 and 3000;

select * from emp where sal <2000 or sal >3000;

--4.查询名字以S开头倒数第二个字母是T, 且工资是1000, 并且属于10号部门的员工信息

select * from emp where ename like 'S%T_' and sal = 1000 and deptno = 10;

--5.查找姓名总共有5位且首字母是A的员工信息

select * from emp where ename like 'A____';

--6.查找姓名是以A开头且倒数第二位是M 的员工信息

select * from emp where ename like 'A%M_';

--7.查询入职日期晚于1981-4-02日且早于1984-3-19日的员工信息

select * from emp where hiredate>to_date('1981-4-02','yyyy-mm-dd') and hiredate<to_date('1984-3-19','yyyy-mm-dd');

select *

from emp

where hiredate between to_date('1981-4-02', 'yyyy-mm-dd') and

to_date('1984-3-19', 'yyyy-mm-dd')

and hiredate != to_date('1981-4-02', 'yyyy-mm-dd') and hiredate != to_date('1984-3-19', 'yyyy-mm-dd');

select *

from emp

where hiredate between to_date('1981-4-02', 'yyyy-mm-dd') and

to_date('1984-3-19', 'yyyy-mm-dd')

and hiredate not in (to_date('1981-4-02', 'yyyy-mm-dd'),

to_date('1984-3-19', 'yyyy-mm-dd'));

--8.查询薪资低于1300的员工的部门、岗位及入职日期

select deptno,job,hiredate from emp where sal<1300;

--9.查询属于10号或者30号部门的员工信息,或者工资>3000的员工信息

select * from emp where deptno in(10,30) or sal>3000;

select * from emp where deptno = 10 or deptno = 30 or sal > 3000;

--10.找出奖金高于工资的员工

select * from emp where comm>sal;

--11.显示不带有"R"的员工的姓名

select ename from emp where ename not like '%R%';

排序查询作业:

--1.查询员工姓名、岗位及薪资,并将查询结果按薪资升序排列

select ename,job,sal from emp order by sal asc;

--2.查询员工姓名、岗位及部门编号,并将查询结果按部门编号降序排列,若部门编号相同,则按员工编号降序排列

select ename,job,deptno from emp order by deptno desc,empno desc;

--3.查询员工编号、姓名、薪资、部门编号,按部门升序及薪资降序排列

select empno,ename,sal,deptno from emp order by deptno asc,sal desc

--4.查询除20号部门外,员工编号、姓名、薪资、部门编号,按部门升序、薪资升序、员工编号降序排列

select empno,ename,sal,deptno from emp where deptno<>20 order by deptno asc,sal asc,empno desc;

--5.查询员工姓名、薪资、奖金、薪资奖金合计,按薪资奖金合计值升序排列,薪资奖金以"总计"二字显示

select ename, sal, nvl(comm, 0), (sal + nvl(comm, 0)) as"总计"

from emp

order by 总计 asc;

--6.统计员工姓名及员工资历,并按资历排序,将老员工排在前,新员工排在后

--(老员工:80年及以前;新员工:81年及以后)

select ename,hiredate from emp order by hiredate asc;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值