-
20200327 连接子查询作业
2020-07-24 10:571.列出至少有三个员工的所有部门和部门信息
select * from DEPT WHERE DEPT.DEPTNO IN(select DEPTNO from EMP group by DEPTNO HAVING COUNT(EMP.DEPTNO)>=3)2.列出受雇日期早于直接上级的所有员工的编号,姓名,部门名称
SELECT S.EMPNO,S.ENAME,DEPT.DNAME FROM EMP S LEFT JOIN EMP Y ON Y.EMPNO=S.MGR INNER JOIN DEPT ON DEPT.DEPTNO=S.DEPTNO WHERE Y.HIREDATE>S.HIREDATE
3.列出职位为“CLERK”的姓名和部门名称,部门人数:
SELECT DEPT.DNAME,B.ENAME,B.NUM FROM (SELECT * FROM EMP WHERE JOB='CLERK') A JOIN (SELECT COUNT(EMPNO) NUM,ENAME,DEPTNO FROM EMP GROUP BY DEPTNO) B ON A.DEPTNO=B.DEPTNO
JOIN DEPT ON B.DEPTNO=DEPT.DEPTNO -
20200327 连接子查询作业
2020-07-24 10:57不做不知道,一做就更迷茫,更怀疑自己的智商,我真的只有看了别人的答案才逐渐有些思路,或者才慢慢理清思路,真不知如果没有答案,我到底会怎样,字段 很多,有时真记不住这是啥,那是啥的,甚至都搞混了
首先这题,我个人的查询字面表达是这样,首先从部门表里取出所有的信息,并定部门编号为条件?然后in括号里的两表之间的关联再以部门编号为大于等于3为分组条件??
第二题是否这么理解,先从两表里查询出要显示的信息内容,再定条件为入职时间,入职时间再以小于号另一个括号里的条件,而括号里另做查询的也是同一个员工表,所以要另作别名代替emp1 作为两个不同的表不同的字段的判断,而括号里的e1.empno=e.mgr条件就是为了让直属领导编号等于普通员编号;and就是为了得到两表关联查询第三题,我理解答题字面上的意思就是查询职位为‘clerk‘’的员工姓名和员工的部门名称,再查询职位为clerk的部门名称的人数,这题我是完全借鉴人家的,首先我不知道这个a是什么意思,答案确实是自己想要查询得到的
另外,因为之前做作业已经存在了emp和dept表了,所以我只能另做emp1和dept1
不知老师是否能稍微解答下答案的,虽然课程已经结束了,我是老学员全程班了,给柠檬班丢脸了 -
20200327 连接子查询作业
2020-07-24 10:57#1.列出至少有三个员工的所有部门和部门信息。 SELECT dept.* from dept WHERE dept.DEPTNO IN (SELECT DEPTNO from emp GROUP BY emp.DEPTNO HAVING COUNT(emp.DEPTNO)>=3); #2.列出受雇日期早于直接上级的所有员工的编号,姓名,部门名称 SELECT e1.EMPNO, e1.ENAME,d.DNAME FROM emp e1,dept d WHERE e1.HIREDATE < (SELECT e2.HIREDATE FROM emp e2 WHERE e2.empno=e1.MGR) AND d.DEPTNO=e1.DEPTNO; #3.列出职位为“CLERK”的姓名和部门名称,部门人数 SELECT emp_name,dept_name,emp_num FROM ( SELECT emp.ENAME emp_name, dept.DNAME dept_name, (SELECT COUNT(emp.EMPNO) FROM emp WHERE emp.DEPTNO=dept.DEPTNO) emp_num FROM emp,dept WHERE emp.JOB='CLERK' AND emp.DEPTNO=dept.DEPTNO ) as t
-
20200327 连接子查询作业
2020-07-24 10:57根据emp和dept表完成下列作业:
1.列出至少有三个员工的所有部门和部门信息。
select * from dept1 d INNER JOIN
(select DEPTNO, count() 部门人数 from emp1 GROUP BY DEPTNO HAVING count() >= 3) e
on d.DEPTNO=e.DEPTNO;2.列出受雇日期早于直接上级的所有员工的编号,姓名,部门名称
select t.ename,t.empno,d.dname from dept1 d,
(select a.ename,a.empno,a.deptno from emp1 a where a.hiredate<(select hiredate from emp1 b where b.empno=a.mgr))t
where t.deptno=d.deptno;3.列出职位为“CLERK”的员工姓名和部门名称,部门人数:
select e1.ename,e1.job,t.dname,t.部门总人数 from emp1 e1 left join
(select d.deptno,d.dname,count(*) 部门总人数 from dept1 d
INNER JOIN emp1 e
on d.deptno=e.deptno GROUP BY d.dname) t
on e1.deptno= t.deptno where e1.job='CLERK' -
20200327 连接子查询作业
2020-07-24 10:571:
2:
3:第三题觉得题意有点模糊,我理解的是求职位为CLERK的员工姓名、以及员工所在的部门名称及部门名称中有CLERK员工的人数,不知道理解得对不对,还是这个部门人数只是单纯的部门有的员工数量
-
20200326 连接子查询作业
2020-07-24 10:57#1、用一条SQL语句查询出每门课都大于80分的学生姓名。
-- 每门课就要按学生进行分组,每门课都大于80意思就是所有课中最小的分数要大于80
-- 解决思路:这里需要用到聚合函数min(score),查询出最低分数大于80分的学生即可。使用了聚合函数,条件就需要使用having语句。
SELECT name from TestScores GROUP BY name having MIN(score)>80;思路二:查出不在(小于或等于八十分的学生姓名)的学生
-- 子查询的结果作为外部查询的条件
select DISTINCT name from TestScores where name not in (select name from TestScores where score <= 80);-- 子查询的结果作为表
select * from(SELECT name,MIN(score) 最小成绩 from TestScores GROUP BY name) s where s.最小成绩 > 80;#子查询的关联查询
SELECT * FROM TestScores t1 where not exists (select * from TestScores t2 where t1.name
=t2.name
and score <= 80);-- 2、查出所有购入商品为两种或两种以上的购物人记录
select 购物人 from 购物单 GROUP BY 购物人 HAVING COUNT() >= 2;
SELECT * from 购物单 where 购物人 in (select 购物人 from 购物单 GROUP BY 购物人 HAVING COUNT() >= 2); -
20200325 数据库连接查询面试题作业
2020-07-24 10:57老师不好意思,我想自己补充一下,也希望你帮忙看一下我这里的语句出错在哪,各位同学也可以参与帮忙解决
我想补充一下
我想让语文最高分的学生和性别也显示出来,而我这里通过group by分组显示不对,不拉不拉不知道怎么表达 -
20200326 连接子查询作业
2020-07-24 10:57这是作业:
你好可可老师,我暂且先用分组查询来做,目前虽然看回复中的同学也有举例些关联查询的,但我目前觉得分组容易理解,当然也是个人的基础还不够还有待深研,另外我有些疑问group by后面不是分要查询的字段吗?比如我这样(请看图)
疑问文字描述在图里,注重通过作业和出问题的图的区别看group by后面就好,如果疑问造成老师您伤脑筋请见谅,是我个人的表述不好 -
20200326 连接子查询作业
2020-07-24 10:57数据库系列课,让我重新找回了大学时代学习计算机数据库的感觉,不过老师的讲解深入浅出,之前大学时候觉得学的很渣的查询语句瞬间明朗了起来,跟着好好学,相信大家面试都会顺利的~fighting
年后刚找到新工作的3ice。。。。