22

Banco de Dados.pdf

Embed Size (px)

Citation preview

Page 1: Banco de Dados.pdf
Page 2: Banco de Dados.pdf
Page 3: Banco de Dados.pdf

Sumário

1. CONCEITO DE BANCO DE DADOS .......................................................................................................... 5 1.1 Sistema de Gerenciamento de Banco de Dados: ............................................................................. 5

1.1.1 MySQL:................................................................................................................................. 5 1.1.2 Tipos de Dados: ................................................................................................................... 5

2. SQL: .................................................................................................................................................. 6 2.1 DDL: .................................................................................................................................................. 7

2.1.1 Create: ................................................................................................................................. 7 2.1.2 USE: ...................................................................................................................................... 7 2.1.3 DROP: ................................................................................................................................... 7 2.1.4 SELECT DATABASE() ............................................................................................................. 7 2.1.5 Show Databases: ................................................................................................................. 8 2.1.6 Criando uma tabela: ............................................................................................................ 8 2.1.7 DROP TABLE: ...................................................................................................................... 12 2.1.8 ALTER: ................................................................................................................................ 12

2.2 DML: ............................................................................................................................................... 13 2.2.1 INSERT: .............................................................................................................................. 13 2.2.2 Consultas no SQL: .............................................................................................................. 14 2.2.3 UPDATE: ............................................................................................................................. 14 2.2.4 ELETE: ................................................................................................................................ 15 2.2.5 Comandos para Leitura de Dados: .................................................................................... 16

2.3 Stored Procedured: ........................................................................................................................ 18 2.3.1 Criando uma Stored Procedure: ........................................................................................ 20

Page 4: Banco de Dados.pdf
Page 5: Banco de Dados.pdf

5

1. CONCEITO DE BANCO DE DADOS

Um banco de dados pode ser compreendido como uma coleção de dados que estão relacionados e são manipulados pelo SGBD (Sistema de Gerenciamento de banco de dados). Um Sistema Gerenciador de Banco de Dados (SGBD) é uma coleção de programas que habilitam usuários para criar e manter um Banco de Dados. O SGBD é um software de finalidade geral que facilita o processo de definição, construção e manipulação de bancos de dados.

São conceitos de Banco de Dados: WIEDERHOLD - Um Banco de Dados é uma coleção de dados mutuamente relacionados. CHU - Um Banco de Dados é um conjunto de dados relacionados entre si. DATE - Um Banco de Dados é uma coleção de dados operacionais armazenados usados pelos

sistemas de uma determinada aplicação. KORTH - Um Banco de Dados é uma coleção de dados que contém informação de um particular

empreendimento. ELMASRI & NAVATHE - Um Banco de Dados é uma coleção de dados relacionados. ENGLES - Um Banco de Dados é uma coleção de dados operacionais usados pelo sistema de

aplicações de uma empresa.

1.1 Sistema de Gerenciamento de Banco de Dados:

Um Banco de Dados é armazenado e gerenciado por um Sistema Gerenciador de Banco de Dados (SGBD). Esse sistema tem o objetivo de permitir a definição da sua estrutura de dados, isto é, tabelas e relacionamentos, e gerenciar o acesso a essas informações. O SGBD possui mecanismos de consultas que possibilitam a inserção, alteração, exclusão e listagem das informações armazenadas por ele.

Para ilustrar todos os aspectos práticos de um sistema de Banco de Dados, será utilizado o MySQL. A escolha do SGBD se dá pelo fato de o mesmo ser distribuído gratuitamente, pela simplicidade e facilidade de uso. Esse sistema pode ser obtido a partir do site http://www.mysql.com/downloads.

1.1.1 MySQL:

Para manipular o SGBD faz-se necessário iniciar uma conexão com o mesmo. Essa conexão estabelece a ligação entre o SGBD e a aplicação que manipulará os dados. Vale ressaltar que o SGBD pode estar em uma máquina colocada em qualquer lugar do planeta, e ainda assim ser acessada remotamente pela aplicação.

Para estabelecer a conexão precisa-se de um usuário e uma senha para realizar o acesso. Esse sistema possui um usuário padrão chamado root e que não possui senha, não é necessário fornecer uma senha para efetuar a conexão com o servidor. O usuário root é o administrador do Banco de Dados e possui autorização para realizar qualquer operação dentro do MySQL. Este é diferente do root do Linux, que é o responsável pela administração do sistema operacional. Possivelmente o acesso ao Linux durante o curso não será feito através desse usuário. Porém, como existe o administrador do banco, que por coincidência se chama root, será possível realizar qualquer operação no MySQL, mesmo não tendo acesso de administrador no Linux.

Para estabelecer essa conexão, primeiro deve-se executar um terminal no Linux. Nesse ambiente existem aplicações gráficas, contendo janelas, ícones, imagens, etc. Por outro lado existem aplicações que não apresentam esses elementos gráficos e, portanto, são executadas a partir de um terminal.

1.1.2 Tipos de Dados:

O MySQL apresenta um vasto conjunto de dados que permite a representação das mais variadas informações existentes no mundo real. Por exemplo, é possível criar uma coluna para armazenar uma música, um vídeo ou até mesmo uma imagem. Além de dados mais comuns, tais como datas, números, letras e textos, dentre outros.

Page 6: Banco de Dados.pdf

6

