SQL em Oracle > DML > Junção de tabelas > Soluções dos exercícios sobre junção de tabelas
Soluções dos exercícios sobre junção de tabelas tl_logo2.jpg

1.

Solução usando a sintaxe tradicional:

select e.ename, e.deptno, d.dname
from emp e, dept d
where e.deptno=d.deptno
order by d.dname;

Solução usando a sintaxe SQL99:

select e.ename, e.deptno, d.dname
from emp e
inner join dept d on (e.deptno=d.deptno)
order by d.dname;

2.

Solução usando a sintaxe tradicional:

select e.ename, d.deptno, d.dname
from emp e, dept d
where e.deptno=d.deptno;

Solução usando a sintaxe SQL99:

select e.ename, d.deptno, d.dname
from emp e
inner join  dept d on (e.deptno=d.deptno);

3.

Solução usando a sintaxe tradicional:

select e.ename,d.dname,d.loc
from emp e, dept d
where e.deptno = d.deptno
  and sal > 1500;

Solução usando a sintaxe SQL99:

select e.ename,d.dname,d.loc
from emp e
inner join  dept d on (e.deptno = d.deptno)
where sal > 1500;

4.

Solução usando a sintaxe tradicional:

select ename, job, sal, grade
from emp, salgrade
where sal between salgrade.losal and salgrade.hisal;

Solução usando a sintaxe SQL99:

select ename, job, sal, grade
from emp
inner join salgrade on (sal between salgrade.losal and salgrade.hisal);

5.

Solução usando a sintaxe tradicional:

select ename, job, sal, grade
from emp, salgrade
where sal between salgrade.losal and salgrade.hisal
and grade = 3;

Solução usando a sintaxe SQL99:

select ename, job, sal, grade
from emp
inner join salgrade on (sal between salgrade.losal and salgrade.hisal)
where grade = 3;

6.

Solução usando a sintaxe tradicional:

select emp.ename, emp.sal, dept.loc
from emp, dept
where emp.deptno=dept.deptno
and dept.loc = 'DALLAS';

Solução usando a sintaxe SQL99:

select emp.ename, emp.sal, dept.loc
from emp
inner join dept on (emp.deptno=dept.deptno)
where dept.loc = 'DALLAS';

7.

Solução usando a sintaxe tradicional:

select e.ename, e.job, e.sal, s.grade, d.dname
from emp e, salgrade s, dept d
where e.sal between s.losal and s.hisal
and e.deptno=d.deptno
and e.job !='CLERCK'
order by e.sal desc;

Solução usando a sintaxe SQL99:

select e.ename, e.job, e.sal, s.grade, d.dname
from emp e
inner join salgrade s on (e.sal between s.losal and s.hisal)
inner join dept d on (e.deptno=d.deptno)
where e.job != 'CLERCK'
order by e.sal desc;

8.

Solução usando a sintaxe tradicional:

select e.ename, e.job, e.sal*14+nvl(e.comm,0), d.deptno, d.dname, s.grade
from emp e, salgrade s, dept d
where e.sal between s.losal 
and s.hisal and e.deptno=d.deptno
and (e.sal*14+nvl(e.comm,0) > 36000 or e.job = 'CLERK');

Solução usando a sintaxe SQL99:

select e.ename, e.job, e.sal*14+nvl(e.comm,0), d.deptno, d.dname, s.grade
from emp e
inner join salgrade s on (e.sal between s.losal and s.hisal)
inner join dept d on (e.deptno=d.deptno)
and (e.sal*14+nvl(e.comm,0) > 36000 
     or e.job = 'CLERK');

9.

Solução usando a sintaxe tradicional. O operador (+) coloca-se sempre do lado fraco, isto é, do lado onde pode haver uma linha NULL:

select d.deptno, d.dname
from emp e, dept d
where e.deptno (+) = d.deptno
and e.ename is null;

Solução usando a sintaxe SQL99:

select d.deptno, d.dname
from emp e
right outer join dept d on (e.deptno = d.deptno)
where e.ename is null;

10.

Solução usando a sintaxe tradicional:

select e.empno as empregado_numero, e.ename as empregrado_nome, 
         m.empno as manager_numero, m.ename as manager_nome
from emp e, emp m
where e.mgr = m.empno;

Solução usando a sintaxe SQL99:

select e.empno as empregado_numero, e.ename as empregrado_nome, 
         m.empno as manager_numero, m.ename as manager_nome
from emp e
inner join emp m on (e.mgr = m.empno)

11.

Solução usando a sintaxe tradicional. O operador (+) coloca-se sempre do lado fraco, isto é, do lado onde pode haver uma linha NULL.

select e.ename,e.empno,e.mgr,m.ename,m.empno
from emp e, emp m
where e.mgr=m.empno (+);

Solução usando a sintaxe SQL99:

select e.ename,e.empno,e.mgr,m.ename,m.empno
from emp e
left outer join emp m on (e.mgr=m.empno (+));

12.

Solução usando a sintaxe tradicional:

select e.deptno, d.dname
from emp e, dept d
where e.deptno=d.deptno
and   e.hiredate between to_date('1981-01-01','YYYY-MM-DD') and to_date('1981-06-30','YYYY-MM-DD')
intersect
select e.deptno, d.dname
from emp e, dept d
where e.deptno=d.deptno
and   hiredate between to_date('1982-01-01','YYYY-MM-DD') and to_date('1982-06-30','YYYY-MM-DD');

Usando sintaxe SQL99

select e.deptno, d.dname
from emp e
inner join dept d on (e.deptno=d.deptno)
where e.hiredate between to_date('1981-01-01','YYYY-MM-DD') and to_date('1981-06-30','YYYY-MM-DD')
intersect
select e.deptno, d.dname
from emp e
inner join dept d on (e.deptno=d.deptno)
where   hiredate between to_date('1982-01-01','YYYY-MM-DD') and to_date('1982-06-30','YYYY-MM-DD');

13.

Solução usando a sintaxe tradicional:

select e.ename as empregado_nome, e.hiredate as empregado_data,
       m.ename as manager_nome, m.hiredate as manager_data
where e.mgr=m.empno
and e.hiredate > m.hiredate;

Usando sintaxe SQL99

select e.ename as empregado_nome, e.hiredate as empregado_data,
       m.ename as manager_nome, m.hiredate as manager_data
from emp e
inner join emp m on (e.mgr=m.empno)
and e.hiredate > m.hiredate;

14.

Retirar à lista dos departamentos aqueles que têm empregados.

Solução usando a sintaxe tradicional:

select deptno, dname
from dept
minus
select e.deptno, d.dname
from emp e, dept d
where e.deptno=d.deptno;

Usando sintaxe SQL99

select deptno, dname
from dept
minus
select e.deptno, d.dname
from emp e
inner join dept d on (e.deptno=d.deptno);

bthome.gifTopo


Realizado por Turtle Learning ®. Última alteração em 2011-08-16