ORACLE DQL语句

DQL

全称是Data Query Language数据查询语言

注意:后面的查询案例,如无特殊说明,均以系统中存在的emp和dept两个表为例

单表查询的总语句

select1,2,3...列N 或 *(所有列)
--列可以是表中存在的列也可以是经过运算(算术运算、函数运算等)生成的列
from 表名/(表达式) -- 数据池
[where 过滤条件]
[group by 分组内容]
[having 组内条件]
[order by 排序方式]
1、无条件查询
select 字段名,字段名,字段名。。。。。 from 表名;
--查出所有字段的数据
select empno,ename,job,mgr,hiredate,sal ,comm ,deptno from emp;
--使用* *代表所有字段 *只能单独存在
select * from emp;
select emp.* from emp;
--查询姓名
select ename from emp;
--查询姓名和 工资
select ename,sal from emp;

--字段取别名 ()
select ename 姓名,job 职位 from emp;
--别名中有空格或者特殊字符 要使用双引号括起来
select ename "姓  .名"  from emp;
--表取别名
select * from  emp e
select e.* from emp e
2、运算查询

运算产生新的列,同时对原来的列的值进行相应的运算

后面的列可以是表中存在的列,也可以是表达式或者函数运算产生的列

--运算查询-- + - * /
--把每个员工的工资加500
select empno,ename,sal,sal+500 as500后的工资 from emp;
--把每个员工的工资减100
select emp.*,sal,sal-100100的工资 from emp;
--把每个员工的工资加百分之10
select emp.*,sal,sal*1.1 "加百分之10后的工资" from emp;
--把每个员工的工资降一半
select emp.*,sal,sal/2  "降一半后的工资" from emp;
3、比较运算
select 字段名,字段名 from 表名 where 条件
-- 大于 小于 等于 大于或者等于 小于或者等于 不等于
--查询工资大于2500
select ename,sal from emp where sal > 2500;
--查询工资小于3000
select ename,sal from emp where sal < 3000;
--查询工资等于5000
select ename,sal from emp where sal = 5000;
--查询姓名是KING
select ename,sal from emp where ename = 'KING';
--查询职位是CLERK
select * from emp where job = 'CLERK';
--查询部门是30号的员工
select * from emp where deptno = 20;

--查询工资大于等于3000
select * from emp where sal>=3000;
--查询工资小于等于3000
select * from emp where sal<=3000;
--查询工资不等于3000
select * from emp where sal!=3000;
--工资小于3000或者大于3000
select empno,ename,job,sal from emp where sal<>3000

4、逻辑运算
---查询工资大于1000并且职位是 SALESMAN
SELECT * FROM EMP WHERE SAL > 1000 AND JOB = 'SALESMAN';
--查询工资大于1000职位是SALESMAN 并且 绩效大于500
select * from emp where sal > 1000 and job = 'SALESMAN' and comm > 500
--or 满足任意一个即可
--查询部门号是30的 或者 工资大于3000的
select * from emp where deptno = 10 or sal >3000
--查询部门号是30的 或者 工资大于3000的 或者 职位是 SALESMAN
select * from emp where deptno = 30 or sal>3000 or job = 'SALESMAN';
--查询  工资大于1000并且部门是20号 或者  职位SALESMAN
select * from emp where (sal>1000 and deptno =20) or job = 'SALESMAN'

--1. 查出部门是30的并且工资大于2000
SELECT * FROM EMP WHERE DEPTNO=30 AND SAL >2000;
--2. 查出职位是 SALESMAN 并且工资大于1000的
SELECT * FROM EMP WHERE JOB = 'SALESMAN' AND SAL>1000;
--3. 查出职位是 SALESMAN 或者 工资小于3000 的
SELECT * FROM EMP WHERE JOB = 'SALESMAN' OR SAL<3000;
--4. 查出部门是30的 或者 绩效大于300的
SELECT * FROM EMP WHERE DEPTNO=30 OR COMM>300;
--5. 查出工资大于1000并且职位是SALESMAN的  或者 部门是20的员工
SELECT * FROM EMP WHERE (SAL>1000 and JOB='SALESMAN') or deptno = 20;
--6. 查出职位是SALESMAN或者是MANAGER 他们的工资要大于1500
--and优先级要比or要高  多个条件时会优先拼接and两边的条件
select * from emp where (job= 'SALESMAN' or job = 'MANAGER')and sal>1500;
select * from emp where job='SALESMAN' and sal>1500 or job='MANAGER' and sal>1500;