Para simplificar a discussão, serão descritos aqui apenas os tipos de dados relevantes para a solução do problema proposto no início do capítulo. Portanto, nem todos os tipos de dados existentes no DBDesigner4, e por consequência no MySQL, serão descritos aqui. Maiores informações sobre todos os tipos de dados existentes no MySQL podem ser encontradas no site http://www.mysql.com/documentation.

Os tipos de dados podem ser agrupados em três grandes grupos que são os textos e datas, números e horas. A Tabela abaixo apresenta um resumo dos tipos de atributos que serão utilizados no modelo proposto.

CATEGORIA TIPO DESCRIÇÃO

Números

Integer Números inteiros

Double Números reais ou ponto-flutuante

Int Números inteiros

Decimal

Decimal(t,d) T = tamanho números com precisão fixa tais como moeda, D = número lembrando que o ponto é o separador da de casas decimais Parte fracionária ou centavos

Texto Char(x)

Texto com tamanho máximo de x caracteres Varchar(x)

Data / hora

Date Data no formato aaaa-mm-dd

Time Hora no formato hh:mm:ss

Datetime Data e hora. Exibido como yyyy-mm-dd hh:mm:ss

Ao inserir uma linha ou registro em uma tabela deve-se informar um valor para cada coluna,

respeitando o tipo de dados definido para aquele atributo. Existem situações em que o valor a ser colocado em uma coluna não é conhecido no momento da inclusão dos dados. Por exemplo, se existir uma coluna que armazena a data de falecimento dos funcionários, essa data em geral não é conhecida no momento da inclusão do registro.

Para contornar a situação existe um valor especial conhecido como NULL que denota o fato de que a informação não é conhecida. No caso da data de falecimento, pode-se utilizar o valor NULL para os funcionários que ainda estão vivos. É possível definir no momento da criação da tabela se as colunas aceitam ou não este valor especial. Isso é feito através da cláusula NOT NULL, que deve ser colocada nas colunas que não aceitarão o NULL, lembrando que por padrão, qualquer coluna aceita o NULL. É importante lembrar que colunas de qualquer tipo podem receber o valor NULL.

2. SQL:

É uma linguagem procedural fundamentada no modelo relacional que é responsável por manipular e criar Banco de Dados utilizando um SGBD. A linguagem SQL foi definida no ano de 1974 pela IBM. Sua primeira versão teve o nome de SEQUEL – Structured English Query Language. É fundamentada no modelo relacional.

Um Banco de Dados é entendido como uma coleção de tabelas. De fato é uma forma de se organizar as informações dentro do SGBD, isto é, cada aplicação pode ter o seu próprio banco de dados, onde estarão apenas as tabelas que fazem parte daquele problema.

A linguagem SQL é dividida em duas partes: Linguagem para Definição de Dados (DDL – Data Definition Language), e Linguagem para Manipulação de Dados (DML – Data Manipulation Language). Na DDL encontram-se comandos para a criação e alteração de dados, tais como bancos de dados e tabelas, permitindo, por exemplo, a definição de uma nova tabela ou até mesmo a inclusão de uma coluna em uma tabela já existente. Já a DML apresenta os comandos para a inserção, alteração, exclusão e leitura dos dados contidos nessas tabelas.

Page 7: Banco de Dados.pdf

7

2.1 DDL:

DDL (Data Definition Language) - Linguagem para Definição de Dados contém os comandos para a criação de Bancos de Dados, tabelas, bem como a alteração e exclusão dos mesmos. São exemplos de comandos DDL:

CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX TRUNCATE TABLE ALTER DATABASE/SCHEMA, TABLE, VIEW MSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS) SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, PARTITIONS, FUNCTIONS, INDEX[ES],

COLUMNS, CREATE TABLE DESCRIBE DATABASE, table_name, view_name

2.1.1 Create:

O primeiro passo para se trabalhar com um Banco de Dados é criá-lo utilizando a seguinte sintaxe: CREATE DATABASE <nomedobanco>; Observe o exemplo a seguir:

Figura 1 – Criação do banco de dado “Observe que após o comando de criação utiliza-se o “ ; ” para encerrá-lo. Depois de realizada a criação da base de dados é indispensável dizer ao SGBD qual base será

utilizada já que é possível ter várias bases em um único SGBD. Para isso, utilize a sintaxe a seguir:

2.1.2 USE:

USE < nomedobanco> ;

Figura 2 – Utilizando a base de dados criada

Uma vez selecionado o Banco e Dados, pode-se manipular as tabelas contidas nele, ou até mesmo

criar novas tabelas dentro dele mesmo. Para remover um Banco de Dados e todo o seu conteúdo, o comando DROP DATABASE deve ser utilizado.

2.1.3 DROP:

DROP DATABASE nome_do_banco

2.1.4 SELECT DATABASE()

O comando Select exibe o database atual o qual está se trabalhando. Para exibir o banco “unepi”, o qual foi criado anteriormente, basta seguir a sintaxe abaixo:

SELECT DATABASE ();

Page 8: Banco de Dados.pdf

8

Figura 3 – Utilizando o Select Database

2.1.5 Show Databases:

Para exibir os Bancos de Dados criados no SGBD, basta seguir o seguinte comando:

SHOW DATABASES ;

Figura 4 - Banco de dados presentes no MySQL

2.1.6 Criando uma tabela:

