49
SQL – SELECT BANCO DE DADOS Prof.ª M.ª Elaine Cecília Gatto 2 8 / 0 6 / 2 0 2 2 P r o f . ª M . ª E l a i n e C e c í l i a G a t t o 1

SQL parte 2

Embed Size (px)

Citation preview

Page 1: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto1

SQL – SELECT BANCO DE DADOS

Prof.ª M.ª Elaine Cecília Gatto

Page 2: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto2

Introdução• SQL:

• Linguagem do tipo declarativa

• Permite ao usuário expressar aquilo que pretende sem ter que entrar em grandes detalhes sobre a localização física dos componentes, etc.

Page 3: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto3

Introdução• Os usuários apenas indicam aquilo

que pretendem sem dizer exatamente de que forma o computador terá que operar para obter os resultados solicitados.

• Linguagens declarativas são mais flexíveis: referenciam os seus elementos através de um nome compreensível e não através de uma posição física em disco ou memória

Page 4: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto4

Introdução• SQL é composta por:

• DML: data manipulation language ou linguagem de manipulação de dados (select, insert, etc.)

• DDL: data definition language ou linguagem de definição de dados (create, alter, drop, etc)

• DCL: data control language ou linguagem de controle de dados (grant, revoke, etc)

Page 5: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto5

Introdução• SQL é orientada para o

processamento de conjuntos (set-based language)

• COBOL é orientada a processamento de arquivos

• SELECT: comando usado para realizar uma consulta ao banco de dados relacional.

Page 6: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto6

SELECT• SINTAXE

SELECT campo1, campo2, campo3, ... , campoN FROM tabela1, tabela2, ..., tabelaNWHERE condiçãoGROUP BY ....HAVING ....ORDER BY ....

Page 7: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto7

SELECIONANDO TODOS OS REGISTROS

• SINTAXE

SELECT codigo, localidade FROM codigopostal;

Page 8: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto8

SELECIONANDO TODAS AS COLUNAS

• SINTAXE

SELECT * FROM codigopostal;SELECT * FROM pessoa;

• A ordem em que as colunas são apresentadas é a ordem em que elas foram colocadas na CLAUSULA SELECT

• Se usar o * é a ordem em que foram criadas

Page 9: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto9

SELECIONANDO TODAS AS COLUNAS

• Se quisermos alterar a ordem de apresentação das colunas na saída da consulta (resultado), então basta colocar os nomes dos campos conforme se deseja

• SELECT nome, id, idade, codigopostal, telefone, salario FROM pessoa

• Pode-se ainda selecionar mais de uma vez a mesma coluna

Page 10: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto10

PROJEÇÃO• PROJEÇÃO: Obter apenas algumas

das colunas da tabela

• Especificar as colunas que deseja na clausula select

Page 11: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto11

PROJEÇÃO• EXEMPLO: escrever o comando SQL

que permite obter informação sobre a IDENTIFICAÇÃO, o NOME e o CÓDIGO POSTAL de todas as pessoas existentes no banco de dados.

SELECT id, nome, codigopostal FROM pessoa

Page 12: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto12

RESTRIÇÃO: where• Permite restringir o número de linhas

a serem apresentadas

• Apenas serão apresentadas algumas das linhas que contem a informação desejada

• Uma condição é um caso particular de uma expressão que devolve sempre um resultado do tipo lógico booleano

Page 13: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto13

RESTRIÇÃO: where• EXEMPLO: selecionar todos os

indivíduos da tabela PESSOA

Select * from pessoa

Select * from pessoa where true

Select * from pessoa where 1

Select * from pessoa where 1 = 1

Page 14: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto14

RESTRIÇÃO: where• EXEMPLO: fazer uma consulta à

tabela PESSOA, da qual não resulte qualquer linha

• Para obter um resultado VAZIO, é necessário especificar uma condição que seja falsa para todos os registros

Select * from pessoa false

Page 15: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto15

RESTRIÇÃO: where• Os SGBD não aceitam TRUE/FALSE,

