BANCO DE DADOS
- INTRODUÇÃO AO SQL
Prof. Angelo Augusto Frozza, M.Sc.
frozza@ifc-camboriu.edu.br
SQL – STRUTURED QUERY LANGUAGE
Os comandos SQL podem ser agrupados em 3 classes:
DDL – Data Definition Language
Comandos para a Definição de Dados
DML – Data Manipulation Language
Comandos para a Manipulação de Dados
DCL – Data Control Language
Comandos para o Controle do Gerenciador, Conexão e Usuário
SQL – STRUTURED QUERY LANGUAGE
Objetos manipuláveis em um Banco de Dados:
Database (Base de Dados)
Table (Tabelas)
Index (Indíces)
View (Visões)
Stored Procedures (Procedimentos)
Triggers (Gatilhos)
Domain (Domínios)
Generator (Variáveis Globais)
Exception (Excecões)
User (Usuários)
Role (Grupos de Usuários)
SQL – STRUTURED QUERY LANGUAGE
Comandos básicos da Linguagem de Manipulação dos Dados
(DML):
INSERT
SELECT
UPDATE
DELETE
SQL – STRUTURED QUERY LANGUAGE
PostgreSQL
Documentação
http://pgdocptbr.sourceforge.net/pg82/reference.html
SQL – STRUTURED QUERY LANGUAGE
Inserir registro em uma tabela
INSERT INTO tabela
[ ( coluna [, ...] ) ]
{ DEFAULT VALUES | VALUES (
{ expressão | DEFAULT } [, ...] )
[, ...] | consulta }
[ RETURNING * | expressão_de_saída
[ AS nome_de_saída ] [, ...] ]
SQL – STRUTURED QUERY LANGUAGE
Inserir registro em uma tabela
INSERT INTO paises (pais, nacionalidade)
VALUES ('Brasil', 'Brasileiro');
INSERT INTO paises (id_pais, pais, nacionalidade)
VALUES (DEFAULT, 'Mexico', 'Mexicano');
INSERT INTO paises
VALUES (DEFAULT, 'Venezuela', 'Venezuelano');
SQL – STRUTURED QUERY LANGUAGE
Inserir registro em uma tabela
INSERT INTO paises (pais, nacionalidade)
VALUES ('Uruguai', 'Uruguaio')
RETURNING *;
INSERT INTO paises
VALUES (DEFAULT, 'Guiana Francesa', 'Guianense')
RETURNING id_pais;
INSERT INTO paises
VALUES (DEFAULT, 'Guiana (República
Cooperativa da Guiana)', 'Guianês')
RETURNING id_pais;
SQL – STRUTURED QUERY LANGUAGE
Inserir registro em uma tabela
Vários registros na mesma linha
INSERT INTO paises (pais, nacionalidade)
VALUES ('Canadá', 'Canadense'),
('Estados Unidos', 'Americano') ,
('Bolívia', 'Boliviano');
INSERT INTO paises (pais, nacionalidade)
VALUES ('Franca', 'Frances'),
('Alemanha', 'Alemao') ,
('Italia', 'Italiano')
RETURNING id_pais;
EXERCÍCIO DE FIXAÇÃO
INSERT
Como exercício de fixação, crie registros para as
tabelas do banco de dados modelo, conforme as
instruções repassadas pelo professor.
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta todos os registros e campos de uma tabela:
SELECT * FROM tabela;
select * from paises;
Consulta apenas alguns campos da tabela:
SELECT campo1, campo2, ..., campoN FROM tabela;
select id_filme, titulo, genero from filmes;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta com ordenação:
SELECT * FROM tabela ORDER BY campo;
SELECT campos FROM tabela ORDER BY campo;
SELECT * FROM filmes ORDER BY titulo;
SELECT id_filme, titulo, genero FROM filmes ORDER
BY genero;
SELECT id_filme, titulo, genero FROM filmes ORDER
BY genero, titulo;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta com ordenação crescente ou decrescente:
SELECT * FROM tabela ORDER BY campo ASC | DESC;
SELECT id_filme, titulo, genero FROM filmes ORDER
BY genero, titulo DESC;
SELECT id_filme, titulo, genero FROM filmes ORDER
BY id_filme DESC;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta com filtro de valores:
SELECT * FROM tabela WHERE campo = ?;
SELECT id_filme, titulo, genero FROM filmes WHERE
genero = 3;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta com filtro de valores:
SELECT * FROM tabela
WHERE campo1 = ? AND campo2 = ?;
SELECT * FROM tabela
WHERE campo1 <> ? OR campo2 = ?;
SELECT id_filme, titulo, genero FROM filmes WHERE
genero = 3 AND id_filme > 15;
SELECT id_filme, titulo, genero FROM filmes WHERE
genero <> 3 OR id_filme > 15;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta com filtro de texto aproximados:
SELECT * FROM tabela
WHERE campo1 like ‘...%...’;
SELECT id_filme, titulo, genero FROM filmes
WHERE titulo like 'a%’;
SELECT id_filme, titulo, genero FROM filmes
WHERE titulo like 'a%’ OR titulo like ‘A%’ ;
SELECT id_filme, titulo, genero FROM filmes
WHERE titulo like ‘%o’;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta com filtro de texto aproximados:
SELECT * FROM tabela
WHERE campo1 like ‘_...’;
O SQL substitui o ‘_’ (underline) por qualquer
caracter.
SELECT id_filme, titulo, genero FROM filmes
WHERE titulo = ‘_caro%’;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta com limite de registros:
SELECT * FROM tabela LIMIT n;
SELECT id_filme, titulo, genero FROM filmes
LIMIT 5;
SELECT id_filme, titulo, genero
FROM filmes
ORDER BY titulo LIMIT 5;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta agrupando os valores:
SELECT * FROM tabela GROUP BY campo;
SELECT genero FROM filmes
GROUP BY genero;
SELECT ano_lancamento FROM filmes
GROUP BY ano_lancamento;
SELECT genero, ano_lancamento FROM filmes
GROUP BY genero, ano_lancamento;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta agrupando os valores e contando registros:
SELECT COUNT(*) FROM tabela GROUP BY campo;
SELECT COUNT(*), genero FROM filmes
GROUP BY genero ORDER BY COUNT(*);
SELECT COUNT(*), ano_lancamento FROM filmes
GROUP BY ano_lancamento;
SELECT COUNT(*), genero, ano_lancamento FROM filmes
GROUP BY genero, ano_lancamento;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta alterando o nome dos campos:
SELECT campo AS apelido FROM tabela GROUP BY campo;
SELECT COUNT(*) AS qtde, genero FROM filmes
GROUP BY genero ORDER BY COUNT(*);
SELECT COUNT(*) AS qtde, ano_lancamento FROM filmes
GROUP BY ano_lancamento;
SELECT COUNT(*) AS qtde, genero,
ano_lancamento AS lancamento FROM filmes
GROUP BY genero, ano_lancamento;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta somando valores:
SELECT SUM(campo) FROM tabela;
SELECT SUM(campo) AS apelido FROM tabela;
SELECT SUM(valor) AS total_locacao FROM locacao;
SELECT codigo AS cliente,
SUM(valor) AS total_locacao
FROM locacao
WHERE codigo = 1
GROUP BY codigo;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consultar dados de mais de uma tabela:
SELECT * FROM tabela_A, tabela_B;
SELECT a.*, b.* FROM tabela_A a, tabela_B b;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Consulta registros em um intervalo de datas:
SELECT campos
FROM tabela
WHERE campo_data
BETWEEN data_inicio AND data_fim;
SELECT count(*)
FROM locacao
WHERE data_hora_locacao
BETWEEN ’01-04-2011’ AND ’09-04-2011’;
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Outras cláusulas interessantes:
union
intersect
except
join
left join
right join
full join
cross join
having
distinct
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Operador UNION (união):
Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9)
SELECT * FROM A
UNION
SELECT * FROM B;
O operador UNION retorna os registros selecionados em ambas as
consultas, eliminando os registros duplicados:
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Operador UNION ALL:
Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9)
SELECT * FROM A
UNION ALL
SELECT * FROM B;
O operador UNION ALL retorna TODOS os registros selecionados em
ambas as consultas, SEM REMOVER os registros duplicados:
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Operador INTERSECT (intersecção):
Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9)
SELECT * FROM A
INTERSECT
SELECT * FROM B;
O operador INTERSECT retorna APENAS os registros comuns em ambas
as consultas:
SQL – STRUTURED QUERY LANGUAGE
Consultar dados em uma tabela
Operador EXCEPT (exceto):
Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9)
SELECT * FROM A
EXCEPT
SELECT * FROM B;
O operador EXCEPT retorna os registros presentes no primeiro conjunto,
MENOS os registros presentes no segundo conjunto:
SQL – STRUTURED QUERY LANGUAGE
Atualizar dados
UPDATE [ ONLY ] tabela [ [ AS ] aliás ]
SET { coluna = { expressão | DEFAULT } |
( coluna [, ...] ) =
( { expressão | DEFAULT } [, ...] ) }
[, ...]
[ FROM lista_do_from ]
[ WHERE condição ]
[ RETURNING * |
expressão_de_saída [ AS nome_de_saída ] [, ...] ]
SQL – STRUTURED QUERY LANGUAGE
Atualizar dados
Alterar dados em uma tabela
UPDATE filmes
SET ano_lancamento = 2011,
faixa_etaria = 1,
titulo = 'Rio',
observacoes = 'Filme brasileiro',
genero = 1,
id_tipo = 1
WHERE id_filme = 1;
SQL – STRUTURED QUERY LANGUAGE
Atualizar dados
Alterar dados em uma tabela retornando um campo
UPDATE filmes
SET ano_lancamento = 2011,
faixa_etaria = 1,
titulo = 'Rio',
observacoes = 'Filme brasileiro',
genero = 1,
id_tipo = 1
WHERE id_filme = 1
RETURNING id_filme;
SQL – STRUTURED QUERY LANGUAGE
Exclusão de registros
DELETE FROM [ ONLY ] tabela [ [ AS ] aliás ]
[ USING lista_do_using ]
[ WHERE condição ]
[ RETURNING * | expressão_de_saída [ AS
nome_de_saída ] [, ...] ]
SQL – STRUTURED QUERY LANGUAGE
Exclusão de registros
Exemplo:
DELETE FROM filmes
WHERE id_filme = 2;

