Baixe o app para aproveitar ainda mais
Prévia do material em texto
�PAGE �1� �PAGE �3� Apostila de Banco de Dados v.3.0 Banco de Dados Prof. Flavio Rezende � 61 Evolução dos Sistemas de Informação. 2 Introdução 7 2.1 Modelo Conceitual de Dados (MCD) 7 2.2 Modelo Lógico de Dados (MLD) 7 2.3 Modelo Físico de Dados (MFD) 7 3 Modelo Conceitual de Dados (MCD) 7 3.2 Entidades 9 3.2.1 Especificações 9 3.2.2 Eventos ou Ocorrências 10 3.2.3 Especificações 10 3.2.4 A Dicionarização dos Objetos Modelados 10 3.2.5 Regras Básicas para a Dicionarização de Objetos (Entidades/Classes) 10 3.2.6 Requisitos a serem atendidos na dicionarização 10 3.2.7 Dependência de Existência 11 3.2.8 Dependência de Identificador 11 3.3 Atributos 11 3.3.1 Atributos Descritivos 11 3.3.2 Atributos Nominativos 11 3.3.3 Atributos Referenciais 11 3.3.4 Dicionarização dos Atributos 12 3.4 Relacionamentos 12 3.4.1 Identificação dos Relacionamentos 12 3.4.2 Denominação dos Relacionamentos 12 3.4.3 Caracterização dos Relacionamentos 12 3.4.4 Grau de Cardinalidade do Relacionamento 12 3.4.5 Relacionamentos incondicionais 13 3.4.6 Relacionamentos Condicionais 13 3.4.7 Quanto à Existência Simultânea de Relacionamentos 14 3.4.8 Quanto à Presença de Atributos 15 3.4.9 Dicionarização de Relacionamentos 15 3.4.10 Estrutura de Generalização e Especificação 15 3.4.11 Especializações Mutuamente Exclusivas (Categorias) 15 3.4.12 Especialização Não-mutuamente Exclusivas (Papéis) 15 3.4.13 Níveis de Especialização 16 3.4.14 Quando Utilizar a Estrutura de Generalização-Especialização 16 3.4.15 Como Apresentar os Subgrupos Existentes 16 4 Modelo Lógico de Dados (MLD) 17 4.1 Passos para a Derivação do Modelo Lógico 17 4.2 Implementação do Modelo Relacional 17 4.2.1 Regras de Derivação 18 4.3 Normalização 18 4.3.1 Benefícios da Normalização 18 4.3.2 Primeira Forma Normal (1FN) 19 4.3.3 Segunda Forma Normal (2FN) 20 4.3.4 Terceira Forma Normal (3FN) 21 4.3.5 Derivação de Agregações 22 4.4 Restrições no Modelo Lógico 22 4.4.1 Restrições de Domínio 23 4.4.2 Restrições de Integridade 23 4.4.3 Restrições de Implementação 24 4.4.4 Objetos básicos de um SGBDR 24 5 Modelo de Entidades e Relacionamentos (ER). 27 5.1 Entidade 27 5.2 Relacionamento 27 5.3 Cardinalidade 28 5.4 Generalização / Especialização : 28 5.5 Entidade Fraca 29 5.6 Agregação : 30 6 Regras de conversão do Modelo Conceitual (E-R) para o Modelo Lógico. 31 6.1 Entidade 31 6.2 Entidade Fraca 31 6.3 Relacionamentos 32 6.4 Especialização 32 6.5 Agregação 33 7 Algebra Relacional 33 8 Linguagem SQL. 35 8.1 Introdução ao SQL 36 8.1.1 SQL*Plus 37 8.1.2 PL/SQL 38 8.1.3 Sintaxe de um bloco PL/SQL: 38 8.1.4 Alguns Comandos SQL: 38 8.1.5 SELECT 38 8.1.6 Expressões Aritméticas 39 8.1.7 Colunas Sinônimas 41 8.1.8 Operador de Concatenação 41 8.1.9 Literais 42 8.1.10 Manuseando Valores Nulos 42 8.1.11 Prevenindo a Seleção de Linhas Duplicadas – Cláusula Distinct 43 8.1.12 A clausula ORDER BY 44 8.1.13 A Clausula WHERE 45 8.2 Operadores SQL 46 8.2.1 O Operador BETWEEN 46 8.2.2 O Operador IN 46 8.2.3 O Operador LIKE 46 8.2.4 Operador IS NULL 47 8.3 Expressões Negativas 47 8.3.1 Pesquisando Dados com Múltiplas Condições 49 8.4 Funções 50 8.4.1 Funções Alfanuméricas 51 8.4.2 Aninhamento de Funções 55 8.4.3 Funções Numéricas 55 8.4.4 Funções de Data 58 8.4.5 Funções de Conversão 61 8.4.6 Funções que Aceitam Vários Tipos de Entrada de Dados 65 8.4.7 Funções de Grupo 67 8.4.8 A cláusula GROUP BY 68 8.4.9 A clausula HAVING 69 8.4.10 A Ordem das clausulas na declaração SELECT. 70 8.5 Executando Pesquisas Padrões com Variáveis Substituíveis 70 8.5.1 Única Variável Substituível 70 8.5.2 Duplo & para Variáveis substituíveis 71 8.5.3 O Comando DEFINE 72 8.5.4 O comando ACCEPT 72 8.6 Recuperando valores da base de dados 73 8.6.1 Comandos de Manipulação de Dados (DML) 74 8.7 Seqüências 76 8.7.1 Alterando uma seqüência 76 8.7.2 Eliminando uma seqüência 76 8.8 Índices 77 8.8.1 Recuperando informações sobre Índices: 77 8.9 Controle de Concorrência 77 8.9.1 Tipos de Lock 77 8.10 Declarações 78 8.10.1 Declarações de Variáveis 78 8.10.2 Tipos de Dados PL/SQL 79 8.10.3 Subtype 82 8.10.4 Atribuindo Valores às Variáveis 83 8.10.5 Escopo de Variáveis 83 8.11 Codificação de Comando SQL Dentro de PL/SQL 84 8.12 Tratamento de Transações 84 8.13 Estruturas de Controle 85 8.13.1 IF – THEN – ELSE 85 8.13.2 WHILE-LOOP 86 8.13.3 FOR-LOOP 86 8.13.4 LOOP 86 8.14 Cursores: 86 8.14.1 Comandos de Manipulação do cursor: 87 8.14.2 Close 88 8.14.3 O Comando For para abrir Cursores: 89 8.14.4 Atualização na tabela da linha atual do cursor: 89 8.14.5 Cursores Implícitos: 89 8.15 Tratamento de Exceções 90 8.15.1 Exceções Predefinidas 90 8.15.2 Exceções Definidas pelo Usuário 91 Coloca uma linha no buffer, e mostra na tela. 92 8.16 Subprogramas (Procedures e Functions) 92 8.16.1 Parâmetros 93 8.16.2 Procedures 93 8.16.3 Functions: 93 8.16.4 Executando subprogramas através do SQL* Plus: 93 8.16.5 Eliminando um subprograma: 93 8.16.6 Análise das dependências: 93 8.17 Packages 94 8.17.1 Especificação 94 8.17.2 Body 94 8.17.3 Execução de Estruturas Públicas de uma Package: 95 8.18 Triggers 95 8.18.1 Criação de triggers 95 8.18.2 Triggers possíveis para uma tabela: 95 9 Projeto físico de Banco de Dados: 97 9.1 Criação de Tabelas no Banco de Dados: 101 9.2 Criação de Views : 101 9.3 Criação de Stored Procedures : 102 9.4 Criação de Functions : 102 9.5 Criação de triggers : 103 10 Privilégios. 104 11 DATA WAREHOUSE 106 12 Exercícios 109 12.1 Modelo Conceirual e Lógico 109 12.2 SQL 117 12.3 Banco de Dados Distribuído 121 � � Evolução dos Sistemas de Informação. Nos anos 70 , o programa era o foco principal dos sistemas de informação. Dados e apresentação de telas para usuários, ficavam em segundo plano. Dependência dos programas com relação aos dados armazenados. O SGBD (Sistema Gerenciador de Banco de Dados) é uma camada lógica entre os programas e os dados, tornando assim os programas independentes dos dados. Programas ( Programas + Arquivos ( Programas + SGBD + Banco de Dados Banco de Dados ( Coleção de dados. Características do SGBD Relacional (também conhecidos como SGBDR). Linguagem SQL. Backup/Recovery. Segurança. Integridade. Controle de concorrência de transações. Desempenho. � Introdução Modelo Conceitual de Dados (MCD) Define-se como Modelo Conceitual aquele em que os objetos, suas características e relacionamentos têm a representação fiel ao ambiente observado. Devemos representar os conceitos e características observados em um dado ambiente, voltando-nos simplesmente ao aspecto conceitual. Nesse nível devem ser ignoradas quaisquer particularidades de implementação, bem como desconsiderada qualquer preocupação com qual será o modo de implementação futura, permanecerá imutável. Modelo Lógico de Dados (MLD) Define-se como aquele em que os objetos, suas características e relacionamentos têm a representação de acordo com as regras de implementação e limitantes impostos por algum tipo de tecnologia. Esse modelo deve ser o modelo elaborado respeitando-se e implementando-se os conceitos tais como chave de acesso, controles de chaves duplicadas, itens de repetição (arrays), normalização, ponteiros, headers, integridade referencial, entre outros. Modelo Físico de Dados (MFD) É aquele em que a representação dos objetos é feita sob o foco do nível físico de implementação das ocorrências, ou instâncias das entidades e seus relacionamentos. Cada diferente SGBD poderá definir um diferente modo de implementação física das características e recursos necessários para o armazenamento e manipulação das estruturas de dados. No modelo físico podem ser incluídos dois níveis de representação. O primeiro deles diz respeito às ocorrências ou instâncias, seus relacionamentose disposição física dos elementos. Outro diz respeito à alocação de espaços físicos nos diversos níveis de agrupamento possíveis: tabelas (arquivos), blocos, linhas (registros) e colunas (campos). Integração da Arquitetura de Três Níveis com a Abordagem E-R Uma integração entre a abordagem de modelos conceitual, lógico e físico e a proposta do grupo ANSI-X3-SPARK é possível se forem estabelecidos os níveis de projeto. Modelo Conceitual de Dados (MCD) Antes de mais nada, o quê é uma tabela ? Tabela ou Relação: Uma representação lógica da organização dos dados dentro do SGBDR. É uma tabela de valores, o seu nome e o nome das colunas, servem para auxiliar a interpretação do significado de seus valores. Valor : É usado para representar 'alguma coisa'. É a menor partícula de dados do modelo relacional, eles são indivisíveis. Domínio : É um conjunto de valores atômicos, de mesmo tipo. São usados para preencher os valores de uma coluna. ex: Nome char(40) : restringe a coluna Nome a ter seus valores dentro do domínio de no máximo 40 caracteres ou seja um nome de 50 caracteres não é um nome válido para este domínio. Linha ou Tupla : Representa uma linha da tabela, onde cada linha, representa uma coleção de valores. MATRICULA NOME SALARIO 01 Zé 200,00 02 Maria 1000,00 03 João 800,00 04 Margarida 150,00 ... Conceitos de Chave: Primary Key (PK) :Atributo ou conjunto de atributos de uma tabela que identificam univocamente uma linha. Toda Primary key deve ser minimal. Foreign Key (FK) : Atributo ou conjunto de atributos de uma tabela que referencia a chave primária em outra tabela, ou no caso do auto relacionamento, na mesma tabela. Unique Key(UK) : Atributo de uma tabela que tem todas as qualificações para ser uma chave primária. OBS. Muitos autores representa a chave primária de uma tabela com as colunas sublinhadas, e as chaves estrangeiras com uma linha acima das colunas. � Ex: FUNCIONARIOS(MATRICULA , NOME , SALARIO , CPF , DEPTO) Ex: FUNCIONARIOS MATRICULA NOME SALARIO CPF DEPTO 01 Zé 200,00 12999666 01 02 Maria 1000,00 18765789 02 03 João 800,00 49555969 02 04 Margarida 150,00 89993393 01 ... DEPARTAMENTOS DEPTO DESCRICAO 01 Recursos Humanos 02 Diretoria Modelo E-R A Abordagem Entidade-Relacionamento A técnica de diagramação é bastante simples e serve como meio de representação dos próprios conceitos por ela manipulados. Utiliza, basicamente, um retângulo para representar as entidades, um losango para representar os relacionamentos e balões para indicar e alocar os atributos. Entidades Identificação de Objetos (Entidades ou Classes) Representação gráfica: A estratégia proposta por Shlaer & Mellor, define que deveremos procurar reconhecer objetos, ou elementos individualizados, através da observação de cinco grandes grupos de elementos: As coisas tangíveis As funções exercidas por elementos Interações Especificações As classificações propostas têm como objetivo servir como um meio de discernimento para casos não facilmente enquadráveis ou mesmo para verificação e validação do processo de modelagem. Coisas Tangíveis O grupo de “Coisas Tangíveis” engloba todos os elementos que tenham existência concreta. Funções Definimos como todo o tipo de papel, atribuição, classificação, capacitação, ou outra característica qualquer que, para um dado elemento, especifique não sua existência mas sua atuação no ambiente em que está inserido. Eventos ou Ocorrências Alguns objetos, ou elementos individualizados, só conseguem ser percebidos, ou caracterizados, enquanto uma certa ação se desenrola. Em outras palavras, quando alguma ação, ou fato, acontece conseguimos definir características que os tornam materializáveis. Enquanto programado, durante sua execução ou após encerrado, esse elemento caracteriza-se como um evento ou ocorrência ao qual podemos fazer alguma referência. Interações Os chamados objetos-interação são resultantes da associação de objetos em função de um processo executado. Os objetos-interação passam a existir de maneira individualizada, além dos objetos que participam dessa interação. Especificações São elementos que definem características de outros objetos. Representam especificações que quando aplicadas ou seguidas darão origem a objetos. A Dicionarização dos Objetos Modelados Cada um dos elementos identificados e representados deverá, em um segundo instante, ser definido claramente para que, associando-se seu nome, sua representação e sua definição, sejamos capazes de ter o completo entendimento de conceito que estes procuram transmitir. Regras Básicas para a Dicionarização de Objetos (Entidades/Classes) Uma das principais tendências quando passamos a dicionarizar um objeto é nos referenciarmos a ele como um meio de armazenamento e não como o próprio objeto que ele representa. Requisitos a serem atendidos na dicionarização Para dicionarização de um objeto, ou entidade, deveremos ter em mente algo que satisfaça, senão todas, a grande parte das seguintes perguntas: O que é o elemento? O que faz o elemento? Para que serve? O que engloba essa categoria de elementos? O que está excluído dessa categoria Quando alguém passa a ser, ou deixa de ser, um elemento desse tipo? Sua permanência nessa categoria é imutável? Considerações sobre Entidades Fortes e Entidades Fracas Essa caracterização se dá através da análise de existência de duas condições básicas: Dependência de existência Dependência de identificador Dizemos que uma entidade é fraca se um desses dois tipos de dependência se verificar entre uma entidade A e uma entidade B. Dependência de Existência Se B depender de A para existir, teremos em B uma entidade fraca, enquanto que A, se não depender de ninguém para existir, será considerada, será considerada uma entidade forte. Dependência de Identificador Esse segundo critério de definição de entidades fortes e entidades fracas, tem sua importância reconhecida sob o ponto de vista de projeto lógico, onde as chaves identificadoras, utilizadas como diferenciadores entre instâncias dos elementos, ou como método de endereçamento de registros, passando a ter papel vital durante o processo de projeto de estruturas de dados. Atributos O Papel dos Atributos Ao observarmos objetos em um ambiente, estaremos, na verdade, reconhecendo tais elementos através da identificação de suas características próprias. Essas características, inerentes a cada um desses objetos, serão, em princípio, comuns a todos os objetos, ou elementos individualizados, pertencentes a um mesmo conjunto. Classificação dos Atributos quanto a sua finalidade Após termos identificado os atributos de cada um dos objetos, podemos, sob o ponto de vista de classificação quanto a sua finalidade, enquadra-los em três grandes grupos: Atributos Descritivos Todo e qualquer atributo que seja capaz de demonstrar, ou representar, características formadoras, ou pertencentes, a um objeto poderá vir a ser enquadrado como descritivo. Atributos Nominativos Engloba todos aqueles atributos que, além de cumprirem a função de descritivos, também servem como definidores de nomes ou rótulos de identificação aos objetos aos quais pertencem. Qualquer atributo que possa identificar um objeto, é chamado de Atributo Nominativo. Atributos Referenciais Os Atributos classificados como Referenciais são aqueles que não pertencem ao objeto onde estão alocados, mas fazem algum tipo de citação, ou ligação, desse objeto com um outro objeto. Dicionarização dos Atributos A Dicionarização dos Atributos identificados nos objetos por nós observados é, complementarmente à dicionarização dos próprios objetos e entidades, o únicomodo efetivo de caracterização do universo observado. A Dicionarização deve procurar trazer ao conhecimento público toda e qualquer informação que seja de valia para o processo de compreensão e unificação de conceitos. Relacionamentos Identificação dos Relacionamentos Através do mapeamento dos relacionamentos estaremos sendo capazes de demonstrar como um objeto se comporta em relação aos demais, qual seu grau de dependência de outros objetos, qual a associação de dados existentes entre eles, entre outros fatores. Devemos estar atentos para que o mapeamento desses relacionamentos possa agregar todas as características semânticas existentes em um certo tipo de associação. Se um Relacionamento mapeado espelha a realidade, ele poderá envolver quaisquer tipos ou instâncias de objetos. Dois tipos básicos de Relacionamentos: Relacionamentos entre instâncias de objetos de diferentes tipos – associa instâncias de um objeto de um tipo a outras de outro tipo. Relacionamentos entre instâncias de um mesmo tipo de objeto – esse tipo de relacionamento caracteriza um caso especial onde no papel de objetos formadores, ou participantes, do relacionamento encontraremos o mesmo tipo de objeto. Denominação dos Relacionamentos No processo de reconhecimento e identificação dos relacionamentos existentes entre os objetos devemos buscar uma denominação que represente o conceito observado. Essa denominação será, do ponto de vista semântico e conceitual, extremamente importante para a correta construção do modelo. Caracterização dos Relacionamentos Um relacionamento demonstra uma associação entre objetos, de igual ou diferentes tipos. Esses Relacionamentos têm, todavia, características diversas que devem ser observadas e mapeadas. A Caracterização dos Relacionamentos deverá ser feita baseada no atendimento de alguns requisitos: Grau, ou Cardinalidade, do Relacionamento; Número de elementos que participam do relacionamento; Condição de participação dos elementos no relacionamento; Condição de estabelecimento do relacionamento. Grau de Cardinalidade do Relacionamento Durante o processo de reconhecimento e entendimento de um relacionamento, estaremos sempre nos defrontando com regras de estabelecimento das associações entre os elementos, extraídas do próprio ambiente observado. Em muitos casos, uma regra que seja verdadeira em um ambiente X observado poderá não ser verdadeira em outro ambiente Y. Processo para a Definição e Notação de um Relacionamento Junto ao elemento que representa o relacionamento, estaremos representando o grau de associação, ou cardinalidade. Possibilidades de Estabelecimento de Graus de relacionamento Deveremos enquadrar os relacionamentos analisados em três grandes grupos, os quais, para fins de modelagem, cumprem a total finalidade de expressar a semântica de associação entre os elementos: 1:1 (Um para Um) – Um elemento do tipo A só se relaciona com um elemento do tipo B, e vive-versa; 1:N (Um para Muitos) – Apesar de um elemento do conjunto A poder se associar a N elementos do conjunto B, o contrário não é verdadeiro, cada elemento do conjunto B só poderá estar associado a um elemento do conjunto A; M:N (Muitos para Muitos) – Um elemento qualquer de um conjunto A pode se associar a nenhum, 1 ou vários elementos do conjunto B, e vice-versa. Mudanças na Notação de Relacionamentos M:N Algumas notações acabam por induzir o modelador para que, se o relacionamento for de grau 1:1 ou grau 1:N, seja utilizada uma representação e se o grau do relacionamento for M:N seja utilizada outra. Isso deve-se ao fato de essas notações estarem bastante orientadas aos modelos lógicos e não aos modelos conceituais. Número de Elementos que participam do Relacionamento Um Relacionamento pode se estabelecer entre dois ou mais elementos, e não somente, no máximo, dois elementos. Em Relacionamentos Ternários, Quaternários ou de maiores graus podem estar mascarando um objeto não percebido, o qual concentra sobre si relacionamentos com os demais. A estrutura necessária para a derivação de um relacionamento Ternário é a Agregação. Presença dos Elementos no relacionamento Outro tipo de conceito que deve ser manipulado quando se tratam os relacionamentos entre os objetos é a obrigatoriedade ou não da participação dos elementos nas associações passíveis de serem estabelecidas. Alguns elementos de um dado conjunto A podem não participar em nenhuma associação com elementos de um conjunto B. Do mesmo modo, qualquer um dos elementos do conjunto B pode não estabelecer associação com algum elemento do conjunto A. Relacionamentos incondicionais Nos Relacionamentos Incondicionais não será denotado nenhum tipo de opcionalidade quanto à participação de elementos nas associações. Nesse tipo de representação precisaremos de informações adicionais para reconhecer se o relacionamento sempre segue o grau descrito (1:1, 1:N, M:N), ou se, por omissão, existem regras de exceção não qualificadas. Relacionamentos Condicionais Nesse tipo de representação, estaremos, graficamente, demonstrando quando um ou outro elemento permite a ausência de associações. Deveremos expandir o conceito de grau do relacionamento e pensar em dois tipos de grau: Mínimo e Máximo. Grau Máximo é a determinação de relacionamentos como associações 1:1, 1:N e M:N. Ou seja, qual é o menor valor possível de participação dos elementos do conjunto A e B no relacionamento. Quanto à Existência Simultânea de Relacionamentos Essa característica leva-nos a uma situação na qual será preciso definir quando a existência de uma associação impacta ou impede a existência de outra. Podemos caracterizar três tipos de associações entre objetos: Relacionamentos Independentes – Agrupa todo e qualquer relacionamento que possa vir a ser estabelecido sem que haja necessidade de avaliação simultânea de outro relacionamento; Relacionamentos Contingentes – Aqueles que, tendo dependência uns com os outros, impõem o estabelecimento simultâneo de associações entre os vários elementos envolvidos. Relacionamentos Mutuamente Exclusivos – Se a associação de um elemento for estabelecida através de um dos relacionamentos, não poderá ser estabelecida pelos demais. � Quanto à Presença de Atributos Durante o processo de modelagem, iremos nos defrontar com situações nas quais deveremos manipular informações (dados) que pertençam à associação dos objetos do ambiente observado. Isso fará com que seja necessário expandir nosso entendimento sobre o mapeamento de atributos e de relacionamentos. Classificação dos Relacionamentos: Com Atributos – tem um nome, um significado, um grau mínimo e máximo, pode ser independente, contingente, mutuamente exclusivo, e adicionalmente, possui dados a serem manuseados. Sem Atributos – se estabelece entre elementos de dois, ou mais, conjuntos e para o qual não são identificadas informações a serem mantidas ou mapeadas. Mudanças na Representação em Função de Relacionamentos com Atributos Outro motivo que tem levado os modeladores a já no nível conceitual terem de criar estruturas do tipo ‘Entidade’ para espelhar relacionamentos é o fato de o relacionamento conter atributos a serem mapeados. Dicionarização de Relacionamentos Para que realmente seja entendido o papel de um relacionamento, muitas vezes será necessário agregar algum tipo de informação adicional sobre o relacionamento estabelecido entre as entidades. O conhecimento da cardinalidade, utilizando-se graus mínimos e máximos, e a utilização de nomes significativos podem ajudar mas, freqüentemente, não são suficientes para o completo entendimento dos modelos. Elementos de Caracterização Semântica Adicionais Qualquer modelo poderia ser construído com um mínimo suficiente de semântica baseado nos conceitos de entidades, atributos e relacionamentos. Com o passar do tempo, novas característicassemânticas passaram a demonstrar ser necessárias para o completo entendimento dos modelos. Estrutura de Generalização e Especificação O principal objetivo do processo de abstração e identificação dos objetos é reconhecer agrupamentos e distinções entre conjuntos de objetos identificados. Entretanto, nem sempre a separação de instâncias desses objetos, ou elementos, se dará por conjuntos estritamente distintos. Especializações Mutuamente Exclusivas (Categorias) A partir da observação e identificação dos elementos e subconjuntos existentes em um conjunto, sempre que um elemento do conjunto global, pertencer a um dos subconjuntos, não poderá pertencer simultaneamente, a outro. Especialização Não-mutuamente Exclusivas (Papéis) Caracterizar, especificamente, se um elemento pertence a uma especificação com ou sem exclusividade deverá ser o objetivo do processo de investigação das regras estabelecidas pelo ambiente. Níveis de Especialização Uma característica, que podemos encontrar, quanto à formação de subconjuntos especializados, é a da existência de diferentes níveis de agrupamento. Partindo de um conjunto global, poderemos estabelecer um primeiro nível de subconjuntos e, dentro desses, voltar a estabelecer novos subconjuntos. Quando Utilizar a Estrutura de Generalização-Especialização Como regras práticas para definir se uma especialização deve ou não ser explicitada no modelo, devemos avaliar os seguintes passos: Regra 1: Existe algum atributo que seja aplicável a somente um subconjunto de elementos e não a todos? Se sim, então é desejável a criação da especialização. Regra 2: Existe algum relacionamento que seja aplicável a somente um subconjuntos de elementos e não a todos? Se sim, então é desejável a criação da especialização. Regra 3: Não estaremos ‘poluindo’ o modelo com a inserção de detalhes desnecessários? Não, não estaremos. Então é possível a criação da especialização. Regra 4: A finalidade de nosso modelo é procurar incorporar o máximo de elementos gráficos para que a compreensão não dependa de análise de elementos complementares, tais como dicionário de dados, documentos, anexos? Sim, é. Então, é possível a criação da especialização. Essas regras nos levam a ter duas situações distintas: A especialização deverá ser explicitada; A especialização pode ser explicitada. Como Apresentar os Subgrupos Existentes Uma habilidade está disponível para ser utilizado junto á estrutura de Generalização-Especialização: a definição dos critérios. A partir desse critério teremos, então , a formação dos subgrupos pela divisão dos elementos pertencentes ao conjunto global. Utilizando a Estrutura de Gen-Espec em Auto-Relacionamentos A utilização da estrutura de Generalização-Especialização pode ser um recurso bastante interessante para acrescentar semântica ao casos de auto-relacionamento. Um auto-relacionamento se dá quando diferentes instâncias de um mesmo tipo de objeto se relacionam entre si. � Modelo Lógico de Dados (MLD) Passos para a Derivação do Modelo Lógico Vimos que a geração de um modelo lógico deveria ser antecedida pela obtenção de um modelo conceitual. A grande vantagem dessa proposta, é que a partir do modelo conceitual gerado, podemos aplicar regras predefinidas em função da tecnologia a ser empregada e , assim, obter os modelos necessários. Podemos definir que o processo de obtenção de um modelo lógico a partir de um modelo conceitual segue os seguintes passos: Obter o modelo conceitual; Definir o tipo de implementação; Aplicar as regras de derivação específicas; Adaptar o modelo às necessidades. Adaptações no Modelo Lógico Derivado Visa a criar estruturas de implementação que atendam às reais expectativas das aplicações. Conceitos Utilizados na Derivação de Modelos Relacionais A visão básica estabelecida era de que registros de um arquivo assemelhavam-se a tuplas de uma relação. Uma relação, por sua vez, assemelhava-se a uma arquivo onde cada uma de suas tuplas, contendo elementos de domínios distintos, agregados de forma predefinida, podia ser entendida com um registro e seus campos. Implementação do Modelo Relacional Conceitos Chave Candidata e Chave Primária – A Não-existência de elementos repetidos em uma tabela é uma necessidade básica a ser cumprida para o estabelecimento de um modelo relacional realmente aderente aos conceitos de ‘relação’, foi introduzido o conceito de Chave Identificadora da tabela. Identificar domínios nos quais sabemos que a existência de valores instanciados não será repetida, podemos eleger esses domínios, ou colunas, como Candidatas a Chave. Basta que exista mais de um domínio que apresente a característica de não repetir seus valores durante as instanciações para todas as linhas da tabela. Dentre essas várias colunas deveremos escolher uma e elege-la como Chave Identificadora ou Chave Primária. Chave Estrangeira – Uma Chave Estrangeira recebe esse nome para denotar algumas características importantes: Ela é uma chave, portanto, identifica de modo único uma tupla; Ela não está em seu local original, mas sim em um local para onde foi migrada; Ela tem um local de origem e lá possui suas características originais (é uma chave primária). Uma Chave Estrangeira é uma chave primária de uma tabela que aparece repetida em outra. Domínios de Atributos – Existe um conjunto de valores distintos que podem ser atribuídos a uma coluna. Entretanto, sabemos que pela diferente natureza de cada uma das colunas poderemos ter diferentes valores sendo válidos às instanciações. Regras de Derivação O processo de obtenção de um modelo relacional é baseado na execução de três atividades distintas: Normalização das Estruturas de Dados; A Derivação de Estruturas de Agregação e Generalização-Especialização; A Derivação de Relacionamentos. Normalização Quando os pontos passam a estar claros, aí então passamos a efetivamente encarar o processo de normalização como uma alavanca para o processo de construção de banco de dados. A Normalização não é um processo com finalidade restritiva mas sim com caráter organizativo. A Normalização pode ocorrer em três instantes distintivos: Durante o processo de concepção do modelo conceitual; Durante a derivação do modelo lógico; Após a derivação do modelo lógico. Normalização durante o processo de concepção do Modelo Conceitual O grau de normalização que ele pode apresentar dependerá de vários fatores como, por exemplo: Abrangência do Modelo – Quanto mais abrangente for um modelo, mais chances, caso ele tenha sido adequadamente concebido, haverá de que ele tenha um baixo grau de normalização. Facilidade de abstração e compreensão – O correto entendimento dos elementos presentes em um ambiente a ser modelado poderá nos levar mais facilmente à concepção de um modelo normalizado. Conhecimento prévio do ambiente – O fato de que já temos conhecimento prévio do ambiente a ser modelado, e assim do próprio resultado a ser obtido, tanto no nível conceitual como no nível lógico, nos introduzirá a previamente enxergar o ambiente de modo normalizado. Normalização durante a derivação do Modelo Lógico Caso tenha concebido seu modelo conceitual e agora pretenda transforma-lo em um ambiente lógico para implementação em ambiente relacional, você deverá ter certeza de que ele respeita os preceitos da tecnologia relacional. Normalização após o Processo de Derivação do Modelo Lógico Caso você execute o processo de normalização em um dos outros dois instantes, acabará por criar tabelas cuja estrutura não está normalizada, o que resultará em deficiências e anomalias de projeto que, mais cedo ou mais tarde, terão de sofrer os ajustes necessários. Benefícios da Normalização Estabilidade do Modelo Lógico – Por estabilidade entendemos a capacidade de um modelo manter-se inalterado face a mudanças que venhama ser percebidas ou introduzidas no ambiente que tenha sido modelado. Flexibilidade – Tanto de processos como de utilização de estruturas de dados. Capacidade de adaptação a demandas diferenciadas, a expansão e redução, a omissão ou presença, etc. Integridade – As estruturas de dados obtidas pelo processo de modelagem necessitam de recursos para que os dados a serem nelas armazenados possam ter ‘qualidade’. Economia – O aspecto economia, quando se aborda o tema normalização, tem sido visto, basicamente, sob o prisma da economia de espaço para armazenamento. Fidelidade ao Ambiente Observado – Representação de um ambiente observado, através de um modelo, deve procurar retratar, independentemente do grau de abstração, as características observadas, assim como elas efetivamente são. Primeira Forma Normal (1FN) A definição para a primeira forma normal, assim como para as demais, é bastante formal e rigorosa. Não poderia e nem deveria ser diferente. Como esses processos agem sobre estruturas relacionais e foram definidas por pessoas ligadas ao ambiente matemático, herdaram predominantemente o formalismo presente nessas áreas. Isso é bom, por certo lado, pois torna inequívoca sua interpretação. Entretanto por outro lado, temos percebido que boa parte da dificuldade de entendimento, no que diz respeito a formas normais, advém, justamente de dificuldade em “traduzir o formalismo para termos do dia-a-dia”. Definição da Primeira Forma Normal Diz-se que um modelo está na primeira forma normal se: Está integrado por tabela; As linhas da tabela são unívocas; As linhas não contêm itens repetitivos; Os atributos são atômicos; Os atributos não contêm valores nulos. “... As linhas da tabela são unívocas” Também quando mostramos os conceitos envolvidos no ambiente relacional, falamos sobre a obtenção de identificadores únicos para uma tabela visando assegurar a diferenciação entre duas linhas de uma tabela. “... As linhas não contêm itens repetitivos” Grupos repetitivos são estruturas de dados artificiais (vetores) criadas para facilitar o manuseio de ocorrências repetitivas de elementos de dados. “... Os atributos são atômicos” Estruturas de agrupamento de itens de dados tornaram-se bastante comuns junto à linguagem tais como o COBOL. “... Os atributos não contêm valores nulos” A definição da 1FN impondo a não existência de valores nulos era historicamente, uma restrição bastante clara. Seguindo-se definição formal de uma relação não deveríamos, realmente, ter um domínio sem instanciação de valor. Do ponto de vista prático atual, não há mais restrição quanto à existência de valores nulos em colunas de uma tabela para que ela esteja na primeira forma normal (1FN). Processo para obtenção da Primeira Forma Normal (1FN) Definir chaves candidatas e escolher a chave primária da tabela Esse passo que em um primeiro instante parece trivial, pode nos levar a uma série de considerações de ordem prática. Em princípio, a escolha da chave da tabela deve ser feita observando-se os atributos existentes na tabela e escolhendo-se um ou mais deles para que concatenados possam servir como meio de diferenciação entre luma linha e outra (função básica da chave primária). Transformar atributos compostos em atômicos Esse passo é bastante simples e implica poucas decisões. Atributos compostos, que claramente tenham elementos distintos em sua estrutura, deverão ser separadas. Em cada tabela eliminar grupos repetitivos gerando novas tabelas, uma para cada ocorrência de Item Repetitivo, mantendo os valores dos demais itens A execução dessa atividade, isoladamente, poderá nos parecer bastante estranha. Ao olharmos a Estrutura tabular que temos antes e depois dessa atividade, seremos levados a acreditar que tínhamos antes uma estrutura bem melhor do que depois de sua execução. Segunda Forma Normal (2FN) O intuito da segunda forma normal (2FN) é avançar, ainda mais na direção de uma estrutura de dados que não contenha anomalias. Poderão existir casos onde somente aplicando-se as regras da primeira forma normal já venhamos a obter uma estrutura acabada. O que isso significa? Que na verdade, nossa tabela já está normalizada, naturalmente, nas segunda e terceira formas normais. Para constatar isso, teremos de tentar aplicar regras da segunda e terceira formas normais da tabela. Se verificarmos que não existem as características indicadas pela segunda e terceira forma normais da tabela, então teremos comprovado sua normalização natural. Muitas vezes bastará que tenhamos aplicado as regras da segunda forma normal sobre uma tabela para que ela também já esteja normalizada na terceira forma normal. Processo para obtenção da Segunda Forma Normal (2FN) Definir as colunas que não participaram da chave primária da tabela; Para cada uma das colunas identificadas, analisar se seu valor é determinado por parte ou pela totalidade da chave; Para as colunas dependentes parcialmente da chave Criar novas tabelas onde a chave primária será a coluna da chave original que determinou o valor da coluna; Excluir da tabela original as colunas dependentes parcialmente da chave. Terceira Forma Normal (3FN) Visando a transformar a estrutura de dados obtidas até a segunda forma normal em uma estrutura isenta das anomalias constatadas, deveremos buscar a terceira forma normal. Definição da Terceira Forma Normal Uma tabela está na terceira forma normal se está na 2FN, e se nenhuma coluna não pertencente à chave fica determinada transitivamente por esta. Processo para obtenção da Terceira Forma Normal (3FN) Identificar as colunas que não participam da chave primária da tabela; Para cada uma das colunas identificadas, analisar se seu valor é determinado por alguma outra coluna não pertencente à chave; Para as colunas dependentes transitivamente da chave: Criar novas tabelas onde a chave primária será a coluna que determinou o valor da coluna analisada. Agregar a essas tabelas as colunas dependentes transitivamente. Excluir da tabela de origem as colunas dependentes transitivamente das chaves mantendo, porém, a coluna determinante da transitividade na tabela. Derivação de Relacionamentos O tratamento dos relacionamentos, estruturas de Generalização-Especialização e agregação também deverá ser feito durante o processo de derivação. Relacionamento 1:1 sem Atributos O caso mais elementar de relacionamento entre duas entidades é o de cardinalidade 1:1. Dentro desse tipo de relacionamento, por sua vez, o caso mais freqüente de ser encontrado é o de relacionamento 1:1 sem atributos. Relacionamento 1:1 com Atributos A existência de relacionamentos 1:1 com atributos não é algo muito comum. Poderíamos até dizer que é, realmente, um rigor extremo do projeto conceitual. Entretanto, como no nível conceitual eles poderão existir, apresentando 3 métodos para deriva-los. Relacionamentos M:N com ou sem Atributos Para a derivação dos relacionamentos M:N, independentemente da existência ou não de atributos nesse relacionamento, deveremos aplicar uma mesma estratégia. Essa estratégia será baseada no fato de que se um relacionamento M:N representa a interseção dos elementos de um conjunto A com um conjunto B, então deveremos representar fisicamente os possíveis pares formados pela agregação dos elementos de A e B. Derivação de Estruturas de Generalização-Especificação O processo de derivação de uma estrutura de Generalização-Especificação não nos levará diretamente a um modelo lógico para a implementação. Ele na verdade, nos fornecerá um novo modelo conceitual simplificado onde a estrutura, antes existente, será substituída, simplesmente, por entidades e relacionamentos comuns. Estaremos substituindo a notação especialutilizada para representar essa estrutura por elementos comuns (entidade e relacionamentos) e, após isso, aplicando sobre eles as mesmas regras de derivação já vistas. A partir desse ponto teremos obtido os elementos lógicos resultantes da derivação. Durante o processo de derivação, poderemos adotar quatro diferentes estratégias para tratar essas estruturas: Criar uma tabela para a entidade generalizada e uma tabela para cada entidade especializada; Criar somente uma tabela para a entidade generalizada e migrar todos os atributos e relacionamentos especializados para esta tabela; Criar somente tabelas para as entidades especializadas e migrar todos os atributos e relacionamentos generalizados para cada uma dessas tabelas; Utilizar as estratégias 3 e 4 de maneira combinada, migrando atributos e relacionamentos das entidades especializadas para entidade generalizada e/ou vice-versa. Derivação de Agregações A agregação foi um elemento introduzindo no modelo conceitual para representar de modo mais claro uma relação não-binária. O resultado obtido foi um elemento com características de entidade e de relacionamento simultaneamente. Para deriva-lo iremos tratar primeiramente seu aspecto ligado ao relacionamento e, depois, o aspecto ligado à entidade. Restrições no Modelo Lógico O assunto “restrição” será tratado sob três aspectos bastante distintos. São eles: Restrições de Domínio; Restrições de Integridade; Restrições de Implementações; Restrições de Domínio A preocupação com restrições de domínios, para colunas de uma tabela, é um trabalho final executado durante a fase de definição dessas tabelas através da linguagem DDL de um SGBD específico. Dentre as restrições de domínio que devemos tratar estão: O tipo de dado da coluna; O tipo de representação interna escolhida para o dado; As características conceituais de presença ou não desse dado; A especificação explícita de intervalos para domínios contínuos; A especificação explícita de um conjunto de valores par domínios discretos; A definição de alguns tipos especiais de dados. Restrições de Integridade O aspecto relativo à restrições de integridade não afetará diretamente a atribuição de valores isoladamente em uma linha de uma coluna. Normalmente estará envolvendo diferentes linhas da mesma tabela ou de tabelas diferentes. Em alguns casos terá a função de estabelecer (implementar) no modelo lógico algumas das restrições tecnológicas do modelo relacional e outras vezes, simplesmente, terá a função de manter a integridade (fidelidade,correteza, coesão, etc...) entre os dados armazenados no banco de dados. Dentre as restrições de integridade que devemos tratar estão: A definição de unicidade de valores em certas colunas das tabelas A restrição de referência de uma chave estrangeira a um valor de chave primária inexistente; A restrição de referência de uma chave estrangeira a uma coluna ou composição de colunas, de uma chave primária inexistente; A referência de uma chave estrangeira a uma tabela inexistente; A exclusão de ocorrências (tuplas) em modo cascata em estruturas tipo “ hierarquia” ; A alteração de ocorrências (tuplas) em modo cascata em estruturas do tipo “ hierarquia” ; A manutenção de sincronismo entre tabela e os índices da tabela. Restrições de Implementação O tratamento das restrições de implementação deverá ocorrer já durante a fase de derivação de modelo lógico. As decisões sobre quais estratégias utilizar durante o processo de derivação de relacionamentos e das estruturas de agregação e generalização-especialização dependerão das restrições de implementação impostas pelo SGBD que se esteja utilizando. Dentre as restrições de implementação que possivelmente serão encontradas estão: A existência de itens de repetição; Implementação direta ou manuseio transparente de estruturas de generalização-especialização. Objetos básicos de um SGBDR Tabela. Índice. View. Stored Procedure. Trigger. Tabela ou Relação: Uma representação lógica da organização dos dados dentro do SGBDR. É uma tabela de valores, o seu nome e o nome das colunas, servem para auxiliar a interpretação do significado de seus valores. Valor : É usado para representar 'alguma coisa'. É a menor partícula de dados do modelo relacional, eles são indivisíveis. Domínio : É um conjunto de valores atômicos, de mesmo tipo. São usados para preencher os valores de uma coluna. ex: Nome char(40) : restringe a coluna Nome a ter seus valores dentro do domínio de no máximo 40 caracteres ou seja um nome de 50 caracteres não é um nome válido para este domínio. Linha ou Tupla : Representa uma linha da tabela, onde cada linha, representa uma coleção de valores. MATRICULA NOME SALARIO 01 Zé 200,00 02 Maria 1000,00 03 João 800,00 04 Margarida 150,00 ... Conceitos de Chave: Primary Key (PK) :Atributo ou conjunto de atributos de uma tabela que identificam univocamente uma linha. Toda Primary key deve ser minimal. Foreign Key (FK) : Atributo ou conjunto de atributos de uma tabela que referencia a chave primária em outra tabela, ou no caso do auto relacionamento, na mesma tabela. Unique Key(UK) : Atributo de uma tabela que tem todas as qualificações para ser uma chave primária. OBS. Muitos autores representa a chave primária de uma tabela com as colunas sublinhadas, e as chaves estrangeiras com uma linha acima das colunas. Ex: FUNCIONARIOS(MATRICULA , NOME , SALARIO , CPF , DEPTO) Ex: FUNCIONARIOS MATRICULA NOME SALARIO CPF DEPTO 01 Zé 200,00 12999666 01 02 Maria 1000,00 18765789 02 03 João 800,00 49555969 02 04 Margarida 150,00 89993393 01 ... DEPARTAMENTOS DEPTO DESCRICAO 01 Recursos Humanos 02 Diretoria Índices : É um conjunto de colunas da tabela, que são ordenadas visando uma maior performance nas consultas. OBS: O Banco de Dados Relacional permite a recuperação de um valor de qualquer coluna, independente da existência de índices para a coluna. View : Restringe o acesso do usuário aos dados. Ex: Pode-se restringir o acesso do usuário a coluna de SALARIO. FUNCIONATIOS_V01 MATRICULA NOME CPF DEPTO 01 Zé 12999666 01 02 Maria 18765789 02 03 João 49555969 02 04 Margarida 89993393 01 ... Stored Procedure : Um programa escrito em SQL que pode ser executado por uma aplicação, a diferença é que o processamento será executado no servidor. Trigger: Um programa escrito em SQL que está obrigatoriamente associado a pelo menos um evento(insersão, alteração ou exclusão de linhas) em uma tabela, e será executado de acordo com este evento. O trigger é usado para implementar restrições de integridade. � Modelo de Entidades e Relacionamentos (ER). Entidade Representa um objeto ou um conceito do mundo real. Ex: Aluno , disciplina , curso , funcionário e etc... Representação gráfica: Atributo – Representa uma característica da entidade, uma informação sobre a entidade. Ex: No caso de uma entidade ‘aluno’, podemos citar como atributo a sua matrícula , nome , endereço e outros. Tipos de Atributo: Atributos Identificadores : Deve ser capaz de identificar univocamente uma instância da entidade. Ex: Para a Faculdade, a matrícula do aluno é capaz de identificá-lo. Representação gráfica: Atributos Simples : Apenas uma característica ou informação da entidade. Ex: O nome de um aluno é uma informação útil. Representação gráfica: Relacionamento Representa um relacionamento entre duas entidades. Ex: O histórico escolar relaciona as disciplinas cursadas com o aluno. Representação gráfica:Cardinalidade Representa quantas vezes uma entidade pode se relacionar com a outra. OBS. Podemos indicar numericamente o mínimo e o máximo de vezes que uma entidade pode se relacionar com a outra.. Generalização / Especialização : É quando temos duas ou mais entidades com alguns atributos em comum e outros não. Na especialização os filhos devem ter o mesmo identificador do pai. A especialização pode ser ({Total|Parcial},{Exclusiva,Superposição}) Total : Quando todos os elementos da entidade pai, deve obrigatoriamente existir em pelo menos uma entidade filha. Parcial : Quando pode existir elementos na entidade pai e não existir nas entidades filhas. Exclusiva : Quando um elemento de uma especialização não pode existir em outra entidade do mesmo nível. Sobreposição : Quando um elemento de uma especialização pode existir em outra entidade do mesmo nível. Entidade Fraca O conceito de entidade fraca é quando uma entidade precisa do identificador de outra entidade para ajudar a se identificar. Ex: Importante : Uma entidade fraca TEM que se relacionar com a entidade forte no mínimo uma vez e no máximo uma vez Agregação : É quando há a necessidade de ligar um relacionamento a outro relacionamento. Ex: ou � Regras de conversão do Modelo Conceitual (E-R) para o Modelo Lógico. Nesta fase devemos identificar como tipo de colunas apenas os tipos genéricos, deixando para se preocupar com os tipos mais específico de dados no projeto físico, a não ser que o SGBD já tenha sido escolhido. Ex: char(n),Int, Datetime , etc... Entidade Toda entidade vira tabela e seu(s) atributo(s) identificadores formará a chave primária (PK). Aluno(Matricula, Nome, Endereco) Aluno Matricula Nome Eendereco Entidade Fraca A entidade fraca vira tabela e carrega o atributo identificador da entidade forte. A chave primária(PK) é formada concatenando-se o atributo identificador da entidade forte com o seu atributo identificador. Apartamento(Endereco, NumeroApartamento, QtdQuartos) Apartamento Endereco NumeroApartamento QtdQuartos Relacionamentos Cardinalidade 1:N : A tabela cujo a conectividade é N carregará o identificador da entidade onde a conectividade é 1 e formará uma chave estrangeira(FK). Obs. Caso o relacionamento tenha um mínimo 1, basta definir a FK não permitindo valores nulos. Cardinalidade 1:1 : A tabela que conter o menor número de linhas carregará o identificador da entidade onde conter o maior número de linhas e formará uma chave estrangeira(FK), nesta chave estrangeira deve ser criado um índice único(será visto mais tarde em Projeto Físico ). Cardinalidade N:N : O relacionamento transforma-se em tabela, carregando os identificadores das entidades que ele relaciona. Esses identificadores concatenados, formarão a chave primária(PK), e cada um dos identificadores separadamente serão chaves estrangeiras(FKs) para suas entidades/tabelas de origem. Obs. Caso o relacionamento seja com repetição, ele terá obrigatoriamente atributo identificador, neste caso, este atributo também fará parte da PK. Especialização Segue a regra para entidade, ou seja, vira tabela com as entidades filhas carregando a PK da entidade pai, sendo que a PK da entidade filha é uma FK para entidade pai. OBS: No caso da especialização é preciso analisar caso a caso. O caso mais genérico é transformar todas as entidades, pais e filhas em tabelas. Obs. No caso da especialização Total e Exclusiva pode-se colocar um campo a mais na entidade pai para saber em qual das filhas ela se encontra. Porém a duas outras maneiras de se implementar: No caso da especialização ser Total e Exclusiva e somente neste caso, poderemos transformar apenas as entidades filhas em tabelas. A ultima opção é transformar tudo em apenas uma tabela, porém o caso mais recomendado é o da especialização Parcial com Superposição. Agregação No caso da Agregação, terá de um lado do relacionamento uma entidade, e do outro lado, outro relacionamento. Neste caso deveremos tratar o relacionamento da ponta, como se fosse uma entidade. Algebra Relacional A álgebra relacional é um conjunto de operações de manipulação de tabela, e seu resultado é sempre uma tabela. Podemos dizer que existem dois grupos de operações algébricas: Operações tradicionais derivadas da teoria matemática dos conjuntos (união, interseção, diferença e produto cartesiano). Operações relacionais especiais (restrição ou seleção, projeção, junção e divisão) Operações tradicionais A B União A U B = A ( B = A – B = A * B = Operações relacionais especiais: Seleção : Seleciona todas as linhas de uma tabela que satisfaz alguma condição de seleção. Ex. Conjunto de alunos onde nome = ‘Zé’ . Projeção : Produz um resultado contendo um ou mais atributos da tabela, eliminando as linhas duplicadas. Junção : Junta duas ou mais tabelas através de um campo em comum.(A junção é quase sempre feita igualando uma FK com uma PK). Obs. A junção é o resultado de um produto cartesiano com uma seleção. Divisão : Seguindo um ER onde temos Alunos , Historico e Disciplinas. Podemos dizer que Alunos / Disciplinas são todos os alunos que se relacionam por histórico com todas as disciplinas. Ou seja os alunos que já se formaram. � Linguagem SQL. � Introdução ao SQL A linguagem SQL é subdividida em várias sub-linguagens. Através do comando select é implementado todas as operações algébricas. Sintaxe básica para o comando select. select [distinct] campo1,campo2,campo3 from tabela1[, tabela2, tabela3...] [where condição] onde: distinct : Serve para eliminar as linhas redundantes condição : Qualquer condição de seleção para restringir o resultado final. Ex1. select NOME from ALUNOS where ID_CURSO = 2 Este comando simples utiliza a operação algébrica da seleção, reparem que é feito uma seleção para o nome dos alunos apenas com o ID_CURSO = 2. O resultado deste comando será o conjunto de todos os alunos que estão matriculados no curso 2. Ex2. select ALUNOS.NOME , CURSO.NOME from ALUNOS , CURSOS where ALUNOS.ID_CURSO = CURSOS.ID_CURSO xe "Introdução ao SQL" Comandos SQL realizam tarefas como: pesquisar dados inserir, alterar e apagar linhas em uma tabela criar, modificar e apagar objetos do Banco de Dados controlar acesso para Banco de Dados e objetos do Banco de Dados garantir a consistência do banco de dados SQL*Plusxe "SQL*Plus" SQL*Plus é uma interface na qual os comandos SQL podem ser entendidos e executados. Comandos SQL*Plus são feitos no prompt do SQL>, eles não entram no buffer. Comando Descrição SAVE arquivo permite o corrente contexto do SQL buffer ser salvo em um arquivo GET arquivo chama texto previamente salvo START arquivo executa um comando previamente salvo em um arquivo. Comandos de arquivo são discutidos na Unidade 10 ED arquivo usa editor padrão em ordem para edição do arquivo salvo. SPOOL arquivo escreve todos os comandos subsequentes de saída no arquivo nomeado. O arquivo SPOOL é estendido por .LIS (LST em algum sistemas) SPO(OL) OFF/OUT OFF fecha o arquivo SPOOL e OUT fecha o arquivo SPOOL e emite o arquivo para impressora. DESC(RIBE) tabelamostra a estrutura de uma tabela. HELP invoca o interno sistema de ajuda ORACLE $O/S comando invoca um comando do sistema operacional. HOST comando mesma função acima CONN(ECT) usuário/senha Invoca outro usuário ORACLE EXIT sai SQL*Plus PROMPT texto mostra o texto quando executa o comando arquivo. ; mostra o texto que está no buffer. / Executa o texto que está no buffer. EXEC Executa um simples comando SQL como por exemplo uma stored procedure. � PL/SQL É uma linguagem de programação sofisticada que permite processar códigos diretamente no servidor, tornando o acesso rápido e eficiente. Procedimentos compatíveis: declaração de variáveis. tarefas (X := Y + Z) controles condicionais (IF, THEN, ELSE, ELSIF, GOTO) Loop (FOR, WHILE, EXIT, WHEN) manuseio de exceções (exception) Sintaxe de um bloco PL/SQL: DECLARE Procedure Área de declaração de variáveis Procedure BEGIN Procedure SQL Procedure SQL Comandos END Alguns Comandos SQL: SELECT Esse é o comando mais comum, usado para retirar dados de uma Tabela INSERT UPDATE DELETE São os comandos usados para o preenchimento de novas linhas, modificando linhas existentes e removendo linhas não desejadas das tabelas. CREATE ALTER DROP São usados dinamicamente para configurar, modificar e remover várias estruturas de dados como: tabelas, visões, índices. GRANT REVOKE Usados para dar ou remover privilégios e direitos de acesso de um usuário ou grupo de usuários ao Banco de Dados ORACLE e às estruturas dentro dele. SELECT SELECT * (asterisco seleciona todos os campos) FROM EMP(nome da tabela) Exemplo 1: SELECT SELECT EMPNO, ENAME,MGR FROM EMP; Resultado da pesquisa: EMPNO ENAME MGR 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782 Exemplo 2: SELECT * FROM EMP; EMPNO ENAME JOB MGR HIREDATE MGR SAL COMM DEPTNO 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDEN SALESMAN CLERK CLERK ANALYST CLERK 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782 17/12/80 20/02/81 22/02/81 02/04/81 28/09/81 01/05/81 09/06/81 19/04/87 17/11/81 08/09/81 23/05/87 03/12/81 03/12/81 23/01/82 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782 300 500 1400 0 20 30 30 20 30 30 10 20 10 30 20 30 20 10 Expressões Aritméticas Expressões Aritméticas podem conter nome de colunas, valores numéricos, constantes e operadores aritméticos: Operadores Descrições + Adição - Subtração * Multiplicação / Divisão Exemplo: SELECT ENAME, SAL*12, COM FROM EMP; ENAME SAL*12 COMM SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER 9600 19200 15000 35700 15000 34200 29400 36000 60000 18000 13200 11400 36000 15600 300 500 1400 0 A prioridade é *,/, então +,-. No exemplo seguinte a multiplicação (250*12) é avaliada primeiro; então o valor do salário é adicionado no resultado da multiplicação (3000). Exemplo: Select NOME, sal + 250 * 12 from emp; ENAME SAL+250*12 SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER 3800 4600 4250 5975 4250 5850 5450 6000 8000 4500 4100 3950 6000 4300 Parênteses podem ser usados para especificar a ordem na qual serão executados es operadores, se, por exemplo, a adição e requerida antes da multiplicação. Exemplo: Select NOME, (sal + 250) * 12 from emp; ENAME (sal + 250) * 12 SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER 12600 22200 18000 38700 18000 37200 32400 39000 63000 21000 16200 14400 39000 18600 Colunas Sinônimas Quando mostramos o resultado de uma pesquisa, o SQL*Plus normalmente usa-se o nome das colunas selecionadas como cabeçalho. Você pode modificar o cabeçalho de uma coluna usando sinônimos(alias). Exemplo: SELECT SAL*12 GANHO_ANUAL, COMM FROM EMP; GANHO_ANUAL COMM 9600 19200 15000 35700 15000 34200 29400 36000 60000 18000 13200 11400 36000 15600 300 500 1400 0 Operador de Concatenação O Operador de Concatenação (||) permite que as colunas sejam juntadas com outras colunas, expressões aritméticas ou valores constantes para criar uma expressão alfanumérica. Para combinar COD e NOME e obter o sinônimo EMPREGADO, observe o exemplo abaixo: Exemplo: SELECT EMPNO||ENAME EMPREGADO FROM EMP; EMPREGADO 7369SMITH 7499ALLEN 7521WARD 7566JONES 7654MARTIN 7698BLAKE 7782CLARK 7788SCOTT 7839KING 7844TURNER 7876ADAMS 7900JAMES 7902FORD 7934MILLER Literais Literais são um ou mais caracteres, expressões ou números, incluídos na lista do SELECT. Um literal na lista do SELECT terá uma saída para cada linha retornada. Literais de livre formatos de textos podem ser incluídos no resultado da pesquisa e são tratados como uma coluna na lista do SELECT. Datas e caracteres alfanuméricos devem ser colocados entre aspas simples(‘); números não precisam de aspas simples. As declarações seguintes contém literais selecionados com concatenação e colunas sinônimas. Exemplo: SELECT EMPNO||'-'||ENAME EMPREGADO, 'WORKS IN DEPARTMENT', DEPTNO FROM EMP; EMPREGADO 'WORKS IN DEPARTMENT' DEPTNO 7369-SMITH 7499-ALLEN 7521-WARD 7566-JONES 7654-MARTIN 7698-BLAKE 7782-CLARK 7788-SCOTT 7839-KING 7844-TURNER 7876-ADAMS 7900-JAMES 7902-FORD 7934-MILLER WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT 20 30 30 20 30 30 10 20 10 30 20 30 20 10 Manuseando Valores Nulos Um valor nulo é um valor indisponível e desconhecido. O valor nulo não é zero. Zero é um número. Se algum valor de uma coluna em uma expressão for nulo, o resultado será nulo. Exemplo: SELECT ENAME, SAL*12+COMM GANHO_ANUAL FROM EMP; ENAME GANHO_ANUAL SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER 19500 15500 16400 18000 Na ordem para realizar o resultado para todos os empregados, é necessário converter os valores nulos para numéricos. Nós usamos a função NVL para converter valores nulos para não nulos. NVL conta com dois argumentos: 1- umaexpressão 2- um valor que será retornado caso o valor do primeiro argumento for nulo. Note que você pode usar a função NVL para converter qualquer tipo de valor nulo. NVL(COLUNA_DATA_NULA,’30-OCT-74’) NVL(COLUNA_NUMÉRICA_NULA,21) NVL(COLUNA_ALFANUMÉRICA_NULA,’QUALQUER VALOR’) Prevenindo a Seleção de Linhas Duplicadas – Cláusula Distinct Para eliminar valores duplicados no resultado, incluímos o DISTINCT Exemplo sem a clausula distinct: Para eliminar os valores Duplicados: SELECT DEPTNO SELECT DISTINCT DEPTNO FROM EMP; FROM EMP; DEPTNO DEPTNO 20 10 30 20 30 30 20 30 30 10 20 10 30 20 30 20 10 Várias colunas podem ser especificadas depois do DISTINCT Exemplo: SELECT DISTINCT DEPTNO, JOB FROM EMP; DEPTNO JOB ------- --------- 10 CLERK 10 MANAGER 10 PRESIDENT 20 ANALYST 20 CLERK 20 MANAGER 30 CLERK 30 MANAGER 30 SALESMAN A clausula ORDER BY A clausula ORDER BY pode ser usada para ordenar as linhas. Se usado, o ORDER BY deve ser a última clausula da declaração SELECT. Para ordenar pelo NOME, faça: Exemplo: SELECT ENAME, JOB, SAL*12, DEPTNO FROM EMP ORDER BY ENAME; ENAME JOB SAL*12 DEPTNO ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH TURNER WARD CLERK SALESMAN MANAGER MANAGER ANALYST CLERK MANAGER PRESIDENT SALESMAN CLERK ANALYST CLERK SALESMAN SALESMAN 13200 19200 34200 29400 36000 11400 35700 60000 15000 15600 36000 9600 18000 15000 20 30 30 10 20 30 20 10 30 10 20 20 30 30 Ordenação descendente Para inverter essa ordem, use o comando DESC(Decrescente) depois do nome das colunas da clausula ORDER BY. Exemplo: SELECT ENAME, JOB, HIREDATE DATA DESC FROM EMP ORDER BY HIREDATE DESC; ENAME JOB DATA ADAMS SCOTT MILLER JAMES FORD KING MARTIN TURNER CLARK BLAKE JONES WARD ALLEN SMITH CLERK ANALYST CLERK CLERK ANALYST PRESIDENT SALESMAN SALESMAN MANAGER MANAGER MANAGER SALESMAN SALESMAN CLERK 23/05/87 19/04/87 23/01/82 03/12/81 03/12/81 17/11/81 28/09/81 08/09/81 09/06/81 01/05/81 02/04/81 22/02/81 20/02/81 17/12/80 Ordenação por várias colunas. É possível na clausula ORDER BY usar mais de uma coluna. O limite de colunas é o número de colunas da tabela. Se algumas ou todas são invertidas especifique DESC depois de alguma ou cada uma das colunas. A clausula ORDER BY é usada na pesquisa. O comando não altera a ordem dos dados que estão armazenados no Banco de Dados ORACLE. A Clausula WHERE A clausula WHERE corresponde aos Operadores de Restrições da Álgebra Relacional. Sintaxe: SELECT coluna(s) FROM tabela(s) WHERE certa condição a ser encontrada A clausula WHERE pode comparar valores em uma coluna, valores literais, expressões aritméticas ou funções. Operadores de comparação são usados na clausula WHERE e podem ser divididos em duas categorias: Lógicos e SQL. Operadores Lógicos Esses operadores testam as seguintes condições: = igual a > maior que >= maior e igual a < menor que <= menor e igual a Alfanuméricos e Datas na clausula WHERE devem estar entre aspas simples. Para listar os nomes, números, emprego e departamentos de todos os escriturários(CLERK): SELECT ENAME, EMPNO, JOB, DEPTNO FROM EMP WHERE JOB = 'CLERK'; ENAME EMPNO JOB DEPTNO SMITH ADAMS JAMES MILLER 7369 7876 7900 7934 CLERK CLERK CLERK CLERK 20 20 30 10 Para encontrar todos os nomes de departamentos com número maior que 20, faça: SELECT DEPTNO, DNAME FROM DEPT WHERE DEPTNO > 20; DEPTNO DNAME 30 40 SALES OPERATIONS Comparando uma coluna com outra coluna na mesma linha: Exemplo: SELECT ENAME, SAL, COMM FROM EMP WHERE COMM > SAL; ENAME SAL COMM ---------- --------- --------- MARTIN 1250 1400 Operadores SQL Existem quatro operadores SQL que operam com todos os tipos de dados: BETWEEN ... AND ... Entre dois valores (inclusive) IN(Lista) Compara uma lista de valores LIKE Compara um parâmetro alfanumérico IS NULL É um valor nulo O Operador BETWEEN Testa um faixa de valores inclusive. Exemplo: SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000; ENAME SAL ALLEN WARD MARTIN TURNER ADAMS MILLER 1600 1250 1250 1500 1100 1300 O Operador IN Testa os valores especificados em uma lista. Para encontrar empregados que tenham um dos três números de MAT, faça: SELECT EMPNO, ENAME, SAL, MGR FROM EMP WHERE MGR IN (7902,7566,7788) EMPNO ENAME SAL MGR 7369 7788 7876 7902 SMITH SCOTT ADAMS FORD 800 3000 1100 3000 7902 7566 7788 7566 Podemos usar o comando select dentro da cláusula in. O Operador LIKE Algumas vezes você precisa procurar valores que não conhece exatamente. Usando o operador LIKE é possível selecionar linhas combinando parâmetros alfanuméricos. Dois símbolos podem ser usados para construir uma linha de procura. Símbolo: % Várias seqüência de zero ou mais caracteres _ um número desejado de caracteres Para listar todos os empregados os quais o nome começa com a letra S, faça: SELECT ENAME FROM EMP WHERE ENAME LIKE 'S%'; ENAME ---------- SMITH SCOTT Eles podem ser usados para encontrar um determinado número de caracteres. Por exemplo para listar todos empregados que tenham exatamente quatro caracteres de tamanho do nome: SELECT ENAME FROM EMP WHERE ENAME LIKE '____'; ENAME ---------- WARD KING FORD O % e o _ podem ser usados em várias combinações com literais alfanuméricos. Operador IS NULL Para encontrar unicamente todos os empregados que não tenham gerente, você testará um valor nulo: SELECT ENAME, MGR FROM EMP WHERE MGR IS NULL; ENAME MGR ---------- ----- KING Expressões Negativas Os operadores seguintes são testes de negação: <> diferente (todos sistemas operacionais) NOT BETWEEN tudo que estiver fora da faixa NOT IN tudo que não esteja na lista NOT LIKE tudo que não contenha a linha de caracteres IS NOT NULL tudo que não for nulo Para encontrar empregados que tenham o salário fora da faixa, faça: SELECT ENAME, SAL FROM EMP WHERE SAL NOT BETWEEN 1000 AND 2000; ENAME SAL SMITH JONES BLAKE CLARK SCOTT KING JAMES FORD 800 2975 2850 2450 3000 5000 950 3000 Para encontrar os empregados os quais o cargo não comece com a letra M, faça: SELECT ENAME, JOB FROM EMP WHERE JOB NOT LIKE 'M%'; ENAME JOB SMITH ALLEN WARD MARTIN SCOTT KING TURNER ADAMS JAMES FORD MILLER CLERK SALESMAN SALESMAN SALESMAN ANALYST PRESIDEN SALESMAN CLERK CLERK ANALYST CLERK Para encontrar todos os empregados que tenham um gerente, faça: SELECT ENAME, MGR FROM EMP WHERE MGR IS NOT NULL; ENAME MGR SMITH ALLEN WARD JONES MARTINBLAKE CLARK SCOTT TURNER ADAMS JAMES FORD MILLER 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782 Nota: Se um valor nulo é usado em uma comparação, então o operador de comparação deve ser IS ou IS NOT NULL. Se esses operadores não forem usados e valores nulos forem comparados, o resultado será sempre FALSO. Por exemplo, COMM <> NULL será sempre FALSO. O resultado será falso porque um valor nulo não pode ser igual ou não igual a qualquer outro valor. Pesquisando Dados com Múltiplas Condições Os operadores AND e OR devem ser usados para fazer composições de expressões lógicas. O predicado AND espera que ambas as condições sejam verdadeiras, enquanto que o predicado OR espera que uma das condições seja verdadeira. Nos seguintes exemplos as condições são as mesmas, o predicado é diferente. Veja como o resultado é dramaticamente alterado. Para encontrar todos os escriturários que ganhem entre 1000 e 2000, faça: SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 AND JOB = 'CLERK'; COD ENAME JOB SAL ----- - --------- ---------- ---------- 7876 ADAMS CLERK 1,100.00 7934 MILLER CLERK 1,300.00 Para encontrar todos os empregados que são escriturários ou todos que ganhem entre 1000 e 2000 faça: SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 OR JOB = 'CLERK'; EMPNO ENAME JOB SAL 7369 7499 7521 7654 7844 7876 7900 7934 SMITH ALLEN WARD MARTIN TURNER ADAMS JAMES MILLER CLERK SALESMAN SALESMAN SALESMAN SALESMAN CLERK CLERK CLERK 800 1600 1250 1250 1500 1100 950 1300 Você pode combinar AND e OR na mesma expressão lógica. Quando AND e OR aparecerem na mesma clausula WHERE, o AND é realizado primeiro depois o OR. Se AND não interfere sobre o OR a seguinte declaração SQL retornará todos os gerentes com salário acima de 1500 e todos os vendedores: SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP WHERE SAL > 1500 AND JOB = 'MANAGER' OR JOB = 'SALESMAN'; EMPNO ENAME JOB SAL DEPTNO 7499 7521 7566 7654 7698 7782 7844 ALLEN WARD JONES MARTIN BLAKE CLARK TURNER SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER SALESMAN 1600 1250 2975 1250 2850 2450 1500 30 30 20 30 30 10 30 Todos os operadores são organizados em uma hierarquia. Numa Expressão, as operações são feitas na ordem de sua precedência, do maior para o menor. Onde os operadores de igual precedentes são usados próximo a outro, eles são feitos da esquerda para direita. 1- Todos os comparativos e Operadores SQL tem igual precedente: =, !=, <, >, <=, >=, BETWEEN ... AND ..., IN, LIKE, IS NULL. 2- NOT (para inverter o resultado das expressões lógicas: WHERE NOT (SAL>2000)) 3- AND 4- OR Sempre que você estiver em dúvida sobre qual dos dois operadores será feito primeiro quando a expressão é avaliada, use parênteses aumentar a legibilidade. Suponha que você queira encontrar todos os gerentes, em vários departamentos, e todos os escriturários no departamento 10 unicamente: SELECT * FROM EMP WHERE JOB = 'MANAGER' OR (JOB = 'CLERK' AND DEPTNO = 10); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7566 7698 7782 7934 JONES BLAKE CLARK MILLER MANAGER MANAGER MANAGER CLERK 7839 7839 7839 7782 02/04/81 01/05/81 09/06/81 23/01/82 2975 2850 2450 1300 20 30 10 10 O parênteses acima não é necessário, por que o AND é precedente ao OR, mas ele esclarece o significado da expressão. Funções As Funções são usadas para manipular dados. Elas aceitam um ou mais argumentos e retornam um valor. Um argumento é uma constante, refere-se à variável, expressão ou coluna. Sintaxe: função_nome (agrumento1,argument2,...) Funções podem ser usadas para: Cálculos sobre datas modificar valores de itens individuais manipular saída para grupos de linhas alterar formatos de datas para mostrá-los Existem diferentes tipos de funções: ALFANUMÉRICAS NUMÉRICAS DATA CONVERSÃO FUNÇÕES QUE ACEITAM VÁRIOS TIPOS DE DADOS GRUPO Algumas funções operam unicamente sobre linhas simples; outras manipulam grupos de linhas. Funções de Linha Única: agem sobre cada linha retornada na pesquisa retornam um resultado por linha esperam um ou mais argumento do usuário podem ser aninhadas podem ser usadas com variáveis do usuário, colunas, expressões; podem ser usadas, por exemplo, nas cláusulas SELECT, WHERE, ORDER BY. Funções Alfanuméricas Funções Alfanuméricas aceitam dados alfanuméricos e podem retornar valores alfanuméricos ou numéricos. A função seguinte influencia na construção de valores alfanuméricos. LOWER LOWER(col/value) fornece valores alfanuméricos os quais estão em letra maiúscula ou minúscula e retornam em letra minúscula Para mostrar o nome dos departamentos em letra minúscula e a constante CURSO_SQL, faça: SELECT LOWER(DEPTNO), LOWER('CURSO_SQL') FROM DEPT; LOWER(DEPTNO) LOWER('CURSO_SQL') 10 20 30 40 curso_sql curso_sql curso_sql curso_sql UPPER UPPER(col/value) fornece caracteres alfanuméricos, os quais estão em letra maiúscula ou minúscula e retorna em letra maiúscula. No exemplo seguinte, a função UPPER força o usuário entrar em letra maiúscula. SELECT ENAME FROM EMP WHERE ENAME = UPPER('&NOME'); Enter value for NOME : smith ENAME ---------- SMITH INITCAP INITCAP(col/value) força a primeira letra da palavras ser em maiúscula e o resto minúscula Exemplo: SELECT INITCAP(DNAME), INITCAP(LOC) FROM DEPT; INITCAP(DNAME) INITCAP(LOC) Accounting Research Sales Operations New York Dallas Chicago Boston LPAD e RPAD LPAD(col/value,n,’caracter’) Preenche a coluna ou valor literal da esquerda para o total tamanho de n posições. Os principais espaços estão preenchidos com o ‘caracter’. Se o caracter for omitido o valor padrão é espaços. SELECT LPAD(DNAME,20,'*'), LPAD(DNAME,20), LPAD(DEPTNO,20,'.') FROM DEPT; LPAD(DNSMR,20,'*') LPAD(DNAME,20) LPAD(DEPTNO,20,'.') *************RESEACH RESEACH ..................20 ***************SALES SALES ..................30 **********OPERATIONS OPERATIONS ..................40 ***********ACCOUTING ACCOUNTING ..................10 RPAD(col/value,n,’caracter’) preenche a coluna ou valor literal da direita para o total tamanho de n posições. Os espaços a direita são preenchidos com o ‘caracter’. Se o ‘caracter’ for omitido o preenchimento fica em branco. Exemplo: SELECT RPAD(DNAME,20,'*'), RPAD(DNAME,20), RPAD(DEPTNO,20,'.') FROM DEPT; RPAD(DNAME,20,'*') RPAD(DNAME,20) RPAD(DEPTNO,20,'.') ACCOUTING*********** ACCOUNTING 10.................. RESEACH************* RESEACH 20.................. SALES*************** SALES 30.................. OPERATIONS********** OPERATIONS 40.................. A segunda coluna é alinhada para a direita com brancos por padrão. SUBSTR SUBSTR(col/value,pos,n) Retorna uma linha de n caracteres da coluna ou valor literal, iniciando na posição número pos. Se n é omitido a linha é extraída da posição pos até o fim. Exemplo: SELECT SUBSTR('ORACLE',2,4), SUBSTR(DNAME,2), SUBSTR(DNAME,3,5) FROM DEPT; SUBSTR('ORACLE',2,4) SUBSTR(DNAME,2)
Compartilhar