Apostila de Banco de Dados e SQL

Apostila de Banco de Dados e SQL

(Parte 5 de 8)

Vamos analisar o código necessário para a criação da tabela de empregados, apresentado a seguir:

(EmpNumeinteger(5)notnull,
EmpNomechar(30) notnull,
EmpGereinteger(5),
EmpServchar(20) ,
DepNumeinteger(4)notnull,
EmpAdmidate notnull,
EmpSalainteger(10,2),
EmpComiinteger(10,2),

create table Emp primary key (EmpNume), foreign key has (DepNume) references Dept on delete restrict on update cascade ); create unique index EmpNum on Emp (EmpNume asc); create index EmpDep on Emp (DepNume asc);

A Tabela de Empregados não poderia ter sido criada antes da Tabela de Departamento, pois contém uma referência direta àquela tabela. Quando declaramos que DepNume é chave estrangeira, promovemos de fato a ligação do cadastro de empregados como o cadastro de departamentos. Ao restringirmos as exclusões, permitimos a existência de funcionários não alocados a nenhum departamento. Apesar desta prática ser contrária a tese de que devemos possuir apenas tuplas perfeitamente relacionáveis em nossas tabelas, podemos deixar esta pequena abertura, pois um usuário que excluisse inadivertidamente determinado departamento, acabaria por excluir também uma grande quantidade de funcionários, que estivessem ligados a este departamento.

Já a atualização em cascata dos códigos de departamento é uma boa providência, na medida em que teremos, uma vez alterado algum código de departamento, a atualização imediata de todos os funcionários pertencentes ao departamento cujo código foi modificado.

Observações:

senha para usar o velho comando DEL do DOS e depois começar tudo de novo

1- Observar que os índices são parte intrínseca das tabelas. 2- A integridade relacional é garantida pelo Banco de Dados e não pelo aplicativo. 3- Exclusões ou Alterações em Chaves Primárias, podem acarretar exclusões, anulações ou até mesmo perda de integridade nas tabelas onde esta chave primária existir como chave estrangeira. Portanto é imprescindível muito cuidado quando da elaboração do Banco de Dados. Uma tentação muito comum ao estudante é começar criando as tabelas do Banco de Dados sem prévia Normalização. Este talvez seja o melhor caminho para perder-se tempo em vão, pois quando você terminar de projetar suas telas de entrada de dados, notará "que nada funciona!". Esta será a

Comando Drop Este comando elimina a definição da tabela, seus dados e referências.

Sintaxe: DROP TABLE < nome_tabela > ;

Ex: DROP TABLE EMP;

Comando Alter Este comando permite inserir/eliminar atributos nas tabelas já existentes.

Comando:

ALTER TABLE <nome_tabela> ADD/DROP( nome_atributo1 <tipo> [NOTNULL], nome_atributoN <tipo> [NOTNULL]);

Não existe nenhum comando SQL que permita eliminar algum atributo de uma relação já definida. Assim caso você desejar eliminar uma chave primária devidamente referenciada em outra tabela como chave estrangeira, ao invés de obter a eliminação do campo, obterá apenas um erro.

Além do comando DROP que poderá eliminar uma tabela e suas relações, também podemos criar uma relação que tenha os atributos que se deseja, copiar-se a relação antiga sobre a nova e apgando-se então a relação que originalmente desejávamos eliminar.

Ex:

ALTER TABLE DEPT( ADD DEPSALA DECIMAL(10,2));

Exercício: Criar o Banco de Dados Mundo. Observar que se um continente for excluído, todos os países contidos em tal continente também o serão. Esta situação é conhecida como exclusão em Cascata. Observar também que a exclusão de um País eliminará todas as Cidades contidas no mesmo.

Prática

O Exemplo Trabalho já possue pequeno programa destinado a construção das tabelas contidas no Banco de Dados TRABALHO. Execute "trabalho.sql" de forma a obter as tabelas acima sem necessidade de digitar as instruções SQL de maneira interativa.

Para tanto, você deverá copiar para seu diretório de trabalho o arquivo "trabalho.sql" do diretório \IDEO\SQL. Execute: "@trabalho;" que deverá:

- Criar o banco de dados Trabalho. - Abrir o banco de dados Trabalho.

- Criar as Tabelas, Indices e Relações contidas neste Banco de Dados.

Posteriormente execute o comando "show tables", que deverá exibir as tabelas "dept" e "emp". E ao executar "show fields dept" serão exibidos os campos da tabela "dept".

Copie e execute enchetra.sql do diretório \IDEO\SQL de forma a obter um conjunto de dados preparados para os testes a seguir apresentados.

Na próxima etapa de nosso curso, estaremos realizando pesquisas utilizando a instrução Select. Julgamos conveniente que os estudantes populem seu exercício e realizem exercícios análogos aos apresentados na Base de Dados Trabalho no Banco de Dados Mundo.