Comandos DML

  • 1.
    BANCO DE DADOS -INTRODUÇÃO AO SQL Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br
  • 2.
    SQL – STRUTUREDQUERY LANGUAGE Os comandos SQL podem ser agrupados em 3 classes: DDL – Data Definition Language Comandos para a Definição de Dados DML – Data Manipulation Language Comandos para a Manipulação de Dados DCL – Data Control Language Comandos para o Controle do Gerenciador, Conexão e Usuário
  • 3.
    SQL – STRUTUREDQUERY LANGUAGE Objetos manipuláveis em um Banco de Dados: Database (Base de Dados) Table (Tabelas) Index (Indíces) View (Visões) Stored Procedures (Procedimentos) Triggers (Gatilhos) Domain (Domínios) Generator (Variáveis Globais) Exception (Excecões) User (Usuários) Role (Grupos de Usuários)
  • 4.
    SQL – STRUTUREDQUERY LANGUAGE Comandos básicos da Linguagem de Manipulação dos Dados (DML): INSERT SELECT UPDATE DELETE
  • 5.
    SQL – STRUTUREDQUERY LANGUAGE PostgreSQL Documentação http://pgdocptbr.sourceforge.net/pg82/reference.html
  • 6.
    SQL – STRUTUREDQUERY LANGUAGE Inserir registro em uma tabela INSERT INTO tabela [ ( coluna [, ...] ) ] { DEFAULT VALUES | VALUES ( { expressão | DEFAULT } [, ...] ) [, ...] | consulta } [ RETURNING * | expressão_de_saída [ AS nome_de_saída ] [, ...] ]
  • 7.
    SQL – STRUTUREDQUERY LANGUAGE Inserir registro em uma tabela INSERT INTO paises (pais, nacionalidade) VALUES ('Brasil', 'Brasileiro'); INSERT INTO paises (id_pais, pais, nacionalidade) VALUES (DEFAULT, 'Mexico', 'Mexicano'); INSERT INTO paises VALUES (DEFAULT, 'Venezuela', 'Venezuelano');
  • 8.
    SQL – STRUTUREDQUERY LANGUAGE Inserir registro em uma tabela INSERT INTO paises (pais, nacionalidade) VALUES ('Uruguai', 'Uruguaio') RETURNING *; INSERT INTO paises VALUES (DEFAULT, 'Guiana Francesa', 'Guianense') RETURNING id_pais; INSERT INTO paises VALUES (DEFAULT, 'Guiana (República Cooperativa da Guiana)', 'Guianês') RETURNING id_pais;
  • 9.
    SQL – STRUTUREDQUERY LANGUAGE Inserir registro em uma tabela Vários registros na mesma linha INSERT INTO paises (pais, nacionalidade) VALUES ('Canadá', 'Canadense'), ('Estados Unidos', 'Americano') , ('Bolívia', 'Boliviano'); INSERT INTO paises (pais, nacionalidade) VALUES ('Franca', 'Frances'), ('Alemanha', 'Alemao') , ('Italia', 'Italiano') RETURNING id_pais;
  • 10.
    EXERCÍCIO DE FIXAÇÃO INSERT Comoexercício de fixação, crie registros para as tabelas do banco de dados modelo, conforme as instruções repassadas pelo professor.
  • 11.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta todos os registros e campos de uma tabela: SELECT * FROM tabela; select * from paises; Consulta apenas alguns campos da tabela: SELECT campo1, campo2, ..., campoN FROM tabela; select id_filme, titulo, genero from filmes;
  • 12.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta com ordenação: SELECT * FROM tabela ORDER BY campo; SELECT campos FROM tabela ORDER BY campo; SELECT * FROM filmes ORDER BY titulo; SELECT id_filme, titulo, genero FROM filmes ORDER BY genero; SELECT id_filme, titulo, genero FROM filmes ORDER BY genero, titulo;
  • 13.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta com ordenação crescente ou decrescente: SELECT * FROM tabela ORDER BY campo ASC | DESC; SELECT id_filme, titulo, genero FROM filmes ORDER BY genero, titulo DESC; SELECT id_filme, titulo, genero FROM filmes ORDER BY id_filme DESC;
  • 14.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta com filtro de valores: SELECT * FROM tabela WHERE campo = ?; SELECT id_filme, titulo, genero FROM filmes WHERE genero = 3;
  • 15.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta com filtro de valores: SELECT * FROM tabela WHERE campo1 = ? AND campo2 = ?; SELECT * FROM tabela WHERE campo1 <> ? OR campo2 = ?; SELECT id_filme, titulo, genero FROM filmes WHERE genero = 3 AND id_filme > 15; SELECT id_filme, titulo, genero FROM filmes WHERE genero <> 3 OR id_filme > 15;
  • 16.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta com filtro de texto aproximados: SELECT * FROM tabela WHERE campo1 like ‘...%...’; SELECT id_filme, titulo, genero FROM filmes WHERE titulo like 'a%’; SELECT id_filme, titulo, genero FROM filmes WHERE titulo like 'a%’ OR titulo like ‘A%’ ; SELECT id_filme, titulo, genero FROM filmes WHERE titulo like ‘%o’;
  • 17.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta com filtro de texto aproximados: SELECT * FROM tabela WHERE campo1 like ‘_...’; O SQL substitui o ‘_’ (underline) por qualquer caracter. SELECT id_filme, titulo, genero FROM filmes WHERE titulo = ‘_caro%’;
  • 18.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta com limite de registros: SELECT * FROM tabela LIMIT n; SELECT id_filme, titulo, genero FROM filmes LIMIT 5; SELECT id_filme, titulo, genero FROM filmes ORDER BY titulo LIMIT 5;
  • 19.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta agrupando os valores: SELECT * FROM tabela GROUP BY campo; SELECT genero FROM filmes GROUP BY genero; SELECT ano_lancamento FROM filmes GROUP BY ano_lancamento; SELECT genero, ano_lancamento FROM filmes GROUP BY genero, ano_lancamento;
  • 20.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta agrupando os valores e contando registros: SELECT COUNT(*) FROM tabela GROUP BY campo; SELECT COUNT(*), genero FROM filmes GROUP BY genero ORDER BY COUNT(*); SELECT COUNT(*), ano_lancamento FROM filmes GROUP BY ano_lancamento; SELECT COUNT(*), genero, ano_lancamento FROM filmes GROUP BY genero, ano_lancamento;
  • 21.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta alterando o nome dos campos: SELECT campo AS apelido FROM tabela GROUP BY campo; SELECT COUNT(*) AS qtde, genero FROM filmes GROUP BY genero ORDER BY COUNT(*); SELECT COUNT(*) AS qtde, ano_lancamento FROM filmes GROUP BY ano_lancamento; SELECT COUNT(*) AS qtde, genero, ano_lancamento AS lancamento FROM filmes GROUP BY genero, ano_lancamento;
  • 22.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta somando valores: SELECT SUM(campo) FROM tabela; SELECT SUM(campo) AS apelido FROM tabela; SELECT SUM(valor) AS total_locacao FROM locacao; SELECT codigo AS cliente, SUM(valor) AS total_locacao FROM locacao WHERE codigo = 1 GROUP BY codigo;
  • 23.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consultar dados de mais de uma tabela: SELECT * FROM tabela_A, tabela_B; SELECT a.*, b.* FROM tabela_A a, tabela_B b;
  • 24.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Consulta registros em um intervalo de datas: SELECT campos FROM tabela WHERE campo_data BETWEEN data_inicio AND data_fim; SELECT count(*) FROM locacao WHERE data_hora_locacao BETWEEN ’01-04-2011’ AND ’09-04-2011’;
  • 25.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Outras cláusulas interessantes: union intersect except join left join right join full join cross join having distinct
  • 26.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Operador UNION (união): Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9) SELECT * FROM A UNION SELECT * FROM B; O operador UNION retorna os registros selecionados em ambas as consultas, eliminando os registros duplicados:
  • 27.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Operador UNION ALL: Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9) SELECT * FROM A UNION ALL SELECT * FROM B; O operador UNION ALL retorna TODOS os registros selecionados em ambas as consultas, SEM REMOVER os registros duplicados:
  • 28.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Operador INTERSECT (intersecção): Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9) SELECT * FROM A INTERSECT SELECT * FROM B; O operador INTERSECT retorna APENAS os registros comuns em ambas as consultas:
  • 29.
    SQL – STRUTUREDQUERY LANGUAGE Consultar dados em uma tabela Operador EXCEPT (exceto): Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9) SELECT * FROM A EXCEPT SELECT * FROM B; O operador EXCEPT retorna os registros presentes no primeiro conjunto, MENOS os registros presentes no segundo conjunto:
  • 30.
    SQL – STRUTUREDQUERY LANGUAGE Atualizar dados UPDATE [ ONLY ] tabela [ [ AS ] aliás ] SET { coluna = { expressão | DEFAULT } | ( coluna [, ...] ) = ( { expressão | DEFAULT } [, ...] ) } [, ...] [ FROM lista_do_from ] [ WHERE condição ] [ RETURNING * | expressão_de_saída [ AS nome_de_saída ] [, ...] ]
  • 31.
    SQL – STRUTUREDQUERY LANGUAGE Atualizar dados Alterar dados em uma tabela UPDATE filmes SET ano_lancamento = 2011, faixa_etaria = 1, titulo = 'Rio', observacoes = 'Filme brasileiro', genero = 1, id_tipo = 1 WHERE id_filme = 1;
  • 32.
    SQL – STRUTUREDQUERY LANGUAGE Atualizar dados Alterar dados em uma tabela retornando um campo UPDATE filmes SET ano_lancamento = 2011, faixa_etaria = 1, titulo = 'Rio', observacoes = 'Filme brasileiro', genero = 1, id_tipo = 1 WHERE id_filme = 1 RETURNING id_filme;
  • 33.
    SQL – STRUTUREDQUERY LANGUAGE Exclusão de registros DELETE FROM [ ONLY ] tabela [ [ AS ] aliás ] [ USING lista_do_using ] [ WHERE condição ] [ RETURNING * | expressão_de_saída [ AS nome_de_saída ] [, ...] ]
  • 34.
    SQL – STRUTUREDQUERY LANGUAGE Exclusão de registros Exemplo: DELETE FROM filmes WHERE id_filme = 2;