2.3. Um Tour pela Linguagem SQL
Os exemplos desta seção estão associados a duas tabelas, paises
e cidades
, como mostrado abaixo:
paises |
|
---|---|
pid |
nome_pais |
1 |
Alemanha |
2 |
Brasil |
cidades |
|||
---|---|---|---|
cid |
nome_cidade |
populacao |
pais_id |
1 |
Ouro Preto |
70227 |
2 |
2 |
Mariana |
58233 |
2 |
1 |
Munster |
291754 |
1 |
1 |
Itabirito |
45449 |
2 |
2.3.1. Esquema das Tabelas
A tabela paises
possui o seguinte esquema:
nome tabela: paises |
||
---|---|---|
colunas |
tipo de dados |
modificadores |
pid |
número inteiro |
faixa de valores na casa das centenas chave primária |
nome_pais |
texto de tamanho variável |
limitado a 50 caracteres |
A tabela cidades
possui o seguinte esquema:
nome tabela: cidades |
||
---|---|---|
colunas |
tipo de dados |
modificadores |
cid |
número inteiro |
faixa de valores na casa dos milhares chave primária |
nome_cidade |
texto de tamanho variável |
limitado a 50 caracterers |
populacao |
número inteiro |
faixa de valores na casa dos bilhões |
pais_id |
número inteiro |
valores devem respeitar o conjunto existente na coluna |
2.3.2. Definição de Dados
Vamos utilizar a linguagem SQL para criar essas duas tabelas:
1. Criando uma tabela denominada paises
:
CREATE TABLE paises
(
pid INTEGER PRIMARY KEY,
nome_pais VARCHAR(50) NOT NULL
);
2. Criando uma tabela denominada cidades
:
CREATE TABLE cidades
(
cid SERIAL PRIMARY KEY,
nome_cidade VARCHAR(50) NOT NULL UNIQUE,
populacao INTEGER,
pid INTEGER,
FOREIGN KEY (pid) REFERENCES paises(pid)
);
2.3.3. Manipulação de Dados
1. Inserindo tuplas na tabela paises
:
INSERT INTO paises (pid, nome_pais) VALUES(1, 'Alemanha');
INSERT INTO paises VALUES(2, 'Brasil');
2. Inserindo tuplas na tabela cidades
:
INSERT INTO cidades (nome_cidade, populacao, pid) VALUES ('Ouro Preto', 70227, 2),
('Mariana', 58233, 2),
('Munster', 291754, 1),
('Itabirito', 45449, 2);
5. Exemplos:
Projeção: nome das cidades e populacao (em milhares)
Solução:
SELECT nome_cidade, trunc(populacao / 1000.0) AS "populacao-milhares" FROM cidades;Seleção Tuplas: cidades acima de 60.000 habitantes (ordenação por população)
Solução:
SELECT nome_cidade, populacao FROM cidades WHERE populacao > 60000;Produto Cartesiano: paises x cidades
Solução:
SELECT * FROM paises, cidades;ou:
SELECT * FROM paises CROSS JOIN cidades;Junção Tabelas: paises x cidades
Solução:
SELECT * FROM paises, cidades WHERE paises.pid = cidades.pid;ou:
SELECT * FROM paises NATURAL JOIN cidades;Agregação: população países
Solução:
SELECT nome_pais, SUM(populacao) AS pop FROM paises, cidades WHERE paises.pid = cidades.pid GROUP BY paises.pid, paises.nome_pais ORDER BY pop DESC;