Buscar

Aula_SQL_Parte_2

Prévia do material em texto

Fundamentos de Banco de 
Dados 
SQL - Parte 2
Profa.: Luana Dantas Chagas
 2
PostgreSQL – Relembrando
● Comandos já utilizados:
● create table;
● insert into … values; 
● select * from;
● update … set … where;
● delete from … where;
● alter table … drop column;
● delete from;
 3
PostgreSQL – Relembrando
● Comandos já utilizados:
● drop table;
● Operadores de comparação: >, <, >=, <=, =, !=.
● Operadores para o predicado: and, or.
● Operações aritméticas: sum, min, max, avg, count.
 4
PostgreSQL - Observação
● Quando criamos uma tabela, devemos determinar uma 
chave primária.
● No entanto, é possível que isso seja esquecido no 
momento da criação da tabela.
● Para adicionar a chave primária após a criação da tabela 
utilizamos:
alter table nome_da_tabela 
add primary key nome_atributo
 5
PostgreSQL - Observação
● Vamos criar uma tabela teste!
● Ela terá somente uma coluna que recebe valores do tipo 
inteiro.
● Para tal, fazemos:
create table teste (
coluna int
)
 6
PostgreSQL - Observação
● Como não há chave primária, podemos adicionar valores 
repetidos sem problemas:
insert into teste values 
(1), (2), (1), (2)
 7
PostgreSQL - Observação
● Vamos adicionar a restrição de chave primária! 
● No entanto, antes, necessitamos retirar as linhas 
duplicadas.
● Isso se faz necessário para que não existam chaves 
repetidas!
delete from teste
alter table teste 
add primary key (coluna)
 8
PostgreSQL - Observação
● Agora, se tentarmos inserir valores repetidos teremos um 
erro:
insert into teste values 
(1), (2), (1), (2)
 9
PostgreSQL - Observação
● Em oposição, também pode ser atribuída a restrição ao 
atributo errado.
● Assim, é possível retirar a restrição de chave primária.
● Para tal, utilizamos:
alter table nomeDaTabela 
drop constraint nomeDaTabela_pkey
 10
PostgreSQL - Observação
● Vamos retirar a restrição da tabela teste!
● Após, será possível inserir valores repetidos.
alter table teste
drop constraint teste_pkey
insert into teste values 
(3), (3), (3)
 11
PostgreSQL - Observação
● Para renomear colunas, utilizamos o comando:
alter table nome_da_tabela 
rename nome_coluna to novo_nome_coluna
● Por exemplo, vamos renomear a coluna da tabela teste 
para coluna_teste:
alter table teste
rename coluna to coluna_teste
 12
PostgreSQL - Observação
● Também é possível renomear a própria tabela. Para tal:
alter table nome_da_tabela 
rename to novo_nome_tabela
● Por exemplo, vamos renomear a tabela teste para 
minha_tabela:
alter table teste
rename to minha_tabela
 13
PostgreSQL
● Podemos renomear também os nomes dos aributos 
retornados na seleção.
● Por exemplo, considere a consulta:
select max(preço) from Produto
● O atributo retornado fica nomeado com ''max''. 
 14
PostgreSQL
● Para que o mesmo apareça como ''Maior preço'', fazemos:
select max(preço) as "Maior preço" 
from Produto 
 15
PostgreSQL
● Para ver o nome e o preço do produto mais caro, precisamos 
fazer uso do in: 
select nome, preço from produto
where preço in (select max(preço) from Produto)
 
PostgreSQL - Select
● O operador in é utilizado quando queremos retornar valores 
que estão dentro de um conjunto de valores. Por exemplo:
select nome from Produto where 
setor in ('Frutas', 'Cereais')
● No caso, vão ser buscados todos os nomes cujo atributo 
setor esteja dentro da lista passada ao operador in.
 18
