数据库练习2

emp员工表(empno 员工编号,ename 员工姓名,job 工种,mgr 上级编号,hiredate 入职日期,sal 工资,comm 奖金,deptno 部门编号)

查找出2019、2020年6、7、8月份入职的员工

select *from emp  where to_char(hiredate,'yyyy')in ('2019','2020') and
 to_char(hiredate,'mm') in ('06','07','08') ;

to_char(date,'format') 将数值型或者日期型数据转换成字符串格式。

例:将时间改为指定的字符串格式:注意此处需要使用单引号

select TO_CHAR(sysdate,'YYmmDD') from dual;

to_date(char,'format'):将字符串数据类型的值转换成日期格式

 例:将一字符串改为时间格式:

select TO_DATE('20150405','YYYYmmDD') from dual;

select to_date('2018-06-06 11:13:11','yyyy-mm-dd hh:mi:ss') from dual;

select to_date('1980年12月17日','yyyy"年"mm"月"dd"日"') from dual;

PS:假如日期格式中含有中文,就用双引号引起来。

 查询出所有经理和销售人员的年平均工资,并按年平均工资降序排序。

select round(avg(sal*12),2)  ,ename ,job from emp where job in ('MANAGER','SALESMAN')
group by job,ename order by round(avg(sal*12),2);
select job ,avg(sal)*12 avgSal from emp group by job having job in 
 ('MANAGER','SALESMAN') group by job order by avgSal desc;

以上两个语句都可以实现

 --where :对整个表的条件过滤(未分组)
 --having :分组基础上的条件过滤,使用聚合函数进行过滤或者过滤分组的字段

顺序:from where group by having select order by

显示员工工资大于1000,且部门平均工资高于2000的部门号和它的平均工资,并按部门编号升序排序

select round(avg(sal),2),deptno from emp 
--where sal>1000
group by deptno having round(avg(sal),2)>2000 and min (sal)>1000
order by deptno asc;

注意:用where过滤时,会过滤到工资小于1000的员工,但题目是要求显示部门号,其实就是部门平均工资高于2000并且部门的每个员工工资大于1000,如果有一个部门有两个员工一个为8000,一个为800,为800的员工会被过滤但部门号仍然会被显示。

select ename ,sal , comm, comm+sal,1,2 from emp where deptno=30;

增加字段1,2并每一行的值都为1,2

select count(1) 总人数 from emp;
select count (*) 总人数 from emp;

 这两行代码运行结果一样

count(1) 在结果集新增字段1,每一行的值都为1,故依旧可以到达计算数量的效果

--多表连接:在笛卡尔积的基础上,找到表与表之间的关系进行过滤
--笛卡尔积
--A=(a,b)
--B=(1,2)
--A*B={(a,1),(a,2),(b,1),(b,2)}

emp 员工表(empno 员工编号,ename 员工姓名,job 职位,mgr 上级编号,hiredate 入职日期,
sal 工资,comm 奖金,deptno 部门编号)
dept部门表(deptno 部门编号,dname 部门名称,loc 部门地址)
salgrade工资等级表(grade 等级,losal 最低工资,hisal 最高工资)

查询员工的姓名,工资和工资等级

select ename,sal,grade from emp,salgrade where sal between losal and hisal;

losal 和 hisal 是salgrade的字段名

自连接

 查出比"JONES"工资高的职工的工资、工种的情况

select e2.* from emp e1,emp e2 where e1.ename='JONES'and e2.sal > e1.sal;

e2.*  显示e2表的所有情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值