--查出没有绩效的员工
select * from emp where comm is null;
--查出有绩效的员工
select * from emp where comm is not null;

--sal between a and b  大于等于a并且 小于等于b
--sal between 2000 and 5000 大于等于2000并且小于等于5000
--查询工资在2450-5000范围内的员工
select * from emp where sal between 2450 and 5000;
select * from emp where sal>=2450 and sal <=5000;
--查询工资不在2450-5000范围内的员工
select * from emp where sal not between 2450 and 5000;
select * from emp where sal<2450 or sal >5000;

练习

 --例题:查找出全部经理 且 部门为20号部门的有关信息
   select * from emp where job='MANAGER' and deptno=20;
   
   --例题:找emp表中工资小于1000 和 工资大于4000的员工信息
   select * from emp where sal<1000 or sal>4000; 
   
   --例题:查找出全部经理 和 第20号部门职员的有关信息
   select * from emp where job='MANAGER' or (deptno=20 and job='CLERK');
   select * from emp where job='MANAGER' or deptno=20 and job='CLERK';
   
   --例题:找出职位是经理 且 工资大于2000,部门号是20的记录
   select * from emp where job='MANAGER' and sal>2000 and deptno=20;
   
   --例题:查找出全部经理且部门为20号部门的有关信息
   select * from emp where job='MANAGER' and deptno=20;
   
   --例题:查询出全部职员CLERK、分析员ANALYST和推销员SALESMAN的姓名、工种、工资和所在部门号
   select ename,job,sal,deptno from emp where job='CLERK' or job='ANALYST' or    job='SALESMAN';
   
   --查询职位是 MANAGER  SALESMAN  CLERK 的员工
select *from emp where job = 'MANAGER' OR JOB = 'SALESMAN' OR JOB = 'CLERK';
--语法 where 字段 in (值,值,值,值。。。。。。。)
SELECT * FROM EMP WHERE JOB IN ('MANAGER','SALESMAN','CLERK');
--查询职部门号是 10或者 20
--使用or
select * from emp where deptno = 20 or deptno = 30;
--使用in
select * from emp where deptno in (20,30);
--查出部门是20或者10部的  并且工资大于2000
--1
select * from emp where deptno = 10 and sal >2000 or deptno = 20 and sal >2000
--2
select * from emp where (deptno = 10 or deptno=20) and sal >2000;
--3
select * from emp where deptno in(10,20) and sal > 2000;
5、模糊查询

like ,not like

通配符 %代表0~N多个字符,_代表任意一个字符,m%代表m开头 %m%代表包含m %m表示以m结尾

第二位是m _m% 通配符要和like(not like)一起使用

--模糊查询 like, not like
--% 可以匹配零个  一个 或者多个字符
-- _匹配一个字符
--查询姓名以S开头的员工
select * from emp where ename like 'S%';
--查询姓名以T结尾的员工
select * from emp where ename like '%T';
--查询姓名中包含了O的员工
select * from emp where ename like '%O%';
--查询姓名中第二个字母是O的员工
select * from emp where ename like '_O%';
--查询姓名中倒数第二个字母是E的员工
select * from emp where ename like '%E_';

--查询姓张的员工
select * from emp where ename like '张%';
--查询名字中包含了伟 字
select * from emp where ename like '%伟%';
--查询名字中最后一个字是 强
select * from emp where ename like '%强';

--查询姓名是5个字的员工
select * from emp where ename like '_____';

in any some all

--语法   
select * from table WHERE column IN (value1,value2,...)	;
select * from table WHERE column NOT IN (value1,value2,...) ;

-- in some any(满足任意一个)  all(全部满足) 
--查询职位是是CLERK或者是MANAGER 
select * from emp where job ='CLERK' or job ='MANAGER'; -- OR 
select * from emp where job in ('CLERK','MANAGER'); -- in
select * from emp where job = some('CLERK','MANAGER'); -- some 
select * from emp where job = any('CLERK','MANAGER'); --any 
--not in 取in 相反的结果 
select * from emp where job not in ('CLERK','MANAGER'); 
select * from emp where job!='CLERK' and job!='MANAGER';



