zoukankan      html  css  js  c++  java
  • 数据库学习7-24

    oracle

    第四章

    练习1  

    1.查询员工姓名中中包含大写或小写字母A的员工姓名。

     select ename   from emp  where ename like '%A%' or ename like '%a%';

     2.查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,员工姓长度(提示,要求使用INSTR函数,不能使用like进行判断)

     select ename , LENGTH(ename)  from emp  where deptno in (10,20) and hiredate >'01-5月-81' and INSTR(ename,'A') >0;

     3.写一个查询,用首字母大写,其它字母小写显示雇员的 ename,显示名字的长度,并给每列一个适当的签,条件是满足所有雇员名的开始字母是J、A 或 M 的雇员,并对查询结果按雇员的ename升序排序。(提示使用initcap、length、substr)

     select  initcap(ename),LENGTH(ename)  from emp  where substr(ename,0,1) in ('J','A','M')  order by ename;

     4.查询每个职工的编号,姓名,工资 – 要求将查询到的数据按照一定的格式合并成一个字符串. – 前10位:编号,不足部分用*填充,左对齐 – 中间10位:姓名,不足部分用*填充,左对齐 – 后10位:工资,不足部分用*填充,右对齐

     select  concat(lpad(deptno,10,'*'),concat(lpad(ename,10,'*'),rpad(sal,10,'*')))  from emp;

    练习2

     1.写一个查询,分别计算100.456 四舍五入到小数点后第2位,第1位,整数位的值。

     select round(100.456,2),round(100.456,1),round(100.456,0)  from dual;

     2.写一个查询,分别计算100.456 从小数点后第2位,第1位,整数位截断的值。

     select trunc(100.456,2),trunc(100.456,1),trunc(100.456,0)  from dual;

    练习3

     1.查询服务器当前时间

     select sysdate  from dual;

     2.查询部门10,20的员工截止到2000年1月1日,工作了多少个月,入职的月份。(提示使用months_between,extract)

     select months_between('01-1月-00',hiredate) ,extract(month from hiredate)  from emp  where deptno in (10,20);

     3.如果员工试用期6个月,查询职位不是MANAGER的员工姓名,入职日期,转正日期,入职日期后的第一个星期一,入职当月的最后一天日期。(提示:使用add_months,next_day,last_day)  

    select ename,hiredate,add_months(hiredate,6) new_date,next_day(hiredate,'星期一')

    FM,last_day(hiredate) lastday  from emp  where job !='MANAGER';

    练习4

     1.显示服务器系统当前时间,格式为2007-10-1217:11:11(提示:使用to_char函数)

     select to_char(sysdate,'yyyy-mm-dd-hh:mm:ss')  from dual;

     2.显示ename、hiredate 和 雇员开始工作日是星期几,列标签DAY(提示:使用to_char函数)  

    select ename,hiredate,to_char(hiredate,'day') DAY  from emp;

     3.查询员工姓名,工资,格式化的工资(¥999,999.99)(提示:使用to_char函数)  

    select ename,sal,to_char '¥'||(sal,'999,999.99')  from emp;

    4.把字符串2015-3月-18 13:13:13 转换成日期格式,并计算和系统当前时间间隔多少天。 (提示:使用to_date函数)  

    select to_date('2015-3月-18 13:13:13',yyyy-mm-dd-hh:mm:ss) ,months_between(

    sysdate,'2015-3月-18 13:13:13')*4*7)  from dual;

    课后作业[必做题]

    1.计算2000年1月1日到现在有多少月,多少周(四舍五入)。

     select round(months_between(sysdate,'01-1月-00'))  months,round(months_between(sysdate,'01-1月-00')*4) week  from dual;  

     --计算天数

     select round((sysdate-to_date('2000-1-1','yyyy-mm-dd')))    from dual;

    2.查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)。

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

     select *  from emp  where substr(ename,3,1)='A';

    3.使用trim函数将字符串‘hello’、‘ Hello ’、‘bllb’、‘ hello ’分别处理得到下列字符串ello、Hello、ll、hello。

     select trim('h' from 'hello'),trim(' Hello '),trim(both 'b'from 'bllb'), trim(' hello')  from dual;

    4.将员工工资按如下格式显示:123,234.00 RMB 。

     select to_char('123,234.00','000,999.00')|| 'RMB' from emp;

    5.查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。

     select ename,mgr , NVL(TO_CHAR(mgr),'No Manager')  from   emp  where  mgr is null;

     select ename,  (case when mgr is not null  then to_char(mgr)  else 'No Manager' end) mgr  from emp;

      6.将员工的参加工作日期按如下格式显示:月份/年份。

     select to_char(hiredate,'mm-yyyy')  from emp;

    7.在员工表中查询出员工的工资,并计算应交税款:如果工资小于1000,税率为0,如果工资大于等于1000并小于2000,税率为10%,如果工资大于等于2000并小于3000,税率为15%,如果工资大于等于3000,税率为20%。

     select sal, decode(sign(sal-1000),-1,sal*0,0,sal*0.1,decode(sign(sal-1000),-1,sal*0.1,0,sal*0.15,decode(sign(sal-2000),-1,sal*0.15,0,sal*0.2,decode(sign(sal-3000),-1,sal*0.2))))    from emp;

    8.创建一个查询显示所有雇员的 ename和 sal。格式化sal为 15 个字符长度,用 $ 左填充,列标签 SALARY。  

    select ename,sal,lpad(sal,15,'*') SALARY  from emp;

    第六章

    练习1

     1.查询每个部门的部门编号,部门名称,部门人数,没有人数的部门也要显示出来,并按照部门编号升序排序。 

     select emp.deptno,dname,count(ename)  from emp,dept  where emp.deptno=dept.deptno(+)  group by emp.deptno,dname  order by emp.deptno;

     2.查询部门20的员工,查询每个月的工资总和及平均工资。

     select sum(sal),avg(sal)  from emp  where deptno=20; 

     3.查询工作在CHICAGO的员工人数,最高工资及最低工资。

     select count(ename),max(sal),min(sal)  from emp,dept  where emp.deptno=dept.deptno and loc='CHICAGO';

     4.查询员工表中一共有几种岗位类型。

     select job  from emp  group by job;

     select distinct job  from emp;

    练习2  

    1.查询每个部门的部门编号,部门名称,最高工资,最低工资,工资总和,平均工资。

     select emp.deptno,dname,max(sal),min(sal),sum(sal),avg(sal)  from emp,dept  where emp.deptno=dept.deptno  group by emp.deptno,dname;  

     2.查询每个部门,每个岗位的部门编号,部门名称,最高工资,最低工资,工资总和,平均工资。  

    select emp.deptno,dname,max(sal),min(sal),sum(sal),avg(sal)  from emp,dept  where emp.deptno=dept.deptno  group by emp.deptno,dname;

     3.查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。

     select b.empno,b.ename,count(1)  from emp a,emp b  where a.mgr=b.empno(+)and b.job='MANAGER'  group by b.empno,b.ename;

    练习3

    1.查询部门人数大于2的部门编号,部门名称,部门人数。

     select emp.deptno,dname,count(ename)  from emp,dept  where emp.deptno=dept.deptno  having count(ename)>2  group by emp.deptno,dname;

     2.查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,部门平均工资,并按照部门人数升序排序。

     select emp.deptno,dname,avg(sal),count(ename)  from emp,dept  where emp.deptno=dept.deptno  having avg(sal)>2000 and count(ename)>2  group by emp.deptno,dname  order by count(ename);

    课后作业  

    1.查询部门平均工资在8000元以上的部门名称及平均工资。

     select dname,avg(sal)  from emp,dept  where emp.deptno=dept.deptno  having avg(sal)>8000  group by dname;

     2.查询员工工作编号中不是以“SA_”开头并且平均工资在8000元以上的工作编号及平均工资,并按平均工资降序排序。

     select avg(sal)  from emp  where empno not like 'SA@_%'escape '@'  having avg(sal)>8000  group by empno  order by avg(sal) desc;

     3.查询工作不为SA_REP,工资的和大于等于25000的工作编号和每种工作工资的和。

     select deptno,sum(sal)  from emp  where job not like 'SA_REP'  having sum(sal)>=25000  group by deptno;

     4.显示经理号码,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序。  

    select b.empno,min(a.sal)  from emp a,emp b  where  a.mgr=b.empno(+)  having min(sal)>=3000  order by min(sal) desc;  

     5.写一个查询,显示每个部门最高工资和最低工资的差额

     select max(sal)-min(sal)  from emp  group by deptno;

    MySQL

    第五章

    练习1  

    1.写一个查询,分别计算100.456 四舍五入到小数点后第2位,第1位,整数位的值。

     select round(100.46,2),round(100.46,1),round(100.46,0);

    2.写一个查询,分别计算100.456 从小数点后第2位,第1位,整数位截断的值。

     select truncate(100.46,2),truncate(100.46,1),truncate(100.46,0);

    练习2

    1.显示所有员工姓名的前三个字符

     select substr( ename,1,3)  from emp;

    2.显示正好为5个字符的员工的姓名,工资,部门号

     select ename,sal,deptno  from emp  where char_length(ename)=5;

    练习3

    1.写一个查询,显示雇员的 ename,显示名字的长度,并给每列一个适当的标签,条件是满足所有雇员名字的开始字母是J、A 或 M 的雇员,并对查询结果按雇员的ename升序排序。(提示:使用length、substr)

     select ename,length(ename)

     from emp

     where substr(ename,1,1) in('J','A','M')

     order by ename;

    2.查询员工姓名中中包含大写或小写字母A的员工姓名。

     select ename  from emp  where ename like '%A%' or ename like '%a%';

    3.显示所有员工的姓名,用a替换所有"A"

     select replace (ename,'A','a') ename  from emp;

    4.查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,员工姓名长度

     select ename,length(ename)  from emp  where deptno in (10,20) and hiredate>'81-5-1' and ename like '%A%';

    5.查询每个职工的编号,姓名,工资   要求将查询到的数据按照一定的格式合并成一个字符串.前10位:编号,不足部分用*填充,左对齐中间10位:姓名,不足部分用*填充,左对齐后10位:  工资,不足部分用*填充,右对齐

     select lpad(deptno,10,'*'),lpad(ename,10,'*'),rpad(sal ,10,'*')  from emp;

    练习4

    1.查询服务器当前时间

     select now();

    2.查询部门10,20的员工截止到2000年1月1日,工作了多少个月,入职的月份。

     select ceil(datediff('2000-01-01',hiredate)/7)/4,extract(month fromhiredate)

     from emp

     where deptno in(10,20);

    3.如果员工试用期6个月,查询职位不是MANAGER的员工姓名,入职日期,转正日期,入职日期是第多少月,第多少周

     select ename ,hiredate,date_add(hiredate,interval 6 month) 转正日期,extract(month from hiredate) 第多少个月,weekofyear(hiredate) 第多少周

     from emp

     where job != 'MANAGER';

    课后作业

    1.计算2000年1月1日到现在有多少月,多少周(四舍五入)。

     select round(datediff(now(),'2000-1-1')/7/4) months,round(datediff(now(),'2000-1-1')/7) weeks

     from emp;

    2.查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)

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

    3.使用trim函数将字符串‘hello’、‘  Hello ’、‘bllb’、‘ hello    ’分别处理得到下列字符串ello、Hello、ll、hello。

     select trim(leading 'h' from 'hello'),trim(' Hello '),trim(both 'b' from 'bllb'),trim(' hello    ');

    4.将员工工资按如下格式显示:123,234.00 RMB 。

     select concat(format(sal,2),'RMB')  from emp;

    5.查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。

     select ename,mgr,ifnull(mgr,'No Manager')  from emp;

    6.将员工的参加工作日期按如下格式显示:月份/年份。

     select date_format(hiredate,'%mm/%yy')  from emp;

    7.在员工表中查询出员工的工资,并计算应交税款:如果工资小于1000,税率为0,如果工资大于等于1000并小于2000,税率为10%,如果工资大于等于2000并小于3000,税率为15%,如果工资大于等于3000,税率为20%。

     SELECT E.ENAME 员工,E.SAL 员工的工资,         (CASE                 WHEN E.SAL<1000 THEN E.SAL                 WHEN E.SAL >= 1000 AND E.SAL<=2000 THEN E.SAL*0.1                   WHEN E.SAL >=2000 AND E.SAL<=3000 THEN E.SAL*0.15                     ELSE E.SAL*0.2          END) 应交税款 FROM EMP E;

    8.创建一个查询显示所有雇员的 ename和 sal。格式化sal为 15 个字符长度,用 $左填充,列标签 SALARY。

     select lpad('ename',15,'$') SALARY ,sal  from emp;

  • 相关阅读:
    【IE】浏览器模式与文档模式 及其开发中处理方式
    【DWR】Annotation入门
    【Oracle】不安装Oracle客户端直接用PL/SQL连接数据库
    【霓虹语】マレーシア航空
    【霓虹语】古いプロジェクトの再開
    【霓虹语】日本語の勉強
    解决Flash挡住层用z-index无效的问题
    table中设置thead固定,tbody 垂直滚动条
    IE9上传文件出现“SCRIPT5: 拒绝访问”导致不能上传的解决办法
    用gulp压缩js时,ngDialog弹窗出错
  • 原文地址:https://www.cnblogs.com/hole/p/11251780.html
Copyright © 2011-2022 走看看