Sei sulla pagina 1di 43

Curso:

A linguagem SQL (Structured Query


Language) e a sua utilização
pedagógica – Sessão Nº 4

Carla Mansilha
carla.mansilha@gmail.com
Objetivos da Sessão
• A Clausula LIMIT
• O Operador CASE

• Stored Procedures e Functions

• Views

• Eventos Temporais

• DCL - Linguagem de Controle de Dados


• Comandos GRANT e REVOKE
ÚLTIMA
• DTL - Linguagem de Transação de Dados SESSÃO
• Comandos GRANT, REVOKEBEGIN WORK (ou START
TRANSACTION, dependendo do dialeto SQL), COMMIT e
ROLLBACK
LIMIT
SQL - LIMIT
• A cláusula LIMIT é utilizada para limitar o número de registos
que um comando SELECT devolve. Pode ter 1 ou 2
argumentos.

• SELECT * FROM alunos LIMIT 3; (devolve os 3 primeiros


registos da tabela alunos)

• SELECT * FROM alunos LIMIT 2, 3; (devolve na mesma 3


registos MAS a partir do 2 (exclusivo))
CASE
SQL - CASE

• O operador CASE pode ser utilizado num comando feito


diretamente à Base de Dados (por ex: para efetuar cálculos) e
também nas “Stored Procedures” conjuntamente com o
comando SELECT.
SQL - CASE
• SINTAXE

CASE

WHEN [condition] THEN result

[WHEN [condition] THEN result ...]

[ELSE result]

END
SQL – CASE - Exemplo
• SITUAÇÃO:

• Considerando uma tabela com todos alunos do 6º ano,


imaginem que o objetivo era contabilizar e agrupar os alunos
com base na idade, verificando os que nunca reprovaram
(teriam 12 ou menos anos), os que têm uma reprovação (13
anos), múltiplas reprovações ( mais de 13 MAS menos de 15) e
finalmente os candidatos ao “Ensino Vocacional”.
SQL – CASE - Exemplo
• EXEMPLO:
SELECT count(*) total,

CASE

WHEN idade <=12 then "Sem reprovações"

WHEN idade = 13 then "Com 1 reprovação"

WHEN idade > 13 AND idade < 15 then "Múltiplas reprovações"

ELSE "Candidato a Vocacional"

END AS "Tipo_aluno"

FROM `alunos` GROUP BY tipo_aluno ORDER BY total;


SQL – CASE – Exemplo 2
• EXEMPLO: Quantificar o estado das nossas encomendas:
PROCEDURES
SQL - PROCEDURES
• Procedures são um conjunto de comandos SQL armazenados
na de Base de dados. Encapsula tarefas repetitivas, aceita
parâmetros de entrada e retorna um valor de estado (para
indicar aceitação ou falha na execução). O procedimento
armazenado pode reduzir o tráfego na rede, visto que os
comandos são executados diretamente no servidor. Além de
melhorar a performance, criar mecanismos de segurança na
manipulação dos dados da Base de Dados.
SQL - PROCEDURES
• Temos Procedures com parâmetros de 3 tipos:
• De Entrada – IN (valor Default se não for indicado, implica que a sua
chamada tem passar um argumento cujo valor se mantém inalterado).

• De Saída – OUT (o valor de um parâmetro OUT pode ser alterado


dentro da Procedure e seu novo valor é passado de volta para o
programa de chamada).

• De Entrada/Saída – INOUT (é a combinação de parâmetro IN e OUT


parâmetro, o que significa que o programa de chamada pode passar o
argumento, e a Procedure pode modificar o parâmetro e passar o novo
valor de volta para o programa de chamada).
SQL - PROCEDURES
• SINTAXE:

CREATE

[DEFINER = { utilizador| CURRENT_USER }]

PROCEDURE nome_procedure ([ IN | OUT | INOUT ] nome_parametro


tipo_de_dados)

LINGUAGEM SQL

• EXEMPLO:
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `verificar_qt_minima`(INOUT `qt_ver` INT UNSIGNED)

BEGIN

SELECT * FROM produtos

where qt_stock<=qt_ver;

END $$

DELIMITER ;
SQL - PROCEDURES
• PROCEDURES DE ENTRADA: Obter dados das filiais de
um determinado país.
DELIMITER $$
CREATE PROCEDURE Obtem_filiais_por_pais(IN nome_pais VARCHAR(255))
BEGIN
SELECT *
FROM filiais
WHERE pais= nome_pais;
END $$
DELIMITER ;

Como chamar: CALL Obtem_filiais_por_pais('Portugal');


SQL - PROCEDURES
• PROCEDURES DE ENTRADA: selecionar um determinado
número de encomendas (enviando o nº pretendido).
• Como criar
DELIMITER $$
CREATE PROCEDURE Selecionar_encomendas(IN
num_encomendas INT UNSIGNED)
BEGIN
SELECT * FROM encomendas
LIMIT num_encomendas;
END $$
DELIMITER ;

