• Nenhum resultado encontrado

Cap08

N/A
N/A
Protected

Academic year: 2021

Share "Cap08"

Copied!
39
0
0

Texto

(1)

Bancos de Dados

(2)

Introdução

• A padronização ao redor de SQL é uma das principais

razões para o sucesso dos bancos de dados relacionais

– A migração entre SGBDs é facilitada, embora existam muitas diferenças entre eles

– O uso estrito do padrão preserva adequadamente essa possibilidade – Um SBD pode inclusive usar mais de um SGBD diferente,

acessando-os apenas usando SQL padrão

• A linguagem SQL foi originalmente desenvolvida pela

IBM, para seu SGBD System R

– Nome original: SEQUEL (Structured English QUEry Language) – A pronúncia original ainda permanece

(3)

Introdução

• SQL foi padronizada em 1986 (SQL1) pelo ANSI e pela

ISO

• Hoje está em vigor um padrão atualizado (SQL2),

aprovado em 1992

• A versão seguinte do padrão era chamada de SQL3, mas

acabou sendo denominada SQL-99

– Especificação em núcleo e pacotes

– O núcleo seria implementado por todos os desenvolvedores para ser compatível com o padrão SQL-99

– Os pacotes são implementados como módulos opcionais, específicos para um SGBD

(4)

Introdução

• SQL é baseada principalmente no cálculo relacional de

tuplas, embora inclua aspectos de álgebra relacional

– Álgebra relacional especifica uma seqüência de operações

– Por outro lado, a SQL é uma linguagem declarativa, em que o usuário especifica apenas qual resultado deseja, não como obtê-lo – Isso permite que o SQL tenha seu desempenho melhorado por

estratégias de otimização de consultas, transparentes para o usuário, a cargo do SGBD

• SQL é ao mesmo tempo DDL e DML

– Além disso, inclui recursos para especificar visões, segurança, autorizações, restrições de integridade e controle de transações

(5)

Comparação de Conceitos

(genérica e parcial)

ER

Conceitual

Entidade

Instância

Atributo

Relacional

Lógico

Relação

Tupla

Atributo

(6)

Catálogos e Esquemas

• A SQL2 tem o conceito de esquema, ausente da SQL1, que

permite separar conjuntos de tabelas de acordo com a

aplicação

• O esquema é identificado por um nome, tem um

identificador de autorização (usuário dono do esquema), e

também descritores para todos os elementos nele contidos

(tabelas, restrições, visões, domínios, etc.)

• Criação:

– CREATE SCHEMA <nome> AUTHORIZATION <usuário>

(7)

Catálogos e Esquemas

• No SQL2, um catálogo é uma coleção de esquemas

• Além dos esquemas criados pelo usuário, o catálogo inclui

um esquema especial (INFORMATION_SCHEMA) que

fornece informação sobre todos os descritores de todos os

esquemas contidos no catálogo para usuários autorizados

• Esquemas contidos no mesmo catálogo podem

compartilhar alguns elementos, tais como descritores de

domínio

(8)

Comandos DDL

Comando básico: CREATE TABLE

CREATE TABLE <nome>

(<nomeColuna> <tipoColuna> [<restriçãoAtributo>]

[, <nomeColuna> <tipoColuna> [<restriçãoAtributo>]]

[, restriçãoTabela [, restriçãoTabela]])

(9)

CREATE TABLE

• Tipos de dados e domínios

– Numéricos: INTEGER, INT, SMALLINT, FLOAT, REAL,

DOUBLE PRECISION, DECIMAL(i,j), DEC(i,j), NUMERIC(i,j), NUMBER(i,j)

– Strings: CHAR(n), CHARACTER(n), VARCHAR(n), CHAR VARYING(n)

– Strings de bits: BIT(n), BIT VARYING(n)

– Data e hora: DATE, TIME, TIME(i), TIME WITH TIME ZONE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, INTERVAL – Domínio definido pelo usuário

• CREATE DOMAIN <nome> AS <tipo> • CREATE DOMAIN <nome> AS <tipo>

CHECK <condição>

– CREATE DOMAIN D_NUM AS INTEGER CHECK (D_NUM > 0 AND D_NUM < 21)

(10)

CREATE TABLE

• Restrições de atributo

– DEFAULT <valor>

• Pode ser incluído na definição de um domínio

– NOT NULL

– PRIMARY KEY – UNIQUE

• Chave candidata

– FOREIGN KEY REFERENCES <tabela>(<atributo>) ON DELETE [SET NULL | DEFAULT | CASCADE] ON UPDATE [SET NULL | DEFAULT | CASCADE]

