SQL Linguagem de Manipulação de Dados SQL DML SQL DML. Exemplo Modelo Relacional. Exemplo ME-R SQL DML CONTINUAÇÃO...

Documentos relacionados
Exercício Aula Passada. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

Roteiro. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

Avisos. SQL: Visões. Roteiro SELECT. Suporte de SQL para OLAP SQL DML CONTINUAÇÃO CONSULTAS AVANÇADAS. Cronograma das próximas aulas

Roteiro. SQL: Visões. Suporte de SQL para OLAP SELECT. Detalhando GROUP BY SQL DML CONTINUAÇÃO CONSULTAS AVANÇADAS. Consultas Avançadas Visões

GBC043 Sistemas de Banco de Dados

Discussão exercício aula 18. SQL Linguagem de Manipulação de Dados. Discussão exercício aula 18. Discussão exercício aula 18 SQL.

SQL-99: Esquema de BD EMPRESA

Apresentação Modelo e SQL. André Luiz Montevecchi

SQL (Tópicos) Structured Query Language

SQL DML. SQL Linguagem de Manipulação de Dados SELECT SELECT SELECT SELECT

Linguagem de Consulta - SQL

ANÁLISE E PROJETO DE BANCO DE DADOS

E-BOOK GUIA RÁPIDO DE SQL W W W. T R E I N A W E B.C O M. B R

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

IMPLEMENTAÇÃO DE BANCO DE DADOS

Banco de Dados I. Aula 16 - Prof. Bruno Moreno 04/11/2011

BCD29008 Banco de dados

Fundamentos de SQL. Curso: Técnico em Redes de Computadores Disciplina: Tecnologias e Linguagem de Banco de dados Professor: Rodrigo da Rocha

Linguagem de Consulta Estruturada SQL- DML

Rápida revisão do Modelo Relacional

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013

MODELAGEM DE DADOS - INTRODUÇÃO AO SQL: DML. Prof. Angelo Augusto Frozza, M.Sc.

BASES DE DADOS I LTSI/2. Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011

Linguagem SQL. ENG1518 Sistemas de Informação Gerenciais Prof. Marcos Villas

Prof. Fabiano Taguchi

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL

Banco de Dados Notas de Aula Consultas em SQL Prof. Dr. Daniel A. Furtado

Marcelo Henrique dos Santos

Agenda. Linguagem de Consulta SQL. 1. Introdução Histórico. 1. Introdução BD Relacionais

Banco de Dados. Prof. Dr. Joel da Silva SQL - Introdução

- Um "query block" permite a implementação das operações de selecção, projecção e junção da álgebra relacional.

Comandos de Manipulação

Consulta sobre múltiplas relações

Preparação criar tabela. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 12/11/2018

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 17. Escola Politécnica da Universidade de São Paulo

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Aula de SQL Comandos DDL. André Luiz de Oliveira Eduardo Raul Hruschka

BANCO DE DADOS. Para a criação de um banco de dados, através de scripts SQL, deve-se usar a seguinte sintaxe: CREATE DATABASE <nome_banco_de_dados>

Exame de Recurso de Base de Dados Universidade do Algarve 03/Fev/2005, (duração: 2 horas)

MySql. Introdução a MySQL. Andréa Garcia Trindade

Introdução ao PostgreSQL

A U L A 9 F U N Ç Õ E S A G R E G A D A S E C Á L C U L O S

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

Manipulação de Dados com SQL

MODELAGEM DE DADOS -INTRODUÇÃO AO SQL: DML. Prof. Angelo Augusto Frozza, M.Sc.

Projeto de Banco de Dados

Utilizando o Postgres - comandos SQL para a manipulação de dados

Linguagem de pesquisa declarativa para banco de dados relacional; 1ª Versão - Desenvolvida pela IBM no laboratório de pesquisa de San José;

Linguagem SQL Comando SELECT Agrupamento de Resultados

Consultas SQL. Andre Noel

PROGRAMA. 3.SQL Básico. 3.1 Criação de tabelas 3.2 Queries simples 3.3 Subqueries 3.4 Agregação. Prof. Dr. Marcos Tsuzuki

SQL. Prof. Msc Denival A. dos Santos

As Instruções DML. As Instruções de manipulação de dados(dml) em SQL são representados por: Modificam o estado do banco de dados:

Conceitos SQL SQL 19/03/2017 O que é dado? O que é BD? O que é uma informação? O que é SGBD? O que é SQL? O que é BD? O que é SGBD?

