`

看马士兵的数据库教程,写的几个sql语句

 
阅读更多

//查询每个部门里面最高工资的人 
这里可以用连接查询,思路: 
(1)得到每个部门的最高薪水: 

select max(sal),deptno from emp group by deptno; 
 
(2)把(1)查询出来的数据当成一个虚拟表t,再用emp去连接这个虚拟表t: 
select ename,sal from emp join (select max(sal) as maxsal,deptno from emp g 
roup by deptno)t on (emp.sal=t.maxsal and emp.deptno=t.deptno); 
 
或者用=连接也是可以的: 
select ename,sal from emp,(select max(sal) as maxsal,deptno from emp group 
by deptno)t where emp.deptno=t.deptno and emp.sal=t.maxsal; 
 

//查询每个部门的平均薪水的等级: 
select t1.deptno,t1.maxsal,t2.grade from((select deptno,avg(sal) maxsal fro 
m emp group by deptno)t1 join salgrade t2 on t1.maxsal between t2.losal and t2.h 
isal); 
 
//用一条select语句把某个人的人名和它的上级的名字查询出来 
分析:某人和其经理人都是在一个表里面,这时是否考虑自连接 
SELECT T1.ENAME,T2.ENAME FROM EMP T1 JOIN (SELECT ENAME,EMPNO FROM EMP)T2 ON T1.MGR=T2.EMPNO; 
 
或者是: 
select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno; 
 
上面这两种查询中,由于King没有上级,在e2中找不到对应的连接,所以只查询出13行,就算右表中也没有我也有显示出来怎么办呢,可以用左连接. 
SELECT T1.ENAME,T2.ENAME FROM EMP T1 LEFT JOIN (SELECT ENAME,EMPNO FROM EMP 
)T2 ON T1.MGR=T2.EMPNO; 
SELECT T1.ENAME,T2.ENAME FROM EMP T1 RIGHT JOIN (SELECT ENAME,MGR FROM EMP) 
T2 ON T2.MGR=T1.EMPNO; 
 

(A)select ename,dname from emp,dept where emp.deptno=dept.deptno; 
(B)select ename,dname from emp join dept on(emp.deptno=dept.deptno); 
  select ename,dname from emp join dept using (deptno);

(A)和(B)的区别:(A)是1992年的标准,(B)是1999的新标准,在老的标准中,where子句中带有两个表的连接条件,在新的标准中,表与表的连接用join,left join...,where只用于过滤数 

查找每个员工的工资等级: 
select ename,sal,grade from emp e join salgrade s on(e.sal between s.losal 
and s.hisal); 
 
查找工资大于2000的员工的姓名,部门名称和薪水等级: 
select dname, ename,sal,grade from emp e join dept d on(d.deptno=e.deptno) 
join salgrade s on(e.sal between s.losal and s.hisal) where sal>2000; 
 
查找每个人的姓名及其经理人的名称: 
select e1.ename,e2.ename from emp e1 (left) join emp e2 on(e1.mgr = e2.empno); 
 
查找每个人的姓名及其所在的部门(部门下面没有员工也要显示出此部门来): 
select dname,ename from emp e right join dept d on(e.deptno=d.deptno); 
 
查找每个人的姓名及其所在的部门(部门下面没有员工也要显示出此部门来,员工没有对应部门的也查询出来,呵呵,师出无门,当然这是不可能的,因为作了外键约束): 
select dname,ename from emp e full join dept d on(e.deptno=d.deptno); 
 
//查询每个部门的平均薪水等级 
select deptno,avg(grade) from (select deptno,ename,grade from emp join salg 
rade s on (emp.sal between s.losal and s.hisal))t group by deptno; 
 

//查询哪些是经理人 
select ename from emp where empno in (select distinct mgr from emp); 
 

//不用组函数求最大值 
(1)用自连接过滤最大值 
select distinct e1.sal from emp e1 join emp e2 on (e1.sal<e2.sal); 
 
(2)用not in就搞定了 

//平均薪水最高部门编号 
(1)求每个部门的平均薪水 
select avg(sal) avg_sal,deptno from emp group by deptno; 
 
(2)求平均薪水最高的部门的平均薪水: 
select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by 
deptno); 
 
(3)看哪个部门的平均薪水等于(2)求出来的值 
select deptno,avg_sal from (select avg(sal) avg_sal,deptno from emp group by deptno) where avg_sal=(select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno); 

//进而可以求平均薪水最高部门名称 

//求平均薪水的等级最低的部门的名称 
大概思路: 
(1)求每个部门的平均薪水 
(2)求每个部门的平均薪水的等级 
(3)求最低薪水等级的部门的编号 
(4)求最低薪水等级的部门的名称 

分享到:
评论

相关推荐

    Oracle笔记(基于尚学堂马士兵)

    本笔记主要基于尚学堂马士兵老师的教学内容,深入浅出地介绍了Oracle的基本概念、安装配置、SQL语言、表空间管理、索引优化、存储过程与函数、触发器、游标、事务控制以及数据库备份与恢复等多个方面。 一、Oracle...

    马士兵JAVA笔记(全).docx

    本资源是马士兵的JAVA笔记,涵盖了JAVA语言的基础知识,包括标识符、常量、变量、数据类型、运算符、控制流语句等。 标识符是JAVA中的一种符号,用于命名变量、方法、类等。标识符由字母、下划线、美元符、数字组成...

    马士兵 mybatis学习笔记

    马士兵老师的MyBatis学习笔记主要涵盖了以下几个核心知识点: 1. **MyBatis安装与环境搭建**:首先,你需要配置Java开发环境,并了解Maven或Gradle构建工具,因为MyBatis通常与这些工具结合使用来管理依赖。然后,...

    马士兵Hibernate文档

    根据提供的文件信息,“马士兵Hibernate文档”是一份与马士兵Hibernate视频教程相匹配的文档资料。这份文档旨在为学习者提供全面、详细的Hibernate框架的学习资料,帮助他们更好地理解和掌握Hibernate的相关概念和...

    Shopping. java 马士兵

    马士兵的教程会讲解如何使用Hibernate或MyBatis这样的ORM(对象关系映射)框架,将Java对象与数据库表进行映射,简化数据库操作,提高开发效率。 4. **安全与支付集成**:在购物系统中,用户账户的安全和交易的安全...

    马士兵Python基础版2020教程P98-P134PPT笔记+课堂代码.pdf

    在马士兵的Python基础版2020教程P98-P134部分,我们学习了Python编程中的几个核心概念,包括数据结构、异常处理以及面向对象编程的基础。 1. **列表遍历与嵌套**: 示例代码展示了如何遍历包含字典的列表来查找...

    马士兵老师spring框架学习笔记

    马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...

    jvm java虚拟机 调优 马士兵 笔记

    jvm java虚拟机 调优 马士兵 笔记 让你对java虚拟机调优有初步的认识

    马士兵 J2SE代码+PPT教材

    总的来说,"马士兵 J2SE代码+PPT教材"是一套全面的Java入门教程,结合了理论教学与实践操作,对于想要系统学习Java编程的学员来说,是一个不可多得的学习资源。通过这套教材,你可以逐步掌握Java编程的核心技能,为...

    马士兵Shopping项目源代码

    "马士兵Shopping项目"是其精心设计的一个教学实例,旨在帮助学员理解并掌握电商网站的开发流程和技术要点。这个项目源代码的详细分析,将为我们揭示一个完整的购物系统背后的架构设计和实现细节。 1. **项目结构...

    马士兵oracle笔记

    马士兵oracle笔记,浅显易懂。

    马士兵jvm调优笔记.docx

    ### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及...

    马士兵java框架hibernate学习笔记

    - 减少代码量:使用ORM可以减少与数据库交互时所需的SQL语句数量。 - 提高可维护性:当数据库表结构发生变化时,只需要修改映射文件即可,而不必修改业务逻辑代码。 - 跨数据库平台:ORM框架通常支持多种数据库,...

    马士兵程序员的数学视频教程-视频教程网盘链接提取码下载.txt

    本课程《马士兵程序员的数学视频教程》针对的是希望提升自己数学技能、特别是那些希望将其应用于编程实践中的程序员们。通过系统的学习,不仅可以增强个人的技术实力,还能为日后的职业发展打下坚实的基础。同时,...

    马士兵百万级并发IM即时消息系统

    《马士兵百万级并发IM即时消息系统》是针对大规模用户在线聊天场景设计的高效、稳定、可扩展的即时通讯解决方案。该系统的核心是利用Go语言的高性能特性,结合现代Web开发框架Gin来构建,旨在处理百万级别的并发连接...

    马士兵BBS项目源码

    【马士兵BBS项目源码】是一个以BBS(Bulletin Board System,电子公告板)为主题的编程项目,由知名IT教育者马世斌提供。这个项目旨在帮助开发者学习和理解如何构建一个具有分页功能的BBS系统。在互联网论坛中,分页...

    马士兵hibernate文档.doc

    《马士兵hibernate文档详解》 Hibernate是一个强大的对象关系映射框架,它极大地简化了Java应用程序对数据库的操作。在本文档中,我们将深入探讨Hibernate的一些核心概念和配置选项,以便更好地理解和应用这个框架...

    马士兵Struts2笔记2013

    以下是关于"马士兵Struts2笔记2013"中的关键知识点详解: 1. **建立Struts2工程** 创建一个Struts2工程通常涉及在集成开发环境中(如MyEclipse)创建一个新的Web项目,然后将必要的Struts2库添加到项目的`lib`目录...

Global site tag (gtag.js) - Google Analytics