Anda di halaman 1dari 10

http://inf.unisul.br/~osmarjr/download/index.

htm
http://inf.unisul.br/~osmarjr/unisul/bd2/index.htm

Consulta (Recuperação) de dados

A algebra relacional define um conjunto básico de 8 operadores


que permite operar sobre o modelo relacional.
São eles:

- Seleção (restrição)
- Projeto
- Produto
- Interseção
- Diferença
- União
- Ligação Natural
- Divisão

Estes operadores são implementados SQL DML através do comando select.

**Seleção (restrição)

Extrai tuplas específicas de uma relação específica

**Projeto

Extrai atributos específicos de uma relação específica

**Produto

Cláusula Where

A cláusula where tem como objetivo


restringir as tuplas que serão selecionadas,
utilizando para isso uma condição.

Select FNOME
FROM F
where CIDADE='Londres';
Explicação

Seleciona todas as tuplas (Apenas o atributo FNOME),


da tabela F que possuam o valor Londres no atributo cidade.

Select *
FROM F
where CIDADE='Londres';

Explicação

Seleciona todas as tuplas (e todos os atributos)


da tabela F que possuam o valor Londres no atributo cidade
Podemos concatenar duas ou mais condições para uma consulta
através da utilização dos operadores lógicos AND, OR e NOT;
Para estabelecermos as condições podemos utilizar os operadores
relacionais: =,<>,<,>,<=,>=;
Além das palavras reservadas Like,Is Null,Between;

Select *
From F
Where CIDADE Like 'P%'

Explicação

Seleciona os fornecedores cuja cidade começa com a letra P

Cláusula Group by

A cláusula Group by reorganiza de forma lógica a tabela


representada pela cláusula FROM em grupos, de maneira que todas as colunas,
dentro de qualquer grupo, tenham o mesmo valor no campo informado
no Group by.
Tal agrupamento é puramente conceitual, ou seja, a tabela é reorganizada
fisicamente no banco de dados.
Suponha que você queria obter as peças fornecidas e para cada uma delas
o somatório da quantidade de peças fornecidas

Select P#, sum(QDE)"Somatório Quantidade"


From FPJ
Group by P#

Explicação

O having é para o group by o que o Where é para o From, ou seja,


serve para eliminar grupos, tal como o where

Select P#,Sum(QDE)
FROM FPJ
Group By P#
Having (sum(QDE)>=500);

Idem consulta anterior, excluindo-se as peças, cujo o somatório de fornecimento


seja menor que 500

Cláusula Order by

A cláusula order by é opcional, porém se você desejar visualizar


seus dados em uma determinada ordem você deve utilizar
a cláusula order by.
O padrão de ordem de classificação é ascendente ( de A à Z, de 0 à 9 ).
O exemplo abaixo classifica em ordem crescente os nomes dos funcionários

Select *
From F
where CIDADE='Londres'
Order by FNOME;

Explicação

Para classificar em ordem descrescente (Z à A, de 9 à 0), adicione a palavra reservada


DESC ao final de cada campo que você desejar classificar nesta ordem.

Select *
From F
where CIDADE='Londres'
Order by FNOME DESC;

Você pode incluir campos adicionais na cláusula order by. Os registros são
classificados pelo primeiro campo listado depois do order by, e os
que tiverem valores iguais naquele campo, são classificados pelo valor
no segundo campo e assim por diante.
Funções Agregadas

AVG -> Média de valores na coluna


Sum -> Somatório de valores na coluna
Min -> menor valor da coluna
Max -> maior valor da coluna
Count -> números de valores na coluna

Exemplos:

Select count(*)
from F
Obtém o número de tupla da relação F

Select Sum(QDE),"Sum"
From FPJ
Where F#='F1';

Obtém o somatório da quantidade de peças fornecidas pelo


fornecidos pelo fornecedor F1.

Ex: Select AVG(QDE),"AVG"


