Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduo ao SQL
Aula 08
Attilio Zanelatto Neto
Aulas prticas
Outerjoin
Left (tabela de conduo esquerda)
Right (tabela de conduo direita)
Full (completa) (ambas as tabelas de conduo)
Um novo modelo
emp
bonus
EMPNO
ENAME
salgrade
ENAME
JOB
GRADE
JOB
SAL
LOSAL
MGR
COMM
HISAL
HIREDATE
SAL
locations
COMM
ID
DEPTNO (FK)
CITY
dept
DEPTNO
DNAME
LOC_ID
STATE_TX
3
Criando as tabelas
CREATE TABLE BONUS
(
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
SAL NUMBER,
COMM NUMBER
) ;
CREATE TABLE DEPT
(
DEPTNO NUMBER(2,0),
DNAME VARCHAR2(14),
LOC_ID NUMBER(*,0)
) ;
CREATE TABLE EMP
(
EMPNO NUMBER(4,0),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4,0),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2,0)
) ;
values
values
values
values
(10,'ACCOUNTING',1);
(20,'RESEARCH',2);
(30,'SALES',null);
(40,'OPERATIONS',4);
(7369,'SMITH','CLERK',7902,to_date('17-DEC-80','DD-MON-RR'),800,null,20);
(7499,'ALLEN','SALESMAN',7698,to_date('20-FEB-81','DD-MON-RR'),1600,300,30);
(7521,'WARD','SALESMAN',7698,to_date('22-FEB-81','DD-MON-RR'),1250,500,30);
(7566,'JONES','MANAGER',7839,to_date('02-APR-81','DD-MON-RR'),2975,null,20);
(7654,'MARTIN','SALESMAN',7698,to_date('28-SEP-81','DD-MON-RR'),1250,1400,null);
(7698,'BLAKE','MANAGER',7839,to_date('01-MAY-81','DD-MON-RR'),2850,null,30);
(7782,'CLARK','MANAGER',7839,to_date('09-JUN-81','DD-MON-RR'),2450,null,10);
(7788,'SCOTT','ANALYST',7566,to_date('19-APR-87','DD-MON-RR'),3000,null,20);
(7839,'KING','PRESIDENT',null,to_date('17-NOV-81','DD-MON-RR'),5000,null,10);
(7844,'TURNER','SALESMAN',7698,to_date('08-SEP-81','DD-MON-RR'),1500,0,30);
(7876,'ADAMS','CLERK',7788,to_date('23-MAY-87','DD-MON-RR'),1100,null,20);
(7900,'JAMES','CLERK',7698,to_date('03-DEC-81','DD-MON-RR'),950,null,30);
(7902,'FORD','ANALYST',7566,to_date('03-DEC-81','DD-MON-RR'),3000,null,20);
(7934,'MILLER','CLERK',7782,to_date('23-JAN-82','DD-MON-RR'),1300,null,10);
values
values
values
values
(1,'NEW YORK','NY');
(2,'DALLAS','TX');
(3,'CHICAGO','IL');
(4,'BOSTON','MA');
values
values
values
values
values
(1,700,1200);
(2,1201,1400);
(3,1401,2000);
(4,2001,3000);
(5,3001,9999);
Criando as constraints
ALTER TABLE BONUS ADD CONSTRAINT BONUS_PK PRIMARY KEY (ENAME, JOB) ENABLE;
Select
Select * from emp;
EMPNO
ENAME
---------- ---------7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
7876 ADAMS
7900 JAMES
7902 FORD
7934 MILLER
14 rows selected.
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
--------- ----- --------- ---------- ---------- ---------CLERK
7902 17-DEC-80
800
20
SALESMAN
7698 20-FEB-81
1600
300
30
SALESMAN
7698 22-FEB-81
1250
500
30
MANAGER
7839 02-APR-81
2975
20
SALESMAN
7698 28-SEP-81
1250
1400
MANAGER
7839 01-MAY-81
2850
30
MANAGER
7839 09-JUN-81
2450
10
ANALYST
7566 19-APR-87
3000
20
PRESIDENT
17-NOV-81
5000
10
SALESMAN
7698 08-SEP-81
1500
0
30
CLERK
7788 23-MAY-87
1100
20
CLERK
7698 03-DEC-81
950
30
ANALYST
7566 03-DEC-81
3000
20
CLERK
7782 23-JAN-82
1300
10
Select
select * from dept;
DEPTNO DNAME
LOC_ID
---------- -------------- -----10 ACCOUNTING
1
20 RESEARCH
2
30 SALES
40 OPERATIONS
4
4 rows selected.
Equijoin Tradicional
SELECT e.ename AS Employee_name,
d.deptno,
d.dname AS Department_name
FROM emp e,
dept d
WHERE e.deptno = d.deptno;
EMPLOYEE_N
DEPTNO DEPARTMENT_NAM
---------- ---------- -------------SMITH
20 RESEARCH
ALLEN
30 SALES
WARD
30 SALES
JONES
20 RESEARCH
BLAKE
30 SALES
CLARK
10 ACCOUNTING
SCOTT
20 RESEARCH
KING
10 ACCOUNTING
TURNER
30 SALES
ADAMS
20 RESEARCH
JAMES
30 SALES
FORD
20 RESEARCH
MILLER
10 ACCOUNTING
13 linhas selecionadas.
Prefixo da tabela
necessria para
remover a ambiguidade
em colunas comuns
As condies de Join
devem ser listadas.
13 linhas selecionadas.
No necessrio o prefixo da
tabela se a coluna parte da
condio de join..
SELECT d.dname,
e.ename
FROM emp e
JOIN dept d USING ( deptno );
DNAME
-------------RESEARCH
SALES
SALES
RESEARCH
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING
ENAME
---------SMITH
ALLEN
WARD
JONES
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
13 linhas selecionadas.
DNAME
CITY
-------------- -----------ACCOUNTING
NEW YORK
RESEARCH
DALLAS
OPERATIONS
BOSTON
3 rows selected.
Lista as condies de
Join aqui como na sintaxe
tradicional.
-TX
TX
NY
TX
NY
TX
TX
NY
SELECT e.empno,
opcional indicando que este um
l.city,
equijoin (no um outer ou cross)
d.dname,
d.deptno
FROM locations l
INNER JOIN dept d ON ( d.loc_id = l.id )
INNER JOIN emp e ON (d.deptno = e.deptno);
EMPNO CITY
DNAME
DEPTNO
---------- ------------ -------------- ---------7369 DALLAS
RESEARCH
20
7566 DALLAS
RESEARCH
20
7782 NEW YORK
ACCOUNTING
10
7788 DALLAS
RESEARCH
20
7839 NEW YORK
ACCOUNTING
10
7876 DALLAS
RESEARCH
20
7902 DALLAS
RESEARCH
20
7934 NEW YORK
ACCOUNTING
10
8 linhas selecionadas.
Parnteses so opcionais,
entretanto devemos inclu-los para
maior clareza
DNAME
-------------ACCOUNTING
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
SALES
SALES
SALES
SALES
SALES
OPERATIONS
14 linhas selecionadas.
DNAME
-------------ACCOUNTING
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
SALES
SALES
SALES
SALES
SALES
OPERATIONS
14 linhas selecionadas.
SELECT e.ename,
emp e USING (deptno) pode ser
d.dname
usado em um INNER e OUTER join.
FROM dept d
NATURAL LEFT JOIN emp e;
ENAME
---------CLARK
KING
MILLER
JONES
SMITH
SCOTT
FORD
ADAMS
TURNER
JAMES
ALLEN
WARD
BLAKE
DNAME
-------------ACCOUNTING
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
SALES
SALES
SALES
SALES
SALES
OPERATIONS
14 linhas selecionadas.
DNAME
-------------ACCOUNTING
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
SALES
SALES
SALES
SALES
SALES
OPERATIONS
14 linhas selecionadas.
DNAME
-------------RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
SALES
RESEARCH
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
SALES
SALES
OPERATIONS
15 linhas selecionadas.
DNAME
-------------RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
SALES
RESEARCH
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
SALES
SALES
OPERATIONS
15 linhas selecionadas.
DNAME
-------------RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
SALES
RESEARCH
ACCOUNTING
ACCOUNTING
RESEARCH
RESEARCH
SALES
SALES
OPERATIONS
15 linhas selecionadas.
DNAME
-------------ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
ACCOUNTING
--------SALESMAN
SALESMAN
SALESMAN
6 linhas selecionadas.
Apenas o departamento 30, SALES,
tem SALESMAN como um trabalho.
ENAME
---------ALLEN
WARD
MARTIN
TURNER
3 rows selected.
JOB
--------SALESMAN
SALESMAN
SALESMAN
SALESMAN
Misturando as Sintaxes
SELECT empno,
ename,
dname,
dummy
FROM dual,
emp e
INNER JOIN dept d ON (d.deptno = e.deptno)
WHERE e.deptno = 10;
EMPNO
---------7782
7839
7934
ENAME
---------CLARK
KING
MILLER
3 rows selected.
DNAME
-------------ACCOUNTING
ACCOUNTING
ACCOUNTING
D
X
X
X
Misturando as Sintaxes
SELECT empno,
ename,
dname,
dummy
FROM emp e
dual,
INNER JOIN dept d
ON ( d.deptno = e.deptno )
WHERE e.deptno = 10;
dual,
*
ERROR at line 6:
ORA-00933: SQL command not properly ended
Misturando as Sintaxes
SELECT empno, ename, dname, dummy
Presena de ambas: a vrgula
(tradicional) e a sintaxe JOIN
FROM dual,
emp e
INNER JOIN dept d on d.deptno = e.deptno
and dummy IS NOT NULL
WHERE e.deptno = 10;
ANSI s pode ver outras tabelas
que participam no Join ANSI
Perguntas?
33