简单查询


/* 
select 字段列表 from 表1,表2,……  
[where 条件表达式]  
[order by 字段1 desc/asc,字段2 desc/asc]  
[group by 字段1, 字段2,……]  
[having 表达式]  
*/ 
  
--一、简单查询  
--1、查询所有的行所有的列  
select * from emp;  
select * from dept;  
  
--2、查询指定的列  
select empno,ename from emp;  
  
--3、查询中出现表达式  
select empno,ename,(to_date('2013-03-18','yyyy-mm-dd')-hiredate)/365 from emp;  
  
--4、给查询的字段或表达式起别名  
select empno as 编号,ename as 姓名,(to_date('2013-03-18','yyyy-mm-dd')-hiredate)/365 as 工作年限  
from emp;  
  
select empno  编号,ename  姓名,(to_date('2013-03-18','yyyy-mm-dd')-hiredate)/365  工作年限  
from emp;  
  
--5、给表起别名  
select e.empno,e.ename from emp  e;  
  
--6、查询指定的行——带条件的查询  
--工资高于2000的员工信息  
select * from emp  
where sal>2000;  
  
--显示是销售员工和管理者的工资情况  
select ename,job,sal from emp  
where job='SALESMAN' OR job ='MANAGER';  
  
--7、模糊查询  
/* 
like  
通配符:  
%:任意个字符或汉字  
_:一个字符或汉字的位置   
*/
  
--查询姓名以'a'打头的员工信息  
select * from emp  
where ename like 'a%';  
  
--查询姓名中第二个字母是M的员工信息  
select * from emp  
where ename like '_M%';  
  
--查询以'a'/'A'打头的员工信息  
select * from emp  
where ename like 'a%' or ename like 'A%';  
  
--8、使用between    and 进行查询  
select * from emp  
where sal between 2000 and 3000;  
  
select * from emp  
where sal >=2000 and sal<= 3000;  
  
--9、查找在*****里边的信息——in  
--显示是销售员工和管理者的工资情况  
select ename,job,sal from emp  
where job='SALESMAN' OR job ='MANAGER';  
  
--显示是销售员工和管理者的工资情况  
select ename,job,sal from emp  
where job  in('SALESMAN' ,'MANAGER');  
  
--显示不是销售员工和管理者的工资情况  
select ename,job,sal from emp  
where job  not in('SALESMAN' ,'MANAGER');  
  
--10、显示字段为空的信息  
--显示没有奖金的员工信息  
select * from emp  
where comm is null;  
  
--显示有奖金的员工信息  
select * from emp  
where comm is not null;  
  
--11、排序  
--DESC倒序从大到小;ASC正序从小到大(默认)  
--按照工资降序显示,如果工资有相同,相同的内部按照姓名升序排列  
select * from emp  
order by sal desc,ename;  
  
--12、聚合函数  
/* 
max() min() avg()  sum() count() 
聚合函数对于null值的处理
count(*):对表中行数进行计数,不管是否有NULL
count(字段名):对特定列有数据的行进行计数,忽略NULL值
AVG():求平均值,注意AVE()忽略NULL值,而不是将其作为“0”参与计算
MAX()、MIN():求最大、最小值,都忽略NULL
SUM():可以对单个列求和,也可以对多个列运算后求和,忽略NULL值,
且当对多个列运算求和时,如果运算的列中任意一列的值为NULL,则忽略这行的记录。*/
-- 例如: SUM(A+B+C),A、B、C 为三列,如果某行记录中A列值为NULL,则不统计这行。
 
select max(sal) as maxSal from emp;  
select avg(sal) from emp;  
  
select sum(sal) from emp;  
  
select count(empno) from emp;  
  
select count(*) from emp;  
  
--从emp表中显示部门数  
select count(distinct deptno) from emp;-----distinct:去掉重复的数据  
  
--从emp表中显示部门编号  
select distinct deptno from emp;  
  
--显示前3行----分页  
select empno,ename,rownum from emp  
where  rownum<4;  
   
/* 
13、分组:group by 字段1,字段2,……  
1)需要分组  
2)按照什么分组  
3)分组后能够显示的字段  */ 
  
--  显示每个部门的平均工资  
  select  deptno,avg(sal) from emp  
  group by deptno;  
    
--  每个领导所管辖的人数  
  select mgr,count(empno) from emp  
  group by mgr;  
    
    
--14、having子句  
    
select  deptno,avg(sal) avgSal from emp  
group by deptno  
having avg(sal)>2500;  
   
select mgr,count(empno) from emp  
group by mgr  
having count(empno)>5;  
    
--显示每个部门的工资超过1500的人数超过2人的  
select deptno,count(empno) from emp  
where sal>1500  
group by deptno  
having count(empno)>2;  
    
/* 
区分where 与having区别  
 1)where放在分组之前,是对原表的筛选,having放在分组之后,是对分组之后结果的筛选  
 2)二者可以同时存在   */
--  显示每个部门所有工资>=1200,并且人数超过2人的部门  
  select deptno,count(empno)   from emp  
  group by deptno  
  having count(empno)>2 and min(sal)>=1200; 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值