--列出至少有一个员工的所有部门
select d.dname from emp e,dept d 
    where e.deptno = d.deptno
    group by d.dname having count(*)>1;
select e.deptno,d.dname from dept d,emp e 
    where e.deptno = d.deptno
    group by e.deptno,d.dname;注释部分是题目,下面两条sql语句是我写的答案,请高手帮忙看下哪条sql语句效率高些,以及还有没有更好的写法,谢谢。

解决方案 »

  1.   

    select e.deptno,d.dname from dept d,emp e 
        where e.deptno = d.deptno 
        group by e.deptno,d.dname; 这个语句能达到你的效果吗?
      

  2.   

    select distinct deptno from emp
    我觉得这样就可以了
      

  3.   

    应该是>=1吧
    select d.dname from emp e,dept d 
        where e.deptno = d.deptno 
        group by d.dname having count(*)>=1;
      

  4.   

    select d.dname from emp e,dept d 
        where e.deptno = d.deptno 
        group by d.deptno
    如果还要部门名称的话这个就可以了,把group by后面名称改成编号是因为怕有重名的部门
    不需要其它条件了,因为和职工表作连接,无职工的部门自动被滤掉了
      

  5.   

    select dname from dept
    where exists(select deptno from emp where emp.deptno=dept.deptno)这样试试
      

  6.   

    用in还是用exists得看数据量,另外,表中是否建索引等都有关系.