Oracle-限制数据与对数据排序

--------第三章 限制数据与对数据排序---------

--选择行的语句关键字where
--找出emp表中所有工作在10号部门的员工
--select from where 顺序from where select 先确定表,再筛选行,再投影列

select * from emp where deptno = 10;

---普通比较运算符
--不等于号 <> 或 !=
-- 找出emp表中岗位为cleck并且工资大于1000的员工
-- 字符串格式的数据要用单引号''括起来

   select * from emp where job = 'CLERK' and sal > 1000;

--比较日期型数据
-- 日期格式同样需要单引号括起来
--找出员工表中入职日期大于1982年1月1日的员工信息
--在oracle数据库中,默认的日期形式是DD-MON-RR DD天数 MON月份
--(需要加上一个'月'字)RR年份的后两位

select * from emp where hiredate > '1982/1/1';---文字与格式字符串不匹配
 select * from emp where hiredate > '01-1月-82';

--- 1.查询职位为SALESMAN的员工编号、职位、入职日期。
select empno,job,hiredate from emp where job = 'SALESMAN';



--- 2.查询1985年12月31日之前入职的员工姓名及入职日期。

select ename,hiredate from emp where hiredate < '31-12月-85';

--- 3.查询部门编号不在10部门的员工姓名、部门编号。

select ename,deptno from emp where deptno <> 10;
select ename,deptno from emp where deptno != 10;
select ename,deptno from emp where deptno != '10';
select ename,deptno from emp where deptno not in '10';
select ename,deptno from emp where deptno not in('10');

--特殊比较运算符
--between...and....找出指定数据是否在某个范围内 是包含边界
--在员工表中找出工资在1500-2500内的员工

select * from emp where sal between 1500 and 2500;
select * from emp where sal >= 1500 and sal <= 2500;

-- in (集合列表) 判断指定数据是否在这个集合当中
-- in 中的元素用,隔开
-- 从emp表中找出岗位为CLARK或SALESMAN或MANAGER 的员工信息

select * from emp where job in('CLERK','SALESMAN','MANAGER');
select * from emp where job = 'CLERK' or job = 'SALESMAN' or job = 'MANAGER';

--1.查询入职日期在82年至85年的员工姓名,入职日期。

select ename,hiredate from emp
where hiredate between '01-1月-82' and '31-12月-85';

--2.查询月薪在3000到5000的员工姓名,月薪。

select ename,sal from emp
where sal between 3000 and 5000;

--3.查询部门编号为10或者20的员工姓名,部门编号。

select ename,deptno from emp
where deptno in(10,20);

--4.查询经理编号为7902, 7566, 7788的员工姓名,经理编号。

select ename,mgr from emp
where mgr in(7902,7566,7788);

-- like(模糊匹配);
-- 跟Like搭配的有两个通配符
-- % 表示0个或多个任意字符
--_ 表示一个任意字符
--找出emp表中名字首字母为s开头的员工

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

-- 找出emp表中名字的第二位为M的员工信息

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

-- is null 运算符
--找出员工表中没有奖金的员工

select * from emp where comm is null;

--1.查询员工姓名以W开头的员工姓名。

select ename from emp where ename like 'W%';

--2.查询员工姓名倒数第2个字符为T的员工姓名。

select ename from emp where ename like '%T_';

--3.查询奖金为空的员工姓名,奖金。

select ename,comm from emp where comm is null;

--逻辑运算符
--and 并且
--找出员工表中岗位为CLERK并且部门为20员工信息

select * from emp where job = 'CLERK' and deptno = 20;

--or 或者
--找出员工表中岗位为CLERK或者部门为20员工信息

select * from emp where job = 'CLERK' or deptno = 20;



--not 非
--not 可以跟以上4个特殊比较运算符搭配
--not between...and....
-- 找出员工工资不在1500-2500范围内的员工

select * from emp where sal not between 1500 and 2500;

--not in

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

--not like
--在员工表现中找出名字首字母不为S的员工信息

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

--is not null
--找出员表中奖金不为空的员工信息

select * from emp where comm is not null;

--and跟or执行顺序 and 先执行 or 后执行
--找出员工表中岗位为CLERK或者SALESMAN并且工资大于1500的员工