SQL. Agregações e agrupamentos. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática

Álgebra Relacional e SQL

SQL DML. Frederico D. Bortoloti

Banco de Dados. Professora: Luciana Faria

Banco de Dados I. Prof. Diego Buchinger. Profa. Rebeca Schroeder Freitas Prof. Fabiano Baldo.

Linguagem SQL. Comandos Básicos

BANCO DE DADOS PARA WEB

Bancos (Bases) de Dados

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

SQL. Prof. Roger Cristhian Gomes

A cláusula order by permite ordenar tuplos exemplo: listar por ordem alfabética os nomes dos clientes com empréstimo na agência de Perryridge

SQL BÁSICO. Luiz Antônio Vivacqua Corrêa Meyer

'%'! $!0" $ 8 ' %%! % '! $ $$% + ' %!%$/)!'4!+,"/)!)+,/)% *! +,"0''% * %$!*!$$ #!"%&%'%'%$! "94(# ' %'$%$$$%0%$%' *!% %%%'!**% > %% %%!31?

SQL Básica DML. Prof. Marcos A. Schreiner. 22 de outubro de Curso de Licenciatura em Computação

Oracle Database 11g: Introdução à Linguagem SQL Novo

BCD29008 Banco de Dados

Sintaxe do comando SELECT

AULA 8 EXEMPLOS CRIAR AS TABELAS PROPOSTAS NA AULA E INSERIR OS REGISTROS SUGERIDOS

saída durante o runtime Usando Functions de uma Única Linha para Personalizar Relatórios Mostrar as diferenças entre as functions SQL de uma única

Introdução ao Banco de Dados. Banco de Dados

Múltiplas Tabelas. Disciplina de Banco de Dados

SQL PostgreSQL. I Criação de Tabelas. Disciplina: SCC0241 Bases de Dados Professor: Eduardo Hruschka Estagiária PAE: Dayse de Almeida

Introdução ao SQL. Aécio Costa

SQL. Prof. Márcio Bueno.

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

Aula 10 BD 1 SQL Parte 2. Profa. Elaine Faria UFU

Ordenação de tuplos order by

Orientações. Transações - PostgreSQL. Relembrando: Propriedades desejáveis. Abrir Prompt de comando ROLLBACK

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Objetos Persistentes. Objetos Persistentes: são objetos que requerem armazenamento persistente.

TRABALHO DE DEPENDÊNCIA ETAPA 2

SQL S Q L. Introdução. Enfoques de SQL. SQL - Origem/Histórico. Usos de SQL. SQL - Vantagens. Gerenciamento de Dados e Informação

Básico da Linguagem SQL. Definição de Esquemas em SQL. SQL(Structured Query Language)

ORACLE 11 G INTRODUÇÃO AO ORACLE, SQL,PL/SQL

Introdução a Bancos de Dados

SQL S Q L. Introdução. Enfoques de SQL. SQL - Origem/Histórico. Usos de SQL. SQL - Vantagens. Banco de Dados. Fernando Fonseca Ana Carolina

Conceitos básicos. Funcionario SIAPE Nome Lotacao Cargo Salario Admissao

Manipulando a base de dados

Definida pelo American National Standard Institute (ANSI) em 1986

Linguagem de Consulta Estruturada SQL- DML

Transcrição:

Ciência da Computação GBC043 Sistemas de Banco de Dados SQL Linguagem de Manipulação de Dados Profa. Maria Camila Nardini Barioni camila.barioni@facom.ufu.br Bloco B - sala 1B137 SQL DML CONTINUAÇÃO... 1 semestre de 2019 14 SQL DML SELECT... FROM... WHERE... lista atributos de uma ou mais tabelas de acordo com alguma condição INSERT INTO... insere dados em uma tabela DELETE FROM... WHERE... remove dados de tabelas já existentes UPDATE... SET... WHERE... altera dados específicos de uma tabela SQL DML SELECT... FROM... WHERE... lista atributos de uma ou mais tabelas de acordo com alguma condição INSERT INTO... insere dados em uma tabela DELETE FROM... WHERE... remove dados de tabelas já existentes UPDATE... SET... WHERE... altera dados específicos de uma tabela 15 16 Exemplo ME-R Exemplo Modelo Relacional Autor cod_autor nome nascimento M cod_livro cod_autor escreve N Livro N publica cod_livro título valor volume cod_editora AUTOR = { COD_AUTOR, NOME, NASCIMENTO } ESCREVE = { COD_AUTOR, COD_LIVRO } LIVRO = { COD_LIVRO, TITULO, VALOR, VOLUME, COD_EDITORA } 1 Editora cod_editora razão endereço cidade EDITORA = { COD_EDITORA, RAZAO, ENDERECO, CIDADE } 17 18 1

