Orcla 数据库复习2 --子查询和表连接

子查询和表连接

①.查询挣钱最多的人的名字

SELECT ename,sal FROM emp

WHERE sal=(SELECT MAX(sal) FROM emp);

②.查询有哪些人的工资位于所有人的平均工资之上

SELECT ename,sal FROM emp

WHERE sal > (SELECT AVG(sal) FROM emp);

③.求部门中哪些人的薪水最高:

SELECT ename,sal FROM emp

JOIN (SELECT MAX(sal) max_sal,deptno FROM emp GROUP BY deptno) t

ON emp.sal =t.max_sal AND emp.deptno = t.deptno;

④.求出员工的名字和他的经理人姓名

SELECT  e1.ename, e2.ename FROM

emp e1 JOIN emp e2

ON e1.mgr = e2.empno;

⑤.查询出每个人的薪水等级

SELECT ename,grade FROM emp e JOIN salgrade s

ON  (e.sal BETWEEN s.losal AND s.hisal);

⑥查询出每个人的部门名称和薪水等级

SELECT ename,dname,grade FROM

emp e JOIN dept d ON (e.deptno =d.deptno)

JOIN salgrade s ON (e.sal BETWEEN s.losal AND s.hisal)

⑦(左外连接) 查询出雇员的名字和他经理人的名字

SELECT e1.ename, e2.ename FROM

emp e1 LEFT JOIN emp e2

ON e1.mgr = e2.empno;

⑧(右外连接) 查询出所有雇员的部门名称

SELECT ename ,dname FROM

emp e RIGHT JOIN dept d

ON e.deptno = d.deptno;

⑨(全外连接) 查询出所有雇员的部门名称

SELECT ename ,dname FROM

emp e FULL JOIN dept d

ON e.deptno = d.deptno;

⑩求部门平均薪水的等级

SELECT deptno,avg_sal,grade FROM

(SELECT deptno,AVG(sal) avg_sal FROM emp GROUP BY deptno) t

JOIN salgrade s

ON t.avg_sal BETWEEN s.losal AND s.hisal;

--求部门平均的薪水等级

SELECT deptno,AVG(grade) FROM

(SELECT deptno,ename,grade FROM emp JOIN salgrade 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);

--不准用组函数,求薪水的最高值

SELECT sal FROM emp WHERE sal NOT IN

(SELECT DISTINCT  e1.sal FROM emp e1  JOIN  emp e2

ON e1.sal< e2.sal);

--平均薪水最高的部门的部门编号

SELECT deptno ,avg_sal FROM

( SELECT deptno, AVG(sal) avg_sal FROM emp GROUP BY deptno);

WHERE avg_sal =

(SELECT MAX(avg_sal) FROM

( SELECT deptno, AVG(sal) avg_sal FROM emp GROUP BY deptno));

--平均薪水最高的部门的部门名称

SELECT dname FROM dept WHERE deptno =

(SELECT deptno  FROM

( SELECT deptno, AVG(sal) avg_sal FROM emp GROUP BY deptno)

WHERE avg_sal =

(SELECT MAX(avg_sal) FROM

( SELECT deptno, AVG(sal) avg_sal FROM emp GROUP BY deptno)

)

);

--求平均薪水的等级最低的部门的部门名称

SELECT dept.dname,t1.deptno,grade,avg_sal FROM

(

SELECT deptno,grade,avg_sal FROM

(SELECT AVG(sal) avg_sal, deptno FROM emp GROUP BY deptno) t JOIN salgrade s

ON t.avg_sal BETWEEN s.losal AND s.hisal

) t1

JOIN dept ON (t1.deptno = dept.deptno)

WHERE t1.grade =

(SELECT MIN(grade) FROM

(SELECT deptno,grade,avg_sal FROM

(SELECT AVG(sal) avg_sal, deptno FROM emp GROUP BY deptno) t JOIN salgrade s

ON t.avg_sal BETWEEN s.losal AND s.hisal))

--求部门经理人平均薪水最低的部门名称

--求比普通员工的最高薪水还要高的经理人名称

SELECT ename  FROM emp WHERE

empno IN (SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL)

