Baixe o app para aproveitar ainda mais
Prévia do material em texto
INTRODUÇÃO À SQL E DEFINIÇÃO DE DADOS (DDL) Professores: Esp. Eduardo Herbert Ribeiro Bona Me. Jackson Luis Schirigatti Diretoria Executiva Pedagógica Janes Fidelis Tomelin Diretoria Operacional de Ensino Kátia Coelho Diretoria de Planejamento de Ensino Fabrício Lazilha Head de Projetos Educacionais Camilla Barreto Rodrigues Cochia Caetano Head de Produção de Conteúdos Celso Luiz Braga de Souza Filho Gerência de Produção de Conteúdos Diogo Ribeiro Garcia Gerência de Projetos Especiais Daniel Fuverki Hey Supervisão do Núcleo de Produção de Materiais Nádila de Almeida Toledo Projeto Gráfico Thayla Guimarães Designer Educacional Rossana Costa Giani Editoração Flávia Thaís Pedroso DIREÇÃO Reitor Wilson de Matos Silva Vice-Reitor Wilson de Matos Silva Filho Pró-Reitor de Administração Wilson de Matos Silva Filho Pró-Reitor de EAD William Victor Kendrick de Matos Silva Presidente da Mantenedora Cláudio Ferdinandi NEAD - NÚCLEO DE EDUCAÇÃO A DISTÂNCIA NEAD - Núcleo de Educação a Distância Av. Guedner, 1610, Bloco 4 - Jardim Aclimação - Cep 87050-900 Maringá - Paraná | unicesumar.edu.br | 0800 600 6360 As imagens utilizadas neste livro foram obtidas a partir do site shutterstock.com C397 CENTRO UNIVERSITÁRIO DE MARINGÁ. Núcleo de Educação a Distância; BONA, Eduardo Herbert Ribeiro; SCHIRIGATTI, Jackson Luis. Programação SQL I. Eduardo Herbert Ribeiro Bona; Jackson Luis Schirigatti. Maringá-Pr.: UniCesumar, 2017. 34 p. “Pós-graduação Universo - EaD”. 1. Programação. 2. SQL. 3. EaD. I. Título. ISBN 978-85-459-1503-4 CDD - 22 ed. 005 CIP - NBR 12899 - AACR/2 01 02 03 04 sumário 06| SQL 21| APROFUNDANDO-SE EM DDL 24| DML: PRIMEIRAS INSTRUÇÕES 15| DDL DEFININDO DADOS COM SQL OBJETIVOS DE APRENDIZAGEM • Conceituar e compreender a Linguagem SQL e sua aplicabilidade. • Caracterizar a linguagem de definição de dados (DLL) e a linguagem de manipulação de dados (DML). • Apresentar e compreender as instruções de definição de dados DLL (criação de recursos em um SGBD). • Apresentar e compreender as instruções de manipulação de dados DML (alterações de recursos em SGBD). PLANO DE ESTUDO A seguir, apresentam-se os tópicos que você estudará nesta unidade: • SQL. • DLL: Definindo Dados com o SQL. • Aprofundando-se em DLL. • DML: Primeiras Instruções. INTRODUÇÃO À SQL E DEFINIÇÃO DE DADOS (DDL) INTRODUÇÃO introdução Na atualidade, os bancos de dados possuem uma importância inquestionável para o armazenamento, acesso e manipulação das informações que circulam entre as organizações de todos os ramos de negócios, privadas e públicas e no comércio eletrônico entre clientes, empresas e entre clientes e empresas. Os bancos de dados mais utilizados são os baseados no modelo relacional, usando um conjunto de tabelas para representar os dados e as relações entre eles. Vinculada à estes bancos de dados relacionais, a linguagem SQL se estabeleceu com uma linguagem padrão, composta de várias partes. Especificamente nesta unidade, veremos os componentes de linguagem de definição de dados (DDL) e de linguagem de manipulação de dados (DML). Veremos que estes componentes, chamados também de sublinguagens, fornecem comandos para a definição e manipulação de esquemas. A DDL define esquemas de relação, exclusão de relações e modificação de esquemas. Por sua vez, a DML fornece comandos para realizar consultas baseadas na álgebra relacional, no cálculo relacional e na manipulação de dados, incluindo comando para inserir e excluir. No estudo iremos compreender os principais tipo de dados utilizados para a definição de dados com as instruções Create e Constraints de integridade. Com relação à Linguagem de manipulação de dados, serão apresentadas as instruções de alterações de tabelas, alterações de colunas de uma tabela, exclusão de colunas e tabelas, bem como a inserção, alteração e exclusão de dados em tabelas. Este entendimento da Linguagem de manipulação de dados SQL é imprescindível para o Administrador em banco de dados, analista de dados, e programadores de linguagens de desenvolvimento web que utilizam as strings de instruções SQL em linguagens hospedeiras, além dos desenvolvedores de outras linguagens relacionais de 4ª geração. Pós-Universo 6 SQL Pós-Universo 7 Nesta aula iremos entender o que é o SQL e por que utilizá-lo em Sistemas gerenciadores de banco de dados. Veremos também as sublinguagens DDL e DML, que compõem a Linguagem SQL, bem como suas principais características e comandos destas sublinguagens. O que é SQL? Diferentemente do que é veiculado por muitos erroneamente, SQL não é um acrônimo para Structured Query Language, ou em português, Linguagem de Consulta Estruturada. Os principais livros apontam que Edgar Codd, o criador do modelo de dados relacional, propôs uma linguagem denominada DSL/Alpha, e em seguida a IBM designou uma equipe para um protótipo chamado SQUARE, que depois de alguns refinamentos veio a se tornar SEQUEL e finalmente SQL, como conhecemos até hoje. SQL por natureza não é uma linguagem de programação procedural como as que você conhece, pois ela foi construída para basicamente permitir a manutenção da estrutura de dados (metadados) e dar acesso aos dados de fato, permitindo operações de consulta, inserção, atualização e exclusão. Linguagens de programação são mais conhecidas por recursos como estruturas condicionais, laços de repetição, declaração de variáveis, dentre outros recursos, que nem sempre serão encontrados em uma linguagem SQL e não são objetos de estudo em SQL I. Esta linguagem sempre estará atuando em conjunto com as linguagens de programação para a aplicação, como Java, C# ou PHP, por exemplo. A linguagem SQL é a linguagem universal para a comunicação com SGBDs e por isso as aplicações implementam simplesmente as interfaces de apoio para os procedimentos de acordo com cada tipo particularidade de um SGBD. Dentre os principais SGBDs, podemos citar os grandes SGBDs como Oracle Database, SQL SERVER da Microsoft e DB2 da IBM, que são mais conhecidos por fazerem parte de grandes sistemas como ERPs. Já nas aplicações web, teremos atualmente mais contato com Oracle MySQL e PostgreSQL, sendo este último um banco de dados open source. Pós-Universo 8 O SQL de uma maneira geral é compatível com todos estes SGBDs, mas cada fabricante optou por promover algumas melhorias e features em cada um deles, e por isso, para o conhecimento do funcionamento de um SGBD e dos poderes do SQL, foi necessário optar em certos momentos por um destes produtos. Neste sentido, para que você possa construir e executar todas as instruções contidas aqui, recomenda- se a utilização do Oracle Database 10g versão gratuita, que permitirá uma instalação simples e utilização completa dos recursos. Por que SQL? Sabemos que linguagens de programação vem e vão e isso não é novidade alguma. Em nossa área de tecnologia da informação (TI) o tempo não trabalha muito a favor dos desenvolvedores e temos uma excelente notícia pra você! Temos vários bons motivos para te convencer a realizar o aprendizado do SQL: • Segundo pesquisa com mais de 64.000 (sessenta e quatro mil) desenvolvedores em 2017, realizada pelo portal Stack Overflow, principal portal de dúvidas de desenvolvedores, chamado por muitos de “o Google de verdade”, a linguagem SQL é a segunda linguagem mais lembrada (popular) e citada por mais de 50% dos desenvolvedores; • Todo desenvolvedor, seja ele desktop ou web, precisa conhecer bem o SQL e aproveitar ao máximo esta tecnologia em seu dia a dia. Na mesma pesquisa da Stack Overflow, enquanto desenvolvedores web citam SQL como linguagem mais popular, desenvolvedores desktop citam-na em 60% dos casos. • SQL não é utilizado somente por desenvolvedores. SQL também é profissão para administradores de banco de dados, administradores de rede e projetistas de banco de dados. Pós-Universo 9 • Projetosde banco de dados malconstruídos e consultas SQL superficiais sem o cuidado de um especialista representam o maior gargalo de performance em uma aplicação por consumir quantidade de memória e processador em excesso. • Aplicações que usam o banco de dados não só como armazenador de dados e sim como uma camada por baixo da aplicação com utilização de princípios como integridade dos dados, validação, controle de acesso e segurança fornecem um ambiente altamente eficaz e profissional. • SQLs, diferentemente de linguagens de programação, sofrem pouca alteração ao longo do tempo, uma vez que um bom entendimento teórico e prático garante uma habilidade a longo prazo que praticamente nenhuma outra linguagem fornece. DDL e DML: Características da Linguagem de Definição de Dados e da Linguagem de Manipulação de Dados Os usuários finais e programadores ambos operam em um nível externo, ou seja, interagem com os dados por meio de sublinguagens de dados que se dividem em dois componentes na SQL. Date (2003, p. 85) comenta que um dos componentes é uma lInguagem de definição de dados (DDL - Data Definition Language) e o outro componente é de uma linguagem de manipulação de dados (DML - Data Manipulation Language). A Tabela 1 apresenta as principais características entre as linguagens de definição de dados (DDL) e a linguagem de manipulação de dados (DML). Pós-Universo 10 Tabela 1 - Principais características entre as linguagens de dados Sublinguagens de dados Características Componente DDL (Definição de dados) • Permite criar e remover tabelas, descrever restrições de integridade, registrar e remover utilizadores e atribuir e retirar privilégios aos utilizadores. • Suporta a criação, exclusão e modificação das tabelas e visões. As restrições de integridade podem ser definidas nas tabelas, tanto quando a tabela é criada como posteriormente. • Referenciada como sublinguagem de dados quando embutida dentro de uma linguagem hospedeira (Ex.: C ou Cobol). • Funções associadas à definição e ao desenho do esquema da Base de dados. • Instruções da DDL podem ser CREATE, ALTER ou DROP. • A DDL SQL permite especificar não só um conjunto de relações, mas também informações sobre cada relação, incluindo: (1) o esquema para cada relação, (2) o domínio dos valores associados a cada atributo, (3) as restrições de integridade, (4) o conjunto de índices a serem mantidos para cada relação, (5) as informações de segurança e autorização para cada relação e (6) a estrutura de armazenamento físico de cada relação no disco. Componente DML (Manipulação de dados) • Permite que os usuários formulem consultas e insiram, excluam e modifiquem tuplas. • Referenciada como sublinguagem de dados quando embutida dentro de uma linguagem hospedeira (Ex.: C ou Cobol). • Instruções DML podem ser DELETE, INSERT, SELECT, UPDATE, etc. Fonte: adaptado de Costa (2007); Ramakrishnan e Gehrke (2011); Silberschatz, Korth e Sudarshan (2006). Pós-Universo 11 Tipos de Dados Tipos de dados ou domínios internos é o domínio de valores associados a cada atributo e estas informações são especificadas através da linguagem DDL (SILBERSCHATZ; KORTH; SUDARSHAN, 2006). Segundo ORACLE (2012, on-line)1, um banco de dados Oracle irá fornecer suporte às seguintes categorias de tipos de dados: • Caracteres; • Numéricos; • Data; • LOB; • RAW and LOG RAW; • ROWID and UROWID. Iremos nos concentrar neste primeiro momento nos mais utilizados, que são caracteres, numéricos, data e LOB. Os demais poderão ser objeto de estudo futuro para o aprofundamento de conhecimento específico em Oracle. Veja os principais tipos, sua utilização e exemplos na Tabela 2 abaixo: Tabela 2 - Nomes de tabelas válidos Caracteres Tipo Descrição Exemplo CHAR(n) Poderá conter de 1 a 2000 bytes por coluna • Este tipo de dado é utilizado para armazenar textos de tamanho fixo. • Sempre que você insere um texto, independente do tamanho, ele salvará tal informação com o valor pré- definido na criação da tabela. CREATE TABLE teste( estado_sigla CHAR(2) ) VARCHAR2(n) • Este tipo armazena textos no banco de dados de forma dinâmica. • Será pré-definido um tamanho máximo mas diferente de CHAR que fixa o tamanho, VARCHAR salva cada campo com seu tamanho variável. • Poderá conter de 1 a 4000 bytes. CREATE TABLE teste( [...], nome VARCHAR2(200) ) Pós-Universo 12 Caracteres Tipo Descrição Exemplo NCHAR(n) • Tem as mesmas atribuições, definições e comportamento de CHAR(n) com a diferença de que suporta caracteres do tipo UNICODE (globalizado). CREATE TABLE teste( [...], estado_nome NCHAR(50) ) NVARCHAR2(n) • Tem as mesmas atribuições, definições e comportamento de VARCHAR2(n) com a diferença de que suporta caracteres do tipo UNICODE (globalizado). CREATE TABLE teste( [...], nome NVARCHAR2(200) ) TEXT ou NTEXT • Suporta textos maiores que 4000 caracteres e tem tamanho variável também. Contudo, para textos muito extensos, vale a pena conferir também CLOB. A variação NTEXT faz o tratamento para UNICODE. CREATE table noticia( [...], titulo VARCHAR2(100), conteudo TEXT ) Numéricos Tipo Descrição Exemplo INTEGER, SHORTINTEGER, LONGINTEGER • INTEGER ou INT armazena números inteiros sem a parte fracionária, enquanto possui variações para SHORT e LONG. CREATE TABLE produto( quantidade_estoque INT ) NUMBER NUMBER(precisão, escala) • Armazena valores fixos ou flutuantes de acordo com especificação de precisão e escala. • Armazena tanto números positivos quanto negativos. • A precisão, quando informada, representa o número total de dígitos e a escala das casas decimais depois da vírgula. CREATE TABLE funcionario( salario NUMBER (9,2) ) CREATE TABLE exame( umidade NUMBER ) DECIMAL, SHORTDECIMAL • É uma variação de NUMBER sem o suporte, a precisão e escala, suportando 15 dígitos para DECIMAL e 7 dígitos para SHORTDECIMAL. Pós-Universo 13 Datas Tipo Descrição Exemplo DATE • Este tipo de dado armazena data e hora em uma coluna. Os dados armazenados serão século, ano, mês, dia, hora, minuto e segundo. CREATE TABLE funcionario( nascimento DATE ) TIMESTAMP • Este formato é uma extensão de DATE e armazena século, ano, mês, dia, hora, minuto, segundo e fração de segundo. CREATE TABLE movimentacao( cadastro TIMESTAMP ) TIMESTAMP WITH TIMEZONE • Armazena além dos dados de TIMESTAMP, o valor offset do TIMEZONE, no caso do Brasil, por exemplo, -03:00 geralmente (exceto horário de verão). • É muito utilizado em sistemas globais para poder armazenar a data/hora de um registro, mas sabendo o timezone, que é muito relevante para sistemas globais. CREATE TABLE movimentacao( cadastro TIMESTAMP WITH TIME ZONE ) Booleano Tipo Descrição Exemplo BOOL • Este campo habilita um resultado de uma expressão lógica, podendo ser verdadeiro com (YES, TRUE, ON) ou false com (NO, FALSE, OFF). create table funcionario( [...]. situacao_contrato BOOL ) LOB Tipo Descrição Exemplo CLOB ou NCLOB • Possibilita que armazenemos também até 128 terabytes de dados, mas por sua vez caracteres, lembrando que o tipo VARCHAR2 permite até 4000. • Deste modo, a CLOB passará a ser a opção para outros casos para estas colunas. NCLOB é a variação de CLOB que permite uso para UNICODE. CREATE TABLE livro( titulo varchar2(100), conteudo CLOB ) BLOB • Armazena até 128 terabytes de dados binários; geralmente utilizamos este tipo de dado para guardar um arquivo binário do tipo PDF, imagem, etc. (arquivos que não possuem um texto limpo), e são basicamente códigos. CREATE TABLE exame( cod_exame int pdf BLOB ) Fonte: os autores. Pós-Universo 14 Outros domínios internos Como mencionado, um tipo de dado é um domínio de possíveis valores, precisa estar associado a cada atributo. Existem outros domínios básicos utilizados, como os de ponto flutuante: o real, double precision, onde são utilizados para números de ponto flutuantee ponto flutuante de precisão dupla com precisão dependente da máquina. O float (n), para um número de ponto flutuante, com precisão de pelo menos n dígitos. Além dos tipos de dados básicos, existem os tipos definidos pelo usuários, chamados de tipos distintos e tipos de dados estruturados. Os tipos distintos são utilizados para criar tipos de dados onde existam vários atributos que tenham o mesmo tipo de dados mas com domínios diferentes. Um exemplo seria o tipo Dólares e Libras, que podem possuir domínios diferentes mas com o mesmo tipo numérico. Declarar tipos diferentes de moedas ajuda a detectar erros de atribuição para os diferentes tipos de moedas, ou seja, atribuir valores Dólares para Libras, ou o inverso. Já o tipo de dados estruturados permite a criação de tipos de dados complexos com estruturas de registros, arrays e multiconjuntos aninhados. Fonte: Silberschatz, Korth e Sudarshan (2006, p. 80). saiba mais Pós-Universo 15 DDL DEFININDO DADOS COM SQL Pós-Universo 16 Neste estudo, iremos compreender a linguagem de definição de dados DDL, que se utiliza dos comandos de criação dos recursos como tabelas (CREATE TABLE) e regras de restrições (constraints), como o NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY e CHECK. CREATE Quando estamos tratando de definição dos dados, a maioria dos SGBDs trabalhará com o comando CREATE para a criação de todos os seus recursos. A instrução mais conhecida e largamente difundida é a CREATE TABLE. Esta deverá ser sua primeira instrução para a criação de tabelas a partir de um projeto de um banco de dados. A sintaxe do comando é muito simples: CREATE TABLE cliente( cod_cliente INTEGER NOT NULL, nome VARCHAR2(255) NOT NULL, cpf VARCHAR2(15) NOT NULL UNIQUE, data_cadastro TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, situacao_cadastro BOOL NOT NULL DEFAULT 1 ); Após o criação de uma tabela com o CREATE TABLE, vem o nome da tabela, que é único dentro do esquema do banco de dados, ou seja, cada banco de dados poderá ter uma tabela chamada cliente, mas o mesmo banco de dados só poderá possuir uma tabela chamada cliente. Além disso, é proibido nomes com mais de 30 (trinta) caracteres, uso de espaços, hífens ou iniciados por números (podendo conter números no decorrer de seu nome). Pós-Universo 17 A Tabela 3 apresenta exemplos de nomes de tabelas: Tabela 3: Nomes de tabelas válidos Nome Válido ou Inválido? Motivo clientes_2014 Válido O usuário de números no decorrer é aceito e o símbolo “_” também. 2014_clientes Inválido Não é possível iniciar o nome de uma tabela com números. clientes 2014 Inválido Não são aceitos espaços no nome da tabela. CLIENTES Válido É permitido uso de letras maiúsculas ou minúsculas. ClientesInativos2014 Válido É permitido o uso tanto de maiúsculas e minúsculas no nome da mesma tabela. Fonte: os autores. Rischert (2009) sugere que você adote por padrão tabelas com nome no singular ou plural, letras minúsculas ou maiúsculas. Eu até recomendaria menos que 30 caracteres e geralmente adoto o padrão de nomes no singular e letras minúsculas. As colunas (ou atributos), por sua vez, são declarados dentro dos parênteses e cada definição é separada por vírgulas. Como o comando CREATE TABLE é executado apenas uma vez, ele deverá compor em um primeiro momento todas as colunas que você entenda como parte da tabela a ser criada. Se for necessário, depois você usará ALTER TABLE para dar manutenção na tabela. Obrigatoriamente, a definição de uma coluna se dará pelo seu nome e pelo seu tipo. Seu nome segue basicamente o padrão demonstrado para o nome de uma tabela e seu tipo deve estar de acordo com as definições de dados de cada SBGB. Apesar de ser muito comum certos tipos de dados, cada SGBD varia na disponibilização e formas de dados para a criação de colunas. Pós-Universo 18 No exemplo anterior, vimos a utilização dos tipos de dados int, varchar2, timestamp e bool, que explicaremos em seguida e que são frequentemente utilizados. Além disso, é possível notar o uso de uma constraint chamada NOT NULL, que obriga o preenchimento de tal coluna na inserção de dados para as consultas futuras. Também usei o comportamento DEFAULT, que determina o valor padrão para a coluna em questão. Constraints de Integridade O objetivo de uma CONSTRAINT DE INTEGRIDADE, segundo Oracle (2012, on-line)2, é de criar uma regra de restrição para valores dentro de um banco de dados e existem pelo menos cinco possibilidades de criação de restrições CONSTRAINTS para colunas nos banco de dados ORACLE. Imagine a criação da seguinte tabela: CREATE TABLE operacao( cod_operacao INTEGER NOT NULL PRIMARY KEY, data_operacao TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, tipo_operacao CHAR(1) NOT NULL CHECK IN (‘c’, ‘v’), valor_operacao NUMBER(9,2) NOT NULL CHECK > 0, quantidade_operacao INTEGER NOT NULL CHECK > 0, cod_papel INTEGER NOT NULL FOREIGN KEY REFERENCES papel (cod_papel), cod_cliente INTEGER NOT NULL FOREIGN KEY REFERENCES cliente (cod_cliente) ); Na criação de uma tabela, é preciso obrigatoriamente informar o nome da tabela e as colunas que farão composição a ela, seguido repetidamente do nome da coluna e do seu tipo. Pós-Universo 19 Constraints de Integridade: NOT NULL Caso seja necessário (e geralmente é) informar que aquela coluna tem seu preenchimento obrigatório, você fará uso da CONSTRAINT NOT NULL. Se você não informar nada, uma constraint NULL será utilizada de maneira a permitir valores nulos no registro de novos itens. Constraints de Integridade: UNIQUE A segunda constraint é a CONSTRAINT UNIQUE, que não necessariamente é uma chave primária, e sim um valor a ser validado como único naquela tabela no banco de dados, como por exemplo o número CPF no código de clientes ou e-mail, garantindo assim que apenas um registro com aquela informação exista. Constraints de Integridade: PRIMARY KEY Não menos importante e como já conhecido, toda tabela possui (ou deveria possuir) uma chave primária, as chamadas PKs (Primary Key). Esta é uma constraint fundamental para nossos códigos. A CONSTRAINT PRIMARY KEY combina com NOT NULL e UNIQUE CONSTRAINT ao mesmo tempo, pois não poderá ser nula, é uma chave primária e única dentro daquela tabela no banco de dados. Uma chave primária pode ser criada a partir de uma coluna apenas ou de uma combinação delas, tornando-se assim uma chave composta. Constraints de Integridade: FOREIGN KEY Além das chaves primárias, também temos as chaves estrangeiras ou FKs, sigla para Foreign Key (em inglês). Elas são CONSTRAINTS importantes para a restrição de dados em nossa base, uma vez que ficam vinculadas a outra coluna referenciada por outra tabela. Deste modo, não permitem que tal integridade seja perdida e que algum registro fique sem seu pai ou filho, por exemplo. Pós-Universo 20 Constraints de Integridade: CHECK Por fim, temos a CHECK CONSTRAINT, que como visto no exemplo de criação da tabela operação, consegue realizar checagens simples de expressões lógicas diretamente na coluna. Isso permite uma validação e uma integridade a mais na tabela do banco de dados. Este recurso, no entanto, não é presente em muitos SGBDs, mas no Oracle é permitido e muito utilizado. Falando mais sobre a integridade Integridade de dados é a maneira de dizer que os dados que estão na sua base de dados são confiáveis. Existem duas maneiras de implementar integridade de dados no SQL Server: declarativa e procedural. Em termos de integridade declarativa, vimos as Constraints (NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY e CHECK); por sua vez, as procedurais dizem respeito ao uso de Stored Procedures e Triggers. Dessas duas maneiras, podemos implementar integridade sob os aspectos: 1) Integridade de Domínio: referente aos dados que são permitidos nas colunas (campos) da tabela; 2) Integridade de Entidade: referente à unicidade de registros em uma tabela; e 3) Integridade Referencial à relaçãoentre tabelas em uma base de dados. Fonte: Pichiliani (2008, p. 26). saiba mais Pós-Universo 21 APROFUNDANDO-SE EM DDL Pós-Universo 22 Nesta aula iremos nos aprofundar na Linguagem de Definição de dados através das instruções de alteração de tabelas (ALTER) e exclusão de colunas e tabelas (DROP TABLE e DROP Database). Alterações em uma Tabela (Adição de Colunas) Para realizar as alterações de uma estrutura de uma tabela (definições de uma tabela) de um banco de dados, utiliza-se a instrução ALTER. Especificamente, é possível realizar estas alterações em nível de colunas (campos) através da instrução ALTER TABLE. O exemplo (1) ilustra a declaração de sintaxe: alter table <nome da tabela> add <nome do campo> tipo de dado: (1) alter table editora add endereco varchar2(20) Onde é incluída na tabela “editora” a definição do campo “endereço” de tamanho dinâmico de até 20 caracteres. Alterações em Colunas de uma Tabela com Critérios Também é possível realizar alterações de um determinado campo específico através do complemento da instrução ALTER TABLE e ALTER COLUMN de sintaxe: alter table <nome da tabela> alter column <nome do campo> <tipo de dado> <restrição> O exemplo (2) ilustra a alteração de um campo “endereço” da tabela “editora”, de valor varchar(20) do exemplo (1), para o tipo de dados varchar(50), e permitir que contenha valores nulos através da cláusula NULL. (2) alter table editora alter column endereco varchar2(50) null Pós-Universo 23 Excluindo Colunas, Tabelas e Banco de Dados A DDL trata também da exclusão de recursos de um banco de dados, como por exemplo a exclusão de uma tabela. Para Freeman (2005, p. 148), “é possível excluir tabelas removendo todas as linhas (tuplas) de uma tabela, excluindo todos os índices, partições, armazenamento (por exemplo LOB armazenamento) e gatilhos associados”. O autor ressalta: “Ao excluir uma tabela, você invalida quaisquer procedures armazenadas ou visões que referenciam esta tabela” (FREEMAN, 2005, p.148). O comando que realiza a exclusão destes recursos é o drop table, sendo que a tabela deve estar no seu próprio esquema. O exemplo (3) apresenta a declaração drop table eliminando a tabela editora, de sintaxe: drop table <tabela> (3) drop table editora Para realizar a exclusão, o banco de dados e todas as suas tabelas utilizam a declaração, como mostra o exemplo (4), de sintaxe: drop database <nome_banco_de_dados> (4) drop Database projeto_editoras Outros comandos de definição Além dos comandos DDL: CREATE TABLE (cria uma tabela), ALTER TABLE (altera as definições de uma tabela), DROP TABLE (exclui uma tabela), existem outros comandos de definição: CREATE INDEX (cria um índice), ALTER INDEX (altera um índice), DROP INDEX (exclui um índice), CREATE VIEW (cria uma visualização de dados), DROP VIEW (exclui uma visualização de dados), ALTER VIEW (altera uma visualização de dados). Fonte: os autores. saiba mais Pós-Universo 24 DML: PRIMEIRAS INSTRUÇÕES Pós-Universo 25 Inserindo Dados em uma Tabela Segundo Prescott (2015), “para inserir dados em qualquer tabela, temos que usar ‘INSERT INTO’ seguido pelo nome da tabela e então ‘VALUES’ seguido do valor a ser inserido, separado por uma vírgula dentro dos parênteses” [sendo que os valores caracteres devem ser separados por aspas simples]. O exemplo 5 ilustra a inserção dos dados entre parênteses na tabela conta. Contudo, é importante destacar que a ordem na qual os valores são inseridos deve ser igual à ordem das colunas na tabela (sendo que o valor ‘5630-1’ é uma string da primeira coluna “agencia”. O valor ‘00012345-6’ é uma string da segunda coluna “conta_corrente” e 1000 é o valor numérico da terceira coluna “saldo” da tabela conta). A sintaxe é: insert into <nome da tabela> values (coluna1, coluna2, …, coluna n) (5) insert into conta values (‘5630-1’, ‘00012345-6’, 10000) Para Ramalho (2005, p. 135), “este comando insere uma nova linha na tabela, preenchendo as colunas com valores específicos [como mostra o exemplo 5]. Não é necessário atribuir conteúdo para todos os campos”. É possível também alterar a ordem em que os dados são inseridos na tabela. Para isso, deve-se mencionar a ordem das colunas entre parênteses após o nome da tabela. O exemplo (6) apresenta a inserção de dados de ordem definida pelo programador, por “nome da coluna de 1ª ordem”, “2ª ordem”, até à enésima ordem. Neste caso, o campo de 1ª ordem corresponde ao campo ‘conta_corrente’, que recebe o valor ‘00012345-6’; o campo de 2ª ordem corresponde ao ‘saldo’ da conta, que recebe o valor 10000, e o campo de 3ª ordem é ‘agencia’, que recebe o valor ‘5630-1’. A sintaxe é a seguinte: insert into <nome da tabela>(1ª ordem, 2ª ordem, …, enésima ordem) values (valor1, valor2, …, enésimo valor). (6) insert into conta (conta_corrente, saldo, agencia) values (‘00012345-6’, 10000, ‘5630-1’). Pós-Universo 26 Atualizando Dados em uma Tabela As alterações em uma tupla, ou linha ou registro em uma tabela, podem ser necessárias quando se deseja mudar o valor sem mudar todos os valores da tupla. Segundo Silberschatz, Korth e Sudarshan (2006, p. 69), “a instrução update pode ser usada neste caso, [...] podemos escolher as tuplas a serem atualizadas usando a consulta”. O exemplo abaixo mostra a aplicação de 5% de aumento no saldo de uma conta. Em todos os registros da tabela conta é aplicado o percentual de aumento, mas especificamente na coluna (campo) saldo. Set define a aplicação. Silberschatz, Korth e Sudarshan (2006, p. 69) apresentam um exemplo (7) de alteração de todos os registros da tabela relativo ao campo saldo: update conta set saldo = saldo * 1.05 As alterações em tuplas ou linhas de registro em uma tabela podem ser necessárias quando se deseja realizar as alterações de valores com critérios específicos. Para este caso, é necessário utilizar a cláusula where. Silberschatz, Korth e Sudarshan (2006, p. 69) apresentam um complemento do exemplo (8) anterior, que mostra a atualização das tuplas com saldo > = 1000: (8) update conta set saldo = saldo * 1.05 where saldo >=1000 Para Silberschatz, Korth e Sudarshan (2006, p. 69), “ em geral, a cláusula where da instrução update pode conter qualquer construção válida na cláusula where da instrução select (incluindo selects aninhados). [...] Um select aninhado dentro de uma instrução update pode referenciar a relação que está sendo atualizada. Silberschatz, Korth e Sudarshan (2006) apresentam um exemplo (9), a seguir, de uma atualização na tabela conta, no campo saldo, aplicando 5% de juros às contas cujo saldo seja maior do que a “média” dos saldos: Pós-Universo 27 (9) update conta set saldo = saldo * 1.05 where saldo > ( select avg (saldo) from conta) Vejam que avg tira a média dos saldos de todas as tuplas da tabela conta, pois select passa por todos os registros desta tabela. Já a condição where define o critério somente para os saldos maiores que a média. Excluindo Registros (Tuplas) em uma Tabela Para Costa (2006, p. 53), “o comando DELETE é utilizado para excluir linhas [registros, tuplas] de uma tabela”. Sua sintaxe é a seguinte: delete from nome_tabela where expressão_lógica, Costa (2006, p. 53) menciona que “delete é o comando para exclusão de linhas de uma tabela. E from identifica o trecho do comando onde constará a tabela que será afetada. Nome_tabela é a tabela onde serão excluídas as linhas”. Para Silberschatz, Korth e Sudarshan (2006, p. 67), “uma requisição de exclusão é expressa quase da mesma maneira de uma consulta. É possível excluir valores apenas tuplas inteiras; não podemos excluir valores apenas em atributos (campos) específicos”. O exemplo 10 exclui todas as tuplas (relações, registros) de uma tabela conta. (10) delete from conta O exemplo 11, de exclusão das tuplas, é dado pela instrução delete abaixo, que exclui os registros com saldo menor que zero da tabela conta. O critérioé definido pela cláusula where. (11) delete from conta where saldo < 0 Para Costa (2006, p. 103), “também podemos utilizar subconsultas combinadas com operações de exclusão de dados”. O exemplo 12 realiza a exclusão das editoras que não publicaram livros. (12) delete from editora where codigo not in (select editora from livro) atividades de estudo 1. Tipos de dados ou domínios internos são os domínios de valores associados a cada atributo e estas informações são especificadas para determinadas relações em banco de dados através da linguagem DDL (SILBERSCHATZ; KORTH; SUDARSHAN, 2006). Marque a alternativa correta que apresenta a instrução que define as colunas e os seus tipos de dados em uma tabela ou relação. a) drop table. b) create table. c) alter index. d) create index. 2. Os usuários finais e programadores ambos operam em um nível externo, ou seja, interagem com os dados por meio de sublinguagens de dados que se dividem em dois componentes na SQL. Um dos componentes é uma lInguagem de definição de dados (DDL - Data Definition Language). Marque a alternativa que corresponde a uma característica da linguagem DDL. a) Suporta a criação, exclusão e modificação das tabelas e visões. As restrições de integridade podem ser definidas nas tabelas, tanto quando a tabela é criada como posteriormente. b) Permite que os usuários formulem consultas e insiram, excluam e modifiquem tuplas. c) Referenciada como framework quando embutida dentro de uma linguagem hospedeira (Ex.: C ou Cobol). d) Utiliza instruções como DELETE, INSERT, SELECT e UPDATE. atividades de estudo 3. Segundo Prescott (2015), “para inserir dados em qualquer tabela, temos que usar ‘INSERT INTO’ seguido pelo nome da tabela e então ‘VALUES’ seguido do valor a ser inserido, separado por uma vírgula dentro dos parênteses” [sendo que os valores caracteres devem ser separados por aspas simples]. É possível também alterar a ordem em que os dados são inseridos na tabela. Para isso, deve-se: a) mencionar a ordem das tuplas entre parênteses antes do nome da tabela, onde a sequência das tuplas é a ordem a ser definida. b) mencionar a ordem das colunas entre parênteses após o nome da tabela. c) mencionar apenas o comando alter column e as colunas a serem ordenadas. d) mencionar a ordem das colunas entre parênteses antes do nome da tabela, onde a sequência dos campos é a ordem a ser definida. resumo Em nosso estudo, compreendemos que o SQL por natureza não é uma linguagem de programação procedural e sim uma linguagem ou um conjunto de sublinguagens que basicamente permitem a manutenção da estrutura de dados (metadados) e do acesso aos dados de fato, permitindo operações de consulta, inserção, atualização e exclusão; acessos estes realizados em conjunto com as linguagens de programação para as aplicações como Java, C# ou PHP, entre outras. Estas sublinguagens de acesso e manutenção são realizadas por dois componentes, DDL e DML. O componente DDL realiza a definição dos recursos em um banco de dados, como tabelas, campos e índices, permitindo criar e remover tabelas, descrever restrições de integridade, registrar e remover utilizadores e atribuir e retirar privilégios aos utilizadores. Já o componente DML realiza a manipulação de dados em um SGBD, permitindo que os usuários formulem consultas e insiram, excluam e modifiquem tuplas, trabalhando em conjunto com as linguagens de programação para aplicativos móveis, sistemas de gestão empresarial e websites. Vimos que as instruções da sublinguagem DDL, como CREATE, ALTER e o DROP são utilizadas para criar, alterar e eliminar as definições de recursos em uma base de dados. Assim, quando definimos o recurso tabela, compreendemos que devemos definir os tipos de dados ou domínios internos dos valores associados a cada atributo. Já os principais tipos de dados que os banco de dados suportam são os caracteres, como o char (string de caracteres), o varchar (string de caracteres de tamanho variável) e o text (que suporta textos maiores que 4000 caracteres e de tamanho variável); com relação ao suporte ao tipo numérico, temos o int (conjunto de valores inteiros), o NUMBER (armazena valores fixos ou flutuantes de acordo com especificação de precisão e escala) e o DECIMAL (é uma variação de NUMBER). Já as instruções da sublinguagem DML, como SELECT, DELETE, INSERT e UPDATE, são utilizadas para selecionar, eliminar, inserir e atualizar as tuplas em uma base de dados. material complementar Sistema de Banco de Dados Autor: Abraham Silberschatz, Henry F. Korth e S. Surdarshan Editora: Elsevier Sinopse: Este é um livro-texto clássico sobre treinamento em banco de dados. A obra apresenta os conceitos fundamentais do gerenciamento de banco de dados de uma maneira intuitiva e motivadora para os alunos, inclusive com um novo exemplo de banco de dados de uma universidade, que ilustra escolhas mais complexas de projeto. O texto enfatiza questões práticas, aplicações e implementação, junto com uma cobertura dos principais conceitos teóricos. Nesta 6ª edição, todos os capítulos foram revisados para refletir os avanços mais recentes na tecnologia. Os autores fizeram ainda uma cobertura revisada e expandida dos seguintes temas: Variantes da SQL em sistemas reais; Projeto relacional; Aplicações Web e segurança; Indexação e otimização de consulta; Gerenciamento de transação; Bancos de dados paralelos e distribuídos. Comentário: Sem dúvida, um livro complete, que pode complementar os estudos sobre o assunto de transações e controle de concorrência, através de vários exemplos e cenários dos mais simples aos mais complexos. Na Web Para mais detalhes sobre a linguagem SQL, DML (Data manipulation Language) e DDL (Data Definition Language), acesse o link oficial de documentação da Oracle: Web: <https://docs.oracle.com/cd/B28359_01/server.111/b28318/sqlplsql.htm#CNCPT116>. referências COSTA, C. J. Desenvolvimento para web. Lisboa: ITM Press/Lusocredito, 2007. COSTA, R. L. de C. SQL: guia prático. 2. ed. Rio de Janeiro: Brasport, 2006. DATE, C. J. Introdução aos sistemas de banco de dados. Rio de Janeiro: Elsevier, 2003. FREEMAN, R. Oracle, referência para o DBA: técnicas essenciais para o dia-a-dia do DBA. Rio de Janeiro: Elsevier, 2005. PICHILIANI, M. C. Conversando sobre o banco de dados. Joinville: Clube de Autores, 2008. PRESCOTT, P. SQL para iniciantes. Babelcube Inc., 2015. RAMAKRISHNAN, R.; GEHRKE, J. Sistemas Gerenciadores de Banco de Dados. 3. ed. Porto Alegre: AMG. 2011. RAMALHO, J. A. Microsoft SQL Server 2005 - Guia prático. Rio de Janeiro: Elsevier, 2005. RISCHERT, A. Oracle, SQL by example. 4. ed. Pearson Education, 2009. SILBERSCHATZ, A.; KORTH, H. F.; SURDARSHAN, S. Sistemas de Banco de Dados. Rio de Janeiro: Elsevier, 2006. REFERÊNCIAS ON-LINE 1 Em: <https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1834>. Acesso em: 9 dez. 2017. 2 Em: <https://docs.oracle.com/database/121/SQLRF/clauses002.htm#SQLRF52180>. Acesso em: 12 dez. 2017. resolução de exercícios 1. b) create table. 2. a) Suporta a criação, exclusão e modificação das tabelas e visões. As restrições de integridade podem ser definidas nas tabelas, tanto quando a tabela é criada como posteriormente. 3. b) mencionar a ordem das colunas entre parênteses após o nome da tabela. sql
Compartilhar