• Nenhum resultado encontrado

SQL92 DDL( RIS, ACTUALIZAÇÕES E VISTAS) DML (QUERIES, SUBQUERIES,JUNÇÕES, E OPERAÇÕES SOBRE CONJUNTOS)

N/A
N/A
Protected

Academic year: 2021

Share "SQL92 DDL( RIS, ACTUALIZAÇÕES E VISTAS) DML (QUERIES, SUBQUERIES,JUNÇÕES, E OPERAÇÕES SOBRE CONJUNTOS)"

Copied!
39
0
0

Texto

(1)

SQL92

DDL( RIS, ACTUALIZAÇÕES E VISTAS)

DML (QUERIES, SUBQUERIES,JUNÇÕES, E

OPERAÇÕES SOBRE

(2)

SQL

• SQL, é uma linguagem de programação que foi

desenvolvida para questionar bases de dados relacionais usando uma abordagem não procedimental.

• O termo não procedimental significa que é possível

extrair informação dizendo ao sistema que informação queremos, por oposição a dizer como extrair essa

(3)

SQL é mais do que apenas uma Linguagem de

Consulta

Linguagem de Definição de Dados (DDL):

• Criar / destruir / alterar relações e vistas.

• Define restrições de integridade (RI’s). • Linguagem de actualização:

• Insere /apaga / modifica (update) tuplos.

• Interage de perto com as RI´s. • Controlo de Acessos:

• Pode conceder (grant) / retirar (revoke) o direito ao acesso e à manipulação de tabelas (relações / vistas).

(4)

SQL Server Management Studio Express

Interface gráfico com o utilizador que pode ser usado para:

• Criar bases de dados.

• Correr scripts SQL – São programas que podem conter comandos

DDL ou DML (ou combinação de ambos)

• Optimizar a performance do sistema.

• Analisar planos de querys

(5)

SQL Server Management Studio 2008

IP interno: 10.36.0.6 IP externo: 193.137.66.186 Username e password Fornecido pelo docente

Academia MSDNAA / EST: http://msdn61.e-academy.com/msdnaa_lo9249

(6)

1. Comando SQL

2. Validar Comando SQL

3. Executar Comando SQL

(7)

Criação de Relações

• Cria a relação Barcos. São mostrados os nomes e tipos

de três campos.

CREATE TABLE Barcos

(bid INTEGER, bnome CHAR(10), cor CHAR(10))

Não foram específicadas nenhumas restrições de

Integridade. (Vamos discutir isto mais à frente.)

CREATE TABLE Reservas

(8)

Destruição e Alteração de Relações

• Destrói a relação Barcos. A informação do esquema e

os tuplos são apagadas.

DROP TABLE Barcos

O esquema de barcos é alterado pela adição

de um novo campo; cada tuplo da instância

corrente é extendido com um valor

null

no

novo campo.

ALTER TABLE Barcos

(9)

Restrições de Integridade

• Uma RI descreve condições que devem ser satisfeitas por

todas as instâncias legais de uma relação.

• Inserts/deletes/updates que violem as RI’s são desactivados. • Podem ser utilizadas para assegurar a aplicação da semântica

(e.g., id como chave), ou prevenir inconsistencias (e.g., snome tem que ser uma string, age deve ser < 200)

Tipos de RI’s: Restrições de domínio, restrições de chave primária, restrições de chave forasteira, restrições gerais.

restrições de domínio: Os valores dos campos têm que ser do tipo correcto. É sempre reforçada.

(10)

Chaves Primárias e Candidatas

Chave de uma relação: Conjunto mínimo de campos , duma instância legal, que garanta que não haja dois tuplos distintos com os mesmos valores nos campos chave.

• É Possivel ter muitas candidate keys (especificadas usando UNIQUE), uma das quais é escolhida para primary key.

• Os campos da chave primária não podem conter valores nulos.

CREATE TABLE Reservas

( mnome CHAR(10)

bid INTEGER,

data DATE,

PRIMARY KEY (mnome, bid, data) )

CREATE TABLE Reservas

( mnome CHAR(10) NOT NULL,

bid INTEGER,

data DATETIME,

PRIMARY KEY (bid, data),

(11)

Chaves Forasteiras

Foreign key: Conjunto de campos de uma relação R que é usado para se ´referir´ aos tuplos de uma outra relação S.

• Os campos devem ser chave (idealmente, primaria) de S.

• Nos tuplos de R, os valores dos campos devem corresponder a valores em algum tuplo de S, ou então são nulos.

CREATE TABLE Barcos

( bid INTEGER,

bnome CHAR(10),

cor CHAR(10),

PRIMARY KEY (bid) );

CREATE TABLE Reservas

( mnome CHAR(10) NOT NULL,

bid INTEGER,

data DATETIME,

PRIMARY KEY (bid, data) ,

UNIQUE (mnome),

FOREIGN KEY (bid)

(12)

Restrições Gerais

• Util quando se

trata de RI´s mais gerais do que as chaves.

• As restrições

podem ter nome.

CREATE TABLE Marinheiros

( mid INTEGER,

mnome CHAR(10),

grau INTEGER,

idade REAL,

PRIMARY KEY (mid),

CHECK ( grau >= 1

AND grau <= 10 ));

(13)

Inserção de novos Registos

• Inserção de registo uníco:

INSERT INTO Marinheiros (mid, mnome, grau, idade)

VALUES (12, ‘Emanuel’, 5, 21.0)

Inserção multipla de registos:

INSERT INTO Marinheiros (mid, mnome, grau, idade)

SELECT S.mid, S.nome, null, S.idade

FROM Alunos S

WHERE S.idade >= 18

(14)

Apagar Registos

• Podemos apagar todos os tuplos que satisfaçam a

condição da cláusula WHERE :

DELETE

FROM Marinheiros

WHERE grau IS NULL

O exemplo apaga todos os marinheiros sem

grau; a cláusula

WHERE

pode conter consultas

complexas etc., em geral.

O que deve ser feito quando um apagamento causa

(15)

Modificação de Registos

• Comando UPDATE é usado

para modificar oa campos dos tuplos existentes

• A cláusula WHERE é aplicada

antes e determina os campos a serem modificados.

• A cláusula SET determina os

novos valores

• Se o campo a ser modificado

também for usado para determinar o novo valor, o

valor da cláusula WHERE é o

antigo.

UPDATE Marinheiros SET grau=grau-1

WHERE idade < 15

mid mnome grau idade

22 dustin 7 45.0 31 lubber 8 55.5 62 rusty 8 25.0 58 rusty 10 35.0 UPDATE Marinheiros SET grau=grau-1 WHERE grau >= 8

mid mnome grau idade

22 dustin 7 45.0

31 lubber 7 55.5

62 rusty 7 25.0

(16)

Reforço da Integridade Referencial

Considere Barcos e Reservas; bid em Reservas é uma chave

forasteira que referencia Barcos.

• O que deve ser feito se um tuplo de Reservas for inserido com

um numero de barco (id) não existente? (REJEITA-SE!!)

• O que deve ser feito se um tuplo de barcos for apagado?

• Apagar também todos os tuplos de Reservas que se lhe refiram.

• Desactivar o apagamento do tuplo de Barcos que é referido.

Atribua um default bid aos tuplos de Reservas que se lhe refiram.

Atribua null aos tuplos de Reservas que se lhe refiram.

• São feitas as mesmas escolhas no caso de se fazer UPDATE

(17)

Integridade Referencial no SQL/92

• O SQL/92 suporta todas as 4

opções nos deletes e updates.

• Por omissão, NO ACTION

(delete/update é rejeitado)

• CASCADE (apagam também os tuplos que se referem ao tuplo apagado)

• SET NULL / SET DEFAULT (Atribui à chave forasteira o valor do tuplo referenciado)

CREATE TABLE Reservas

( mnome CHAR(10) NOT NULL,

bid INTEGER DEFAULT 1000,

data DATETIME,

PRIMARY KEY (bid, data) ,

UNIQUE (mname),

FOREIGN KEY (bid)

REFERENCES Barcos ON DELETE CASCADE

(18)

Vistas

• Uma vista é apenas uma relação, mas guarda-se uma

definição, em vez de um conjunto de tuplos.

CREATE VIEW MarinheirosActivos (nome, idade, data) AS SELECT S.mnome, S.idade, R.data

FROM Marinheiros S, Reservas R

WHERE S.mnome=R.mnome AND S.grau>6

As vistas podem ser eliminadas utilizando o

comando

DROP VIEW .

 Como gerir DROP TABLE se houver uma vista na tabela?

 O comando DROP TABLE tem opções para o utilizador especificar

(19)

Vistas Actualizáveis

• O SQL/92 só permite actualizações a vistas baseadas em

tabelas simples.

CREATE VIEW MarinheirosNovos (mid, idade, grau) AS SELECT S.mid, S.idade, S.grau

FROM Marinheiros S

WHERE S.idade < 18

Cada tuplo da vista gerado por exactamente um

tuplo da tabela de base; logo cada comando

update/delete command na vista pode ser fácilmente

(20)

Sumário da DDL do SQL

• O DDL suporta a criação de relações, vistas e índices. As

tabelas podem ser alteradas (através da adição e eliminação e das RI’s).

• As Vistas podem ser consultadas como as relações, mas

(21)

Sumário (continuação)

• O SQL/92 suporta vários tipos de restrições de

integridade.

• Restrições de domínio, especificação de chaves primárias e candidatas, chaves forasteiras e restrições gerais.

• Em particular, as restrições de chave forastira interagem de perto com os comandos insert / delete / modify, e os

(22)

SQL92

– Data Manipulation Language

Marinheiros

mid mnome grau idade

10 Joao 7 33.0 11 Jose 5 25.0 15 Filipe 7 31.0 16 Antonio 3 31.0 19 Dusrte 7 26.5 20 Francisco 9 55.0 Barcos

bid Bnome cor

45 Vivaro Azul 89 Boat Amarelo 54 Caravela Preto 12 Atlantico Azul 45 Açores Vermelho 63 Barcaça Verde Reservas

bid mid data

45 10 11-12-2001 54 15 11-12-2001 12 10 5-11-2001 45 16 18-10-2001 54 15 14-11-2001 63 20 26-12-2001

(23)

O bloco básico da query

• A instrução SELECT extrai a

informação da base de dados.

• Na sua forma mais simples deve incluir:

• Uma cláusula SELECT, que lista todas as colunas a

visualizar

• Uma cláusula FROM, que especifica a tabela

• Exemplo:

• Para listar todos os numeros de marinheiros, nomes e idade da tabela Marinheiros

SELECT mid, mnome, idade FROM Marinheiros

mid mnome idade

10 Joao 33.0 11 Jose 25.0 15 Filipe 31.0 16 Antonio 27.0 19 Dusrte 26.5 20 Francisco 55.0

(24)

Impedir a selecção de linhas duplicadas

• Se fizermos

SELECT grau

FROM Marinheiros;

Aparecem todos os graus dos marinheiros duplicados. Para eliminar as repetições temos que fazer:

SELECT DISTINCT grau

(25)

A Cláusula ORDER BY

• Normalmente a sequência dos registos produzidos no

resultado duma consulta não é definida. A cláusula ORDER BY é utilizada para ordenar os registos. Tem que ser a

ultima cláusula da instrução SELECT

• Exemplo:

• Para saber os nomes, graus e idade dos marinheiros ordenados pelo nome faz-se:

SELECT MNOME, GRAU, IDADE FROM MARINHEIROS

ORDER BY MNOME;

• Nota:

• A ordenação de dados por omissão é ascendente. Para inverter a sequência digita-se DESC a seguir ao nome da coluna.

(26)

A cláusula WHERE

• A cláusula WHERE contém a condição que os registos têm que satisfazer para que sejam visualizados. Tem que

aparecer depois da cláusula FROM.

• Pode comparar valores das colunas, valores literais, expressões aritméticas ou fuções.

• Podem usar-se operadores aritméticos

• Operadores SQL (BETWEEN..AND.., IN(lista), LIKE, IS NULL)

• Exemplos:

SELECT MNOME, IDADE, GRAU FROM MARINHEIROS

WHERE GRAU BETWEEN 5 AND 8; (WHERE GRAU IN(3, 5);)

(WHERE MNAME LIKE ’F%’;) (WHERE GRAU IS NULL)

(27)

• Expressões de negação

• NOT BETWEEN; NOT IN; NOT LIKE; IS NOT NULL

• Consulta de dados com condições múltiplas

• AND; OR

• Exemplo:

SELECT MID, MNOME, GRAU, IDADE FROM MARINHEIROS

WHERE GRAU>7

AND IDADE=31

(28)

Funções de Grupo

• Estas funções operam sobre conjuntos de registos e são

utilizadas para extrair informação resumida sobre grupos de registos. Por defeito todos os registos de uma tabela são tratados como um grupo. A cláusula GROUP BY da instrução SELECT é utilizada para dividir os registos de uma tabela em grupos mais pequenos

• AVG: Valor médio (ignora nulos no Oracle)

• MAX: Valor máximo

• MIN: Valor Mínimo

• SUM: Soma dos valores (ignora nulos no Oracle)

• VARIANCE: variância (ignora nulos no Oracle)

• COUNT: Numero de vezes que toma um valor não nulo, se usarmos o * obriga a contar todos os registos, inclusive os repetidos e os

nulos

(29)

• Exemplos:

SELECT IDADE, AVG(GRAU) MÉDIA

FROM MARINHEIROS

GROUP BY IDADE;

SELECT AVG(GRAU) MÉDIA

FROM MARINHEIROS

(30)

• Cláusula HAVING

• Utiliza-se quando se pretende restringir a informação contida nos grupos

• Exemplo: para mostrar a idade média de todos os graus com mais de 3 pessoas faz-se

SELECT GRAU, AVG(IDADE)

FROM MARINHEIRO

GROUP BY GRAU

HAVING COUNT(*)>3

• Exemplo: para mostrar apenas as idades cujo grau mínimo é igual a 5 :

SELECT IDADE, MIN(GRAU)

FROM MARINHEIROS

GROUP BY IDADE

(31)

• Pode-se ainda utilizar a cláusula WHERE juntamente com as funções de grupo. A ordem das cláusulas tem que ser a seguinte:

SELECT colunas FROM tabela(s)

WHERE condições de registo GROUP BY coluna(s)

HAVING condições de grupo de registos ORDER BY coluna(s)

(32)

Junções

• Equi-junção: os valores da coluna são iguais em

ambas as tabelas

• Não equi-junção: junção entre tabelas quer não

tenham colunas correspondentes

• Equi-junção

• A condição de junção é especificada na cláusula WHERE

SELECT colunas FROM tabelas

WHERE a condição de junção é...

• Exemplo:

SELECT MARINHEIROS.MNOME, BARCOS.BNOME, RESERVAS.DATA

FROM MARINHEIROS, RESERVAS, BARCOS

WHERE MARINHEIROS.MID=RESERVAS.MID

AND RESERVAS.BID=BARCOS.BID

(33)

Junções

• Exemplo de uma não equi-junção

• Relação entre as tabelas MARINHEIROS e GRELHA_SALARIAL, uma vez que nenhuma coluna de MARINHEIROS corresponde directamente a uma coluna de GRELHA_SALARIAL. A relação vai ser obtida

utilizando um operador diferente do sinal igual(=).

• Suponhamos que para determinar o nível de remuneração de um marinheiro (salário) o seu grau tem que estar entre qualquer par de limites superior e inferior

SELECT M.MNOME, M.GRAU, G.SALARIO

FROM MARINHEIROS M, GRELHA_SALARIAL G

WHERE M.GRAU BETWEEN G.GRAUMIN AND G.GRAUMAX ORDER BY G.SALARIO;

GRELHA_SALARIAL

SALÁRIO GRAUMIN GRAUMAX

10000 1 2

20000 3 5

30000 6 7

(34)

• Junção de uma tabela com ela própria

• Se quisermos fazer uma consulta que nos apresente todos os MARINHEIROS que têm maior grau que o seu :

SELECT M1.NOME, M1.GRAU, M2.NOME, M2.GRAU FROM EMP MARINHEIROS M1, MARINHEIROS M2

WHERE M1.CHEFE=M2.MID AND M1.GRAU<M2.GRAU

mid mnome grau Chefe idade

10 Joao 7 15 33.0 11 Jose 5 16 25.0 15 Filipe 7 20 31.0 16 Antonio 3 19 27.0 19 Dusrte 7 20 26.5 20 Francisco 9 55.0

(35)

Operadores sobre conjuntos

• Os operadores de conjuntos (UNION,

INTERSECTION, MINUS) são designados por

junções verticais pq a junção de 2 tabelas se faz de acordo com colunas e não de acordo com linhas.

SELECT IDADE FROM MARINHEIROS WHERE GRAU=9 UNION SELECT IDADE FROM MARINHEIROS WHERE GRAU=30

Resultados da 1ª consulta mais os da 2ª consulta SELECT IDADE FROM MARINHEIROS WHERE GRAU=9 INTERSECTION SELECT IDADE FROM EMP WHERE GRAU=3

Resultados que coincidem em ambas as consultas SELECT IDADE FROM MARINHEIROS WHERE GRAU=9 MINUS SELECT IDADE FROM MARINHEIROS WHERE GRAU=3

Resultados da 1ª consulta que não resultem da segunda

(36)

Subconsultas

• Uma subconsulta é uma instrução SELECT que está

encadeada noutra instrução SELECT que produz resultados intermédios. A utilização de subconsultas permite a um utilizador construir comandos potentes a partir de comandos simples.

SELECT coluna1, coluna2,...

FROM tabela

WHERE coluna=

(SELECT coluna

FROM tabela

(37)

Exemplo

• Para encontrar o MARINHEIRO que tenha o grau mais baixo da empresa (cujo valor é à partida desconhecido), são necessários 2 passos:

1. Encontrar o grau mais baixo:

SELECT MIN(GRAU)

FROM MARINHEIROS;

2. Encontrar o marinheiro que tem o grau mais baixo:

SELECT MNOME, GRAU

FROM MARINHEIROS

WHERE GRAU=(resultado da query anterior)

Podemos combinar os dois comandos numa subconsulta encadeada:

SELECT MNOME, GRAU

FROM MARINHEIROS

WHERE GRAU=( SELECT MIN(GRAU)

(38)

Operadores ANY, ALL e EXISTS

• Estes operadores podem ser utilizados em subconsultas

que produzam mais do que um registo na cláusula WHERE ou HAVING em conjunção com os operadores lógicos.

• O operador ANY compara um valor com cada valor produzido por uma subconsulta.

• Exemplo:

• Para visualizar os marinheiros que têm um grau maior do que o menor grau dos marinheiros com 31 anos:

SELECT MNOME, GRAU FROM MARINHEIROS

WHERE GRAU>ANY(SELECT DISTINCT GRAU

FROM MARINHEIROS

WHERE idade=31)

ORDER BY GRAU DESC;

• O grau mais baixo dos marinheiros com 31 anos é 3, do António. A

consulta principal produziu como resultado todos os marinheiros que têm um grau maior do que 3. (‘>ANY’ significa aqui maior ou igual ao minimo, ‘=ANY’ seria equivalente a escrevermos IN)

(39)

• O operador ALL compara um valor com qualquer dos valores produzidos pela subconsulta:

• Exemplo

• Para encontrar todos os marinheiros que têm um grau maior do que qualquer dos marinheiros com 31 anos.

SELECT MNOME, GRAU FROM MARINHEIROS

WHERE GRAU>ALL(SELECT DISTINCT GRAU

FROM MARINHEIROS

WHERE idade=31)

ORDER BY GRAU DESC;

O grau mais alto dos marinheiros com 31 anos é 7, do Filipe. Por isso a consulta produz como resultado todos os marinheiros cujo grau é maior do que 7.

• O operador EXISTS pode também ser utilizado para

verificar se existe determinado valor. O resultado é

Referências

Documentos relacionados

Segundo relato de seus moradores, José João, Ernestina, Elisa, Elza e Sandro, os mais velhos de que eles têm conhecimento em cada comunidade são Joaquim Alves, de Porto dos Alves

Como aqueles marinheiros que têm uma namorada em cada porto, eu tinha uma gata (gata mesmo, não é metáfora) em cada telhado desta cidade, e olhe que não são poucos os telhados

Esses dados revelam que o uso de ferro, mesmo supondo que as crianças o receberam de forma adequada quanto a dose e tempo, estava muito aquém da suplementação universal para

O produto a ser ofertado pela MultiFit Gourmet será um tipo de alimentação voltada para pessoas que fazem musculação, que precisam se alimentar de maneira

Pos Nr Cat Piloto Cidade / UF Patrocinador Pontos Ganhos. 48 1 ELITE FELIPE AUGUSTO MIRANDA ZANOL BELO HORIZONTE/SP

É importante destacar também que nesse processo de desenvolvimento, é preciso que o professor entenda as fases evolutivas de leitura e escrita da criança, para que possa

Os objetivos desse estudo foram: verificar a evolução do peso e da composição corporal de nutrizes nos três primeiros meses pós-parto, bem como os fatores que influenciaram o

A Tabela 6 identifica as categorias de CI mais empregadas nos estudos investigados. Percebe-se que as categorias empregadas referem-se a categorias que mesclam a