Você está na página 1de 5

Banco de Dados Aula

07
Sábado, 21 de Outubro de 2023

Professor: Wallace Moreira – prof.wallace2010@gmail.com

PostgreSQL
Ferramenta de banco de dados gratuita com os melhores recursos do mercado.
Muito robusto, seguro e com ótimas funcionalidades de programação e administração, é
recomendado para aplicações de médio e grande porte.

Script executado durante a aula

-- Aula 7 BD - 21/10/2023

/*

Estudo de Caso

Uma empresa requer armazenar os dados de seus clientes. Existem dois tipos de
clientes, pessoa física e pessoa jurídica.

Os dados dos clientes pessoa física são: nome, email, renda, endereço, cpf e gênero.

Os dados dos clientes pessoa jurídica são: nome, email, renda, endereço, cnpj e ramo.

**/

/*
Instruções nativas de linha de comando do PostgreSQL (SQL Shell) são iniciadas com \

Comandos da linguagem SQL e suas sub-linguagens, DDL e DML, não sofrem


alteração
na maioria das ferramentas de banco de dados relacionais.

1
Banco de Dados Aula

07
Sábado, 21 de Outubro de 2023

Professor: Wallace Moreira – prof.wallace2010@gmail.com

SQL(Linguagem de Busca Estruturada) - SELECT, FROM, WHERE, JOIN, ORDER


BY, GROUP BY...
- DDL(Linguagem de Definição de Dados) - CREATE, DROP e ALTER.
- DML(Linguagem de Manipulação de Dados) - INSERT, UPDATE e
DELETE.

**/

-- Exibir as bases de dados.


\l

DROP DATABASE aula7;


CREATE DATABASE aula7;

-- Selecionar base de dados.


\c aula7

-- Criar tabelas.
CREATE TABLE cliente (
codCliente INTEGER PRIMARY KEY,
nome VARCHAR(60) NOT NULL,
email VARCHAR(40) NOT NULL,
renda FLOAT NOT NULL);

/*
ON DELETE CASCADE (Deleção em Cascata) - Quando o registro da tabela
referenciada(Cliente) for excluído, o registro
da
tabela relacionada(pessoaFisica) também será excuído.
**/
CREATE TABLE pessoaFisica (
codCliente INTEGER PRIMARY KEY,
cpf CHAR(14) NOT NULL,
sexo CHAR NOT NULL,
FOREIGN KEY(codCliente) REFERENCES cliente (codCliente) ON DELETE
CASCADE);

CREATE TABLE pessoaJuridica (


codCliente INTEGER PRIMARY KEY,
cnpj CHAR(18) NOT NULL,
ramo VARCHAR(20) NOT NULL,
FOREIGN KEY(codCliente) REFERENCES cliente (codCliente) ON DELETE
CASCADE);

CREATE TABLE endereco (


codEndereco INTEGER PRIMARY KEY,
rua VARCHAR(80) NOT NULL,
numero VARCHAR(10) NOT NULL,
cidade VARCHAR(80) NOT NULL,
uf CHAR(2) NOT NULL,
cod_cliente INTEGER NOT NULL UNIQUE,
FOREIGN KEY(cod_cliente) REFERENCES cliente (codCliente));

2
Banco de Dados Aula

07
Sábado, 21 de Outubro de 2023

Professor: Wallace Moreira – prof.wallace2010@gmail.com

-- Exbir tabelas e suas estruturas.

\d

\d cliente
\d pessoaFisica
\d pessoaJuridica
\d endereco

-- SEQUENCE - Objeto utilizado para geração de valores sequenciais.

CREATE SEQUENCE seqcliente;


CREATE SEQUENCE seqend START WITH 101;

-- Inserir dados nas tabelas.

INSERT INTO cliente VALUES(NEXTVAL('seqcliente'), 'Ana', 'ana@uol.com', 4000);


INSERT INTO cliente VALUES(NEXTVAL('seqcliente'), 'Leo', 'leo@uol.com', 5000);
INSERT INTO cliente VALUES(NEXTVAL('seqcliente'), 'Edu', 'edu@uol.com', 3000);
INSERT INTO cliente VALUES(NEXTVAL('seqcliente'), 'Coti', 'coti@info.com', 10000);
INSERT INTO cliente VALUES(NEXTVAL('seqcliente'), 'Xpto', 'xpto@info.com', 8000);

SELECT * FROM cliente;

INSERT INTO pessoaFisica VALUES(1, '123.321.311-33', 'f'),


(2, '222.321.311-04', 'm'),
(3, '333.321.311-62', 'm');

SELECT * FROM pessoaFisica;

INSERT INTO pessoaJuridica VALUES(4, '25.133.323/0001-16', 'EDU'),


(5, '16.034.323/0001-27',
'COM');

SELECT * FROM pessoaJuridica;

INSERT INTO endereco VALUES(NEXTVAL('seqend'), 'Rua s', '318', 'Cidade w', 'RJ', 1),
(NEXTVAL('seqend'), 'Rua d', '231', 'Cidade
e', 'RJ', 4),
(NEXTVAL('seqend'), 'Rua f', '710', 'Cidade
r', 'SP', 2),
(NEXTVAL('seqend'), 'Rua g', '412', 'Cidade
t', 'SP', 5),
(NEXTVAL('seqend'), 'Rua j', '157', 'Cidade
u', 'RJ', 3);

SELECT * FROM endereco;

-- Pesquisas

3
Banco de Dados Aula

07
Sábado, 21 de Outubro de 2023

Professor: Wallace Moreira – prof.wallace2010@gmail.com

SELECT nome, cpf, email, sexo, renda


FROM cliente INNER JOIN pessoaFisica
ON cliente.codCliente = pessoaFisica.codCliente;

SELECT nome, cpf, email, sexo, renda


FROM cliente c INNER JOIN pessoaFisica pf
ON c.codCliente = pf.codCliente
WHERE sexo = 'm';

SELECT nome, cnpj, email, ramo, renda


FROM cliente c INNER JOIN pessoaJuridica pj
ON c.codCliente = pj.codCliente;

SELECT nome, cpf, email, sexo, renda,


rua, numero, cidade, uf
FROM cliente c
INNER JOIN pessoaFisica pf ON c.codCliente = pf.codCliente
INNER JOIN endereco e ON c.codCliente = cod_cliente;

-- Programação no PostgreSQL.

-- Função SQL

CREATE FUNCTION obterDadosCliente(cod INT)


RETURNS VARCHAR(200) AS $$

SELECT 'Nome: ' || nome || ' - Email: ' || email ||


' - Renda: ' || renda
FROM cliente WHERE codCliente = cod;

$$
LANGUAGE SQL;

-- Executar a Função.
SELECT obterDadosCliente(3);
SELECT obterDadosCliente(5);

-- Função PLPGSQL

CREATE FUNCTION calcDesconto(valor FLOAT, porcent FLOAT)


RETURNS FLOAT AS $$
DECLARE
desconto FLOAT;
resultado FLOAT;
BEGIN

desconto = valor * (porcent / 100);

resultado = valor - desconto;

RETURN resultado;
4
Banco de Dados Aula

07
Sábado, 21 de Outubro de 2023

Professor: Wallace Moreira – prof.wallace2010@gmail.com

END;
$$
LANGUAGE PLPGSQL;

-- Execuções da função.
SELECT calcDesconto(100, 5);

SELECT nome, renda,


calcDesconto(renda, 2.33) AS RendaDesconto
FROM cliente;

UPDATE cliente SET renda = calcDesconto(renda, 1.66)


WHERE codCliente = 5;

SELECT * FROM cliente;

Você também pode gostar