1. TREINAMENTO DE SQL – PARTE 1 de 2. ETAPAS: Comando Distinct Agrupando Dados Funções Matemática String Conversão Funçõesde Agregação ComandoHaving Union e Union All Ordenação Comando Case When ComandoRowNumdo Oracle Conceitos de banco de dados Sentença SQL Dicionário de dados Consulta simples em uma tabela Interpretando a GLINKSREL Ligando tabelas / Inner Join Outher Join – Left / Right Consulta com várias tabelas Apelido de tabela / coluna Filtros e parâmetros Comando Between Subconsulta In Subconsulta Alias / Externa
17. A chave estrangeira é responsável por ligar uma tabela com outra pelo campo chave primáriaEsta ligação também conhecida como herança, viabiliza a ligação de uma tabela na outra tornando possível a generalização/agrupamento dos dados.
18. CONCEITOS DE BANCO DE DADOS Exemplo de ligação de tabelas: Chave primária Chave estrangeira
19. CONCEITOS DE BANCO DE DADOS Como o RM controla diversas coligadas em um único banco de dados? Nas tabelas que necessitam de um cadastro separado por coligada, é utilizado uma coluna para indicar a qual coligada o registro pertence.
20.
21. Através dela é possível inserir, editar, consultar e excluir dados das tabelas.
22. A Linguagem SQL está presente em todos SGBD existentes no mercado.
23. Ela segue um padrão de escrita (comum) utilizado por todos fabricantes.
24. Porém cada SGBD possui algumas particularidades/restriçõesSGBD SQL BD
25.
26. Através dela é possível inserir, editar, consultar e excluir dados das tabelas.
27. A Linguagem SQL está presente em todos SGBD existentes no mercado.
28. Ela segue um padrão de escrita (comum) utilizado por todos fabricantes.
29. Porém cada SGBD possui algumas particularidades/restriçõesSGBD SQL BD
30.
31. Através dela é possível inserir, editar, consultar e excluir dados das tabelas.
32. A Linguagem SQL está presente em todos SGBD existentes no mercado.
33. Ela segue um padrão de escrita (comum) utilizado por todos fabricantes.
34. Porém cada SGBD possui algumas particularidades/restrições.SGBD SQL BD
35. SENTENÇA SQL – DICIONÁRIO DE DADOS Como eu sei qual o nome da tabela, ou o nome do campo que armazena determinado dado? A forma mais fácil é via aplicativo pressionando CTRL+SHIFT e posicionando o cursor sobre o campo, conforme o exemplo abaixo:
36. SENTENÇA SQL – DICIONÁRIO DE DADOS Para as novas telas desenvolvidas em .NET Clicar com o direito no fundo da janela, e habilitar a opção “visualizar nome dos campos”, e posicionar o cursor sobre o campo.
37. DICIONÁRIO DE DADOS Outra forma é rastrear pela tabela GCAMPOS, utilizada pelo gerador como um dicionário de dados. Contendo o nome das tabelas e os campos com suas descrições.
38. CONSULTA SIMPLES EM UMA TABELA Sintaxe de uma consulta SQL: O comando SELECT é responsável pelas consultas no banco de dados, sendo o único comando utilizado em planilhas, gerador e nos cubos.
39. CONSULTA SIMPLES EM UMA TABELA Sintaxe de uma consulta SQL: Agora um exemplo de SELECT, buscando apenas algumas colunas específicas:
40. INTERPRETANDO A GLINKSREL Como eu sei qual a ligação das tabelas? Existe uma tabela chamada GLINKSREL que contém todas as tabelas e suas ligações, composta por apenas 4 colunas, conforme exemplo abaixo:
41. INTERPRETANDO A GLINKSREL Como eu sei qual a ligação das tabelas? Existe uma tabela chamada GLINKSREL que contém todas as tabelas e suas ligações, composta por apenas 4 colunas, conforme exemplo abaixo:
42. INTERPRETANDO A GLINKSREL A CHILDTABLE (TMOV – movimentos) herda os dados da tabela MASTERTABLE (FCFO – clientes/fornecedores), ou seja, no cadastro de um pedido é informado o código do cliente, e assim é feita a ligação destas duas tabelas.
43. INTERPRETANDO A GLINKSREL Visualizando de uma outra forma. 1º 2º 3º FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND FCFO.CODCFO = TMOV.CODCFO
46. INTERPRETANDO A GLINKSREL Não entendeu? Vamos no passo-a-passo!!! FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND FCFO.CODCFO
47. INTERPRETANDO A GLINKSREL Não entendeu? Vamos no passo-a-passo!!! FCFO.CODCOLIGADA = TMOV.CODCOLCFO AND FCFO.CODCFO = TMOV.CODCFO
48. INTERPRETANDO A GLINKSREL Existem tabelas com mais de uma possibilidade de ligação, para estes casos, deve ser identificado qual a linha que contém a ligação correta. Quando um relatório não é feito por consulta SQL, mas é feito com “campos da base”, o sistema identifica as ligações entre as tabelas, e na ocorrência de mais de uma ligação, exige que o usuário selecione a ligação correta, para poder salvar o relatório.
49. Ligando Tabelas / Inner Join Sintaxe de uma consulta SQL: SELECT [DISTINCT] <CAMPOS> FROM <TABELAS> <JOINS> WHERE <CONDIÇÕES> GROUP BY <CAMPOS> ORDER BY <CAMPOS> O comando SELECT é responsável pelas consultas no banco de dados, e no Corpore, pode ser utilizado no gerador de relatórios, planilhas, cubos, filtros com o operador in, e em fórmulas. Vale lembrar que:
50. Ligando Tabelas / Inner Join Ligando tabelas pelo comando “WHERE” Ligando tabelas pelo comando “FROM”
51. Ligando Tabelas / Inner Join Outro exemplo mais complexo, ligando pelo comando “WHERE” e “FROM” respectivamente, uma tabela com chave composta. DICA: Mesmo que o cliente tenha apenas uma coligada, utilize as ligações da maneira correta, se a tabela usa chave composta, ligue os dois campos.
52. Outer Join – Left / Right Quando você relaciona duas tabelas pelo Inner Join, o SGBD retorna registros das duas tabelas quando existe um relacionamento da tabela da esquerda com a tabela da direita. Porém existem situações onde você necessita que o SGBD retorne registros da tabela da esquerda, mesmo não contendo registro na tabela da direita que se iguale. Para solucionar este problema, existe o conceito de Outer Join, muito utilizado para ligar tabelas que contenha campos de preenchimento opcional, como os campos complementares. Abaixo um Outer Join escrito de maneira formal (relacionada pelo comando From)
53. OuterJoin – Left / Right Abaixo o mesmo Outer Join, relacionando tabelas pelo Where para SGBD SQL SERVER. Agora, o mesmo comando acima para SGBD ORACLE.
54. OuterJoin – Left / Right Observe a consulta abaixo, foi obtido o resultado dos identificadores 103, 105 e 118. Todos possuem relação entre item e o tributo. Porém os registros dos tributos, assim como outras tabelas, são criados somente quando ele existe, diferente de outras tabelas que criam o registro porém com alguns campos nulos.
55. OuterJoin – Left / Right Note que agora os identificadores 104, 106 e 108, foram inclusos. Isto deve-se ao outer join, que buscou todos os valores da tabela de itens do movimento, mesmo não existindo um registro que mantém relação na tabela de tributos. Este exemplo é para SQL Server, em Oracle basta substituir * por (+) .
56. Consulta com várias tabelas Em grande parte das consultas SQL é utilizado mais de duas tabelas, e devido este nível de complexidade é comum utilizarmos diagramas para facilitar o entendimento dos relacionamentos, e facilitar no desenvolvimento da sentença SQL. Veja o exemplo abaixo: PFUNC PSECAO PCODSITUACAO PFUNCAO
57. Consulta com várias tabelas Passo 1 - ligar a tabela PFUNC com a PSECAO. PFUNC PSECAO PCODSITUACAO PFUNCAO
58. Consulta com várias tabelas Passo 1 - ligar a tabela PFUNC com a PSECAO. SELECT * FROM PFUNC, PSECAO WHERE PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA AND PFUNC.CODSECAO = PSECAO.CODIGO
59. Consulta com várias tabelas Passo 2 - ligar a tabela PFUNC com a PFUNCAO. PFUNC PSECAO PCODSITUACAO PFUNCAO
60. Consulta com várias tabelas Passo 2 - ligar a tabela PFUNC com a PFUNCAO. SELECT * FROM PFUNC, PSECAO, PFUNCAO WHERE PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA AND PFUNC.CODSECAO = PSECAO.CODIGO AND PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO
61. Consulta com várias tabelas Passo 3 - ligar a tabela PFUNC com a PCODSITUACAO. PFUNC PSECAO PCODSITUACAO PFUNCAO
62. Consulta com várias tabelas Passo 3 - ligar a tabela PFUNC com a PCODSITUACAO. SELECT * FROM PFUNC, PSECAO, PFUNCAO, PCODSITUACAO WHERE PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA AND PFUNC.CODSECAO = PSECAO.CODIGO AND PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO AND PFUNC.CODSITUACAO = PCODSITUACAO.CODCLIENTE
63. Consulta com várias tabelas A mesma SQL escrita de maneira formal: SELECT * FROM PFUNC INNER JOIN PSECAO ON ( PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA AND PFUNC.CODSECAO = PSECAO.CODIGO ) INNER JOIN PFUNCAO ON ( PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO ) INNER JOIN PCODSITUACAO ON ( PFUNC.CODSITUACAO = PCODSITUACAO.CODCLIENTE )
64. Consulta com várias tabelas Note queaté o momentotodosexemplos de SQL apresentadosutilizam no comando: SELECT * quesignifica; obtertodas as colunas de todas as tabelasenvolvidas. No entanto, se analisarmos, estecomandoretornaalgumascolunasdesnecessárias. Para solucionaresteproblema, obtendosomente as colunaquenosinteressabastaindicar a tabela e o nome do campo no padrãoTABELA.CAMPO, veja a diferença no exemploabaixo:
65. Apelido de Tabela / Coluna É possíveldiminuir a quantidade de “código” namontagem de umasentença SQL atribuindo um apelido a umatabela, tambémconhecidocomo alias. Após a criaçãodestes, bastautilizálo no lugar do nomedatabela. Compare estasduasconsultasabaixo do antes e o depois, respectivamente: SELECT PFUNC.CHAPA, PFUNC.NOME, PSECAO.DESCRICAO, PFUNCAO.NOME, PCODSITUACAO.DESCRICAO FROM PFUNC, PSECAO, PFUNCAO, PCODSITUACAO WHERE PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA AND PFUNC.CODSECAO = PSECAO.CODIGO AND PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO AND PFUNC.CODSITUACAO = PCODSITUACAO.CODCLIENTE SELECT P.CHAPA, P.NOME, S.DESCRICAO, F.NOME, C.DESCRICAO FROM PFUNC P, PSECAO S, PFUNCAO F, PCODSITUACAO C WHERE P.CODCOLIGADA = S.CODCOLIGADA AND P.CODSECAO = S.CODIGO AND P.CODCOLIGADA = F.CODCOLIGADA AND P.CODFUNCAO = F.CODIGO AND P.CODSITUACAO = C.CODCLIENTE
66. Apelido de Tabela / Coluna Também é possívelcriar um alias (apelido) paraumacoluna de maneirasemelhande a criação de alias paratabelas. SELECT PFUNC.CHAPA REGISTRO, PFUNC.NOME FUNCIONARIO, PSECAO.DESCRICAO SECAO, PFUNCAO.NOME FUNCAO, PCODSITUACAO.DESCRICAO SITUACAO FROM PFUNC, PSECAO, PFUNCAO, PCODSITUACAO WHERE PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA AND PFUNC.CODSECAO = PSECAO.CODIGO AND PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO AND PFUNC.CODSITUACAO = PCODSITUACAO.CODCLIENTE
67. Apelido de Tabela / Coluna Vejaabaixo o resultado de antes e depois, respectivamente: Observação:Estaprática é muitoutilizadaemsqlqueutilizamfunções, veremosadiante o quesignifcafunções.
68. Filtros e Parâmetros No filtro, como o próprio nome sugere, serve para consultar informações no banco de dados, de forma que o resultado, seja apresentado eliminando dados. O exemplo abaixo, apresenta uma consulta simples; onde está sendo pesquisado funcionários com o salário inferior a 1000.
69. Filtros e Parâmetros Vale lembrarqueexistediferença entre as comparações: Salário inferior a 1000 Salário inferior/inclusive 1000. Observação: Estascomparaçõessãochamadas “menor”, e “menorouigual” respectivamente.
70. Filtros e Parâmetros Vejaabaixo o símboloquerepresentacadaoperador e comosãochamados, respectivamente: = Igual <> Diferente < Menor <= Menorouigual > Maior >= Maiorouigual LIKE Like, pesquisadentro do conteúdo de um campo alfanumérico NOT LIKE esteretorna o quenãosatisfaz a condição Like. BETWEAN É usadoparacomparar um campo com um intervalor de valoresoudatas. IN In, serve paracomparar um campo com valores de umalista. NOT IN Este retorna o quenãosatisfaz a condição In. Veremosadianteosultimos 3 comandos “especiais” emmaiordetalhes.
71. Filtros e Parâmetros A princípio o comando LIKE tem a mesmafunção do operadorigual; Porém, quandoutilizadoemconjunto do simbolo de percentual, é possívelpesquisardentro do conteúdo de um campo alfanumérico.
72. Filtros e Parâmetros No exemploabaixomuitosemelhante a consulta anterior, pesquisadentro do campo de códigodaseção dos funcionários, umaseçãoqueinicia com “01”.
73. Filtros e Parâmetros O comando LIKE tambémpesquisa no final, ou no campo todo, vejaosexemplos:
74. Filtros e Parâmetros O comando NOT LIKE, inversoaocomando Like, pesquisaoscamposquenãocontém a ocorrência, tambémsendopossívelpesquisar no inicio, no fimouemtodo o campo. No exemploabaixoestásendopesquisadopessoasquenãocontém no nome a letra “E”.
75. Filtros e Parâmetros Emtodosfiltrosapresentadosanteriormente, foiutilizadoapenasumacondição. Podemos extender o número de condições, oucombinações de condiçõesnamesmasentença SQL, utilizandoosoperadoreslógico, abaixo: AND, equivalente a “E”, ondepara a condição ser verdadeira é necessáriosatisfazertodas as condições; exemplo: Funcionáriosativos “E” Saláriomenorque R$ 1.000,00. SELECT * FROM PFUNC WHERE CODSITUACAO = 'A' AND SALARIO < 1000 OR, equivalente a “OU”, ondepara a condição ser verdadeira é necessáriosatisfazerapenasuma das condições; exemplo: Lançamentobaixado “OU” Código do clienteigual a F00001. SELECT CODCFO, STATUSLAN FROM FLAN WHERE STATUSLAN = '1' OR CODCFO = 'F00001'
76. Filtros e Parâmetros É possíveltambémcriarexpressõeslógica, similar as expressõesmatemática; veja o exemplo: Observe queosparenteses, servemparadefinir a prooridadedaexpressão.
77. Filtros e Parâmetros Os parâmetros, sãovariáveispreenchidaspelousuário no momentodaexecução das sentença SQL, estasvariáveissãoutilizadasnascondições de umaconsulta. A sintaxe de umavariavelparâmetro é: “:PARAMETRO_TIPO”. Os parâmetrostambémpossuemtipos, sendoeles: _D, esterefere-se a data. _S, esterefere-se a caracteresalfanumérico. _N, esterefere-se a númerosinteiros. _V, esterefere-se a valoresdecimais. Veja, no exemploabaixo uma sentença SQL com 2 parâmetros. SELECT NOME FROM PFUNC WHERE CODCOLIGADA = :CODCOLIGADA_N AND CHAPA = :CHAPA_S
78. Comando Between O comando Between serve paracomparar um intervalo de valoresoudatas. Podendo ser utilizado no lugardacomumcomparação “campo >= inicio e campo <= fim”, veja o exemploabaixo:
79. Subconsulta IN O operador IN, pode ser utilizadoparacomparar um campo a umalista de valores. Veja um exemplo simples abaixo: Atenção: o comando “OR”, chamado “OU”, é utilizado em expressões lógicas, que será visto com mais detalhes após alguns slides.
80. Subconsulta IN A subconsulta IN é compostadacomparação de um campo com umalista de valores, ondeestalista é “alimentada” peloresultado de umaconsulta. Veja o exemplo:
81. Subconsulta Alias Um outrotipo de subconsulta é a “subconsulta alias”, que resume-se emcriarumaconsulta SQL, atribuir um apelidoparaesta, e tratá-la como se fosse umatabelaouvisão; podendo inclusive relacionaresta com outrastabelas, ouatémesmo com outrassubconsultas.
100. Ordenação – Order By O comando order by serve paraordenar o resultado.
101. Ordenação – Order By Observe abaixo, um exemplo de ordenaçãodecrescente, utilizando o comando “DESC”. Porpadrão a ordenação é a crescente, e esteutilizado de forma implícita o comando “ASC” de ordenaçãoacendente.
102. Ordenação – Order By Nesteexemploaoinvéz de ser utilizado o nomedacolunas, estásendoutilizado o númeroidentificadordacoluna.
103. Comando Case When O comando “CASE” é utilizadopararealizar testes no resultado de umacoluna. É obrigatórioumarespostacaso a condiçãosejaverdadeira.
104. Comando Case When Nesteexemplofoiacrescentado o comando “ELSE”, este é responsávelpelotratamentodacolunacaso a condiçãonãosejaverdadeira.
105. Comando Case When A SQL aolado, utilizadentro do resultado de um case, outrosegundocomando case. Estadinâmicapossibilita um tratamenteespecíficoparacadacondiçãoquefizer-se necessária.
106. Comando Case When Emmuitassituaçõespodemosdiminuir a linha de códigos SQL, abrindo um bloco “CASE”, e realizandotodos testes com o comando “WHEN”, e por ultimo fechar o bloco com o comando “END”. E novamente o “ELSE”, simbolizando o comandosenão, queconsisteementrarnacondíçãoquando a memanão for verdadeira.
107. ComandoRowNum do Oracle O comandoRowNum do Oracle , é utilizadocomoumavariável, e serve parafazer com queumacolunasimbólica, sejacomoumacoluna de dados. É comumutilizarmosestavariávelparaposteriormentefazermos um filtroporfaixa de registros, veja o exemplo: SELECT SALARIO FROM PFUNC WHERE ROWNUM = 3 ORDER BY SALARIO DESC Quandonecessitamos de fazer o mesmofiltro, no SQL Server utilizamosumaoutratécnica, veja: SELECT TOP 1 SALARIO FROM( SELECT TOP 3 SALARIO FROM PFUNC ORDER BY SALARIO DESC )T ORDER BY SALARIO