--all 
select * from emp where sal >all(1000,2000,3000); --大于最大
select * from emp where sal <all(1000,2000,3000); --小于最小

--判断是否是空数据(空值  什么空值  null  空字符 和 0 不算null值  空值不能计算)
 --查询有绩效的员工
 select * from emp where comm is not null;
 --查询没有绩效的员工
 select * from emp where comm is null;

练习

 
   1.查询所有部门编号是1030的员工信息
   select * from emp where deptno=10 or deptno=30;
   select * from emp where deptno in (10,30);
   select * from emp where deptno=any(10,30);
   
   2.查询所有20部门并且薪水超过2000的员工信息:
   select * from emp where deptno=20 and sal>2000;
   
   3.查询所有薪水不在2000-4000范围内的员工信息
   select * from emp where sal<2000 or sal>4000;
   select * from emp where sal not between 2000 and 4000;
   
   4.查询所有部门编号不是10,30的员工信息
   select * from emp where deptno<>10 and deptno!=30;
   select * from emp where deptno not in (10,30);
   
   5、查找出部门号不是30的职位是经理MANAGER的所有信息。
   select * from emp where deptno<>30 and job='MANAGER';
   
   5-1、查找出部门号是30的岗位不是经理MANAGER的所有信息。
   select * from emp where deptno=30 and job<>'MANAGER';  
   
   6、查询出全部秘书、分析员或推销员的姓名、工种、工资和所在部门号
   select ename,job,sal,deptno from emp where job='CLERK' or job='ANALYST' or job='SALESMAN';
   select ename,job,sal,deptno from emp where job in('CLERK','ANALYST','SALESMAN');
   select ename,job,sal,deptno from emp where job=any('CLERK','ANALYST','SALESMAN'); --any和some功能一样
   
   7、查询出工资分别是150025003000的分析员或推销员的姓名、工种、工资和所在部门号
   select ename,job,sal,deptno from emp where sal in (1500,2500,3000) and job in ('ANALYST','SALESMAN');
   select ename,job,sal,deptno from emp where sal=any(1500,2500,3000) and job=any('ANALYST','SALESMAN');   
--练习
--1.查询职位是CLERK或职是KING(用两种方式)
select * from emp where job='CLERK' OR JOB = 'KING';
SELECT * FROM EMP WHERE JOB IN ('CLERK','KING');
--2.查询部位是20或者10部门的员工 并且工资大于2300 (用三种方式)
SELECT * FROM EMP WHERE DEPTNO=20 AND SAL>2300 OR DEPTNO=10 AND SAL>2300;
SELECT * FROM EMP WHERE (DEPTNO=10 OR DEPTNO=20) AND SAL>2300;
SELECT * FROM EMP WHERE DEPTNO IN(10,20) AND SAL>2300;
--3.查询职位不是SALESMAN 也不是CLERK的员工  (用两种方式)
SELECT * FROM EMP WHERE JOB!='SALESMAN' AND JOB!='CLERK';
SELECT * FROM EMP WHERE JOB NOT IN('SALESMAN','CLERK');
--3.查询职位不是SALESMAN 也不是CLERK的员工 并且工资小于3000的 (用两种方式)
SELECT * FROM EMP WHERE (JOB!='SALESMAN' AND SAL<3000) AND (JOB!='CLERK' AND SAL<3000);
SELECT * FROM EMP WHERE JOB!='SALESMAN' AND JOB!='CLERK' AND SAL<3000;
SELECT * FROM EMP WHERE JOB NOT IN('SALESMAN','CLERK') AND SAL<3000;

--OR
select *from emp where job = 'MANAGER' OR JOB = 'SALESMAN' OR JOB = 'CLERK';
--in
SELECT * FROM EMP WHERE JOB IN ('MANAGER','SALESMAN','CLERK');
--SOME 
SELECT * FROM EMP WHERE JOB = SOME('MANAGER','SALESMAN','CLERK');
--ANY
SELECT * FROM EMP WHERE JOB = any('MANAGER','SALESMAN','CLERK');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值