几条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;
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ORACLE LATERAL-SQL-INJECTION 个人见解