apenas o ACCESS da Microsoft aceita!

• Select * from pessoa where id <> id

• Select * from pessoa where 1 <> 1

Page 16: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto16

OPERADORES RELACIONAISOperador Descrição Exemplo Resultado

= Igual a 7 = 5 FALSE

> Maior que 7 > 5 TRUE

< Menor que 7 < 5 FALSE

>= Maior ou igual a 7 >= 5 TRUE

<= Menor ou igual a 7 <= 5 FALSE

<> Ou != Diferente 7 != 5 FALSE

Exemplo:

SELECT * FROM pessoa WHERE idade = 35

SELECT id, nome, salario FROM pessoa WHERE id >= 18

Page 17: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto17

OPERADORES RELACIONAIS

• Exemplo: selecionar a descrição de todas as mensagens cujo ID seja diferente de 20

SELECT mensagem FROM mensagem WHERE id <> 20

Page 18: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto18

OPERADORES LÓGICOSOPERADOR EXEMPLO

AND CONDIÇÃO 1 AND CONDIÇÃO 2

OR CONDIÇÃO 1 OR CONDIÇÃO 2

NOT NOT CONDIÇÃO

EXEMPLO: selecionar o ID, o NOME, a Idade e o SALARIO de todas as pessoas com idade entre 30 e 40 anos

Select id, idade, salario FROM pessoa WHERE idade >= 30 AND idade <= 40

EXEMPLO: selecionar o id, o nome, a idade e o salário de todas as pessoas que não fazem parte da seleção anterior

SELECT id, nome, idade, salario FROM pessoa WHERE idade < 30 OR idade > 40

Page 19: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto19

OPERADORES LÓGICOSSELECT id, nome, idade, salario FROM pessoa WHERE NOT (idade >= 30 AND idade <= 40)

Select id, nome, idade, salario FROM pessoa WHERE NOT idade >= 30 AND idade <= 40

SELECT id, nome, idade, salario FROM pessoa WHERE (NOT (idade >= 30)) AND (idade <= 40)

Page 20: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto20

BETWEEN• Permite especificar intervalos de

valores

• SINTAXE:

SELECT .... FROM .... WHERE valor [NOT] BETWEEN valor1 AND valor2

Page 21: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto21

BETWEEN• As seguintes condições são equivalentes

• valor >= valor1 AND valor <= valor2• (valor >= valor1) AND (valor <= valor2)• valor Between valor1 AND valor2• valor NOT BETWEEN valor1 AND valor2• NOT (valor >= valor1 AND valor <= valor2)• NOT (valor BETWEEN valor1 AND valor2)• NOT (valor >= valor1) OR NOT (valor <=

valor2)• valor < valor1 OR valor > valor2

Page 22: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto22

BETWEEN• EXEMPLO: selecionar o ID, o nome, a

idade e o salário de todas as pessoas com idade entre 30 e 40 anos

SELECT id, nome, idade, salario FROM pessoa WHERE idade >= 30 AND idade <= 40

SELECT id, nome, idade, salario FROM pessoa WHERE idade BETWEEN 30 and 40

Page 23: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto23

BETWEEN• exemplo: selecionar o id, o nome, a idade e o salário de

todas as pessoas que não fazem parte da seleção anterior

Select id, nome, idade, salario FROM pessoa WHERE idade < 30 OR idade > 40

SELECT id, nome, idade, salario FROM pessoa WHERE NOT (idade >= 30 AND idade <= 40)

SELECT id, nome, idade, salario FROM pessoa WHERE idade NOT BETWEEN 30 AND 40

SELECT ide, nome, idade, salario FROM pessoa WHERE NOT (idade BETWEEN 30 AND 40)

Page 24: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto24

IN• Permite verificar se algo faz ou não

parte de um conjunto de valores especificado entre parênteses

• SINTAXE:

SELECT ... FROM ... WHERE valor [NOT] IN (valor1, valor2, ..., valor)

Page 25: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto25

IN• Condições equivalentes

• Valor = 1 OR valor =2 OR valor 3