(11)

CREATE TABLE

• Pode-se dar nome a uma restrição

– CONSTRAINT <nome> PRIMARY KEY (<atributo>) – CONSTRAINT <nome> FOREIGN KEY (<atributo>)

REFERENCES <tabela>(<atributo>)

ON DELETE [SET NULL | DEFAULT | CASCADE] ON UPDATE [SET NULL | DEFAULT | CASCADE] – CONSTRAINT <nome> UNIQUE (<atributo>)

• Restrições em tuplas

(12)

Mais Comandos DDL

• DROP SCHEMA <nome> [CASCADE | RESTRICT]

– RESTRICT: só é excluído o esquema se ele não contiver nenhum elemento

• DROP TABLE <nome. [CASCADE | RESTRICT]

– RESTRICT: só será excluída a tabela se ela não for referenciada em nenhuma restrição nem em visões

(13)

Mais Comandos DDL

• ALTER TABLE: evolução de esquemas

– ALTER TABLE <nome> ADD <atributo> <tipo>

• Não é permitido configurar NOT NULL neste caso

– ALTER TABLE <nome> DROP <atributo> [CASCADE | RESTRICT]

– ALTER TABLE <nome> ALTER <atributo> [SET DEFAULT <valor> | DROP DEFAULT] – ALTER TABLE <nome> ADD CONSTRAINT

– ALTER TABLE <nome> DROP CONSTRAINT <nome> [CASCADE | RESTRICT]

(14)

Comandos DML

Comando básico: SELECT

SELECT <lista de atributos>

FROM <lista de tabelas>

WHERE <condição>

(15)

SELECT

• SELECT com apenas uma tabela na lista FROM:

– Par select-project da álgebra relacional

• SELECT com mais de uma tabela na lista FROM:

– Consulta “select-project-join”

– A condição WHERE deve incluir pelo menos uma condição de

junção, que estabelece o relacionamento entre duas das tabelas

(16)

SELECT

• Nomes de atributos ambíguos

– O mesmo nome pode ser usado para dois atributos que estejam em tabelas diferentes

– Se ambos forem usados em uma consulta, deve-se prefixá-los com o nome da tabela: TABELA.ATRIBUTO

– Pode ocorrer ambiguidade quando é necessário fazer referência à mesma tabela duas vezes

• SELECT E.NOME, S.NOME

FROM EMPREGADO AS E, EMPREGADO AS S WHERE E.NSSSUPER=S.NSS;

– A cláusula AS pode ser usada para renomear todos os atributos de uma só vez:

(17)

SELECT

• WHERE pode não ser especificada (default: TRUE)

– Se existir mais de uma tabela na lista FROM, o resultado é o produto cartesiano das duas tabelas

– Equivale a produto cartesiano seguido de PROJECT na álgebra relacional

(18)

SELECT

• A SQL não trata tabelas como conjuntos, mas sim como

multiconjuntos

– Tuplas duplicadas podem aparecer mais do que uma vez numa tabela ou no resultado de uma consulta

• A eliminação de tuplas duplicadas não é realizada

automaticamente porque:

– Custa caro computacionalmente, pois requer ordenação – Pode ser do interesse do usuário ver as duplicatas

– Pode interferir no resultado de operações de agregação

(19)

SELECT

• A SQL incorpora diretamente algumas das operações de

conjuntos da álgebra relacional

– UNION (SQL1), INTERSECTION (SQL2), EXCEPT (SQL2)

• O resultado são conjuntos de tuplas, portanto tuplas

duplicadas serão eliminadas

– Obs: cuidado com o desempenho

– UNION ALL, INTERSECT ALL e EXCEPT ALL anulam este efeito

• As operações são aplicáveis apenas sobre tabelas

compatíveis para união, dentro do conceito da AR

– As duas tabelas devem conter os mesmos atributos, com os mesmos nomes e na mesma ordem

(20)

SELECT

• Operador LIKE: comparação parcial

– % substitui qualquer número de caracteres e _ (underscore) substitui um caractere

– Para usar % ou _ no padrão, digitar \% ou \_

• Operações aritméticas

– +, -, *, /

– +, - servem para datas, horas e etc. também

• Strings

– Concatenação: ||

• Comparação

– >, <, >=, <=, =, <> – BETWEEN

(21)

SELECT

• Ordenação

– Cláusula ORDER BY

– ORDER BY <atrib> [DESC | ASC] [, <atrib> [DESC | ASC]] – ASC é o default

• Observar que o retorno ordenado de uma consulta não