PostgreSQL 
● Para as próximas cláusulas vamos criar três tabelas: BD, API 
e SO.
● Estas devem possuir os seguintes atributos:
● matricula: int
● nome: varchar
● nota1: real
● nota2: real
● nota3: real
● media: real
● faltas: smallint. 
 19
PostgreSQL 
 20
PostgreSQL 
● Insira, pelo menos, 4 registros em cada tabela.
● No campo media não coloque valor e utilize o null.
● Repita alunos entre as disciplinas.
(...)
 21
PostgreSQL – Observação
● Na coluna média, é possível solicitar que o SGBD realize o 
cálculo.
● Após as inserções de registros na tabela, fazemos:
alter table BD alter column media 
type real using (nota1+nota2+nota3)/3
 22
PostgreSQL – Union
● Utilizando as tabelas criadas, podemos unir todos os alunos 
aprovados nas disciplinas. No caso,
select nome from BD where media>7
union 
select nome from API where media>7
union 
select nome from SO where media>7
 23
PostgreSQL – Instersect
● Com a cláusula intersect podemos encontrar os alunos que 
estão nas mesmas disciplinas.
● Por exemplo, para descobrir os alunos que estão cursando 
Banco de Dados e Algoritmos fazemos:
select nome from BD intersect
select nome from API
 24
PostgreSQL – Instersect
● Outra forma de realizar a mesma consulta é utilizando o ''in'' e 
aninhando consultas.
● Para tal:
select nome from BD where nome 
in (select nome from API)
 25
PostgreSQL – Except
● Com a cláusula except podemos encontrar o que tem em 
uma tabela excetuando o que tem em comum com outra.
● Por exemplo, os alunos que estão em Banco de Dados mas 
não estão cursando Sistemas Operacionais. Assim:
select nome from BD except
select nome from SO
 26
PostgreSQL – Instersect
● Outra forma de realizar a mesma consulta é utilizando o ''not 
in'' e aninhando consultas.
● Para tal:
select nome from BD where nome 
not in (select nome from SO)
 27
PostgreSQL – Alterando Valores
● Já utilizamos update para atualizar um registro trocando-o por 
um novo valor.
● Podemos utilizá-lo também combinando-o com alguma 
operação matemática.
● Por exemplo, suponha que os alunos de Banco de Dados 
irão ganhar 1,0 ponto extra na média final.
● Para acrescentar a pontuação na média teríamos que 
atualizar linha a linha.
 28
PostgreSQL – Alterando Valores
● Para não ter todo esse trabalho, podemos utilizar uma 
operação matemática.
● No caso, faríamos:
update BD set media=media+1
where media<=9 
 29
PostgreSQL – Junção
● Uma das operações mais utilizadas em BD são as junções.
● Elas permitem relacionar dados de duas ou mais tabelas, 
estabelecendo uma relação lógica entre elas.
● As junções disponíveis são:
● Inner join;
● Cross join;
● Left join;
● Right join;
● Full join.
 30
PostgreSQL – Junção
● Para entender cada junção, vamos criar duas tabelas: 
tabela_A e tabela_B.
● Essas tabelas terão apenas uma coluna chamada nome.
 31
PostgreSQL – Junção
● Criadas as tabelas, necessitamos fazer a inserção de dados.
● Vamos deixar alguns nomes em comum:
insert into tabela_A values 
('Maria'), ('Gomes'), ('João'), ('Márcia')
insert into tabela_B values 
('Priscila'), ('Gomes'), ('Cláudio'), ('Márcia')
 32
PostgreSQL – Junção
● A junção inner join retorna os registros em comum entre as 
duas tabelas:
● Para tal, precisamos acrescentar na consulta a restrição de 
igualdade:
select * from tabela_A inner join tabela_B
on tabela_A.nome=tabela_B.nome
OBS: colunas de nomes iguais recebem o nome da tabela.
 33