MIN( ) : Retorna o mínimo de um conjunto de valores contido em um campo especificado em uma consulta. MAX( ): Retorna o máximo de um conjunto de valores contido em um campo especificado em uma consulta. -- Verificar o valor do livro mais caro SELECT MAX(VALOR) ; -- E se quisermos saber o título do livro mais caro? http://www.postgresql.org/docs/9.2/static/functions-aggregate.html 20 21 -- E se quisermos saber o título do livro mais caro? -- Alguns alunos poderiam ter pensado na seguinte -- solução -- E se quisermos saber o título do livro mais caro? -- Alguns alunos poderiam ter pensado na seguinte -- solução SELECT TITULO WHERE VALOR = MAX(VALOR); -- Funciona? SELECT TITULO WHERE VALOR = MAX(VALOR); -- Funciona? -- A função MAX não pode ser usada na cláusula WHERE -- e agora? WHERE VALOR = (SELECT MAX(VALOR)); -- OK! 22 23 SUM( ): Retorna a soma de um conjunto de valores contido em um campo especificado em uma consulta. A função SUM ignora os registros que contenham campos Null -- calcular o preço total dos livros de Paulo Coelho SUM( ): Retorna a soma de um conjunto de valores contido em um campo especificado em uma consulta. A função SUM ignora os registros que contenham campos Null -- calcular o preço total dos livros de Paulo Coelho SELECT SUM(VALOR) AS TotalLivros, AUTOR, ESCREVE WHERE NOME = 'PAULO COELHO' AND COD_AUTOR = COD_AUTOR_ESC AND COD_LIVRO_ESC = COD_LIVRO; 24 25 2

AVG( ): Calcula a média aritmética de um conjunto de valores contido em um campo especificado em uma consulta -- calcular o preço médio dos livros da livraria SELECT AVG(VALOR) AS Media ; COUNT( ): Calcula o número de registros retornado por uma consulta. A função COUNT não conta registros que tenham campos NULL, exceto quando expr for o caractere curinga asterisco (*) -- contar quantos autores estão cadastrados SELECT COUNT(*) FROM AUTOR; -- contar quantos livros possuem informação de volume SELECT COUNT(VOLUME) ; -- observe que registros nos quais VOLUME é NULL não são considerados 26 27 SELECT COUNT( ) é possível usar a palavra chave DISTINCT. Desta forma, os valores duplicados nas colunas não são contados. /* qual o número de autores que possuem livros na livraria */ SELECT COUNT(DISTINCT COD_AUTOR_ESC) AS AUTORES FROM ESCREVE; SELECT <lista de atributos e funções> FROM <lista de tabelas> [ WHERE predicado ] [ GROUP BY <atributos de agrupamento> ] [ HAVING <condição para agrupamento> ] [ ORDER BY <lista de atributos> ] ; http://www.postgresql.org/docs/9.2/static/sql-select.html 28 29 Podemos dividir o conjunto de tuplas de uma relação em grupos de acordo com algum critério, baseado nos valores dos atributos Por exemplo, na tabela abaixo as tuplas podem ser agrupadas de acordo com o nome do autor Exemplo: PAULO COELHO, MACHADO DE ASSIS e JOSÉ MARIA -- autores de todos os livros da livraria SELECT NOME, AUTOR, ESCREVE WHERE COD_AUTOR = COD_AUTOR_ESC AND COD_LIVRO_ESC = COD_LIVRO GROUP BY NOME; Observe que na cláusula SELECT só podem constar os atributos presentes no GROUP BY Isso faz sentido pois, por exemplo, existem 3 livros do PAULO COELHO cadastros, qual deles apareceria no resultado? Tente adicionar o campo TITULO na cláusula SELECT do comando acima e observe o resultado 30 31 3

