Aula SQL
Aula SQL
Aula
António Abelha
Departamento de Informática
Escola de Engenharia
1
António Abelha -2019/2020, Universidade do Minho
4
Bases de Dados
- Usar a cláusula WHERE para obter linhas que satisfazem várias condições;
- Utilização subqueries;
Como alterar os dados de uma base de dados utilizando INSERT, UPDATE e DELETE.
2
António Abelha -2019/2020, Universidade do Minho
fi
Bases de Dados
3
António Abelha -2019/2020, Universidade do Minho
fi
Bases de Dados
Objetivos do SQ
Uma linguagem de bases de dados deve executar essas tarefas com esforço
mínimo do utilizador, e a sua estrutura e sintaxe devem ser fáceis de aprender.
4
António Abelha -2019/2020, Universidade do Minho
L
Bases de Dados
5
António Abelha -2019/2020, Universidade do Minho
Bases de Dados
6
António Abelha -2019/2020, Universidade do Minho
fi
fi
fi
fi
fi
:
Bases de Dados
SELECT staffNo , lName , salary FROM Staff WHERE salary > 10000;
SQL pode ser usado por uma variedade de utilizadores, incluindo administradores da
base de dados (DBA), gestão pessoal, programadores, e muitos outros tipos de
utilizadores nais.
7
António Abelha -2019/2020, Universidade do Minho
fi
Bases de Dados
8
António Abelha -2019/2020, Universidade do Minho
Bases de Dados
Literai
Distinguir entre literais que são colocados entre plicas e aqueles que não são.
Todos os valores de dados não-numéricos devem ser colocados entre plicas; todos
os dados numéricos não devem ser colocados entre plicas. Por exemplo, podemos
usar literais para inserir dados numa tabela:
9
António Abelha -2019/2020, Universidade do Minho
s
Bases de Dados
GROUP BY forma grupos de linhas com o(s) mesmo(s) valor(es) da(s) coluna(s)
A ordem das cláusulas na instrução SELECT não pode ser alterado. A apenas as duas primeiras
cláusulas são obrigatórias: SELECT e FROM; as restantes são opcionais.
10
António Abelha -2019/2020, Universidade do Minho
fi
fi
fi
fi
fi
Bases de Dados
SELECT staffNo, fName, lName, position, sex, DOB, salary, branchNo FROM
Staff;
DISTINC
12
António Abelha -2019/2020, Universidade do Minho
T
Bases de Dados
Campos calculado
Apresente uma lista dos salários mensais para todos os funcionários, que mostre o
número de funcionário, o primeiro e último nome, e os detalhes do salário.
A norma ISO permite que a coluna possa ser renomeada usando a cláusula AS
13
António Abelha -2019/2020, Universidade do Minho
s
Bases de Dados
• Comparação - Compara o valor de uma expressão com o valor de uma outra expressão.
• Conjunto - veri ca se o valor de uma expressão cai dentro de um intervalo especi cado
de valores.
14
António Abelha -2019/2020, Universidade do Minho
fi
)
fi
fi
Bases de Dados
SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary > 10000;
15
António Abelha -2019/2020, Universidade do Minho
o
Bases de Dados
Operadores disponíveis
= equals
operadores lógicos AND, OR, e NOT, com parênteses (se necessário ou desejado) para alterar a precedência normal:
16
António Abelha -2019/2020, Universidade do Minho
:
Bases de Dados
17
António Abelha -2019/2020, Universidade do Minho
Bases de Dados
18
António Abelha -2019/2020, Universidade do Minho
Bases de Dados
SELECT staffNo, fName, lName, position FROM Staff WHERE position = ‘Manager’
OR position = ‘Supervisor’;
19
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
Por exemplo:
LIKE ‘H%' - o primeiro caracter deve ser H, mas o resto da cadeia pode ser vazia.
LIKE 'H_ _ _' - signi ca que deve haver exatamente quatro caracteres na sequência, a primeira das quais tem de ser
um H.
LIKE '%e' - qualquer sequência de caracteres, de comprimento pelo menos 1, a última letra um e.
endereço LIKE '% Glasgow%', uma sequência de caracteres de qualquer comprimento contendo Glasgow.
20
António Abelha -2019/2020, Universidade do Minho
fi
)
Bases de Dados
SELECT ownerNo, fName, lName, address, telNo FROM PrivateOwner WHERE address
LIKE ‘%Glasgow%’;
21
António Abelha -2019/2020, Universidade do Minho
Bases de Dados
Listar os detalhes de todas as visitas à propriedade PG4 onde não tenha sido registado
qualquer comentário.
—————————————-
SELECT clientNo, viewDate FROM Viewing WHERE propertyNo = ‘PG4’ AND comment
IS NULL;
22
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
23
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
SELECT staffNo, fName, lName, salary FROM Staff ORDER BY salary DESC;
24
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
Apresente uma lista abreviada das propriedades dispostas por ordem do tipo de
propriedade.
SELECT propertyNo, type, rooms, rent FROM PropertyForRent ORDER BY type, rent DESC;
25
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
Funções de agregação em SQ
Estas funções operaram numa única coluna de uma tabela e retornam um único valor.
COUNT, MIN, MAX e aplicam-se a colunas numéricas e não numéricas, o SUM e
AVG apenas podem ser utilizados em campos numéricos. Cada função elimina nulos
primeiro e opera apenas sobre os valores não nulos restantes. COUNT (*) tem uma
utilização especial, que conta todas as linhas de uma tabela.
26
António Abelha -2019/2020, Universidade do Minho
fi
L
fi
fi
fi
fi
fi
Bases de Dados
Funções de agregação em SQ
- COUNT(*
27
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
Funções de agregação em SQ
COUNT(DISTINCT
28
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
Funções de agregação em SQ
COUNT e SU
29
António Abelha -2019/2020, Universidade do Minho
M
Bases de Dados
Funções de agregação em SQ
MIN, MAX e AV
30
António Abelha -2019/2020, Universidade do Minho
G
Bases de Dados
31
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
Qual o numero de funcionários que trabalham em cada lial e a soma de seus salários.
32
António Abelha -2019/2020, Universidade do Minho
)
fi
Bases de Dados
Com esta versão do SELECT, os dois valores agregados são produzidos para cada
lial, apresentando se for o caso valores a zero.
33
António Abelha -2019/2020, Universidade do Minho
fi
Bases de Dados
Para cada lial com mais do que um funcionário, apresente o número de funcionários
e a soma dos seus salários.
SELECT branchNo, COUNT(staffNo) AS myCount, SUM(salary) AS mySum
FROM Staff
GROUP BY branchNo
HAVING COUNT(staffNo) > 1
ORDER BY branchNo;
34
António Abelha -2019/2020, Universidade do Minho
fi
)
Bases de Dados
Subquerie
Uma instrução SELECT pode ser usada dentro outra instrução SELECT. Os resultados dessa instrução
SELECT interna (ou subselect) são utilizados na instrução externa para ajudar a determinar o conteúdo
do resultado nal. Um subselect pode ser usado no WHERE e HAVING. Neste caso é chamado de uma
subquery ou query aninhado. Subselects podem ser utilizados no INSERT,UPDATE, e DELETE.
Um subquery escalar retorna uma única coluna, um único valor. Pode ser usado sempre que um valor
único é necessário.
Um subquery de linha retorna várias colunas, apenas uma única linha. Um subquery de linha pode ser
usado sempre que é necessário um construtor de linha,.
Um subquery tabela retorna uma ou mais colunas e várias linhas. Um subquery tabela pode ser utilizado
sempre que é necessário uma tabela, por exemplo, para o predicado IN.
35
António Abelha -2019/2020, Universidade do Minho
s
fi
Bases de Dados
Subquerie
36
António Abelha -2019/2020, Universidade do Minho
s
Bases de Dados
Apresente as propriedades que são geridas por funcionários que trabalham na lial
de '163 Main St ".
SELECT propertyNo, street, city, postcode, type, rooms, rent FROM PropertyForRent
37
António Abelha -2019/2020, Universidade do Minho
)
fi
Bases de Dados
Apresente uma lista dos nomes de todos os clientes que visualizaram uma
propriedade e o comentário registado.
38
António Abelha -2019/2020, Universidade do Minho
a
Bases de Dados
O SQL possuiu as seguintes formas alternativas para especi car esta junção:
39
António Abelha -2019/2020, Universidade do Minho
a
fi
o
Bases de Dados
Para cada lial, apresente o números e o nome dos funcionários que gerem
propriedades, incluindo a cidade em que se situa a lial e as propriedades geridas.
40
António Abelha -2019/2020, Universidade do Minho
fi
a
fi
Bases de Dados
Outer join
A norma ISO fornece uma outra forma de operação de junção chamada outer joins
41
António Abelha -2019/2020, Universidade do Minho
s
Bases de Dados
Outer join
42
António Abelha -2019/2020, Universidade do Minho
s
Bases de Dados
Outer join
ou
43
António Abelha -2019/2020, Universidade do Minho
s
fi
Bases de Dados
Outer join
ou
44
António Abelha -2019/2020, Universidade do Minho
s
fi
Bases de Dados
Outer join
ou
45
António Abelha -2019/2020, Universidade do Minho
s
fi
Bases de Dados
EXISTS e NOT EXISTS veri cam apenas a existência ou não existência de linhas no
resultado do subquery.
A subquery pode conter qualquer número de colunas. Para simpli car, usar a seguinte
forma:
(SELECT * FROM...)
46
António Abelha -2019/2020, Universidade do Minho
S
fi
fi
Bases de Dados
fi
Bases de Dados
Identi car todos os clientes que visualizaram todos os imóveis com três quartos.
48
António Abelha -2019/2020, Universidade do Minho
fi
S
Bases de Dados
A União de duas tabelas, A e B, é uma tabela com todas as linhas que estão, na
primeira tabela A ou na segunda tabela B ou em ambas.
A Interseção de duas tabelas, A e B, é uma tabela com todas as linhas que são
comuns às duas tabelas A e B.
A Diferença de duas tabelas, A e B, é uma tabela com todas as linhas que estão
na tabela A mas não estão na tabela B.
49
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
Isto implica que as duas tabelas deve conter o mesmo número de colunas, e que as
colunas possuem os mesmos tipos de dados e comprimentos.
operator [ALL ] - Se ALL for utilizado, o resultado pode incluir linhas duplicadas.
50
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
Uso da UNIO
Apresentar uma lista de todas as cidades em que não há nem uma lial ou um
imóvel.
UNION
51
António Abelha -2019/2020, Universidade do Minho
N
fi
Bases de Dados
Uso da INTERSEC
Apresentar uma lista de todas as cidades em que existe uma lial e um imóvel.
52
António Abelha -2019/2020, Universidade do Minho
T
fi
Bases de Dados
Apresentar uma lista de todas as cidades em que existe uma lial e não existe um
imóvel.
53
António Abelha -2019/2020, Universidade do Minho
T
fi
Bases de Dados
O SQL é uma linguagem completa para manipulação de dados e pode ser utilizada
para alterara informação da base de dados, além das operações de consulta. São
três os comandos SQL que estão disponíveis para modi car o conteúdo das tabelas
na base de dados:
54
António Abelha -2019/2020, Universidade do Minho
fi
s
fi
Bases de Dados
Há duas formas de utilizar a instrução INSERT. A primeira permite que uma única
linha seja inserida numa tabela:
Quando o columnList é apresentado, as colunas que são omitidas devem ter sido
declaradas como permitindo o NULL quando a tabela foi criada.
55
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
deve haver uma correspondência directa na posição de itens nas duas listas, de
modo que o primeiro item no dataValueList corresponde ao primeiro item da
columnList, o segundo item dataValueList corresponde ao segundo item
columnList, etc;
o tipo de cada item de dados da dataValueList deve ser compatível com o tipo de
dados da coluna correspondente.
56
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
INSERT . . . VALUE
Inserir uma nova linha na tabela Staff carregando valores em todas as colunas.
57
António Abelha -2019/2020, Universidade do Minho
S
Bases de Dados
Inserir uma nova linha na tabela de Staff indicando as seguintes colunas: staffNo,
fName, lName, position , salary, e branchNo.
,
INSERT INTO Staff (staffNo, fName, lName, position, salary, branchNo) VALUES
(‘SG44’, ‘Anne’, ‘Jones’, ‘Assistant’, 8100, ‘B003’);
Ao inserir dados em algumas colunas, temos de especi car os seus nomes. A ordem
para os nomes das colunas não é relevante, o mais normal é especi cá-los na ordem
em que aparecem na tabela. Em alternativa podemos representar o INSERT como:
INSERT INTO Staff VALUES (‘SG44’, ‘Anne’, ‘Jones’, ‘Assistant’, NULL, NULL, 8100,
‘B003’);
58
fi
António Abelha -2019/2020, Universidade do Minho
fi
Bases de Dados
A segunda forma da instrução INSERT permite que várias linhas sejam copiadas de
uma ou mais tabelas, tem o seguinte formato:
59
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
60
António Abelha -2019/2020, Universidade do Minho
T
Bases de Dados
A instrução UPDATE permite que o conteúdo de linhas existentes numa tabela possa
ser alterado. O formato do comando é:
61
António Abelha -2019/2020, Universidade do Minho
)
Bases de Dados
62
António Abelha -2019/2020, Universidade do Minho
s
Bases de Dados
Promover David Ford (staffNo = ‘SG14’) a Manager e aumentar o seu salário para
18000.
UPDATE Staff SET position = ‘Manager’, salary = 18000 WHERE staffNo = ‘SG14’;
63
António Abelha -2019/2020, Universidade do Minho
s
fi
s
Bases de Dados
64
António Abelha -2019/2020, Universidade do Minho
)
fi
Bases de Dados
65
António Abelha -2019/2020, Universidade do Minho
s
Bases de Dados
66
António Abelha -2019/2020, Universidade do Minho
ç
ã