PostgreSQL – Junção
● A operação combina todas as linhas das tabelas:
Nome
Maria
Gomes
João
Márcia
Nome
Priscila
Gomes
Cláudio
Márcia
Tabela A
Tabela B
Nome Nome
Maria Priscila
Maria Gomes
Maria Cláudio
Maria Márcia
Gomes Priscila
Gomes Gomes
Gomes Cláudio
Gomes Márcia
João Priscila
João Gomes
João Cláudio
João Márcia
Márcia Priscila
Márcia Gomes
Márcia Cláudio
Márcia Márcia
 34
PostgreSQL – Junção
● E retorna somente as linhas em que os dados são iguais.
Nome Nome
Maria Priscila
Maria Gomes
Maria Cláudio
Maria Márcia
Gomes Priscila
Gomes Gomes
Gomes Cláudio
Gomes Márcia
João Priscila
João Gomes
João Cláudio
João Márcia
Márcia Priscila
Márcia Gomes
Márcia Cláudio
Márcia Márcia
 35
PostgreSQL – Junção
● Para facilitar, podemos renomear as tabelas (na consulta!) 
utilizando as.
● Por exemplo:
select * from tabela_A as A 
inner join tabela_B as 
on A.nome=B.nome
 36
PostgreSQL – Junção
● A junção left join retorna todos os registros da tabela da 
esquerda, mesmo não estando na outra tabela…
● Maisos registros em comum com a tabela da direita.
● No caso:
select * from tabela_A left join tabela_B
on tabela_A.nome=tabela_B.nome
 37
PostgreSQL – Junção
● A consulta retornará todos os atributos da tabela_A mais os 
atributos em comum com a tabela_B:
 38
PostgreSQL – Junção
● A junção right join retorna todos os registros da tabela da 
direita, mesmo não estando na outra tabela…
● Mais os registros em comum com a tabela da esquerda.
● No caso:
select * from tabela_A right join tabela_B
on tabela_A.nome=tabela_B.nome
 39
PostgreSQL – Junção
● A consulta retornará todos os atributos da tabela_B mais os 
atributos em comum com a tabela_A:
 40
PostgreSQL – Junção
● A junção full join retorna todos os registros das tabelas, 
mostrando os registros associados.
● No caso:
select * from tabela_A full join tabela_B
on tabela_A.nome=tabela_B.nome
 41
PostgreSQL – Junção
● A consulta retornará todos os atributos da tabela_A e da 
tabela_B:
 42
PostgreSQL – Junção
● E a junção cross join também retorna todos os registros das 
tabelas, mas fazendo a combinação entre eles.
● Nesse caso, não há necessidade de restrições utilizando o 
on:
select * from tabela_A cross join tabela_B
 43
PostgreSQL – Junção
● A consulta retornará todos os atributos da tabela_A 
combinados com os atributos da tabela_B:
 44
PostgreSQL – Junção Natural
● Nessa disciplina vamos focar nas junções naturais...
● Para praticá-la, vamos criar três tabelas: Imóvel, Aluguel e 
Cliente.
Imóvel (codImovel, tipo, endereço)
Cliente (codCliente, nome, idade)
Aluguel (codImovel, codCliente, preço)
● As colunas codImovel e codCliente são chaves primárias nas 
tabelas Imóvel e Cliente, e chaves estrangeiras na tabela 
Aluguel. 
 45
PostgreSQL – Junção Natural
● Criação da tela Imóvel:
● Criação da tabela Aluguel: 
 46
PostgreSQL – Junção Natural
● Criação da tela Aluguel:
● As colunas codImovel e codCliente são declaradas como 
chaves estrangeiras.
● Para tal, é explicitado a qual coluna e a qual tabela essas 
chaves fazem referência.
 47
PostgreSQL – Junção Natural
● Agora vamos inserir valores:
 48
PostgreSQL – Junção Natural
● Para descobrir quem locou imóveis cujo aluguel seja maior 
que 1000 reais, fazemos:
● A consulta irá combinar os dados das tabelas do inner join...
● E retornar as linhas que atendem as restrições, determinadas 
pelo on e pelo and. 
 49
