1.查询姓名中不包含C和c的员工信息

 select * from employees where instr(first_name||last_name,'C')=0 or instr(first_name||last_name,'c')=0;

①字符函数 instr(input,char,m,n) 的用法:
返回在字符值中查找字符串char的数字位置。参数m作为查找的开始,参数n代表第n次发现。m和n的默认值是1,即默认从开始位置查找,并且报告第一个发现的位置。如果在字符值中未查找到char,则返回0;
②逻辑条件 or 使用注意:

or 两侧应该是两个条件而不是两个值。

2.查询员工姓名和工资等级 (0-1999:屌丝,2000-3999:白领,4000+:高富帅)

 select first_name||' '||last_name as "Name" ,
case when salary between 0 and 1999 then '屌丝'
when salary between 2000 and 3999 then '白领'
when salary >= 4000 then '高富帅'
end as "工资阶级"
from employees;

①case...when...then 函数的使用

3.按工种调节工资(SALESMAN 0.15 CLERK 0.25 ANALYST 0.5)打印员工信息和调节前后的工资

 select e.ename,e.job,e.sal,
decode(e.job,
'SALESMAN',1.1500,
'CLERK',1.25,
'ANALYST',1.50,
1.00
)*e.sal as new_sal
from scott.emp e
order by 2 ;

decode 函数的用法

4.查询所有员工信息(提成无的显示0)

 select e.first_name||' '||e.last_name as "姓名" , e.salary as "工资" ,
e.commission_pct as "佣金比例" , nvl(e.commission_pct,0)*salary as "提成"
from hr.employees e
order by 2 desc ;

注意:通用函数

①nvl(expr,value1) 如果第一个参数不为空,则函数返回第一个参数值,否则返回第二个;
②nvl2(expr,value1,value2) 如果第一个参数不为空,则函数返回第二个参数值,否则返回第三个 ;
③coalesce(expr1,expr2,...,exprn) 如果expr1为非空,则返回expr1 的值;如果expr1 为空,则返回expr2的值,依次类推,如果前面的表达式都为空,则返回exprn 的值 。

5.查询部门最低工资高于20号部门最低工资的部门的编号、名称及部门最低工资

 select d.deptno as 部门编号 ,d.dname as 部门名称 ,min(e.sal) as 最低工资
from scott.dept d ,scott.emp e
where e.deptno = d.deptno
group by d.deptno ,d.dname
having min(e.sal) > (select min(e.sal) from scott.emp e where e.deptno=20) ;

语句也要按照d.dname 分组 ,这样select 子句才能有 d.dname;

注意:

①在使用 GROUP BY 进行分组的 SQL 语句中,WHERE 子句先写出约束条件过滤行,而 HAVING 子句是分组后,再写出约束条件过滤组。本题用的是 HAVING 子句。
②GROUP BY 子句置于 WHERE 子句后、ORDER BY 子句前,后面的表达式必须包含字段,且要指明是那一个表的字段,但不能使用列的别名(as 后的定义名)。

在SELECT 子句中,只可以有组函数和分组字段(包括对分组字段的操作),如果包括其他字段会报错。
另外,如果GROUP BY 子句后要根由ORDER BY 子句,则ORDER BY 子句用于排序的字段必须是分组字段或组函数。

例子:假设想获得每个部门最高的薪水值,并按照各部门最高薪水值显示出部门编号和薪水,其SQL语句如下:

 select e.department_id,max(e.salary)
from hr.employees e
group by e.department_id
order by max(salary) desc;

6.查询员工工资为其部门最低工资的员工的编号和姓名及工资

 select e.empno as 员工编号 ,e.ename as 员工姓名 ,e.sal 员工工资,e.deptno as 员工部门
from scott.emp e
where e.sal in (select min(e.sal) from scott.emp e group by e.deptno)

7.查询所有工作种类数量

 select count(*) as 种类数
from
( select distinct e.job from scott.emp e )

而这个代码是干什么的,思考一下

 select count(e.job) as 种类数
from scott.emp e
group by e.job

 

此代码:把整张表按照工作不同分组,然后查询每一组的工作的数量。

例题:有订单表orders,包含字段用户信息userid,字段产品信息productid,返回至少被订购过两次的productid?

select productid from orders group by productid having count(productid)>1

8.查询所有员工平均奖金

 select sum(e.comm)/count(nvl(e.mgr,0))
from scott.emp e

注意:

所有组函数对空值都是省略的,若按照所有的来算,可以用空值处理函数。
组函数有 MIN、MAX、AVG、SUM、COUNT、STDDEV、VARIANCE
如果,查询有奖金的员工的平均奖金

 select avg(e.comm)
from scott.emp e

9.每个部门的总工资

select e.deptno as 部门编号,d.dname as 部门名称 , sum(e.sal)as 部门总工资
from scott.emp e,scott.dept d
where e.deptno = d.deptno
group by e.deptno,d.dname

注意:

在使用 GROUP BY 进行分组时,在 SELECT 子句中,只可以有组函数和分组字段,如果包括其他字段会报错。在写代码过程中,没有对 d.dname 分组时,程序报错。所以需得对d.dname 编号 才能查询这个字段。

 10.查询各工种平均工资的最大值和最小值

select max(sal) as 最大值, min(sal) as 最小值
from (select avg(e.sal) as sal from scott.emp e group by e.job)