Para criar uma tabela é imprescindível identificar, inicialmente, os atributos e seus tipos de dados, bem como as restrições em relação ao valor NULL, isto é, se haverão colunas com valores indefinidos. Além disso, é necessário identificar a chave primária da tabela, que é o conjunto de colunas que referenciam de forma única cada registro da tabela.

Finalmente, para as tabelas que participam de algum relacionamento é necessário determinar as chaves estrangeiras e as restrições que se aplicam sobre elas. Nesse caso, o objetivo da chave estrangeira é identificar os registros que participam da relação e impor as regras de integridade que regem o relacionamento. Por exemplo, em um relacionamento entre funcionários e equipes, deve-se garantir que não haverá um membro da equipe que não esteja cadastrado na tabela de funcionários. Ou em um relacionamento entre pais e filhos deve-se garantir que não haverá um filho sem um pai.

Para criar a tabela no MySQL desse exemplo utiliza-se o comando CREATE TABLE. Observe a seguir:

CREATE TABLE nome_da_tabela ( Coluna1 TIPO_COLUNA_1, Coluna 2 TIPO_COLUNA_1, . . . Coluna N TIPO_COLUNA_N, PRIMARY KEY (colunas), [FOREIGN KEY (colunas) RESTRIÇÕES] ) [ENGINE=tipo];

Um modelo relacional é composto por tabelas onde, individualmente, cada uma possui um nome.

Cada tabela é formada por linhas e colunas. Uma linha é composta por um conjunto de campos ou atributos (Linha: Tupla, Registro). Cada campo é identificado com um nome.

Um BD relacional é composto por chaves que servem para identificar e estabelecer relações entre linhas de uma tabela. Os tipos de Chaves são:

Chave Primária: É uma coluna ou atributo que identifica unicamente cada linha da tabela.

Page 9: Banco de Dados.pdf

9

Chave Estrangeira: Coluna ou combinação de colunas que aparecem na chave primária de outra tabela.

Como descrito na listagem anterior, para criar uma tabela deve-se especificar o nome de cada coluna ou atributo que a constitui, seus tipos e a sua chave primária. Nota-se que a chave estrangeira é opcional, portanto, aparece entre colchetes ([FOREIGN KEY]).

No MySQL é possível escolher o tipo de tabela a ser criado (ENGINE), nessa apostila será sempre utilizado o InnoDB, que possui suporte ao conceito de restrições de chaves estrangeiras.

Exemplo:

CREATE TABLE cargos ( codigo integer unsigned NOT NULL auto_increment, nome char(50) NOT NULL, PRIMARY KEY (codigo)) ENGINE=InnoDB; CREATE TABLE empresa ( codigo integer unsigned NOT NULL auto_increment, nome char(60) NOT NULL, cnpj char(20) NOT NULL, telefone char(20) NOT NULL, PRIMARY KEY (codigo)) ENGINE=InnoDB; CREATE TABLE equipes ( codigo integer unsigned NOT NULL auto_increment, nome char(60) NOT NULL, PRIMARY KEY (codigo)) ENGINE=InnoDB;

No exemplo, todas as colunas foram criadas com a opção NOT NULL, isto é, não é possível informar o valor NULL para nenhuma das colunas. Todas as tabelas têm uma coluna-código que é a chave primária da tabela. Isso significa dizer que não há nessas tabelas dois registros com o mesmo código, caso contrário não seria possível encontrar um determinado registro na base de dados devido à ambigüidade. Caso ocorra uma tentativa de inserir dois registros com o mesmo código numérico, o SGBD emitirá uma mensagem de chave duplicada (Duplicate key entry), e inibirá a inserção do mesmo.

A Figura 5 ilustra a situação onde é feita a tentativa de inserir o cargo de pedreiro utilizando o código idêntico ao do cargo de arquiteto. Percebe-se, em destaque na figura, a mensagem de erro emitida pelo SGBD ao tentar executar a inserção através do acionamento do botão Apply Changes (Aplicar alterações).

Page 10: Banco de Dados.pdf

10

Figura 5 – Criando uma tabela

Na definição dos códigos foi utilizado o atributo AUTO_INCREMENT, cuja função é gerar um

número sequencial automático. Isso significa dizer que durante a inserção, se o código for omitido o SGBD criará um código a partir do maior código cadastrado, acrescido de um. Ou seja, se o maior código de cargos é o valor dois, a próxima inserção de cargos gerará o código três, e assim sucessivamente. Isso reduz a possibilidade de erros devido a chaves duplicadas, já que o código será gerado automaticamente pelo sistema e nunca se repetirá.

Para utilizar o recurso do AUTO_INCREMENT, a coluna deve ser declarada como do tipo inteiro e deverá ser a chave primária da tabela. Caso contrário, o sistema não permitirá a sua criação.

Primary key: indica o tipo da chave que será utilizada como chave primária no Banco de Dados. Unique: é uma restrição de integridade que indica que um campo não poderá receber valores

repetidos na tabela, ou seja, dois registros não podem ter o mesmo valor para esse campo. Para conferir se de fato a tabela foi criada conforme o previsto, basta seguir o exemplo:

Describe <nomedatabela>;

Figura 6 – Descrevendo uma tabela

Page 11: Banco de Dados.pdf

11

As demais tabelas do banco “curso” apresentam relacionamentos entre elas, obedecendo as regras de integridade definidas pelo modelo lógico da aplicação.

