本文共 6621 字,大约阅读时间需要 22 分钟。
select e.ename,t.* from (select max(sal) as sal,deptno from emp group by deptno) t join emp e on e.deptno=t.deptno and e.sal=t.sal; |
|
select e.ename,e.sal from (select deptno,avg(sal) as sal from emp group by deptno) t join emp e on e.deptno=t.deptno and e.sal>t.sal; |
select e.deptno,avg(s.grade) from emp e join salgrade s on e.sal between s.losal and s.hisal group by e.deptno;
|
|
select ename from emp order by sal desc limit 1; |
自连接 |
select t.deptno from (select deptno,avg(sal) as avgsal from emp group by deptno) t where t.avgsal=(select max(t.avgsal)from (select deptno,avg(sal) as avgsal from emp group by deptno) t); |
select deptno from emp group by deptno order by avg(sal) desc limit 1 |
select d.dname from (select t.deptno from (select deptno,avg(sal) as avgsal from emp group by deptno) t where t.avgsal=(select max(t.avgsal)from (select deptno,avg(sal) as avgsal from emp group by deptno) t)) m Join dept d on m.deptno =d.deptno; |
select d.dname from (select deptno from emp group by deptno order by avg(sal) desc limit 1) t join dept d on d.deptno=t.deptno; |
select d.dname from (select t.*,s.grade from(select deptno ,avg(sal) as avgsal from emp group by deptno) t join salgrade s on t.avgsal between s.losal and s.hisal order by s.grade limit 1) t join dept d on d.deptno=t.deptno; |
(有问题) |
select max(sal)from emp where empno not in(select distinct mgr from emp where mgr is not null) select ename from emp where empno in(select distinct mgr from emp where mgr is not null);
select t.ename,t.sal from (select ename,sal from emp where empnoi n(select distinct mgr from emp where mgr is not null)) t where t.sal>(select max(sal)from emp where empno not in(select distinct mgr from emp where mgr is not null)); |
select ename,sal from emp order by sal desc limit 0,5; |
select ename,sal from emp order by sal desc limit 5,5; |
select ename,hiredate from emp order by hiredate desc limit 0,5; |
select t.grade,count(*) from (select s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal) t group by t.grade; |
有3个表S(学生表),C(课程表),SC(学生选课表)
S(SNO,SNAME)代表(学号,姓名)
C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)
SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩)
问题:
1,找出没选过“黎明”老师的所有学生姓名。
2,列出2门以上(含2门)不及格学生姓名及平均成绩。
3,即学过1号课程又学过2号课所有学生的姓名。
请用标准SQL语言写出答案,方言也行(请说明是使用什么方言)。
-----------------------------------------------------------------------------
( SNO VARCHAR(200), CNO VARCHAR(200), SCGRADE VARCHAR(200) );
( SNO VARCHAR(200 ), SNAME VARCHAR(200) );
( CNO VARCHAR(200), CNAME VARCHAR(200), CTEACHER VARCHAR(200) );
INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( '1', '语文', '张'); INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( '2', '政治', '王'); INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( '3', '英语', '李'); INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( '4', '数学', '赵'); INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( '5', '物理', '黎明'); commit;
INSERT INTO S ( SNO, SNAME ) VALUES ( '1', '学生1'); INSERT INTO S ( SNO, SNAME ) VALUES ( '2', '学生2'); INSERT INTO S ( SNO, SNAME ) VALUES ( '3', '学生3'); INSERT INTO S ( SNO, SNAME ) VALUES ( '4', '学生4'); commit;
commit; |
问题1.找出没选过“黎明”老师的所有学生姓名。
即:
|
问题2:列出2门以上(含2门)不及格学生姓名及平均成绩。
|
问题3:即学过1号课程又学过2号课所有学生的姓名。
|
select a.ename,b.ename from emp a left join emp b on a.mgr=b.empno; |
|
select t.empno,t.ename,d.dname from (select a.empno,a.ename,a.deptno from emp a join emp b on a.hiredate<b.hiredate and a.mgr=b.empno) t join dept d on d.deptno=t.deptno; |
select d.dname,e.* from dept d left join emp e on d.deptno=e.deptno; |
select d.dname,t.count from (select deptno,count(deptno) as count from emp group by deptno having count>=5) t join dept d on d.deptno=t.deptno; |
select *from emp where sal>(select sal from emp where ename='SMITH'); |
select e.ename,d.dname,t.cc from (select ename,deptno from emp where job='CLERK') e join dept d on d.deptno=e.deptno join ( select deptno,count(deptno) as cc from emp group by deptno) t on t.deptno=e.deptno; |
select job,count(ename) from emp where sal>1500 group by job; |
select t.ename from (select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno) t where t.dname='SALES'; |
select t.ename,d.dname,e.ename,s.grade from (select ename,deptno,sal,mgr from emp where sal>(select avg(sal) from emp)) t join dept d on d.deptno=t.deptno join salgrade s on t.sal between s.losal and s.hisal left join emp e on t.mgr=e.empno; |
select t.ename,d.dname from (select ename,deptno from emp where job=(select job from emp where ename='SCOTT')and ename<>'SCOTT') t join dept d on t.deptno=d.deptno; |
select ename,sal from emp where sal in(select distinct sal from emp where deptno=30) and deptno<>30; |
select d.*,count(e.ename),ifnull(avg(sal),0),ifnull(avg(timestampdiff(YEAR,hiredate,now())),0)as avgyear from emp e right join dept d on d.deptno=e.deptno group by d.deptno,d.dname,d.loc; |
select t.ename,d.dname,t.sal from (select ename,deptno,sal from emp) t join dept d on d.deptno=t.deptno; |
select d.deptno,d.dname,d.loc,t.count as '人数' from (select deptno,count(deptno) as count from emp group by deptno) t right join dept d on d. deptno=t.deptno; |
select e.* from (select job,min(sal) as minsal from emp group by job) t join emp e on e.job=t.job and e.sal=t.minsal;
|
select min(sal),deptno from emp where job='MANAGER' group by deptno; |
select ename,sal*12 as income from emp order by income asc; |
select t.ename,e.ename from ( select empno,ename,sal from emp where sal>3000 and empno in(select distinct mgr from emp where mgr is not null)) t join emp e on e.mgr=t.empno; |
select d.dname,t.countdeptno,t.sumsal from (select deptno,count(deptno) as countdeptno,sum(sal) as sumsal from emp group by deptno) t join (select deptno from emp where ename like'%S%' group by deptno) m on m.deptno=t.deptno join dept d on d.deptno=t.deptno; |
|
update emp_bak set sal=sal*1.1 where timestampdiff(YEAR,hiredate,now())>30; |
转载地址:http://kdbmz.baihongyu.com/