ESCOLA
Banco de Dados
1 INTRODUO
Banco de Dados
Existem hoje gigantescas bases de dados gerenciando nossas vidas. De fato, sabemos que nossa conta bancria faz parte de uma coleo imensa de contas bancrias de nosso banco. Nosso Ttulo Eleitoral ou nosso Cadastro de Pessoa Fsica, certamente esto armazenados em Bancos de Dados colossais. Sabemos tambm que quando sacamos dinheiro no caixa eletrnico de nosso banco, nosso saldo e as movimentaes existentes em nossa conta bancria j esto nossa disposio. Nestas situaes, sabemos que existe uma necessidade em se realizar o armazenamento de uma srie de informaes que no se encontram efetivamente isoladas umas das outras, ou seja, existe uma ampla gama de dados que se referem a relacionamentos existentes entre as informaes a serem manipuladas. Estes Bancos de Dados, alm de manterem todo este volume de dados organizado, tambm devem permitir atualizaes, incluses e excluses do volume de dados, sem nunca perder a consistncia. E no podemos esquecer que na maioria das vezes estaremos lidando com acessos concorrentes a vrias informaes de nosso banco de dados, algumas vezes at com mais de um acesso mesma informao! Ento, o fato de se montar uma mala direta em um computador com um drive j faz de ns um autor de um Banco de Dados? claro que no! Um Banco de Dados , antes de mais nada, uma coleo logicamente coerente e organizada de dados com determinada significao intrnseca. Um Banco de Dados contm os dados dispostos numa ordem pr-determinada em funo de um projeto de sistema, sempre para um propsito muito bem definido. Um Banco de Dados representar sempre aspectos do Mundo Real. Assim sendo uma Base de Dados (ou Banco de Dados, ou ainda BD) uma fonte de onde poderemos extrair uma vasta gama de informaes derivadas, que possui um nvel de interao com eventos como o Mundo Real que representa. A forma mais comum de interao Usurio e Banco de Dados, d-se atravs de sistemas especficos que, por sua vez, acessam o volume de informaes atravs de uma linguagem apropriada. No processamento tradicional de arquivos, a estrutura dos dados est incorporada ao programa de acesso. Desta forma, qualquer alterao na estrutura de arquivos implica na alterao no cdigo fonte de todos os programas. J na abordagem banco de dados, a estrutura alterada apenas no catlogo, no alterando os programas.
2 CONCEITOS GERAIS
2.1 Banco de Dados
Um banco de dados pode ser definido como um conjunto de dados devidamente relacionados. Porm, o significado do termo banco de dados mais restrito que simplesmente a definio dada acima. Um banco de dados possui as seguintes propriedades: um banco de dados uma coleo lgica coerente de dados com um significado inerente; uma disposio desordenada dos dados no pode ser referenciada como um banco de dados; um banco de dados projetado, construdo e populado com dados para um propsito especfico; um banco de dados possui um conjunto pr definido de usurios e aplicaes; um banco de dados representa algum aspecto do mundo real, o qual chamado de mini-mundo; qualquer alterao efetuada no mini-mundo automaticamente refletida no banco de dados. Um banco de dados representa o arquivo fsico, armazenado em dispositivos perifricos, onde esto armazenados os dados de diversos sistemas, para consulta e atualizao pelo usurio.
10
Banco de Dados
So tarefas de um SGBD: interao com o sistema de arquivos do sistema operacional, cumprimento da integridade, cumprimento da segurana, cpias de segurana (backup) e recuperao, controle de concorrncia. Um SGBD deve manter no somente os dados, mas tambm a forma como os mesmos so armazenados, guardando uma descrio completa do banco de dados. Estas informaes so armazenadas no catlogo do SGBD, o qual contm informaes como a estrutura de cada arquivo, o tipo e o formato de armazenamento de cada tipo de dado, restries, etc. A informao armazenada no catlogo chamada de metadado. Um metadado uma informao sobre uma informao, ou seja, uma informao que descreve uma informao primria. No processamento tradicional de arquivos, o programa que ir manipular os dados deve conter este tipo de informao, ficando limitado a manipular as informaes que o mesmo conhece. O conjunto formado por um banco de dados somado s aplicaes que manipulam o mesmo chamado de Sistema de Banco de Dados.
11
3.1.1 Campos
Como j sabemos, os campos so a parte fundamental de uma base de dados. nos campos que as informaes ficam armazenadas. Antes de utilizar, devemos definir os campos que desejamos usar, e especificar o que cada um pode conter.
3.1.2 Registros
Um conjunto de campos relacionados, forma o que chamamos de registro (tambm conhecido como linha). Um registro, portanto, pode ter a seguinte estrutura: nome CHAR(15); email CHAR(25); telefone INT; Neste exemplo, nosso registro contm trs campos, podendo armazenar o email e o telefone de uma determinada pessoa. Nele, cada conjunto dos dados nome, email e telefone corresponde a um registro. Observe que o campo nome foi definido como CHAR, portanto poder conter qualquer tipo de caracter. Contudo, o campo telefone, definido como INT, poder apenas conter nmeros, pois foi configurado como INT (veremos os tipos de dados que cada campo dever ter mais adiante).
3.1.3 Tabelas
Um conjunto de registros, forma uma tabela. As tabelas podem armazenar grandes quantidades de dados. Como no exemplo anterior, poderamos ter centenas de nomes diferentes cadastrados em nossa tabela de pessoas. Antes de utilizar uma base de dados, precisamos de uma tabela pelo menos, para armazenar os dados. No possvel criar duas tabelas com o mesmo nome.
12
Banco de Dados
Usada para que no seja permitido que o usurio consiga cadastrar dois registros com identificaes iguais. Isto claramente til, quando no desejado que seja digitado um segundo registro igual ao primeiro por engano. Para se definir uma chave primria, basta adicionar PRIMARY KEY definio do campo que se deseja a no duplicidade. Exemplo: nome CHAR(15) PRIMARY KEY; Esta declarao faz com que no seja permitido o cadastro na tabela de dois registros com nomes iguais.
3.3 Vises
Como um conjunto de informaes pode ser utilizada por um conjunto diferenciado de usurios, importante que estes usurios possam ter vises diferentes da base de dados. Uma viso definida como um subconjunto de uma base de dados, formando deste modo, um conjunto virtual de informaes. VISO INTERNA - aquela vista pelo responsvel pela manuteno e desenvolvimento do SGBD. Existe a preocupao com a forma de recuperao e manipulao dos dados dentro do Banco de Dados. VISO CONCEITUAL - aquela vista pelo analista de desenvolvimento e pelo administrador das bases de dados. Existe a preocupao na definio de normas e procedimentos para a manipulao dos dados, para garantir a sua segurana e confiabilidade, o desenvolvimento de sistemas e programas aplicativos e a definio no banco de dados de novos arquivos e campos. Na viso conceitual, existem 2 (duas) linguagens de operao que so: Linguagem de definio dos dados (DDL) - Linguagem que define as aplicaes, arquivos e campos que iro compor o banco de dados (comandos de criao e atualizao da estrutura dos campos dos arquivos). Linguagem de manipulao dos dados (DML) - Linguagem que define os comandos de manipulao e operao dos dados (comandos de consulta e atualizao dos dados dos arquivos). VISO EXTERNA - aquela vista pelo usurio que opera os sistemas aplicativos, atravs de interfaces desenvolvidas pelo analista (programas), buscando o atendimento de suas necessidades.
13
VISO EXTERNA
14
Banco de Dados
A independncia de dados pode ser definida como a capacidade de modificar uma definio de esquema em um nvel sem afetar as definies de esquema em um nvel superior. Existem dois tipos de independncia de dados: independncia de dados lgica: a capacidade de se modificar o esquema conceitual sem ter que modificar o esquema externo ou os programas de aplicao. Ex.: Voc decide adicionar uma nova coluna da tabela Estudante do esquema conceitual. Todos os programas continuaro funcionando. Porm, se uma coluna for removida, os programas que fazem uso desta coluna no funcionaro mais. independncia de dados fsica: a capacidade de se modificar o esquema interno sem ter que alterar o esquema conceitual, o esquema externo ou as aplicaes do usurio. Ex.: Voc decide modificar o layout do registro fsico da tabela Estudante. O esquema conceitual permanece inalterado e todos os programas de aplicaes continuaro funcionando.
15
Representao Grfica:
Atributo um elemento de dado que contm informao que descreve uma entidade. Exemplo: Nome do aluno, Nmero da turma, Endereo do fornecedor, Sexo do funcionrio, etc. Atributo Monovalorado: assume um nico valor para cada elemento (ocorrncia) da entidade. Ex.: nome do funcionrio Atributo Composto: assume um ou mais sub-atributos. Ex.: endereo do fornecedor Representao Grfica: o atributo representado por uma elipse ou pelo seu nome junto entidade correspondente.
Domnio do atributo o conjunto de valores permitidos para um atributo. Exemplo: Conjunto de valores do atributo Sexo do funcionrio: M ou F; Conjunto de valores do atributo Nome aluno: 40 caracteres alfanumricos Conjunto de valores do atributo salrio: inteiro maior que 5000 Relacionamento - representa a associao entre os elementos de duas entidades. Exemplo: O Joo est matriculado na disciplina de Banco de Dados onde: - Joo - Elemento do conjunto de valores do atributo Nome do aluno da entidade Aluno; - Banco de Dados - Elemento do conjunto de valores do atributo Nome da disciplina da entidade Disciplina; - matriculado - Ligao (relacionamento) existente entre um aluno e uma disciplina. Representao Grfica: o relacionamento representado por um losango com seu nome no interior, geralmente sendo este um verbo.
16
Banco de Dados
Um determinado relacionamento tambm pode possuir atributos, tambm conhecido como relacionamento valorado. Esta situao ocorre apenas em relacionamentos (N : M). Ex. Pedro trabalha no projeto Alfa 30 horas. onde: - Pedro um elemento do conjunto de valores do atributo Nome do funcionrio da entidade Funcionrio. - Alfa - um elemento do conjunto de valores do atributo Nome do Projeto da entidade Projeto. - trabalha a ligao existente entre um funcionrio e um projeto. Neste caso, este funcionrio trabalha 30 horas neste projeto, porm este mesmo funcionrio poder trabalhar outro nmero de horas em outro projeto, assim como outro funcionrio trabalha outro nmero de horas no mesmo projeto Alfa. Podemos concluir que 30 horas o atributo que pertence ao Pedro no projeto Alfa, portanto, um atributo do relacionamento trabalha.
Cardinalidade - Representa a frequncia com que o relacionamento existe. Tipos: (1:1), (1:N) ou (N:1), (N:M) - Relacionamento 1:1 uma entidade em A est associada no mximo a uma entidade em B e uma entidade em B est associada no mximo a uma entidade em A.
Ex.: Joo casado com Maria. onde: - Joo - um elemento do conjunto de valores do atributo Nome da entidade Homem. - Maria - um elemento do conjunto de valores do atributo Nome da entidade Mulher. - casado - a ligao 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.
17
Ex.: Pedro trabalha no Departamento Pessoal. onde: - Pedro - um elemento do conjunto de valores do atributo Nome da entidade Funcionrio. - Depart. Pessoal - o elemento do conjunto de valores do atributo Nome do departamento da entidade Departamento. - trabalha - a ligao entre um Funcionrio e um Departamento, onde um funcionrio pode trabalhar em um e somente um departamento e um departamento pode ter vrios funcionrios.
OBS.: A chave estrangeira aparece na direo muitos. - Relacionamento N : M Uma entidade em A est associada a qualquer nmero de entidades em B, e uma entidade em B est associada a qualquer nmero de entidades em A.
Ex.: Antonio est matriculado na disciplina Banco de Dados. onde: - Antonio um elemento do conjunto de valores do atributo Nome da entidade Aluno. - Banco de Dados um elemento do conjunto de valores do atributo Nome da Disciplina da entidade Disciplina. - matriculado a ligao existente entre um aluno e uma disciplina, onde um aluno pode estar matriculado em vrias
18
Banco de Dados
OBS.: Este tipo de relacionamento requer uma entidade extra para ser representado. Chaves um conjunto de um ou mais atributos que, tomados coletivamente, permitem-nos identificar unicamente uma ocorrncia (registro) dentro de uma entidade. Integridade de entidade: nenhum atributo que participe da chave de uma entidade deve aceitar valores nulos. Aspectos relevantes: A questo fundamental do projeto de chaves reduzir ao mximo os efeitos de redundncia. A alterao dos valores de campos da chave primria ou a remoo de uma ocorrncia em uma entidade pode ocasionar problemas de integridade referencial. Restries de Integridade Um Banco de Dados armazena informao sobre parte de um mundo real que chamamos de mini-mundo. Certas regras, denominadas de Restries de Integridade, governam este mini-mundo. As restries de Integridade especificam os estados do BD que so considerados consistentes. O estado de um Banco de Dados dito consistente ou vlido se todas as restries de integridade forem satisfeitas.
19
Os nomes das tabelas e dos campos so de fundamental importncia para nossa compreenso entre o que estamos armazenando, onde estamos armazenando e qual a relao existente entre os dados armazenados. Um domnio um conjunto de valores atmicos, sendo que por atmico podemos entender que cada valor do domnio indivisvel. Durante a especificao do domnio importante destacar o tipo, o tamanho e a faixa do atributo que est sendo especificado. Por exemplo, Rio de Janeiro, Paran e Par so estados vlidos para o Brasil, enquanto que Corrientes no um estado vlido (pertence a Argentina e no ao Brasil). Outras observaes so: As relaes no podem ser duplicadas (no podem existir dois estados do Par, no conjunto de estados brasileiros, por exemplo); A ordem de entrada de dados no Banco de Dados no dever ter qualquer importncia para as relaes, no que concerne ao seu tratamento; Os atributos devero ser atmicos, isto , no so passveis de novas divises.
20
3.6.1 Esquema
Banco de Dados
O esquema de uma relao a descrio da estrutura dos dados e as restries que precisam ser obedecidas em um banco de dados. Ele nada mais do que os campos (colunas) existentes em uma tabela. O esquema raramente muda com o tempo.
3.6.2 Instncia
A instncia de uma relao consiste no conjunto de valores que cada atributo recebe em um determinado instante. Portanto, os dados armazenados no banco de dados, so formados pelas instncias das relaes. tambm chamada de estado ou ocorrncia do banco de dados. A instncia muda freqentemente pois ela alterada toda vez que uma alterao feita no banco de dados. O SGBD responsvel por garantir que toda instncia do banco de dados satisfaa ao esquema do banco de dados, respeitando sua estrutura e suas restries. O esquema de um banco de dados tambm pode ser chamado de intenso de um banco de dados e a instncia de extenso de um banco de dados.
3.7 Normalizao
O processo de normalizao pode ser visto como o processo no qual so eliminados esquemas de relaes (tabelas) no satisfatrios, decompondo-os, atravs da separao de seus atributos em esquemas de relaes menos complexas mas que satisfaam as propriedades desejadas. O processo de normalizao como foi proposto inicialmente por Codd conduz um esquema de relao atravs de um bateria de testes para certificar se o mesmo est na 1, 2 e 3 Formas Normais. Estas trs Formas Normais so baseadas em dependncias funcionais dos atributos do esquema de relao. Na prtica, os procedimentos de normalizao consideram-se geralmente satisfatrios se as tabelas atingirem a terceira Forma Normal (3FN). Vamos a elas.
1 Forma Normal
Uma tabela encontra-se na primeira forma normal (1FN) se todos os seus atributos estiverem definidos em domnios que contenham apenas valores atmicos (indivisveis). Dito por outras palavras: os domnios devem ser formados por valores elementares e no por conjuntos de valores. Leve em considerao o esquema a seguir: Imagine-se que criada uma tabela destinada a registrar a informao sobre os alunos e sobre as disciplinas em que esses alunos esto matriculados.
Aluno (IdAluno, Nome, Endereo, Disciplinas) Tabela: Aluno IdAluno A1 A2 A3 A4 Nome Joo Ana Pedro Felipe Endereo Santo ngelo So Luiz Gonzaga Entre-Ijuis Santo ngelo Disciplinas Matemtica, Economia, Direito Matemtica, Fsica Matemtica, Economia, Fsica Matemtica
Esta tabela no obedece primeira forma normal (1FN), uma vez que o atributo Disciplinas admite conjuntos de valores. Pode-se resolver este problema repetindo valores nas linhas da tabela, de forma que, em cada linha, o atributo Disciplinas contenha um nico valor.
21
IdAluno Nome Endereo Disciplinas A1 Joo Santo ngelo Matemtica A1 Joo Santo ngelo Economia A1 Joo Santo ngelo Direito A2 Ana So Luiz Gonzaga Matemtica A2 Ana So Luiz Gonzaga Fsica A3 Pedro Entre-Ijuis Matemtica A3 Pedro Entre-Ijuis Economia A3 Pedro Entre-Ijuis Fsica A4 Felipe Santo ngelo Matemtica Esta tabela encontra-se agora na primeira forma normal (1FN), pois todos os atributos contm valores elementares. No entanto, apresenta uma evidente redundncia de informao, que se reflete na repetio dos identificadores, dos nomes e dos endereos dos alunos. Como se no bastasse, pode-se apontar ainda: Problemas de atualizao Se o endereo de um aluno for alterado, essa alterao precisaria ser feita em vrias linhas da tabela, sob pena de gerar um estado de inconsistncia da base de dados. Problemas de insero Com esta estrutura no possvel registrar informao relativa a um aluno que, por qualquer razo, no esteja matriculado a nenhuma disciplina. Imagine-se, por exemplo, o caso de um aluno externo que precise apenas efetuar exames, mas que no est matriculado a nenhuma disciplina. Problemas de eliminao Observe-se na tabela anterior o caso do aluno Felipe, que est matriculado apenas a uma disciplina. Se essa matrcula for anulada, perde-se, no apenas, a informao referente matrcula, mas tambm a informao relativa aos restantes atributos do aluno. Os problemas referidos podem ser eliminados criando: uma tabela para registrar apenas os dados dos alunos uma tabela para registrar apenas os dados relativos s disciplinas uma tabela para representar as matrculas Logo, o esquema dessas tabela poderia ser o seguinte: Aluno (IdAluno, Nome, Endereo,) Disciplina (IdDisciplina, CH,) Matrcula (IdAluno, IdDisciplina, Data,) Esta decomposio da tabela permite eliminar os problemas anteriormente referidos, relacionados com a atualizao, a insero e a eliminao de dados nas tabelas, pois a primeira forma normal (1FN) tem como principal objetivo remover grupos repetitivos de dados.
22
2 Forma Normal
Banco de Dados
Para se compreender a representao da segunda forma normal (2FM), necessrio antes de mais apresentar o conceito de dependncia ou dependncia funcional entre atributos. Dependncia funcional Considere-se a tabela A com os atributos x, y, z e w
A (x, y, z, w)
O atributo z funcionalmente dependente do atributo x se, para um dado valor x, o valor de z sempre o mesmo. Ou seja: conhecido x, sabe-se automaticamente qual o valor de z. Existe assim uma dependncia funcional entre o atributo x e o atributo z. O atributo x designa-se por determinante; o atributo z designa-se por dependente. Consideremos a seguinte tabela: Aluno (IdAluno, Nome, Endereo, IdDiscilina, CHDisciplina) Como se pode notar, o atributo Nome depende funcionalmente do atributo IdAluno, visto que o identificador de um aluno determina o nome desse aluno. O mesmo se pode observar relativamente ao atributo CHDisciplina. Este atributo depende funcionalmente do atributo IdDisciplina. Concluso: esta tabela no est na segunda forma normal (2FN). A transformao feita em um exemplo anterior conduziu ao seguinte conjunto de tabelas: Aluno (IdAluno, Nome, Endereo,) Disciplina (IdDisciplina, CH,) Matrcula (IdAluno, IdDisciplina, Data,) Pode-se verificar que todas estas tabelas esto na segunda forma normal (2FN). Isso evidente em relao s duas primeiras, Aluno e Disciplina.
3 Forma Normal
Uma tabela encontra-se na terceira forma normal (3FN) se: estiver na segunda forma normal e nenhum dos atributos que no fazem parte da chave for funcionalmente dependente de qualquer combinao dos restantes. Para que uma tabela esteja na terceira forma normal (3FN) necessrio que todos os atributos que no pertencem chave sejam mutuamente independentes. Considere-se uma tabela destinada a registar informao sobre jogos de futebol e rbitros, com a seguinte estrutura: Jogo (IdJogo, Estdio, Nome-rbitro, Categoria-rbitro) Nesta tabela verifica-se o seguinte: Todos os atributos so funcionalmente dependentes da chave. Existe uma situao de transitividade: o atributo categoria-rbitro depende funcionalmente do atributo Nome-rbitro. Os atributos Nome-rbitro e Categoria-rbitro no so independentes. A tabela no se encontra, por isso, na terceira forma normal. Esta situao provoca as j referidas dificuldades ao nvel da atualizao, insero e eliminao de dados: Problemas de atualizao Se o rbitro mudar de categoria, essa alterao deve ser efetuada em todas as ocorrncias desse valor. Se existisse uma
23
tabela prpria para registar os dados referentes aos rbitros, a alterao da categoria seria feita num nico registrado. Problemas de insero Se um rbitro ainda no tiver arbitrado nenhum jogo, mas j estiver inscrito na respectiva associao com determinada categoria, ele no pode ser registrado nesta tabela (mas poderia s-lo se existisse uma tabela independente para rbitros). Problemas de eliminao Admita-se por hiptese que determinado rbitro arbitrou um s jogo. Se for eliminado o registro relativo a esse jogo, elimina-se tambm a informao relativa ao rbitro. A normalizao transforma esta tabela no seguinte conjunto de tabelas, todas elas na 3FN: Jogo (IdJogo, Estdio) rbitro (Idrbitro, Nome-rbitro, Categoria-rbitro) Jogo-rbitro (Idjogo, Idrbitro)
4 LINGUAGEM SQL
Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos, foram criadas linguagens destinadas a sua manipulao. SQL (Structured Query Language Linguagem Estruturada para Pesquisas) foi originalmente criada pela IBM, mas por causa da criao de dialetos para ela, feitos por muitos desenvolvedores, foi adotado um padro para a linguagem pelo ANSI (American National Standards Institute), em 1986 e pela ISSO, em 1987. Assim, ela ficou conhecida como uma linguagem de computador para acessar e manipular bancos de dados. SQL, embora padronizado pelo ANSI e pela ISO, tem muitas variaes e extenses por causa dos diferentes fabricantes de sistemas gerenciadores de banco de dados. Normalmente a linguagem pode ser aportada de plataforma para plataforma sem mudanas estruturais principais. Declaraes SQL so usadas para recuperar e atualizar dados em um banco de dados. SQL trabalha com programas de banco de dados como DB2, Oracle, Sybase, MySQL, MS SQL Server, etc. A Linguagem SQL tem como grandes virtudes e caractersticas: sua capacidade de gerenciar ndices, sem a necessidade de controle individualizado de ndice corrente, algo muito comum nas linguagens de manipulao de dados do tipo registro a registro. sua capacidade de construo de vises, que so formas de visualizarmos os dados na forma de listagens independentes das tabelas e organizao lgica dos dados. a capacidade que dispomos de cancelar uma srie de atualizaes ou de as gravarmos, depois de iniciarmos uma seqncia de atualizaes. Os comandos Commit e Rollback so responsveis por estas facilidades. SQL representa um conjunto de comandos responsveis pela: Definio dos dados das tabelas, chamada de DDL (Data Definition Language); A DDL um conjunto de comandos e atualizao dos dados em um Sistema Gerenciador de Banco de Dados (SGBD). Como exemplo de comandos da classe DDL temos os comandos Create, Alter e Drop. Manipulao dos mesmos dados, chamada de DML (Data Manipulation Language). Os comandos da srie DML so destinados a consultas, inseres, excluses e alteraes em um ou mais registros de uma ou mais tabelas de maneira simultnea. Como exemplo de comandos da classe DML temos os comandos Select, Insert, Update e Delete.
24
recuperao da informao armazenada insero de novas informaes excluso de informaes modificao de dados armazenados A DML permite ao usurio acessar ou manipular os dados, vendo-os da forma como so definidos no nvel de abstrao mais alto do modelo de dados utilizado. A parte de uma DML que envolve recuperao de informao chamada linguagem de consulta. Uma consulta (query) um comando que requisita uma recuperao de informao.
Banco de Dados
4.1.2 SELECT
Objetivo: Selecionar um conjunto de registros em uma ou mais tabelas que atenda a uma determinada condio definida pelo comando. Sintaxe: SELECT ALL FROM <nome-tabela> [, <nome-tabela>] DISTINCT WHERE <condio> GROUP BY <nome-coluna> HAVING <condio> ORDER BY <nome-campo> ASC DESC onde: nome-tabela - representa o nome da(s) tabela(s) que contm as colunas que sero selecionadas ou que sero utilizadas para a execuo da consulta. condio - representa a condio para a seleo dos registros. Esta seleo poder resultar em um ou vrios registros. nome-coluna - representa a(s) coluna(s) cujos resultados so grupados para atender consulta. ALL - opo default. Mostra todos os valores obtidos na seleo. DISTINCT - opo que mostra os valores obtidos na seleo eliminando as duplicidades. WHERE - especifica o critrio de seleo dos registros nas tabelas especificadas. GROUP BY - especifica o(s) campo(s) que ser(o) agrupados para atender a consulta. HAVING - especifica uma condio para seleo de um grupo de dados. Esta opo s utilizada combinada com a opo GROUP BY. ORDER BY - esta opo, quando utilizada apresenta o resultado da consulta ordenado de forma crescente ou decrescente pelos campos definidos.
25
A seguir, mostrada uma lista de operadores lgicos e complementares que podem ser utilizados nas expresses apresentadas em WHERE.
26
Banco de Dados
Caso 4: Apresentar todos os salrios existentes na empresa, porm omitir eventuais duplicidades. Resposta: A clusula DISTINCT elimina duplicidades, significando que somente relaes distintas sero apresentadas como resultado de uma pesquisa. SELECT DISTINCT empserv FROM emp; Caso 5: Apresentar todos os dados dos empregados, considerando sua existncia fsica diferente de sua existncia lgica (ou seja, devidamente inicializado). Resposta: Deseja-se um tratamento diferenciado para valores nulos. Qualquer coluna de uma tupla que no contiver informaes denominada de nula, portanto, informao no existente. Isto no o mesmo que zero, pois zero um nmero como outro qualquer, enquanto que um valor nulo utiliza um byte de armazenagem interna e so tratados de forma diferenciada pelo SQL. SELECT empnome, empsala + empcomi FROM emp; SELECT empnome, NVL(empsala,0) + NVL(empcomi,0) FROM emp; Obs.: A funo NVL utilizada para converter valores nulos em zeros.
27
Caso 8: Selecionar os empregados cujos salrios sejam menores que 1000 ou maiores que 3500. Resposta: Ser necessrio aqui a utilizao de expresso negativa. SELECT empnome, empsala FROM emp WHERE empsala NOT BETWEEN 1000 AND 3500; Caso 9: Apresentar todos os funcionrios com salrios entre 200 e 700 e que sejam vendedores. Resposta: Ser necessrio consultas com condies mltiplas. Os operadores AND (E) e OR (OU) fazem isto. SELECT empnome, empsala, empserv FROM emp WHERE empsala BETWEEN 700 AND 2000 AND empserv = vendedor;
28
Caso 10: Apresentar todos os funcionrios com salrios entre 200 e 700 ou que sejam vendedores. Resposta: SELECT empnome, empsala, empserv FROM emp WHERE empsala BETWEEN 700 AND 2000 OR empserv = vendedor;
Banco de Dados
Caso 11: Apresentar todos os funcionrios com salrios entre 200 e 700 e que sejam vendedores ou balconistas. Resposta: SELECT empnome, empsala, empserv FROM emp WHERE empsala BETWEEN 700 AND 2000 AND ( empserv = balconista OR empserv = vendedor );
A linguagem far a seguinte avaliao: a) WHERE, para estabelecer tuplas individuais candidatas (no pode conter funes de grupo). b) GROUP BY, para fixar grupos. c) HAVING, para selecionar grupos para exibio.
29
Escola Alcides Maya - Terceira Mdulo 4.1.11 Equi-Juno (Juno por igualdade)
O relacionamento existente entre tabelas chamado de equi-juno, pois os valores de colunas das duas tabelas so iguais. A equi-juno possvel apenas quando se tiver definido de forma adequada a chave estrangeira de uma tabela e sua referncia chave primria da tabela precedente. Caso 13: Listar nomes de empregados, cargos e nome do departamento onde o empregado trabalha. Resposta: Pode-se observar que dois dos trs dados solicitados esto na tabela Emp, enquanto o outro dado est na tabela Dept. Deve-se ento acessar os dados restringindo convenientemente as relaes existentes entre as tabelas. De fato sabe-se que depnume chave primria da tabela de Departamentos e tambm chave estrangeira da tabela de Empregados. Portanto, este campo ser o responsvel pela equi-juno. SELECT A.empnome, A.empserv, B.depnome FROM emp A, dept B WHERE A.depnume = B.depnume; Obs.: Pode-se notar que, quando as tabelas contm colunas com o mesmo nome, usa-se um apelido: o alias, para substituir o nome da tabela associado coluna. Imagine que algum tivesse definido NOME para ser o Nome do Empregado na tabela de Empregados e tambm NOME para ser o nome do Departamento na tabela de Departamentos. Tudo funcionaria de forma adequada, pois o alias se encarregaria de evitar que uma ambigidade fosse verificada. Embora SQL resolva de forma muito elegante o problema da nomenclatura idntica para campos de tabelas, ainda assim recomenda-se evitar tal forma de nomear os campos. O SQL nunca confundir um A.NOME com um B.NOME, porm, podemos afirmar o mesmo de ns mesmos? Caso 14: Listar os cdigos de cada funcionrio, seus nomes, seus cargos e o nome do gerente ao qual este se relaciona. Resposta: Precisa-se criar um auto-relacionamento, ou seja, juntar uma tabela a ela prpria. possvel juntar uma tabela a ela mesma com a utilizao de apelidos, permitindo juntar ocorrncias da tabela a outras ocorrncias da mesma tabela. SELECT A.empnume, A.empnome, A.empserv, B.empnome FROM emp A, emp B WHERE A.empgere = B.empnume;
4.1.12 As Sub-Consultas
Uma sub-consulta uma instruo SELECT aninhada dentro de uma SELECT, INSERT, DELETE ou UPDATE, ou dentro de uma outra sub-consulta, e que devolve resultados intermedirios. Sintaxe Voc pode usar trs formas de sintaxe para criar uma subconsulta: comparao [ANY | ALL | SOME] (instruosql) expresso [NOT] IN (instruosql) [NOT] EXISTS (instruosql) Uma subconsulta possui as partes abaixo: Parte Comparao Expresso Instruo SQL Descrio Uma expresso e um operador de comparao que compara a expresso com o resultado da subconsulta. Uma expresso para a qual o resultado definido da subconsulta procurado. Uma instruo SELECT de acordo com as mesmas regras e formato de qualquer outra instruo SELECT. Ela deve estar entre parnteses.
Comentrios Voc pode usar uma subconsulta ao invs de usar uma expresso na lista de campo de uma instruo SELECT ou em
30
uma clusula WHERE ou HAVING. Em uma subconsulta, voc usa uma instruo SELECT para fornecer um conjunto de um ou mais valores especficos para avaliar as expresses das clusulas WHERE ou HAVING. Use o predicado ANY ou SOME, que so sinnimos, para recuperar registros na consulta principal que satisfaam a comparao com quaisquer registros recuperados na subconsulta. O exemplo abaixo retorna todos os produtos cujo preo unitrio maior que o preo de qualquer produto vendido com um desconto de 25 por cento ou mais: SELECT * FROM produto WHERE preounit > ANY (SELECT preounit FROM pedido_detalhes WHERE desconto >= .25); Use o predicado ALL para recuperar apenas os registros na consulta principal que satisfaam a comparao com todos os registros recuperados na subconsulta. Se voc mudasse ANY para ALL no exemplo acima, a consulta retornaria apenas os produtos cujo preo unitrio fosse maior que o de todos os produtos vendidos com um desconto de 25 por cento ou mais. Isto muito mais restritivo. Use o predicado IN para recuperar apenas os registros na consulta principal para os quais alguns registros na subconsulta contm um valor igual. O exemplo abaixo retorna todos os produtos com um desconto de 25 por cento ou mais: SELECT * FROM produto WHERE produtoID IN (SELECT produtoID FROM pedido_detalhes WHERE desconto >= .25); De maneira contrria, voc pode usar NOT IN para recuperar apenas os registros na consulta principal para os quais no existam registros com valores iguais na subconsulta. Utilize o predicado EXISTS (com a palavra reservada NOT opcionalmente) em comparaes TRUE/FALSE para determinar se a subconsulta retorna algum registro. Voc tambm pode usar aliases de nomes de tabelas em uma subconsulta para fazer referncia a tabelas listadas em uma clusula FROM fora da subconsulta. O exemplo abaixo retorna os nomes dos funcionrios cujos salrios sejam iguais ou superiores mdia de salrios de todos os funcionrios na mesma funo. Para a tabela Funcionrios dado o alias T1: SELECT sobrenome, nome, ttulo, salrio FROM funcionrio AS T1 WHERE salrio >= (SELECT AVG(salrio) FROM funcionrio WHERE T1. T1.ttulo = funcionrio.ttulo) ORDER BY title; No exemplo acima, a palavra reservada AS opcional. Algumas subconsultas so aceitas em consultas de tabela cruzada especialmente como predicados (as da clusula WHERE). Subconsultas como sada (as da lista SELECT) no so aceitas em tabelas de referncia cruzada. Caso 15: Listar o nome, o ttulo e o salrio de todos os representantes de vendas cujos salrios sejam superiores aos de todos os gerentes e diretores. Resposta: SELECT sobrenome, nome, ttulo, salrio FROM funcionrio WHERE ttulo LIKE *repr vendas* AND salrio > ALL (SELECT salrio FROM funcionrio WHERE (ttulo LIKE *gerente*) OR (ttulo LIKE *diretor*)); Caso 16: listar o nome e o preo unitrio de todos os produtos cujo preo unitrio seja igual ao do Licor de Cacau.
Banco de Dados
31
Resposta: SELECT nome_produto, preounit FROM produto WHERE preounit = (SELECT preounit FROM [produto] WHERE nome_produto = Licor de Cacau); Caso 17: listar a empresa e o contato de cada empresa de todos os clientes que fizeram pedidos no segundo trimestre de 1995. Resposta: SELECT nome_contato, nome_empresa, contato_ttulo, fone FROM cliente WHERE clienteID IN (SELECT clienteID FROM pedido WHERE data_pedido BETWEEN #1/04/95# AND #1/07/95#); Caso 18: listar os funcionrios cujo salrio seja maior que a mdia dos salrios de todos os funcionrios. Resposta: SELECT sobrenome, nome, ttulo, salrio FROM funcionrio T1 WHERE salrio >= (SELECT AVG (salrio) FROM funcionrio WHERE funcionrio.ttulo = T1.ttulo) ORDER BY ttulo; Caso 19: selecionar o nome de todos os funcionrios que tenham registrado pelo menos um pedido. Resposta: SELECT nome, sobrenome FROM funcionrio AS E WHERE EXISTS (SELECT * FROM pedido AS O WHERE O.funcionrioID = E.funcionrioID); Caso 20: Alterar o campo Efetuado do arquivo de servios para 2 caso o mesmo tenha parecer tcnico da entidade encaminhanhamento diferente de nulo. Resposta: UPDATE servico SET efetuado = 2 WHERE numero_servico = ANY (SELECT servico.numero_servico FROM servico INNER JOIN encaminhamento ON (servico.numero_servico = encaminhamento.numero_servico) AND (servico. ano_servico = encaminhamento.ano_servico) WHERE (((servico.efetuado) Is Null) AND ((encaminhamento.parecer_tecnico) Is Not Null)) GROUP BY servico.numero_servico ORDER BY servico.numero_servico); Caso 21: Relacionar todos os nomes de funcionrios e seus respectivos cargos, desde que o oramento do departamento seja igual a 300000. Resposta:
32
SELECT empnome, empserv FROM emp A WHERE 300000 IN ( SELECT deporca FROM dept WHERE dept.depnume = A.depnume );
Banco de Dados
Nota: Observe que a clusula IN torna-se verdadeira quando o atributo indicado est presente no conjunto obtido atravs da sub-consulta. Caso 22: Relacionar todos os departamentos que possuem empregados com remunerao maior que 3500. Resposta: SELECT depnome FROM dept A WHERE EXISTS (SELECT * FROM emp WHERE empsala > 3500 AND emp.depnume =A.depnume); Nota: Observe que a clusula EXISTS indica se o resultado de uma pesquisa contm ou no tuplas. Observe tambm que poderemos verficar a no existncia (NOT EXISTS) caso esta alternativa seja mais conveniente.
4.1.13 Unies
Podemos eventualmente unir duas linhas de consultas simplesmente utilizando a palavra reservada UNION. Caso 23: Listar todos os empregados que tenham cdigo maior que 10 ou funcionrios que trabalhem em departamentos com cdigo maior que 10. Resposta: (SELECT * FROM emp WHERE empnume > 10) UNION (SELECT * FROM emp WHERE depnume > 10);
33
Exemplos: Possibilita a insero de registros de forma interativa. INSERT INTO dept; Possibilita a insero de registros em tabelas sem digitao dos dados. INSERT INTO dept (depnume,depnome,deploca) VALUES (70,producao,Rio de Janeiro);
Esse exemplo aumenta o preo unitrio de todos os produtos no suspensos do fornecedor 8 em 10 porcento.
34
UPDATE produto SET preounit = preounit * 1.1 WHERE fornecedorID = 8 AND suspenso = No;
Banco de Dados
Esse exemplo reduz o preo unitrio de todos os produtos no suspensos fornecidos pela Tokyo Traders em 5 porcento. As tabelas produto e fornecedor tm uma relao um para vrios. UPDATE fornecedor INNER JOIN produto ON fornecedor.fornecedorID = produto.fornecedorID SET preounit = preounit * .95 WHERE nome_empresa = Tokyo Traders AND Suspenso = No;
35
Exemplos de instruo DELETE: Esse exemplo exclui todos os registros de funcionrios cujo ttulo seja Estagirio. Quando a clusula FROM inclui apenas uma tabela, no necessrio indicar o nome da tabela na instruo DELETE. DELETE * FROM funcionrio WHERE ttulo = Estagirio;
Esse exemplo exclui todos os registros de funcionrios cujo ttulo seja Estagirio e que tambm tenham um registro na tabela folha_pagamento. As tabelas funcionrio e folha_pagamento tm uma relao um para um. DELETE funcionrio.* FROM funcionrio INNER JOIN folha_pagamento ON funcionrio.funcionrioID = folha_pagamento.funcionrioID WHERE funcionrio.ttulo = Estagirio;
36
comuns sero definidos mais frente. NOT NULL - Exige o preenchimento do campo, ou seja, no momento da incluso obrigatrio que possua um contedo. NOT NULL WITH DEFAULT - Preenche o campo com valores pr-definidos, de acordo com o tipo do campo, caso no seja especificado o seu contedo no momento da incluso do registro. Os valores pr-definidos so: Campos numricos - Valor zero. Campos alfanumricos - Caracter branco. Campo formato Date - Data corrente. Campo formato Time - Horrio no momento da operao. PRIMARY KEY (nome-coluna-chave) - Definir para o banco de dados a coluna que ser a chave primria da tabela. Caso ela tenha mais de um coluna como chave, elas devero ser relacionadas entre os parnteses. FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES (nome-tabela-pai) - Definir para o banco de dados as colunas que so chaves estrangeiras, ou seja, os campos que so chaves primrias de outras tabelas. Na opo REFERENCES deve ser especificado a tabela na qual a coluna a chave primria. ON DELETE - Esta opo especifica os procedimentos que devem ser feitos pelo SGBD quando houver uma excluso de um registro na tabela pai quando existe um registro correspondente nas tabelas filhas. As opes disponveis so: RESTRICT - Opo default. Esta opo no permite a excluso na tabela pai de um registro cuja chave primria exista em alguma tabela filha. CASCADE - Esta opo realiza a excluso em todas as tabelas filhas que possua o valor da chave que ser excluda na tabela pai. SET NULL - Esta opo atribui o valor NULO nas colunas das tabelas filhas que contenha o valor da chave que ser excluda na tabela pai. Tipos de dados mais comuns: Numricos: Smallint - Armazena valores numricos, em dois bytes binrios, compreendidos entre o intervalo -32768 a +32767. Integer - Armazena valores numricos, em quatro bytes binrios, compreendidos entre o intervalo -2147483648 a +2147483647 Decimal(n,m) - Armazena valores numricos com no mximo 15 dgitos. Nesta opo deve ser definida a quantidade de dgitos inteiros (n) e casas decimais (m) existentes no campo. Alfanumricos: Varchar (n) - Definir um campo alfanumrico de at n caracteres, onde n deve ser menor ou igual a 254 caracteres. Char (n) - Definir um campo alfanumrico de n caracteres, onde n deve ser menor ou igual a 254 caracteres. Long Varchar - Definir um campo alfanumricos de comprimento maior que 254 caracteres. Campo Date - Definir um campo que ir armazenar datas. Campo Time - Definir um campo que ir armazenamento de horrio.
Banco de Dados
37
ADD PRIMARY KEY <nome-coluna> DROP PRIMARY KEY <nome-coluna> ADD FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES (nome-tabela-pai) ON DELETE [RESTRICT] [CASCADE] [SET NULL] DROP FOREIGN KEY (nome-coluna-chave-estrangeira) REFERENCES (nome-tabela-pai) onde: nome-tabela - Representa o nome da tabela que ser atualizada. nome-coluna - Representa o nome da coluna que ser criada. tipo-do-dado - Clusula que define o tipo e tamanho dos campos definidos para a tabela. DROP <nome-coluna> - Realiza a retirada da coluna especificada na estrutura da tabela. ADD <nome-coluna> <tipo-do-dado> - Realiza a incluso da coluna especificada na estrutura da tabela. Na coluna correspondente a este campo nos registros j existentes ser preenchido o valor NULL (Nulo). As definies NOT NULL e NOT NULL WITH DEFAULT so semelhantes do comando CREATE TABLE. RENAME <nome-coluna> <novo-nome-coluna> - Realiza a troca do nome da coluna especificada. RENAME TABLE <novo-nome-tabela> - Realiza a troca do nome da tabela especificada. MODIFY <nome-coluna> <tipo-do-dado> - Permite a alterao na caracterstica da coluna especificada. Opes: Alm das existentes na opo ADD (NOT NULL e NOT NULL WITH DEFAULT), temos a opo NULL que altera a caracterstica do campo passando a permitir o preenchimento com o valor Nulo. ADD PRIMARY KEY <nome-coluna> - Esta opo utilizada quando acrescido um novo campo como chave primria da tabela. DROP PRIMARY KEY <nome-coluna> - Esta opo utilizada quando retirado um campo como chave primria da tabela. ADD FOREIGN KEY <nome-coluna> - Esta opo utilizada quando acrescido um novo campo sendo ele uma chave estrangeira. DROP FOREIGN KEY <nome-coluna> - Esta opo utilizada quando retirado uma chave estrangeira da estrutura da tabela.
38
onde:
[DESC]
[DESC]
Banco de Dados
nome-ndice - representa o nome da estrutura de ndice que ser criada. acesso. nome-tabela - representa o nome da tabela que contem a coluna na qual ser criada o ndice de nome-coluna - representa o nome da coluna para a qual ser criado o ndice. (DESC). Opo ASC/DESC - representa a criao do ndice ordenado em ordem crescente (ASC) ou decrescente
39
campo data de vencimento. Quando o pagamento vier a ser efetuado, o campo ser atualizado. bastante possvel que seja construda uma consulta para recuperar todos os ttulos no pagos. Neste caso, no ser possvel o uso de ndices, pois estamos procurando campos com valor nulo. Se tivermos, nesta tabela, 200.000 ttulos, dos quais 500 so no pagos, esta consulta ter desempenho bastante aqum do possvel. Uma soluo melhor, seria inicializar o campo data de vencimento com o valor 01/01/2000, significando conta no paga. Como ltima considerao sobre consultas em uma tabela, vale lembrar que quando fazemos uma consulta a uma tabela bastante pequena, no compensa usar ndices. O trabalho envolvido em acessar o ndice, pegar o endereo e, somente depois, acessar a tabela, maior que o esforo de ler a tabela inteira.
4.2.9 Vises
Em SQL, uma viso uma tabela virtual baseada em um grupo de resultados de uma declarao SELECT. Uma viso contm linhas e colunas, exatamente como uma tabela real. Os campos em uma viso so campos de uma ou mais tabelas reais de um banco de dados. Voc pode adicionar funes SQL e declaraes WHERE e JOIN em uma viso e apresentar o dado como se este tivesse vindo de uma nica tabela. Importante: O projeto e a estrutura de um banco de dados no so afetados por funes ou por declaraes WHERE ou JOIN em uma viso. Sintaxe: CREATE VIEW nome_visao AS SELECT nome_coluna(s) FROM nome_tabela WHERE condicao Nota: O banco de dados no armazena os dados de uma viso! A base de dados recria os dados utilizando a declarao SELECT dentro da viso, toda vez que o usurio pesquisar essa viso. Uma viso pode ser usada dentro de uma query ou dentro de uma outra viso. Adicionando funes, JOINS, etc. a uma viso, ela permite a voc apresentar exatamente o dado que voc deseja. Imaginemos, dentro de um banco de dados, uma viso chamada Lista de produtos que mostra todos os produtos ativos (produtos que no so interrompidos) de uma tabela de produtos. A viso criada da seguinte maneira: CREATE VIEW lista_produtos AS SELECT ID_produto, nome_produto FROM produto WHERE interrompido=No; Podemos criar a query para a viso acima da seguinte maneira: SELECT * FROM lista_produtos Outra viso do mesmo banco de dados seleciona todos os produtos da tabela produto que tem um preo unitrio que maior que a mdia dos preos unitrios: CREATE VIEW produtos_media_ preco_acima AS SELECT nome_produto, preco_unit FROM produto WHERE preco_unit > (SELECT AVG (preco_unit) FROM produto) Podemos criar a query para a viso acima da seguinte maneira: SELECT * FROM lista_produtos
40
5 MYSQL
5.1 Introduo ao programa
Banco de Dados
O programa MySQL um servidor robusto de bancos de dados SQL (Structured Query Language - Linguagem Estruturada para Pesquisas) muito rpido, multi-tarefa e multiusurio. MySQL uma marca registrada da MySQL AB. O programa MySQL de Licena Dupla. Os usurios podem escolher entre usar o programa MySQL como um produto Open Source/Free Software, sob os termos da GNU General Public License ou podem comprar uma licena comercial padro da MySQL AB. O site web do MySQL (http://www.mysql.com/) dispe das ltimas informaes sobre o programa MySQL, assim como de qualquer informao que se precise sobre o produto e o software. O MySQL, um sistema de gerenciamento de banco de dados. Um banco de dados relacional armazena dados em tabelas separadas em vez de colocar todos os dados em um s local. Isso proporciona velocidade e flexibilidade. Como uma das caractersticas tcnicas do MySQL, podemos dizer que o Programa de Banco de Dados MySQL um sistema cliente/servidor que consiste de um servidor SQL multi-tarefa que suporta acessos diferentes, diversos programas clientes e bibliotecas, ferramentas administrativas e diversas interfaces de programao (APIs). O Servidor MySQL tambm concedido como uma biblioteca multi-tarefa que se pode ligar a alguma aplicao para chegar a um produto mais rpido, menor e mais fcilmente gerencivel. O programa libmysqld permite que o MySQL Server seja adequado para uma grande rea de aplicaes, devido ao Servidor Embutido MySQL. Usando-se a biblioteca do servidor MySQL embutido, o MySQL Server pode ser colocado em vrios aplicativos e dispositivos eletrnicos, onde o usurio final no tem conhecimento de possuir um banco de dados bsico. O servidor MySQL embutido serve para uso em aplicaes de Internet, quiosques pblicos, e responsvel por unidades de combinaao hardware/ software, e assim por diante.
41
No Unix, tambm pode-se desconectar pressionando Control-D. A maioria dos exemplos nas sees seguintes assumem que j se esteja conectado ao servidor. Isto indicado pelo prompt mysql>.
42
Database changed
Banco de Dados
Perceba que o USE, como o QUIT, no necessitam de um ponto e vrgula. (Voc pode terminar tais declaraes com um ponto e vrgula se gostar; isto no importa) A instruo USE especial em outra maneira, tambm: Ela deve ser usada em uma nica linha. Para criar seu banco de dados digite o seguinte: mysql> CREATE DATABASE nome_bd; No Unix, nomes de bancos de dados so caso sensitivo (ao contrrio das palavras chave SQL), portanto voc deve sempre fazer referncia ao seu banco de dados como nome_bd e no Nome_BD, NOME_BD ou outra variao qualquer. Isto tambm verdade para nomes de tabelas. (No Windows, esta restrio no se aplica, entretanto, voc deve referenciar os bancos de dados e tabelas usando o mesmo caso em toda a parte da consulta.) Criar um banco de dados no o seleciona para o uso; voc deve fazer isso de forma explcita. Para fazer do banco de dados que voc quer mexer ser o atual, use o comando: mysql> USE nome_bd Database changed Seu banco de dados necessita ser criado somente uma nica vez, mas voc deve selecion-lo para o uso cada vez que voc iniciar uma seo MySQL. Criar o banco de dados a parte fcil, mas neste ponto ele est vazio, como o SHOW TABLES mostrar: mysql> SHOW TABLES; Empty set (0.00 sec) A parte mais difcil decidir qual a estrutura que seu banco de dados deve ter: quais tabelas voc precisar e que colunas estaro em cada uma delas. Voc ir precisar de uma tabela para guardar um registro para cada um de seus dados. Utilize a sentea CREATE TABLE para especificar o layout de sua tabela: mysql> CREATE TABLE nome_tabela (nome_campo1 TIPO_DADO(), nome_campo2 TIPO_DADO(), etc);
Agora que voc criou uma tabela, a instruo SHOW TABLES deve produzir alguma sada: mysql> SHOW TABLES; +---------------------+ | Tables in nome_bd | +---------------------+ | nome_tabela | +---------------------+ Para verificar se sua tabela foi criada da forma que voc esperava, utilize a instruo DESCRIBE: mysql> DESCRIBE nome_tabela; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra |
43
+---------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | species | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ Voc pode usar DESCRIBE a qualquer momento, por exemplo, se voc esquecer os nomes das colunas na sua tabela ou de que tipos elas so. Depois de criar sua tabela, voc precisar preench-la. As instrues LOAD DATA e INSERT so teis para isto. Suponha que seu registro possa ser descrito como abaixo: (Observe que o MySQL espera datas no formato AAAAMM-DD; isto pode ser diferente do que voc est acostumado.) name owner species sex birth death Fluffy Harold gato f 1993-02-04 Claws Gwen gato m 1994-03-17 Buffy Harold cachorro f 1989-05-13 Fang Benny cachorro m 1990-08-27 Bowser Diane cachorro m 1979-08-31 1995-07-29 Chirpy Gwen pssaro f 1998-09-11 Whistler Gwen pssaro 1997-12-09 Slim Benny cobra m 1996-04-29 Quando voc desejar adicionar novos registros um a um, a instruo INSERT usada. Na sua forma mais simples, voc fornece valores para cada coluna, na ordem em que as colunas foram listadas na instruo CREATE TABLE. Um registro pode ser adicionado utilizando uma instruo INSERT desta forma: mysql> INSERT INTO nome_tabela VALUES (Puffball,Diane,hamster,f,1999-03-30,NULL); Perceba que os valores de string e datas so especificados aqui como strings com aspas. Com o INSERT voc tambm pode inserir NULL diretamente para representar um valor em falta. No pode ser usado \N como voc fez com LOAD DATA. A instruo SELECT usada para recuperar informaes de uma tabela. A forma geral da instruo :
SELECT o_que_mostrar FROM nome_tabela WHERE condicoes_para_satisfazer; A forma mais simples do SELECT recuperar tudo de uma tabela : mysql> SELECT * FROM nome_tabela; +----------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+--------+---------+------+------------+------------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL |
44
| Fang | Benny | dog | m | 1990-08-27 | NULL | | Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 | | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | | Puffball | Diane | hamster | f | 1999-03-30 | NULL | +----------+--------+---------+------+------------+------------+
Banco de Dados
Esta forma do SELECT til se voc deseja ver sua tabela inteira como agora, depois de voc acabar de carreg-la com os dados iniciais. A forma de se corrigir algo que foi digitado de forma errada atravs de uma instruo UPDATE: mysql> UPDATE nome_tabela SET birth = 1989-08-31 WHERE name = Bowser; O UPDATE altera apenas o registro em questo e no exige que voc recarregue a tabela. Bem, vimos neste captulo os comandos bsicos para se criar e manipular um banco de dados. A tarefa, a partir de agora, ser testar, dentro do MySQL, todos os comandos SQL vistos no captulo anterior, no esquecendo que a gama de possibilidades, tanto da linguagem SQL como do MySQL, muito maior do que o que foi visto aqui. Bom trabalho!
45
6 BIBLIOGRAFIA
Database Management Systems, Ramakrishnan, R.; McGraw-Hill, 1998. Fundamentals of Database Systems; Ramez Elmasri, Shamkant Navathe; The Benjamin CummingsPublishing Company; 1989; MySQL. Manual de referncia do MySQL. Disponvel por WWW em http://dev. mysql.com/doc/mysql/pt/index.html (2005). MySQL. MySQL: The worlds most popular open source database. Disponvel por WWW em http://www.mysql. com/ (2005). MySQL Brasil. Solues em gesto comercial baseadas em software livre. Disponvel por WWW em http://www. eacnet.com.br/index.pl/mysqlbrasil (2005). Projeto de Banco de Dados, Heuser, C. A.; Sagra Luzatto, 1998. Sistema de Banco de Dados; Henry F. Korth, Abraham Silberschatz; Makro Books; 1995; Sistemas de Bancos de Dados, Korth, H.F. e Silberschatz, A.; Makron Books, 2 edio revisada, 1994. SQLMagazine.com. The top SQL SERVER resources on the net. Disponvel por WWW em http://www.sqlmagazine. com/ (2005). W3schools. Online Web Tutorials. Disponvel por WWW em http://www. w3schools.com/ (2005). Wikipedia. A enciclopdia livre. Disponvel por WWW em http://pt.wikipedia. org/wiki/ (2005).
46