From FPJ
Where F#='F1';

Obtém a média da quantidade de peças fornecidas pelo fornecedor F1.

Produto

Constroe uma relação a partir de duas relações específicas,


consistindo em possibilidades de pares de tuplas concatenadas,
uma de cada duas relações específicas.

Select F#,P#
From F,P;

Seleciona todas as combinações fornecedor/peça que possam existir.

Interseção
Constroe uma relação consistindo em todas as tuplas que aparece em ambos
os pares de relações específicas.

Select *
From F
Where F.F# IN
(Select FPJ.F#
From FPJ);

Seleciona todos os fornecedores que forneceram peças


A mesma consulta pode ser expressa usuando a palavra reservada

Select *
From F
Where EXISTS
(Select FPJ.F#
From FPJ
Where FPJ.F#=F.F#);

Diferença

Constroe uma relação consistindo em todas as tuplas


que aparecem na primeira, mas não na segunda,
do par de relações específicas.

Select *
From F
Where F.F# NOT IN
(Select FPJ.F#
From FPJ);

Seleciona todos os fornecdores que não forneceram peças para projetos.


A mesma consulta pode ser expressa usando a palavra reservada NOT EXISTS

Select *
From F
Where NOT EXISTS
(Select FPJ.F#
From FPJ
Where FPJ.F#=F.F#);
União

Constroe uma relação consistindo em todas as tuplas que aparecem em ambos os pares
de relações específicas.

Select CIDADE From F


Union
Select CIDADE From P
Union
Select CIDADE From J
Order By 1;

Obtém uma lista de todas as cidades cadastradas em F, P e J


Obs: O número e o tipo dos atributos recuperados nos Selects devem coincidir
As tuplas repetidas são automaticamente eliminadas.
Ordenando através do primeiro campo.

Ligação Natural

Constroe uma relação a partir de duas relações específicas consistindo em todas as


possibilidades de pares de tuplas concatenados, uma de cada uma das duas relações específicas,
de forma que cada par das duas tuplas stisfaçam uma condição específica.

Select FPJ.*, F.FNOME


From FPJ,F
Where FPJ.F#=F.F#;

Seleciona todos os dados de fornecimentos de peças mais os nomes dos fornecedores


(que está na relação F). A mesma consulta pode ser expressa usando as palavras
reservadas Inner Join.

Select FPJ.*, F.FNOME


From FPJ Inner Join F on FPJ.F#=F.F#;

Left Join:
Preserva as linhas sem correspondência da primeira relação (esquerda)
Juntando-as com uma linha nula na forma da segunda tabela (direita)
Right Join:
Preserva as linhas sem correspondência da segunda tabela (direita)
Juntando-as com uma linha nula na forma da primeira tabela (esquerda)

Divisão

Toma duas relações, uma binária e outra unária, e constroe uma relação
consistindo em todos os valores de um atributo da relação binária com equivalência
(no outro atributo) a todos valores da relação unária.

É apropriada para consultas que incluem a construção "todas"

Select FNOME
From F
Where NOT EXISTS
(Select *
From P
Where NOT EXISTS
(Select *
From FPJ
Where FPJ.F#=F.F# AND
FPJ.P#=P.P#));

Seleciona os nomes dos fornecedores que forneçam todas as peças


Essa consulta pode ser interpretada da seguinte forma
Seleciona os nomes dos fornecedores de forma que não exista uma peça
que eles não forneçam.

1) Selecione todos os dados de fornecimento de peças mais o nome dos fornecedores


(tabela fornecedor). OK!

2) Selecione as peças cuja a cor comece com a letra V. OK!

3) Classifique em ordem descrecente


os nomes dos projetos da cidade de Atenas. OK!

4) Selecione os nomes dos fornecedores de forma que não


exista uma peça que eles não forneçam. OK!
5) Selecione todos os fornecedores que não forneceram
peças para projetos. OK!

