BANCO DE DADOS Professor Marcos Antonio Atualizada: 27/07/2008 Copyright © Julho-2008 - Marcos Antonio Moreira. As várias Marcas Registradas que aparecem no decorrer desta apostila. Mais do que simplesmente listar esses nomes e informar quem possui seus direitos de exploração, ou ainda imprimir o logotipo das mesmas, o autor declara estar utilizando tais nomes apenas para fins editoriais, em benefício exclusivo do dono da marca registrada, sem intenção de infringir as regras de sua utilização. SUMARIO UM POUCO DE HISTÓRIA ................................................................................................................ 1 VANTAGENS DO SQL......................................................................................................................... 3 VANTAGENS DO BANCO DE DADOS SGBD ................................................................................... 3 SQL – CONJUTO É ALGEBRA RELACIONAL 1 ................................................................................ 5 MODELO ENTIDADE-RELACIONAMENTO – E/R ........................................................................... 6 REPRESENTAÇÃO GRÁFICA ............................................................................................................. 7 CARDINALIDADE DE RELACIONAMENTOS .................................................................................... 8 GRAU DO RELACIONAMENTO ....................................................................................................... 10 DERIVAÇÃO DE TABELAS ............................................................................................................... 12 ATRIBUTO IDENTIFICADOR .......................................................................................................... 13 RELACIONAMENTOS ENTRE ENTIDADES .................................................................................... 15 NORMALIZAÇÃO DE DADOS .......................................................................................................... 15 TERCEIRA FORMA NORMAL (3FN) ............................................................................................... 18 AS PARTES DA LIGUAGEM SQL ..................................................................................................... 20 MODELO RELACIONAL – APRESENTAÇÃO SIMPLIFICADA ....................................................... 21 ESTRUTURA DA INFORMAÇÃO...................................................................................................... 23 VISÕES DO BANCO DE DADOS ..................................................................................................... 23 VANTAGENS DO BANCO DE DADOS EM RELAÇÃO À ARQUITETURA TRADICIONAL ....... 24 SQL COMANDOS .............................................................................................................................. 25 CREATE TABLE ............................................................................................................................. 25 ALTER TABLE ................................................................................................................................ 25 DROP TABLE ................................................................................................................................. 26 TIPOS DE DADOS ............................................................................................................................ 26 SELECT ALL FROM <nome-tabela> [, <nome-tabela>] ...................................................... 28 DEMAIS OPERADORES.................................................................................................................... 33 OPERADORES NEGATIVOS ............................................................................................................ 33 FUNÇÕES DE CARACTERES ........................................................................................................... 35 FUNÇÕES AGREGADAS (OU DE AGRUPAMENTO) ...................................................................... 36 AGRUPAMENTOS ............................................................................................................................. 36 JOIN - (JUNÇÃO POR IGUALDADE) .............................................................................................. 38 INNER JOIN - LEFT JOIN – RIGHT JOIN E FULL OUTER JOIN ................................................ 39 AS SUBCONSULTAS ......................................................................................................................... 41 INSERÇÕES, ALTERAÇÕES E EXCLUSÕES ................................................................................... 42 FERRAMENTA DE GERENCIAMENTO – IBEXPERT...................................................................... 43 EXEMPLO PRÁTICO – CRIAR UM BANCO DE DADOS............................................................. 43 REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................................... 44 1|Página UM POUCO DE HISTÓRIA O termo banco de dados foi criado inicialmente pela comunidade de computação, para indicar coleções organizadas de dados armazenados em computadores digitais, porém o termo é atualmente usado para indicar tanto bancos de dados digitais como bancos de dados disponíveis de outra forma. DBMS (Database Management System), também conhecido como Sistema Gerenciador de Bando de Dados – SGBD e SQL (Structure Query Language) são frutos de todo um processo de desenvolvimento tecnológico na área de armazenamento e processamento da informação. Foram desenvolvidos com base no modelo hierárquico que dispõe as entidades na forma de uma arvore com diferentes níveis hierárquicos. Em 1970, E.F Codd, membro da equipe do laboratório de pesquisa da IBM em São Jose, Califórnia, publicou um trabalho agora clássico, “A Relational Modelo of Data for Large Shared Data Banks” um modelo relacional de dados para grandes bancos de dados compartilhados – (Coomunications of the ACM, Vol. 13, no 6, junho de 1970) em que se estabeleceu um grupo de princípios abstratos sobre gerencia de banco de dados: Assim chamado Modelo Relacional Todo o campo da tecnologia de banco de dados relacional tem suas origens nesse trabalho. As idéias de Codd incentivaram experiências e pesquisas em universidades, laboratórios de pesquisa industrial e estabelecimento semelhante, que resultaram em diversos produtos relacionais agora disponíveis no mercado. O modelo relacional, proposto por E.F Codd no inicio da década de 70, acabou prevalecendo e constitui a base dos modernos SGDB´s atuais. Um aspecto em particular da referida pesquisa era o projeto de implementação de protótipo de uma serie de linguagens relacionais. Uma linguagem relacional é uma linguagem que efetua, em alguma forma sintática ou concreta, alguma ou todas as características do modelo relacional abstrato. Diversas dessas linguagens foram criadas no inicio e no meio doa anos 70. Um dessas linguagens em particular foi a chamada SEQUEL (Structured English Query Language) definida por D.D Chamberlim e outros (1974) no laboratório de pesquisa da IBM em San Jose, Califórnia, e inicialmente implementada em um protótipo da IBM chamado SEQUEL-SRM (1974-1975). Em parte como resultado da experiência com o SEQUEL-XRM foi definida em 19761977 uma versão revisada do SEQUEL, chamada SEQUEL/2 (O nome foi posteriormente alterado para SQL por razões legais). Começou o trabalho em outro protótipo mais ambicioso da IBM, chamado System R. O system R, uma 2|Página implementação de um grande subconjunto da linguagem SQL, tornou-se operacional em 1977. Com o sucesso do System R, tornou-se aparente ao final dos anos 70 que a IBM provavelmente desenvolveria um ou mais produtos baseados na tecnologia System R – especificamente, produtos que implementasse a linguagem SQL. Como resultado, outros vendedores também começaram a construir seus próprios produtos baseados no SQL. De fato, pelo menos um desses produtos, a saber, o ORACLE, da Relational Software Inc. hoje, Oracle Corparation, foi introduzido no mercado antes dos próprios produtos da IBM. Depois 1981, a IBM anunciou outra versão do SQL/DS para ambiente VM/CMS (1982), e outra para MVS chamado DB2. Nos anos seguintes, diversos outros vendedores também anunciaram produtos baseados no SQL. O SQL se tornou o padrão no mundo do banco de dados relaciona. O SQL também se tornou o padrão oficial. Em 1982, o American National Standarts Institute (ANSI) encarregou seu Comitê de Banco de Dados (chamado X3H2) de desenvolver uma proposta para uma linguagem relacional padrão. Alguns bancos de dados implementam comandos que não são compatíveis com padrão ANSI tornando seu uso um pouco diferente dos outros SGBDs. A função da linguagem SQL é dar suporte a definição, manipulação e controle dos dados em um banco de dados relacional. Um banco de dados relacional é simplesmente um banco de dados que é percebido pelo usuário como um grupo de tabelas – onde tabelas é uma coleção de linhas e colunas. A linguagem SQL assume um papel muito importante nos SGBDs, podendo ter muitos enfoques. Linguagem Interativa de Consulta: Através de comandos SQL, os usuários podem montar consultas poderosas sem a necessidade de criação de um programa; podendo utilizar Forms ou ferramentas de montagem de relatórios; Linguagem de Programação para acesso a BDs: Comandos SQL embutidos em programas de aplicação que acessam dados armazenados; Linguagem de Administração de BDs: O responsável pela administração do banco de dados (DBA) pode utilizar comandos SQL para realizar suas tarefas; Linguagem Cliente/Servidor: Os programas (cliente) dos computadores pessoais usam comandos SQL para se comunicarem através de uma rede local, compartilhando os dados armazenados e um único local (servidor). A arquitetura cliente/servidor minimiza o trafego de dados pela rede. Linguagem de Banco de Dados Distribuído: A SQL auxilia na distribuição dos dados através de vários nós conectados ao sistema de computação. 3|Página VANTAGENS DO SQL Independência de fabricante: SQL é oferecida a praticamente em todos SGBDs. Múltiplas Visões de Dados: A SQL permite ao criador do banco de dados, levarem diferentes visões dos dados a diferentes usuários. Consulta Interativa: A SQL provê um acesso rápido aos dados fornecendo respostas aos usuários a questões complexas, em minutos ou segundos. Redução dos Custos com Treinamento: Baseado no item anterior, as aplicações podem se movimentar de um ambiente para outro sem que seja necessária uma reciclagem da equipe de desenvolvimento. Inglês Estruturado de Alto Nível: A SQL é formada por um conjunto bem simples de sentenças em inglês, oferecendo um rápido e fácil entendimento. Portabilidade de Computadores: A SQL pode ser utilizada desde um computador pessoal, passando por uma estação de trabalho até um computador de grande porte. VANTAGENS DO BANCO DE DADOS SGBD 1 - Redução ou Eliminação de Redundâncias – Possibilita a eliminação de dados privativos de cada sistema. Os dados, que eventualmente são comuns a mais de um sistema, são compartilhados por eles, permitindo o acesso a uma única informação sendo consultada por vários sistemas. 2 - Eliminação de Inconsistências – Através do armazenamento da informação em um único local com acesso descentralizado e, sendo compartilhada à vários sistemas, os usuários estarão utilizando uma informação confiável. A inconsistência ocorre quando um mesmo campo tem valores diferentes em sistemas diferentes. Exemplo, o estado civil de uma pessoa é solteiro em um sistema e casado em outro. Isto ocorre porque esta pessoa atualizou o campo em um sistema e não o atualizou em outro. Quando o dado é armazenado em um único local e compartilhado pelos sistemas, este problema não ocorre. 4|Página 3 - Compartilhamento dos Dados – Permite a utilização simultânea e segura de um dado, por mais de uma aplicação ou usuário, independente da operação que esteja sendo realizada. Deve ser observado apenas o processo de atualização concorrente, para não gerar erros de processamento (atualizar simultaneamente o mesmo campo do mesmo registro). Os aplicativos são por natureza multiusuário. 4 - Restrições de Segurança – Define para cada usuário o nível de acesso a ele concedido (leitura, leitura e gravação ou sem acesso) ao arquivo e/ou campo. Este recurso impede que pessoas não autorizadas utilizem ou atualizem um determinado arquivo ou campo. 5 - Padronização dos Dados – Permite que os campos armazenados na base de dados sejam padronizados segundo um determinado formato de armazenamento (padronização de tabela, conteúdo de compôs, etc) e ao nome de variáveis seguindo critérios padrões preestabelecido pela empresa. Ex. Para o campo "Sexo" somente será permitido armazenamento dos conteúdos "M" ou "F". 6 - Independência dos Dados – Representa a forma física de armazenamento dos dados no Banco de Dados e a recuperação das informações pelos programas de aplicação. Esta recuperação deverá ser totalmente independente da maneira com que os dados estão fisicamente armazenados. Quando um programa retira ou inclui dados o SGBD compacta-os para que haja um menor consumo de espaço no disco. Este conhecimento do formato de armazenamento do campo é totalmente transparente para o usuário. A independência dos dados permite os seguintes recursos: a - Os programas de aplicação definem apenas os campos que serão utilizados independente da estrutura interna dos arquivos b - Quando há inclusão de novos campos no arquivo, será feita manutenção apenas nos programas que utilizam esses campos, não sendo necessário mexer nos demais programas. Obs.: Nos sistemas tradicionais este tipo de operação requer a alteração no lay-out de todos os programas do sistema que utilizam o arquivo. 7 - Manutenção da Integridade – Consiste em impedir que um determinado código ou chave em uma tabela não tenha correspondência em outra tabela. 5|Página Ex. Um código de uma determinada disciplina na tabela “Histórico Escolar” sem a sua descrição na tabela “Disciplina”. SQL – CONJUTO É ALGEBRA RELACIONAL 1 Em banco de dados relacionais as informações são guardadas em tabelas. Para recuperar uma informação necessária ao usuário, deve-se buscá-la em várias tabelas diferentes, estabelecendo-se um relacionamento entre elas. Esta é a origem do nome deste paradigma de banco de dados. Tabelas são na verdade conjuntos. Por exemplo, quando em um sistema existe uma tabela de vendas, esta tabela corresponde ao conjunto de todas as vendas realizadas por empresa. A tabela de vendedores corresponde ao conjunto de vendedores que trabalham em uma empresa. Cada linha ou registro da tabela corresponde a um elemento do conjunto. Consultas e alterações na base de dados correspondem a operações realizadas sobre conjuntos. Estas operações são definidas pela álgebra relacional. SQL – CONJUTO É ALGEBRA RELACIONAL 2 Consultas em banco de dados não passam de problemas de álgebra relacional. Assim, como acontecem com a álgebra “tradicional”, os operadores possuem algumas propriedades. Sabemos que 2 x 3 = 3 x 2. Isto significa que, quando precisamos montar uma expressão de álgebra relacional para chegar a um determinado resultado, podemos fazê-lo de mais de uma forma, pois várias expressões levam ao mesmo resultado. Em outras palavras, quando o banco de dados precisa montar uma expressão algébrica para encontrar um resultado, ele deve escolher uma entre várias. Apesar de apresentarem o mesmo resultado, as expressões são diferentes, e a diferença fará com que o banco de dados adote um diferente caminho para resolver cada uma. Escolher o caminho mais curto e uma das grandes atribuições do banco de dados. Esta é a missão do otimizador, um subsistema do banco de dados, responsável por determinar o plano de execução para uma consulta. 6|Página MODELO ENTIDADE-RELACIONAMENTO – E/R Definição Consiste em mapear o mundo real do sistema em um modelo gráfico que irá representar o modelo e o relacionamento existente entre os dados. Entidade - Identifica o objeto de interesse do sistema e tem "vida" própria, ou seja, a representação abstrata de um objeto do mundo real sobre o qual desejamos guardar informações. Exemplo: Clientes, Fornecedores, Alunos, Funcionários, Departamentos, etc. Não são entidades: Entidade com apenas um elemento; Operações do sistema; Saídas do sistema; Pessoas que realizam trabalhos (usuários do sistema); Cargos de direção Instância de Entidade - São os elementos da entidade. Exemplo: Cliente 10, Funcionário João, Aluno Pedro, etc. Atributo - Informações que desejamos guardar sobre a instância de entidade. Exemplo: Nome do aluno, Número da turma, Endereço do fornecedor, Sexo do funcionário, etc. Domínio do Atributo - Universo de valores que um atributo pode armazenar. Exemplo: Conjunto de valores do atributo Sexo do funcionário: M ou F; Conjunto de valores do atributo Nome do aluno: 40 caracteres alfanuméricos. Conjunto de valores do atributo salário: inteiro maior que 5000 Relacionamentos Após a identificação das entidades a incluir no esquema da BD, e dos atributos que as definem, é necessário perceber o modo como estas entidades se relacionam entre si. Assim, um relacionamento é uma associação existente entre entidades. Uma entidade é definida por um conjunto de dados que de alguma forma se encontram relacionados. Os dados numa entidade encontram-se divididos em 7|Página campos ou atributos que são os elementos que a caracterizam. A cada ocorrência relativa a uma entidade dá-se o nome de registro. REPRESENTAÇÃO GRÁFICA - Entidade - Relacionamento Relacionamento Representa a associação entre os elementos do conjunto de uma entidade com outra entidade. Exemplo: O João está matriculado na disciplina de Banco de Dados 8|Página Onde: - João - Elemento do conjunto de valores do atributo Nome do aluno da entidade Aluno; - Banco de Dados - Elemento do conjunto de valores do atributo Nome da disciplina da entidade Disciplina; - Matriculado - Ligação existente entre um aluno e uma disciplina. ALUNO MATRICULADO DISCIPLINA CARDINALIDADE DE RELACIONAMENTOS Representa a freqüência com que existe o relacionamento. Exemplo: Relacionamento 1:1 - O João é casado com a Maria. 9|Página Onde: - João - Elemento do conjunto de valores do atributo Nome da entidade Homem. - Maria - Elemento do conjunto de valores do atributo Nome da entidade Mulher. - casado - Ligação entre um homem e uma mulher, sendo que um homem pode ser casado com uma e apenas uma mulher, assim como uma mulher pode ser casada com um e apenas um homem. 1 HOMEM 1 CASADO MULHER Relacionamento 1:N ou N:1 - O Pedro trabalha no Departamento Pessoal. Onde: - Pedro - Elemento do conjunto de valores do atributo Nome da entidade Funcionário. - Depart. Pessoal - Elemento do conjunto de valores do atributo Nome do departamento da entidade Departamento. - trabalha - Ligação entre um Funcionário e um Departamento, onde um funcionário pode trabalhar em um e somente um departamento e um departamento pode ter vários funcionários. 10 | P á g i n a N 1 LOTAÇÃO EMPREGADO DEPARTAMENTO Relacionamento N : M - O Antônio está matriculado na disciplina Banco de Dados. Onde: - Antônio - Elemento do conjunto de valores do atributo Nome da entidade Aluno. - Banco de Dados - Elemento do conjunto de valores do atributo Nome da Disciplina da entidade Disciplina. - matriculado - Ligação existente entre um aluno e uma disciplina, onde um aluno pode estar matriculado em várias disciplinas e cada disciplina pode ter vários alunos matriculados. N ALUNOS M MATRICULADO DISCIPLINA GRAU DO RELACIONAMENTO Indica o número de entidade que se relacionam. Relacionamento Binário Quando existe o relacionamento entre apenas duas entidades. Ex. Um fornecedor comercializa materiais que são utilizados em diversos projetos. 11 | P á g i n a N M COMERCIALIZA FORNECEDOR MATERIAIS M N UTILIZADOS PROJETOS Relacionamento Ternário Quando existe o relacionamento entre três entidades. Ex. Um fornecedor comercializa materiais que são utilizados em projetos específicos. 1 N UTILIZADO FORNECEDOR MATERIAIS N PROJETOS Exemplos de Relacionamento: - O Professor Alberto leciona Estrutura de Dados e o aluno Pedro cursa Linguagem de Programação 12 | P á g i n a N PROFESSOR M LECIONA DISCIPLINA N M ALUNOS CURSA DERIVAÇÃO DE TABELAS Analisando o grau de relacionamento e a qualidade de participação é possível identificar o número de tabelas necessárias para cada relacionamento. UMA TABELA Relacionamentos de 1:1 com participação obrigatória de ambas as entidades. DUAS TABELAS Relacionamento de 1:1 com participação obrigatória de uma das entidades, em que nesta é adicionada uma chave externa; Relacionamentos de 1:N ou N:1 com participação obrigatória do lado N, em que nesta é adicionada uma chave externa. TRÊS TABELAS A terceira tabela é responsável pelo relacionamento entre as outras duas e nela serão incluído como chaves externas as chaves primárias das outras duas. A esta tabela dá-se o nome de Entidade Associativa. 13 | P á g i n a ATRIBUTO IDENTIFICADOR Entre os diversos atributos que definem uma entidade deve existir um ou mais campos que identifiquem inequivocamente cada registro. A este(s) atributo(s) dáse o nome de Atributo Identificador. ATRIBUTO IDENTIFICADOR – É o atributo que deve identificar sem ambigüidades cada entidade concreta. Para cada entidade deve existir sempre um atributo deste tipo. Geralmente, este atributo desempenha o papel de CHAVE numa entidade ou tabela. Exemplo: Consideremos a entidade Filmes e os seus atributos: FILMES (N_Filme, Título, Ator, Realizador, Duração, Classificação) O campo N_Filme é um atributo identificador inequivocamente cada ocorrência (filme) da entidade. pelo fato de identificar CHAVE PRIMÁRIA CHAVE PRIMÁRIA – É um atributo identificador que representa univocamente cada ocorrência ou registro de uma tabela. Existem dois tipos de chave primária: Simples - constituída apenas por um atributo; Composta - constituída por dois ou mais atributos. Uma chave primária deve ser: Unívoca – O valor da chave primária deve ser único para todos os registros. Não Redundante – No caso de uma chave composta não devem ser incluídos mais campos do que os necessários. Não Nula – Nenhum dos valores que compõem a chave primária pode conter valores nulos. 14 | P á g i n a Exemplos Consideremos a entidade DVD que é caracterizada pelos seguintes atributos: ( N_DVD, Título, Intérprete, Editora) O atributo que a identifica univocamente é Nº de DVD visto ser o único cujos valores nunca se irão repetir. Deste modo, conclui-se que a chave primária da entidade DVD é simples. Consideremos a entidade FAIXA de um DVD que é caracterizada pelos seguintes atributos: Faixas ( N_DVD, N_FAIXA, Título, Duração, Gênero) Neste caso, os atributos que a identificam univocamente são N_DVD e N_FAIXA, visto serem os únicos cujos valores nunca se irão repetir. Deste modo, conclui-se que a chave primária da entidade Faixas é composta. CHAVE ESTRANGEIRA OU EXTERNA – É um atributo que definido como chave primária de uma tabela é incluído na estrutura de outra tabela. Exemplo: Consideremos as entidades DVD e FAIXA, que identificam um DVD e as suas respectivas Faixas. DVD ( N_DVD, Título, Intérprete, Editora) FAIXA ( N_DVD, N_FAIXA, Título, Duração, Gênero) O atributo N_DVD da entidade FAIXA faz parte da sua chave primária, no entanto como é chave primária da entidade DVD é considerado uma chave estrangeira na entidade FAIXA. 15 | P á g i n a RELACIONAMENTOS ENTRE ENTIDADES O relacionamento entre entidades é um dos propósitos das bases de dados relacionais, daí a importância dada à seleção da chave primária, pois é através destas que são estabelecidas as associações entre as diferentes entidades. Os símbolos convencionados para se representar estes relacionamentos são em número reduzido, com significados específicos e fáceis de distinguir: NORMALIZAÇÃO DE DADOS A normalização é um processo que consiste em estruturar as tabelas e atributos de forma a eliminar redundâncias e evitar problemas com a inserção, eliminação e atualização dos dados. Este processo é composto pelas chamadas formas normais: - 1ª Forma Normal (1ª FN); - 2ª Forma Normal (2ª FN); - 3ª Forma Normal (3ª FN); Um modelo de base de dados que respeite os princípios estipulados até a 3ª FN é considerado adequadamente elaborado para funcionar num SGBD relacional. A normalização é feita, através da análise dos dados que compõem as estruturas utilizando o conceito chamado "Formas Normais (FN)". As FN são conjuntos de restrições nos quais os dados devem satisfazê-las. Exemplo pode-se dizer que a estrutura está na primeira forma normal (1FN), se os dados que a compõem satisfizerem as restrições definidas para esta etapa. 16 | P á g i n a A normalização completa dos dados é feita, seguindo as restrições das quatro formas normais existentes, sendo que a passagem de uma FN para outra é feita tendo como base o resultado obtido na etapa anterior, ou seja, na FN anterior. Para realizar a normalização dos dados, é primordial que seja definido um campo chave para a estrutura, campo este que permite identificar os demais campos da estrutura. Formas Normais existentes: PRIMEIRA FORMA NORMAL (1FN) Consistem em retirar da estrutura os elementos repetitivos, ou seja, aqueles dados que podem compor uma estrutura de vetor. Podemos afirma que uma estrutura está normalizada na 1FN, se não possuir elementos repetitivos. Exemplo: Estrutura original: Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Cod. do Cliente, Nome do cliente, Endereço do cliente, CGC do cliente, Relação das mercadorias vendidas (onde para cada mercadoria temos: Código da Mercadoria, Descrição da Mercadoria, Quantidade vendida, Preço de venda e Total da venda desta mercadoria) e Total Geral da Nota) Analisando a estrutura acima, observamos que existem várias mercadorias em uma única Nota Fiscal, sendo, portanto elementos repetitivos que deverão ser retirados. Estrutura na primeira forma normal (1FN): Entidade de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome Cliente, Endereço do cliente, CGC do cliente e Total Geral da Nota) Entidade de Vendas (Num. NF, Código da Mercadoria, Descrição da Mercadoria, Quantidade vendida, Preço de venda e Total da venda desta mercadoria) Obs. Os campos sublinhados identificam as chaves das estruturas. Como resultado desta etapa ocorre um desdobramento dos dados em duas estruturas, a saber: 17 | P á g i n a - Primeira estrutura (Entidade de Notas Fiscais): Dados que compõem a estrutura original, excluindo os elementos repetitivos. - Segundo estrutura (Entidade de Vendas): Dados que compõem os elementos repetitivos da estrutura original, tendo como chave o campo chave da estrutura original (Num. NF) e o campo chave da estrutura de repetição (Código da Mercadoria). SEGUNDA FORMA NORMAL (2FN) Consistem em retirar das estruturas que possuem chaves compostas (campo chave sendo formado por mais de um campo), os elementos que são funcionalmente dependentes de parte da chave. Podemos afirmar que uma estrutura está na 2FN, se ela estiver na 1FN e não possuir campos que são funcionalmente dependentes de parte da chave. Exemplo: Estrutura na primeira forma normal (1FN): Entidade de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome do cliente, Endereço do cliente, CGC do cliente e Total Geral da Nota) Entidade de Vendas (Num. NF, Código da Mercadoria, Descrição da Mercadoria, Quantidade vendida, Preço de venda e Total da venda desta mercadoria) Estrutura na segunda forma normal (2FN): Entidade de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome do cliente, Endereço do cliente, CGC do cliente e Total Geral da Nota) Entidade de Vendas (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria) 18 | P á g i n a Entidade de Mercadorias (Código da Mercadoria, Descrição da Mercadoria, Preço de venda) Como resultado desta etapa, houve um desdobramento da Entidade de Vendas (a entidade Notas Fiscais, não foi alterado, por não possuir chave composta) em duas estruturas a saber: - Primeira estrutura (Entidade de Vendas): Contém os elementos originais, sendo excluídos os dados que são dependentes apenas do campo Código da Mercadoria. - Segundo estrutura (Entidade de Mercadorias): Contém os elementos que são identificados apenas pelo Código da Mercadoria, ou seja, independentemente da Nota Fiscal, a descrição e o preço de venda serão constantes. TERCEIRA FORMA NORMAL (3FN) Consistem em retirar das estruturas os campos que são funcionalmente dependentes de outros campos que não são chaves. Podemos afirmar que uma estrutura está na 3FN, se ela estiver na 2FN e não possuir campos dependentes de outros campos não chaves. Exemplo: Estrutura na segunda forma normal (2FN): Entidade de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome do cliente, Endereço do cliente, CGC do cliente e Total Geral da Nota) Entidade de Vendas (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria) Entidade de Mercadorias (Código da Mercadoria, Descrição da Mercadoria, Preço de venda) 19 | P á g i n a Estrutura na terceira forma normal (3FN): Entidade de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente e Total Geral da Nota) Entidade de Vendas (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria) Entidade de Mercadorias (Código da Mercadoria, Descrição da Mercadoria, Preço de venda) Entidade de Clientes (Código do Cliente, Nome do cliente, Endereço do cliente e CGC do cliente) Como resultado desta etapa, houve um desdobramento da entidade Notas Fiscais, por ser o único que possuía campos que não eram dependentes da chave principal (Num. NF), uma vez que independente da Nota Fiscal, o Nome, Endereço e CGC do cliente são inalterados. Este procedimento permite evitar inconsistência nos dados dos arquivos e economizar espaço por eliminar o armazenamento freqüente e repetidas vezes destes dados. A cada nota fiscal comprada pelo cliente, haverá o armazenamento destes dados e poderá ocorrer divergência entre eles. As estruturas alteradas foram pelos motivos, a saber: - Primeira estrutura (Entidade de Notas Fiscais): Contém os elementos originais, sendo excluídos os dados que são dependentes apenas do campo Código do Cliente (informações referentes ao cliente). - Segundo estrutura (Entidade de Clientes): Contém os elementos que são identificados apenas pelo Código do Cliente, ou seja, independente da Nota Fiscal, o Nome, Endereço e CGC dos clientes serão constantes. Após a normalização, as estruturas dos dados estão projetadas para eliminar as inconsistências e redundâncias dos dados, eliminando desta forma qualquer problema de atualização e operacionalização do sistema. A versão final dos dados poderá sofrer alguma alteração, para atender as necessidades específicas do 20 | P á g i n a sistema, a critério do analista de desenvolvimento durante o projeto físico do sistema. Chave Primária – Seu conceito está associado ao campo ou conjunto de campos de uma tabela que possuirá um único valor, que não será repetido para nenhum outro registro. Como exemplo desta situação podem-se considerar os números de CPF, CNPJ, RG ou qualquer código de controle utilizado. Chave Estrangeira – Caracteriza-se por ser uma chave de uma tabela que possui associação com a chave primária de outra tabela. Assim sendo, podem ocorrer três situações de utilização de chave estrangeira: Relacionamento Um para Um – A chave estrangeira pode ser criada em qualquer uma das tabelas; Relacionamento Um para Muitos – A chave estrangeira pode ser criada apenas na tabela do lado “muita”; Relacionamento Muitos para Muitos - A chave estrangeira deve ser criada numa terceira tabela que faça o relacionamento entre as outras duas tabelas. Integridade Referencial - é um mecanismo utilizado que evita a quebra de ligação entre os relacionamentos estabelecidos entre tabelas. AS PARTES DA LIGUAGEM SQL A linguagem SQL pode ser dividida nas seguintes partes: Data Definition Language – DDL (Linguagem Definição de Dados) A SQL DDL fornece comandos para definição e modificação de esquemas de relação, remoção de relações e criação de índices. Os principais comandos que fazem parte da DDL são: CREATE, ALTER, DROP ..... 21 | P á g i n a Data Manipulation Language – DML (Linguagem de manipulação de Dados) A SQL DML inclui uma linguagem de consulta baseada na álgebra relacional e no calculo relacional. Compreende também comandos para inserir, remover e modificar informações em um banco de dados. Os comandos básicos da DML são: SELECT, INSERT, UPDATE, DELETE .... Data Control Language – DCL (Linguagem de Controle de Dados) Comando que fazem o cadastramento de usuários e determina seu nível de privilegio para os objetos do banco de dados. Os principais comandos são: GRANT, REVOKE. Transaction Control – (Controle de Transação ) A SQL inclui comandos para especificação do inicio e fim das transações. Diversar implementações permitem o trancamento explicito de dados para o controle de concorrência. (COMMIT, ROLLBACK E SAVEPOINT) MODELO RELACIONAL – APRESENTAÇÃO SIMPLIFICADA Todos SGBD’s atuais, são baseados no modelo de dados relacional (também conhecido como modelo entidade e relacionamento E/R). Assim sendo, temos que os dados contidos nos modernos SGBD´s, não importa o produto/fabricante (Oracle, Sybase, Informix, Interbase, Firebird, MySQL, SQl Server, etc..), são passiveis de ser acessados por programas escritos em varias linguagens de programação, por intermédio de instruções padrão de SQL. 22 | P á g i n a Aplicação Escrita em CodeGear Delphi SGBD Aplicação Escrita em .Net SQL Aplicação Escrita em Visual Studio Como sempre acontecem, os diversos fabricantes de SGBD´s acabam implantando algumas extensões de funções exclusivas em seus SGBD em particular (sempre com o objetivo de tornar seu produto melhor que o SGBD do concorrente.) Essas extensões se forem usadas pelos programas que acessam um determinado SGBD, acabam “quebrando” a portabilidade desses mesmos programas para SGBD de outros fabricantes. Com SQL, é possível também efetuar diretamente consultas e manutenções às bases de dados sem uso de nenhuma linguagem de programação em particular, apenas submetendo as instruções SQL a um SGBD. Dominar a linguagem SQL é o primeiro passo para dominar qualquer SGBD. SQL – onde a pronúncia é “ess-kiú-éll” ou “sequel “ que é como a maioria das pessoas pronunciam. É composta por um grupo de facilitadores para definição, manipulação e controle de dados em um banco de dados relacional. 23 | P á g i n a ESTRUTURA DA INFORMAÇÃO Banco de Dados - Representa o arquivo físico de dados, armazenado em dispositivos periféricos, onde estão armazenados os dados de diversos sistemas, para consulta e atualização pelo usuário. Tabelas Lógicas - Representam as estruturas de armazenamento de dados (arquivos) dos sistemas. S.G.D.B. (Sistema Gerenciador de Banco de Dados) - É o software responsável pelo gerenciamento (armazenamento e recuperação) dos dados no Banco de Dados. Ex. Interbase, Firebird, SQL Server, Oracle, Informix, DB2 Dado - É o valor do campo quando é armazenado no Banco de Dados. Ex. O valor do campo "nome do cliente" para quem está fazendo a entrada de dados. Conteúdo do campo - É o valor do campo armazenado no Banco de Dados. Ex. O valor do campo "nome do cliente" sem estar, momentaneamente, sendo utilizado. Informação - É o valor que este campo representa para as atividades da empresa. Ex. Resposta a uma consulta. Quais os nomes dos clientes localizados no Rio de Janeiro? VISÕES DO BANCO DE DADOS Visão Interna - É aquela vista pelo responsável pela manutenção e desenvolvimento do SGBD. Existe a preocupação com a forma de recuperação e manipulação dos dados dentro do Banco de Dados. Visão Conceitual - É aquela vista pelo analista de desenvolvimento e pelo administrador das bases de dados. Existe a preocupação na definição de normas e procedimentos para manipulação dos dados, para garantir a sua segurança e confiabilidade, o desenvolvimento de sistemas e programas aplicativos e a definição no banco de dados de novos arquivos e campos. 24 | P á g i n a Na visão conceitual, existem 2 (duas) linguagens de operação que são: a) Linguagem de definição dos dados (DDL) - Linguagem que define as aplicações, arquivos e campos que irão compor o banco de dados (comandos de criação e atualização da estrutura dos campos dos arquivos). b) Linguagem de manipulação dos dados (DML) - Linguagem que define os comandos de manipulação e operação dos dados (comandos de consulta e atualização dos dados dos arquivos). Visão Externa - É aquela vista pelo usuário que opera os sistemas aplicativos, através de interfaces desenvolvidas pelo analista (programas), buscando o atendimento de suas necessidades. VANTAGENS DO BANCO DE DADOS EM RELAÇÃO À ARQUITETURA TRADICIONAL Sistema Tradicional São aqueles em que os dados do sistema estão armazenados fisicamente separados um do outro. O acesso é feito pelos programas de aplicação, associando o nome externo dos arquivos e definindo todo o registro independente da utilização dos campos. Ex.: Paradox, Dataflex, Clipper Sistema de Banco de Dados É aquele em que os dados são definidos para o S.G.B.D., através da DDL (linguagem de definição de dados). Fisicamente estão armazenados em um único local, sendo o acesso realizado apenas através do S.G.B.D. Nos programas de aplicação, é necessário apenas definir os campos que serão utilizados pelo programa. Ex.: Interbase, Firebird, Oracle, DB2, SQL Server, Informix 25 | P á g i n a SQL COMANDOS A linguagem SQL possui uma série de comandos para manipulação do banco de Dados. Desde comandos simples até os mais complexos. Um detalhe importante é que a linguagem SQL é declarativa. Isto que dizer que nós quase que perguntamos ao banco de dados para que ele nos “responda” através de compos formando registros. Esse detalhe torna o aprendizado da SQL muito fácil para quem esta iniciando na linguagem. Vamos começar a analisar os Comandos Básicos da Linguagem SQL e fazer uma série de exemplos. COMANDOS DDL CREATE TABLE Criar à estrutura de uma tabela (entidade) definida as colunas (campos) e as chaves primárias e estrangeiras existentes. CREATE TABLE < nome_tabela > ( nome_atributo1 < tipo > [ NOT NULL ], nome_atributo2 < tipo > [ NOT NULL ], Onde: Nome_Table Nome_atributo Tipo - indica o nome da tabela a ser criada. indica o nome do campo a ser criado na tabela. indica a definição do tipo de atributo ( integer(n), char(n), real(n,m), date... ). Exemplo: CREATE TABLE DEPT (DepNume integer(4) not null, DepNome char(20) not null, DepLoca char(20) not null, DepOrca integer(12,2), primary key (DepNume) ); ALTER TABLE Alterar a estrutura de uma tabela (entidade) acrescentando, alterando, retirando e alterando nomes, formatos das colunas e a integridade referencial definidas em uma determinada tabela. 26 | P á g i n a ALTER TABLE < nome_tabela > ADD / DROP ( nome_atributo1 < tipo > [ NOT NULL ], nome_atributoN < tipo > [ NOT NULL ] ); Exemplo: ALTER TABLE DEPT ( ADD DEPSALA DECIMAL (10,2) ); DROP TABLE Objetivo Deletar a estrutura e os dados existentes em uma tabela. Após a execução deste comando estarão deletados todos dados, estrutura e índices de acessos que estejam a ela associados. Sintaxe: DROP TABLE <nome-tabela> Onde: Nome-tabela - Representa o nome da tabela que será deletada. TIPOS DE DADOS OS TIPOS NUMÉRICOS Pode ser utilizado no tratamento de valores numéricos inteiros ou reais. Estão disponíveis os seguintes tipos: Nota: O parâmetro tamanho é opcional e permite estabelecer o tamanho máximo do valor a ser exibido, podendo ser um valor máximo 255; 27 | P á g i n a SMALLINT – [(tamanho)] – Utiliza-se este tipo de dado quando houver a necessidade de fazer uso de valores inteiros curtos entre a faixa de valores de – 32.768 até 32.767. INTEGER [(tamanho)] – Utiliza-se este tipo de dado quando houver a necessidade de fazer uso de valores inteiros longos entre a faixa de valores de – 2.147.483.648 até 2.147.483.647. FLOAT – Utiliza-se este tipo de dado quando houver a necessidade de fazer uso de valores com ponto flutuante com sete dígitos de precisão decimais. Este tipo permite trabalhar com valores na faixa de 3,4 * 10-38 até 3,4 * 1038 ; NUMERIC /DECIMAL [(tamanho[,decimal])] – Visa armazenar números, cuja precisão vai de 1 a 18 dígitos a armazenar. A escala vai de 1 a 18 números de casas decimais para armazenamento. DOUBLE PRECISION [(tamanho.decimal)] – Utiliza-se este tipo de dado quando houver a necessidade de fazer uso de valores flutuantes com precisão de 15 dígitos O TIPO TEMPORAL Pode ser utilizado no tratamento de valores relacionados à data e horário. Estão disponíveis os seguintes tipos: DATE – Utiliza-se este tipo de dado quando houver a necessidade de fazer uso de uma data TIME – Utiliza-se este tipo de dado quando houver a necessidade de fazer uso de uma informação relacionada a um determinado horário. O TIPO LITERAL O Tipo Literal pode ser para a recepção de valores baseados em cadeias de caracteres (strings – dados alfanuméricos delimitados por aspas ou apóstrofos). Estão disponíveis os seguintes tipos: CHAR (tamanho) – Utiliza-se este tipo de dado quando houver a necessidade de fazer uso de seqüências de caracteres de tamanho fixo que estejam limitadas até 255 caracteres de comprimento. O parâmetro tamanho determina o valor máximo em caracteres que pode conter a seqüência; 28 | P á g i n a VARCHAR(tamanho) – Utiliza-se este tipo de dado quando houver a necessidade de fazer uso de seqüências de caracteres de tamanho variável que estejam limitadas até 255 caracteres de comprimento. A diferença entre este tipo e o CHAR é que neste caso, os espaços em branco excedentes do lado direito da seqüência de caracteres não utilizados são automaticamente desprezados. O parâmetro tamanho determina o valor máximo em caracteres que pode conter a seqüência . BINARY LARGE OBJECTS (BLOBS) Tem por objetivo armazenar dados binários, como gráficos, sons digitalizados, texto. Subtipo 0 - utilizado para acomodar dados binários ou dados de tipo indeterminado Subtipo 1 - Utilizado para acomodar texto. COMANDOS DML Objetivo Selecionar um conjunto de registros em uma ou mais tabelas que atenda a uma determinada condição definida pelo comando. Sintaxe: SELECT ALL FROM <nome-tabela> [, <nome-tabela>] DISTINCT WHERE <condição> GROUP BY <nome-coluna> HAVING <condição> ORDER BY <nome-campo> ASC DESC Onde: a) nome-tabela - Representa o nome da (s) tabela (s) que contem as colunas que serão selecionadas ou que serão utilizadas para a execução da consulta. b) condição - Representa a condição para a seleção dos registros. Este seleção poderá resultar em um ou vários registros. c) nome-coluna - Representa a (s) coluna (s) cujos resultados são grupados para atender à consulta. 29 | P á g i n a d) ALL - Opção default. Mostra todos os valores obtidos na seleção. e) DISTINCT - Opção que mostra os valores obtidos na seleção eliminando as duplicidades. f) WHERE - Especifica o critério de seleção dos registros nas tabelas especificadas. Exemplo: SELECT EMPNOME, EMPSERV FROM EMP WHERE DEPNUME > 10; g) GROUP BY - Especifica o (s) campo (s) que serão grupados para atender a consulta. Exemplo: SELECT DUPNUME, AVG(EMPSALA) FROM EMP GROUP BY DEPNUME; h) HAVING - Especifica uma condição para seleção de um grupo de dados. Esta opção só é utilizada combinada com a opção GROUP BY. i) ORDER BY - Esta opção quando utilizada apresenta o resultado da consulta ordenado de forma ii) Crescente ou decrescente pelos campos definidos. Exemplo: SELECT DEPNUME, AVG (EMPSALA) FROM EMP GROUP BY DEPNUME HAVING COUNT (*) > 3; ALGUMAS FUNÇÕES UTILIZADAS NO COMANDO SELECT. a) COUNT(*) (DISTINCT <nome-campo>) 30 | P á g i n a Objetivo Retorna a quantidade de registros existentes no campo especificado. Quando a opção * é utilizada o resultado é a quantidade de registros existentes. Quando é referenciado o nome de um campo retorna a quantidade de valores existentes na coluna. b) SUM (ALL <nome-campo>) DISTINCT Objetivo Retorna a soma dos valores existentes no campo especificado. Quando a opção DISTINCT é utilizada são considerados apenas os diferentes valores existentes no campo. Exemplo: SELECT SUM(EMPSALA) FROM EMP; c) AVG (ALL <nome-campo>) DISTINCT Objetivo Retorna a média dos valores existentes no campo especificado. Quando a opção DISTINCT é utilizada são considerados apenas os diferentes valores existentes no campo. Exemplo: SELECT AVG(EMPSALA) FROM EMP; d) MAX (ALL <nome-campo>) DISTINCT Objetivo Retorna o maior valor existente no campo especificado. Quando a opção DISTINCT é utilizada são considerados apenas os diferentes valores existentes no campo. Exemplo: SELECT MAX(EMPSALA) FROM EMP; e) MIN (ALL <nome-campo>) DISTINCT Objetivo Retorna o menor valor existente no campo especificado. Quando a opção DISTINCT é utilizada são considerados apenas os diferentes valores existentes no campo. 31 | P á g i n a Exemplo: SELECT MIN(EMPSALA) FROM EMP; WHERE COMO BASE DAS RESTRIÇÕES. A cláusula "where" corresponde ao operador de restrição da álgebra relacional. Contém a condição que as tabelas devem obedecer a fim de serem listadas. Ela pode comparar valores em colunas, literais, expressões aritmética ou funções. A seguir apresentamos operadores lógicos e complementares a serem utilizados nas expressões apresentadas em WHERE. Operadores lógicos Operador = > >= < <= Significado igual a maior que maior que ou igual a menor que menor que ou igual a ALGUNS EXEMPLOS: SELECT EMPNOME, EMPSERV FROM EMP WHERE DEPNUME > 10; SELECT EMPNOME, EMPSERV FROM EMP WHERE EMPSERV = 'GERENTE'; Nota: O conjunto de caracteres ou datas devem estar entre apóstrofes („) na cláusula "where". Apresente todos os salários existentes na empresa, porém omita eventuais duplicidades. A cláusula Distinct elimina duplicidades, significando que somente relações distintas serão apresentadas como resultado de uma pesquisa. SELECT DISTINCT EMPSERV FROM EMP; 32 | P á g i n a Selecione todos os departamentos cujo orçamento mensal seja maior que 100000. Apresente o Nome de tal departamento e seu orçamento anual, que será obtido multiplicando-se o orçamento mensal por 12 SELECT DEPNOME, DEPORCA * 12 FROM DEPT WHERE DEPORCA > 100000; Apresente a instrução anterior, porém ao invés dos "feios" DepNome e DepOrca, os Títulos Departamento e Orçamento. SELECT DEPNOME "DEPARTAMENTO", DEPORCA * 12 "ORCAMENTO ANUAL" FROM DEPT WHERE DEPORCA > 100000; Apresente os nomes e funções da cada funcionário contidas na tabela empresa, porém classificados alfabeticamente (A..Z) e depois alfabeticamente invertido (Z..A). Nota: A cláusula Order By modificará a ordem de apresentação do resultado da pesquisa (ascendente ou descendente). SELECT EMPNOME, EMPSERV FROM EMP ORDER BY EMPNOME; SELECT EMPNOME, EMPSERV FROM EMP ORDER BY EMPPNOME DESC; Selecione os Nomes dos Departamentos que estejam na fábrica. SELECT DEPNOME FROM DEPT WHERE DEPLOCA = "SAO PAULO"; 33 | P á g i n a DEMAIS OPERADORES OPERADOR SIGNIFICADO Entre dois valores (inclusive) Lista de valores Com um padrão de caracteres É um valor nulo between ... and .. in ( .... ) like is null EXEMPLOS SELECT EMPNOME, EMPSALA FROM EMP WHERE EMPSALA BETWEEN 500 AND 1000; SELECT EMPNOME, DEPNUME FROM EMP WHERE DEPNUME IN (10,30); OPERADORES NEGATIVOS OPERADOR <> not Nome_oluna not nome_coluna not between not in not like is not null DESCRIÇÃO Diferente Diferente da coluna Não maior que Não entre dois valores informados não existente numa dada lista de valores diferente do padrao de caracteres informado não é um valor nulo Selecione os Empregados cujos salários sejam menores que 1000 ou maiores que 3500. Necessitaremos aqui a utilização de expressão negativa. A seguir apresentamos operadores negativos. SELECT EMPNOME, EMPSALA FROM EMP WHERE EMPSALA NOT BETWEEN 1000 AND 3500; 34 | P á g i n a Apresente todos os funcionários com salários entre 200 e 700 e que sejam Vendedores. Necessitaremos de consultas com condições múltiplas. Operadores "AND" (E) e "OR" (OU). SELECT EMPNOME, EMPSALA, EMPSERV FROM EMP WHERE EMPSALA BETWEEN 700 AND 2000 AND EMPSERV = 'VENDEDOR'; SELECT EMPNOME, EMPSERV FROM EMP WHERE EMPNOME LIKE 'F%'; SELECT EMPNOME, EMPSERV FROM EMP WHERE EMPCOMI IS NULL; O símbolo "%" pode ser usado para construir a pesquisa ("%" = qualquer seqüência de nenhum até vários caracteres). Apresente todos os funcionários com salários entre 200 e 700 ou que sejam Vendedores. SELECT EMPNOME, EMPSALA, EMPSERV FROM EMP WHERE EMPSALA BETWEEN 700 AND 2000 OR EMPSERV = 'VENDEDOR'; Apresente todos os funcionários com salários entre 200 e 700 e que sejam Vendedores ou Balconistas. SELECT EMPNOME, EMPSALA, EMPSERV FROM EMP WHERE EMPSALA BETWEEN 700 AND 2000 AND ( EMPSERV = 'BALCONISTA' OR EMPSERV = 'VENDEDOR' ); 35 | P á g i n a FUNÇÕES DE CARACTERES Lower Upper Concat(x,y)Substring(x,y,str)termina em "y". força caracteres maiúsculos aparecerem em minúsculos. força caracteres minúsculos aparecerem em maiúsculos. concatena a string "x" com a string "y". extrai um substring da string "str", começando em "x", e To_Char(num)^Q - converte um valor numérico para uma string de caracteres. converte data para o formato apresentado. Apresente o nome de todos os empregados em letras minúsculas. SELECT LOWER( EMPNOME ) FROM EMP; Apresente o nome de todos os empregados (somente as 10 primeiras letras). SELECT SUBSTRING (1,10,EMPNOME) FROM EMP; Apresente o nome de todos os empregados admitidos em 01/01/80. SELECT * FROM EMP WHERE EMPADMI = ^Q"DD-AAA-YYYY"("01-JAN-1980"); Ou SELECT * FROM EMP WHERE EMPADMI = ^Q("01-JAN-1980"); 36 | P á g i n a FUNÇÕES AGREGADAS (OU DE AGRUPAMENTO) Função Retorno avg(n) count(expr) max(expr) min(expr) sum(n) média do valor n, ignorando nulos vezes que o número da expr avalia para algo nao nulo maior valor da expr menor valor da expr soma dos valores de n, ignorando nulos Apresente a Média, o Maior, o Menor e também a Somatória dos Salários pagos aos empregados. SELECT AVG(EMPSALA) FROM EMP; SELECT MIN(EMPSALA) FROM EMP; SELECT MAX(EMPSALA) FROM EMP; SELECT SUM(EMPSALA) FROM EMP; AGRUPAMENTOS As funções de grupo operam sobre grupos de registro (linhas). Retornam resultados baseados em grupos de registros em vez de resultados de funções por registro individual. A cláusula "GROUP BY" do comando "SELECT" é utilizada para dividir registros em grupos menores. A cláusula "GROUP BY" pode ser usada para dividir os registros de uma tabela em grupos menores. As funções de grupo devolvem uma informação sumarizada para cada grupo. Apresente a média de salário paga por departamento. SELECT DUPNUME, AVG(EMPSALA) FROM EMP GROUP BY DEPNUME; OBSERVAÇÃO Qualquer coluna ou expressão na lista de seleção, que não for uma função agregada, deverá constar da cláusula "GROUP BY". Portanto é errado tentar impor uma "restrição" do tipo agregada na cláusula Where. 37 | P á g i n a Having A cláusula "HAVING" pode ser utilizada para especificar quais grupos deverão ser exibidos, portanto restringindo-os. Retome o problema anterior, porém apresente resposta apenas para departamentos com mais de 10 empregados. SELECT DEPNUME, AVG(EMPSALA) FROM EMP GROUP BY DEPNUME HAVING COUNT(*) > 3; Observação: A cláusula "GROUP BY" deve ser colocada antes da "having", pois os grupos são formados e as funções de grupos são calculadas antes de se resolver a cláusula "HAVING". A cláusula "WHERE" não pode ser utilizada para restringir grupos que deverão ser exibidos. *** Exemplificando ERRO típico - Restringindo Média Maior que 1000: **** SELECT DEPNUME, AVG(EMPSALA) FROM EMP WHERE AVG(SALARIO) > 1000 GROUP BY DEPNUME; ( Esta seleção está ERRADA! ) SELECT DEPNUME, AVG(EMPSALA) FROM EMP GROUP BY DEPNUME HAVING AVG(EMPSALA) > 1000; ( Seleção Adequada ) SEQÜÊNCIA NO COMANDO "SELECT": SELECT FROM WHERE GROUP BY HAVING ORDER BY coluna(s) tabela(s) condição (ões) da(s) tupla(s) condição(ões) do(s) grupo(s) de tupla(s) condição (ões) do(s) grupo(s) de tupla(s) coluna(s); 38 | P á g i n a A "SQL" fará a seguinte avaliação: a) WHERE, para estabelecer tabelas individuais candidatas (não pode conter funções de grupo) b) GROUP BY, para fixar grupos. c) HAVING, para selecionar grupos para exibição. JOIN - (JUNÇÃO POR IGUALDADE) O relacionamento existente entre tabelas é chamado de equi-junção, pois os valores de colunas das duas tabelas são iguais. A Equi-junção é possível apenas quando tivermos definido de forma adequada a chave estrangeira de uma tabela e sua referência a chave primária da tabela precedente. Apesar de admitir-se em alguns casos, a equi-junção de tabelas, sem a correspondência Chave PrimáriaChave Estrangeira, recomendamos fortemente ao estudante não utilizar este tipo de construção, pois certamente em nenhum momento nos exemplos propostos em nossa disciplina ou, serão necessárias tais junções. Listar Nomes de Empregados, Cargos e Nome do Departamento onde o empregado trabalha. Observemos que dois dos três dados solicitados estão na Tabela Emp, enquanto o outro dado está na Tabela Dept. Deveremos então acessar os dados restringindo convenientemente as relações existentes entre as tabelas. De fato sabemos que DEPNUME é chave primária da tabela de Departamentos e também é chave estrangeira da Tabela de Empregados. Portanto, este campo será o responsável pelo JOIN SELECT A.EMPNOME, A.EMPSERV, B.DEPNOME FROM EMP A, DEPT B WHERE A.DEPNUME = B.DEPNUME; Nota: Note que as tabelas quando contém colunas com o mesmo nome, usa-se um apelido "alias" para substituir o nome da tabela associado à coluna. Imagine que alguém tivesse definido NOME para ser o Nome do Empregado na Tabela de Empregados e também NOME para ser o Nome do Departamento na Tabela de Departamentos. Tudo funcionaria de forma adequada, pois o aliás se encarregaria de evitar que uma ambigüidade fosse verificada. Embora SQL resolva de forma muito elegante o problema da nomenclatura idêntica para campos de tabelas, recomendamos que o estudante fortemente evitasse tal forma de nomear os campos. O SQL nunca confundirá um A.NOME com um B.NOME, porém podemos afirmar o mesmo de nós mesmos? 39 | P á g i n a Liste os Códigos do Cada Funcionário, seus Nomes, seus Cargos e o nome do Gerente ao qual este se relaciona. Precisamos criar um auto-relacionamento, ou seja, juntar uma tabela a ela própria. É possível juntarmos uma tabela a ela mesma com a utilização de apelidos, permitindo juntar registro da tabela a outra tabela da mesma tabela. SELECT A.EMPNUME, A.EMPNOME, A.EMPSERV, B.EMPNOME FROM EMP A, EMP B WHERE A.EMPGERE = B.EMPNUME; INNER JOIN - LEFT JOIN – RIGHT JOIN E FULL OUTER JOIN É através dos diferentes tipos de join que conseguimos recuperar dados de uma ou mais tabelas com auxilio dos relacionamentos existentes. Nos exemplos serão consideradas duas tabelas (PRODUTO E DVENDA) vamos supor nos exemplos que foram vendidos itens sem estarem cadastrados PRODUTO X VENDA A área em vermelho representa os produtos que foram cadastrados, mas não foram vendidos. Para selecionar esses produtos utilizamos um LEFT JOIN, ligando um filtro para listar SOMENTE as linhas EXISTENTES na tabela produto SEM CORRESPONDENTE na tabela venda; 40 | P á g i n a A área em azul representa produtos que foram vendidos e não possuem cadastro. Para selecionar esses produtos utilizaremos um RIGHT JOIN ligando um filtro para listar SOMENTE as linhas EXISTENTES na tabela venda SEM CORRESPONDENTES na tabela produto; A área em verde representa os produtos que foram vendidos e possuem cadastro. Para selecionar as linhas que possuem equivalência nas duas tabelas utilizamos o INNER JOIN. Para representar a união de todos os produtos com todas as vendas, independentemente de relacionamento (área em vermelho+verde+azul) utilizamos um FULL OUTER JOIN Vamos começar pela área verde (intersecção) Selecionar os produtos que foram vendidos e possuem cadastro – área verde SELECT DISTINCT P.CODIGO, P.DESCRICAO FROM PRODUTO P INNER JOIN DVENDA V ON P.CODIGO = V.CODPROD Selecionar os produtos que foram vendidos, mas não possuem cadastro- área azul SELECT V.CODPROD FROM PRODUTO P RIGHT OUTER JOIN DVENDA V ON V.CODPROD = P.CODIGO WHERE P.CODIGO IS NULL Selecionar os produtos que foram cadastrados, mas não foram vendidos – área vermelha SELECT P.CODIGO, P.DESCRICAO FROM PRODUTO P LEFT OUTER JOIN DVENDA V ON V.CODPROD = P.CODIGO WHERE V.CODPROD IS NULL 41 | P á g i n a AS SUBCONSULTAS Uma subconsulta é um comando "SELECT" que é aninhado dentro de outro "SELECT" e que devolve resultados intermediários. Relacione todos os nomes de funcionários e seus respectivos cargos, desde que o orçamento do departamento seja igual a 300000. SELECT EMPNOME, EMPSERV FROM EMP A WHERE 300000 IN ( SELECT DEPORCA FROM DEPT WHERE DEPT.DEPNUME = A.DEPNUME ); Nota: Observe que a cláusula IN torna-se verdadeira quando o atributo indicado está presente no conjunto obtido através da subconsulta. Relacione todos os departamentos que possuem empregados com remuneração maior que 3500. SELECT DEPNOME FROM DEPT A WHERE EXISTS (SELECT * FROM EMP WHERE EMPSALA > 3500 AND EMP.DEPNUME = A.DEPNUME'); Nota: Observe que a cláusula EXISTS indica se o resultado de uma pesquisa contém ou não registro. Observe também que poderemos verificar a não existência (NOT EXISTS) caso esta alternativa seja mais conveniente. Se eu quiser saber quais produtos participaram em qualquer pedido cuja quantidade seja maior ou igual a 10 SELECT DESCRICAO FROM PRODUTO WHERE CODIGO IN (SELECT CODPROD FROM DVENDA WHERE QTDE >= 10) Quais as vendas que tiveram seu valor abaixo da media SELECT CODIGO, VALORVENDA FROM CVENDA WHERE VALORVENDA < (SELECT AVG(VALORVENDA) FROM CVENDA) 42 | P á g i n a Quais produtos que não estão presente em nenhuma vendam SELECT CODIGO, DESCRICAO FROM PRODUTO WHERE NOT EXISTS (SELECT PRODUTO.CODIGO) * FROM DVENDA WHERE CODPROD = INSERÇÕES, ALTERAÇÕES E EXCLUSÕES De forma alguma o mesmo ocorrerá com o especialista em SQL ao ter que migrar do Banco de Dados X para o Banco de Dados Y. Naturalmente existirá a necessidade de aprendizado, mas este programador poderá ir adaptando-se aos poucos sem precisar ser retreinado, o que é um aspecto extremamente vantajoso para as empresas. INSERIR (INSERT) Sintaxe: INSERT INTO <tabela> [<campos>] [VALUES <valores>] INSERT INTO DEPT; Possibilita a inserção de registros de forma interativa. INSERT INTO DEPT (DEPNUME,DEPNOME,DEPLOCA) VALUES (70,"PRODUCAO","RIO DE JANEIRO"); INSERT INTO CLIENTE (NOME, ENDERECO) VALUES („PAULO‟, „RUA A‟) INSERT INTO VALUES (10,‟JOSÉ‟, „BAIRO‟, „ENEDERÇO‟, „CIDADE‟) Possibilita a inserção de registros em tabelas sem digitação dos dados. ATUALIZAR (UPDATE) Sintaxe: UPDATE <tabela> SET <campo> = <expressão> [WHERE <condição>]; 43 | P á g i n a UPDATE EMP SET EMPSALA = EMPSALA * 1.2 WHERE EMPSALA < 1000; UPDATE PRODUTO SET TOTAL = TOTAL * 1.1 UPDATE CLIENTE SET ENDERECO = „RUA FULANO DE TAL‟ WHERE CODIGO = 10 EXCLUIR (DELETE) Sintaxe: DELETE FROM <tabela> [WHERE <condição>]; DELETE FROM EMP WHERE EMPSALA > 5000; DELETE FROM CLIENTE WHERE CODIGO = 5 FERRAMENTA DE GERENCIAMENTO – IBEXPERT Observação: Mais informações sobre IBExpert em Vídeo Aula EXEMPLO PRÁTICO – CRIAR UM BANCO DE DADOS CONTENDO AS SEGUINTES TABELAS: CLIENTE – PRODUTO – FORNECEDOR VENDENDOR – VENDAS – ITENS_VENDAS 44 | P á g i n a REFERÊNCIAS BIBLIOGRÁFICAS APLICAÇÕES CLIENTE/SERVIDOR COM DELPHI 6 + INTERBASE 6 – UMA ABORDAGEM PRÁTICA – EDITORA ÉRICA FIREBIRD 2.0 - O BANCO DE DADOS DO NOVO MILÊNIO - CARLOS H. CANTU http://www.relativa.com.br/livros_template.asp?Codigo_Produto=60937 PROGRAMAÇÃO CLIENTE/SERVIDOR COM FIREBIRD http://www.relativa.com.br/livros_template.asp?Codigo_Produto=44288 LINKS http://www.firebase.com.br/fb/ http://www.clubedelphi.net/portal http://www.devmedia.com.br http://www.borland.com http://www.google.com.br http://www.firebirdsql.com/ http://www.msdn.com.br