Escolar Documentos
Profissional Documentos
Cultura Documentos
Modelo Relacional
SQL
SELECT GRANT
CREATE Segurança
UPDATE REVOKE
ALTER
DELETE COMMIT
DROP Controle
INSERT ROLLBACK
SAVEPOINT transações
DML DDL
SET TRANSACTION
Com COMMIT CONTROL
“embutido”
5
SQL (Structured Query Language)
Propósito: interface para um banco de dados relacional
(Oracle, DB2, SQL Server, Sybase, ...)
7
SQL (Comandos da DDL)
Comando Create
Este comando permite a criação de tabelas no banco de dados ou
mesmo de sua criação.
Sintaxe:
CREATE DATABASE < nome_db >;
onde:
nome_db - indica o nome do Banco de Dados a ser criado.
SQL (Comandos da DDL)
• CREATE TABLE é o comando usado para criação da
tabela e deve ser seguida pelo nome que daremos à
tabela. Dentro do comando, devemos definir os nomes dos
campos de acordo com a conveniência do banco de
dados, e determinar o tipo de dado que poderá ser
incluído neste campo.
onde:
nome_table - indica o nome da tabela a ser criada.
nome_atributo - indica o nome do campo a ser criado na tabela.
tipo - indica a definição do tipo de atributo ( integer(n), char(n),
real(n,m), date... ).
n- número de dígitos ou de caracteres
m- número de casas decimais
SQL (Comandos da DDL)
• Exemplo:
Como exemplo do uso do comando CREATE TABLE,
imaginemos a necessidade de uma tabela que deva
possuir os dados dos clientes de uma loja.
O campo Nome é do tipo VARCHAR (60), ou seja aceita dados alfa-numéricos com até 60
caracteres. No entanto se um nome for inserido com menos de 60 caracteres, o número de
bytes consumidos pelo campo será de acordo com o nome inserido.
O campo de Data_Nascimento é do tipo DATE, ou seja, uma data, que no entanto não de
preenchimento obrigatório (por isto não foi declarado o NOT NULL).
O campo Telefone foi determinado como sendo alfa-numérico com oito caracteres definidos,
e mesmo que sejam utilizados menos caracteres, o número de bytes consumidos serão
sempre os mesmos independente dos dados. Isto é útil para dados alfanuméricos que não
variam de tamanho, como o caso de UF no Brasil, cuja abreviação sempre são de dois
caracteres.
A instrução PRIMARY KEY define qual dos campos será a chave primária e não pode ser
repetido, sendo o diferenciador entre os diversos clientes que sejam inseridos nesta tabela.
SQL - Visões
• As visões permitem encapsular os detalhes da estrutura das
tabelas, que podem mudar na medida em que os aplicativos
evoluem, atrás de interfaces consistentes.
Sintaxe
<<PK>> PK_ESTADOS()
Restrições de Integridade
Integridade Referencial
• A chave estrangeira é uma cláusula que deve
ser incluída quando possuímos mais de duas
tabelas em um banco de dados.
• Através da chave estrangeira estabelecemos as
relações entre duas ou mais tabelas. A chave
estrangeira desta forma referencia o campo que
é chave primária de outra tabela.
• O que acontece :
ERROR: <unnamed> referential integrity violation - key referenced
from clima not found in cidades
onde
NOME
O nome (opcionalmente qualificado pelo esquema) da tabela a ser removida.
CASCADE
Remove automaticamente os objetos dependentes da tabela (como visões).
RESTRICT
Recusa remover a tabela se existirem objetos dependentes. Este é o padrão.
Saídas
DROP TABLE
Mensagem retornada se a execução do comando for bem-sucedida.
ERROR: table "nome" does not exist
Se a tabela especificada não existe no banco de dados.
SQL (Comandos da DDL) – Alter Table
• Descrição
O comando ALTER TABLE altera a definição de uma tabela
existente. Existem várias formas alternativas:
• Exemplo :
SELECT registro, nome, cpf FROM cadastro;
SQL (Comandos da DML)
• Note aqueles nomes de colunas estão separados por
uma vírgula.
• Ele possibilita selecionar todas as colunas da tabela,
especificando um * (asterisco) depois do SELECT
palavra comando.
– Colunas sinônimas
– Concatenação de colunas
– Literais
SQL (Comandos da DML)
• Expressões
Aritméticas Operadores Descrições
• Expressões Aritméticas
podem conter nome de / Divisão
• Colunas Sinônimas
• Quando mostramos o resultado de uma pesquisa, o PgAdmin
normalmente usa o nome as colunas selecionadas como cabeçalho.
Em alguns exemplos ele pode ser sem sentido. Você pode modificar
o cabeçalho de uma coluna usando sinônimos(alias).
• Exemplo :
select registro, nome, datanasc “data de nascimento” from cadastro
SQL (Comandos da DML)
• O Operador de Concatenação
O Operador de Concatenação (||) permite que as colunas
sejam juntadas com outras colunas, expressões aritméticas
ou valores constantes para criar uma expressão
alfanumérica. Colunas ficam lado a lado com operadores
para formarem uma única coluna.
• Exemplo :
SELECT registro||nome FROM cadastro;
SQL (Comandos da DML)
• Literais
• Um literal são um ou mais caracteres, expressões, números incluídos
na lista do SELECT o qual não é um nome de coluna ou de um
sinônimo
• Um literal na lista do SELECT terá uma saída para cada linha
retornada. Literais de livre formatos de textos podem ser incluídos no
resultado da pesquisa, e são tratados como uma coluna na lista do
SELECT.
•Datas e caracteres alfanuméricos devem ser colocados entre aspas
simples(‘); números não precisam de aspas simples.
• As declarações seguintes contém literais selecionados com
concatenação e colunas sinônimas.
• A clausula DISTINCT
Para eliminar valores duplicados no resultado, incluímos o DISTINCT
qualificador no comando SELECT.
• Exemplo :
SELECT nome, deptobase FROM cadastro
ORDER BY nome;
• Exemplo :
= igual a
Algumas vezes você precisa procurar valores que você não conhece
exatamente Usando o operador LIKE é possível selecionar linhas
combinando parâmetros alfanuméricos. Dois símbolos podem ser
usados para construir uma linha de procura.
Símbolo Representa
% Várias seqüência de zero ou mais
caracteres
_ um número desejado de
caracteres
SQL (Comandos da DML)
• O Operador LIKE
Operador Descrição
!= não igual para (VAX,UNIX,PC)
^= não igual para (IBM)
<> não igual para (todos sistemas
operacionais)
NOT COLUNA_NOME= não igual que
Operador Descrição
NOT BETWEEN tudo que estiver fora da faixa
NOT IN tudo que não estiver na lista
NOT LIKE tudo que não conter a linha de caracteres
IS NOT NULL tudo que não for nulo
Ligações (Joins)
Equi-Join
• Na ordem para descobrir, manualmente, qual
departamento vários empregados estão, nós
comparamos a coluna DEPTOBASE da tabela
CADASTRO com a mesmo valor de DEPTOBASE na
tabela DEPT.
• O relacionamento entre a tabela EMP e a DEPT é um
equi-join, em que o valor da coluna DEPTNO seja igual
para ambas as tabelas( o = operador de comparação é
usado).
SQL (Comandos da DML)
Extraindo Dados de Mais de uma Tabela
SELECT coluna(s)
FROM tabela(s)
WHERE condição de ligação
Nom-Equi-Join
• O relacionamento entre as tabelas CADASTRO e SALFAIXA
é um nom-equi-join, em que a coluna na CADASTRO
corresponde direto a uma coluna na SALFAIXA. O
relacionamento é obtido usando um outro operador que o
igual(=).
• Para avaliar um grau do salário de um empregado é
necessário que o salário esteja entre o menor e maior faixa
de salário.
Funções de Grupo
• Funções de grupo operam sobre conjuntos de linhas.
Elas retornam resultados baseados sobre um grupo de
linhas, antes que um resultado por linha tenha retornado
como uma função de linha única.
Group by
• Como padrão todas as linhas de um tabela são trilhadas
como um grupo. A clausula GROUP BY da declaração do
SELECT é usada para dividir as linhas em menores
grupos.
SQL (Comandos da DML)
Função Valor Retornado
AVG([DINSTINCT/ALL]n) Valor médio de n, ignorando os valores
nulos.
COUNT([DINSTINCT/ALL]expr*) Contador
Mostrando o Departamento
• SELECT MIN(datanasc),deptobase FROM
cadastro GROUP BY deptobase;
SQL (Comandos da DML)
Funções de Grupo
Suponha na mente a seguinte regra quando
usar funções de grupo:
Exemplo 1:
INSERT INTO alunovestibular
(matricula,notaobjetiva,notaredacao,classificacao)
VALUES (‘20061000001’,’20’,’2.5’,1);
SQL (Comandos da DML)
INSERT
insert into nomedatabela
(campo 1,...,campo n)
Values (valor 1,...,valor n)
Exemplo 2:
INSERT INTO alunovestibular
VALUES (‘20061000001’,’20’,’2.5’,1);
SQL (Comandos da DML)
UPDATE
UPDATE nomedatabela
SET campo 1 = valor 1,..., campo n = valor n
Exemplo :
"UPDATE alunovestibular
SET notaobjetiva=’20’,
notaredacao=‘3.5’,
classificacao=‘2'
WHERE matricula='".$matricula."'";
SQL (Comandos da DML)
DELETE
DELETE FROM nomedatabela
WHERE <CONDIÇÃO>
Exemplo : ?
SQL (Comandos da DML)
Sub-Pesquisas
• Pesquisas contendo na clausula WHERE ou HAVING de
outra declaração SQL
• Por exemplo:
SELECT coluna1, coluna2, ...
FROM tabela
WHERE coluna = (SELECT coluna
FROM tabela
WHERE condição)
SQL (Comandos da DML)
Sub-Pesquisas
• A sub-pesquisa é geralmente referida como SUB-SELECT
ou SELECT interno;
• Erros Encontrados
Quando uma sub-pesquisa retorna mais que uma linha e
um operador de linha única é usado, a seguinte mensagem
de erro:
SELECT nome, salario, deptobase
FROM cadastro
WHERE salario = (SELECT MIN(salario)
FROM cadastro
GROUP BY deptobase);
Exercícios
1. Encontrar os empregados que ganham o maior salário em cada
função e ordenar o salário da forma descendente
2. Encontrar os empregados que ganham o mínimo salário para sua
função. Mostrar o resultado em ordem ascendente de salário.
3. Encontrar o mais recente admitido empregado em cada
departamento. Ordenado por admissão.
4. Mostre o nome, salário e departamento para qualquer empregado
que ganhe um salário maior que a média para seu departamento.
Ordenar pelo número de departamento.
5. Lista todos os departamentos onde não existem empregados.
(Usando dessa vez um sub-pesquisa).
SQL (Comandos da DCL)
Comandos da DCL
• GRANT
• GRANT — concede privilégios de acesso
• Sinopse
• GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES |
TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] nome_da_tabela [, ...]
TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...]
• GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE nome_bd [, ...]
TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...]
• GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION nome_da_função ([tipo, ...]) [, ...]
TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...]
• GRANT { USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE nome_da_linguagem [, ...]
TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...]
• GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA nome_do_esquema [, ...]
TO { nome_do_usuário | GROUP nome_do_grupo | PUBLIC } [, ...]
SQL (Comandos da DML)
Comandos da DDL
• O comando GRANT concede privilégios específicos sobre um
objeto (tabela, visão, seqüência, banco de dados, função,
linguagem procedural ou esquema) para um ou mais usuários ou
grupos de usuários.
• Exemplos:
1. GRANT SELECT ON minha_tabela TO PUBLIC;
2. GRANT SELECT,UPDATE,INSERT ON minha_tabela TO GROUP
todos;
SQL (Comandos da DML)
Comandos da DDL
Exemplos :
Conceder, para todos os usuários, o privilégio de inserir na
tabela filmes:
• GRANT INSERT ON filmes TO PUBLIC;
Exemplos :
• Revogar o privilégio de inserção na tabela filmes concedido
para todos os usuários:
REVOKE INSERT ON filmes FROM PUBLIC;