实例表结构如下
CREATE TABLE `emp` (
`EMPNO` int(11) NOT NULL,
`ENAME` varchar(45) DEFAULT NULL,
`JOB` varchar(45) DEFAULT NULL,
`MGR` varchar(45) DEFAULT NULL,
`HIREDATE` date DEFAULT NULL,
`SAL` float DEFAULT NULL,
`COMM` float DEFAULT NULL,
`DEPTNO` varchar(45) DEFAULT NULL,
PRIMARY KEY (`EMPNO`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$
CREATE TABLE `dept` (
`DEPTNO` int(11) NOT NULL,
`DNAME` varchar(45) DEFAULT NULL,
`LOC` varchar(45) DEFAULT NULL,
PRIMARY KEY (`DEPTNO`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$
表数据如下:
INSERT INTO `emp` VALUES (102,'EricHu','Developer','1455','2011-05-26',5500,14,'10'),(104,'huyong','PM','1455','2011-05-26',5500,14,'10'),(105,'WANGJING','Developer','1455','2011-05-26',5500,14,'10'),(7369,'SMITH','CLERK','7902','1980-12-17',800,NULL,'20'),(7499,'ALLEN','SALESMAN','7698','1981-02-20',1600,300,'30'),(7521,'WARD','SALESMAN','7698','1981-02-22',1250,500,'30'),(7566,'JONES','MANAGER','7839','1981-04-02',2975,NULL,'20'),(7654,'MARTIN','SALESMAN','7698','1981-09-28',1250,1400,'30'),(7698,'BLAKE','MANAGER','7839','1981-05-01',2850,NULL,'30'),(7782,'CLARK','MANAGER','7839','1981-06-09',2450,NULL,'10'),(7788,'SCOTT','ANALYST','7566','1987-04-19',4000,NULL,'20'),(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,'10'),(7844,'TURNER','SALESMAN','7698','1981-09-08',1500,0,'30'),(7876,'ADAMS','CLERK','7788','1987-05-23',1100,NULL,'20'),(7900,'JAMES','CLERK','7698','1981-12-03',950,NULL,'30'),(7902,'FORD','ANALYST','7566','1981-12-03',3000,NULL,'20'),(7934,'MILLER','CLERK','7782','1982-01-23',1300,NULL,'10');
INSERT INTO `dept` VALUES (10,'ACCOUNTING','NEW YORK'),(20,'RESEARCH','DALLAS'),(30,'SALES','CHICAGO'),(40,'OPERATIONS','BOSTON'),(50,'abc','def'),(60,'Developer','HaiKou');
1.列出至少有一个员工的所有部门
select distinct dname from dept left join emp on dept.DEPTNO = emp.DEPTNO where emp.DEPTNO is not null;
select dname from dept where deptno in(select deptno from emp group by deptno having count(*)>1)
2.列出薪金比“SMITH”多的所有员工
select emp1.ENAME from emp as emp1 , emp as emp2 where emp2.ENAME = 'SMITH' and emp1.SAL > emp2.SAL;
select ename from emp where sal>(select emp1.SAL from emp as emp1 where emp1.ENAME='SMITH')
3.列出所有员工的姓名及其直接上级的姓名
select e1.ENAME,e2.ENAME from emp as e1 left join emp as e2 on e1.MGR = e2.EMPNO
select ename,(select ename from emp where empno in(a.mgr)) from emp a ;
4.列出受雇日期早于其直接上级的所有员工。
select e1.ENAME from emp as e1 left join emp as e2 on e1.MGR = e2.EMPNO WHERE e1.HIREDATE < e2.HIREDATE
select ename from emp a where HIREDATE<(select HIREDATE from emp where empno in(a.mgr));
5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门(以emp表为主,左连接查询)
select dname,emp.* from dept left join emp on dept.deptno=emp.deptno;
6.列出所有“CLERK”(办事员)的姓名及其部门名称。
select e.ENAME,d.DNAME from emp as e left join dept d on e.DEPTNO = d.DEPTNO where e.JOB = 'CLERK'
7.列出最低薪金大于1500的各种工作
select DISTINCT JOB from emp where SAL >1500
8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
select e.ENAME from emp as e left join dept as d on e.DEPTNO= d.DEPTNO where d.DNAME ='SALES'
9.列出薪金高于公司平均薪金的所有员工
select ename from emp where sal>( select avg( sal) from emp);
10.列出与“SCOTT”从事相同工作的所有员工
select ename from emp where job in(select job from emp where ENAME='SCOTT') and ename !='SCOTT' ;
11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金
select e1.ename,e1.sal,e1.DEPTNO from emp e1,emp e2 where e1.sal = e2.sal and e2.deptno = '30' and e1.deptno !='30'
select ename,sal from emp where sal=any(select sal from emp where deptno=30) and deptno!=30;
12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。(max的用法)
select sal,ename from emp where sal>(select max(sal) from emp where deptno=30);
13.列出在每个(每个是关键字,对此group by)部门工作的员工数量、平均工资和平均服务期限。(经典的group by用法)select deptno,count(*),avg(a.sal),avg(sysdate-HIREDATE) from emp a group by deptno;
分享到:
相关推荐
根据给定的文件信息,我们可以总结出一系列关于Oracle SQL的经典查询练习知识点,这些知识点主要围绕着Oracle数据库中的SQL查询技巧,特别聚焦于“经典查询练手系列”文章中提到的练习题,旨在帮助读者加深对Oracle ...
根据提供的文档信息,我们可以归纳总结出一系列关于Oracle SQL的经典查询案例及解析,这些案例主要围绕着`scott.emp`(员工表)与`scott.dept`(部门表)两个表进行。以下将详细介绍文档中提到的部分经典查询知识点...
在"Oracle SQL:经典查询练手四篇"这个主题中,我们将深入学习如何使用SQL来处理和分析数据,尤其针对给出的scott.emp和scott.dept两个表。 首先,我们了解了scott.emp表,这是一个员工信息表,包含以下字段: 1. ...
ORACLE SQL:经典查询练手系列文章汇总 通过近一个月的努力,《经典查询练手系列》也快告一段落,但并不代表结束,以后还会增加!我很荣幸本系列每一篇文章都上了评论或推荐头条,这离不开大家的支持,这也促蹴了我...
【Oracle SQL 经典查询练手系列文章汇总】 Oracle SQL 是一种用于管理和处理 Oracle 数据库的强大语言,这个经典查询练手系列文章旨在帮助用户提升在数据库查询方面的技能。作者胡勇,通过一系列的文章,深入浅出地...
本主题将深入探讨Oracle SQL中的经典查询技巧,帮助你提升数据库操作的效率。 首先,理解SQL的基本语法是至关重要的。SQL包括SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY等子句,它们分别用于定义要查询的...
"Oracle经典查询练手"是一份旨在帮助用户提升SQL查询技能的资源,特别适合准备面试或者需要深化Oracle数据库操作知识的人员。在数据库领域,强大的查询能力是衡量一个DBA或开发人员技术水平的重要标准。 首先,我们...
虽然没有具体的标签提供额外的信息,但我们可以基于“经典查询练手”这个标题来推测其内容可能涵盖数据库的基本查询操作、SQL语言的学习、以及可能的一些实际案例分析。 在数据库领域,查询是最基础也是最重要的...
ORACLE_SQL练手/ORACLE_SQL经典查练手 对应脚本 对应习题:http://download.csdn.net/download/ml_1019/10242292 感谢:http://blog.csdn.net/chinahuyong/article/details/6576036 提供的源码,本资源是经过抽取和...
这个“sqlserver练手入门作业”是初学者掌握数据库操作的一个理想实践项目,特别是对于那些想要学习如何使用ado.net进行数据操作的人来说。 首先,让我们详细了解一下SQL Server中的数据操作基础: 1. **创建User...
### Oracle经典查询练习知识点解析 #### 1. 列出至少有一个员工的所有部门 为了找出至少有一个员工的所有部门,我们需要连接`emp`表和`dept`表,并且确保只选择那些在`emp`表中有记录的部门。可以使用内连接(INNER...
文档中提到的“经典查询练手系列文章”指的是五个分别针对不同主题的练习篇章。这些练习篇可能涵盖了SQL查询的各个方面,比如基础查询、连接查询、子查询、聚合函数、分组和排序等,使读者能够系统地掌握和应用SQL...
不错的适合练手、课程设计、毕业设计的JSP项目源码:JSP+SQL计算机等级考试查询系统(源代码+论文+答辩PPT).rar不错的适合练手、课程设计、毕业设计的JSP项目源码:JSP+SQL计算机等级考试查询系统(源代码+论文+...
ORACLE SQL:经典查询练手系列文章汇总 通过近一个月的努力,《经典查询练手系列》也快告一段落,但并不代表结束,以后还会增加!我很荣幸本系列每一篇文章都上了评论或推荐头条,这离不开大家的支持,这也促蹴了...
不错的适合练手、课程设计、毕业设计的JSP项目源码:BBS论坛系统(jsp+sql)不错的适合练手、课程设计、毕业设计的JSP项目源码:BBS论坛系统(jsp+sql)不错的适合练手、课程设计、毕业设计的JSP项目源码:BBS论坛系统...
【VS2017+SQL练手程序】项目是一个典型的结合了Visual Studio 2017(VS2017)开发环境与SQL数据库技术的练习案例。在这样的项目中,开发者通常会学习如何利用C#语言进行后端逻辑处理,并通过SQL进行数据存储和查询。...
本文是一份关于Oracle MySQL SQL编程实践的指南,包含了大量的数据库查询示例,它们可以帮助读者通过实际的练习来提升SQL编程能力。以下知识点将围绕文档中提到的各种查询操作进行详细讲解: 1. 基本查询操作:文档...