BD e SQL
BD e SQL
BD e SQL
Bancos de dados é uma estrutura onde dados são armazenados de maneira organizada. Essas
estruturas costumam ter a forma de tabelas. Podemos dizer que Banco de Dados é um
conjunto de Tabelas.
Um banco de dados é um conjunto de dados com uma estrutura regular. Um banco de dados
é normalmente, mas não necessariamente, armazenado em algum formato de máquina lido
pelo computador.
O Banco de Dados do sistema Winthor possui mais de uma centena de tabelas. Dentre elas,
podemos citar algumas tabelas muito utilizadas, como, por exemplo, a Tabela de Clientes
(PCCLIENT), Tabela de Produtos (PCPRODUT), Tabela de Fornecedores (PCFORNEC) e Tabela
de Contas a Receber (PCPRPEST), entre outras.
2
1.2 Conceitos
1.2.1 Tabelas
As tabelas consistem na estrutura básica para armazenar dados. Uma tabela é composta de
campos que possuem duas qualidades que determinam os dados que podem ser armazenados
neles. A primeira é a qualidade do tipo de dado, que pode ser texto, memorando, número,
moeda, data/hora, sim/não, contador. A segunda propriedade refere-se à lista de
propriedades relacionada a cada campo, como tamanho, formato, casas decimais, legenda,
valor padrão, regra e texto de validação.
DTCADASTRO DATE
3
1.2.2 Registro X Campo
As tabelas são formadas por uma ou mais colunas, zero ou mais linhas. Usamos uma tabela
para armazenar dados sobre uma ou mais ocorrências de uma determinada entidade de nosso
Banco de Dados.
É importante lembrar que os dados são armazenados de maneira organizada nas tabelas e,
algumas vezes, as informações isoladas de uma tabela podem parecer não fazer sentido.
Porém, quando esses dados são relacionados a outros dados de outras tabelas, ocorre uma
complementação dos dados.
10 ARROZ FD 30 Linhas ou
registros da
12 OLEO DE SOJA CX 12 tabela de
produtos
15 LAPIS CX 0,10
4
1.2.3 Relacionamento entre Tabelas
Podemos chamar de relacionamento entre tabelas a maneira que as tabelas utilizam para se
‘ligarem’, para que seus dados possam ser unidos, formando informações completas.
Os tipos de relacionamentos mais utilizados são:
Um para Um (1:1)
Um para Vários (1:N)
Esta relação existe quando os campos que se relacionam são ambos do tipo Chave Primária,
em suas respectivas tabelas. Cada um dos campos não apresenta valores repetidos. Na prática
existem poucas situações onde utilizaremos um relacionamento deste tipo.
Um exemplo típico desse tipo de relacionamento pode ser demonstrado com as tabelas
PCPEDC (Cabeçalho de pedido de venda) e PCNFSAID (Nota fiscal de venda). Nesse exemplo,
para cada um cabeçalho de pedido de venda existe apenas uma nota fiscal de venda.
Este é, com certeza, o tipo de relacionamento mais comum entre duas tabelas. Uma das
tabelas (o lado um do relacionamento) possui um campo que é a Chave Primária e a outra
tabela (o lado vários) se relaciona através de um campo cujos valores relacionados podem se
repetir várias vezes.
Um exemplo típico desse tipo de relacionamento pode ser demonstrado com as tabelas
PCPEDC (Cabeçalho de pedido de venda) e PCPEDI (Itens de pedido de venda). Nesse
exemplo, para cada um cabeçalho de pedido de venda podemos ter vários itens do mesmo
pedido de venda.
5
2 Tabelas do Sistema Winthor
6
2.1 Principais Tabelas do Winthor
7
2.2 Relacionamento entre as tabelas do Winthor
PCFORNEC PCCOB
CODFORNEC CODCOB
8
3 Linguagem SQL
9
3.1 O que é linguagem SQL? Qual sua finalidade?
O SQL foi desenvolvido originalmente no início dos anos 70 nos laboratórios da IBM. O nome original da
linguagem era SEQUEL, acrônimo para "Structured English Query Language" (Linguagem de
Consulta Estruturada em Inglês).
A linguagem SQL é um grande padrão de banco de dados. Isto decorre da sua simplicidade e
facilidade de uso. Ela se diferencia de outras linguagens de consulta a banco de dados no sentido em que
uma consulta SQL especifica a forma do resultado e não o caminho para chegar a ele. Ela é uma linguagem
declarativa em oposição a outras linguagens procedurais. Isto reduz o ciclo de aprendizado daqueles que se
iniciam na linguagem.
Embora o SQL tenha sido originalmente criado pela IBM, rapidamente surgiram vários "dialetos"
desenvolvidos por outros produtores. Essa expansão levou à necessidade de ser criado e adaptado um
padrão para a linguagem. Esta tarefa foi realizada pela American National Standards Institute (ANSI) em
1986 e ISO em 1987.
Tal como dito anteriormente, o SQL, embora padronizado pela ANSI e ISO, possui muitas variações e
extensões produzidos pelos diferentes fabricantes de sistemas gerenciadores de bases de dados.
Tipicamente a linguagem pode ser migrada de plataforma para plataforma sem mudanças estruturais.
10
3.2 Comando Select
SELECT (Selecionar)
<CAMPOS ou *> (Campos selecionados ou todos os campos usando “*”)
FROM <TABELAS> (Das Tabelas)
WHERE <CLÁUSULAS> (Cláusulas de amarrações e/ou restrições)
GROUP BY <CAMPOS> (Agrupando por campos)
ORDER BY <CAMPOS> (Ordenando por campos crescentes ou Decrescentes).
c. Concatenar
d. Distinct
11
3.3 Restringindo Dados
(where)
a) Condições de Comparação (=, >, >=, <, <=, <>, in, not in, like, not like,
between, not between, is null, is not null)
‘=’ igual
‘>’ maior
‘>=’ maior ou igual
‘<’ menor
‘<=’ menor ou igual
‘<>’ diferente
‘in’ na lista
‘not in’ não está na lista
‘like’ como, parecido
‘not like’ não é parecido
‘between’ entre dois valores
‘not between’ não está entre dois valores
‘is null’ é nulo
‘is not null’ não é nulo
Obs.: Campo nulo é o campo que não possui nenhum valor atribuído. Campos com um
caractere de espaço ou 0(zero) tem valor atribuído. Campo nulo é campo vazio. Pode-se usar
o comando TRIM para retirar os espaços do campo, como por exemplo: select * from pcpedc
where trim(condvenda) is null
A condição lógica ‘and’ é utilizada para acrescentar uma condição de inclusão, ou seja, o
resultado será exibido apenas se todos os critérios de pesquisa foram obedecidos.
A condição lógica ‘or’ é utilizada para acrescentar uma condição de alternativa, ou seja, o
resultado será exibido caso seja obedecido o primeiro critério OU caso seja obedecido o
segundo critério.
14
3.4 Regras de Precedência
Operadores aritméticos
Operador de concatenação
Condições de comparação
Is null, is not null, like, not in
Between, not between
Condição lógica and
Condição lógica or
Obs.: O termo ‘desc’ é aplicado ao campo diretamente anterior ao termo, sendo aplicado de
maneira individual. Caso se deseje aplicar ordem decrescente à todos os campos, o termo
‘desc’ deve ser obrigatoriamente informado após cada campo.
15
3.5 Funções de Linha Simples
select numnota, case when numnota < 100 then ‘MENOR QUE 100’
when numnota between 101 and 200 then ‘ENTRE 101 E 200’
else ‘MAIOR QUE 200’ end “RESULTADO”
from pcmov;
(seleciona da tabela pcmov o campo numnota, e exibe mensagem de acordo com as
condições: caso o campo numnota seja menor que 100, exibe a mensagem ‘MENOR QUE 100’,
caso o campo numnota esteja entre 101 e 200, exibe a mensagem ‘ENTRE 101 E 200’, caso
contrário, exibe a mensagem ‘MAIOR QUE 200’)
select numnota, decode (numnota, 100, ‘CEM’, 200, ‘DUZENTOS’, 300, ‘TREZENTOS’,
‘NENHUM’) resultado from pcmov;
(seleciona da tabela pcmov, o campo numnota, e exibe mensagem de acordo com as
condições: se o campo numnota for igual a 100, exibe ‘CEM’, se for 200, exibe ‘DUZENTOS’, se
for 300, exibe ‘TREZENTOS’, se não for nenhum dos anteriores, exibe ‘NENHUM’)
17
3.6 Trabalhando com Datas
a) Adicionando dias
b) Subtraindo dias
18
3.7 Funções de Conversão
a) NUMBER to VARCHAR
b) DATE to VARCHAR
19
3.8 Funções de Grupo
3.8.1 GROUP BY
HAVING
20
3.9 Relacionamento entre tabelas
3.9.1 Sub-select’s
select * from pcprest where codusur in (select distinct(codusur) from pcusuari);
(seleciona todos os campos da tabela pcprest, onde o valor do campo codusur pertencer à
seleção distinta do campo codusur da tabela pcusuari)
Union
(seleciona a número de nota e código do cliente da tabela PCNFSAID, unindo com o número de
nota e código de cliente da tabela PCNFENT. Serão considerados na união apenas os registros
não repetidos nas pesquisas.)
21
Select numnota, codcli
From pcnfsaid
Union all
(seleciona a número de nota e código do cliente da tabela PCNFSAID, unindo com o número de
nota e código de cliente da tabela PCNFENT. Serão considerados na união todos os registros
das duas pesquisas, sejam esses registros repetidos ou não.)
Sub-select no ‘from’
22
3.10 Exercícios
23
4) Montar pesquisa com as seguintes informações:
Número da nota de venda
Data da nota de venda
Código do cliente
Nome do cliente
Código do RCA
Nome do RCA
Número da prestação
Data de vencimento
Valor
Código de cobrança
Data de pagamento
Valor pago
Observações:
Tabelas utilizadas (PCPREST / PCNFSAID / PCCLIENT / PCUSUARI)
Mostras informações do período de 01/08/2005 a 31/08/2005 das prestações
que não foram desdobradas (diferente de DESD)
24
7) Montar pesquisa com as seguintes informações:
Código da praça do pedido de venda
Nome da praça
Número do pedido de venda
Código do cliente
Nome do cliente
Código de cobrança do pedido
Descrição da cobrança
Código do plano de pagamento
Descrição do plano de pagamento
Prazo médio do plano de pagamento.
Observações:
Tabelas utilizadas (PCPEDC / PCPRACA / PCCLIENT / PCCOB / PCPLPAG )
O cliente não precisa necessariamente estar cadastrado
Apenas do supervisor 1
Apenas dados da filial 1
Período de 01/01/2006 a 30/04/2006
Apenas vendas da cobrança 237
25
9) Montar pesquisa com as seguintes informações:
Código do cliente
Nome do cliente
Valor acumulado de vendas
Valor acumulado de devoluções
Observações:
Script deve utilizar sub-select no from
Dados de vendas e devoluções não são obrigatórios
Tabelas utilizadas
● Pesquisa principal: PCCLIENT
● Pesquisa de vendas: PCNFSAID
● Pesquisa de devoluções: PCNFENT
Período de vendas e devoluções: 01/01/2006 a 30/04/2006
26
4 Gabarito dos Exercícios
27
4.1 Linguagem SQL
1) Código do cliente, nome do cliente, código do primeiro RCA, nome do primeiro RCA.
(Tabelas: PCCLIENT / PCUSUARI)
2) Espécie da N.F., número da N.F., data de saída da N.F., código do cliente, nome do
cliente, código do RCA, nome do RCA, código do supervisor, nome do supervisor.
(Tabelas: PCNFSAID / PCCLIENT / PCUSUARI / PCSUPERV)
Período solicitado: de 01/07/2005 a 31/07/2005
28
4) Número de nota de venda, data da nota de venda, código do cliente, nome do cliente,
código do RCA, nome do RCA, prestação, data de vencimento, valor, código de
cobrança, data de pagamento e valor pago. (Tabelas: PCNFSAID, PCCLIENT,
PCUSUARI, PCPREST)
Mostras informações do período de 01/08/2005 a 31/08/2005 das prestações que não
foram desdobradas (diferente de DESD)
5) Trazer código do cliente, nome do cliente, cgc ou cpf do cliente(do jeito que estiver na
tabela), cgc ou cpf do cliente(sem máscara), cgc ou cpf do cliente com máscara
correta. (Tabelas: PCCLIENT)
Se for CGC (14 dígitos), colocar máscara ’99.999.999/9999-99’
Se for CPF (11 dígitos), colocar máscara ‘999.999.999-99’
Se não for CGCnem CPF informat ‘TIPO INCORRETO’
Ordenado por código de cliente
7) Código da praça do pedido, nome da praça, numero do pedido, código do cliente, nome
do cliente, código da cobrança do pedido, descrição da cobrança, código do plano de
pagamento, descrição do plano de pagamento, prazo médio do plano de pagamento.
(Tabelas utilizadas: PCPEDC, PCPRACA, PCCLIENT, PCCOB, PCPLPAG).
O cliente não precisa necessariamente estar cadastrado
Apenas vendas tipo 1
Apenas do supervisor 1
Apenas dados da filial 1
Período de 01/01/2006 a 30/04/2006
Apenas vendas da cobrança 237
30