-
Notifications
You must be signed in to change notification settings - Fork 0
/
views.sql
89 lines (62 loc) · 2.21 KB
/
views.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
SELECT numero, nome, ativo FROM banco;
--VIEW SIMPLES
CREATE OR REPLACE VIEW vw_bancos AS(
SELECT numero, nome, ativo
FROM banco
);
SELECT numero, nome, ativo FROM vw_bancos;
CREATE OR REPLACE VIEW vw_bancos_2 (banco_numero, banco_nome, banco_ativo) AS (
SELECT numero, nome, ativo FROM banco
);
SELECT banco_numero, banco_nome, banco_ativo FROM vw_bancos_2;
--INSERT
INSERT INTO vw_bancos_2 (banco_numero, banco_nome, banco_ativo)
VALUES (51, 'Banco Boa Ideia', TRUE);
SELECT banco_numero, banco_nome, banco_ativo FROM vw_bancos_2 WHERE banco_numero = 51;
SELECT numero, banco, ativo FROM banco WHERE numero = 51;
--UPDATE
UPDATE vw_bancos_2 SET banco_ativo = FALSE WHERE banco_numero = 51;
--DELETE
DELETE FROM vw_bancos_2 WHERE banco_numero = 51;
--VIEW TEMPORÁRIA
CREATE OR REPLACE TEMPORARY VIEW vw_agencia AS (
SELECT nome FROM agencia
);
SELECT nome FROM vw_agencia;
--WHIT OPTIONS
CREATE OR REPLACE VIEW vw_bancos_ativos AS (
SELECT numero, nome, ativo FROM banco
WHERE ativo IS TRUE
);
INSERT INTO vw_bancos_ativos (numero, nome, ativo)
VALUES (51, 'Banco Boa Ideia', FALSE);
CREATE OR REPLACE VIEW vw_bancos_com_a AS (
SELECT numero, nome, ativo
FROM vw_bancos_ativos
WHERE nome ILIKE 'a%'
) WITH CASCADED CHECK OPTION;
INSERT INTO vw_bancos_com_a (numero, nome, ativo) VALUES (340,'Alfa Omega',FALSE);
SELECT * FROM vw_bancos_com_a;
--VIEW RECURSIVE
CREATE TABLE IF NOT EXISTS funcionarios(
id SERIAL,
nome VARCHAR(50),
gerente INTEGER,
PRIMARY KEY (id),
FOREIGN KEY (gerente) REFERENCES funcionarios(id)
);
INSERT INTO funcionarios (nome, gerente) VALUES ('Ancelmo', null);
INSERT INTO funcionarios (nome, gerente) VALUES ('Beatriz', 1);
INSERT INTO funcionarios (nome, gerente) VALUES ('Magno', 1);
INSERT INTO funcionarios (nome, gerente) VALUES ('Cremilda', 2);
INSERT INTO funcionarios (nome, gerente) VALUES ('Wagner', 4);
SELECT id, nome, gerente FROM funcionarios;
CREATE OR REPLACE RECURSIVE VIEW vw_func (id, gerente, funcionario) AS (
SELECT id, gerente, nome FROM funcionarios
WHERE gerente IS NULL
UNION ALL
SELECT funcionarios.id, funcionarios.gerente, funcionarios.nome
FROM funcionarios
JOIN vw_func ON vw_func.id = funcionarios.gerente
);
SELECT id, gerente, funcionario FROM vw_func;