Soluções dos exercícios sobre junção de tabelas |
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;
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);
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;
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);
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;
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';
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;
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');
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;
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)
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 (+));
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');
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;
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);
Realizado por Turtle Learning ®. Última alteração em 2011-08-16