AND sal >

(SELECT max(sal) FROM  emp WHERE empno NOT  IN

(SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL))

--求薪水最高的前5名雇员

SELECT ename,sal

FROM (

SELECT ename,sal FROM emp ORDER BY sal DESC

)

WHERE ROWNUM <=5;

--求薪水最高的第6到第10名雇员

SELECT ename,sal FROM(

SELECT ename,sal, ROWNUM r FROM(

SELECT ename,sal FROM emp ORDER BY sal DESC)

)

WHERE r>=6 AND r<=10;

注:查询语句是自己看马士兵的视频敲出来的

时间: 2024-10-14 11:11:33

Orcla 数据库复习2 --子查询和表连接的相关文章

10.11子查询,表连接

--数据转换 select ids,code,name,brand, (cast(year(time)as varchar(10))+'年' +cast(month(time)as varchar(10))+'月' +cast(day(time)as varchar(10))+'日')as 时间,oil,POWERS,EXHAUST,price ,pic from car select * from car where ceiling(oil)>=8.0 select * from car wh

MySQL数据库 多表查询 交叉连接 自然连接 内连接 自连接 外连接 子查询 多表查询练习 单表查询练习 &#109806;

原文: http://blog.gqylpy.com/gqy/466 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

MySQl 子查询,左右连接,多表连接学习笔记

1.子查询是指在另一个查询语句中的SELECT子句. 例句: SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 其中,SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement), SELECT column1 FROM t2 称为Sub Query[子查询]. 所以,我们说子查询是嵌套在外查询内部.而事实上它有可能在子查询内部再嵌套子查询. 子查询必须出现在圆括号之间. 行

单表查询: where group by 分组 having distinct 去重 order by 排序 limit 多表查询 子查询 连表查询

今日内容 表查询 单表查询: where group by 分组 having distinct 去重 order by 排序 limit 多表查询 子查询 连表查询 单表查询 前期表准备 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum('male','female') not null default 'male', #大部分是男的 age int(3) u

肤浅的聊聊关联子查询,数据集连接,TiDB代码,关系代数,等等

本章涉及的内容是TiDB的计算层代码,就是我们编译完 TiDB 后在bin目录下生成的 tidb-server 的可执行文件,它是用 go 实现的,里面对 TiPD 和 TiKV实现了Mock,可以单独运行: 用explain语句可以看到一条sql在TiDB中生成的最终执行计划,例如:我们有一条关联子查询: select * from t1 where t1.a in (select t2.a from t2 where t2.b = t1.b); tidb> explain select *

MySQL---数据库从入门走上大神系列(四)-子查询、表与表之间的关系

本篇博客讲解(子查询)非相关子查询/相关子查询,一对一,一对多,多对一,多对的的关系! 准备: 首先我们创建一列sex.再为部分行设置好值0(女)或者1(男): delete from stud where age=26; 删除年龄为26的行. update stud set sex='1' where saddress like '湖南%'; 将地址中湖南开头的人的的sex修改为1. update stud set sex='0' where age>=30 and sex is null;

数据库基础(子查询、设置主键外键)

子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数: 另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的数据表. 子查询示例: 练习一: 练习二: 练习三: 分页查询语句示例: 查看总共可以分为多少页: 主键        数据库主键是指表中一个列或列的组合,其值

数据库基础(子查询练习、链接查询(join on 、union)及其练习)

子查询练习一:查询销售部里的年龄大于35岁的人的所有信息 练习二:将haha表中部门的所有数字代码转换为bumen表中的字符串显示 练习三:将haha表中部门的所有数字代码转换为bumen表中的字符串显示,并且显示每个人的主管 连接查询:通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 常用的两个链接运算符: 1.join     on 2.union       在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实

20151009学习内容:子查询、表链接

--子查询 --把查询语句查询出的结果当做一个数值使用或一组数值使用 --all所有的,any任意一个,修饰符 --in('','')在数值范围内not in()不在括号的数值范围内 select price from car where name ='宝马3系 325i 时尚型' select *from car where name like '%奥迪%'and price>=42.38 select *from car where name like '%奥迪%'and price>=(