COMANDOS:
SELECT - COMANDO DE RECUPERACAO
AS CLAUSULAS DEVEM SER
ESPECIFICADAS NA ORDEM:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
- SELECT BASICO:
SELECT
ALL/DISTINCT
*
NOME DA COLUNA
EXPRESSAO ARITMETICA
LITERAL
FUNCAO ESCALAR
FUNCAO DE GRUPO
FROM
NOME DA TABELA
- SELECIONAR TODAS AS COLUNAS:
SELECT * FROM TAB1
SELECIONA
O CONTEUDO DE TODOS OS CAMPOS DA TABELA TAB1.
- SELECIONAR COLUNAS ESPECIFICAS
SELECT
AGENCIA, CONTA FROM TAB1
SELECIONA
SOMENTE O CONTEUDO DOS CAMPOS AGENCIA E CONTA DA TABELA TAB1. NESTE FORMATO
DEVEMOS COLOCAR UMA VIRGULA ENTRE O
NOME DAS COLUNAS. TODAS AS LINHAS APARECEM PARA A COLUNA ESPECIFICADA. A
ORDEM DE SELECAO DAS COLUNAS DETERMINA A ORDEM DE RECUPERACAO.
- ELIMINAR LINHAS DUPLICADAS NA SELECAO
SELECT DISTINCT AGENCIA FROM TAB1
- SELECT COM CLASSIFICACAO
SELECT ...
FROM
...
ORDER BY NOME DE
COLUNAS/NUMERO DA ORDEM DE SELECAO DAS COLUNAS
OBS: ... ORDER BY
... ASC
... ORDER BY ... DESC
SELECT DISTINCT
DEPTO, CARGO
FROM EMP
ORDER BY
CARGO, DEPTO DESC
OU
ORDER BY
2,1 DESC
A
TABELA RESULTANTE ESTA CLASSIFICADA EM ORDEM ASCENDENTE POR CARGO E DESCENDENTE
POR DEPARTAMENTO.
- SELECT COM CONDICAO DE PESQUISA
SELECT ...
FROM
...
WHERE NOME DE COLUNA
EXPRESSAO = EXPRESSAO
<>
>
<
>=
<=
NOME DE COLUNA IS
(NOT) NULL
NOME DE COLUNA
(NOT) LIKE VARIAVEL
EXPRESSAO (NOT) IN (VARIAVEL,...)
EXPRESSAO (NOT) BETWEEN EXPRESSAO AND
EXPRESSAO
AND
OR
ATRAVES
DA CLAUSULA WHERE PODE-SE COMPARAR O VALOR DE UMA COLUNA, VERIFICANDO EM QUAIS
LINHAS A COLUNA SELECIONADA SATISFAZ A UM CONJUNTO DE RESTRICOES.
SELECT MATRICULA, NOME,
CARGO
FROM EMP
WHERE
SALARIO >= 30000
SELECT NOME, SALARIO
FROM EMP
WHERE CARGO = 'GERENTE'
SELECT MATRICULA, NOME,
CARGO, SALARIO
FROM EMP
WHERE
SALARIO >= 30000 AND
CARGO = 'GERENTE'
SELECT MATRICULA, NOME,
CARGO, SALARIO
FROM EMP
WHERE
SALARIO >= 30000 OR
CARGO = 'GERENTE'
- SELECT COM OPERADOR IN
O
OPERADOR IN PODE SER UTILIZADO PARA SUBSTITUIR VARIOS OR.
SELECT MATRICULA, NOME,
CARGO, SALARIO
FROM EMP
WHERE
DEPTO = 'A00' OR
DEPTO = 'B01' OR
DEPTO = 'C01'
É
O MESMO QUE:
SELECT MATRICULA, NOME,
CARGO, SALARIO
FROM EMP
WHERE
DEPTO IN ('A00', 'B01', 'C01')
- SELECT COM OPERADOR BETWEEN
O
OPERADOR BETWEEN PODE SUBSTITUIR O AND QUANDO A CONSULTA DESEJAR RECUPERAR UM INTERVALO
FECHADO DE VALORES.
SELECT MATRICULA
FROM
EMP
WHERE
MATRICULA >= 9000 AND
MATRICULA <= 10000
PODE
SER SUBSTITUIDO POR:
SELECT MATRICULA
FROM
EMP
WHERE
MATRICULA BETWEEN 9000 AND 10000
- SELECT COM VALORES CALCULADOS
SELECT MATRICULA, NOME,
SALARIO+COMISSAO
FROM EMP
WHERE
DEPTO = 'A00'
SELECT MATRICULA, NOME, DEPTO
FROM EMP
WHERE (SALARIO+COMISSAO)/12 >= 40000
- SELECT COM FUNCOES DE GRUPO
SELECT NOME DE COLUNA
FUNCOES DE GRUPO
FROM ...
GROUP BY NOMES DE COLUNAS
FUNCOES
DISPONIVEIS:
-
SUM (SOMA DE VALORES)
- AVG (MEDIA DE VALORES)
-
MAX (MAIOR VALOR DE UMA COLUNA)
-
MIN (MENOR VALOR DE UMA COLUNA)
-
COUNT (NUMERO DE OCORRENCIAS DE UMA COLUNA OU NUMERO DE LINHAS DE UMA TABELA)
-
SELECT COM TOTAL DE
SALARIOS DO DEPARTAMENTO
SELECT
SUM(SALARIO)
FROM EMP
WHERE DEPTO = 'A00'
-
SELECT DA MEDIA DAS
NOTAS DO ALUNO 0001
SELECT AVG(NOTA)
FROM
ALUNOS
WHERE
MATRICULA = 0001
-
SELECT DA QUANTIDADE
DE ALUNOS QUE TIRARAM 10 EM MATEMATICA
SELECT COUNT(*)
FROM ALUNOS
WHERE NOTA = 10 AND
MATERIA = 'MATEMATICA'
-
SELECT DA MENOR NOTA
DE MATEMATICA DA ESCOLA:
SELECT MIN(NOTA)
FROM
ALUNOS
WHERE
MATERIA = 'MATEMATICA'
-
SELECT DA MAIOR NOTA
DE MATEMATICA DA ESCOLA:
SELECT MAX(NOTA)
FROM
ALUNOS
WHERE
MATERIA = 'MATEMATICA'
-
SELECT DA MAIOR NOTA
DE MATEMATICA DA ESCOLA:
SELECT MAX(NOTA)
FROM
ALUNOS
WHERE
MATERIA = 'MATEMATICA'
- SELECT COM CLAUSULAS GROUP E HAVING
A
CLAUSULA GROUP SERVE PARA AGRUPAR O RESULTADO DE UMA QUERY E GERALMENTE EH
USADA EM CONJUNTO COM AS FUNCOES DE GRUPO AVG, SUM, COUNT, MIN E MAX. NOS
EXEMPLOS DADOS PARA ESTAS FUNCOES RECUPERAMOS SEMPRE APENAS UM VALOR. POR
EXEMPLO, O MENOR SALARIO DE UM DEPARTAMENTO SERIA OBTIDO ASSIM:
SELECT
MIN(SALARIO)
FROM EMP
WHERE DEPTO = 'AB0'
PROGRAMAS DB2:
TODO O PROGRAMA DE DB2
TEMOS QUE INCLUIR UMA TABELA CHAMADA 'SQLCA' ESTA TABELA QUE CONTEM O 'SQLCODE'
< EXEC SQL
INCLUDE 'SQLCA' END-EXEC >
SEMPRE QUE FOR
UTILIZAR UM COMANDO 'SQL' DEVEMOS TESTAR SEU RETORNO ATRAVES DO 'SQLCODE'.
PARA TRABALHARMOS COM
DADOS QUE DEVERAM SOFRER UM CERTO TIPO DE SELECAO DEVEMOS ENTAO MONTAR UM
'CURSOR'.
O CURSOR E DECLARADO
NA WORKING APOS A DECLARACAO DAS TABELAS QUE SERAO USADAS NO PROGRAMA.
EX:
EXEC SQL
DECLARE C1 CURSOR FOR
SELECT
INTO
FROM
WHERE
END-EXEC
EM PROGRAMAS DE
ATUALIZACAO DEVEMOS ANTES EXECUTAR UM 'RESTART' PARA VERIFICAR SE A TABELA FOI
ATUALIZADA MAS NAO COMPLETAMENTE EM PROGRAMAS 'DB2' TEMOS QUE CRIAR UMA ROTINA
DE ENCERRAMENTO E DENTRO DESTA ROTINA UM COMANDO CHAMADO 'ROLL BACK' PARA NAO
EFETUAR AS PRIMEIRAS ATUALIZACOES CASO AS OUTRAS DEREM ERRO.
EXEC SQL
ROLL BACK
END-EXEC
QUANDO E MONTADO UM
CURSOR O MESMO NAO DEVERA SER LIDO NORMALMENTE COMO OS OUTROS PROGRAMAS E SIM
ATRAVES DE UM COMANDO CHAMADO 'FETCH'
EXEC
SQL FETCH C1
INTO
END-EXEC
I
M P O R T A N T E : TODO CURSOR TEM QUE SER ABERTO E FECHADO DURANTE A EXECUCAO
DO PGM.
CASO ELE TENHA
CONSEGUIDO EXECUTAR TODOS OS COMANDOS DO PROGRAMA SEM NENHUM ERRO DEVEMOS
UTILIZAR UM COMANDO PARA VALIDAR ESSAS ALTERACOES, CHAMA-SE 'COMMIT'
EXEC SQL
COMMIT WORK
END EXEC
PROCEDIMENTOS PARA PROGRAMA COM CURSORES DB2:
EM PROGRAMAS
BATCH/ON-LINE:
Nos cancelamentos dos programas nao ha' necessidade de se executar
o fechamento dos CURSORES DB2 que porventura estiverem abertos no momento do cancelamento. O fechamento dos
mesmos ficara' a cargo do sistema operacional. No caso de encerramento
(processamento normal), fechar os CURSORES abertos, testando seu SQLCODE.
EM API'S
BATCH/ON-LINE:
Nos cancelamentos das api's, e' obrigatorio o fechamento dos
CURSORES DB2 abertos no momento
do cancelamento.
O que ocorre nas api's, em caso de cancelamento, na verdade, e' um
pseudocancelamento, pois a api ao encerrar anormalmente o seu processo, nao e' cancelada mas
finalizada, retornando ao programa chamador. Quem toma a decisao de
cancelar ou nao o processamento e' o programa chamador.
Caso a api seja chamada novamente pelo mesmo programa, o CURSOR da api estara' aberto (pois a api nao o fechou na chamada anterior).
Assim, o fechamento
em casos de cancelamento de api's e' necessario.
Porem, apenas sera' executado o fechamento (EXEC SQL CLOSE CURSOR1 END-EXEC)
sem o teste do sqlcode de fechamento (para que nao se tenha sobreposicao de
dados do cancelamento).
O fechamento com teste de sqlcode so' se dara' no caso de
encerramento normal da api, ou
seja, apos o termino do processamento de todas as linhas desejadas do CURSOR.
Nenhum comentário:
Postar um comentário