Parte I - Comandos de Consulta ao Esquema

Devemos ressaltar que a linguagem SQL é utilizada tanto pelos profissionais responsáveis pelos dados, onde é ressaltada a figura do Administrador do Banco de Dados e dos Analistas de Dados, como também pelos desenvolvedores de Aplicações. Enquanto àqueles estão preocupados com o desempenho, integridade do Banco de Dados e utilizam toda gama de recusos disponíveis no SQL, estes estão preocupados apenas em "transformar dados em informações", portanto para os desenvolvedores costuma-se dizer que conhecer o "select" já basta. Em nosso curso enfatizaremos a importância de TODOS os comandos do SQL, mas sabemos de antemão que os professores responsáveis pelas linguagens IDEO, VB e Delphi, ressaltarão a preponderância da instrução "select", que será apresentada a seguir e não no final do curso de SQL como geralmente acontece, pelo fato de que diversas disciplinas necessitam especificamente deste comando, que passaremos a apresentar:

1) Seleção de todas os campos (ou colunas) da tabela de Departamentos.

Resp: SELECT * FROM DEPT;

O exemplo utiliza o coringa "*" para selecionar as colunas na ordem em que foram criadas. A instrução Select, como pudemos observar seleciona um grupo de registros de uma (ou mais) tabela(s). No caso a instrução From nos indica a necessidade de pesquisarmos tais dados apenas na tabela Dept.

Where como base das Restrição de tuplas .

A cláusula "where" corresponde ao operador restrição da álgebra relacional. Contém a condição que as tuplas devem obedecer a fim de serem listadas. Ela pode comparar valores em colunas, literais, expressões aritméticas ou funções.

A seguir apresentamos operadores lógicos e complementares a serem utilizados nas expressões apresentadas em where.

operadorsignificado
=iguala
>maiorque
>=maiorqueouiguala
<menorque
<=menorqueouiguala

Operadores lógicos

Exemplos: SELECT EMPNOME, EMPSERV FROM EMP WHERE DEPNUME>10;

O conjunto de caracteres ou datas devem estar entre apóstrofes (‘) na cláusula "where".

2) Selecione todos os departamentos cujo orçamento mensal seja maior que 100000. Apresente o Nome de tal departamento e seu orçamento anual, que será obtido multiplicando-se o orçamento mensal por 12.

Resp: Neste problema precisamos de uma expressão que é a combinação de um ou mais valores, operadores ou funções que resultarão em um valor. Esta expressão poderá conter nomes de colunas, valores numéricos, constantes e operadores aritméticos.

SELECT DEPNOME, DEPORCA*12 FROM DEPT WHERE DEPORCA > 100000;

3) Apresente a instrução anterior porém ao invés dos "feios" DepNome e DepOrca, os Títulos Departamento e Orçamento.

Resp: Neste exemplo deveremos denominar colunas por apelidos. Os nomes das colunas mostradas por uma consulta, são geralmente os nomes existentes no Dicionário de Dado, porém geralmente estão armazenados na forma do mais puro "informatiquês", onde "todo mundo" sabe que CliCodi significa Código do Cliente. É possível (e provável) que o usuário desconheça estes símbolos, portanto devemos os apresentar dando apelidos às colunas "contaminadas" pelo informatiquês, que apesar de fundamental para os analistas, somente são vistos como enigmas para os usuários.

SELECT DEPNOME"DEPARTAMENTO", DEPORCA *12"ORCAMENTO ANUAL" FROM DEPT WHERE DEPORCA > 100000;

4) Apresente todos os salários existentes na empresa, porém omita eventuais duplicidades.

Resp: A cláusula Distinct elimina duplicidades, significando que somente relações distintas serão apresentadas como resultado de uma pesquisa.

5) Apresente todos os dados dos empregados, considerando sua existência física diferente de sua existência lógica (ou seja devidamente inicializado).

Resp: Desejamos um tratamento diferenciado para valores nulos. Qualquer coluna de uma tupla que não contenha informações é denominada de nula, portanto informação não existente. Isto não é o mesmo que "zero", pois zero é um número como outro qualquer, enquanto que um valor nulo utiliza um "byte" de armazenagem interna e são tratados de forma diferenciada pelo SQL.

SELECT EMPNOME, NVL(EMPSALA,0) + NVL(EMPCOMI,0) FROMEMP;

Obs: a função "NVL" é utilizada para converter valores nulos em zeros.

6) Apresente os nomes e funções da cada funcionário contidos na tabela empresa, porém classificados alfabeticamente (A..Z) e depois alfabeticamente invertido (Z..A).

Resp: A cláusula Order By modificará a ordem de apresentação do resultado da pesquisa (ascendente ou descendente).

Nota: Também é possível fazer com que o resultado da pesquisa venha classificado por várias colunas. Sem a claúsula "order by" as linhas serão exibidas na sequência que o SGBD determinar.

(Parte 5 de 8)

Comentários