• Valor IN (1, 2, 3)

Page 26: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto26

IN• EXEMPLO: selecionar a lista completa,

com todos os campos, de códigos postais de Lisboa e tomar

SELECT * FROM postal WHERE localidade = ‘LISBOA’ OR localidade = ‘TOMAR’

SELECT * FROM postal WHERE localidade IN (‘LISBOA’, ‘TOMAR’)

Page 27: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto27

IN• EXEMPLO: selecionar os códigos postais que não

pertencem a LISBOA nem a TOMAR

SELECT codigopostal, localidade FROM postal WHERE localidade <> ‘LISBOA’ AND localidade = ‘TOMAR’

SELECT codigpostal, localidade FROM POSTAL WHERE localidade NOT IN (‘LISBOA’, ‘TOMAR’)

SELECT localidade, códigopostal FROM postal WHERE codigopostal NOT IN (1000, 1100, 1200, 1500, 2300)

Page 28: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto28

IS: tratamento de valores nulos

• NULL:

• Valor especial que pode ser atribuído a qualquer tipo de dados

• Quando presente em um campo indica ausência de valor

• Permite indicar se existe ou não algum valor já disponível para um determinado campo

Page 29: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto29

IS: tratamento de valores nulos

• EXEMPLO:

• O valor ZERO não pode ser atribuído a uma nota de aluno logo no inicio do semestre. Se isso ocorrer, significa que o aluno tirou ZERO naquela prova ou trabalho, o que não é verdade!

Page 30: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto30

IS: tratamento de valores nulos

• EXEMPLO:

• O valor ZERO não pode ser atribuído a uma nota de aluno logo no inicio do semestre. Se isso ocorrer, significa que o aluno tirou ZERO naquela prova ou trabalho, o que não é verdade!

Page 31: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto31

IS: tratamento de valores nulos

• IS é o operador utilizado para realizar as comparações com valores NULL

• SINTAXE

• SELECT ... FROM ... WHERE campo IS [NOT] NULL

Page 32: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto32

IS: tratamento de valores nulos

• Exemplo: selecionar os nomes e telefones de todas as pessoas

• SELECT nome, telefone FROM pessoa

• Alguns SGBDs apresentam o NULL no resultado, outros não!

Page 33: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto33

IS: tratamento de valores nulos

• EXEMPLO: selecionar o nome das pessoas SEM telefone

SELECT nome FROM pessoa WHERE telefone IS NULL

• EXEMPLO: selecionar os nomes e os telefones das pessoas COM telefone

SELECT nome, telefone FROM pessoa WHERE telefone IS NOT NULL

Page 34: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto34

IS: tratamento de valores nulos

• NULL não é zero e não é uma string vazia

• Uma comparação com NULL tem que ser feita usando IS

• Se fizer isso, será devolvido para você FALSE como resposta

• NULL é um indicador de inexistência de valor

Page 35: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto35

LIKE• LIKE é usado para comparar STRINGS

• Permite resolver alguns problemas naturais que existem quando se pretende comparar strings

• Permite comparar partes da string

• A comparação de STRING com os operadores relacionais utiliza sempre, na comparação, a totalidade da string

Page 36: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto36

LIKE• Exemplo: selecionar os códigos

postais associados a LISBOA

• SELECT * FROM codigopostal WHERE localidade = ‘LISBOA’

Page 37: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto37

LIKE• CARACTERES CORINGAS: usados

para comparar partes de stringsWildcard Significado

% Qualquer conjunto de zero ou mais caracteres

_ Um caractere qualquer

* Qualquer conjunto de zero ou mais caracteres

? Um caractere qualquer

Page 38: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto38

LIKE• EXEMPLO: selecionar todas as

mensagens começadas com T

SELECT * FROM mensagem WHERE mensagem LIKE ‘T%’

SELECT * FROM mensagem WHERE mensagem LIKE ‘T*’

Page 39: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto39

LIKE• EXEMPLO: selecionar todas as

mensagens acabadas com ‘as’