A LINGUAGEM SQL PARA SEGURANÇA DE ACESSO AOS DADOS ARMAZENDOS

O termo segurança em sistemas de banco de dados, refere-se à proteção


de dados armazenados. Contra:

Divulgação, Alteração ou Destruição não autorizada.

O controle de segurança garante que os usuários tem permissão


para fazer o que estiverem "tentando" fazer.
Para isso o SGBD precisa estar ciente de certas limitações que os
usuários não podem violar.
Essas limitações devem ser especificadas pelo
DBA(Data Base Administrator)
Em linguagem apropriada e mantida no catálogo de
sistema ou no dicionário.
O SGBD deve monitorar as interações dos usuários de alguma forma,
para assegurar que as limitações são, de fato, observadas.
Há inúmeros aspectos relativos ao problema de segurança,
dentre os quais destacam-se:

* Aspectos legais, sociais e éticos.


Exe: A pessoa que faz a solicitação de uma informação,
digamos, referente ao crédito de um cliente,
tende direito legal à informação solicitada?

* Controle físicos.
Exe: A sala do servidor deve ser mantida trancada ou protegida
de alguma maneira?

* Questões políticas.
Exe: Como a empresa decide à quem deve permitir acesso a que?

* Problemas operacionais.
Exe: Na adoção de um esquema de senha. As próprias são mantidas em segredos?

* Controles de Hardware
Ex: A CPU proporciona dispositivos de segurança, como chaves de proteção
do armazenamento?

* Segurança do sistema Operacional


Ex: O sistema operacional apaga o conteúdo do armazenamento e arquivos de dados
quando termina de trabalhar com os mesmos?

A seguir são abordados os aspectos práticos e sintáticos da definição de mecanismos


de segurança através da linguagem SQL.

A unidade de dados para fins de segurança, isto é, o "objeto de dados" que talvez deva
ser protegida individualmente pode: referir-se a todo o conjunto de tabelas ou referir-se
a um valor de dados específico e determinada posição, linha e coluna dentro de uma tabela
específica.

Usuários de um sistema de banco de dados terão direitos diferentes de acesso ou difirentes


autoridades sobre esses objetos.
Ex: Autorização SELECT para uma tabela e autorização SELECT e UPDATE em outra.

Certamente diferentes usuários podem ter direitos diferentes sobre o mesmo projeto.
Ex: O usuário A pode ter a autorização SELECT (somente) em uma relação enquanto o
usuário B tem ao mesmo tempo as autoridades, SELECT e UPDATE, sobre uma mesma relação.

A Linguagem SQL oferece dois recursos para a provisão de segurança:

* Mecanismo de Visão: Permite em cobrir dados à usuários não autorizados.

* Subsistema de Autorização: Permite direitos e dinâmica de concedê-los a outros usuários e,


ainda, revogá-los se assim o desejar.

***Mecanismo de Visão***

Uma visão pode ser considerada como uma tabela virtual - isto é uma tabela que não existe
fisicamente, mas parece ao usuário como assim o fosse.

Toda as operações de manipulação de tabelas são permitidas sobre os Views:


SELECT, INSERT, UPDATE e DELETE.
Ex: Para criar uma visão da relação F, somente com os fornecedores de Paris, temos:

CREATE VIEW VIEW-FORNECEDORES-PARIS


AS SELECT *
FROM F
WHERE CIDADE='PARIS';

Os usuários que tiverem acesso a esta visão teram um "subconjunto horizontal", ou melhor,
um subconjunto de linhas das relação F contendo somente os fornecedores de Paris

Para criar uma visão da relação F, somente com os dados FNRO, FNOME, CIDADE dos fornecedores
mas, não a avaliação (status).

CREATE VIEW VIEW-FORNECEDORES


AS SELECT FNRO,FNOME,CIDADE
FROM F;

Os usuários que tiverem acesso a esta visão teram um subconjunto vertical ou melhor,
um subconjunto de colunas.