FORD ANALYST JAMES CLERK JONES MANAGER KING PRESIDENT MARTIN SALESMAN MILLER CLERK SCOTT ANALYST SMITH CLERK TURNER SALESMAN WARD SALESMAN 按多个字段排序:
如按部门号升序,按工资降序排序 SELECT DEPTNO, JOB, ENAME
36000 11400 35700 60000 15000 15600 36000 9600 18000 15000 20 30 20 10 30 10 20 20 30 30
FROM EMP
ORDER BY DEPTNO, SAL DESC; DEPTNO JOB ------------------------- ------------------------- 10 PRESIDENT 10 MANAGER 10 CLERK 20 ANALYST 20 ANALYST 20 MANAGER 20 CLERK 20 CLERK 30 MANAGER 30 SALESMAN 30 SALESMAN 30 SALESMAN 30 SALESMAN 30 CLERK
6. 带条件的查询
1)查询工作是CLERK的所有职工的姓名,职工号和部门号 SELECT ENAME, EMPNO, JOB, DEPTNO FROM EMP
ENAME
------------------------- KING CLARK MILLER SCOTT FORD JONES ADAMS SMITH BLAKE ALLEN TURNER WARD MARTIN JAMES
WHERE JOB = ‘CLERK’; ENAME EMPNO JOB ------------------------- ------------------------- ------------------------- SMITH 7369 CLERK ADAMS 7876 CLERK JAMES 7900 CLERK MILLER 7934 CLERK 2)从DEPT表中查询出部门号大于20的部门名称 SELECT DNAME, DEPTNO
DEPTNO
------------------------- 20 20 30 10
FROM DEPT
WHERE DEPTNO > 20; DNAME DEPTNO ------------------------- ------------------------- SALES 30 OPERATIONS 40 3)复合条件查询
查询工作是MANAGER并且工资大于1500,或者工作是SALESMAN的职工信息:
第31页
SELECT EMPNO,ENAME, JOB,SAL,DEPTNO
FROM EMP
WHERE SAL>1500 AND JOB = ‘MANAGER’ OR JOB = ‘SALESMAN’; EMPNO ENAME JOB SAL ----------------- ---------------- ----------------- ------------------ DEPTNO ----------------- 7499 ALLEN SALESMAN 1600.00 7521 WARD SALESMAN 1250.00 7566 JONES MANAGER 2975.00 7654 MARTIN SALESMAN 1250.00 7698 BLAKE MANAGER 2850.00 7782 CLARK MANAGER 2450.00 7844 TURNER SALESMAN 1500.00
7. 操作符的应用 1)BETWEEN的应用
查询工资在1000到2000之间的职工名字和工资信息。 SELECT ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000; ENAME SAL ------------------------------- --------------- ALLEN 1600.00 WARD 1250.00 MARTIN 1250.00 TURNER 1500.00 ADAMS 1100.00 MILLER 1300.00
2)IN
查询有7902,7566,7788三个MGR号之一的所有职工: SELECT EMPNO, ENAME, SAL, MGR FROM EMP
WHERE MGR IN (7902,7566,7788); EMPNO ENAME SAL
------------------------- -------------------------- -------------------------- 7369 SMITH 800.00 7788 SCOTT 3000.00 7876 ADAMS 1100.00 89-2 FORD 3000.00
3)LIKE
通配符%代表任意0或多个字符。 通配符_代表任意单个字符。 查询名字以“S”开始的所有职工: SELECT ENAME
FROM EMP
WHERE ENAME LIKE ‘S%’; ENAME
30 30 20 30 30 10 30
MGR
-------------------- 7902 7566 7788 7566
第32页
------------------------ SMITH SCOTT
查询名字只有4个字符的所有职工: SELECT ENAME FROM EMP
WHERE ENAME LIKE ‘_ _ _ _’; ENAME
------------------------ WARD KING FORD
4)IS NULL
查询没有管理者的所有职工: SELECT ENAME,MGR FROM EMP
WHERE MGR IS NULL; ENAME MGR ------------------------ ---------- KING
8. 单&号替代变量 1)数字变量输入:
SELECT EMPNO,ENAME,SAL FROM EMP
WHERE DEPTNO = &DEPARTMENT_NUMBER; Enter value for department_number:10 EMPNO ENAME SAL --------------------- --------------------- ------------------------ 7782 CLARK 2450.00 7839 KING 5000.00 7934 MILLER 1300.00 2)字符串变量输入:
SELECT EMPNO,ENAME,SAL*12 FROM EMP
WHERE JOB = ‘&JOB_TITLE’;
Enter value for job_title: MANAGER ENAME DEPTNO SAL*12
-------------------- ----------------------- ----------------------- JONES 20 35700.00 BLAKE 30 34200.00 CLARK 10 29400.00
9. 字符函数的应用 见表4-5
10.数字函数的应用 见表4-4
11.日期函数的应用
第33页
见表4-6,4-7
12.数据类型转换
1)TO_CHAR 数字数据转换为字符串 select to_char(8897) from dual;
2)TO_NUMBER字符串数据转换为数字 select to_number(‘8897’) from dual; 3)TO_DATE字符串数据转换为日期数据
select to_date(‘12-DEC-02’) from dual;
13.分组函数的应用 1)分组函数见表4-8 2)分组函数应用 求平均值
SELECT AVG(SAL) FROM EMP; AVG(SAL) ------------------ 2073.2149
求最小值
SELECT MIN(SAL) FROM EMP WHERE JOB = ‘CLERK’;MIN(SAL)
--------------------- 800
求数目
SELECT COUNT(*) FROM EMP WHERE DEPTNO = 20; COUNT(*)
--------------------- 5
3)GROUP BY子句
求每个部门中的平均工资:
SELECT JOB,AVG(SAL) FROM EMP GROUP BY JOB; JOB AVG(SAL) ------------------- --------------------------- ANALYST 3000 CLERK 1037.5 MANAGER 2758.33333 PRESIDENT 5000 SALESMAN 1400 4)HAVING子句
查询人数超过3人的部门中的平均工资:
SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO
HAVING COUNT(*)>3; DEPTNO AVG(SAL) ------------------- ----------------------- 20 2175 30 1566.66667
第34页
14.连接
从EMP和DEPT中查询出职工名字、工作和部门名称: SELECT ENAME,JOB,DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO; ENAME JOB DNAME
----------------------- -------------------- ----------------------- CLARK MANAGER ACCOUNTING MILLER CLERK ACCOUNTING KING PRESIDENT ACCOUNTING SMITH CLERK RESEARCH SCOTT ANALYST RESEARCH JONES MANAGER RESEARCH ADAMS CLERK RESEARCH FORD ANAYLST RESEARCH ALLEN SALESMAN SALES BLAKE MANAGER SALES TURNER SALESMAN SALES JAMES CLERK SALES MARTIN SALESMAN SALES WARD SALESMAN SALES
15.子查询的应用
从EMP中查询出工资最低的职工:
SELECT ENAME,JOB,SAL FROM EMP
WHERE SAL = (SELECT MIN(SAL)FROM EMP ); ENAME JOB DNAME ---------------------- ------------------------ --------------------- SMITH CLERK 800 从EMP中查询出每个部门工资最低的职工: SELECT ENAME,SAL,DEPTNO FROM EMP
WHERE SAL IN
(SELECT MIN(SAL) FROM EMP GROUP BY DEPTNO);ENAME SAL DEPTNO ------------------------ -------------------- -------------------- SMITH 800 20 JAMES 950 30 MILLER 1300 10
四.上机作业
1. 对基本表S、C、SC操作
1)检索学习课程号为C2的学生学号与姓名。 2)检索选修课程名为MATHS的学生学号与姓名。 3)检索不学C2课的学生姓名与年龄。
4)检索学习全部课程的学生心目。
5)计算每个学生有成绩的课程门数和平均成绩。
2.对Oracle数据库基本表EMP和DEPT操作:
第35页