表结构及数据

SELECT *
  FROM employees;


SELECT *
  FROM departments;


SELECT *
  FROM locations;


SELECT *
  FROM jobs;


SELECT *
  FROM job_grades;

SELECT *
  FROM job_history;

SELECT *FROM employees;
SELECT *FROM departments;
SELECT *FROM locations;
SELECT *FROM jobs;
SELECT *FROM manager;
SELECT *FROM job_grades;--1显示在1997年后被录取的员工的所有数据
SELECT *FROM employeesWHERE hire_date >= to_date('1-JAN-1997');
--select to_date('1-JAN-1997') from dual;
--2显示姓、工作ID,薪水,佣金(commission) ,然后按薪水降序排列
SELECT last_name,job_id,salary,commission_pctFROM employeesORDER BY salary DESC;
--3给那些commission为0 的员工加10%的工资
UPDATE employeesSET salary = salary * 1.1WHERE commission_pct = 0;
--4显示姓、工龄、工作的月数,如果月数小于当前月数则该月数加上12再与sysdate相减?
SELECT last_name,trunc(months_between(SYSDATE,hire_date) / 12) YEAR,MOD(trunc(months_between(SYSDATE,hire_date)),12) monFROM employees;
--5显示名字还有J、K、L、M的雇员姓名
SELECT first_name || ' ' || last_nameFROM employeesWHERE first_name || last_name LIKE '%J%'OR first_name LIKE '%K%'OR first_name LIKE '%L%'OR first_name LIKE '%M%';
--6显示姓名、薪水、是否收到commission
SELECT last_name,salary,nvl2(commission_pct,'yes','no')FROM employees;
--7显示部门名字,位置、姓名、工作代号、薪水。位置ID为1800
SELECT dept.department_name,loca.location_id,last_name,job_id,salaryFROM employees empJOIN departments deptON emp.department_id = dept.department_idJOIN locations locaON dept.location_id = loca.location_idWHERE loca.location_id = '1800';
--8有多少雇员的名字以n结尾,写出两种方法
SELECT COUNT(*)FROM employeesWHERE last_name LIKE '%n';
SELECT COUNT(*)FROM employeesWHERE substr(last_name,length(last_name)) = 'n';
--select substr('last_name',length('last_name')) from dual;--9 显示所有部门的编号、名字、工作在每个部门的员工,包括没有员工的部门
SELECT dept.department_id,dept.department_name,COUNT(emp.employee_id)FROM employees empJOIN departments deptON emp.department_id(+) = dept.department_idGROUP BY dept.department_id,dept.department_name;--部门编号为10和20的工作编号是什么
SELECT j.job_idFROM jobs jJOIN employees empON j.job_id = emp.job_idJOIN departments deptON dept.department_id = emp.department_idWHERE dept.department_id IN (10,20);
--11哪些工作是管理岗位的(Administration 和Executive ),按降序排列显示工作ID和员工
SELECT j.job_id,COUNT(emp.employee_id)FROM employees empJOIN jobs jON emp.job_id = j.job_idWHERE j.job_title LIKE 'Administration%'OR j.job_id LIKE 'Executive'GROUP BY j.job_idORDER BY j.job_id DESC;
--12
--显示在每月上旬被雇佣的员工
SELECT last_name,hire_dateFROM employees empWHERE to_number(to_char(emp.hire_date,'DD')) < 15;
--13
--显示姓名,薪水,然后将薪水以“千”为单位显示
SELECT emp.last_name,trunc(salary / 1000)FROM employees emp;
--14
--显示员工姓名,上司姓名,上司的薪水,薪水等级。要求上司的薪水大于15000
SELECT emp1.last_name,emp2.last_name,emp2.salary,jg.grade_levelFROM employees emp1LEFT JOIN employees emp2ON emp1.manager_id = emp2.employee_idJOIN job_grades jgON emp2.salary BETWEEN jg.lowest_sal AND jg.highest_salWHERE emp2.salary > 15000;
--15
--显示部门编号、部门名字、该部门的员工数、每个部门的平均工资,部门内的员工信息 包括姓名、薪水、职业
--select dept.department_id,dept.department_name,count(emp.employee_id) emps,avg(emp.salary) avg,emp2.last_name ,emp2.salary,emp2.job_id from employees emp join departments dept on emp.department_id=dept.department_id join employees emp2 on dept.department_id=emp2.department_id group by dept.department_id,dept.department_name order by dept.department_id asc;SELECT t.t_id,t.t_name,t.emps,t.avg,emp2.last_name,emp2.salary,emp2.job_idFROM (SELECT dept.department_id t_id,dept.department_name t_name,COUNT(emp.employee_id) emps,AVG(emp.salary) AVGFROM employees empJOIN departments deptON emp.department_id = dept.department_idGROUP BY dept.department_id,dept.department_nameORDER BY dept.department_id ASC) tJOIN employees emp2ON t.t_id = emp2.department_idORDER BY t_id;
--16
--显示拥有最高平均工资的部门编号和具体工资
SELECT *FROM (SELECT dept.department_id t_id,AVG(emp.salary) AVGFROM employees empJOIN departments deptON emp.department_id = dept.department_idGROUP BY dept.department_idORDER BY AVG DESC)WHERE rownum = 1;
--17
--显示部门编号、部门名称、位置、经理的编号,要求该部门没有销售代表
SELECT *FROM departments dept2WHERE dept2.department_id NOT IN (SELECT dept.department_idFROM employees empJOIN departments deptON emp.department_id = dept.department_idWHERE emp.job_id = 'SA_REP'GROUP BY dept.department_id);
--18
--a小于三个员工
SELECT dept.department_id,dept.department_name,COUNT(emp.employee_id)FROM employees empJOIN departments deptON emp.department_id = dept.department_idGROUP BY dept.department_id,dept.department_name
HAVING COUNT(emp.employee_id) < 3;
--b员工数最多
SELECT *FROM (SELECT dept.department_id,dept.department_name,COUNT(emp.employee_id) countsFROM employees empJOIN departments deptON emp.department_id = dept.department_idGROUP BY dept.department_id,dept.department_nameORDER BY counts DESC)WHERE rownum = 1;
--优先使用
SELECT *FROM (SELECT dept.department_id,dept.department_name,COUNT(emp.employee_id) counts,dense_rank() over(ORDER BY COUNT(emp.employee_id) DESC) ranksFROM employees empJOIN departments deptON emp.department_id = dept.department_idGROUP BY dept.department_id,dept.department_name) tWHERE t.ranks = 1;--c员工数最少
SELECT *FROM (SELECT dept.department_id,dept.department_name,COUNT(emp.employee_id) countsFROM employees empJOIN departments deptON emp.department_id = dept.department_idGROUP BY dept.department_id,dept.department_nameORDER BY counts ASC)WHERE rownum = 1;--另一方法
SELECT dept.department_id,dept.department_name,COUNT(emp.employee_id) countsFROM employees empJOIN departments deptON emp.department_id = dept.department_idGROUP BY dept.department_id,dept.department_name
HAVING COUNT(emp.employee_id) = (SELECT MIN(COUNT(*))FROM employeesGROUP BY department_id);
--19
--显示工号、姓名、薪水、部门编号、所在部门的平均工资
SELECT emp2.employee_id,emp2.last_name,emp2.department_id,t.avgFROM employees emp2JOIN (SELECT dept.department_id t_id,AVG(emp.salary) AVGFROM employees empJOIN departments deptON emp.department_id = dept.department_idGROUP BY dept.department_id) tON emp2.department_id = t.t_id;
--20
--周几录取的人数最多,显示人名和日期
/*SELECT to_number(to_char(to_date('2018-7-15','yyyy-MM-DD'),'day'))FROM dual;
SELECT to_char(to_date('2018-7-15','yyyy-MM-DD'),'day')FROM dual;*/
/*SELECT emp2.last_name,to_char(emp2.hire_date,'day')FROM employees emp2WHERE to_char(emp2.hire_date,'day') IN (SELECT t.dFROM (SELECT to_char(emp.hire_date,'day') d,COUNT(*) countsFROM employees empGROUP BY to_char(emp.hire_date,'day')ORDER BY counts DESC) tWHERE rownum = 1);*/SELECT emp2.last_name,to_char(emp2.hire_date,'day')FROM employees emp2WHERE to_char(emp2.hire_date,'day') IN (SELECT to_char(emp.hire_date,'day')FROM employees empGROUP BY to_char(emp.hire_date,'day')HAVING COUNT(*) = (SELECT MAX(COUNT(*))FROM employeesGROUP BY to_char(hire_date,'day')));
--21
--显示雇员的姓名,周年纪念日期(月—日)升序排列
SELECT emp.last_name,to_char(hire_date,'mon DD')FROM employees empORDER BY to_char(hire_date,'DDD');
--22
--23 显示工资涨幅,员工编号,原来的工资和增加的工资--部门号10、50、110的有5%的涨幅,部门号为60的涨10%的工资--部门号为20和80涨幅为15%,部门为90的不涨工资
SELECT decode(emp.department_id,'10','05%raise','50','05%raise','110','05%raise','60','10%raise','20','15%raise','80','15%raise','90','no raise') paise,emp.employee_id,emp.salary,decode(emp.department_id,'10',emp.salary * 0.05,'50',emp.salary * 0.05,'110',emp.salary * 0.05,'60',emp.salary * 0.1,'20',emp.salary * 0.15,'80',emp.salary * 0.15,'90',0) new_salaryFROM employees emp;
--24
select to_char(current_date,'DD-MON-YYYY HH:MI:SS') from dual;
--25
--a
--写出一个查询方法来显示下列时区的时间偏移量  澳大利亚/悉尼select tz_offset('Australia/Sydney') from dual;
select tz_offset('Chile/EasterIsland') from dual;
--b
--根据据澳大利亚/悉尼的时区偏移量,通过改变会话来设定TIME_ZONE参数值
alter session set time_zone = 'Australia/Sydney';
ALTER SESSION SET TIME_ZONE = '+10:00';
--c
--.显示这个会话的 SYSDATE, CURRENT_DATE, CURRENT_TIMESTAMP和LOCALTIMESTAMP--提示:当命令执行时基于日期的输出应该是不同的select sysdate,current_date,current_timestamp,localtimestamp from dual;
--d
--根据智利/复活节岛的时区偏移量,通过改变会话来设定TIME_ZONE参数值--提示:上述问题的结果基于不同的日期,并且在某些情况下该结果不会和学生得到的实际结果相匹配。而且不同城市的时区偏移量应该有所不同,并且应该考虑到夏令时的情况。ALTER SESSION SET TIME_ZONE = '-06:00';
--e
--对于此会话显示系统时间,现在的时间,现在的时间戳和当地的时间戳
--提示:当命令被执行的时候基于数据的输出应该不同。select sysdate,current_date,current_timestamp,localtimestamp from dual;
--f
--修改会话使日期格式变成DD-MON-YYYY
select to_char(current_date,'DD-MON-YYYY') from dual;
--26--28
--写一个查询,按以下要求分组-- 部门和工作编号-- 工作和老大编号--计算每一个组的最低工资和最高工资SELECT emp.department_id,emp.job_id,emp.manager_id,MAX(emp.salary),MIN(emp.salary)FROM employees empGROUP BY GROUPING SETS((emp.department_id, emp.job_id),(emp.job_id, emp.manager_id));
--29
-- 员工表内工资排行前三的员工姓和薪水
select * from (SELECT rownum rn,t.* from (SELECT emp.last_name,emp.salaryFROM employees empORDER BY emp.salary DESC) t) where rn <=3;
--30
-- 工作在加利福尼亚州的员工编号和姓
SELECT emp.employee_id,emp.last_nameFROM employees empJOIN departments deptON emp.department_id = dept.department_idJOIN locations locaON dept.location_id = loca.location_idWHERE loca.state_province = 'California';
--31
--在工作历史表里面找到并删除资历最浅而且换了至少两次工作的员工
DELETE FROM employeesWHERE employee_id IN (SELECT emp.employee_idFROM employees empWHERE 2 <= (SELECT COUNT(*)FROM job_history jhWHERE emp.employee_id = jh.employee_id) AND emp.employee_id = (SELECT employee_idFROM job_historyWHERE start_date IN (SELECT MIN(start_date)FROM job_history)));--select employee_id from job_history where start_date = (select min(start_date) from job_history);
--32
--33
--找出哪个工作的最大工资大于整个公司内最大的工资的一半,使用--with子句,显示出工作名,最大工资
WITH aa AS(SELECT MAX(salary)FROM employees),
bb AS(SELECT j.job_title,MAX(emp.salary) job_salaryFROM employees emp join jobs j on emp.job_id = j.job_idGROUP BY emp.job_id,j.job_title)
SELECT *FROM bbWHERE bb.job_salary > (SELECT *FROM aa) / 2;
--34显示员工编号,姓,开始上班的时间,工资
-- a De Haan的下属
SELECT emp.employee_id,emp.last_name,emp.hire_date,emp.salaryFROM employees empWHERE emp.manager_id IN (SELECT emp2.employee_idFROM employees emp2WHERE emp2.last_name = 'De Haan');
-- b De Haan组织树(下属、下属的下属......)
SELECT last_nameFROM employees emp where level >1START WITH emp.last_name='De Haan'
CONNECT BY PRIOR emp.employee_id = emp.manager_id;
--35
-- De Haan下属的下属的员工编号、上级、等级、姓
SELECT emp.employee_id,emp.manager_id,level, emp.last_nameFROM employees emp where level >2 START WITH emp.last_name = 'De Haan'
CONNECT BY PRIOR emp.employee_id = emp.manager_id;
--36
--显示员工编号、上司、等级、姓,要求姓前面加上下划线,等级越低横线越长
SELECT emp.employee_id,emp.manager_id,level,lpad(emp.last_name,level+length(emp.last_name)-1,'_')FROM employees empSTART WITH emp.last_name = 'King'
CONNECT BY prior emp.employee_id = emp.manager_id;
--37
--显示员工编号、入职时间、薪水、上司的编号,要求员工编号大于等于200--如果薪水小于5000,将员工编号和薪水插入到SPECIAL_SAL表里--将员工编号、入职时间、薪水插入到SAL_HISTORY表--将员工编号、上司编号、薪水插入到MGR_HISTORY表--create table cux_special_sal_19874 as select * from special_sal;
--create table cux_sal_history_19874 as select * from sal_history;
--create table cux_mgr_history_19874 as select * from mgr_history;INSERT ALL WHEN salary > 5000 THEN INTO cux_special_sal_19874
VALUES(employee_id, salary) WHEN 1 = 1 THEN INTO cux_sal_history_19874
VALUES(employee_id, hire_date, salary) WHEN 1 = 1 THEN INTO cux_mgr_history_19874
VALUES(employee_id, manager_id, salary)SELECT emp.employee_id,emp.manager_id,emp.hire_date,emp.salaryFROM employees empWHERE emp.employee_id > 200;
--38
-- 查询SPECIAL_SAL, SAL_HISTORY 和 MGR_HISTORY 表查看添加信息
select * from cux_special_sal_19874;
select * from cux_sal_history_19874;
select * from cux_mgr_history_19874;
--39
--基于下列示意图创建一个LOCATIONS_NAMED_INDEX表,将主键列作为索引并起名为LOCATIONS_PK_IDX/*create table locations_hao_index (
deptno number(4),
dname varchar(30)
);
select * from cux_locations_19874;*/
--alter table cux_locations_19874 add constraint LOCATIONS_PK primary key(deptno);
--alter table cux_locations_19874 drop constraint LOCATIONS_PK;
create index LOCATIONS_PK_IDX on cux_locations_19874(deptno);
--drop index LOCATIONS_PK_IDX;
--40
--查询USER_INDEXES表,显示LOCATIONS_NAMED_INDEX 表的索引名字
SELECT index_name,table_nameFROM user_indexes where table_name ='CUX_LOCATIONS_19874';