-- autores de todos os livros da livraria SELECT NOME, AUTOR, ESCREVE WHERE COD_AUTOR = COD_AUTOR_ESC AND COD_LIVRO_ESC = COD_LIVRO GROUP BY NOME; Tente adicionar o campo TITULO na cláusula SELECT do comando acima e observe o resultado ERRO: coluna "livro.titulo" deve aparecer na cláusula GROUP BY ou ser utilizada em uma função de agregação Para os próximos exemplos execute o script de inserção do arquivo novasinsercoes.txt disponível no Moodle (novasinsercoes.txt) 32 33 Mais de um atributo pode ser usado no agrupamento Mais de um atributo pode ser usado no agrupamento -- agrupando os livros por autor/preço SELECT NOME, VALOR, AUTOR, ESCREVE WHERE COD_AUTOR = COD_AUTOR_ESC AND COD_LIVRO_ESC = COD_LIVRO GROUP BY NOME, VALOR ORDER BY NOME 34 -- agrupando os livros por autor/preço SELECT NOME, VALOR, AUTOR, ESCREVE WHERE COD_AUTOR = COD_AUTOR_ESC AND COD_LIVRO_ESC = COD_LIVRO GROUP BY NOME, VALOR ORDER BY NOME 35 As funções agregadas (e.g., COUNT, MIN, MAX, AVG) podem ser usadas para cálculos com subgrupos de tuplas definidos pela cláusula GROUB BY As funções agregadas (e.g., COUNT, MIN, MAX, AVG) podem ser usadas para cálculos com subgrupos de tuplas definidos pela cláusula GROUB BY -- qual o número de livros por autor? SELECT NOME, COUNT(*) FROM AUTOR, ESCREVE WHERE COD_AUTOR = COD_AUTOR_ESC GROUP BY NOME -- qual o número de livros por autor? SELECT NOME, COUNT(*) FROM AUTOR, ESCREVE WHERE COD_AUTOR = COD_AUTOR_ESC GROUP BY NOME 36 37 4

Cláusula HAVING HAVING: é semelhante à cláusula WHERE. HAVING elimina tuplas agrupadas que não satisfazem a uma determinada condição Diferença com WHERE: WHERE filtra tuplas individuais antes da aplicação do GROUP BY, enquanto HAVING filtra grupo de tuplas criadas por GROUP BY. As condições de filtragem do HAVING devem ser feitas baseando-se nos atributos agrupados por GROUP BY Cláusula HAVING -- Editoras cujo total de publicações é maior que 1 SELECT COD_EDITORA AS EDITORA GROUP BY COD_EDITORA HAVING COUNT(COD_EDITORA) > 1; -- ERRO comum SELECT COD_EDITORA AS EDITORA GROUP BY COD_EDITORA HAVING COUNT(EDITORA) > 1; -- ERRO: coluna "editora" não existe LINE 4: HAVING COUNT(EDITORA) > 1; -- Selecionar o nome das editoras cujo total de publicações é maior que 1? 38 39 Cláusula HAVING -- Selecionar o nome das editoras cujo total de publicações é maior que 1? -- Solução SELECT RAZAO, L.COD_EDITORA FROM EDITORA E, LIVRO L WHERE E.COD_EDITORA = L.COD_EDITORA GROUP BY RAZAO, L.COD_EDITORA HAVING COUNT(L.COD_EDITORA) > 1; São blocos SELECT...FROM...WHERE completos dentro da cláusula WHERE de outra consulta Essa construção possibilita a realização de consultas sobre os resultados obtidos em outras consultas Podem aparecer na cláusulas SELECT FROM WHERE 40 41 Na cláusula FROM: visão inline Exemplo: /* Listar informações sobre livros e editoras*/ SELECT * L JOIN (SELECT * FROM EDITORA) E ON (L.COD_EDITORA = E.COD_EDITORA) Na cláusula FROM: visão inline Exemplo: /* Listar informações sobre livros e editoras*/ SELECT * L JOIN (SELECT * FROM EDITORA) E ON (L.COD_EDITORA = E.COD_EDITORA) 42 43 5

Na cláusula SELECT: função inline Exemplo: /* Listar informações sobre livros e o horário da consulta*/ SELECT *, (SELECT now()) L Na cláusula WHERE: subconsulta aninhada não correlacionada; ou correlacionada: avaliada 1 vez para cada linha processada pela consulta superior Exemplo: /* Selecionar o título com valor mais alto */ WHERE VALOR IN ( SELECT MAX(VALOR) ); 44 45 Exemplo subconsulta não correlacionada: /* Selecionar o título com valor mais alto */ /* Selecionar os títulos mais baratos do que o título cujo código é 31 */ WHERE VALOR < (SELECT VALOR WHERE COD_LIVRO = 31); 46 47 /* Selecionar os títulos mais baratos do que o título cujo código é 31 */ WHERE VALOR < (SELECT VALOR WHERE COD_LIVRO = 31); /* Selecionar os títulos mais baratos do que o título cujo código é 31 */ WHERE VALOR < (SELECT VALOR WHERE COD_LIVRO = 31); 48 49 6