PostgreSQL – Junção Natural
● Para descobrir os tipos e endereços dos imóveis cujo aluguel 
é menor que 500 reais, fazemos:
● Para descobrir os endereços e valores dos alugueis, 
ordenados em ordem crescente de valor de aluguel, fazemos:
 50
PostgreSQL – Junção Natural
● Para descobrir os nomes dos clientes que locaram o imóvel, 
o tipo do imóvel e o valor do aluguel, precisamos fazer a 
junção de 3 tabelas.
● Para tal, basta fazer um inner join após o outro:
 51
PostgreSQL – Junção Natural
● Vamos a outro exemplo! Vamos criar mais três tabelas: 
Veículo, Motorista e Viagem.
create table Veiculo (
id_vec varchar(5),
placa char(7),
ano smallint,
modelo varchar(20),
marca varchar(20),
primary key (id_vec)
)
create table Motorista (
id_motorista varchar(5),
nome varchar (20),
primary key(id_motorista)
)
 52
PostgreSQL – Junção Natural
create table Viagem (
id_viagem varchar(5),
data_ida date,
data_volta date,
hora_ida time,
solicitante varchar(25),
destino varchar(30),
id_motorista varchar(5),
id_vec varchar(5),
primary key(id_viagem),
foreign key (id_motorista) references Motorista 
(id_motorista),
foreign key (id_vec) references Veiculo(id_vec)
)
 53
PostgreSQL – Junção Natural
● E vamos popular as tabelas:
● Motorista:
insert into Motorista values
('M01', 'Mario Falcão'),
('M02', 'Alex Oliveira'),
('M03', 'Pedro Farias')
● Veículo:
insert into Veiculo values
('VE01', 'NNM1234', 2012, 'Corsa', 'Chevrolet'),
('VE02', 'BRA8767', 2014, 'Hilux', 'Toyota'),
('VE03', 'NOE3223', 2010, 'Sentra', 'Nissan'),
('VE04', 'GOL6545', 2011, 'Ônibus', 'Maxbus')
 54
PostgreSQL – Junção Natural
● E, por fim, a tabela Viagem.
insert into Viagem values 
('V01', '03/06/2018', '03/06/2018', '05:30', 'Marcos Oliveira', 
'Mossoró', 'M01', 'VE04'),
('V02', '05/06/2018', '06/06/2018', '08:00', 'Patrícia Laura', 
'Natal', 'M03', 'VE02'),
('V03', '07/06/2018', '09/06/2018', '04:30', 'Letícia Espinele', 
'Fortaleza', 'M03', 'VE03'),
('V04', '07/06/2018', '07/06/2018', '08:00', 'Péricles Souza', 
'Mossoró', 'M02', 'VE01')
 55
PostgreSQL – Junção Natural
insert into Viagem values 
('V05', '08/06/2018', '08/06/2018', '12:30', 'Fábio Gurgel', 
'Mossoró', 'M01', 'VE03'),
('V06', '08/06/2018', '10/06/2018', '15:00', 'Marcos Oliveira', 
'Natal', 'M01', 'VE01'),
('V07', '10/06/2018', '12/06/2018', '09:30', 'Patrícia Laura', 
'Natal', 'M02', 'VE04'),
('V08', '11/06/2018', '11/06/2018', '07:00', 'Felipe Borges', 
'Mossoró', 'M03', 'VE04')
 56
PostgreSQL – Junção Natural
● Com tais tabelas, podemos descobrir os nomes dos 
motoristas que realizaram viagens solicitadas pela servidora 
Patrícia Laura.
● Para realizar a junção natural fazemos:
select nome from Motorista as M inner join 
Viagem as V on M.id_motorista = V.id_motorista 
where solicitante='Patrícia Laura'
 57