Oracle查询语句练习(一)相关推荐

  1. 超适合新手的Oracle查询语句

    这篇文章主要介绍了oracle查询语句,有助于新手迅速熟悉ORACLE基本语法有助于新手迅速熟悉ORACLE基本语法,需要的朋友可以收藏下. oracle查看用户状态 select username, ...

  2. oracle查询语句大全

    oracle查询语句大全 oracle 基本命令大全一 1.create user username identified by password;//建用户名和密码oracle ,oracle 2. ...

  3. oracle查询语句中select from where group by having order by的解释与应用

    oracle查询语句中select from where group by having order by的解释与应用 查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from- ...

  4. oracle 查询条件 if,oracle查询语句if

    oracle语句查询or和andSELECT*FROMPersonsWHERE(FirstName=' (FirstName='Thomas' OR FirstName='William') AND ...

  5. 关于oracle查询语句中like '%中文的%' 查询不到数据的问题

    关于oracle查询语句中like '%中文的%' 查询不到数据的问题 问题描述: 关于oracle查询语句中like '%中文的%' 查询不到数据的问题解决 起因: 在Windows10 系统环境下 ...

  6. oracle的show语句,Oracle查询语句应用经验总结

    51Testing软件测试网;M8eC&p;F3F [ 以下的主要是介绍查询语句的实际应用的经验总结,你如果对Oracle查询语句的实际应用感兴趣的话你就可以点击以下的文章进行观看了. 希望会 ...

  7. 40多个常用的 Oracle 查询语句

    这里介绍的是40多个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询. 多看看会有帮助. ** 一.日期/时间 相关查询 ** 1.获 ...

  8. oracle 判断11位数字,45个非常有用的 Oracle 查询语句小结

    日期/时间 相关查询 1.获取当前月份的第一天 运行这个命令能快速返回当前月份的第一天.你可以用任何的日期值替换 "SYSDATE"来指定查询的日期. SELECT TRUNC ( ...

  9. ORACLE查询语句简单实例

    -------------------------------- Oracle简单查询语句 1. 选择部门30中的所有员工 select * from emp where deptno = 30; 2 ...

  10. oracle 数据语句优化,oracle 查询语句优化录

    最近,因为发现以前使用的数据查询语句的效率越来越差,导致每次进行大量数据的操作都需要耗一个小时以上.这速度实在是太龟慢了,简直是无法忍受了.本人决定亲自拿把杀猪刀砍向它,好给它颜色瞧瞧.经过一系列的测 ...

最新文章

  1. 计算机网络玩家需要掌握的八个DOS命令
  2. ABAP程序中的七大危险漏洞
  3. 【软件使用】Windows下的Objective-C集成开发环境搭建(IDE)
  4. python多线程队列爬虫流程图_python 多线程爬虫 队列queue问题。
  5. 为什么同步的StringBuffer从来都不是一个好主意
  6. nanshan 钥匙在您那儿的
  7. 了解JavaScript中的prototype (实例)
  8. 三星s8android pie,三星更改Galaxy S8的Android Pie更新计划,添加Gala
  9. wpf label字体为斜体_快来收下这份字体设计必备知识点
  10. android开发工具哪个好_小程序开发工具怎么用?哪个好用?
  11. delphi StatusBar在状态栏中显示checkBox
  12. 硬件科普系列之硬盘——总线、协议、接口和固态硬盘篇
  13. java cmyk和rgb的转换_CMYK与RGB相互转换(java)
  14. ie浏览器怎么打开html,ie浏览器在哪里打开
  15. SQL SERVER还原数据库时,如果C盘空间不足还原到其他盘的方法
  16. JavaScript判断系统语言
  17. 计算机错误代码0X000000be,电脑蓝屏0x000000be怎么解决
  18. vue-aMap高德地图的应用(添加覆盖物点坐标、自定义图标、添加信息窗体信息等)
  19. what this book can do for you ?
  20. 淘宝短视频,为什么搬运的短视频没有流量?从算法角度分析

热门文章

  1. GBA程序开发入门1
  2. ToggleSwitch控件介绍
  3. iOS 开关-UISwitch
  4. Google浏览器打开axure产品原型的解决方案
  5. 初步理解pagerank算法
  6. ssh 获取服务器文件命令,ssh读取服务器文件内容
  7. php入门写法PHP入门基础之php代码写法
  8. matplotlib绘图教程
  9. 我把Github上最牛b的Java教程和实战项目整合成了一个PDF文档
  10. 获取当前时间的毫秒时间戳