FROM EMP_GH
WHERE SAL*12>20000 8:查看公司共有多少种职位 SELECT
DISTINCT JOB FROM EMP_GH
9:按部门号从小到大排列查看员工 SELECT
ENAME,DEPTNO FROM EMP_GH
ORDER BY DEPTNO
10:查看每个部门的最高,最低,平均工资,和工资总和 SELECT
MAX(SAL),MIN(SAL),AVG(SAL),SUM(SAL),DEPTNO FROM EMP_GH GROUP BY DEPTNO
11:查看平均工资高于2000的部门的最低薪水 SELECT
DEPTNO,MIN(SAL) FROM EMP_GH GROUP BY DEPTNO
HAVING AVG(SAL)>2000
12:查看在NEWYORK工作的员工 SELECT
E.ENAME,D.LOC
FROM EMP_GH E JOIN DEPT_GH D ON E.DEPTNO=D.DEPTNO WHERE D.LOC='NEW YOUK'
13:查看所有员工及所在部门信息,若该员工没有部门,则 部门信息以NULL显示 SELECT
E.ENAME,D.JOB
FROM EMP_GH E LEFT OUTER JOIN EMP_GH D ON E.EMPNO = D.EMPNO 14:查看ALLEN的上司是谁 SELECT
E.ENAME, M.ENAME
FROM EMP_GH E JOIN EMP_GH M ON E.MGR=M.EMPNO
WHERE E.ENAME='ALLEN' TTS-TEST
1、查询职员表中,在20和30号部门工作的员工姓名和部门号。 SELECT ENAME,DEPTNO FROM EMP_GH
WHERE DEPTNO=20 OR DEPTNO=30
2、查询职员表中,没有管理者的员工姓名及职位,并按职位排序。 SELECT ENAME,JOB FROM EMP_GH WHERE MGR IS NULL ORDER BY JOB ASC
3、查询职员表中,有绩效的员工姓名、薪资和绩效,并按工资倒序排列。 SELECT ENAME,SAL,COMM FROM EMP_GH
WHERE COMM IS NOT NULL ORDER BY SAL DESC
4、查询职员表中,员工姓名的第三个字母是A的员工姓名。 SELECT ENAME FROM EMP_GH WHERE ENAME LIKE '__A%'
5、查询职员表中的职员名字、职位、薪资,并显示为如图-3所示效果: SELECT ENAME || ','||JOB||','||SAL OUT_PUT FROM EMP_GH 提示:列之间用逗号连接,列头显示成OUT_PUT。
6、查询职员表中员工号、姓名、工资,以及工资提高百分之20%后的结果。 SELECT EMPNO,ENAME,SAL,SAL*1.2 FROM EMP_GH
7、查询员工的姓名和工资,条件限定为:工资必须大于1200,并对查询结果按入职时间进行排列,早入职排在前面,晚入职排在后面。 SELECT ENAME,SAL ,HIREDATE FROM EMP_GH WHERE SAL>1200 ORDER BY HIREDATE
8、查询ACCOUNT部门以外的其他部门的编号、名称以及所在地。 SELECT D.DEPTNO,D.DNAME,D.LOC FROM EMP_GH E JOIN DEPT_GH D ON E.DEPTNO=D.DEPTNO WHERE D.DNAME<>'ACCOUNT'
1、查询每个部门中每个职位的最高薪水。 SELECT MAX(SAL),DEPTNO,JOB FROM EMP_GH GROUP BY JOB , DEPTNO
SELECT A.ename, A.sal, A.deptno, b.maxsal
FROM emp a,(SELECT deptno, max(sal) maxsal FROM emp GROUP BY deptno) b WHERE A.deptno = b.deptno AND a. sal < b.maxsal; 3、假设员工表中,员工和管理者中间只有一个层级,也就是说,每个员工最多只有一个上级,作为管理者的员工不再有上级管理者,并且,上级管理者相同的员工,他们属于同一个部门。找出EMP 中那些工资高于他们所在部门的管理者工资的员工。 SELECT E.ENAME
FROM EMP_GH E JOIN EMP_GH M ON E.MGR = M.EMPNO
WHERE E.SAL>M.SAL
4、找出EMP 中那些工资高于他们所在部门普通员工平均工资的员工。 SELECT E.ENAME FROM EMP_GH E JOIN
(SELECT DEPTNO,AVG(SAL) A FROM EMP_GH GROUP BY DEPTNO ) M
ON E.DEPTNO=M.DEPTNO WHERE E.SAL>M.A
SELECT classid,AVG(MONTHS_BETWEEN(SYSDATE,entertime)) FROM student
WHERE AVG( MONTHS_BETWEEN (SYSDATE, entertime))>12 GROUP BYclassid
ORDER BY AVG(MONTHS_BETWEEN (SYSDATE, entertime));
有职员表emp,若需列出所有薪水高于平均薪水值的员工信息,则有 SQL语句如下:
SELECT ENAME ,E.SAL,M.A FROM EMP_GH E ,(
SELECT AVG(SAL) A FROM EMP_GH ) M
WHERE E.SAL>M.A
编写一条SQL 语句,查询出每门课都大于80 分的学生姓名。 SELECT ENAME FROM
WHERE KECHEGN A>80 AND KECHENG B>80
9.select LPAD('TARDIS', 3, '*') from dual;
***********************************day04**************************************** ***子查询 WHERE 之后
子查询是嵌套在查询语句之中的作用是为了外层SQL语句提供数据,子查询常用dql,但是也可以用于DML和DDL之中
子查询的结果不同可以进行分类:
**单行单列子查询:使用< ,>, <> ,等比较
** 多行单列子查询:使用 ALL,ANY,IN,NOT IN 进行比较 ** 多行多列子查询: 被看做一张表使用
** 其中单行单列与多列单列常用语where 和 HAVING 中作为过滤条件使用 而多行多列(包括单行多列)常常当做一张表使用
谁的工资比CLARK高
SELECT ENAME,SAL FROM EMP_GH
WHERE SAL>(SELECT SAL FROM emp_gh WHERE ENAME = 'CLARK') 或
SELECT ENAME ,SAL
FROM EMP_GH E , (SELECT SAL A FROM EMP_GH WHERE ENAME = 'CLARK') B WHERE E.SAL>B.A
*** 和Jones同部门的 SELECT ENAME,DEPTNO FROM EMP_GH
WHERE DEPTNO=(SELECT DEPTNO FROM EMP_GH WHERE ENAME='JONES')
SELECT ENAME,DEPTNO
FROM EMP_GH E,(SELECT DEPTNO D FROM EMP_GH WHERE ENAME='JONES') B WHERE E.DEPTNO=B.D
*** 谁高于公司平均工资 SELECT ENAME ,SAL FROM EMP_GH
WHERE SAL>(SELECT AVG(SAL) FROM EMP_GH)
SELECT E.ENAME,E.SAL,S.A
FROM EMP_GH E ,(SELECT AVG(SAL) A FROM EMP_GH) S WHERE E.SAL>S.A
*** 查看部门的平均工资,前提是该部门的平均工资高于30号部门的平均工资 SELECT DEPTNO,AVG(SAL) FROM EMP_GH E GROUP BY DEPTNO HAVING AVG(SAL)>(
SELECT AVG(SAL) FROM EMP_GH GROUP BY DEPTNO HAVING DEPTNO =30)
*** 查看和cleark职位同部门的员工 SELECT ENAME ,DEPTNO FROM EMP_GH
WHERE DEPTNO IN(SELECT DEPTNO FROM EMP_GH WHERE JOB ='CLERK') AND JOB<>'CLERK'
** 比20号部门所有人工资都高的人 SELECT ENAME ,SAL FROM EMP_GH
WHERE SAL>ALL(SELECT SAL FROM EMP_GH WHERE DEPTNO=20)
******EXISTS 语句
***EXISTS后面跟子查询,进行过滤,可放在where后 如果子查询有结果则返回 TRUE 没有结果 返回 false
查看有员工的部门信息 SELECT DEPTNO ,DNAME FROM DEPT_GH D WHERE EXISTS (
SELECT ENAME FROM EMP_GH E WHERE E.DEPTNO=D.DEPTNO) *****子查询 FROM 之后
***当子查询是多行多列时,就可以当成一张表进行关联 查看比自己部门平均工资高的员工 SELECT E.ENAME,E.SAL
FROM EMP_GH E,(SELECT AVG(SAL) A ,DEPTNO FROM EMP_GH GROUP BY DEPTNO) D WHERE E.DEPTNO=D.DEPTNO AND E.SAL>D.A
每个部门最低工资s是谁
SELECT E.ENAME,E.SAL,E.DEPTNO
FROM EMP_GH E,(SELECT MIN(SAL) A,DEPTNO FROM EMP_GH GROUP BY DEPTNO ) D WHERE E.DEPTNO= D.DEPTNO AND E.SAL=d.A
********子查询 在 SELECT 之后
****作为一个字段值在外层查询中集中显示 SELECT E.ENAME,E.SAL,
(SELECT D.DNAME FROM DEPT_GH D WHERE D.DEPTNO=E.DEPTNO) DNAME FROM EMP_GH E
*******分页查询
当一个结果集数据过多时采用分页查询: 原理:将数据分批查询出来,
好处:1.提高客服端到服务端的相应速度 2.减少网络间的传输,降低资源消耗
缺陷:分页由于在SQL中没有定义,所以不同的数据库分页语句不一样
ROWNUM:是一个伪列
rownum不存在任何一张表中,但是每张表都可以查询该字段,该字段的值为结果集