Baixe o app para aproveitar ainda mais
Prévia do material em texto
Banco de Dados Samurai Senai 2020.2 Conteúdo 0 - Conceitos 1 - Sobre banco de dados 2 - Tipos de bancos de dados 3 - O banco de dados relacional 4 - Modelagem do banco de dados 5 - SQL - A linguagem do banco de dados 6- DDL 7 - DML 8 - Selects 9 - Views 10 - Procedures 11 - Functions 0 - Conceitos DADO: Informação sobre algo específico, ou ainda uma informação qualquer. BANCO DE DADOS: é uma coleção de dados inter-relacionados, representando informações sobre um domínio específico. BASE DE DADOS: São fragmentos de um Banco de Dados. Como num quebra cabeça, união das peças formam uma peça maior ou única. SGBD: Sistema de Gerenciamentos de Bancos de Dados. BANCO DE DADOS RELACIONAL: Os fragmentos do Banco de Dados (Base de Dados) em algum momento precisam ter uma relação entre si para que o seu objetivo (uma peça única e maior) seja alcançado. Esta técnica é chamada de Relacionamento e está basicamente definida na conexão entre as informações do Banco. SQL (Structured Query Language): Linguagem para Pesquisas e Consultas em Bancos de Dados. Um BD moderno deve ser compatível com SQL. TABELAS: Local de Armazenamento das informações da Base de Dados. REGISTROS: Os registros são a essência dos dados, ou seja a informação real que está armazenada na Tabela. CAMPOS: São características que definem o dado a ser armazenado. O nome do Registro. CHAVES: A forma de conexão entre as Tabelas. O relacionamento é definido por meio das Chaves. PRIMARY KEY: Ou chave primária. É a principal Chave da Tabela. Toda tabela deve ter a sua. FOREIGN KEY: Uma chave estrangeira (FK) é uma coluna ou combinação de colunas que é usada para estabelecer e impor um link entre os dados em duas tabelas. Você pode criar uma chave estrangeira definindo uma restrição FOREIGN KEY ao criar ou modificar uma tabela. 1 - Sobre banco de dados Um banco de dados é uma coleção organizada de informações - ou dados - estruturadas, normalmente armazenadas eletronicamente em um sistema de computador. Um banco de dados é geralmente controlado por um sistema de gerenciamento de banco de dados (DBMS). Juntos, os dados e o DBMS, juntamente com os aplicativos associados a eles, são chamados de sistema de banco de dados, geralmente abreviados para apenas banco de dados. Os dados nos tipos mais comuns de bancos de dados em operação atualmente são modelados em linhas e colunas em uma série de tabelas para tornar o processamento e a consulta de dados eficientes. Os dados podem ser facilmente acessados, gerenciados, modificados, atualizados, controlados e organizados. A maioria dos bancos de dados usa a linguagem de consulta estruturada (SQL) para escrever e consultar dados. Bancos de dados e planilhas (como o Microsoft Excel) são modos convenientes de armazenar informações. As principais diferenças entre os dois são: Como os dados são armazenados e manipulados Quem pode acessar os dados Quantos dados podem ser armazenados As planilhas foram originalmente projetadas para um usuário e suas características refletem isso. São ótimos para um único usuário ou um pequeno número de usuários que não precisam fazer manipulações de dados extremamente complicadas. Bancos de dados, por outro lado, são projetados para conter coleções muito maiores de informações organizadas, quantidades enormes, às vezes. Os bancos de dados permitem que vários usuários, ao mesmo tempo, acessem e consultem com rapidez e segurança os dados usando lógica e linguagem altamente complexas. Hoje, os grandes bancos de dados corporativos geralmente suportam consultas muito complexas e devem fornecer respostas quase instantâneas a essas consultas. Como resultado, os administradores de bancos de dados são constantemente chamados para empregar uma ampla variedade de métodos que ajudam a melhorar o desempenho. Alguns desafios comuns que eles enfrentam incluem: Absorção de aumentos significativos no volume de dados. A explosão de dados provenientes de sensores, máquinas conectadas e dezenas de outras fontes mantém os administradores de bancos de dados lutando para gerenciar e organizar os dados de suas empresas com eficiência. Garantia da segurança de dados. Violações de dados estão acontecendo em todos os lugares nos dias de hoje, e os hackers estão ficando mais inventivos. É mais importante do que nunca garantir que os dados estejam seguros, mas também acessíveis aos usuários. Acompanhando a demanda. No atual ambiente de negócios de rápido movimento, as empresas precisam de acesso em tempo real aos seus dados para apoiar a tomada de decisões em tempo hábil e aproveitar novas oportunidades. Gerenciamento e manutenção do banco de dados e da infraestrutura. Os administradores de banco de dados devem observar continuamente o banco de dados em busca de problemas e executar a manutenção preventiva, bem como aplicar atualizações e correções de software. À medida que os bancos de dados se tornam mais complexos e o volume de dados aumenta, as empresas enfrentam a despesa de contratar mais talentos para monitorar e ajustar seus bancos de dados. Remoção de limites na escalabilidade. Uma empresa precisa crescer se quiser sobreviver, e seu gerenciamento de dados deve crescer junto com ela. Mas é muito difícil para os administradores de banco de dados prever a capacidade que a empresa precisará, principalmente com bancos de dados on-premise. Resolver todos esses desafios pode consumir muito tempo e impedir que os administradores de banco de dados executem mais funções estratégicas. 2 - Tipos de bancos de dados Existem muitos tipos diferentes de bancos de dados. O melhor banco de dados para uma organização específica depende de como a organização pretende usar os dados. Bancos de dados relacionais. Os bancos de dados relacionais se tornaram dominantes na década de 1980. Os itens em um banco de dados relacional são organizados como um conjunto de tabelas com colunas e linhas. A tecnologia de banco de dados relacional fornece a maneira mais eficiente e flexível de acessar informações estruturadas. Bancos de dados orientados a objetos. As informações em um banco de dados orientado a objetos são representadas na forma de objetos, como na programação orientada a objetos. Bancos de dados distribuídos. Um banco de dados distribuído consiste em dois ou mais arquivos localizados em sites diferentes. O banco de dados pode ser armazenado em vários computadores, localizados no mesmo local físico ou espalhados por diferentes redes. Data warehouses. Um repositório central de dados, um data warehouse é um tipo de banco de dados projetado especificamente para consultas e análises rápidas. Bancos de Dados NoSQL. Um NoSQL, ou banco de dados não relacional, permite que dados não estruturados e semiestruturados sejam armazenados e manipulados (em contraste com um banco de dados relacional, que define como todos os dados inseridos no banco de dados devem ser compostos). Os bancos de dados NoSQL se tornaram populares à medida que os aplicativos web se tornaram mais comuns e mais complexos. Bancos de dados gráficos. Um banco de dados gráfico armazena dados em termosde entidades e os relacionamentos entre entidades. Bancos de dados OLTP. Um banco de dados OLTP é um banco de dados rápido e analítico projetado para um grande número de transações realizadas por vários usuários. Esses são apenas alguns dos vários tipos de bancos de dados em uso atualmente. Outros bancos de dados menos comuns são adaptados para funções científicas, financeiras ou outras muito específicas. Além dos diferentes tipos de banco de dados, as mudanças nas abordagens de desenvolvimento de tecnologia e os avanços dramáticos, como a nuvem e a automação, estão impulsionando os bancos de dados em direções totalmente novas. Alguns dos mais recentes bancos de dados incluem Bancos de dados de código aberto. Um sistema de banco de dados de código aberto é aquele cujo código-fonte é código aberto; esses bancos de dados podem ser bancos de dados SQL ou NoSQL. Bancos de dados em nuvem. Um banco de dados em nuvem é uma coleção de dados, estruturados ou não estruturados, que residem em uma plataforma de computação em nuvem privada, pública ou híbrida. Existem dois tipos de modelos de banco de dados em nuvem: tradicional e banco de dados como um serviço (DBaaS). Com o DBaaS, as tarefas administrativas e a manutenção são executadas por um provedor de serviços. Banco de dados multimodelo. Bancos de dados multimodelo combinam diferentes tipos de modelos de banco de dados em um back-end único e integrado. Isso significa que eles podem acomodar vários tipos de dados. Banco de dados de documentos/JSON. Projetado para armazenar, recuperar e gerenciar informações orientadas a documentos, os bancos de dados de documentos são uma maneira moderna de armazenar dados no formato JSON, em vez de linhas e colunas. Bancos de dados autônomos. Os bancos de dados independentes mais novos e inovadores (também conhecidos como bancos de dados autônomos) são baseados em nuvem e usam machine learning para automatizar o ajuste de banco de dados, segurança, backups, atualizações e outras tarefas de gerenciamento de rotina tradicionalmente executadas por administradores de banco de dados. 3 - O banco de dados relacional Um banco de dados relacional é um tipo de banco de dados que armazena e fornece acesso a pontos de dados relacionados entre si. Bancos de dados relacionais são baseados no modelo relacional, uma maneira intuitiva e direta de representar dados em tabelas. Em um banco de dados relacional, cada linha na tabela é um registro com uma ID exclusiva chamada chave. As colunas da tabela contêm atributos dos dados e cada registro geralmente tem um valor para cada atributo, facilitando o estabelecimento das relações entre os pontos de dados. Um Exemplo de Banco de Dados Relacional Veja aqui um exemplo simples de duas tabelas que uma pequena empresa pode usar para processar pedidos de seus produtos. A primeira tabela é de informações do cliente, de forma que cada registro inclui o nome, endereço, informações de envio e faturamento, número de telefone e outras informações de contato de um cliente. Cada bit de informação (cada atributo) está em sua própria coluna, e o banco de dados atribui uma ID única (uma chave) a cada linha. Na segunda tabela, a de um pedido do cliente , cada registro inclui a ID do cliente que fez o pedido, o produto solicitado, a quantidade, o tamanho e a cor selecionados e assim por diante, mas não o nome ou as informações de contato. Essas duas tabelas têm apenas uma coisa em comum: a coluna ID (a chave). Mas por causa dessa coluna comum, o banco de dados relacional pode criar uma relação entre as duas tabelas. Dessa forma, quando o aplicativo de processamento de pedidos da empresa envia um pedido ao banco de dados, o banco de dados pode ir à tabela de pedidos do cliente, obter as informações corretas sobre o pedido do produto e usar a ID do cliente dessa tabela para procurar as informações de faturamento e envio do cliente na tabela de informações do cliente. O warehouse poderá obter o produto correto, o cliente receberá a entrega do pedido oportunamente e a empresa receberá o pagamento. Como os Bancos de Dados Relacionais são Estruturados O modelo relacional significa que as estruturas de dados lógicas: tabelas de dados, exibições e índices são separadas das estruturas de armazenamento físico. Essa separação significa que os administradores de banco de dados podem gerenciar o armazenamento de dados físicos sem afetar o acesso a esses dados como uma estrutura lógica. Por exemplo, a renomeação de um arquivo de banco de dados não renomeia as tabelas armazenadas nele. A distinção entre lógico e físico também se aplica às operações do banco de dados, que são ações claramente definidas que permitem aos aplicativos manipular os https://www.oracle.com/br/database/what-is-database.html dados e as estruturas do banco de dados. As operações lógicas permitem que um aplicativo especifique o conteúdo necessário e as operações físicas determinam como esses dados devem ser acessados e, em seguida, executa a tarefa. Para garantir que os dados sejam sempre precisos e acessíveis, os bancos de dados relacionais seguem determinadas regras de integridade. Por exemplo, uma regra de integridade pode especificar que linhas duplicadas não são permitidas em uma tabela para eliminar o potencial de informações errôneas que entram no banco de dados. O Modelo Relacional Nos primeiros anos de bancos de dados, todos os aplicativos armazenavam dados em sua própria estrutura única. Quando os desenvolvedores queriam criar aplicativos para usar esses dados, precisavam conhecer muito a estrutura de dados específica para encontrar os dados de que precisavam. Essas estruturas de dados eram ineficientes, difíceis de manter e difíceis de otimizar para oferecer um bom desempenho de aplicativos. O modelo de banco de dados relacional foi projetado para resolver o problema de várias estruturas de dados arbitrárias. O modelo relacional forneceu uma maneira padrão de representar e consultar dados que poderiam ser usados por qualquer aplicativo. Desde o início, os desenvolvedores reconheceram que a principal força do modelo de banco de dados relacional estava no uso de tabelas, que era uma maneira intuitiva, eficiente e flexível de armazenar e acessar informações estruturadas. Com o tempo, outra força do modelo relacional surgiu quando os desenvolvedores começaram a usar a linguagem de consulta estruturada (SQL) para criar e consultar dados em um banco de dados. Por muitos anos, a SQL tem sido amplamente utilizada como a linguagem para consultas de banco de dados. Com base na álgebra relacional, a SQL fornece uma linguagem matemática internamente consistente que facilita a melhoria do desempenho de todas as consultas ao banco de dados. Em comparação, outras abordagens devem definir consultas individuais. Benefícios dos Bancos de Dados Relacionais O modelo relacional simples, mas eficiente, é usado por organizações de todos os tipos e tamanhos para uma ampla variedade de necessidades de informações. Os bancos de dados relacionaissão usados para rastrear inventários, processar transações de comércio eletrônico, gerenciar grandes quantidades de informações essenciais sobre o cliente e muito mais. Um banco de dados relacional pode ser considerado para qualquer necessidade de informações na qual os pontos de dados se relacionam entre si e devem ser gerenciados de maneira segura e consistente, com base em regras. Bancos de dados relacionais existem desde os anos de 1970. Atualmente, as vantagens do modelo relacional continuam a torná-lo o modelo mais amplamente aceito para bancos de dados. Consistência de Dados O modelo relacional é o melhor em manter a consistência de dados entre aplicativos e cópias de banco de dados (chamadas de instâncias). Por exemplo, quando um cliente deposita dinheiro em um caixa eletrônico e analisa o saldo da conta em um celular, o cliente espera ver esse depósito refletido imediatamente em um saldo atualizado da conta. Os bancos de dados relacionais se destacam nesse tipo de consistência de dados, garantindo que várias instâncias de um banco de dados tenham os mesmos dados o tempo todo. É difícil para outros tipos de bancos de dados manter esse nível de consistência oportunamente com grandes quantidades de dados. Alguns bancos de dados recentes, como o NoSQL, podem fornecer somente “consistência eventual.” Sob este princípio, quando o banco de dados é dimensionado ou quando vários usuários acessam os mesmos dados ao mesmo tempo, os dados precisam de algum tempo para “serem atualizados.” A consistência eventual é aceitável para alguns usos, como manter listagens em um catálogo de produtos, mas para operações comerciais essenciais, como transações de carrinho de compras, o banco de dados relacional ainda é o padrão ouro. Compromisso e Atomicidade Os bancos de dados relacionais lidam com regras e políticas de negócios em um nível muito granular, com políticas rígidas sobre compromisso (isto é, fazer uma alteração no banco de dados permanente). Por exemplo, considere um banco de dados de inventário que rastreie três peças que são sempre usadas juntas. Quando uma peça é retirada do inventário, as outras duas também devem ser retiradas. Se uma das três peças não estiver disponível, nenhuma das peças deve ser retirada. Todas as três peças devem estar disponíveis antes que o banco de dados confirme. Um banco de dados relacional não assumirá o compromisso por uma peça até que saiba que pode confirmar todas as três. Essa capacidade de compromisso multifacetada é chamada atomicidade. A atomicidade é a chave para manter os dados precisos no banco de dados e garantir que eles estejam em conformidade com regras, regulamentos e políticas da empresa. ACID e Bancos de Dados Relacionais Quatro propriedades essenciais definem as transações do banco de dados relacional: atomicidade, consistência, isolamento e durabilidade, normalmente referidos como ACID. ● A atomicidade define todos os elementos que compõem uma transação completa do banco de dados. ● A consistência define as regras para manter os pontos de dados em um estado correto após uma transação. ● O isolamento mantém o efeito de uma transação invisível para outras pessoas até ser confirmada, para evitar confusão. ● A durabilidade garante que as alterações de dados se tornem permanentes quando a transação for confirmada. Procedimentos Armazenados e Bancos de Dados Relacionais O acesso a dados envolve muitas ações repetitivas. Por exemplo, uma consulta simples para obter informações de uma tabela de dados pode precisar ser repetida centenas ou milhares de vezes para produzir o resultado desejado. Essas funções de acesso a dados requerem algum tipo de código para acessar o banco de dados. Os desenvolvedores de aplicativos não querem criar um novo código para essas funções a cada aplicativo novo. Felizmente, os bancos de dados relacionais permitem procedimentos armazenados, que são blocos de código que podem ser acessados com uma simples chamada de aplicativo. Por exemplo, um único procedimento armazenado pode fornecer identificação de registro consistente para usuários de vários aplicativos. Os procedimentos armazenados também podem ajudar os desenvolvedores a garantir que determinadas funções de dados no aplicativo sejam implementadas de uma maneira específica. Bloqueio e Simultaneidade de Banco de Dados Os conflitos podem surgir em um banco de dados quando vários usuários ou aplicativos tentam alterar os mesmos dados ao mesmo tempo. Técnicas de bloqueio e simultaneidade reduzem o potencial de conflitos, mantendo a integridade dos dados. O bloqueio impede que outros usuários e aplicativos acessem dados enquanto estão sendo atualizados. Em alguns bancos de dados, o bloqueio se aplica à tabela inteira, o que cria um impacto negativo no desempenho do aplicativo. Outros bancos de dados, como bancos de dados relacionais da Oracle, aplicam bloqueios no nível de registro, deixando os outros registros dentro da tabela disponíveis, ajudando a garantir um melhor desempenho do aplicativo. A simultaneidade gerencia a atividade quando vários usuários ou aplicativos fazem consultas ao mesmo tempo no mesmo banco de dados. Esse recurso fornece o acesso correto a usuários e aplicativos de acordo com as políticas definidas para o controle de dados. O Que Procurar ao Selecionar um Banco de Dados Relacional O software usado para armazenar, gerenciar, consultar e recuperar dados armazenados em um banco de dados relacional é chamado de sistema de gerenciamento de banco de dados relacional (RDBMSf). O RDBMS fornece uma interface entre usuários e aplicativos e o banco de dados, além de funções administrativas para gerenciar armazenamento, acesso e desempenho de dados. Vários fatores podem orientar sua decisão ao escolher entre tipos de banco de dados e produtos de banco de dados relacional. O RDBMS escolhido dependerá das suas necessidades de negócios. Pergunte a você mesmo as seguintes questões: ● Quais são os nossos requisitos de precisão de dados? O armazenamento e a precisão de dados dependem da lógica de negócios? Nossos dados têm requisitos rigorosos de precisão (por exemplo, dados financeiros e relatórios do governo)? ● Precisamos de escalabilidade? Qual é a escala dos dados a serem gerenciados e qual é o crescimento previsto? O modelo de banco de dados precisará oferecer suporte a cópias de banco de dados espelhadas (como instâncias separadas) para escalabilidade? Em caso afirmativo, é possível manter a consistência de dados nessas instâncias? ● O quanto a simultaneidade é importante? Vários usuários e aplicativos precisarão de acesso simultâneo a dados? O software de banco de dados oferece suporte à simultaneidade ao mesmo tempo que protege os dados? ● Quais são as nossas necessidades de desempenho e confiabilidade? Precisamos de um produto de alto desempenho e alta confiabilidade? Quais são os requisitos para o desempenho de resposta à consulta? Quais são os compromissos dos fornecedores em relação aos acordos de nível de serviço (SLAs) ou tempo de inatividade não planejado? O Banco deDados Relacional do Futuro: O Bancos de Dados Autônomo Ao longo dos anos, os bancos de dados relacionais ficaram melhores, mais rápidos, mais fortes e mais fáceis de se trabalhar. Mas também se tornaram mais complexos, e administrar o banco de dados tem sido um trabalho de tempo integral. Em vez de usarem seus conhecimentos para se concentrar no desenvolvimento de aplicativos inovadores que agreguem valor ao negócio, os desenvolvedores passaram a maior parte do tempo na atividade de gerenciamento necessária para otimizar o desempenho do banco de dados. Atualmente, a tecnologia autônoma está aproveitando os pontos fortes do modelo relacional para fornecer um novo tipo de banco de dados relacional. O banco de dados independente (também conhecido como banco de dados autônomo) mantém a eficiência e as vantagens do modelo relacional, mas usa inteligência artificial (IA), o machine learning e a automação para monitorar e melhorar o desempenho das consultas e as tarefas de gerenciamento. Por exemplo, para melhorar o desempenho da consulta, o banco de dados independente pode criar hipóteses e testar índices para tornar as consultas mais rápidas e, em seguida, enviar as melhores para a produção, tudo por conta própria. O banco de dados independente faz essas melhorias continuamente, sem a necessidade de envolvimento humano. A tecnologia autônoma libera os desenvolvedores das tarefas comuns do gerenciamento do banco de dados. Por exemplo, eles não precisam mais determinar os requisitos de infraestrutura com antecedência. Em vez disso, com um banco de dados independente, eles podem adicionar armazenamento e processar recursos conforme necessário para oferecer suporte ao crescimento do banco de dados. Com apenas algumas etapas, os https://www.oracle.com/br/database/what-is-autonomous-database.html https://www.oracle.com/br/database/what-is-autonomous-database.html desenvolvedores podem facilmente criar um banco de dados relacional autônomo, acelerando o tempo para o desenvolvimento de aplicativos. 4 - Modelagem de Banco de Dados EXEMPLO DE MODELO LÓGICO DE BANCO DE DADOS RELACIONAL MODELAGEM DE DADOS A modelagem de dados consiste na Analise e Planejamento dos dados que irão compor o Banco. MODELAGEM LÓGICA: A modelagem lógica consiste em determinar quais informações serão necessárias ao Banco. Estas informações serão divididas em Tabelas. Também serão definidos nesta fase os Campos das Tabelas, seus atributos e propriedades e ainda as Chaves Primárias e Secundárias, seu Índices e relacionamentos. MODELAGEM FÍSICA: A modelagem Física consiste na escolha de um SGBD e a criação do projeto (Modelagem Lógica) neste sistema. O Modelo de Entidades e Relacionamentos é um modelo abstrato cuja finalidade é descrever, de maneira conceitual, os dados a serem utilizados em um Sistema de Informações ou que pertencem a um domínio. A principal ferramenta do modelo é sua representação gráfica, o Diagrama Entidade Relacionamento. Normalmente o modelo e o diagrama são conhecidos por suas siglas: MER e DER. FUNDAMENTOS DO MER 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. 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. CARDINALIDADE DE RELACIONAMENTOS Representa a freqüência com que existe o relacionamento. Relacionamento 1:1 - O João é casado com a Maria. - 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. Relacionamento 1:N ou N:1 - O Pedro trabalha no Departamento Pessoal. - trabalha - Ligação entre um Funcionário e um Departamento, onde um funcionário pode trabalhar em somente um departamento e um departamento pode ter vários funcionários. Relacionamento N : N - O Antônio está matriculado na disciplina Banco de Dados. - 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. veja a representação gráfica (DER): MODELAGEM - NÁ PRÁTICA Considere o exemplo: Em uma determinada empresa, é preciso informatizar as fichas de cadastro de funcionários. Passo 1: LISTA DE ENTIDADES FUNCIONÁRIOS CÔNJUGES DEPENDENTES Passo 2: LISTA DE ATRIBUTOS DE CADA ENTIDADE Passo 3: INSTÂNCIAS DAS ENTIDADES Passo 4: CARDINALIDADE DOS RELACIONAMENTOS Passo 5: CHAVES PRIMÁRIAS E ESTRANGEIRAS ONDE: Para cada Funcionário somente poderá existe um único conjugue, pois a instância do IDCONJ é o mesmo valor de IDFUN, ou seja, cardinalidade 1:1 (1 para 1). Por exemplo: IDFUN (Funcionarios) = 10 então IDCONJ (Conjugues) = 10. Para cada Funcionário pode existir um ou mais dependentes. Cardinalidade 1:N (1 para Muitos). Por exemplo: IDFUN (Funcionarios) = 10 então IDFUN (Dependentes) = 10. Passo 6: MODELO LÓGICO FINALIZADO Pronto! Percorrendo estes 6 passos chegamos ao resultado de nossa modelagem lógica de dados. 5 - SQL - A linguagem do banco de dados A linguagem SQL surgiu em meados da década de 70, sendo resultado de um estudo de E. F. Codd, membro do laboratório de pesquisa da IBM em San Jose, Califórnia. Este estudo tinha foco em desenvolver uma linguagem que adapta-se ao modelo relacional. O primeiro sistema de BD baseado em SQL tornou-se comercial no final dos anos 70 juntamente com outros sistema de BD’s relacionais. O sucesso da linguagem SQL foi tão grande que obrigou o ANSI (American National Standarts Institute), a padronizar as implementações da linguagem, assim, nos dias de hoje, a maior parte de BD’s seguem criteriosamente esta padronização, podendo ter algumas variações, mais mesmo assim não afetando na padronização global da linguagem tornando assim a portabilidade mais fácil, se seguida de forma adequada pelo DBA. 6 - DDL Linguagem de Definição de Dados ou DDL (Data Definition Language): A DDL permite ao usuário permite a manipulação de tabelas e elementos associados, tipo chave primária e chaves estrangeira, índices, etc. Os principais comandos são CREATE, DROP, ALTER(em algumas situações). 7 - DML Linguagem de Manipulação de Dados ou DML (Data Manipulation Language): A DML é um subconjunto da linguagem SQL, utilizada para Selecionar(SELECT), Inserir(INSERT), Atualizar(UPDATE) e Apagar(DELETE). 7.1 - DQL Linguagem de Controle de Dados ou DCL (Data Control Language): A DCL controla os aspectos destinados a autorização de dados e licenças de usuários para manipulação de dados dentro do BD.Alguns comandos comuns são GRANT(dá privilégios para usuários), REVOKE (revoga privilégios de usuários), COMMIT(em resumo grava dados no BD) e ROLLBACK(descarta dados existentes desde o último COMMIT). Linguagem de Consultas deDados ou DQL (Data Query Language): embora na DQL exista somente um comando(SELECT) é o mais utilizado, principalmente para consultas parametrizadas. Lembre que o SELECT também é considerado um comanda DML. São exemplos os apresentados na Listagem 1. Listagem 1. Exemplos de DQL SELECT nome FROM clientes; SELECT id,nome FROM pessoas WHERE id = :id; Complementando a DQL, temos também uma série de Cláusulas (FROM, WHERE, GROUP BY, HAVING, ORDER BY, DISTINT), Operadores Lógicos (AND, OR, NOT), Operadores de Comparação (<, >, <>, <=, =, >=, BETWEEIN, LIKE) e Funções de Soma (AVG, COUNT, SUM, MIN, MAX). Um grande abraços a todos e bom desenvolvimento. 8 - Selects SELECT simples O comando SELECT permite recuperar os dados de um objeto do banco de dados, como uma tabela, view e, em alguns casos, uma stored procedure (alguns bancos de dados permitem a criação de procedimentos que retornam valor). A sintaxe mais básica do comando é: SELECT <lista_de_campos> FROM <nome_da_tabela></nome_da_tabela></lista_de_campos> Exemplo: SELECT CODIGO, NOME FROM CLIENTES SELECT * FROM CLIENTES O caractere * representa todos os campos. Apesar de prático, este caractere não é muito utilizado, pois, para o SGBD é mais rápido receber o comando com todos os campos explicitados. O uso do * obriga o servidor a consultar quais são os campos antes de efetuar a busca dos dados, criando mais um passo no processo. COMANDO WHERE A cláusula Where permite ao comando SQL passar condições de filtragem. Veja o exemplo da Listagem 1. SELECT CODIGO, NOME FROM CLIENTES WHERE CODIGO = 10 SELECT CODIGO, NOME FROM CLIENTES WHERE UF = ‘RJ’ SELECT CODIGO, NOME FROM CLIENTES WHERE CODIGO >= 100 AND CODIGO <= 500 SELECT CODIGO, NOME FROM CLIENTES WHERE UF = ‘MG’ OR UF = ‘SP’ Listagem 1. Exemplo where Os parênteses corretamente utilizados dão mais poder as consultas, conforme exemplo abaixo: SELECT CODIGO, NOME FROM CLIENTES WHERE UF = ‘RJ’ OR (UF = ‘SP’ AND ATIVO = ‘N’) Neste comando todos os clientes do Rio de Janeiro e apenas os clientes inativos de São Paulo seriam capturados. Agora veja o exemplo a seguir: SELECT CODIGO, NOME FROM CLIENTES WHERE (ENDERECO IS NULL) OR (CIDADE IS NULL) Aqui, todos os clientes que não possuem endereço ou cidade cadastrada serão selecionados. FILTRO DE TEXTO Para busca parcial de string, o SELECT fornece o operador LIKE. Veja o exemplo abaixo: SELECT CODIGO, NOME FROM CLIENTES WHERE NOME LIKE ‘MARIA%’ Neste comando, todos os clientes cujos nomes iniciam com Maria serão retornados. Se quisermos retornar os nomes que contenham ‘MARIA’ também no meio, podemos alterar para o exemplo a seguir: SELECT CODIGO, NOME FROM CLIENTES WHERE NOME LIKE ‘%MARIA%’ O uso de máscara no início e no fim da string fornece maior poder de busca, mas causa considerável perda de performance. Este recurso deve ser utilizado com critério. Uma observação: em alguns bancos de dados, a máscara de filtro não é representada por %. Consulte a referência do banco para verificar o caractere correto. Por padrão, a SQL diferencia caixa baixa de caixa alta. Para eliminar essa diferença, utiliza a função UPPER. Veja abaixo: SELECT CODIGO, NOME FROM CLIENTES WHERE UPPER(NOME) LIKE ‘MARIA %SILVA%’ ORDENAÇÃO A ordenação pode ser definida com o comando ORDER BY. Assim como no comando WHERE, o campo de ordenação não precisa estar listado como campo de visualização. Veja o exemplo da Listagem 2. SELECT CODIGO, NOME FROM CLIENTES ORDER BY NOME SELECT CODIGO, NOME FROM CLIENTES ORDER BY UF, NOME Listagem 2. Exemplo order by A utilização da palavra DESC garante a ordenação invertida: SELECT CODIGO, NOME FROM CLIENTES ORDER BY NOME DESC SELECT CODIGO, NOME FROM CLIENTES ORDER BY UF DESC JUNÇÃO DE TABELAS O SELECT permite juntar duas ou mais tabelas no mesmo resultado. Isso pode ser feito de várias formas. Uma delas segue abaixo: SELECT CLIENTES.CODIGO, CLIENTES.NOME, PEDIDOS.DATA FROM CLIENTES, PEDIDOS WHERE CLIENTES.CODIGO = PEDIDOS.CODCLIENTE Nesta linha as tabelas relacionadas CLIENTES e PEDIDOS são unificadas através do campo chave, em uma operação de igualdade. Repare que os nomes dos campos passam a ser prefixados pelo nome das tabelas, resolvendo duplicidades. Uma versão resumida desse comando pode ser como abaixo: SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR FROM CLIENTES A, PEDIDOS B WHERE A.CODIGO = B.CODCLIENTE O uso de aliases no código SQL torna a manutenção mais simples. No comando abaixo temos várias tabelas unificadas em uma mesma cláusula. Veja a Listagem 3. SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR, C.QTD, D.DESCRIC FROM CLIENTES A, PEDIDOS B, ITENS C, PRODUTOS D WHERE A.CODIGO = B.CODCLIENTE AND B.CODIGO = C.CODPEDIDO AND C.CODPRODUTO = D.CODIGO Listagem 3. Exemplo de tabelas unificadas Neste comando unificamos as tabelas relacionadas CLIENTES, PEDIDOS, ITENS e PRODUTOS. Veja mais este exemplo: SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR FROM CLIENTES A, PEDIDOS B WHERE A.CODIGO = B.CODCLIENTE AND A.UF = ‘RJ’ Observe que a junção através da igualdade de campos traz como resultado somente os registros que possuem referências nas duas tabelas. Observe o comando abaixo: SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO FROM PROUTOS A, COMPONENTES B WHERE A.CODIGO = B.CODPRODUTO Os produtos que não possuem componentes não são selecionados, caso seja necessário criar uma listagem incluindo também os registros que não possuem correspondência, deve-se utilizar o comando JOIN. COMANDO JOIN A junção de tabelas no comando SELECT também pode ser feita com o comando JOIN. Este comando deve ser utilizado com a palavra reservada INNER ou com a palavra OUTER: - INNER: Semelhante ao uso do operador “=” na junção de tabelas. Aqui os registros sem correspondências não são incluídos. Esta cláusula é opcional e pode ser omitida no comando JOIN. - OUTER: Os registros que não se relacionam também são exibidos. Neste caso, é possível definir qual tabela será incluída na seleção, mesmo não tendo correspondência. Para exemplificar, temos as tabelas abaixo: Observe os exemplos e o resultado produzido: SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO, B.QTD FROM PRODUTOS A INNER JOIN COMPONENTES B ON (A.CODIGO = B.CODPRODUTO) Este comando pode ser escrito na versão resumida abaixo: SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO FROM PRODUTOS A JOIN COMPONENTES B ON (A.CODIGO = B.CODPRODUTO) Como mostrado no resultado 1, os produtos que não possuem componentes não são incluídos na seleção. SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO, B.QTDE FROM PRODUTOS A LEFT OUTER JOIN COMPONENTES B ON (A.CODIGO = B.CODPRODUTO) Neste comando todos os produtos serão incluídos na seleção, independente de possuírem um componente. Observe que a palavra LEFT se refere à primeira tabela do relacionamento. O mesmo comando poderia ser descrito como na Listagem 4. SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO FROM COMPONENTES A RIGHT OUTER JOIN PRODUTOS B ON (A.CODIGO = B.CODPRODUTO) Listagem 4. Exemplo da palavra left A ordem das tabelas foi invertida mas o resultado é o mesmo. Observe mais alguns exemplos: SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO, B.QTDE FROM PRODUTOS A JOIN COMPONENTES B ON (A.CODIGO = B.CODPRODUTO) WHERE A.CATEGORIA = 1 Agora veja o código q reproduz o resultado 4: SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO FROM PRODUTOS A JOIN COMPONENTES B ON (A.CODIGO = B.CODPRODUTO) WHERE A.CATEGORIA = 1 OR A.CATEGORIA = 2 ORDER BY A.CATEGORIA, A.DESCRICAO FULL OUTER JOIN Podemos ainda combinar o uso de INNER e OUTER através do comando FULL OUTER JOIN. Neste caso, todos os registros das duas tabelas envolvidas serão exibidos, tendo ou não relacionamento. Observe: UNION Existe ainda uma segunda forma de juntar tabelas com o comando SELECT. Atravésdo parâmetro UNION, é possível colar o conteúdo de duas tabelas. Veja o exemplo: SELECT CODIGO, NOME FROM CLIENTES UNION SELECT CODIGO. NOME FROM FUNCIONARIOS O resultado deste comando é a listagem de todos os clientes e a listagem de todos os funcionários, dentro do mesmo result set. Repare que no comando JOIN á união é horizontal e no UNION a união é vertical. Por default, os registros duplicados são eliminados na cláusula UNION. No exemplo anterior, se tivéssemos um cliente com o mesmo nome e código de um funcionário, apenas o registro da primeira tabela seria exibido. Para incluir todos os registros, independente de duplicidade, utilize a palavra ALL: SELECT CODIGO, NOME FROM CLIENTES UNION ALL SELECT CODIGO, NOME FROM FUNCIONARIOS FUNÇÕES DE AGRUPAMENTO São cinco as funções básicas de agrupamento: AVG: Retorna a média do campo especificado SELECT AVG(VALOR) FROM PEDIDOS MIN/MAX/SUM: Respectivamente retorna o menor valor, o maior e o somatório de um grupo de registros: SELECT MIN(VALOR) FROM PEDIDOS SELECT MAX(VALOR) FROM PEDIDOS SELECT AVG(VALOR) FROM PEDIDOS COUNT: Retorna a quantidade de itens da seleção Um exemplo de uso é o que pode ser visto abaixo: SELECT COUNT(CODIGO) FROM CLIENTES AGRUPAMENTO Um poderoso recurso do comando SELECT é o parâmetro GROUPY BY. Através dele podemos retornar informações agrupadas de um conjunto de registros, estabelecendo uma condição de agrupamento. É um recurso muito utilizado na criação de relatórios. Para exemplificar, temos as tabelas CLIENTES E PEDIDOS a seguir. SELECT CODCLIENTE, MAX(VALOR) FROM PEDIDOS GROUP BY CODCLIENTE O comando acima retorna o maior valor de pedido de cada cliente. Observe o resultado: SELECT CODCLIENTE, COUNT(*) FROM PEDIDOS GROUPY BY CODCLIENTE Abaixo vemos quantos pedidos foram feitos por cada cliente. HAVING Através do comando HAVING podemos filtrar a cláusula GROUP BY. Observe o comando abaixo: SELECT CODCLIENTE, COUNT(*) FROM PEDIDOS GROUPY BY CODCLIENTE HAVING COUNT(*) >= 2 Somente os clientes com 2 ou mais pedidos serão selecionados. Repare que o HAVING é utilizado, geralmente com alguma função de agrupamento. Para filtros normais, pode-se utilizar o comando WHERE. Observe o exemplo abaixo: SELECT CODCLIENTE, COUNT(*) FROM PEDIDOS WHERE DATA > ‘06/10/2002’ GROUPY BY CODCLIENTE HAVING COUNT(*) >= 2 Repare que o cliente número 3 apresentou apenas dois pedidos, visto que o primeiro não possui data maior que 06/10. Com esse artigo voltado ao público mais iniciante em SQL conseguimos solucionar muitas dúvidas sobre como efetuar consultas usando o comando Select e você aprende a adicionar todas as Cidades e Estados do Brasil em um banco de dados usando SQL.
Compartilhar