11.查询雇员编号,雇员姓名,部门名称,部门所在城市、部门所在国家,部门所在大陆

 select e.employee_id ,e.first_name||' '||e.last_name as 名字 ,d.department_name as 部门名称 ,l.city as 部门所在城市,
c.country_name as 部门所在国家, r.region_name as 部门所在大陆
from hr.employees e , hr.departments d , hr.locations l , hr.countries c ,hr.regions r
where e.department_id = d.department_id(+) and d.location_id = l.location_id(+)
and l.country_id = c.country_id(+) and c.region_id = r.region_id(+)
order by e.employee_id ;

Oracle-SQL 小题的更多相关文章

  1. 学习练习 Oracle数据库小题

    Course(课程表) Score(成绩表) Teacher(教师表)

  2. 学习练习 Oracle数据库小题 Students

  3. 关于SQL的几道小题详解

    关于SQL的几道小题详解 当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样 ...

  4. Oracle SQL 异常处理

    今天学了异常处理 有预定义异常 与 用户自定义异常 还有 raise_application_error()函数raise_application_error() 只能把异常抛出而不能处理异常. 预定 ...

  5. Oracle SQL tuning 步骤

    Oracle SQL tuning 步骤 SQL是的全称是Structured Query Language(结构化查询语言).SQL是一个在80年代中期被使用的工业标准数据库查询语言.不要把SQL语 ...

  6. 介绍几种大型的Oracle/SQL Server数据库免费版

    我们知道,Oracle和SQL Server等大型数据库也都存在一些免费的版本,这些免费的版本已经能够满足许多中小项目的需求.对于在校大学生来说,从学习的目标上来讲,安装免费版的大型数据库也就足够用了 ...

  7. Oracle SQL篇(一)null值之初体验

           从我第一次正式的写sql语句到现在,已经超过10年的时间了.我写报表,做统计分析和财务对账,我一点点的接触oracle数据库,并尝试深入了解.这条路,一走就是10年,从充满热情,到开始厌 ...

  8. Oracle SQL优化[转]

    Oracle SQL优化 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化 ...

  9. SQL语句题

    SQL语句题 Student(Sno,Sname,Sage,Ssex)注释:学生表(学号,姓名,性别年龄,性别) Course(Cno,Cname,Tno) 注释:课程表(课程号,课程名称,教师编号) ...

  10. Oracle SQL优化器简介

    目录 一.Oracle的优化器 1.1 优化器简介 1.2 SQL执行过程 二.优化器优化方式 2.1 优化器的优化方式 2.2 基于规则的优化器 2.3 基于成本的优化器 三.优化器优化模式 3.1 ...

随机推荐

  1. 5.使用Redis+Flask维护动态Cookies池

    1.为什么要用Cookies池? 网站需要登录才可爬取,例如新浪微博 爬取过程中如果频率过高会导致封号 需要维护多个账号的Cookies池实现大规模爬取 2.Cookies池的要求 自动登录更新 定时 ...

  2. QQ企业通--客户端登陆模块设计---知识点

    AutoValidate 枚举  确定控件在失去用户输入焦点时应如何验证其数据. 成员名称 说明 Disable 将不进行隐式验证.设置此值将不会妨碍对 Validate 或 ValidateChil ...

  3. Iterator作用

    前言 下面的内容是我从百度知道拷贝出来的,也就不在贴出链接了.我总结下就是迭代器在集合中使用,用户不需要关心具体集合实现的是如何遍历(不暴露细节),按照迭代器的方式遍历. 作用 Iterator模式是 ...

  4. 解题报告:SP1043 GSS1

    题目链接:SP1043 GSS1 - Can you answer these queries I 对,\(GSS\)毒瘤数据结构题,就是我在这篇文章中提到的紫题. 相对其他\(GSS\)题简单些,但 ...

  5. GoJS简单示例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. SpringBoot集成百度UEditor图片上传后直接访问404解决办法

    SpringBoot项目上传图片一般是上传至远程服务器存储,开发过程中可能会上传至当前项目的某个静态目录中,此时就会遇到这个问题,文件在上传之后直接访问并不能被访问到,必须重新加载项目. 首先分析一下 ...

  7. 高级IO-锁与进程和文件

    1.进程终止,那么这个进程建立的锁将全部释放 2.无论何时关闭一个与当前进程相关的文件描述符,那么与这个文件相关的当前进程的锁会全部被释放 3.子进程不会继承父进程的锁,子进程需要调用fcntl对继承 ...

  8. 二十二 动态代理&解决网站的字符集编码问题

    设计模式: 软件开发过程中,遇到相似问题,将问题的解决方式抽取模型(套路) 单例,工厂,装饰者,适配器,动态代理 谷歌汽车场景: 谷歌汽车场景Car Interface Icar{  start  r ...

  9. Django(十八)后台管理:列表页选项、编辑页选项、自定义后台页面

    [参考]https://blog.csdn.net/u010132177/article/details/103814357 [参考]https://docs.djangoproject.com/zh ...

  10. HihoCoder 1245:王胖浩与三角形 三角形边长与面积

    #1245 : 王胖浩与三角形 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 王胖浩有一个三角形,三边长为a,b,c.他有特殊的能力,能增加三条边的边长,增加的总长度不能 ...