Conceitos
Um inner join inclui na tabela resultado, somente as linhas em que os valores das colunas combinadas (joined) são iguais. Pelo fato de o inner join gerar uma tabela resultado com mais de uma linha, ele deve ser codificado dentro de uma declaração DECLARE CURSOR.
Tanto uma view quanto um cursor serão read only se suas declarações SELECT contiverem um join.
Sintaxe Implícita
| SELECT | column-specification [AS result-column] |
| [, column-specification [AS result-column]] ... | |
| FROM table-spec, table-spec [, table-spec] ... |
|
| [WHERE condition] | |
| [ORDER BY sort-column [DESC] [, sort-column [DESC]] ...] |
Sintaxe Explícita
| SELECT |
column-specification [AS result-column] |
|
| [, column-specification [AS result-column]] ... | ||
| FROM table-spec [, table-spec] ... | ||
| INNER JOIN table-spec | ||
| [ON join-condition] |
||
| [WHERE selection-condition] | ||
| INNER JOIN table-spec |
||
| [ON join-condition] | ||
| [WHERE selection-condition] |
||
| [ORDER BY sort-column [DESC] [, sort-column [DESC]] ...] |
Na sintaxe acima, table-spec pode ser uma tabela ou uma view. Para efeitos de programação a view pode ser utilizada em qualquer lugar que uma tabela for utilizada.
Exemplos
Join de duas tabelas (EMP e DEPT) onde E_EMPNO é igual a D_EMPNO e o código do empregado é maior que 1000.
Implícito.
| SELECT | E_EMPNO, DEPTNO, LNAME, FNAME |
| FROM PW0001.EMP, PW0001.DEPT |
|
| WHERE E_EMPNO = D_EMPNO | |
| AND E_EMPNO > '1000' |
Explícito.
| SELECT | E_EMPNO, DEPTNO, LNAME, FNAME |
| FROM PW0001.EMP | |
| INNER JOIN PW0001.DEPT | |
| ON E_EMPNO = D_EMPNO |
|
| WHERE E_EMPNO > '1000' |
É recomendável utilizar o formato explícito para manter equivalência com o formato do outer join visto adiante.
Se não for especificada uma condição nas cláusulas ON ou WHERE, a tabela resultado será a combinação de todas as linhas da primeira tabela com todas as linhas da segunda tabela.