PostgreSQL – Junção Natural
● Para descobrir os modelos dos carros utilizados nas viagens 
solicitadas por Fábio Gurgel, fazemos:
select modelo from Veiculo inner join Viagem
on Veiculo.id_vec=Viagem.id_vec
and solicitante='Fábio Gurgel'
 58
PostgreSQL – Junção Natural
● Para descobrir os nomes dos motoristas e as placas dos 
carros utilizados nas viagens solicitadas por Marcos 
Oliveira, fazemos:
select nome, placa from Motorista as M inner join Viagem 
as V on M.id_motorista=V.id_motorista inner join Veiculo 
as Vec on V.id_vec=Vec.id_vec and solicitante='Marcos 
Oliveira'
 59
PostgreSQL – Exercício
● Considerando as tabelas Motorista, Veiculo e Viagem, 
determine um comando SQL para:
● Retornar os nomes de todos os solicitantes que realizaram 
viagens com ''Alex Oliveira''.
● Retornar as datas das viagens realizadas com o carro 
modelo Corsa.
● Retornar os nomes dos motoristas que realizaram viagens 
no dia 05/06/2014.
● Retornar as marcas dos carros que foram usados em 
viagens com horário de saída às 8h.
● Retornar os nomes dos solitantes que tiveram viagens 
realizadas em carro da marca Toyota e com o Motorista 
''Pedro Farias''.
 60
PostgreSQL – Visões
● É possível que ocorra a necessidade de fazer consultas mais 
de uma vez.
● E essas consultas podem ser complexas ou trabalhosas, 
sendo oneroso repeti-las toda vez que necessário.
● Para sanar esse problema foram criadas view (visões).
● Tratam-se de tabelas virtuais, que são geradas 
dinamicamente toda vez que a view é chamada.
 61
PostgreSQL – Visões
● Assim, o SGBD armazena somente a definição da view.
● Ou seja, seu nome e o comando select.
● Quando o usuário chama uma view, o SGBD seleciona os 
dados apropriados a ela.
● As operações que podem ser realizadas nas visões são:
● criar (create view);
● selecionar (select);
● excluir (drop view).
 62
PostgreSQL – Visões
● Considerando as tabelas Motorista, Veículo e Viagem, 
podemos determinar diversas visões.
● Por exemplo, podemos criar uma visão para guardar os 
nomes de todos os solicitantes de viagens:
create view solicitante as select solicitante from Viagem
● Se fizermos o seguinte comando:
select * from solicitante
Veremos todos os dados que fazem parte da visão.
 63
PostgreSQL – Visões
● Repare que os nomes dos atributos da visão são os atributos 
selecionados na definição da view.
● Por exemplo, criando uma view para armazenar as datas de 
ida e volta, fazemos:
create view datas as 
select data_ida, data_volta from Viagem
● Quando selecionamos os dados, vemos que os atributos são 
data_ida e data_volta
select * from datas
 64
PostgreSQL – Visões
● Podemos realizar consultas envolvendo a view e outras 
tabelas. 
● Por exemplo,vamos criar uma view com o id dos motoristas 
que realizaram viagens e os destinos:
create view destinos as 
select id_motorista, destino from Viagem
● Agora vamos realizar uma consulta para descobrir os nomes 
dos motoristas que realizaram viagens para Fortaleza.
 65
PostgreSQL – Visões
● Assim, temos
select nome from Motorista inner join destinos on
Motorista.id_motorista = destinos.id_motorista and
destino = 'Fortaleza'
● Nesse caso, é interessante utilizar a view, pois precisamos de 
somente dois atributos da tabela Viagem.
● Assim, diminui a quantidade de dados do inner join.
 67
PostgreSQL – Funções Data/Hora
● Um tipo de informação comum do nosso dia a dia são as 
datas e as horas.
● Em diversos sistemas, por exemplo, é necessário registrar o 
momento em que usuários realizam acessos.
● Os SGBDs disponibilizam diversas funções de data/hora. São 
elas:
● select current_date
● Seleciona a data corrente.
 68
