您的位置:首页 > 数据库

几条sql

2015-10-29 10:49 405 查看
   

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle