--编写多表查询语句的一般过程
--(1)、分析句子要涉及到哪些表
--(2)、对应的表中要查询哪些关联字段
--(3)、确定连接条件或筛选条件
--(4)、写成完整的SQL查询语句
--1、查询出每一位雇员的姓名、职位、以及领导的姓名。
SELECT e.ename 雇佣姓名,e.job 职位,m.ename 领导姓名 FROM EMP e,EMP m WHERE e.mgr = m.empno;
--结果
雇佣姓名 职位 领导姓名
---------- --------- ----------
FORD ANALYST JONES
SCOTT ANALYST JONES
TURNER SALESMAN BLAKE
ALLEN SALESMAN BLAKE
WARD SALESMAN BLAKE
JAMES CLERK BLAKE
MARTIN SALESMAN BLAKE
MILLER CLERK CLARK
ADAMS CLERK SCOTT
BLAKE MANAGER KING
JONES MANAGER KING
CLARK MANAGER KING
SMITH CLERK FORD
13 rows selected
--2、查询每个雇佣的雇佣编号,姓名、基本工资、职位、领导的姓名、部门名称及位置
SELECT e.empno 编号,e.ename 姓名,e.sal 工资,e.job 职位,m.ename 领导姓名,d.dname 部门名称,d.loc 所在位置 FROM emp e,emp m,dept d WHERE m.empno=e.mgr AND m.deptno = d.deptno;
--结果
编号 姓名 工资 职位 领导姓名 部门名称 所在位置
----- ---------- --------- --------- ---------- -------------- -------------
7369 SMITH 800.00 CLERK FORD RESEARCH DALLAS
7499 ALLEN 1600.00 SALESMAN BLAKE SALES CHICAGO
7521 WARD 1250.00 SALESMAN BLAKE SALES CHICAGO
7566 JONES 2975.00 MANAGER KING ACCOUNTING NEW YORK
7654 MARTIN 1250.00 SALESMAN BLAKE SALES CHICAGO
7698 BLAKE 2850.00 MANAGER KING ACCOUNTING NEW YORK
7782 CLARK 2450.00 MANAGER KING ACCOUNTING NEW YORK
7788 SCOTT 3000.00 ANALYST JONES RESEARCH DALLAS
7844 TURNER 1500.00 SALESMAN BLAKE SALES CHICAGO
7876 ADAMS 1100.00 CLERK SCOTT RESEARCH DALLAS
7900 JAMES 950.00 CLERK BLAKE SALES CHICAGO
7902 FORD 3000.00 ANALYST JONES RESEARCH DALLAS
7934 MILLER 1300.00 CLERK CLARK ACCOUNTING NEW YORK
13 rows selected
--要求查询出每一个雇员的编号、姓名、工资、部门名称、工资在所在公司的工资等级
SELECT e.empno,e.ename,e.sal,d.dname,sg.grade FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND sg.hisal >=e.sal AND sg.losal <=e.sal;
--结果
EMPNO ENAME SAL DNAME GRADE
----- ---------- --------- -------------- ----------
7369 SMITH 800.00 RESEARCH 1
7900 JAMES 950.00 SALES 1
7876 ADAMS 1100.00 RESEARCH 1
7654 MARTIN 1250.00 SALES 2
7521 WARD 1250.00 SALES 2
7934 MILLER 1300.00 ACCOUNTING 2
7844 TURNER 1500.00 SALES 3
7499 ALLEN 1600.00 SALES 3
7782 CLARK 2450.00 ACCOUNTING 4
7698 BLAKE 2850.00 SALES 4
7566 JONES 2975.00 RESEARCH 4
7902 FORD 3000.00 RESEARCH 4
7788 SCOTT 3000.00 RESEARCH 4
7839 KING 5000.00 ACCOUNTING 5
14 rows selected
--或者
SELECT e.empno,e.ename,e.sal,d.dname,sg.grade FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND e.sal BETWEEN sg.losal AND sg.hisal;
--结果
EMPNO ENAME SAL DNAME GRADE
----- ---------- --------- -------------- ----------
7839 KING 5000.00 ACCOUNTING 5
7902 FORD 3000.00 RESEARCH 4
7788 SCOTT 3000.00 RESEARCH 4
7566 JONES 2975.00 RESEARCH 4
7698 BLAKE 2850.00 SALES 4
7782 CLARK 2450.00 ACCOUNTING 4
7499 ALLEN 1600.00 SALES 3
7844 TURNER 1500.00 SALES 3
7934 MILLER 1300.00 ACCOUNTING 2
7521 WARD 1250.00 SALES 2
7654 MARTIN 1250.00 SALES 2
7876 ADAMS 1100.00 RESEARCH 1
7900 JAMES 950.00 SALES 1
7369 SMITH 800.00 RESEARCH 1
--还或者
SELECT e.empno,e.ename,e.sal,d.dname,sg.grade,DECODE(sg.grade,'1','第一等级工资','2','第二等级工资','3','第三等级工资','4','第四等级工资','5','第五等级工资') 等级 FROM emp e,dept d,salgrade sg WHERE e.deptno = d.deptno AND e.sal BETWEEN sg.losal AND sg.hisal;
--结果
EMPNO ENAME SAL DNAME GRADE 等级
----- ---------- --------- -------------- ---------- ------------
7839 KING 5000.00 ACCOUNTING 5 第五等级工资
7902 FORD 3000.00 RESEARCH 4 第四等级工资
7788 SCOTT 3000.00 RESEARCH 4 第四等级工资
7566 JONES 2975.00 RESEARCH 4 第四等级工资
7698 BLAKE 2850.00 SALES 4 第四等级工资
7782 CLARK 2450.00 ACCOUNTING 4 第四等级工资
7499 ALLEN 1600.00 SALES 3 第三等级工资
7844 TURNER 1500.00 SALES 3 第三等级工资
7934 MILLER 1300.00 ACCOUNTING 2 第二等级工资
7521 WARD 1250.00 SALES 2 第二等级工资
7654 MARTIN 1250.00 SALES 2 第二等级工资
7876 ADAMS 1100.00 RESEARCH 1 第一等级工资
7900 JAMES 950.00 SALES 1 第一等级工资
7369 SMITH 800.00 RESEARCH 1 第一等级工资
14 rows selected
--左右连接
--当(+)在连接条件的左边的时候,表示的是右连接
--当(+)在连接条件的右边的时候,表示的是左连接
--3、查询每个雇员的姓名和领导的姓名
SELECT e.ename 雇员姓名,m.ename 领导姓名 FROM emp e,emp m WHERE m.empno(+) = e.mgr;
--结果
雇员姓名 领导姓名
---------- ----------
FORD JONES
SCOTT JONES
JAMES BLAKE
TURNER BLAKE
MARTIN BLAKE
WARD BLAKE
ALLEN BLAKE
MILLER CLARK
ADAMS SCOTT
CLARK KING
BLAKE KING
JONES KING
SMITH FORD
KING
14 rows selected
--4、统计出领取佣金和不领取佣金的雇员人数和平均工资
SELECT comm,COUNT(empno),AVG(sal) FROM emp GROUP BY comm;--(此语句不完善,那位看了之后又什么想法的话欢迎大家回复)
--结果
COMM COUNT(EMPNO) AVG(SAL)
--------- ------------ ----------
10 2342.5
1400.00 1 1250
500.00 1 1250
300.00 1 1600
0.00 1 1500
--5、按照职位分组,求出每个职位的最高工资、最低工资以及平均工资
SELECT job ,COUNT(empno),MAX(sal),MIN(sal),AVG(sal) FROM emp GROUP BY job;
--结果
JOB COUNT(EMPNO) MAX(SAL) MIN(SAL) AVG(SAL)
--------- ------------ ---------- ---------- ----------
CLERK 4 1300 800 1037.5
SALESMAN 4 1600 1250 1400
PRESIDENT 1 5000 5000 5000
MANAGER 3 2975 2450 2758.33333
ANALYST 2 3000 3000 3000
--6、统计平均工资最高和最低
SELECT MAX(AVG(sal)),MIN(AVG(sal)) FROM EMP GROUP BY job;
--结果
MAX(AVG(SAL)) MIN(AVG(SAL))
------------- -------------
5000 1037.5
--7、查询出每个部门的名称、部门人数、平均工资
SELECT d.dname,COUNT(e.empno),NVL(AVG(e.sal),0) FROM emp e,dept d WHERE d.deptno = e.deptno(+) GROUP BY d.dname;
--结果
DNAME COUNT(E.EMPNO) NVL(AVG(E.SAL),0)
-------------- -------------- -----------------
ACCOUNTING 3 2916.66666666667
OPERATIONS 0 0
RESEARCH 5 2175
SALES 6 1566.66666666667
--8、查询出每个部门的名称、位置、部门人数、平均工资(这是一个多字段分组查询)
SELECT d.deptno,d.dname,d.loc,COUNT(e.empno),NVL(AVG(sal),0) FROM emp e, dept d WHERE d.deptno = e.deptno(+) GROUP BY d.deptno,d.dname,d.loc ;
DEPTNO DNAME LOC COUNT(E.EMPNO) NVL(AVG(SAL),0)
------ -------------- ------------- -------------- ---------------
20 RESEARCH DALLAS 5 2175
40 OPERATIONS BOSTON 0 0
10 ACCOUNTING NEW YORK 3 2916.6666666666
30 SALES CHICAGO 6 1566.6666666666
--9、统计平均工资大于2000的部门的详细信息
SELECT d.*,AVG(e.sal) FROM emp e,dept d WHERE d.deptno = e.deptno GROUP BY d.deptno,d.dname,d.loc HAVING AVG(e.sal)>2000;
--结果
DEPTNO DNAME LOC AVG(E.SAL)
------ -------------- ------------- ----------
20 RESEARCH DALLAS 2175
10 ACCOUNTING NEW YORK 2916.66666
--10、显示非销售人员工资名称及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于5000,
--给出的结果按月工资的合计升序排序:
SELECT job,SUM(sal) FROM emp GROUP BY job HAVING SUM(sal)>5000 ORDER BY SUM(sal);
--结果
JOB SUM(SAL)
--------- ----------
SALESMAN 5600
ANALYST 6000
MANAGER 8275
--11、计算出工资比SMITH的要高的员工详细信息
SELECT * FROM EMP WHERE sal > (SELECT sal FROM EMP WHERE ename='SMITH');
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30
7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30
7876 ADAMS CLERK 7788 23-五月-87 1100.00 20
7900 JAMES CLERK 7698 03-十二月-81 950.00 30
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
7934 MILLER CLERK 7782 23-一月-82 1300.00 10
13 rows selected
--12、查询出工资高于公司平均工资的员工详细信息
SELECT * FROM EMP WHERE sal >(SELECT AVG(sal) FROM EMP);
--结果
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7566 JONES MANAGER 7839 02-四月-81 2975.00 20
7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30
7782 CLARK MANAGER 7839 09-六月-81 2450.00 10
7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20
7839 KING PRESIDENT 17-十一月-81 5000.00 10
7902 FORD ANALYST 7566 03-十二月-81 3000.00 20
6 rows selected
分享到:
相关推荐
这是一个采用Oracle数据库自带的表的查询语句的一个非常好的练习,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用,非常值得一看.
这个是网上流传的50道SQL练习题,最近拿来练习,刚做完,这里把我做的答案给大家做个参考,如有错误,还请告知。 另外,做题的时候先不要看答案(答案不唯一,只要满足要求即可),要有自己的一个思考过程,这样做...
oracle经典sql语句查询,近百中查询练习,个个经典! 适合学习!
本文件中,包含了Orcale的经典40题,仅供参考,希望能有热心的小伙伴,积极讨论,欢迎指出错误,或更好的解决方法~ 练习题的表结构和数据+PDF文档+SQL查询语句。 本来想免费的,结果设置不了免费,至少1分 0.0
(1)里面包含经典的多表练习 (2)以有创建表语句,无需自己编写
SQL语言经典练习题,做完可以掌握基本的SQL语法,例如增删查改等等
MySQL 查询练习(50题) MySQL 查询练习(50题) I 1 -- 建表 1 1.1 -- 学生表 1 1.2 -- 课程表 1 1.3 -- 教师表 1 1.4 -- 成绩表 2 1.5 -- 插入学生表测试数据 2 1.6 -- 课程表测试数据 2 1.7 -- 教师表测试数据 2 ...
Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用,后面附答案,非常值得一看
B站MySQL的视频教程的初始化数据导入SQL脚本,各大学MySQL数据库教学老师的教学SQL...主要用于初学者对表的操作练习。该脚本是Mysql官方创建,用于初学者的案例。该SQL脚本适用于大部分大学里面Mysql老师的教学练习。
(1)里面包含经典的单表练习 (2)以有创建表语句,无需自己编写
(1)里面包含经典的多表练习 (2)以有创建表语句,无需自己编写
--39、求每门课程的学生人数 --40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩--40.1 当最高分只有一个时--40.2 当最高分出现多个时--41、查询不同课程成绩相同的学生的学生编号、课程编号、...
该资料是《Visual C++ 2005入门经典》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2005入门经典 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2005 原出版社: Wiley 作者: (美)Ivor Horton...
示例包括:表内容查询、表的结构查询、函数转换、SQL简单语句练习、各种复杂查询以及Oracle listener错误解决方法等等。
Power Query学习素材——学生成绩表 讲解Power Query的合并查询功能所用。
主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...
1、简单程序 2、限定查询 3、多表查询 4、子查询 5、分页查询 6、单行函数 7、oracle对象操作 8、oracle类型练习 9、java中调用oracle 10、procedure经典练习
8. 本章练习 SQL数据操作和查询 1. SQL简介 2. Oracle数据类型 3. 创建表和约束 4. 数据操纵语言(DML) 5. 操作符 6. 高级查询 7. 本章总结 8. 本章练习 子查询和常用函数 1. 子查询 2. Oracle中的伪列...
本章练习SQL数据操作和查询 1. SQL简介2. Oracle数据类型 3. 创建表和约束 4. 数据操纵语言(DML)5. 操作符 6. 高级查询 7. 本章总结 8. 本章练习 子查询和常用函数1. 子查询 2. Oracle中的伪列 3. Oracle函数 ...
8. 本章练习 22 SQL数据操作和查询 25 1. SQL简介 26 2. Oracle数据类型 26 3. 创建表和约束 27 4. 数据操纵语言(DML) 30 5. 操作符 35 6. 高级查询 36 7. 本章总结 44 8. 本章练习 45 子查询和常用函数 48 1. 子...