/* Selecionar os títulos de livros da editora com COD_EDITORA = 3 que possuam valor menor do que todos os livros da editora com COD_EDITORA = 1*/ WHERE COD_EDITORA = 3 AND VALOR < ALL(SELECT VALOR WHERE COD_EDITORA = 1); /* Selecionar os títulos de livros da editora com COD_EDITORA = 3 que possuam valor menor do que todos os livros da editora com COD_EDITORA = 1*/ WHERE COD_EDITORA = 3 AND VALOR < ALL(SELECT VALOR WHERE COD_EDITORA = 1); 50 51 Pode-se utilizar com os operadores ANY e ALL > >= < <= = <> Consultas aninhadas correlacionadas Quando condição na cláusula WHERE de uma consulta aninhada referencia algum atributo de uma relação declarada na consulta externa Curiosidade: = ANY equivale ao IN 52 53 Exemplo consultas aninhadas correlacionadas CREATE TABLE FUNCIONARIO ( COD INTEGER PRIMARY KEY, NOME VARCHAR(20)); CREATE TABLE DEPENDENTE ( COD INTEGER PRIMARY KEY, NOME VARCHAR(20), COD_FUNC INTEGER REFERENCES FUNCIONARIO) INSERT INTO FUNCIONARIO VALUES (1, 'JOSÉ'), (2, 'MARIA'), (3, 'JOÃO'); INSERT INTO DEPENDENTE VALUES (1, 'MARIA', 2); 54 Exemplo - consultas aninhadas correlacionadas /* Recuperar o nome de cada funcionário que tem um dependente com o mesmo nome do funcionário */ SELECT F.NOME FROM FUNCIONARIO F, DEPENDENTE D WHERE F.COD = D.COD_FUNC AND F.NOME = D.NOME SELECT F.NOME FROM FUNCIONARIO F WHERE F.COD IN (SELECT D.COD_FUNC FROM DEPENDENTE D WHERE F.NOME = D.NOME) 55 7

A função EXISTS em SQL é usada para verificar se o resultado de uma consulta aninhada é vazio (não contém tuplas) ou não O resultado de EXISTS é TRUE se o resultado tiver pelo menos uma tupla 56 Exemplo - consultas aninhadas correlacionadas /* Recuperar o nome de cada funcionário que tem um dependente com o mesmo nome do funcionário */ SELECT F.NOME FROM FUNCIONARIO F WHERE EXISTS(SELECT D.COD_FUNC FROM DEPENDENTE D WHERE F.COD = D.COD_FUNC AND F.NOME = D.NOME) para cada tupla de FUNCIONARIO, avalie a consulta aninhada, que recupera todas as tuplas DEPENDENTE com os mesmos COD_FUNC e NOME que a tupla 57 FUNCIONARIO; Exemplo - consultas aninhadas correlacionadas /* Recuperar os nomes dos funcionários que não tem dependentes */ Exercício SELECT F.NOME FROM FUNCIONARIO F WHERE NOT EXISTS(SELECT * FROM DEPENDENTE D WHERE F.COD = D.COD_FUNC) 58 59 Exercício Escreva consultas em SQL 1. Listar a quantidade total de médicos 2. Listar o nome dos procedimentos e quantos materiais cada um utiliza 3. Listar a média de salário por setor 4. Listar o nome e o custo do procedimento mais barato 5. Listar os nomes dos setores nos quais existam mais de 10 médicos trabalhando 6. Listar os nomes dos médicos que possuem a mesma especialidade dos médicos que gerenciam o setor onde eles trabalham Bibliografia Elmasri, Ramez; Navathe, Shamkant B. Sistemas de banco de dados. 4 ed. São Paulo: Addison Wesley, 2005, 724 p. Bibliografia: p. [690]-714. 60 62 8

Leitura complementar para casa Capítulo 4 do livro: Elmasri, Ramez; Navathe, Shamkant B. Sistemas de banco de dados. 6ª edição Manual do SGBD PostgreSQL http://www.postgresql.org/docs/manuals/ Explorar as outras particularidades dos comandos apresentados 63 9