PostgreSQL – Funções Data/Hora
● select current_time
● Seleciona a hora corrente (considerando até milisegundos).
● select current_timestamp
● Seleciona a data e a hora corrente.
● Pode ser também ''Select now()''
 69
PostgreSQL – Funções Data/Hora
● Podemos ainda selecionar somente partes da data. Por 
exemplo, para selecionar somente o dia:
select date_part('day',current_timestamp)
● Para selecionar somente o mês:
select date_part('month',current_timestamp)
 70
PostgreSQL – Funções Data/Hora
● Para selecionar somente o ano:
select date_part('year',current_timestamp)
● Para selecionar o século:
select date_part('century',current_timestamp)
 71
PostgreSQL – Funções Data/Hora
● Para retornar o dia da semana e o mês fazemos:
select timeofday()
● Quando solicitamos uma data ao SGBD, este retorna no 
padrão dos Estados Unidos: ano-mês-dia.
● No entanto, é possível solicitar ao SGDB que exiba a data no 
padrão brasileiro. Ou seja, dia-mês-ano.
 72
PostgreSQL – Funções Data/Hora
● Para tal, utilizamos a função to_char.
● No caso, fazemos:
select to_char (current_date,'DD-MM-YYYY')
 73
PostgreSQL – Funções Data/Hora
● Ainda trabalhando com datas, podemos adicionar ou subtrair 
dias às datas.
● Por exemplo, podemos adicionar à data atual um prazo de 45 
dias:
select to_char (current_date + interval '45 days',
'DD-MM-YYYY') 
 74
PostgreSQL – Funções Data/Hora
● Podemos também querer saber quantos dias já se passaram 
desde uma determinada data.
● Para tal, precisamos subtrair datas. No caso:
select current_date – date'2014-09-15'
 75
PostgreSQL – Funções Data/Hora
● Perceba que o postgreSQL não atribui um nome à coluna 
retornada.
● Para tal, utilizamos a cláusula 'as'.
● No caso, vamos chamar a coluna de diasPassados
select current_date – date'2014-09-15' as diasPassados
 76
PostgreSQL
● A chave primária é de grande importância para o 
gerenciamento dos dados.
● Pois permite identificar unicamente uma tupla.
● Muitas vezes, esse código não necessita ser uma palavra 
específica.
● Basta somente que seja valores diferentes.
● Nesse caso é possível utilizar o tipo de dado serial.
 77
PostgreSQL
● Os dados seriais são números inteiros.
● Nos quais o SGBD se responsabiliza de fazer um incremento.
● No caso, a cada entrada em uma linha, esse número 
receberá um incremento de x unidades.
● Por padrão, o incremento é de uma unidade.
 78
PostgreSQL
● Por exemplo, suponha que você irá criar uma tabela 
denominada Nomes.
● E essa deve conter os atributos id_nome e nome, onde o 
primeiro é do tipo serial.
● Assim, fazemos:
create table Teste (
id_nome serial,
nome varchar(40),
primary key(id_nome)
)
 79
PostgreSQL
● Na inserção de valores, para o dado serial, passamos como 
parâmetro a palavra-chave ''default''.
● Assim, temos:
insert into Teste values (default, 'Paloma'), 
(default, 'Ricardo')
● Quando selecionamos o conteúdo da tabela, vemos que os 
valores do id_nome foram criados automaticamente.
 80
PostgreSQL
● Outra forma de inserir os valores, sem utilizar o ''default'', é 
determinar em qual atributo o valor será inserido.
● No caso, faremos:
insert into Teste (nome) values ('Fátima'), ('Francisco')
● Selecionando os valores da tabela temos:
 81
PostgreSQL
● É possível determinar como queremos a sequência da coluna 
que será auto-incrementada.
● Para tal, utilizamos a seguinte sintaxe:
create sequence nome_da_sequencia 
increment by valor
minvalue valor_minímo
maxvalue valor_máximo
start with início
● Vamos supor que queremos criar uma sequência que comece 
do 2 e contabilize de 2 em 2.
 82