select * from emp 
where (job = 'CLERK' or job = 'SALESMAN') and sal > 1500;

select * from emp 
where job in('CLERK','SALESMAN') and sal > 1500;

--优先级顺序不用强行背,需要先执行的语句用括号
--括起来就行咯。。括号是万能的。。
--1.查询工资超过2000并且职位是MANAGER,
--或者职位是SALESMAN的员工姓名、职位、工资

select ename,job,sal from emp
where (sal > 2000 and job = 'MANAGER') or job = 'SALESMAN';

--2.查询工资超过2000
--并且职位是 MANAGER或SALESMAN的员工姓名、职位、工资。

select ename,job,sal from emp
where sal > 2000 and (job = 'MANAGER' or job = 'SALESMAN');

--3.查询部门在10或者20,
--并且工资在3000到5000之间的员工姓名、部门、工资。

select ename,deptno,sal from emp
where deptno in(10,20) and sal between 3000 and 5000; 

--4.查询入职日期在81年,
--并且职位不是SALES开头的员工姓名、入职日期、职位。

select ename,hiredate,job from emp
where hiredate
between '01-1月-81' and '31-12月-81' and job not like 'SALES%';

--5.查询职位为SALESMAN或MANAGER,
--部门编号为10或者20,姓名包含A的员工姓名、职位、部门编号。

select ename,job,deptno from emp
where job in('SALESMAN','MANAGER') and deptno in(10,20) 
and ename like '%A%';

--对数据做排序
--order by
--语法:order by 列名 排序规则(asc 升序(默认) desc 降序)
--order by 放到整个语句的最后面
--找出员工表中全部员工的工资,并且 按照升序排序

select ename,sal from emp order by sal asc;
select ename,sal from emp order by sal;--默认是升序的

--降序

select ename,sal from emp order by sal desc;

--根据字符类型的列(根据字典序来排序a-z,如果字符串第一位一样的话,
--会根据第二位来进行排序);

select * from emp order by ename desc;

--按照日期排

select * from emp order by hiredate;

--按照多列排序
--先会对第一列先排序,然后第二列在第一列的重复的段落中再排序

select * from emp order by ename,job;
select * from emp order by sal,deptno;

--order by 子句后列名可以用数字来代替
-- 数据表示 的是select语句中列的位置

select sal,hiredate from emp order by 2;

--•1.查询部门在20或30的员工姓名,部门编号,并按照工资升序排序。

select ename,deptno from emp 
where deptno in(20,30) order by sal;

--•2.查询工资在2000-3000之间,部门不在10号的员工姓名,部门编号,工资,并按照部门升序,工资降序排序。

select ename,deptno,sal from emp
where sal between 2000 and 3000 and deptno not in(10) order by deptno,sal 
desc;

--•3.查询入职日期在82年至83年之间,职位以SALES或者MAN开头的员工姓名,入职日期,职位,并按照入职日期降序排序。

select ename,hiredate,job from emp
where hiredate between '01-1月-82' and '31-12月-83' and job 
in('SALES%','MAN%') order by hiredate desc;

--•1.查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名、入职时间、职位。

select ename,hiredate,job from emp
where hiredate > '09-7月-82' and job not in('SALESMAN');

--•2.查询员工姓名的第三个字母是a的员工姓名。

select ename from emp
where ename like '__A%';

--•3.查询除了10、20号部门以外的员工姓名、部门编号。

select ename,empno from emp
where deptno not in(10,20);

--•4.查询部门号为30号员工的信息,先按工资降序排序,再按姓名升序排序。

select * from emp
where deptno = 30 order by sal desc,ename asc;

--•5.查询没有上级的员工(经理号为空)的员工姓名。

select ename from emp
where mgr is null;

--•6.查询工资大于等于4500并且部门为10或者20的员工的姓名\工资、部门编号。

select ename,sal,deptno from emp
where sal >= 4500 and deptno in(10,20);

分割线


博主为咯学编程:父母不同意学编程,现已断绝关系;恋人不同意学编程,现已分手;亲戚不同意学编程,现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏,金额不限。。。

你可能感兴趣的:(Oracle-限制数据与对数据排序)