depende da indexação da tabela

• A criação de índices é uma decisão de implementação, e

inclusive não é parte (formal) da SQL

(22)

Valores Nulos e

Lógica de Três Valores

• Quando um valor nulo é envolvido em uma expressão

juntamente com outros valores, o resultado é o valor

especial UNKNOWN

AND TRUE FALSE UNKNOWN TRUE TRUE FALSE UNKNOWN

FALSE FALSE FALSE FALSE

UNKNOWN UNKNOWN UNKNOWN UNKNOWN

OR TRUE FALSE UNKNOWN TRUE TRUE TRUE TRUE

FALSE TRUE FALSE UNKNOWN

UNKNOWN TRUE UNKNOWN UNKNOWN

NOT TRUE

TRUE FALSE

FALSE TRUE

(23)

SELECT

Subqueries / nested queries:

– algumas operações exigem que dados sejam recuperados do banco e considerados na consulta

– Subconsultas (subqueries) são blocos SELECT..FROM..WHERE inseridos na cláusula WHERE da consulta externa

– Usar o operador de comparação IN

SELECT <atribs> FROM <tabelas>

WHERE <valores> IN (SELECT <atribs> FROM <tabelas>

WHERE <condição>);

– Os valores de comparação em WHERE na consulta externa devem ser compatíveis com os atributos do SELECT da subconsulta

(24)

SELECT

• Outros operadores de comparação para subconsultas:

– = ANY, = SOME Æ retorna TRUE se o valor de comparação for igual a algum valor da lista (ou conjunto, resultante de um

SELECT) que se segue; equivalente a IN

– Em vez de igual, pode-se usar <, >, >=, <=, <>

– > ALL Æ retorna TRUE se o valor de comparação do que todos os valores da lista ou conjunto que se segue

• Pode-se ter diversos níveis de subconsultas

• Quando há ambigüidade entre nomes de atributos, o não

qualificado pelo nome da tabela se refere à subconsulta

(25)

SELECT

• Sempre que uma condição do WHERE de uma subconsulta

faz referência a algum atributo de uma relação declarada

na consulta externa, diz-se que as consultas são

correlacionadas

• Em geral, uma consulta escrita com blocos de subconsultas

e que utiliza os operadores = ou IN pode sempre ser

expressa como uma consulta de um único bloco

(26)

SELECT

• A função EXISTS da SQL é usada para ferificar se o

resultado de uma subconsulta correlacionada é vazio ou

não (há também o NOT EXISTS)

– Vide Q16b, pg 234

• A função UNIQUE retorna TRUE se o resultado da

consulta contém apenas tuplas distintas, e FALSE caso

exista repetição

(27)

SELECT

• Pode-se usar EXCEPT para criar uma função “contém”,

que permitirá implementar o operador de divisão

– S1 CONTAINS S2 equivale a S2 – S1 = VAZIO – Vide Q3, Q3a e Q3b, pgs 233-236

• Uso de NULLs

– Não é usado = nem <> com nulos – IS NULL, IS NOT NULL

(28)

SELECT

• Renomeando atributos

– SELECT E.SOBRENOME AS NOME_EMPREGADO, S. SOBRENOME AS NOME_SUPERVISOR

FROM EMPREGADO AS E, SUPERVISOR AS S WHERE E.NSSSUPER = S.NSS;

• Tabelas de junção

– SELECT NOME, SOBRENOME, ENDEREÇO

FROM (EMPREGADO JOIN DEPARTAMENTO ON NUD=NUMERODEP)

WHERE NOMED=‘Pesquisa’;

(29)

SELECT

• Agregações e agrupamento

– Funções de agregação: usar na cláusula SELECT – COUNT, SUM, MIN, MAX, AVG

– Exemplo: Q19, Q20, Q21, Q22, Q23, Q25

• Agrupamento

– Atributo ou função de agrupamento definido em GROUP BY – Exemplos: Q24, Q25

– Cláusula HAVING: permite filtrar grupos que atendam a determinada condição

(30)

Mais Comandos DML

• INSERT

– INSERT INTO <tabela> VALUES (lista);

– INSERT INTO <tabela>(atribs) VALUES (lista);

– INSERT INTO <tabela>(atribs) SELECT... FROM... WHERE

(31)

Mais Comandos DML

• DELETE

– DELETE FROM <tabela> WHERE <condição>;

– DELETE FROM <tabela>

WHERE <atrib> IN (SELECT... FROM ... WHERE) – DELETE FROM <tabela>

(32)

Mais Comandos DML

