子查询练习题

重点:作为计算字段使用子查询
select cust_name,cust_state,(select count(*) from orders where 
orders.cust_id=customers.cust_id) as orders from customers
order by cust_name;


10、查询所有“CLERK”(办事员)的姓名及其部门名称及部门人数  
· 找出所有办事员的姓名及部门编号  
SELECT ename,deptno   FROM emp   WHERE job='CLERK'   

· 如果要找到部门名称,则肯定要使用部门表  
SELECT e.ename,d.dname   FROM emp e,dept d    WHERE job='CLERK' 
AND e.deptno=d.deptno  

· 部门人数肯定要使用分组完成,一旦使用分组,肯定是 GROUP BY 
**重点:把查询的数量作为表,然后count字段作为查询的字段**


SELECT e.ename,d.dname,ed.cou   FROM emp e,dept d,(SELECT 
deptno,COUNT(empno) cou FROM emp GROUP BY deptno) ed  
WHERE job='CLERK' AND e.deptno=d.deptno AND ed.deptno=e.deptno 

-或-  采用SQL-1999标准 
select e.ename,d.dname,c.co    from emp e join dept d 
on(e.deptno=d.deptno)    join (select deptno,count(empno) co
 from emp group by deptno) c on(e.deptno=c.deptno)  
  where job='CLERK'

4、 查询出每个部门的最低工资的员工的信息 
SELECT * FROM emp 
WHERE sal IN(SELECT MIN(sal) FROM emp GROUP BY deptno) 

5、 分别使用ANYALL完成第4SELECT * FROM emp 
WHERE  sal =ANY(SELECT MIN(sal) FROM emp GROUP BY deptno)  ALL完成不了第46、 查询至少有一个员工的所有部门信息  
· 求出所有部门的员工数量  
SELECT deptno,COUNT(empno) FROM emp   GROUP BY deptno   

· 列出部门人数大于等于 1 的所有部门编号    
SELECT deptno,COUNT(empno)  FROM emp    GROUP BY deptno   HAVING 
COUNT(empno)>=1  

·  通过部门表,查询出部门的信息即可
SELECT d.*,ed.cou FROM dept d,  (SELECT deptno,COUNT(empno)  cou 
FROM emp GROUP BY deptno HAVING COUNT(empno) >=1) ed   WHERE 
d.deptno=ed.deptno   


―采用SQL1999标准― 
select d.deptno,d.dname,ed.cou  from dept d join (select 
deptno,count(empno) cou from emp group by deptno 
having count(empno) >=1) ed on(d.deptno=ed.deptno) 


8、查询受雇日期早于其直接领导的所有员工的编号、姓名、部门名称  
· 自身关联,查找 mgr=empno 的同时还要比较 hiredate,先查询编号、姓名  
SELECT e.empno,e.ename   FROM emp e,emp m  WHERE e.mgr=m.empno 
AND e.hiredate<m.hiredate   

· 如果要加入部门的名称,则肯定应该加入 dept 表,做表关联查询  
SELECT e.empno,e.ename,d.dname  FROM emp e,emp m,dept d  
  WHERE e.mgr=m.empno AND e.hiredate<m.hiredate AND e.deptno=d.deptno   

―SQL1999标准―  
select e1.empno,e1.ename,d.dname     from emp e1 join emp e2 
on(e1.mgr=e2.empno) join dept d on(e1.deptno=d.deptno) where 
e1.hiredate<e2.hiredate


9、查询部门名称和这些部门的员工的信息,同时列出那些没有员工的部门  
· 左、右关联问题  
SELECT d.deptno,d.dname,e.empno,e.ename   FROM dept d,emp e 
 WHERE d.deptno=e.deptno; 

―SQL1999标准―  
select d.deptno,d.dname,e.empno,e.ename    from dept d left join
 emp e on(d.deptno=e.deptno)  

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值