BANCO DE DADOS - INTRODUÇÃO AO SQL Prof. Angelo Augusto Frozza, M.Sc. [email protected] SQL – STRUTURED QUERY LANGUAGE | Os comandos SQL podem ser agrupados em 3 classes: y DDL – Data Definition Language | y DML – Data Manipulation Language | y Comandos para a Definição de Dados 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: y Database (Base de Dados) y Table (Tabelas) y Index (Indíces) y View (Visões) y Stored Procedures (Procedimentos) y Triggers (Gatilhos) y Domain (Domínios) y Generator (Variáveis Globais) y Exception (Excecões) y User (Usuários) y Role (Grupos de Usuários) SQL – STRUTURED QUERY LANGUAGE | Comandos básicos da Linguagem de Manipulação dos Dados (DML): INSERT y SELECT y UPDATE y DELETE y SQL – STRUTURED QUERY LANGUAGE | PostgreSQL y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y 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 y Exemplo: DELETE FROM filmes WHERE id_filme = 2;