Documente Academic
Documente Profesional
Documente Cultură
Tabelas: So os objetos onde esto gravados os dados. Definida tecnicamente como arranjo bidirecional dos dados
(linhas e colunas). Nelas so alocadas os dados de um mesmo tipo (exemplo, clientes, produtos) de forma organizada, em linhas e colunas, onde as linhas so chamadas de registros e as colunas de campos. Cada registro (linha) se refere a um item cadastrado, por exemplo, cada linha da tabela de clientes o cadastro de um cliente. Cada campo (coluna) um dado pertencente ao registro, por exemplo, o Endereo de um cliente especfico.
Tabela Clientes
CodCliente (Chave)
Registro
1 2
Campo
As tabelas so caracterizadas tambm por conter um campo exclusivo, ou seja, que no se repete, e que no pode ficar em branco, em cada registro, no exemplo acima este campo seria o CodCliente, este campo de cdigo, que no se repete em mais nenhum cliente na tabela, o nosso campo chave, em ingls o PK, Primary Key (Chave primria). Este campo necessrio para que seja possvel identificar o cliente na tabela, sabe-se com certeza que este cliente 1 o Cleverson, em todas as tabelas que aparecerem, por exemplo, se numa tabela oramento existir um campo CodCliente e em um registro existir o nmero 1, consegue associar as informaes trazendo o nome deste cliente, endereo e demais dados da tabela de clientes. Nesta tabela de oramentos vai existir um cdigo ou um nmero de oramento que vai identificar em exclusivo cada oramento. Este campo CodCliente tambm por extenso um ndice, que um outro objeto do banco de dados, os ndices fazem com que os dados destas colunas seja internamente organizadas, alfabetica ou numericamente, por exemplo, para que quando ocorrer uma busca por um dado deste campo, o resultado seja trazido mais rpido. Se coloque no papel do computador, imagine-se buscando entre inmeras fichas a ficha de nmero 9567, porm, as fichas esto embaralhadas, voc ter que olhar ficha por ficha at encontrar a devida, caso elas estivessem em ordem numrica, a sua busca seria bem mais eficiente. Esse o papel do ndice, tornar os dados organizados no campo, fazendo com que a busca nele seja mais rpida. Todos os campos Chave so indexados, por natureza, mas possvel criar outros ndices, em outros campos, a fim de melhorar a performance numa eventual busca, por exemplo, o sistema faz consultas na tabela clientes atravs do CPF, convm indexar este campo, afim de melhorar a velocidade da busca. Deixando claro, existe apenas um nico campo chave (PK) numa tabela, mas podem existir diversos campos com ndice. Neste ponto voc pode estar se perguntado: Por qu o campo CPF no o campo chave, ao invs de adotar um cdigo interno para cada cliente? - Nem sempre dados prprios podem figurar como PK, o CPF fica dentro da primeira caracterstica, no se repetir em nenhum dos clientes, mas ele falha em outra, nunca poder ficar em branco. Ou seja, caso ficasse institudo o CPF como PK, o sistema s aceitaria, obrigatoriamente, clientes que tivessem o CPF cadastrado. Sabe-se por vivncia, que nem sempre se dispe deste dado. Uma caracterstica dos SGDB o relacionamento entre as tabelas, que do a estes bancos de dados a caracterstica de Banco de Dados Relacional (existem GA que so relacionais, como o caso do .mdb do Access). Neste caso, as informaes gravadas em uma tabela, podem ser relacionados, vinculados. Como no exemplo a seguir:
Tabela Fornecedores
CodFornecedo r 1001 1005 1006 Nome Teste Outro XXXX Fone (45)3277-0707 (45)3277-9090 (45)9999-9999 CodPedid o 15 17 18
Tabela Pedidos
CodFornecedor 1001 1005 1001 Data 31/01/2006 01/05/2006 02/05/2006 Valor 1500.00 2576.00 576.15
Viso: Pedidos/Fornecedores
CodPedido 15 17 18 CodFornecedor 1001 1005 1001 Nome Teste Outro Teste Fone (45)3277-0707 (54)3277-9090 (45)3277-0707 Data 31/01/2006 01/05/2006 02/05/2006 Valor 1500.00 2576.00 576.15
Na viso, os dados dos fornecedores podem ser trazidos atravs do seu cdigo, a viso pronta e completa retornada automaticamente pelo SQL Server, atravs do comando especfico. J em um banco de dados no-relacional, a montagem da viso acima possvel somente atravs da aplicao, carregando o primeiro pedido, posteriormente abrindo a tabela fornecedores, localizando o fornecedor e trazendo os dados, fechando a tabela fornecedores, e chamando o novo pedido, seguindo o mesmo processo diversas vezes, deixando claro a perda brusca de performance. Observao: o campo CodFornecedor da tabela Pedidos pode ter qualquer outro nome, no existe necessidade de que, para haver relacionamente, os campos tenham nomes iguais. Cada campo de uma tabela um tipo de dados, basicamente existem dados gravados em formatos de Texto (String), Numricos (Numeric) e Data (DateTime). Porm, existem diversos tipos de dados para cada formato, que variam o tamanho (comprimento) do valor gravado no campo e a forma como ele gravado. Somente para citar, no SQL Server, por exemplo, existem para gravar texto, entre outros, os tipos char, nvarchar, ntext. Os tipos char e nvarchar permitem que o programador defina quantas letras sero acomodadas no mximo em cada dado gravado no campo, por exemplo, 50 letras, porm, o tipo char, neste caso, sempre armazenaria 50 letras, caso o usurio gravasse um Ol, seriam preenchidos 47 espaos depois da palavra para preencher o campo, no caso do nvarchar, somente a palavra Ol seria gravada, percebe-se a, uma economia grande de espao, ambos
estes campos podem no mximo ser setados em 255 letras, a entra o tipo ntext, que permite texto de at 64.000 letras, porm, no pode ser indexado nem sofrer busca de dados. Uma parte importante do desenvolvimento do banco projetar corretamente o tamanho de cada campo, evitando gasto desnecessrio de espao em disco e trfego desnecessrio de dados (espaos em branco, por exemplo) e tambm fazendo com que o tamanho setado seja suficiente para guardar os dados necessrios ao usurio. Caso tente-se gravar um dado maior que o setado, retornado erros, exemplo String too large to fit Texto muito grande para caber, ento podem ser colocados na aplicao testes para verificar se o usurio no digitou um texto com comprimento maior que o setado no banco de dados. Para informar os tipos de dados no SQL Server, tambm deve-se observar as diferenas quanto ao tipo. No caso dos textos, sempre entre aspas simples, ex: Insidesoft No caso dos nmeros, sem aspas, mas o caractere decimal o ponto, conforme o padro americano, ex: 1450.00 ou 23498.15 Nas datas, usar aspas simples, semelhante aos textos, e sempre colocar a data em padro americano (mm/dd/aaaa), ex: 10/27/2006
Vises: As vises ou consultas (View em ingls) so objetos gravados no banco de dados que quando executados
retornam dados, clculos ou unies de dados gravados nas tabelas. So objetos ento, que no gravam nada, so apenas um comando SQL gravado que busca dados em uma ou mais tabelas, podem executar clculos e filtros, retornando o resultado ao cliente. As consultas num banco podem ser executadas em qualquer tempo sem a necessidade de gravar como esta como uma viso. As consultas gravadas so um artifcio do programador para automatizar melhor um processo ou diminuir a necessidade de cdigo no sistema.
como se tivesse sido dito ao SQL, selecione o CodCliente e o Nome da tabela Clientes. O nome dos campos pode ser substitudo pelo coringa * (todos), ao utilizar o * significa que voc deseja que todos os campos da tabela sejam retornados. muito til, principalmente quando no se lembra o nome dos campos que se deseja visualizar. Exemplo: Select * From Clientes Com o comando acima, todos os campos de todos os registros da tabela clientes sero mostrados. O problema o tempo para retornar os dados, caso voc execute um Select * From NotasFiscaisSada, para descobrir o nome dos campos que compe a tabela de notas fiscais de sada, voc teria que esperar muito tempo, at que o SQL consiga retonar todos os itens, visto o tamanho da tabela. Para isso, um macete a clusula TOP. Caso altere o comando para Select Top 1 * From NotasFiscaisSadas, o retorno imediato, pois apenas a primeira linha encontrada pela SQL vai ser retornada, isso pela insero do Top 1, caso voc quizesse os 10 primeiros bastaria usar Top 10 em vez de Top 1. Desta forma, a fim de descobrir o nome dos campos, conseguimos fazer rapidamente. Para se localizar um dado especfico numa tabela, convm usarmos a clusula Where. Onde, em ingls, ela permite fazer com que os dados que sero exibidos sejam filtrados, ou seja, sejam retornados apenas registros que satisfazem uma condio. Exemplo, por um motivo qualquer preciso listar todos as contas a receber de um determinado cliente, no caso o cliente cdigo 1015. Executando Select Top 1 * From ContasReceber, consigo verificar os campos e descobrir que o campo Cliente guarda o cdigo do cliente para o qual pertence a duplicata. Ento passo o comando: Select * From ContasReceber Where Cliente=1015 Ou seja, aps o Where foi inserido uma expresso que mostra o resultado que desejamento, queramos todas os campos dos registros da tabela ContasReceber Onde o campo Cliente fosse igual a 1015. Na clusula Where, sempre vamos ter testes lgicos, e os dados retornados sempre tero as condies impostas como verdadeiras. Nos testes lgicos, podemos usar os seguintes caracteres: > maior do que < menor do que >= maior ou igual a <= menor ou igual a <> diferente de = igual a Caso eu deseje por exemplo listar todas as contas a receber que no foram quitadas ainda, executa-se o seguinte comando: Select * From ContasReceber Where Saldo>0 Neste caso estou pedindo ao SQL todos os registros onde o saldo a pagar est acima de 0. possvel usar mais de uma condio, bastando usar o conjuntivo And (e em ingls). Exemplo, no comando: Select * From ContasReceber Where Cliente=1015 And Saldo>0 estou pedindo que sejam retornadas todas as duplicatas do cliente cdigo 1015 que tenha saldo maior do que 0, ou seja, ainda no esteja quitada. possvel usar quantos And forem necessrios, ou seja, possvel impor diversas condies. Existe tambm na clusula Where o disjuntivo Or (ou em ingls).
No comando Select * From ContasReceber Where Cliente=1015 Or Cliente=289 dito ao SQL Server que retorne todas as contas a receber do cliente 1015 ou do cliente 289, ou seja, se for um ou outro cliente, os dados sero retornados. Agora citando o seguinte exemplo, tenho 3 empresas (101,102,103) e preciso que sejam retornados todos as contas a receber no quitadas do cliente 1015 das empresas 101 e 102, com excesso da 103. Ento aplicamos: Select * From ContasReceber Where Cliente=1015 And Saldo>0 And Empresa=101 Or Empresa=102 E o comando funciona? Infelizmente no. Foi criado no comando uma contradio, o SQL vai retornar os registros do contasreceber onde o cliente foi o 1015, com saldo maior que 0 e empresa 101 at a legal, mas agora, ou empresa = 102, faz com que todos os ContasReceber da empresa 102 venham junto, e no somente do nosso cliente em questo. O correto desse comando seria: Select * From ContasReceber Where Cliente=1015 And Saldo>0 And (Empresa=101 Or Empresa=102) Os parnteses mudam tudo, por fazem entender que o cliente deve ser o 1015, o saldo maior do que 0 e, a empresa pode ser 101 ou 102. Neste caso, o SQL leva princpios de prioridade matemtica, onde: 2+5*4=22 e (2+5)*4=28. Outro tipo de filtro a clusula Like. Caso voc precise listar todos os clientes com nome inicial de Cezar, e com qualquer final, utilizamos o seguinte comando: Select * From Clientes Where Nome Like Cezar% O operador % representa uma coisa parecida com o * nos campos, mostra ao SQL que qualquer final aps o nome Cezar ser mostrado. Caso um cliente tenha o nome de Julio Cezar, no ser mostrado, pois no inicia com Cezar. Caso queira listar todos os clientes com sobrenome Silva, aplicariamos o seguinte comando: Select * From Clientes Where Nome Like %Silva Caso queira que retorne todos os clientes com a palavra Silva no nome, poderia usar o seguinte comando: Select * From Clientes Nome Like %Silva% A clusula Order By serve para ordenar os registros conforme os campos passados. Exemplo: Select * From Clientes Order By Nome Neste caso os clientes seriam listados por ordem alfabtica do campo Nome, para inverter a ordem, basta usar o item Desc. Select * From Clientes Order By Nome Desc faz com que sejam retornados os clientes ordenados do Z para o A. Pode-se ordenar por mais de um campo, bastando separar por vrgula. Exemplo: Select * From Clientes Where FaturaLote<>0 Order By Empresa, Desc Neste caso foram chamados todos os clientes com faturamento em lote ativado, ordenados pela empresa e a cada empresa, ordenados alfabeticamente por Nome. O select no modifica nem faz qualquer ao com os dados, portanto, pode-se testar sem problema algum os comandos, a qualquer tempo. Update O comando Update serve para alterar dados gravados no banco de dados, muito til para consertar erros de gravao ou alterar dados em massa, facilitando manuteno de dados do sistema. Deve-se tomar cuidado com este comando, pois o mesmo modifica dados, e no existe confirmao do comando. A sintaxe: Update tabela Set campos Where expresso Update o comando. No item tabela informamos o nome da tabela que desejamos alterar os dados. Set uma expresso obrigatriado comando update. No item campos, informamos a atribuio de valores que desejamos fazer, podemos alterar mais de um campo ao mesmo tempo, bastando separar cada um por vrgula. Exemplo prtico: O cliente possuia uma conta no Banco do Brasil, forma de pagamento 26 e abriu uma conta no Sicredi, forma de pagamento 23, agora ele quer que todos os clientes que estavam com forma de pagamento 26 passem para o 23: Update Clientes Set FormaPagamento=23 Where FormaPagamento=26
Neste caso, a clusula Where faz com que somente os clientes com forma de pagamento 26 sejam atingidos, o Update pede que na tabela Clientes, a forma de pagamento seja setado, no caso mudado, para 23. Convm sempre testar com um Select os dados que retornam antes de usar o Update. Exemplo, no caso acima aplicar um Select * From Clientes Where FormaPagamento=26 faz com que possa se verificar se nos resultados da consulta esto realmente os itens que se deseja alterar. Delete O comando Delete responsvel por excluir dados gravados na tabela. Deve-se tomar muito cuidado com o comando, pois no existe nenhum procedimento que possa ser executado, afim de reaver os dados, a no ser a restaurao de um backup. No existe nenhuma confirmao na deleo. Delete From tabela Where expresso Se executar o comando Delete From Clientes, todos os clientes so excludos. No comando Delete, sempre execute um Select antes, para verificar se os dados retornados so realmente os que se deseja excluir. Desde que no se deseja realmente excluir todos os itens de uma tabela, sempre usar a clusula Where. Por exemplo, caso se deseja excluir o cliente cdigo 1015 atravs de comandos, execute: Select * From Clientes Where CodCliente=1015 Caso retorne exatamente o cadastro desejado: Delete From Clientes Where CodCliente=1015 Perceba que o comando praticamente o mesmo, porm, tira-se o coringa *. Insert O Insert um comando que insere dados na tabela, cada Insert pode criar apenas um registro na tabela, o comando se torna extenso textualmente dependendo dos dados a inserir. A sintaxe: Insert Into tabela (campos) Values (valores) Por exemplo, criamos um cliente com um cdigo em especfico: Insert Into Clientes (CodCliente, Nome) Values (1015, Teste) Estamos com este comando criando o cliente cdigo 1015 com o nome Teste. No recomenda-se utilizar o Insert Into, mas sim usar o sistema para gravar novos dados, pois podem haver campos que devem ser preenchidos, que podem ser ignorados no Insert, desta forma, pode gerar-se erros em outros procedimentos.
Cuidado!!!
Onde estes comandos podem ser executados? Atravs do Query Analizer, entrando em Dos, e executando o OSQL, isto se estiver no servidor ou numa mquina com SQL. Em outros casos utilizar o item Comandos do SQL Server nos Utilitrios do menu Suporte. Existem outros comandos SQL, que attacham, desattacham um banco, criam e descompactam backups, mas focamos nesta apostila os comandos bsicos. Atachando um Banco Service: Exec sp_attach_db @dbName=Service, @filename1=C:\Service\Service.mdf O comando Exec executa um procedimento gravado no banco, no caso o procedimento invocado o sp_attach_db que est nativamente gravado no SQL, os parmetros so @dbName, que o nome que o banco vai utilizar, e o @filename1, que mostra onde est o arquivo .mdf do Service. Os parmetros so passados entre aspas por motivo de serem textos (strings).