· 7 years ago · Dec 01, 2018, 02:44 AM
1SELECT D.dnumero, D.dnome, max(F.salario), min(F.salario), avg(F.salario), count(*)
2FROM funcionario F, departamento D
3WHERE F.dno = D.dnumero
4GROUP BY D.dnumero
5ORDER BY D.dnome;
6
7-- mesma coisa :
8
9SELECT *
10FROM funcionario f, func_proj fp
11WHERE f.cpf = fp.cpf;
12
13-- mesma coisa :
14
15SELECT *
16FROM funcionario f INNER JOIN func_proj fp ON f.cpf = fp.cpf;
17
18
19-- observe que o natural join remove colunas duplicadas automaticamente
20
21SELECT *
22FROM funcionario f NATURAL JOIN func_proj fp;
23
24
25-- queremos incluir funcionarios que nao trabalham em nenhum projeto
26SELECT *
27FROM funcionario f LEFT OUTER JOIN func_proj fp ON f.cpf = fp.cpf;
28
29-- queremos só os funcionarios que nao trabalham em nenhum projeto
30SELECT *
31FROM funcionario f LEFT OUTER JOIN func_proj fp ON f.cpf = fp.cpf
32WHERE pno is null;
33
34
35-- vamos parear cada funcionario com seu supervisor
36SELECT f.cpf, f.nome, s.cpf, s.nome
37FROM funcionario f INNER JOIN funcionario s ON f.super_cpf = s.cpf;
38
39-- vamos incluir funcionarios sem supervisor, com left
40SELECT f.cpf, f.nome, s.cpf, s.nome
41FROM funcionario f LEFT OUTER JOIN funcionario s ON f.super_cpf = s.cpf;
42
43
44-- vamos incluir funcionarios sem supervisor, com right
45SELECT f.cpf, f.nome, s.cpf, s.nome
46FROM funcionario f RIGHT OUTER JOIN funcionario s ON f.super_cpf = s.cpf;
47
48-- vamos incluir funcionarios sem supervisor, agora com união left - right
49SELECT f.cpf, f.nome, s.cpf, s.nome
50FROM funcionario f FULL JOIN funcionario s ON f.super_cpf = s.cpf;
51
52-- mesma coisa
53SELECT f.cpf, f.nome, s.cpf, s.nome
54FROM funcionario f FULL OUTER JOIN funcionario s ON f.super_cpf = s.cpf;
55
56
57-- operações de conjuntos: diferença
58(SELECT f.cpf, f.nome, s.cpf, s.nome
59FROM funcionario f LEFT OUTER JOIN funcionario s ON f.super_cpf = s.cpf)
60EXCEPT
61(SELECT f.cpf, f.nome, s.cpf, s.nome
62FROM funcionario f INNER JOIN funcionario s ON f.super_cpf = s.cpf);
63
64-- operações de conjuntos: intersecção
65(SELECT f.cpf, f.nome, s.cpf, s.nome
66FROM funcionario f LEFT OUTER JOIN funcionario s ON f.super_cpf = s.cpf)
67INTERSECT
68(SELECT f.cpf, f.nome, s.cpf, s.nome
69FROM funcionario f INNER JOIN funcionario s ON f.super_cpf = s.cpf);
70
71
72-- operação de conjuntos: união. Provando que full = left + right
73(SELECT f.cpf, f.nome, s.cpf, s.nome
74FROM funcionario f FULL OUTER JOIN funcionario s ON f.super_cpf = s.cpf)
75EXCEPT
76((SELECT f.cpf, f.nome, s.cpf, s.nome
77FROM funcionario f LEFT OUTER JOIN funcionario s ON f.super_cpf = s.cpf)
78UNION
79(SELECT f.cpf, f.nome, s.cpf, s.nome
80FROM funcionario f RIGHT OUTER JOIN funcionario s ON f.super_cpf = s.cpf));
81
82-- criando uma tabela
83CREATE TABLE IF NOT EXISTS teste1 (a integer);
84CREATE TABLE IF NOT EXISTS teste2 (a integer);
85--INSERT INTO teste1 VALUES (1), (2), (3);
86--INSERT INTO teste2 VALUES (2), (3), (4), (4);
87
88
89-- Perceba que o padrão é produzir um conjunto ( sem tuplas repetidas )
90(SELECT *
91FROM teste1)
92UNION
93(SELECT *
94FROM teste2);
95
96-- Não vamos eliminar tuplas repetidas
97(SELECT *
98FROM teste1)
99UNION ALL
100(SELECT *
101FROM teste2);
102
103
104(SELECT *
105FROM teste1)
106INTERSECT ALL
107(SELECT *
108FROM teste2);
109
110(SELECT *
111FROM teste1)
112EXCEPT ALL
113(SELECT *
114FROM teste2);
115
116
117(SELECT pnumero, pnome
118FROM(funcionario f JOIN func_proj fp ON f.cpf = fp.cpf)
119 JOIN projeto p ON fp.pno = p.pnumero
120WHERE f.nome = 'Franklin')
121UNION
122(SELECT pnumero, pnome
123FROM (funcionario f JOIN departamento d ON f.cpf = d.chefia_cpf)
124JOIN projeto p ON d.dnumero = p.dnum
125 WHERE f.nome = 'Franklin');