简单的SQL查询

重新回来这个行业,很多东西都生疏了,这里只是记录我的复习之一SQL语句的编写,当然有更好的方法来实现我以下的问题,不喜勿喷

--1.计算2000年1月1日到现在有多少月,多少周(四舍五入)。
SELECT ROUND(MONTHS_BETWEEN(SYSDATE,'1-1月-2000')) "相隔2000年几个月",
       ROUND(MONTHS_BETWEEN(SYSDATE,'1-1月-2000'))*7 "相隔2000年多少周"
FROM DUAL;


--2.查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)。
SELECT E.EMPNO,E.ENAME,E.JOB,E.MGR,E.HIREDATE,E.SAL,E.COMM,E.DEPTNO
FROM EMP E WHERE INSTR(E.ENAME,'A',3,1)>0;

 

--3.使用trim函数将字符串‘hello’、‘ Hello ’、‘bllb’、‘ hello ’
--分别处理得到下列字符串ello、Hello、ll、hello。
SELECT TRIM(LEADING 'h' FROM 'hello') --"字符串ello"
FROM DUAL;

SELECT TRIM(' Hello ')-- "字符串Hello"
FROM DUAL;

SELECT TRIM(BOTH 'b' FROM 'bllb') --"字符串ll"
FROM DUAL;

SELECT TRIM(' hello ') --"字符串hello"
FROM DUAL;


--4.将员工工资按如下格式显示:123,234.00 RMB 。
SELECT CONCAT(TO_CHAR(E.SAL,'999,999.99'),'RMB') 员工工资
FROM EMP E;


--5.查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。
SELECT E.ENAME 员工的姓名,
(CASE NVL(E.MGR,0)
  WHEN 0 THEN 'No Manager'
    ELSE TO_CHAR(E.MGR)
END) 经理编号
FROM EMP E;

SELECT E.ENAME,NVL(TO_CHAR(E.MGR),'No Manager') 经理编号
FROM EMP E;


--6.将员工的参加工作日期按如下格式显示:月份/年份。
SELECT E.ENAME 员工,TO_CHAR(E.HIREDATE,'MONTH/YYYY') 员工的参加工作日期
FROM EMP E;


--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;

SELECT E.ENAME 员工,E.SAL 员工的工资,
       (CASE TRUNC(E.SAL/1000)
               WHEN 0 THEN 0
               WHEN 1 THEN E.SAL*0.1
                 WHEN 2 THEN E.SAL*1.5
                   ELSE E.SAL*0.2
        END) 应交税款
FROM EMP E;

SELECT E.ENAME 员工,E.SAL 员工的工资,
       DECODE(TRUNC(E.SAL/1000),0,0,
               1,E.SAL*0.1,
               2,E.SAL*0.15,E.SAL*0.2) 应交税款
FROM EMP E;


--8.创建一个查询显示所有雇员的ename和sal。格式化sal为15 个字符长度,
--用$ 左填充,列标签SALARY。
SELECT E.ENAME,LPAD(E.SAL,15,'$') SALARY
FROM EMP E;

 

-- 1.显示员工SMITH的姓名,部门名称,直接上级名称
SELECT E.ENAME 姓名,D.DNAME 部门名称,P.ENAME 直接上级名称
FROM EMP E INNER JOIN EMP P
ON E.MGR=P.EMPNO AND E.ENAME='SMITH' INNER JOIN DEPT D
ON E.DEPTNO=D.DEPTNO;

SELECT E.ENAME 姓名,D.DNAME 部门名称,P.ENAME 直接上级名称
FROM EMP E,EMP P,DEPT D
WHERE E.MGR=P.EMPNO AND E.ENAME='SMITH' AND E.DEPTNO=D.DEPTNO;


-- 2.显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。
SELECT E.ENAME 员工姓名,D.DNAME 部门名称,E.SAL 工资,G.GRADE 工资级别
FROM EMP E INNER JOIN DEPT D
ON E.DEPTNO=D.DEPTNO INNER JOIN SALGRADE G
ON E.SAL BETWEEN G.LOSAL AND G.HISAL AND G.GRADE>4;

SELECT * FROM SALGRADE;
SELECT * FROM EMP;

SELECT E.ENAME 员工姓名,D.DNAME 部门名称,E.SAL 工资,G.GRADE 工资级别
FROM EMP E,DEPT D,SALGRADE G
WHERE E.DEPTNO=D.DEPTNO AND E.SAL BETWEEN G.LOSAL AND G.HISAL AND G.GRADE>4;

-- 3.显示员工KING和FORD管理的员工姓名及其经理姓名。
SELECT DISTINCT E.ENAME 员工名,M.ENAME 手下名,EM.ENAME 老板名
FROM EMP E INNER JOIN EMP P
ON E.ENAME IN('KING','FORD') INNER JOIN EMP M
ON E.EMPNO=M.MGR LEFT JOIN EMP EM
ON E.MGR=EM.EMPNO;

SELECT DISTINCT E.ENAME 员工名,P.ENAME 手下名,EM.ENAME 老板名
FROM EMP E,EMP P,EMP EM
WHERE E.ENAME IN('KING','FORD') AND E.EMPNO=P.MGR AND E.MGR=EM.EMPNO(+);

-- 4.显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。
SELECT E.ENAME 员工姓名,E.HIREDATE 参加工作时间,P.ENAME 经理名,P.HIREDATE 参加工作时间
FROM EMP E INNER JOIN EMP P
ON E.MGR=P.EMPNO AND E.HIREDATE<P.HIREDATE;

SELECT E.ENAME 员工姓名,E.HIREDATE 参加工作时间,P.ENAME 经理名,P.HIREDATE 参加工作时间
FROM EMP E,EMP P
WHERE E.MGR=P.EMPNO AND E.HIREDATE<P.HIREDATE;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值