quinta-feira, 21 de agosto de 2008

SQL

Disciplina: Fundamentos de Armazenamento e Manipulação de Dados
Professor: Andre Rodrigo Sanches


AULA: Linguagem SQL
A linguagem SQL é um padrão de linguagem de consulta comercial que usa uma combinação de construtores em Álgebra e Cálculo Relacional e possui as seguintes partes:

Linguagem de definição de dados (DDL);
Linguagem interativa de manipulação de dados (DML);
Incorporação DML (Embedded SQL);
Definição de Visões;
Autorização;
Integridade;
Controle de Transações.
O SQL permite que uma tabela (relação) tenha duas ou mais tuplas idênticas em todos os seus valores de atributos. Assim, em geral, uma relação SQL não é um conjunto de tuplas porque um conjunto não permite elementos idênticos. Ao invés disso, SQL é um multi-conjunto (algumas vezes chamado de bag) de tuplas.



Estrutura Básica
Uma expressão básica em SQL consiste em três cláusulas: SELECT, FROM e WHERE.

A cláusula SELECT corresponde à operação de projeção da álgebra relacional. É usada para relacionar os atributos desejados no resultado de uma consulta.

O resultado de uma consulta SQL é, obviamente, uma relação. SQL permite duplicidades nas tuplas de resposta. Quando desejamos forçar a eliminação de duplicidade, podemos inserir a palavra chave DISTINCT depois de SELECT.

Para especificar explicitamente que as duplicidades não serão eliminadas a SQL nos permite usar a palavra-chave ALL depois de select. Uma vez que a manutenção de duplicidade é padrão, o uso de all é facultativo.

O asterisco “*” pode ser usado para denotar “todos os atributos”.

A cláusula FROM corresponde à operação de produto cartesiano da álgebra relacional. Ela associa as relações que serão pesquisadas durante a avaliação de uma expressão.

A cláusula WHERE corresponde à seleção do predicado da álgebra relacional. Consiste em um predicado envolvendo atributos da relação que aparece na cláusula FROM.
A cláusula where pode conter expressões aritméticas envolvendo os operadores de comparação <, <=, >, >=, = e <>, e operandos constantes ou atributos das tuplas.
Em SQL, nessa cláusula podem-se usar os conectores lógicos AND, OR e NOT.
SQL possui o operador de comparação BETWEEN AND para simplificar a cláusula where que especifica que um valor pode ser menor ou igual a algum valor e maior ou igual a algum outro valor.

Uma consulta típica em SQL tem a forma:

select A1, A2, ..., An
from r1, r2, ..., rn
where P

Cada Ai representa um atributo e cada ri, uma relação. P é um predicado a ser satisfeito.

A SQL forma um produto cartesiano das relações indicadas na cláusula FROM, executa uma seleção em AR usando o predicado da cláusula WHERE e, então, projeta o resultado nos atributos da cláusula SELECT. Na prática, ela pode converter em outra expressão equivalente que seja mais eficiente no processamento.



A operação RENAME
SQL proporciona um mecanismo para renomear tanto atributos quanto relações, usando a cláusula AS, da seguinte forma:

nome_antigo as nome_novo

Pode aparecer tanto na cláusula SELECT quanto na cláusula FROM.

A cláusula AS é particularmente útil na definição de variável tupla (quando utilizada na cláusula FROM), como é feito no cálculo relacional. Uma variável tupla em SQL precisa estar associada a uma relação.



Operações com Strings
As operações em strings mais usadas são as checagens para verificação de coincidências de pares, utilizando o operador LIKE. Esses pares são identificados por meio do uso de dois caracteres especiais:

Porcentagem ( % ): compara qualquer string;
Sublinhado ( _ ): compara qualquer caractere.
Exemplos:

“_ _ _ _%” corresponde a qualquer string com pelo menos quatro caracteres.
“Uni%” corresponde a qualquer string que comece com “Uni”, como, “universo”, “universal”,
“universidade”.

Utilizando NOT LIKE pode-se pesquisar diferenças, ao invés de coincidências.

Obs.: Em geral, essas comparações são case sensitive (sensíveis a maiúsculas/minúsculas).



Ordenação e Apresentação de Tuplas
A linguagem de consulta SQL possui a cláusula ORDER BY que possibilita a apresentação dos resultados de uma consulta segundo uma determinada ordem de tuplas.

