几条sql

   
1.根据部门查询总人数,男女人数:
    SELECT COUNT(1) 总数,
           COUNT(CASE SEX
                   WHEN '男' THEN
                    1
                 END) 男生,
           COUNT(CASE SEX
                   WHEN '女' THEN
                    1
                 END) 女生
      FROM EMP
     GROUP BY DEPTNO
    HAVING DEPTNO = 20;

SELECT DEPTNO, (A + B) AS 总数, A AS 女, B AS 男
  FROM (SELECT DEPTNO,
               SUM(DECODE(SEX, '女', 1, 0)) A,
               SUM(DECODE(SEX, '男', 1, 0)) B
          FROM EMP
         GROUP BY DEPTNO);

2) 写SQL语句,查询哪个部门的平均工资是最高的,列出部门编码、平均工资。
SELECT DEPTNO, AVG(SAL)
  FROM EMP
 GROUP BY DEPTNO
HAVING AVG(SAL) = (SELECT MAX(AVG(SAL)) FROM EMP GROUP BY DEPTNO);

3) 写SQL语句,列出各个部门中工资最高的员工的信息:名字、部门号、工资。
SELECT ENAME, DEPTNO, SAL
  FROM EMP
 WHERE (DEPTNO, SAL) IN (SELECT DEPTNO,MAX(SAL) FROM EMP GROUP BY DEPTNO);

4) 写SQL语句,查询管理者是“KING”的员工姓名(ename)和工资(sal)。
SELECT ENAME, SAL
  FROM EMP
 WHERE MGR = (SELECT EMPNO FROM EMP WHERE ENAME = 'KING');

5) 写SQL语句, 查询部门所在地(loc)为“NEW YORK”的部门的员工的姓名(ename),部门名称(dname)和岗位名称(job)。
SELECT E1.ENAME, E1.JOB, E2.DNAME
  FROM EMP E1
  JOIN DEPT E2 ON (E1.DEPTNO = E2.DEPTNO)
 WHERE E1.DEPTNO = (SELECT DEPTNO FROM DEPT WHERE LOC = 'NEW YORK');

6) 写SQL语句,查询工资比公司平均工资高的所有员工的员工号(empno), 姓名(ename)和工资(sal)。
SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP);

7) 写SQL语句,查询姓名中包含字母“u”的员工在相同部门的员工的员工号(empno)和姓名(ename)。
SELECT EMPNO, ENAME
  FROM EMP
 WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE ENAME LIKE '%U%');

8) 写SQL语句,查询哪些员工的薪水比本部门的平均薪水低。    
 SELECT E1.ENAME, E1.DEPTNO, E1.SAL
  FROM EMP E1, (SELECT DEPTNO, AVG(SAL) SAL FROM EMP GROUP BY DEPTNO) E2
 WHERE E1.DEPTNO = E2.DEPTNO

   AND E1.SAL < E2.SAL;

9)按职位涨工资,pl/sql 编程


ROLLBACK;
--给员工涨工资,MANAGER+500   ANALYST+800 其他涨100
DECLARE
 --定义光标代表给哪些员工涨工资
 CURSOR cemp IS SELECT empno,ejob FROM emp;
 pempno emp.empno%TYPE;
 pjob emp.ejob%TYPE;
BEGIN
 ROLLBACK;
 --打开光标
 OPEN cemp;
 LOOP
 --取出一个员工
 FETCH cemp INTO pempno,pjob;
 EXIT WHEN cemp%NOTFOUND;
 --判断员工职位
 IF pjob ='MANAGER'THEN UPDATE emp SET sal =sal +500 WHERE empno = pempno;
  ELSIF pjob='ANALYST'THEN UPDATE emp SET sal =sal +800 WHERE empno = pempno;
  ELSE UPDATE emp SET sal=sal+100 WHERE empno = pempno;
  END IF;
  COMMIT;
  END LOOP;
  dbms_output.put_line('涨工资完成');
  CLOSE cemp;
END;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值