Como chamar:
CALL Selecionar_encomendas (2);
SQL - PROCEDURES
• PROCEDURES DE SAÍDA: Verificar o número total de
produtos
• CRIAR:
DELIMITER $$
CREATE PROCEDURE Verificar_total_Produtos(OUT total_produtos INT)
BEGIN
SELECT COUNT(1) INTO total_produtos FROM PRODUTOS;
END $$
DELIMITER ;

Como chamar:
CALL Verificar_Quantidade_Produtos(@total);
SELECT @total;
SQL - PROCEDURES
• PROCEDURES DE SAÍDA: Verificar o número total de
encomendas
• CRIAR:
DELIMITER $$
CREATE PROCEDURE Verificar_num_encomendas(OUT total_encomendas INT)
BEGIN
SELECT COUNT(1) INTO total_encomendas FROM ENCOMENDAS;
END $$
DELIMITER ;

Como chamar:
CALL Verificar_num_encomendas(@total);
SELECT @total;
SQL - PROCEDURES
• PROCEDURES COM PARAMETROS DE ENTRADA E DE SAÍDA:
OBTER O Nº DE ENCOMENDAS (OUT) “COM DETERMINADO
ESTADO (POR EX: Enviado – IN)”
• Como criar
DELIMITER $$
CREATE PROCEDURE Conta_encomendas_por_estado(IN estado_encomenda VARCHAR(25),
OUT total_estado INT)
BEGIN
SELECT count(numero_encomenda)
INTO total_estado
FROM encomendas
WHERE estado = estado_encomenda;
END$$
DELIMITER ;
Como chamar:
CALL Conta_encomendas_por_estado('Enviado',@total_estado);
SELECT @total_estado;
SQL - PROCEDURES
• PROCEDURES DE ENTRADA/SAÍDA: incrementar em
25% o nº que determina a quantidade mínima em stock.
• Como criar
DELIMITER $$
CREATE PROCEDURE aumenta_qt_minina(INOUT numero INT)
BEGIN
SET numero = numero * 1.25;
END $$
DELIMITER ;

Como chamar:
SET @valor = 5;
CALL aumenta_qt_minina(@valor);
SELECT @valor;
SQL - PROCEDURES
• Também podem ser criadas graficamente
recorrendo ao menu rotinas:

E igualmente executadas,
eliminadas e exportado o seu
código:
SQL – PROCEDURES - DROP
• Para eliminar uma Procedure podemos usar o
comando DROP.

• SINTAXE:
• DROP PROCEDURE [IF EXISTS] nome_procedure;

• EXEMPLO:
• DROP Procedure aumenta_qt_minima
Ou fazê-lo de forma gráfica no
PhpMyAdmin clicando no Elimina
FUNCTIONS
SQL - FUNCTIONS
• FUNCTIONS são um tipo especial de procedimento que
retorna um único valor . São utilizados essencialmente para
encapsular fórmulas comuns ou de regras de negócios que são
reutilizáveis ​entre instruções SQL.
SQL - FUNCTIONS
• SINTAXE:
CREATE

[DEFINER = { user | CURRENT_USER }]

FUNCTION nome_funcao ([parametros_da_funcao [,...]])

RETURNS tipo_de_dados

LINGUAGEM SQL

CHAMADA: SELECT nome_funcao(parametros_da_funcao [,...]])

Nota:

parametros_da_funcao – refere-se ao nome dos parâmetros e ao tipo de dados.


SQL - FUNCTIONS
• EXEMPLO:
DELIMITER $$

CREATE FUNCTION verifica_tipo_cliente(limite_credito double) RETURNS VARCHAR(10)

DETERMINISTIC

BEGIN

DECLARE nivel varchar(10);

IF limite_credito > 50000 THEN

SET nivel ='ALTO';

ELSEIF (limite_credito <= 50000 AND limite_credito >= 10000) THEN

SET nivel = 'MÉDIO';

ELSEIF limite_credito < 10000 THEN

SET nivel = ‘BAIXO';

END IF;

RETURN (nivel);

END $$

DELIMITER ; CHAMADA: SELECT verifica_tipo_cliente (15000);


SQL - Functions
DELIMITER $$

CREATE FUNCTION conta_filiais_pais(nome_pais VARCHAR(50)) RETURNS INT


UNSIGNED

DETERMINISTIC

BEGIN

SELECT COUNT(*) into @total FROM filiais

WHERE pais=nome_pais;

IF ISNULL(@total) then

return 0;

else

return @total;

END IF;

END $$

DELIMITER $$
SQL – DROP FUNCTION
• SINTAXE:

