欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle基础练习(一)

程序员文章站 2024-01-29 23:07:34
-- 1、找出每个月倒数第三天受雇的员工 -- 第一步:获取每个月的最后一天 SELECT LAST_DAY(Trunc(HIREDATE, 'MONTH...
-- 1、找出每个月倒数第三天受雇的员工

-- 第一步:获取每个月的最后一天
SELECT  LAST_DAY(Trunc(HIREDATE, 'MONTH'))  FROM EMP;
--第二步:获取倒数三天
SELECT LAST_DAY(HIREDATE)-2 FROM EMP;
-- 第四步:查询满足条件的人信息
SELECT * FROM EMP WHERE HIREDATE = LAST_DAY(HIREDATE)-2

--2、找出35年前的雇员


--第一步: 计算所有员工的工龄
--计算所有员工的工龄 方法一

SELECT E.EMPNO,E.ENAME,FLOOR(MONTHS_BETWEEN(SYSDATE,E.HIREDATE)/12) 工龄 FROM EMP E;

--计算所有员工的工龄 方法二
SELECT E.EMPNO,E.ENAME,FLOOR((SYSDATE-E.HIREDATE)/365) 工龄 FROM EMP E;

----计算所有员工的工龄 方法三

SELECT E.EMPNO,E.ENAME, EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM E.HIREDATE) 工龄 FROM EMP E;


-- 工龄满足条件
SELECT E.EMPNO,E.ENAME FROM EMP E WHERE EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM E.HIREDATE) = 35

-- 3、给所有员工名字前加dear,并且名字首字母大写,其余小写

--第一步:查询出名字
SELECT E.ENAME FROM EMP E;
-- 第二步,加dear
SELECT CONCAT('deal_',E.ENAME) FROM EMP E;
--第三步:首字母大写其余小写
SELECT  INITCAP(CONCAT('deal_',E.ENAME)) NEWNAME FROM EMP E;

--4、找出姓名为五个字的员工
--第一步 查出员工姓名长度
SELECT LENGTH(E.ENAME) name_legth FROM EMP E;
--第二步; 查出满足条件的员工信息
SELECT e.ename FROM EMP E where LENGTH(E.ENAME) = 5;
-- 5、找不姓名中不带R的员工
select ename from emp where ename not like '%R%'

--6、获取所有员工姓名的第一个字

SELECT substr(E.ENAME,1,1) FROM EMP E;

--7 计算员工入职天数(四舍五入)
--第一步:计算员工入职天数
SELECT SYSDATE - E.HIREDATE FROM EMP E;
-- 第二步:四舍五入
SELECT ROUND(SYSDATE - E.HIREDATE) FROM EMP E;

--8 找出二月份入职的员工

--第一步:找出员工入职的月份


SELECT extract(month from E.HIREDATE) FROM EMP E;

--第一步:找出员工入职的月份为2 的员工信息

SELECT e.ename FROM EMP E where extract(month from E.HIREDATE) = 2;

--9、列出至少有一个员工的所有部门

--第一步列出所有部门编号

SELECT DEPTNO FROM EMP
-- 第二步 查询出满足条件的部门

SELECT * FROM DEPT WHERE DEPTNO IN (SELECT DEPTNO FROM EMP)

--10、列出所有员工的姓名及其直接上级的姓名。  
--第一步 :找出有上级的员工
SELECT EMPNO, ENAME,emp.*
 FROM EMP  
WHERE MGR IN (SELECT EMP.EMPNO FROM EMP);
--第二步:列出所有员工的姓名及其直接上级的姓名

 SELECT A.EMPNO, A.ENAME, B.ENAME manager
   FROM EMP A, EMP B
  WHERE A.MGR = B.EMPNO;