PostgreSQL
● Para tal, faremos:
create sequence exemplo
increment by 2
minvalue 2
maxvalue 10000
start with 2
● Para criar uma tabela utilizando a sequência criada, fazemos:
create table tabela (
colTeste int default nextval('exemplo'),
nome varchar(30)
)
 83
PostgreSQL
● Para inserir valores na tabela fazemos:
insert into tabela values
(default, 'Marta'),
(default, 'Ricardo')
● Através do comando select vemos que a sequência começou 
do número 2 e está incrementando de 2 em 2.
select * from tabela
 84
PostgreSQL
● Se apagarmos os dados da tabela e inserirmos novos, 
veremos que a sequência continua de onde parou:
delete from tabela
insert into tabela values
(DEFAULT, 'Patrícia'),
(DEFAULT, 'Martins')
● Se for necessário que a sequência retorne ao primeiro valor, 
utilizamos o comando ''alter sequence'' combinado com o 
''restart'':
alter sequence exemplo restart with 2
 85
PostgreSQL
● Podemos usar dados seriais para criar chaves primárias.
● Inclusive combinando letras e números.
● Nesse caso, inserimos os valores na tabela concatenando o 
número serial gerado mais uma letra.
● Por exemplo, vamos criar a seguinte tabela:
create table Aluno (
id_aluno varchar(5),
nome varchar(40),
primary key (id_aluno) 
)
 86
PostgreSQL
● Iremos utilizar a sequência ''exemplo'' criada anteriormente e 
a função netxval().
● Para concatenar uma letra com o número da sequência, 
iremos utilizar a função concat().
● Assim, faremos:
insert into Aluno values 
(concat('A', nextval('exemplo')), 'Paula'),
(concat('A', nextval('exemplo')), 'Marcos')
 87
PostgreSQL
● A concatenação pode ser feita não só na inserção de um 
valor como também nas consultas de dados.
● Por exemplo, com a tabela BD criada anteriormente, 
podemos exibir o nome e a média do aluno.
● No entanto, queremos exibir esses dados na seguinte frase: 
''O aluno (nome) ficou com a média (média)''.
● Dessa forma, teremos:
select concat ('O aluno ', nome, ' ficou com média ', media) 
from BD
 88
PostgreSQL
● A concatenação também pode ser realizada com o operador 
II.
● Utilizando esse operador, o SGBD não atribui nenhum nome 
à coluna retornada. 
● Utilizando o operador 'as', iremos nomear a coluna de Alunos. 
● Nesse caso, faríamos:
select 'O aluno ' || nome || ' ficou com média ' || media as 
Alunos from BD
 89
Contato:
luana.dantas@ufersa.edu.br
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27
	Slide 28
	Slide 29
	Slide 30
	Slide 31
	Slide 32
	Slide 33
	Slide 34
	Slide 35
	Slide 36
	Slide 37
	Slide 38
	Slide 39
	Slide 40
	Slide 41
	Slide 42
	Slide 43
	Slide 44
	Slide 45
	Slide 46
	Slide 47
	Slide 48
	Slide 49
	Slide 50
	Slide 51
	Slide 52
	Slide 53
	Slide 54
	Slide 55
	Slide 56
	Slide 57
	Slide 58
	Slide 59
	Slide 60
	Slide 61
	Slide 62
	Slide 63
	Slide 64
	Slide 65
	Slide 67
	Slide 68
	Slide 69
	Slide 70
	Slide 71
	Slide 72
	Slide 73
	Slide 74
	Slide 75
	Slide 76
	Slide 77
	Slide 78
	Slide 79
	Slide 80
	Slide 81
	Slide 82
	Slide 83
	Slide 84
	Slide 85
	Slide 86
	Slide 87
	Slide 88
	Slide 89

Continue navegando