• UPDATE

– UPDATE <tabela>

SET <atributo>=<valor> [, <atributo>=<valor>] WHERE <condição>;

– UPDATE <tabela>

SET <atributo>=<valor> [, <atributo>=<valor>]

(33)

Visões em SQL

(cap.9)

• Visão é uma tabela que é derivada de outras tabelas

– Não confundir com as visões do usuário, que foram discutidas na apresentação dos níveis de modelagem, cap. 1

• As tabelas das quais a visão é derivada podem ser tabelas

de base (armazenadas no banco) ou outras visões

• Uma visão não necessariamente existe fisicamente; ela

pode ser considerada uma tabela virtual

– Isso pode limitar as operações de atualização via visões, mas não limita as consultas

• É um modo de deixar disponível uma consulta à qual é

necessário fazer referência constantemente

(34)

Visões em SQL

• CREATE VIEW

– CREATE VIEW <nome>

AS SELECT... FROM... WHERE... – CREATE VIEW <nome>

AS SELECT... FROM... WHERE... GROUP BY... HAVING...

• Acesso à visão: com SELECT, como em uma tabela

comum

(35)

Visões em SQL

• A implementação eficiente de visões para fins de consulta

é complexa

• Existem duas estratégias

– Transformar a consulta à visão em uma consulta dirigida às tabelas de base: pode ser ineficiente se a consulta embutida na visão for “pesada”

– Materialização da visão: criação física de tabela temporária

• Requer uma estratégia de atualização da visão materializada ao longo das atualizações das tabelas de base

• Uso de atualizações incrementais

• Manutenção da visão apenas por um certo período de tempo após a última consulta

(36)

Visões em SQL

• Já a atualização de tabelas de base através de visões pode

simplesmente não ser possível, pois pode gerar

ambiguidades

– Atualizações em visões produzidas a partir de uma única tabela e sem o uso de funções de agregação podem ser realizadas por mapeamento

– Se a visão for produzida a partir de uma junção, o mapeamento pode ser feito de diferentes maneiras – vide exemplo pg 260

• Visões produzidas dessa forma em geral não são atualizáveis

• Visões envolvendo agregação e agrupamento não são atualizáveis

• Em SQL, acrescentar a cláusula WITH CHECK OPTION

(37)

Restrições Gerais como

Assertivas

• Restrições mais gerais, definidas pelo usuário, e que não se

enquadrem nas possibilidades do CREATE TABLE podem

ser implementadas usando assertivas declarativas

• Comando CREATE ASSERTION

– CREATE ASSERTION <nome> CHECK (<condição>);

• A condição é especificada como uma consulta, cujo

resultado é booleano

(38)

Etc.

• Mais SQL em

– Técnicas de programação usando SGBD: seção 9.3 a 9.6 – Privilégios e segurança: cap. 23

– Controle de transações: cap. 17

– Bancos de dados ativos (triggers): cap. 24 – Orientação a objetos: cap. 22

(39)

Referências

• Elmasri & Navathe, caps. 8 e 9 (parte)

• Vide: documentação de SGBD relacionais diversos

– DB2, SQL/DS, SQL Server, Access (?), Ingres, Informix, Oracle, MySQL, PostgreSQL, Sybase

Referências

Documentos relacionados

Ou seja, considerando semiótica como a ciência que estuda os signos e considerando o próprio Direito como uma linguagem expressada pelo discurso jurídico que se materializa na

 Para criar uma nova tabela no banco de dados, usa-se o comando CREATE TABLE..  É possível especificar um conjunto de caracteres e/ou

● O código abaixo não dá erro, porém ainda precisamos colocar as restrições:. CREATE TABLE

• CREATE [TABLE | VIEW | INDEX] – Criação de uma tabela (CREATE TABLE) de uma visão (CREATE VIEW) ou de um índice (CREATE INDEX).. • ALTER TABLE – Alteração da

Este trimestre representa um marco histórico para a Natura: com a aquisição da The Body Shop , demos um passo decisivo para nos tornarmos um grupo global, multimarcas e

• Dividimos o número de eventos em cada intervalo pelo número total de eventos e pela largura do intervalo... Histogramas

Fruto desta Visita Técnica e reuniões tidas, haverá oportunidade para a LIPOR fazer, em associação com outros Parceiros, uma Proposta para um Sistema de gestão de Resíduos moderno

CREATE DATABASE – cria um novo banco de dados ALTER DATABASE – modifica um banco de dados CREATE TABLE – cria uma nova tabela.. ALTER TABLE – altera uma tabela DROP TABLE