Para completar uma solicitação de ORDER BY a SQL precisa realizar uma SORT (intercalação/ordenação).

Uma intercalação com muitas tuplas pode ser custosa, portanto, só usar quando necessária.

Para listarmos uma relação em ordem ascendente usamos order by nome do campo ASC. Em ordem descendente, usamos ORDER BY nome_do_campo DESC. Por default (padrão), a relação dos itens é efetuada em ordem ascendente.



Operações com Conjuntos
SQL possui as operações de união (UNION), interseção (INTERSECT) e exceto (EXCEPT), que
correspondem às operações da álgebra relacional.

Contudo, existem várias restrições para o uso destes operadores e certos produtos não oferecem suporte para estas operações.



Funções Agregadas
Funções que tomam uma coleção (um conjunto ou subconjunto) de valores como entrada, retornando um único valor.

Funções ofertadas pela SQL:

SUM: soma/total;
AVG: média;
COUNT: contagem;
MIN: mínimo;
MAX: máximo;
A entrada para SUM e AVG precisa, obrigatoriamente, ser um conjunto de números, mas as demais operações não impõem esta restrição.

Exemplo:

select A1, A2, ..., An
from r1, r2, ..., rn
where P
group by A1;

Por vezes, precisamos aplicar uma função agregada não apenas a um conjunto de tuplas, mas também a um grupo de conjunto de tuplas. Isto é feito por meio da cláusula GROUP BY (onde os seus atributos são utilizados para formar os grupos).

Em outros casos, pode ser mais interessante definir condições e aplicá-las a grupos do que aplicá-las a tuplas. Isto é feito pela cláusula HAVING. Como os predicados da cláusula são aplicados após a formação dos grupos, funções agregadas podem ser usadas.

select A1, A2, ..., An
from r1, r2, ..., rn
where P
group by A1
having ;



Subconsultas Aninhadas
Uma expressão select-from-where aninhada dentro de outra consulta é considerada uma subconsulta.


Aplicações:

Membros de Conjuntos
Verificar se uma tupla é membro ou não de uma relação. O conectivo IN testa os membros de um conjunto, no qual este conjunto é a coleção de valores produzidos na cláusula SELECT.
select A1, A2, ..., An
from r1, r2, ..., rn
where P in (

select A1, A2, ..., An
from r1, r2, ..., rn
where P

);

Comparações de Conjuntos
Permite usar comparações do tipo > some (maior que ao menos uma), <= some, = some, etc...
ou > all (maior que todas), >= all, etc.
select A1, A2, ..., An
from r1, r2, ..., rn
where P > all (

select A1, A2, ..., An
from r1, r2, ..., rn
where P

);

Verificação de relações vazias
Pode-se testar se o resultado de uma subconsulta é vazio. O construtor EXISTS retorna o valor TRUE se o argumento da subconsulta é não-vazio.
select A1, A2, ..., An
from r1, r2, ..., rn
where P exists (

select A1, A2, ..., An
from r1, r2, ..., rn
where P

);



Visões
Uma visão é qualquer relação que não faz parte do modelo lógico do banco de dados, mas que é visível ao usuário, como uma relação virtual.

O conjunto de tuplas de uma relação visão é resultado de uma expressão de consulta que foi definido no momento de sua execução. Logo, se uma relação visão é computada e armazenada, esta pode tornar-se desatualizada se as relações usadas em sua geração sofrerem modificações.

Quando uma visão é definida, o sistema de banco de dados armazena sua definição ao invés do resultado da expressão SQL que a definiu. Sempre que a relação visão é usada, ela é sobreposta pela expressão da consulta armazenada, de maneira que, sempre que a consulta for solicitada, a relação visão será recomputada.

Alguns sistemas de banco de dados permitem que as relações de visões sejam materializadas, garantindo que se ocorrerem modificações nas relações reais usadas na definição da visão, também a visão será modificada. Contudo, esta abordagem pode incorrer em custos de armazenamento e atualizações de sistema.

As visões em SQL são geradas a partir do comando create view. A cláusula padrão é:

CREATE VIEW AS ;

Caso não necessitemos mais de uma dada visão, podemos eliminá-la por meio do comando:

DROP VIEW ;

Nenhum comentário: