Buscar

Sql server

Prévia do material em texto

1 
 
 
 
 
 
Base de Dados 
 
 
SQL - Server 
 
Carlos Ramos 
 
ESGN 
2008/2009 
 
 
2 
Índice 
 
SQL Server - Arquitectura Cliente/Servidor ........................................................................................ 3 
SQL Server - Arquitectura da Base de Dados ...................................................................................... 4 
SQL Server - SQL Server Enterprise Manager. .................................................................................... 8 
SQL Server - Criar uma base de dados ............................................................................................ 12 
SQL Server - Criar uma base de dados (Exemplo) ............................................................................. 15 
SQL Server - Criar uma base de dados (Outro Exemplo) .................................................................... 17 
SQL Server - Criar uma tabela ....................................................................................................... 19 
Restrições de Integridade de Gatilhos ............................................................................................. 21 
Restrições de Chaves ................................................................................................................... 22 
Restrições de Integridade Referencial .............................................................................................. 19 
Restrições Baseadas em Atributos .................................................................................................. 24 
Nomes das Restrições de Integridade .............................................................................................. 25 
Gatilhos em SQL3 ........................................................................................................................ 26 
Gatilhos em SQL-Server ................................................................................................................ 29 
Índices ....................................................................................................................................... 31 
Vistas ........................................................................................................................................ 32 
Vistas e Segurança ..................................................................................................................... 35 
SQL – Linguagem de Manipulação de Dados (LMD) ........................................................................... 37 
SQL Server– Procedures ............................................................................................................... 41 
SQL Server– Anexos ..................................................................................................................... 43 
 
3 
SQL Server - Arquitectura Cliente/Servidor 
 
 
 Microsoft® SQL Server™ foi desenhado para ser um sistema Cliente/Servidor: 
 
- A Base de Dados pode residir num único computador, conhecido como Servidor, e assim está 
garantida a partilha dos dados por múltiplos utilizadores; 
 
Figura 1. 
 
4 
 
SQL Server - Arquitectura da Base de Dados 
 
 
Figura 2. 
 
 Podem existir múltiplas Bases de dados; 
 O SQL Server tem quatro bases de dados de sistema (master, model, tempdb, and msdb); 
 
5 
SQL Server - Arquitectura da Base de Dados (Continuação) 
 
Bases de Dados de Sistema: 
Microsoft® SQL Server™ tem quatro bases de dados de sistema: 
 
 Master , regista: 
- todas as contas e as configurações do sistema. 
- a existência de todas as outras bases de dados e a localização dos ficheiros primários que contêm a informação de 
inicialização para as bases de dados dos utilizadores. 
- A informação de inicialização do SQL Server . 
 
 Tempdb: 
- Regista toda a informação temporária. 
- É recriada sempre que o SQL Server é iniciado. 
- Todas as tabelas temporárias são eliminadas sempre que é terminada a ligação. 
- A base de dados cresce de acordo com as necessidades. 
 
 Model : 
- É usada como um modelo para todas as bases de dados criadas no sistema. 
- Quando a instrução CREATE DATABASE é usada, a primeira parte da nova base de dados é criada copiando o 
conteúdo da base de dados model, o resto da base de dados é preenchida com páginas em brando. 
 
 Msdb: 
- É usada para escalonar sinais de alerta e trabalhos. 
 
6 
SQL Server - Arquitectura da Base de Dados (Continuação) 
 
 No SQL Server 7.0, todas as bases de dados, incluindo as bases de dados de sistema, têm o seu próprio conjunto de 
ficheiros, que não são partilhados com nenhuma outra base de dados. A localização por defeito dos referidos ficheiros é 
C:\Mssql7\Data directory: 
 
Ficheiro da Base de 
dados 
Nome físico do 
Ficheiro 
Tamanho por defeito 
Master primary data Master.mdf 7.5 MB 
Master log Mastlog.ldf 1.0 MB 
tempdb primary data Tempdb.mdf 8.0 MB 
tempdb log Templog.ldf 0.5 MB 
model primary data Model.mdf 0.75 MB 
model log Modellog.ldf 0.75 MB 
msdb primary data Msdbdata.mdf 3.5 MB 
msdb log Msdblog.ldf 0.75 MB 
 
 Cada base de dados no SQL Server contém tabelas de sistema que regista os dados necessários aos componentes do SQL 
Server. 
 Os utilizadores não podem alterar directamente a informação das tabelas de sistema. 
 Existe um conjunto de ferramentas que permitem aos utilizadores administrar o seu sistema. 
 
7 
 Podem ser utilizados utilitários de administração tais como SQL Server Enterprise Manager, para administrar directamente 
o sistema. 
 Os Programadores construindo scripts em Transact-SQL e procedures conseguem garantir todas as funções 
administrativas do seu sistema. 
 Não são suportados triggers definidos nas tabelas de sistema; podem alterar o funcionamento do mesmo. 
 
8 
SQL Server - Arquitectura da Base de Dados – Continuação 
 
 
 
Figura 3. 
 
 
 SQL Server permite o acesso de múltiplos utilizadores a trabalhar em diferentes bases de dados ao mesmo tempo; 
 Quando um utilizador estabelece uma ligação, fica associado a uma base de dados específica no servidor, chamada de 
base de dados corrente; 
 Cada utilizador pode comutar entre diferentes bases de dados recorrendo ao Transact-SQL USE database_name ; 
 
9 
SQL Server - SQL Server Enterprise Manager. 
 
 As aplicações em SQL Server são construídas de acordo com uma importante hierarquia chamada SQL Distributed Management 
Framework ( SQL-DMF ). 
 
- No primeiro nível estão comandos em Transact-SQL. Transact-SQL é uma versão Microsoft do SQL standard. 
- Tudo no SQL Server pode ser feito através de comandos em texto simples ( se souber o que está a fazer…). 
- O segundo nível é um conjunto de objectos de gestão da base de dados que invocam comandos Transact-SQL. 
- No topo da hierarquia está o SQL Server Enterprise manager. 
 
O SQL Server Enterprise Manager é uma ferramenta gráfica que permite efectuar a gestão do universo SQL Server: 
 
- Configurar servidores. 
- Criar e gerir devices. 
- Criar e gerir bases de dados. 
- Fazer cópias de segurança e restaurar bases de dados. 
- Criar, modificar e eliminar objectos. 
- Gerir utilizadores da base de dados. 
- Executar queries. 
- Configurar e modificar tarefas automáticas. 
- Controlar replicação entre servidores. 
- ... 
 
10 
- SQL Server - SQL Server Enterprise Manager (Continuação). 
 
11 Figura 4. 
 
12 
SQL Server - Criar uma base de dados 
 
 No SQL Server, os dados são armazenados em bases de dados e organizados em componentes lógicos visíveis para os utilizadores. 
 Uma base de dados é implementada fisicamente em dois ou mais ficheiros em disco. 
 Existem dois componentes que compõemum sistema cliente/servidor de bases de dados: programas que proporcionam aos utilizadores o 
acesso aos dados (cliente), e a estrutura que permite gerir os dados (servidor). 
 Criar uma base de dados no SQL Server significa planear, criar e gerir um conjunto de componentes que se relacionam: 
 
 Base de Dados - Contém os objectos usados para representar, gerir e aceder aos dados. 
 CREATE DATABASE 
 Tabelas - Armazenam linhas de dados e definem relações entre múltiplas tabelas. 
 CREATE TABLE 
 Diagramas- Representam graficamente os objectos da base de dados. 
 Índices - Optimizam a velocidade de acesso aos dados de uma tabela. 
 CREATE INDEX 
 Vistas - Proporcionam uma maneira alternativa de visualizar os dados em uma ou mais tabelas. 
 CREATE VIEW 
 Stored Procedures - Programas em Transact-SQL que definem regras de negócio, tarefas, e processos no servidor. 
 CREATE PROCEDURE 
 Triggers - São tipos especiais de Stored Procedures que só são executados quando os dados de uma tabela são 
alterados. 
 CREATE TRIGGER 
 Full-Text Indexes - Facilitam a consulta em dados armazenados em colunas do tipo texto (varchar, text). 
 
13 
SQL Server - Criar uma base de dados (Continuação) 
 
 SQL Server executa a instrução CREATE DATABASE em dois passos: 
 
1. SQL Server usa uma cópia da base de dados model para inicializar a nova base de dados. 
 
2. SQL Server preenche o resto da base de dados com páginas vazias. 
 
 
 Existem três tipos de ficheiros para armazenar uma base de dados: 
 
 O Ficheiro primário, que contém a informação de inicialização da base de dados e também pode ser usado para armazenar 
dados; Todas as bases de dados têm obrigatoriamente um Ficheiro Primário. 
 
 Ficheiro Secundário, usado para armazenar os dados que não cabem no ficheiro primário. Uma base de dados não precisa do 
ficheiro secundário se o ficheiro primário tiver capacidade suficientemente. Por outro lado pode-se usar múltiplos ficheiros 
secundários, eventualmente, dispersos por várias unidades de disco. 
 
 Ficheiros de LOG, que armazenam informação necessária à recuperação da base de dados. Tem que existir pelo menos um 
ficheiro de LOG. O tamanho mínimo para um ficheiro de LOG é de 512K. 
 
Tipo de Ficheiro Extensões 
Ficheiro primário .mdf 
Ficheiro secundário .ndf 
Ficheiro de Log .ldf 
 
 
14 
 
 
SQL Server - Criar uma base de dados 
Syntax 
CREATE DATABASE database_name 
 
/* Define o Ficheiro primário, se não se colocar esta primitiva, o primeiro ficheiro especificado é assumido como primário*/ 
[ ON [PRIMARY] 
[ <filespec> [,...n] ] 
] 
/* Para especificar o ficheiro de LOG, se nada for dito é criado um ficheiro de LOG com uma capacidade de 25% do total dos 
tamanhos de todos os ficheiros da base de dados*/ 
 
[ LOG ON { <filespec> } ] 
/* Primitivas usadas por questões de compatibilidade com versões anteriores do SQL Server*/ 
[ FOR LOAD | FOR ATTACH ] 
<filespec> ::= 
( [ NAME = logical_file_name, ] 
FILENAME = 'os_file_name' 
[, SIZE = size] 
[, MAXSIZE = { max_size | UNLIMITED } ] 
[, FILEGROWTH = growth_increment] ) [,...n] 
 
 
15 
SQL Server - Criar uma base de dados (Exemplo) 
 
 
 Este conteúdo faz parte de um ficheiro de script, do tipo texto que deve ser armazenado com extensão .SQL. 
 
 
/* Tem-se que utilizar sempre a base de dados Master*/ 
/* pois esta é que guarda toda a informação relativa à existência de todas as bases de dados do sistema*/ 
 
USE MASTER 
/* Elimina a Base de Dados com o nome MJS_BD1 */ 
DROP DATABASE MJS_BD1 
/* Esta instrução dá ordem de execução*/ 
GO 
 
CREATE DATABASE mjs_bd1 
ON 
/* Nome da base de dados*/ 
( NAME = exerc1, 
 
FILENAME = 'c:\mssql7\mjsbd1.mdf', 
/* Especifica o tamanho do ficheiro em MB*/ 
SIZE = 2, 
/* Especifica o tamanho máximo, em MB, que o ficheiro mjsbd1.mdf pode tomar, se se colocar o sufixo UNLIMITED o ficheiro 
pode crescer até o disco ficar cheio*/ 
 
16 
MAXSIZE = 8, 
/* Tamanho acrescentado ao ficheiro sempre que novo espaço é necessário, podem ser usados os sufixos KB, MB ou %, por 
defeito é MB*/ 
FILEGROWTH = 20% ) 
GO 
 
17 
SQL Server - Criar uma base de dados (Outro Exemplo) 
 
USE master 
GO 
CREATE DATABASE Archive 
ON 
PRIMARY ( NAME = Arch1, 
FILENAME = 'c:\mssql7\data\archdat1.mdf', 
SIZE = 100MB, 
MAXSIZE = 200, 
FILEGROWTH = 20), 
( NAME = Arch2, 
FILENAME = 'c:\mssql7\data\archdat2.ndf', 
SIZE = 100MB, 
MAXSIZE = 200, 
FILEGROWTH = 20), 
( NAME = Arch3, 
FILENAME = 'c:\mssql7\data\archdat3.ndf', 
SIZE = 100MB, 
MAXSIZE = 200, 
FILEGROWTH = 20) 
LOG ON 
( NAME = Archlog1, 
FILENAME = 'c:\mssql7\data\archlog1.ldf', 
SIZE = 100MB, 
MAXSIZE = 200, 
FILEGROWTH = 20), 
( NAME = Archlog2, 
FILENAME = 'c:\mssql7\data\archlog2.ldf', 
SIZE = 100MB, 
 
18 
MAXSIZE = 200, 
FILEGROWTH = 20) 
GO 
 
19 
SQL Server - Criar uma tabela 
 
Tipos de Dados: 
 
Data e Hora: 
- datetime - para armazenar datas desde Janeiro 1, 1753, a Dezembro 31, 9999 
- smalldatetime – para armazenar datas desde Janeiro 1, 1900, a Junho 6, 2079 
Binários: 
- varbinary 
- binary 
Texto: 
- char - até 8K, um nº fixo de caracteres. 
- varchar - até 8K, admite que em cada linha possa existir um nº variável de caracteres 
- text - superior a 8K 
Numéricos: 
- int - 4 bytes para representar um número 
- smallint - 2 bytes 
- tinyint - 1 byte, de 0 a 256. 
- decimal ou numeric 
- float 
- real 
Monetários: 
- money 
- smallmoney 
 
Especiais: 
- bit - Valores booleanos 0 ou 1. 
 
 
20 
SQL Server - Criar uma tabela 
 
CREATE TABLE <nome da relação> (<lista de nomes e tipos de dados>) 
 
Exemplo 
 
/* Usa esta base de dados, pois é nela que vai criar a tabela*/ 
use mjs_bd1 
 
create table unidade 
( 
 codun tinyint not null, 
 descricao char(20), 
 
 /* Inicio da definição das restrições de integridade, PRIMARY KEY, FOREIGN KEY, CHECK, UNIQUE */ 
 constraint pk_unidade primary key(codun) 
) 
 
Apagar uma relação: 
 
DROP TABLE <relação>; 
 
Alterar esquemas de uma relação: 
 
Exemplos: 
 ALTER TABLE actor ADD telefone CHAR(16); 
 ALTER TABLE actor DROP nascimento; 
 
21 
Restrições de Integridade de Gatilhos 
 
 
 Restrições de Chave 
 Restrições de Integridade Referencial 
 Restrições Baseadas em Atributos 
 Restrições Baseadas em Tuplos 
 Gatilhos SQL3 
 Asserções SQL3 – (Não são suportadas pelo SQL-Server) 
 
 
 
 
 Restrições (constraints) e gatilhos (Triggers) são elementos activos da BD; 
 Expressões ou comandos que são escritos uma vez e guardados na BD e serão executados como resposta a certos 
eventos; 
 São testadas sempre que há modificações nas relações envolvidas 
 
22 
Restrições de Chaves 
 
 Fazem parte da instrução CREATE TABLE 
 São especificadas usando a primitiva PRIMARY KEY 
 
CREATE TABLE ACTOR(NOME CHAR(30) PRIMARY KEY, ....); 
CREATE TABLE FILME(TITULO CHAR(30), ANO NUMBER(4), 
 PRIMARY KEY(TITULO, ANO)); 
 Chaves também podem ser especificadas utilizando a primitiva UNIQUE 
 Podem existir várias declarações UNIQUE mas só uma chave primária 
 Ao definir-se um determinado conjunto de campos como chave primária, estamos a especificar que 
estes campos não admitem valores nulos e não podem existir valores repetidos. 
 Com a primitiva UNIQUE deixa-se em aberto a possibilidade de existirem valores nulos 
 Pode-se proibir a existência de valores nulos para atributos, com recurso à primitiva NOT NULL. 
 
23 
Restrições de Integridade Referencial 
 
 Chaves estrangeiras fazem sentido para obrigardeterminados atributos a receberem valores que fazem 
parte da chave primária de uma relação referenciada 
 Quando a chave externa possui somente um atributo pode-se utilizar a primitiva REFERENCES 
<tabela>(<atributo>) 
 Para um ou mais atributos utiliza-se a primitiva FOREIGN KEY (<atributos>) REFERENCES 
<tabela>(<atributos>) 
 Exemplo 
 
CREATE TABLE PARTICIPA( 
 FILME CHAR(50), 
 ANO NUMBER(4), 
 ACTOR CHAR(30) REFERENCES ACTOR(NOME), 
 SALARIO DECIMAL(9,2), 
 FOREIGN KEY (FILME, ANO) REFERENCES FILME(FILME, ANO) 
); 
 
24 
Restrições Baseadas em Atributos 
 
 Os valores permitidos para os atributos podem ser restritos com recurso à primitiva CHECK <condição> 
 A verificação da restrição é associada apenas ao atributo em questão. 
 Exemplos 
 
SEXO CHAR(1) CHECK (SEXO IN („F‟, „M‟)), 
PRESIDENTE INT CHECK (PRESIDENTE IN (SELECT PRES FROM EXECUTIVO)), 
 
Não é equivalente a uma restrição de integridade referencial pois a restrição de integridade é apenas verificada para o atributo em questão. Por 
exemplo, se alterar o código do presidente na tabela Presidente, com a instrução CHECK não dá erro. 
 
 
 
25 
Nomes das Restrições de Integridade 
 
 
 Para se efectuar a manutenção de uma restrição de integridade esta deve ter nome 
 
NOME CHAR(30) CONSTRAINT PK_AUTOR PRIMARY KEY 
SEXO CHAR(1) CONSTRAINT CK_SEXO CHECK (SEXO IN („F‟, „M‟)) 
CONSTRAINT FK_PARTICIPA FOREIGN KEY (FILME, ANO) REFERENCES FILME(TITULO, ANO) 
 
 Restrições podem ser apagadas com a primitiva ALTER TABLE ....DROP .... 
ALTER TABLE ACTOR DROP CONSTRAINT PK_ACTOR; 
 
 Restrições podem ser adicionadas com a primitiva ALTER TABLE ....ADD .... 
ALTER TABLE ACTOR ADD CONSTRAINT PK_ACTOR PRIMARY KEY(NOME); 
 
26 
Gatilhos em SQL3 
 
 
 
 São regras Event-Condition-Action (ECA) 
 A acção pode ser executada antes, depois ou em vez do evento que a dispara 
 A acção pode referir-se a valores novos ou aos antigos dos tuplos inseridos, modificados ou apagados no evento que a 
dispara 
 Eventos de modificação podem especificar um atributo ou um conjunto de atributos 
 Uma condição pode ser especificada por uma cláusula WHEN e a execução da acção só tem lugar se a regra é disparada e a 
condição é verdadeira quando o evento ocorre 
 
27 
Gatilhos em SQL3 – Continuação 
 
 EXECUÇÃO da ACÇÃO 
 
 AFTER – WHEN testado depois de executada a operação associada ao evento 
 BEFORE - WHEN testado antes de ser executada a operação associada ao evento 
 INSTEAD OF - a(s) acção(ões) associada(s) ao trigger são executadas caso se verifique a condição WHEN, e a 
operação associada ao evento nunca é executada. 
 
 
 EVENTOS DE DISPARO 
 
 UPDATE 
 INSERT 
 DELETE 
 
 A acção do trigger pode conter várias instruções em SQL separadas por vírgulas 
 A execução da referida acção pode ser por cada tuplo (FOR EACH ROW) ou uma única vez. 
 
28 
Gatilhos em SQL3 – Continuação 
 
EXEMPLO 
 
Pretendemos criar um trigger que impeça a subida da média dos salários dos executivos para além de 50000. 
 
CREATE TRIGGER MEDIASALTRIGGER 
INSTEAD OF UPDATE OF SALARIO ON EXECUTIVO 
REFERENCING 
 OLDTABLE AS VELHOS, 
 NEWTABLE AS NOVOS 
WHEN (50000<=(SELECT AVG(SALARIO) 
 FROM (( EXECUTIVO EXCEPT VELHOS) UNION NOVOS) 
 ) 
 ) 
DELETE FROM EXECUTIVO WHERE (CERTIFICADO, NOME, MORADA, SALÁRIO) IN VELHOS; 
INSERT INTO EXECUTIVO (SELECT * FROM NOVOS); 
 
29 
Gatilhos em SQL-Server 
Para garantir a mesma funcionalidade do trigger supra definido em SQL3 utilizaria a seguinte sintaxe em SQL-Server: 
 
 
use master 
go 
use mjs_bd1 
go 
drop trigger mediasaltrigger 
go 
 
CREATE TRIGGER MEDIASALTRIGGER ON EXECUTIVO for UPDATE, insert /*Este trigger responde aos eventos de update e insert*/ 
as 
declare @media numeric /* Declaração de uma variável local (o nome da variável tem que ser sempre precedida de @*/ 
select @media=avg(salário) from executivo 
 
if (select avg(salário) from executivo)>=5000 /* Equivalente à condição WHEN*/ 
begin 
 print 'vai passear' /*Visualiza uma mensagem no ecrã*/ 
 
 (select * from inserted where exists /* Estas instruções estão a mais só para fazer referência aos tuplos que foram 
inseridos ou actualizados na tebela*/ 
/* Para fazer referência aos tuplos anteriores seria com deleted*/ 
 (select * from EXECUTIVO)) 
 
 rollback /* Esta instrução permite repor a instância anterior*/ 
end 
GO 
 
30 
Gatilhos em SQL-Server - Continuação 
 
Outras instruções que podem ser usadas na acção de um trigger: 
 BEGIN TRANSACTION – INICIA UMA TRANSACÇÃO QUE DEPOIS PODERÁ SER CONCRETIZADA COM A INSTRUÇÃO 
COMMIT TRANSACTION OU NÃO, COM RECURSO À INSTRUÇÃO ROLLBACK; 
 BEGIN....END – CINSCUNSCREVE UMA INSTRUÇÃO COMPOSTA 
 IF....ELSE 
 WHILE... 
 UPDATE(CAMPO) – DETERMINA SE FOI EFECTUADA UMA OPERAÇÃO DE UPDATE SOBRE O CAMPO 
ESPECIFICADO. 
 
 INSERTED – TABELA QUE CONTÉM OS NOVOS TUPLOS DEPOIS DA ALTERAÇÃO POR PARTE DO EVENTO 
QUE ACTIVOU O TRIGGER; 
 DELETED – TABELA QUE OS TUPLOS COM A INSTÂNCIA ANTERIOR À EXECUÇÃO DO EVENTO QUE 
ACTIVOU O TRIGGER 
 
31 
Índices 
 
 Um índice visa tornar mais eficiente a pesquisa de dados cujo critério de selecção envolva um determinado campo. 
 A decisão de usar ou não um índice cabe ao projectista da base de dados, tendo em consideração: 
- melhora muito o desempenho na obtenção de respostas para perguntas envolvendo os atributos especificados no 
índice; 
- torna mais demoradas as inserções, eliminações e alterações de tuplos da relação. Pois tem que proceder à 
reordenação do índice. 
 
 Criação de índices. 
 
CREATE INDEX INDICEANO ON FILME(ANO); 
CREATE INDEX INDICECHAVE ON FILME(TITULO, ANO); 
 
 Eliminar um índice. 
 
DROP INDEX INDICEANO; 
 
32 
Vistas 
 
 Vistas são relações lógicas, sem existência física ao nível da unidade de disco. 
 Relações com existência física são vulgarmente identificadas por tabelas. 
 Criação de Vistas: 
CREATE VIEW <NOME> AS <DEFINIÇÃO>; 
 Exemplos: 
 
CREATE VIEW FILMESPARAMOUNT AS 
 SELECT TITULO, ANO 
 FROM FILME 
 WHERE ESTUDIO=‟PARAMOUNT‟; 
Criou uma vista com o nome “FilmesParamount”, que, posteriormente, pode ser usada tal como se fosse uma 
tabela. Exemplo: 
 
SELECT TITULO 
FROM FILMESPARAMOUNT 
WHERE ANO=1979; 
 
33 
Vistas - continuação 
 
Vistas Modificáveis. 
Uma vista é modificável se: 
- a cláusula WHERE não incluir nenhuma sub-pergunta; 
- os atributos especificados na cláusula SELECT da vista forem suficientes por forma a permitir que os restantes 
atributos possam ficar com valor NULL ou um valor por omissão na tabela base. 
Nota: As operações de inserção, alteração e eliminação efectuadas sobre uma vista podem ser transpostas para a tabela 
física, desde que os pressupostos anteriormente referidos sejam salvaguardados. 
 
Exemplo: 
 Tendo em consideração a relação actor(codigo, nome, nacionalidade): 
 
 CREATE VIEW TESTE1 AS 
 SELECT CODIGO, NOME 
 FROM ACTOR; 
Esta vista poderá ser modificável, desde que o 
campo nacionalidade da tabela física actor, 
admita valores nulos ou um determinado valor 
por defeito, caso contrário, teríamos que incluir o 
campo “nacionalidade” na cláusula SELECT 
 
34 
Vistas - continuação 
 
Manipulação de Vistas: 
 
- Remoções 
 
DELETE FROM FILMESPARAMOUNT 
WHERE TITULO LIKE „%TREK%‟; 
 Nota: Os caracteres % significam que a cadeia de caracteres pode ter qualquer sequência antes e depois da string 
“TREK”. 
 
- Modificações 
 
UPDATE FILMESPARAMOUNTSET ANO=1979 WHERE TITULO LIKE „%TREK%‟; 
 
- Remover uma vista 
 
DROP VIEW FILMESPARAMOUNT; 
 
35 
Vistas e Segurança 
 
 Vistas podem ser usadas para apresentar a informação necessária, escondendo detalhes das tabelas base 
 Comandos GRANT e REVOKE podem ser usados para controlar acessos a tabelas base e vistas. 
 Em conjunto com a possibilidade de definir vistas, proporciona uma mecanismo poderoso de controlo de acessos. 
 A segurança pode chegar até ao nível do campo 
 Criar uma vista que devolve um campo de apenas um tuplo 
 Permitir o acesso (GRANT) a essa vista. 
 
Exemplos: 
 
 GRANT INSERT, SELECT ON ACTOR TO CRAMOS; 
CRAMOS pode inserir e consultar tuplos da tabela ACTOR. 
 
 GRANT DELETE ON ACTOR TO RAMOS WITH GRANT OPTION; 
RAMOS pode apagar tuplos da tabela ACTOR e autorizar outros a fazer o mesmo. 
 
36 
 
Vistas e Segurança - Continuação 
 
 
 GRANT UPDATE (SALARIO) ON EXECUTIVO TO AVENTURA; 
AVENTURA pode modificar o campo SALARIO da tabela EXECUTIVO. 
 
 GRANT SELECT ON ACTOR TO CRAMOS, AVENTURA; 
CRAMOS e AVENTURA podem consultar tuplos da tabela ACTOR. 
 
 REVOKE SELECT ON ACTOR FROM CRAMOS, AVENTURA; 
Retira privilégios de consulta a CRAMOS e AVENTURA sobre a tabela ACTOR. 
 
 
37 
SQL – Linguagem de Manipulação de Dados (LMD) 
 
 
Tendo como base as relações: 
 actor(codigo, nome, nacionalidade) 
 filme(codigo, titulo, ano, realizador) 
 realizador(cod, nome, nacionalidade) 
 actor_filme(filme, actor) 
 
 Seleccionar Tuplos de uma ou mais relações: 
 
SELECT <ATRIBUTOS> 
FROM <RELAÇÕES> 
WHERE <CONDIÇÃO> 
ORDER BY <ATRIBUTOS> 
Operadores de comparação: 
 =; <>; >; >=; <=; < 
 
Operadores aritméticos: 
 +; -; *; / 
 
Operadores lógicos: 
 AND; OR; NOT 
 
38 
SQL – Linguagem de Manipulação de Dados (LMD) 
 
EXEMPLOS: 
 
Seleccionar o nome e a nacionalidade de todos os actores, ordenados pelo nome dos actores 
 
 SELECT NOME, NACIONALIDADE 
 FROM ACTOR 
 ORDER BY NOME; 
 
Seleccionar todos os atributos dos actores residentes nos EUA 
 
 SELECT * 
 FROM ACTOR 
 WHERE NACIONALIDADE LIKE „EUA‟; 
 
 
39 
SQL – Linguagem de Manipulação de Dados (LMD) 
 
Seleccionar o nome do realizador do filme com o código 1. (Temos que fazer a junção de tabelas) 
 
 SELECT REALIZADOR.NOME 
 FROM FILME, REALIZADOR 
 WHERE (FILME.REALIZADOR=REALIZADOR.CODIGO AND 
 FILME.CODIGO=1); 
 
 Inserir tuplos numa relação 
Exemplos: 
INSERT INTO ACTOR(CODIGO,NOME,NACIONALIDADE) VALUES (4,‟NICOLE‟,‟EUA‟); 
INSERT INTO EXECUTIVO SELECT * FROM EMPREGADO; -> Esta instrução é legítima em casos em que o nº de campos e tipos 
de dados são compatíveis entre a origem e o destino. 
 Eliminar tuplos de uma relação 
Exemplos: 
 Eliminar o actor cujo codigo é igual a 1. 
 DELETE FROM ACTOR WHERE CODIGO=1; 
 
40 
SQL – Linguagem de Manipulação de Dados (LMD) 
 
 Alterar tuplos de uma relação 
 
Pretende-se que os actores cuja nacionalidade é „EUA‟ passe a ser „AMERICANA‟. 
 
UPDATE ACTOR SET NACIONALIDADE=’AMERICANA’ 
 WHERE NACIONALIDADE LIKE ‘EUA’; 
 
 Operações com conjuntos 
 
INTERSEPT - Intersecção (No SQL-Server é com EXISTS) 
EXCEPT - Diferença (No SQL-Server é com NOT EXISTS) 
UNION - União (Reunião) 
 
PROFESSOR EXECUTIVO 
 
Codigo Nome Codigo Nome 
1 Carlos 1 Carlos 
2 Rui Marteleiro 3 Ana Rita 
3 Ana Rita 4 Ricardo Baba 
 
41 
SQL – Linguagem de Manipulação de Dados (LMD) 
 
Exemplos 
 
(SELECT * FROM PROFESSOR) 
UNION 
(SELECT * FROM EXECUTIVO); 
 
Codigo Nome 
1 Carlos 
2 Rui Marteleiro 
3 Ana Rita 
4 Ricardo Baba 
 
(SELECT * FROM PROFESSOR) 
EXCEPT 
(SELECT * FROM EXECUTIVO); 
 
Codigo Nome 
2 Rui Marteleiro 
 
(SELECT * FROM PROFESSOR) 
INTERSEPT 
(SELECT * FROM EXECUTIVO); 
 
SQL-SERVER: 
(SELECT * FROM PROFESSOR WHERE NOT EXISTS 
(SELECT * FROM EXECUTIVO)); 
 
SQL-SERVER: 
(SELECT * FROM PROFESSOR WHERE EXISTS 
(SELECT * FROM EXECUTIVO)); 
 
 
42 
Codigo Nome 
1 Carlos 
3 Ana Rita 
 
 
43 
SQL – Linguagem de Manipulação de Dados (LMD) 
 
 
 
 Operações de Agregação 
 
São operações efectuadas sobre conjuntos de tuplos. Estas pode ser: 
 
AVG(<atributo>) - Média dos valores do atributo especificado 
MAX(<atributo>) - Máximo dos valores do atributo especificado 
MIN(<atributo>) - Mínimo dos valores do atributo especificado 
SUM(<atributo>) - Somatório dos valores do atributo especificado 
COUNT(*) - Conta o número de tuplos daquele conjunto 
 
EXEMPLOS: 
 
Número de actores que tenho na minha base de dados. 
 
 SELECT COUNT(*) 
 FROM ACTOR; 
 
Número de actores de cada país. 
 
 SELECT COUNT(*) 
 FROM ACTOR 
 GROUP BY NACIONALIDADE; 
 
 
44 
SQL – Linguagem de Manipulação de Dados (LMD) 
 
 
Número de actores dos EUA 
 
 SELECT COUNT(*) 
 FROM ACTOR 
 WHERE NACIONALIDADE LIKE „EUA‟ 
 GROUP BY NACIONALIDADE; 
 
Titulo do filme mais antigo realizado por um realizador português. 
 
 SELECT MIN(ANO), TITULO 
 FROM FILME, REALIZADOR 
 WHERE (FILME.REALIZADOR=REALIZADOR.COD AND REALIZADOR.NACIONALIDADE LIKE „PORTUGUESA‟) 
 GROUP BY FILME.REALIZADOR; 
 
 Escolha dos Grupos, com recurso à cláusula HAVING 
 
A escolha dos grupos pode ser baseada numa propriedade de agregação do grupo 
HAVING <condição> 
 
Exemplo 
 Actor(nome, morada, sexo, nascimento) 
 Filme(titulo, ano, duracao, a_cores, estudio, produtor) 
 Participa(filme, ano, actor, salario) 
 Estudio(nome, morada, presidente) 
 Executivo(#certificado, nome, morada, salario) 
 
45 
SQL – Linguagem de Manipulação de Dados (LMD) 
 
 
 
 Qual a soma das durações dos filmes produzidos por um produtor que produziu pelo menos um filme antes de 1930? 
 
 
 SELECT NOME, SUM(DURACAO) 
 FROM EXECUTIVO, FILME 
 WHERE PRODUTOR=#CERTIFICADO 
 HAVING MIN(ANO)<1930; 
 
 
Encontrar o salário do actor com o salário mais baixo, superior a 100000, para cada ano com pelo menos 2 actores 
nessas condições. 
 
 
SELECT ANO, MIN(SALARIO) 
FROM PARTICIPA 
WHERE SALARIO>100000 
GROUP BY ANO 
HAVING COUNT(*)>1; 
 
46 
SQL Server– Procedures 
 
 Um procedimento é um conjunto de operações que são armazenadas na base de dados identificados por um nome, e 
que podem ser executados sempre que for necessário. Para além disso, um procedimento pode retornar um 
determinado valor. 
 As operações são especificadas através de instruções em SQL. 
 
Criação de uma PROCEDURE: 
 
 CREATE PROCEDURE <NOME> @<ARGUMENTO1>,@<ARGUMENTO2>,....,@<ARGUMENTON> 
 AS 
 .......... 
 [RETURN <VALOR>] 
 GO 
 
Eliminação de uma PROCEDURE: 
 
 DROP PROCEDURE <NOME> 
 
Execução de uma PROCEDURE: 
 
 DECLARE @REF INTEGER 
 EXEC @REF=<NOME> <ARGUMENTO1>,<ARGUMENTO2>,....,<ARGUMENTON> 
 GO 
 
 
 
47 
SQL Server– Procedures 
 
Mais algumas instruções....... 
 
 
 
SET @i=10; 
 
Permite atribuir um determinado valor a uma variável. 
 
RETURN 2; 
 
Retorna o valor 2 da procedure. 
 
PRINT ‘Mensagem’ 
 
Visualiza uma mensagem no ecrã. 
 
48 
SQL Server– Anexos 
 
 Nesta secção pretende-se apresentar alguns exemplos sobre os conteúdos apresentados anteriormente. 
 Os exemplos apresentados basearam-se no esquema relacional apresentado na página 39 da presente documentação. 
 
 Trigger’s: 
 
 Criar um trigger que impeça a possibilidade de um actor participar em mais do que 4 filmes e auferir um salário médio superior a 
500000 
 
drop trigger exemplo1 
go 
 
create trigger exemplo1 on participa for insert, update 
as 
 declare@actor int 
 select @actor=count(*) from participa order by actor having avg(salario)>500000 
 if @actor>4 
 begin 
 rollback 
 end 
 else 
 begin 
 print „ Inserção Sucedida!‟ 
 end 
go 
 
 
49 
SQL Server– Anexos(Continuação) 
 
Cursores: 
 
 Um cursor é uma relação virtual, decorrente de uma instrução em SQL. 
 
 EXEMPLO: 
 
/* Cria o cursor*/ 
declare actores cursor for select * from actor 
 
/* Abre o cursor*/ 
open actores 
/* Percorre o cursor*/ 
while @@fetch_status=0 
begin 
 /* Avança para o próximo tuplo*/ 
 fetch next from actores 
end 
/* Fecha o cursor*/ 
close actores 
/*Elimina o cursor da memória */ 
deallocate actores 
 
 declare @CustId nchar(5) 
 declare @CustName varchar(50) 
 declare @RowNum int 
 declare CustList cursor for 
 select top 5 CustomerID,CustomerName from Northwind.dbo.Customers 
 OPEN CustList 
 FETCH NEXT FROM CustList 
 INTO @CustId,@CustName 
 set @RowNum = 0 
 WHILE @@FETCH_STATUS = 0 
 BEGIN 
 set @RowNum = @RowNum + 1 
 print cast(@RowNum as char(1)) + ' ' + @CustId + „ „ + @CustName 
 FETCH NEXT FROM CustList 
 INTO @CustId,@CustName 
 END 
 CLOSE CustList 
 DEALLOCATE CustList 
 
 
50 
SQL Server– Anexos(Continuação) 
 
Procedimentos: 
 
Criar um procedimento que permita determinar a média do salário de um determinado empregado cujo código é 
passado como argumento. 
 
create procedure media_sal @num integer as 
 declare @media real 
set @media=select avg(salario) from participa where actor=@num group by actor 
 return media 
go 
 
NOTA: 
 
Podem-se definir argumentos para como OUTPUT, assim, podem receber valores que poderão ser lidos fora do 
procedimento. Exemplo: 
 
create procedure media_sal @num integer, @resultado output as 
 declare @media real 
set @media=select avg(salario) from participa where actor=@num group by actor 
 return media 
go 
 
Invocação: 
 
 
51 
declare @sal real 
set @sal=0 
execute up_PComp c, @sal output 
print @sal 
GO

Continue navegando