DROP FUNCTION [IF EXISTS] nome_funcao;

• EXEMPLO:

DROP FUNCTION conta_filiais_pais;

Ou fazê-lo de forma gráfica no


PhpMyAdmin clicando no Elimina
VIEWS
SQL – CREATE VIEW
• As VIEWs são tabelas “virtuais” que resultam de
uma consulta aos dados armazenados nas
tabelas. Podemos agregar dados de tabelas
diferentes e efetuar cálculos sobre dados
existentes. É apenas de leitura (não é possível
nem inserir, nem alterar, nem excluir linhas).

• O “virtual” significa que ela representa uma visão


de dados e não contém dados.
SQL – CREATE VIEW
• VANTAGENS:
• Estas consultas pré-definidas ficam armazenadas.
• Podemos colocar permissões na view, ou seja,
podemos proibir acesso à tabelas e o utilizador
pode apenas ter acesso à informação da forma
como ficou definida na view. Desta forma,
controlamos melhor “o que” e “como” o utilizador
pode aceder à informação. Funciona como um
“firewall”.
SQL – CREATE VIEW
• DESVANTAGENS:
• Escondem a complexidade da query podendo
enganar o programador quanto à performance
necessária para aceder a determinada informação.
• Pode limitar exageradamente o que o utilizador
pode aceder impedindo certas tarefas.

Nota: As stored Procedures permitem mais


flexibilidade para criar algoritmos mais complexos.
SQL – CREATE VIEW
• SINTAXE:
CREATE
[OR REPLACE]
VIEW nome_da_view [(lista_de_colunas)]
AS comando_select
[WITH [CASCADED | LOCAL] CHECK OPTION]
• EXEMPLO:

CREATE VIEW calcula_custo AS SELECT quantidade, preco,


quantidade*preco AS custo FROM produtos;
SELECT * FROM calcula_custo;
SQL – CREATE VIEW
• EXEMPLO: Imaginem que queremos saber quais os
alunos que anularam a matricula:

CREATE VIEW matricula_anulada AS


SELECT nome_aluno,idade
FROM aluno
WHERE UPPER(matricula)='ANULADA';
SQL – CREATE VIEW
• Também pode ser criada em modo gráfico no PhpMyAdmin (nas
últimas versões nem sempre funcionam bem)
SQL – DROP VIEW
• SINTAXE:

DROP VIEW nome_view;

• EXEMPLO:

DROP VIEW matricula_anulada;

Ou fazê-lo de forma gráfica no


PhpMyAdmin clicando no Elimina
EVENTOS TEMPORAIS
SQL – CREATE EVENT
• Os EVENTOS são tarefas que são executadas de acordo
com um calendário (período temporal). Pode ser:
Ocorre numa data específica:
AT ‘YYYY-MM-DD HH:MM.SS’
e.g. AT ‘2011-06-01 02:00.00’
Ocorre após um determinado intervalo de tempo ter decorrido:
AT CURRENT_TIMESTAMP + INTERVAL n
[HOUR|MONTH|WEEK|DAY|MINUTE]
e.g. AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
Ocorre num intervalo específico indefinidamente:
EVERY n [HOUR|MONTH|WEEK|DAY|MINUTE]
e.g. EVERY 1 DAY
Ocorre num intervalo específico durante um período específico:
EVERY n [HOUR|MONTH|WEEK|DAY|MINUTE] STARTS date ENDS date
e.g. EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 1 WEEK
ENDS ‘2012-01-01 00:00.00’
SQL – CREATE EVENT
• SINTAXE:
CREATE EVENT `nome_evento`
ON SCHEDULE periodo
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
DO BEGIN
-- codigo do evento
END;
SQL – CREATE EVENT
• EXEMPLO:

CREATE EVENT Backup_Tabela_Encomendas


ON SCHEDULE EVERY 1 DAY STARTS '2016-05-11
02:30:00'
DO
CREATE TABLE IF NOT EXISTS
vendas_backup.encomendas SELECT * FROM
encomendas;
SQL – DROP EVENT
• SINTAXE:

DROP EVENT [IF EXISTS] nome_evento;

• EXEMPLO:

DROP EVENT Backup_Tabela_Encomendas;


SQL - Exercício
• Pretende-se que crie uma base de dados que iniciou na
sessão anterior (vídeos ou outra por si escolhida) pelo
menos:

• Uma strored procedure


• Uma function
• Uma view
• Um Evento

• Faça novamente o dumping da BD e envie o ficheiro .sql


Sessão de hoje
• Marcação da presença;

• Vídeo da sessão

• Consulta do material fornecido

• Criação da base de dados pedida e


envio do ficheiro .sql

• Em caso de dúvidas utilize o fórum para


o efeito no topo da disciplina.

Potrebbero piacerti anche