SELECT * FROM mensagem WHERE mensagem LIKE ‘%as’

SELECT * FROM mensagem WHERE mensagem LIKE ‘*as’

Page 40: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto40

LIKE• EXEMPLO: selecionar todas as

mensagens que contenham a palavra ‘vendas’ em qualquer parte da designação

SELECT * FROM mensagem WHERE mensagem LIKE ‘%vendas%’

SELECT * FROM mensagem WHERE mensagem LIKE ‘*vendas*’

Page 41: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto41

LIKE• EXEMPLO: selecionar todas as

mensagens que contenham a string ‘te’

SELECT * FROM mensagem WHERE mensagem LIKE ‘*te*’

SELECT * FROM mensagem WHERE mensagem LIKE ‘%te%’

Page 42: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto42

LIKE• EXEMPLO: selecionar todos os nomes

que contenham a string ‘DA’

SELECT * nome FROM pessoa WHERE nome LIKE ‘%da%’

SELECT * nome FROM pessoa WHERE nome LIKE ‘*da*’

Page 43: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto43

LIKE• EXEMPLO: selecionar todos os NOMES que

NÃO contenham a string ‘da’

SELECT nome FROM pessoa WHERE nome NOT LIKE ‘%da%’

SELECT nome FROM pessoa WHERE NOT (nome LIKE ‘*da*’)

SELECT nome FROM pessoa WHERE NOT (nome LIKE ‘%da%’)

Page 44: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto44

LIKE• EXEMPLO: selecionar todos os nomes

cujo segundo caracteres é um ‘a’

SELECT nome FROM pessoa WHERE nome LIKE ‘_a%’

SELECT nome FROM pessoa WHERE nome LIKE ‘?a*’

Page 45: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto45

LIKE• Quando precisar pesquisar os próprios

caracteres coringas, usar a sintaxe abaixo

• String [NOT] LIKE ‘padrão_de_pesquisa’ ESCAPE ‘caractere’

• Exemplo: selecionar todas as mensagens que contenham o caractere ‘%’

Page 46: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto46

LIKE• SELECT mensagem FROM mensagem WHERE

mensagem LIKE ‘%@%%’ ESCAPE ‘@’

• SELECT mensagem FROM mensagem WHERE mensagem LIKE ‘%=%%’ ESCAPE ‘=’

• % - qualquer conjunto de caracteres à esquerda

• @% - seguido do caractere %• % seguido de qualquer conjunto de

caracteres à direita

Page 47: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto47

LIKEWildcard DESCRIÇÃO

‘[abc]%’ Qualquer string começada obrigatoriamente por a, b ou c‘[!abc]%’ Qualquer string não começada por a, b ou c‘[0-9]%[abc]’ String começada por um digito e terminada pelo caractere a, b ou c‘[a-zA-Z]_’ String formada unicamente por dois caracteres.

O primeiro é um caractere alfabético minúsculo ou maiúsculo. O segundo é um caractere qualquer

‘[!0-9]%’ O primeiro caractere não pode ser digito‘Al[m-r]%’ String começada por Al.

O terceiro caractere terá de estar entre os caracteres ‘m’ e ‘r’Depois pode aparecer qualquer string

‘Al[m-r]%[!0-9]’ String começada por Al.O terceiro caractere terá de estar entre os caracteres ‘m’ e ‘r’Depois pode aparecer qualquer stringNo entanto, o último caractere não pode ser numérico

Page 48: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto48

Precedência de operadores

Parenteses

Multiplicação e divisão

Adição e subtração

NOT

AND

OR

Page 49: SQL parte 2

01/05/2023Prof.ª M

.ª Elaine Cecília Gatto49

Precedência de operadores

• EXEMPLOS:

• SELECT * FROM pessoa WHERE idade <= 27 OR idade >= 30 AND telefone IS NULL

• SELECT * FROM pessoa WHERE idade <= 27 OR (idade >= 30 AND telefone IS NULL)

• SELECT * FROM pessoa WHERE (idade <= 27 OR idade >= 30) AND telefone IS NULL