CREATE TABLE funcionarios ( cpf char(20) NOT NULL, Cargos_codigo int(10) unsigned NOT NULL, nome char(60) NOT NULL, nascimento date NOT NULL, telefone char(20) NOT NULL, PRIMARY KEY (cpf), FOREIGN KEY (Cargos_codigo) REFERENCES cargos (codigo)) ENGINE=InnoDB; CREATE TABLE obras ( codigo int(10) unsigned NOT NULL auto_increment, Empresa_codigo int(10) unsigned NOT NULL, nome char(50) NOT NULL, inicio date NOT NULL, termino date NOT NULL, PRIMARY KEY (codigo), FOREIGN KEY (Empresa_codigo) REFERENCES empresa (codigo) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB; CREATE TABLE obras_tem_equipes ( Obras_codigo int(10) unsigned NOT NULL, Equipes_codigo int(10) unsigned NOT NULL, PRIMARY KEY (Obras_codigo,Equipes_codigo), FOREIGN KEY (Obras_codigo) REFERENCES obras (codigo) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (Equipes_codigo) REFERENCES equipes (codigo) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;

Percebe-se que nessas tabelas existe, além da chave primária, a definição de chaves estrangeiras, já

que estas tabelas participam de relacionamentos. No caso da tabela de funcionários, os registros desta estão associados aos registros existentes na tabela de cargos. Ou seja, todo funcionário tem um cargo, onde esta relação é salientada pela coluna Cargos_codigo da tabela de funcionários.

Uma chave estrangeira nada mais é que a chave primária de uma tabela colocada em outra tabela para identificar a relação entre elas. Para criá-la deve-se indicar qual o conjunto de colunas que a compõe, bem como a tabela e coluna que ela referencia.

No exemplo tem-se FOREIGN KEY (Cargos_codigo) REFERENCES cargos (codigo). Significa dizer que os valores armazenados na coluna Cargos_codigo da tabela de funcionários, deve ser um valor contido na coluna código da tabela de cargos. Dessa forma, o SGBD assegura que nenhum funcionário terá um cargo que não esteja cadastrado na tabela de cargos.

Existe ainda a situação onde uma alteração ou exclusão de um cargo pode levar a uma inconsistência de dados na tabela de funcionários. No caso de uma remoção ou modificação de um cargo para o qual existam funcionários cadastrados, deve-se garantir que o funcionário não ficará com um cargo inválido.

Para isso, foram especificadas as restrições de chave estrangeira ON UPDATE CASCADE e ON DELETE RESTRICT. Isto é, quando o código de um cargo for alterado o SGBD propagará automaticamente a modificação para todos os funcionários que estejam cadastrados com esse cargo (CASCADE). Já no caso da remoção, o sistema não permitirá a exclusão de cargos que apresentem funcionários associados a ele (RESTRICT). Vale ressaltar que a opção CASCADE ou RESTRICT pode ser aplicada às cláusulas UPDATE e DELETE, de acordo com a restrição imposta pelo modelo.

Page 12: Banco de Dados.pdf

12

Para ilustrar a utilização das cláusulas RESTRICT e CASCADE, considere um cadastro de funcionários e os seus dependentes ou filhos. Se o CPF do funcionário, que é a chave primária for alterado é necessário alterar o CPF na tabela de filhos, pois ao contrário, a relação entre as duas entidades se perderia, já que o filho estaria associado com um CPF de um funcionário inexistente. Dessa forma, pode-se inibir a alteração do CPF do pai durante um UPDATE, empregando a cláusula RESTRICT. Pode-se também, possibilitar a alteração automática do CPF em ambas as tabelas através do CASCADE.

O mesmo raciocínio se aplicaria no momento da exclusão de um funcionário, isto é, no comando DELETE. Ao excluir um funcionário não se pode manter os registros e seus eventuais dependentes, pois dessa forma teríamos registros órfãos na tabela de dependentes. Portanto, pode-se inibir a remoção dos funcionários que tenham filhos com o RESTRICT, ou forçar a exclusão dos filhos com a opção CASCADE. Todo esse mecanismo visa à manutenção da consistência das informações.

Uma única tabela pode conter mais de uma chave estrangeira, dependendo de como estão organizados os relacionamentos entre elas. Isto é o que ocorre no caso da tabela obras_tem_equipes, que se relaciona com as tabelas obras e equipes, simultaneamente. Por isso apresenta duas chaves estrangeiras, referenciando a chave primária de cada tabela. O grande benefício das chaves estrangeiras é o fato de que o próprio SGBD assegura que as restrições de integridade pertinentes ao modelo serão aplicadas, mesmo que o usuário do banco desconheça as regras.

2.1.7 DROP TABLE:

Para remover uma tabela, utiliza-se o comando DROP TABLE conforme sintaxe abaixo:

DROP TABLE nome_da_tabela Ao executar esse comando, a tabela será apagada por completo, juntamente com os dados que,

por ventura, estejam armazenados nela. Portanto, deve-se ter bastante cuidado na utilização do mesmo para evitar resultados indesejados.

Outra situação comum no dia a dia da utilização de um sistema de Banco de Dados é a necessidade de alterar a estrutura de uma tabela já existente. Por exemplo, supondo uma alteração no modelo lógico da aplicação de forma que se tenha que armazenar a data de entrada do funcionário na empresa, o que não era necessário anteriormente.

2.1.8 ALTER:

Para contemplar essa situação seria necessária a inclusão de uma nova coluna do tipo data à tabela de funcionários, previamente criada. Em outro cenário pode-se remover uma coluna, alterar o seu nome, ou até mesmo o tipo de dados que ela armazena. Imaginando que o nome do funcionário tenha sido definido inicialmente com tamanho máximo de 15 caracteres ou letras, e surgiu um novo funcionário com um nome extenso e que requer mais que 15 caracteres para ser armazenado. Neste caso, o tipo do dado deverá ser alterado para satisfazer esta nova condição. O comando para modificar a estrutura de tabelas é o ALTER TABLE, que pode ser utilizado para os propósitos apresentados anteriormente.

Para a utilização do comando ALTER TABLE, observe a sintaxe abaixo:

ALTER TABLE nome_da_tabela ADD nome_da_coluna TIPO;

ALTER TABLE nome_da_tabela DROP nome_da_coluna;

ALTER TABLE nome_da_tabela MODIFY nome_da_coluna TIPO;

ALTER TABLE nome_da_tabela CHANGE coluna_antiga coluna_nova TIPO; Assim, finaliza-se a descrição da parte de definição de dados da linguagem SQL, tornando possível o

entendimento e aplicação dos mecanismos para a construção de bases de dados reais.

Page 13: Banco de Dados.pdf

13

Figura 7– Inserindo uma coluna na tabela

2.2 DML:

A segunda parte da SQL que se refere à manipulação de dados, conhecida como DML (Data Manipulation Language), significa Linguagem para Manipulação de Dados. Essa linguagem permite basicamente a inserção, alteração, exclusão e leitura das informações mantidas nas diversas tabelas de um Banco de Dados. Vale ressaltar que a DML apresenta comandos para a escrita e alteração de dados, bem como para a leitura de informações. Desse modo, inicialmente serão discutidos os comandos para a escrita de dados, permitindo preencher o Banco de Dados, e posteriormente, será apresentado o comando para ler as informações previamente armazenadas.

2.2.1 INSERT:

O comando INSERT consiste em informar o nome da tabela que se deseja inserir os dados, uma lista com o nome das colunas dessa tabela para as quais serão informados os dados, e finalmente, os dados para cada coluna informada anteriormente, deve coincidir com o número de valores informados. Caso contrário, o sistema emitirá uma mensagem de erro e não executará a inserção. Para incluir dados utiliza-se o comando INSERT, cuja sintaxe é:

INSERT INTO nome_data_tabela (lista_de_colunas) VALUES (lista_de_valores) Exemplos:

INSERT INTO `empresa` VALUES (1,'Empresa de banco LTDA', '888.888.8888-0001/88', '(31)3333-4444'); INSERT INTO `empresa` VALUES (2,'Empresa do curso LTDA', '999.999.9999-0001/88', '(31)4444-55555');

INSERT INTO equipes (codigo, nome) VALUES (1, 'Equipe engenheiro'); INSERT INTO equipes (codigo, nome) VALUES (2, 'Equipe pedreiros'); INSERT INTO equipes (codigo, nome) VALUES (3, 'Equipe arquitetos');

INSERT INTO funcionarios (cpf, Cargos_codigo, nascimento, nome, telefone,Codigo_equipe) VALUES ('111.111.111-11', 1, '1970-10-12', 'José de Alencar', '(31)3333-3333', 1); INSERT INTO funcionarios (cpf, Cargos_codigo, nascimento, nome, telefone, Codigo_equipe) VALUES ('222.222.222-22', 3, '1967-11-21', 'Paulo Goulart', '(31)4444-44444', 2); INSERT INTO funcionarios (cpf, Cargos_codigo, nascimento, nome, telefone, Codigo_equipe) VALUES ('333.333.333-33', 3, '1987-11-21', 'Antônio Pereira','', 2); INSERT INTO funcionarios (cpf, Cargos_codigo, nascimento, nome, telefone, Codigo_equipe) VALUES ('444.444.444-44', 3, '1975-12-10', 'Carlos de Nóbrega’, '(31)5555-5544', 2);

INSERT INTO funcionarios (cpf, Cargos_codigo, nascimento, nome, telefone, Codigo_equipe) VALUES ('555.555.555-55', 2, '1977-06-23', 'Maria de Souza Melo’, '(31)7777-5544', 3);

Page 14: Banco de Dados.pdf

14

INSERT INTO funcionarios (cpf, Cargos_codigo, nascimento, nome, telefone, Codigo_equipe) VALUES ('666.666.666-66', 2, '1975-01-03', 'Antônio César’,'(31)9999-5544', 3);

INSERT INTO funcionarios (cpf, Cargos_codigo, nascimento, nome, telefone, Codigo_equipe) VALUES ('777.777.777-77', 4, '1970-05-15', 'Carlos de Castro Silva’, '(31)4567-8901', 2);

2.2.2 Consultas no SQL:

Os mecanismos de consultas de um Sistema de Banco de Dados são concebidos de forma a possibilitar a criação da estrutura de dados, bem como o preenchimento e a manipulação das informações contidas nele. Anteriormente, foi introduzida a linguagem SQL, mais especificamente a parte para a definição de dados (DDL). Assim, foram apresentados os comandos para a criação de Bancos de Dados, tabelas, além dos comandos para a alteração da estrutura de uma tabela.

Entretanto, existe a segunda parte da SQL que se refere à manipulação de dados, conhecida como DML (Data Manipulation Language), que significa Linguagem para Manipulação de Dados. Basicamente essa linguagem permite a inserção, alteração, exclusão e leitura das informações mantidas nas diversas tabelas de um Banco de Dados. Utilizando a ferramenta de consulta MySQL Query Browser é possível realizar essas operações de forma a não utilizar comandos SQL explicitamente, já que o sistema constrói automaticamente os comandos SQL relacionados a cada tarefa. Dessa forma, os detalhes da sintaxe da linguagem ficam escondidos dos usuários e facilitam o acesso aos dados, uma vez que não é necessário entender profundamente a estrutura desta linguagem.

Nessa seção serão apresentados e discutidos todos os comandos que compõem a DML. Para facilitar o entendimento dos comandos será utilizado o Banco de Dados “curso”, construído anteriormente. Assim, o objetivo final é introduzir conceitos sobre a base de dados e alguns relatórios básicos empregando a linguagem SQL. Mais adiante, serão discutidos os relatórios avançados, bem como os comandos avançados para a manipulação de dados, tais como JOINs e sub-consultas, ou seja, como extrair dados em várias tabelas.

Vale ressaltar que a DML apresenta comandos para a escrita e alteração de dados, assim como para a leitura de informações. Inicialmente serão discutidos os comandos para a escrita de dados, permitindo preencher o Banco de Dados, e posteriormente, será apresentado o comando para ler as informações previamente armazenadas.

A linguagem SQL apresenta basicamente três comandos para alteração de dados, que permitem realizar as tarefas de inclusão, modificação e exclusão de dados em uma tabela qualquer. Nessa seção serão ilustradas a sintaxe e exemplos de cada um deles.

2.2.3 UPDATE:

Existem situações em que há necessidade de modificar uma informação armazenada na tabela, por exemplo, considera-se a alteração de telefone de um determinado funcionário, ou ainda a mudança na data de término de uma determinada obra.

O UPDATE permite fazer atualizações dos valores dos atributos das nossas tabelas. No nosso exemplo inserimos na tabela a cliente cujo nome é ‘Marina Pereira’. Para mudar o nome da cliente utilizaremos o UPDATE.

Sintaxe:

UPDATE tabela SET atributo=’novo_valor’ Where atributo =‘valor_antigo’

Page 15: Banco de Dados.pdf

15

Exemplo:

Figura 8- Exemplo utilizando o UPDATE

Observe a alteração realizada na tabela logo em seguida ao ser realizado o update.

2.2.4 ELETE:

Finalmente, os dados armazenados em uma base de dados podem ser excluídos por várias razões. Por exemplo, a saída de um funcionário da empresa deve eliminar o registro dele da tabela de funcionários. Outra situação seria a saída de uma equipe da execução de uma determinada obra, isto é, o registro que relata esse fato deve ser eliminado da tabela Obras_tem_equipes. Para a exclusão de linhas de uma tabela utiliza-se o comando DELETE, cuja sintaxe é :

DELETE FROM nome_data_tabela

[WHERE critério_de_seleção]

Assim, para a execução do comando DELETE deve-se informar o nome da tabela cujos registros

serão eliminados e, opcionalmente, o critério de seleção de linhas, de forma a excluir apenas aquelas que atendam a um determinado requisito. Vale ressaltar que na omissão do WHERE serão retirados todos os registros da tabela.

Exemplo:

Figura 9 – Utilizando o delete.

A cláusula WHERE do comando DELETE é opcional. Caso não seja informado, ele irá apagar os

dados em toda a tabela. NÃO EXCLUI A TABELA E SIM OS DADOS DA TABELA.

Page 16: Banco de Dados.pdf

16

2.2.5 Comandos para Leitura de Dados:

A consulta em Bancos de Dados é efetuada através do comando SELECT. Uma sintaxe simplificada para esse comando é:

SELECT lista-de-dados FROM lista-de-tabelas WHERE condição-de-seleção

Onde: lista-de-dados = refere-se às colunas que existirão no conjunto resposta da consulta. lista-de-tabelas = refere-se às tabelas que serão utilizadas como fonte de dados para a

consulta. condição-de-seleção = será utilizada para a seleção de linhas da(s) tabela(s) consultada(s).

O uso de * (asterisco) após a cláusula SELECT implica dizer que alterações na estrutura de uma

tabela podem modificar o resultado da consulta; por exemplo, se uma nova coluna é incluída em uma tabela, o resultado da consulta irá incluir a nova coluna.

Para selecionar todas as linhas da tabela alunos:

Figura 10 – Dados da tabela alunos

É possível selecionar apenas uma coluna da tabela. A figura a seguir ilustra essa situação.

Figura 11 – Selecionar uma coluna de uma determinada tabela.

Figura 12 – Seleciona todos os dados da tabela aluno onde o nome esteja igual à Marina Pereira

SELECT lista_de_colunas FROM nome_da_tabela WHERE critério_de_seleção GROUP BY lista_de_colunas HAVING critério_de_seleção_no_resultado ORDER BY lista_de_colunas

Cláusulas adicionais: INTO: especifica uma nova tabela que conterá o resultado da consulta; ORDER BY: classifica o resultado da consulta;

Page 17: Banco de Dados.pdf

17

GROUP BY: agrupa as linhas das consultas com base nos valores de uma ou mais colunas; HAVING: especifica as condições usadas para filtrar agrupamento de dados no resultado da

consulta. Só deve ser usado com o GROUP BY. Quando se realiza uma seleção, os dados recuperados não estão ordenados. O SQL prevê a cláusula

ORDER BY para realizar uma ordenação dos dados selecionados.

SELECT <NOME(S) DA(S) COLUNA(S)> FROM <TABELA> WHERE <RESTRIÇÕES> ORDER BY <NOME DA(S) COLUNA(S)> ASC | ORDER BY <NÚMERO DA(S) COLUNA(S)> DESC

A informação <número da coluna> refere-se à posição relativa das colunas quando for apresentado

o resultado da consulta, e não à posição na tabela original, contada da esquerda para a direita. As palavras ASC e DESC significam, respectivamente, ascendente e descendente. A forma ascendente de ordenação é assumida como padrão.

Observe este exemplo:

Create database loja; Use loja; CREATE TABLE VENDEDOR ( CODIGO_VENDEDOR SMALLINT NOT NULL UNIQUE, NOME_VENDEDOR CHAR(20), SALARIO_FIXO numeric(9,2), FAIXA_COMISSAO CHAR(1), PRIMARY KEY (CODIGO_VENDEDOR)); Mostrar em ordem alfabética a lista de vendedores e seus respectivos salários fixos: SELECT NOME_VENDEDOR, SALARIO_FIXO FROM VENDEDOR ORDER BY NOME_VENDEDOR

Normalmente, vários registros dentro de uma tabela podem conter os mesmos valores, com

exceção da chave primária. Com isso, muitas consultas podem trazer informações erradas. A cláusula DISTINCT, aplicada em uma consulta, foi criada para não permitir que certas redundâncias, obviamente necessárias, causem problemas.

Quais são as unidades de produtos, diferentes, na tabela produto? SELECT DISTINCT UNIDADE FROM PRODUTO

O MySQL possui algumas funções que podem ser muito úteis no processamento dos dados. Abaixo,

podemos ver uma tabela com algumas dessas funções:

FUNÇÃO DESCRIÇÃO

AVG(coluna) retorna a média dos valores da coluna

COUNT(item) se item for uma coluna, será retornado o número de valores não NULL nessa coluna. Se a palavra-chave DISTINCT for colocada na frente do nome da coluna, será

Page 18: Banco de Dados.pdf

18

retornado o número de valores distintos nessa coluna. Se for passado COUNT(*), será retornado o número total de registros independente de quantos tenham valor NULL.

MIN(coluna) retorna o valor mínimo da coluna

MAX(coluna) retorna o valor máximo da coluna

SDT(coluna) retorna o desvio padrão dos valores da coluna

SDTDEV(coluna) o mesmo que SDT(coluna)

SUM(coluna) retorna a soma dos valores da coluna

Operadores para trabalhar na Pesquisa:

OPERADOR DESCRIÇÃO

= Testa se dois valores são iguais

> Testa se um valor é maior que outro

< Testa se um valor é menor que outro

<= Testa se um valor é menor ou igual a outro

!= ou < > Testa se dois valores são diferentes

is not null Testa se um campo não está vazio

is null Testa se um campo está vazio(nulo, ou seja, nada foi inserido nele, nem um espaço em branco)

Between Testa se um valor está entre um valor mínimo(inclusive) e um valor máximo (inclusive)

In Testa se um valor pertence a um conjunto

not in Testa se um valor não pertence a um conjunto

Like Testa se um valor corresponde a um padrão (% equivale ao conhecido *, é o curinga)

not like Testa se um valor não corresponde a um padrão ( _ equivale ao curinga que corresponde a um caracter)

Regexp Testa se um valor corresponde a uma expressão regular

Para especificar mais de uma condição para a pesquisa use as palavras and e or: Se quiser selecionar registros que atendam a CONDIÇÃO1 e a CONDIÇÃO2, faça assim:

select CAMPOS from TABELA where CONDIÇÃO1 and CONDIÇÃO2;

Se quiser selecionar registros que atendam a CONDIÇÃO1 ou a CONDIÇÃO2, faça assim:

select CAMPOS from TABELA where CONDIÇÃO1 or CONDIÇÃO2;

2.3 Stored Procedured:

Para a elaboração de um sistema baseado em um Banco de Dados relacional é preciso passar por várias etapas a fim de se determinar qual a estrutura final do mesmo. Primeiramente, foram apresentadas as questões ligadas à modelagem de dados. Nessa etapa foram definidas as entidades que compõem o sistema, bem como os seus atributos e as regras de integridade que se aplicam aos dados. O produto final da etapa de modelagem é o modelo lógico do Banco de Dados conhecido como modelo Entidade-Relacionamento, ou somente modelo ER. Essa é uma forma de representar o Banco de Dados graficamente permitindo a documentação do sistema.

Page 19: Banco de Dados.pdf

19

A segunda etapa do processo se refere à construção do Banco de Dados utilizando um Sistema Gerenciador de Banco de Dados (SGBD), nos exemplos apresentado nessa apostila é utilizado o MYSQL como referência de SGBD.

Essa definição do banco de dados foi elaborada a partir do modelo ER, e foi empregada a ferramenta DBDesigner4 para essa tarefa, mas poderá ser uilizadas outras ferramentas disponíveis na internet.

Uma vez construído um Banco de Dados exemplo, denominado, foram apresentadas as técnicas de consulta às informações. Para efeito prático a linguagem SQL foi introduzida, sendo exibida a sua Linguagem de Definição de Dados (DDL), e a Linguagem para Manipulação de Dados (DML). A linguagem de consulta é uma ferramenta que permite manipular as informações contidas no Banco de Dados. Desse modo, vários exemplos de relatórios básicos e avançados foram ilustrados, permitindo o entendimento da mesma. Vale lembrar, que o MySQL Query Browser foi introduzido possibilitando a sua utilização para a extração de dados do MySQL, sem a utilização do SQL explicitamente.

Um sistema de Banco de Dados é mantido pelo SGBD, e algumas tarefas têm que ser executadas periodicamente a fim de se garantir o funcionamento adequado do sistema. Para isso, foram discutidas as principais técnicas de administração de um sistema dessa natureza, além de apresentar a ferramenta MySQL Administrator como um mecanismo eficiente para a execução dessas operações.

Nesse ponto, todos os aspectos importantes relativos à utilização de um Sistema de Banco de Dados já foram conceituados e exemplificados, possibilitando a sua aplicação em um sistema real. No entanto, as aplicações reais operam em um contexto onde há uma grande complexidade nos dados, bem como nas regras de utilização dos mesmos.

Outro problema comum são as falhas que podem ocorrer durante uma operação, isto é, pode haver uma queda de energia durante a manipulação das informações e isso poderia levar a uma inconsistência nos dados. No entanto, para contornar essas dificuldades um SGBD provê métodos para controlar o acesso simultâneo aos dados, bem como eliminar inconsistências de informações devido às falhas de sistema ou até mesmo de usuários.

Existem ainda as aplicações que exigem que o Banco de Dados esteja disponível o tempo todo, ou seja, 24 horas por dia e sete dias por semana. Esse é o caso de um sistema bancário, que deve permitir que os seus correntistas tenham acesso às suas movimentações ou recursos financeiros a qualquer hora do dia. Esses tipos de aplicação exigem uma alta disponibilidade dos dados, e para isso existem alguns recursos presentes no SGBD para fornecer o nível de confiabilidade.

Finalmente, a maioria dos SGBD permitem a definição de rotinas que ficam armazenadas dentro deles e que podem ser acessadas a qualquer momento pelos usuários do sistema. Essas rotinas, conhecidas como Stored Procedure (Procedimentos armazenados), são como pequenos programas que podem ser construídos de forma a realizar uma manipulação complexa sobre os dados, e garantir a obediência às regras de negócios da aplicação.

Um Stored Procedure é um conjunto de comandos SQL que são compilados e armazenados no servidor, mas podem ser armazenados no Banco de Dados e acionados por qualquer programa aplicativo que tenha autorização para execução.

A stored procedure pode ser classificada em: Stored Procedure: definidas pelo usuário System Stored Procedure: disponibilizadas pelo Sistema de Banco de Dados para execução de

tarefas administrativas. Podem ser executadas em qualquer banco e estão armazenadas no Banco de Dados Master. Todas as stored procedures iniciam por “sp_”

Por todas essas e outras funcionalidades é que as stored procedures são de extrema importância para os DBAs e desenvolvedores.

Há 5 Procedimentos (Procedures) básicos que podemos criar: Procedimentos Locais - São criados a partir de um banco de dados do próprio usuário; Procedimentos Temporários - Existem dois tipos de procedimentos temporários:

Locais, que devem começar com # e Globais, que devem começar com ##; Procedimentos de Sistema - Armazenados no Banco de Dados padrão do SQL Server (Master),

podemos identificá-los com as siglas sp, que se origina de stored procedure. Tais procedures executam as tarefas administrativas que podem ser feitas a partir de qualquer banco de dados.

Page 20: Banco de Dados.pdf

20

Procedimentos Remotos - Podemos usar Queries Distribuídas para tais procedures. São utilizadas apenas para compatibilidade.

Procedimentos Estendidos - Diferente dos procedimentos já citados, esse tipo de procedimento recebe a extensão .dll e são executadas fora do SGBD SQL Server. São identificadas com o prefixo xp.

Quando utilizar procedures Quando temos várias aplicações escritas em diferentes linguagens, ou rodam em plataformas

diferentes, porém executam a mesma função; Quando damos prioridade à consistência e segurança. Os bancos (Itaú, Bradesco, Real, etc), por exemplo, em geral, utilizam stored procedures para todas

as operações em comum. Os procedimentos podem assegurar que as operações sejam registradas de forma correta e segura.

Por que é mais seguro? Seguindo a linha de raciocínio dos bancos, utilizando stored procedures outras aplicações e

usuários, não conseguiriam nenhum tipo de acesso às tabelas do banco de dados de forma direta. Eles poderiam apenas executar as stored procedures, que rodam ações específicas e determinadas

pelos DBAs e desenvolvedores.

2.3.1 Criando uma Stored Procedure:

Sintaxe:

CREATE PROCEDURE <nome> [parâmetro]

AS <instrução SQL>

As Regras são: O nome da procedure deve seguir as regras para criação de identificadores; Nome do parâmetro deve iniciar por @ e deve ser único na lista de argumentos, seguido do

seu tipo @mes int, @ano int, @nome varchar; Todos os parâmetros são considerados de entrada, exceto se houver OUTPUT após sua

definição Para executar uma Stored Procedure é necessário fazer uma chamada ao comando EXECUTE

EXEC[UTE] <nome da sp> [valor do parâmetro]

Page 21: Banco de Dados.pdf

1

Page 22: Banco de Dados.pdf

2