SISTEMAS DE BANCO DE DADOS. Prof. Adriano Pereira Maranhão

Documentos relacionados
SQL (Tópicos) Structured Query Language

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

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

SQL Básica. Andre Noel

Consultas SQL. Andre Noel

Comandos de Manipulação

Banco de Dados I. Aula 14 - Prof. Bruno Moreno 11/10/2011

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 BÁSICO. Luiz Antônio Vivacqua Corrêa Meyer

SQL-99: Esquema de BD EMPRESA

BCD29008 Banco de dados

Structured Query Language (SQL) Aula Prática

Programação com acesso a BD. Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

A Linguagem SQL. Introdução a Banco de Dados DCC 011

Introdução ao PostgreSQL

Rápida revisão do Modelo Relacional

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

SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

L Q S m e g a u g n Li A

SQL. Prof. Márcio Bueno.

SQL. Prof. Roger Cristhian Gomes

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

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

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

Bancos (Bases) de Dados

Marcelo Henrique dos Santos

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

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

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

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

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

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

FEAP - Faculdade de Estudos Avançados do Pará PROFª LENA VEIGA PROJETOS DE BANCO DE DADOS UNIDADE V- SQL

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

S Q L 31/03/2010. SQL - Structured Query Language Linguagem de Consulta Estruturada

Bases de Dados. Parte V: A Linguagem SQL. Parte V

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

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

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

ANÁLISE E PROJETO DE BANCO DE DADOS

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

SQL DML. Frederico D. Bortoloti

Definida pelo American National Standard Institute (ANSI) em 1986

Laboratório de Banco de Dados II Aula 04. Prof. Érick de Souza Carvalho

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

Sumário SELECT + FROM

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

ALGEBRA RELACIONAL. Álgebra Relacional Conjunto básico de operações para o Modelo Relacional O resultado é uma relação

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

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

IMPLEMENTAÇÃO DE BANCO DE DADOS

Introdução a Bancos de Dados

- SQL Linguagem de Manipulação de Dados

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

SQL - Perguntas. André Restivo. Faculdade de Engenharia da Universidade do Porto. February 24, 2012

Linguagem SQL. Comandos Básicos

Revisão Banco de Dados

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

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

Bancos de Dados. 8. Structured Query Language (SQL)

SQL. SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

A Linguagem SQL. Introdução a Banco de Dados DCC 011

SQL Linguagem de Definição de Dados

Banco de Dados SQL. João Eduardo Ferreira Osvaldo Kotaro Takai

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Renomeada para SQL (Structured Query Language)

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

Banco de Dados. Diego Silveira Costa Nascimento. 20 de março de Instituto Federal do Rio Grande do Norte

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

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

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

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

Ordenação de tuplos order by

BANCO DE DADOS Parte 4

Álgebra Relacional e SQL

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

Banco de Dados I Linguagem SQL Parte 2. Autor: Prof. Cláudio Baptista Adaptado por: Prof. Ricardo Antonello

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

DCC011 Introdução a Banco de Dados SQL gerenciar tabelas e dados

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

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. Profa. Msc. Fernanda Lígia Rodrigues Lopes. Disciplina: Fundamentos de Banco de Dados

Banco de Dados I 5 Linguagens de Consulta

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

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

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Renomeada para SQL (Structured Query Language)

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

mod._1_teoria_sistemas de bancos de dados.doc

Aplicações - SQL. Banco de Dados: Teoria e Prática. André Santanchè e Luiz Celso Gomes Jr Instituto de Computação UNICAMP Agosto de 2013

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

Esquema Empresa. departamento (num, nome, identger, dataini) PK=(num) dependente (identemp, nome, sexo, datanasc, parentesco) PK=(identemp, nome)

Consulta sobre múltiplas relações

Linguagem de Consulta - SQL

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

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

25/06/2017. SQL - Structured Query Language Linguagem de Consulta Estruturada

Transcrição:

SISTEMAS DE BANCO DE DADOS Prof. Adriano Pereira Maranhão 1

SQL Structured Query Language SQL Desenvolvida pela IBM Structured English Query Language Sequel Linguagem de consulta para o sistema R Primeiro protótipo de SBD relacional Especificar consultas de forma interativa ad hoc queries Padrão ANSI SQL 86,SQL 89,SQL 92, SQL 99 e SQL 2003 2

SQL DEFINIÇÃO DE ESQUEMAS Esquema de um banco de dados relacional Conjunto de esquemas de relação mais um conjunto de restrições de integridade IC Expressões DDL do SQL permitem especificar Esquema de relações(tabelas) Domínio de valores associados a cada atributo Restrições de integridade Conjunto de índices a serem mantidos para cada relação Estrutura de armazenamento físico de cada relação 3

SQL DEFINIÇÃO DE ESQUEMAS Criando tabelas -Estrutura básica CREATE TABLE nome-tabela (nome-coluna tipo-de-dados [not null], [nome-coluna tipo-de-dados [not null] ], [CONSTRAINT nome-restrição] UNIQUE nome-coluna PRIMARY KEY(nome-coluna {, nome-coluna}) FOREIGN KEY (nome-coluna {, nome-coluna}) REFERENCES nome-tabela [ON DELETE CASCADE SET NULL NO ACTION ], [ON UPDATE CASCADE], CHECK (predicado) ) 4

SQL DEFINIÇÃO DE ESQUEMAS Removendo tabelas-estrutura básica DROP TABLE nome-tabela [CASCADE RESTRICT] Remove as tuplas da tabela e sua definição do catálogo CASCADE remove as restrições do tipo foreign key tabelas que referenciam a tabela removida Alterando tabelas- Estrutura básica ALTER TABLE nome-tabela [ADD nome-coluna tipo de dados] [DROP nome-coluna ] [ADD CONSTRAINT nome-restrição] [DROP CONSTRAINT nome-restrição] 5

CONSULTAS BÁSICAS EM SQL select < lista de atributos> from < lista de nomes de relação> where < condição de seleção> ; select from where A1,...,An R1,...,Rm <condição>; (R1 x... x Rm) [ <condição> ] [A1,...,An] produto cartesiano seleção projeção

Esquema Exemplo E (code, enome, dno, sal, localização) D (dno, dnome, ger) Q1: Liste todas informações em E sobre empregados em Fortaleza. select * from where E E.localização = Fortaleza ;

Q2: Liste todas as informações em D select * from D; A cláusula where é opcional.

IMPLEMENTANDO JUNÇÃO

Implementando Junção Q3: Liste todos os empregados e o nome dos seus departamentos select enome, dnome from E, D where E.dno = D.dno; Para resolver ambiguidades

Implementando Junção Q4: Nome dos empregados gerenciados por 01 e que tem um salário < R$1000? select enome from E, D where E.dno = D.dno AND D.ger = 01 AND sal < 1000; SQL não tem nenhum suporte especial para junção natural

Implementando Junção Q5: Nome dos empregados que ganham mais que seu gerente? select E1.enome from E E1, D, E E2 where E1.dno = D.dno D.ger = E2.code E1.sal > E2.sal; AND AND Nós precisamos de duas cópias de E. Cria-se uma alias para evitar ambiguidades.

Implementando Junção Q6: Nome dos gerentes que ganham menos que os seus empregados? select distinct E2.enome from where E E1, D, E E2 E1.dno = D.dno AND D.ger = E2.code AND E1.sal > E2.sal; SQL não elimina tuplas duplicadas! você deve requisitar explicitamente dizendo select distinct.. Caso contrário, a resposta repetirá o nome do gerente para cada empregado que ganha mais.

Implementando Junção PEÇAS (#p, pnome) FORNECEDORES_PEÇAS (#f,#p,qtd) Q7: Encontre a quantidade fornecida de cada peça.devem constar inclusive as peças que não são fornecidas por nenhum fornecedor. select pnome, qtd from PEÇAS P, FORNECEDORES_PEÇAS FP where P.#p *= FP.#P Outer Join

Implementando Junção PEÇAS #p pnome P1 mouse P2 teclado P3 monitor P4 disco rígido RESULTADO RESULTADO #p qtd qtd P1 mouse 10 10 P1 mouse 20 20 P2 teclado 15 15 P3 monitor null null FORNECEDORES_PEÇAS #f #p qtd F1 P1 10 F1 P2 15 F2 P1 20 disco rígido null

DEFININDO VISÕES

Definindo Visão Q8: Como criar uma visão para salvar o resultado de uma consulta temporariamente? create view <nome_da_ visão> as <uma_consulta> create view EDM (emp, dept, ger) as select enome, dnome, ger from E, D where e.dno = d.dno; Se desejável, os nomes das colunas podem ser renomeados.

Definindo Visão Q9 : Imprima o nome de todos os empregados que ganham mais de 90% do salário do seu gerente. create view as select from where ESGS(e_nome, e_sal, g_nome, g_sal) E1.enome, E1.sal, E2.enome, E2.sal E E1, D, E E2 E1.dno = D.dno AND D.ger = E2.code; select from where e_nome ESGS e_sal > 0.9 * g_sal;

CONSULTAS COM SUBCONSULTAS

TIPOS DE SUBCONSULTAS Testa membros de um conjunto: IN NOT IN Verificação de Relações Vazias: EXISTS NOT EXISTS Comparação de Conjuntos: Subconsultas introduzidas com um operador de comparação (=,< >, >, >=, <, <=, ou!> ) seguida por ANY (SOME) ou ALL.

Subconsultas: Membros de um conjunto Q10: Quem está no mesmo departamento de Vera? select E1.enome from E E1, E E2 where E2.enome = Vera and E1.dno = E2.dno; select enome from E where E.dno IN (select dno from E where enome = Vera ); ( NOT IN)

Subconsultas: Membros de um conjunto EMP ( enome, #CI, idade) DEP ( nome, e_#ci,... ) Q11: Nomes dos empregados que têm um dependente com o mesmo nome do empregado? select E.enome from EMP E where E.#CI IN ( select e_#ci from DEP where e_#ci = E.#CI AND DEP.nome = E.enome);

Subconsultas: Membros de um conjunto EMP ( enome, #CI, idade) DEP ( nome, e_#ci,... ) Q11: Nomes dos empregados que têm um dependente com o mesmo nome do empregado? select E.enome from EMP E where E.enome IN ( select nome from DEP where e_#ci = E.#CI);

Subconsultas Q12: Nomes dos empregados que têm um dependente com o mesmo nome do empregado? select E.enome from EMP E where EXISTS ( select * from DEP where e_#ci = E.#CI AND nome = E.enome);

Subconsultas Q13: Nomes dos empregados que não têm dependentes? select E.enome from EMP where NOT EXISTS ( select * from DEP where e_#ci = #CI );

Subconsultas Q14: Quem ganha mais do que alguém no departamen de brinquedos? select enome from E where sal > any (select from where sal E, D E.dno = D.dno AND D.dnome = brinquedo ); > any (some) --- Maior do que ao menos um.

ORDENANDO RESULTADOS

Ordenando resultados Q15: Imprima E. Ordene as tuplas pelo número do depto. Para cada depto, ordene do mais alto para o mais baixo salário. Se existir empate de salario, use ordem alfabética no nome. Select * from E order by dno, sal DESC, enome;

GERANDO DADOS DE RESUMO

GERANDO DADOS DE RESUMO Funções de Agregação GROUP BY e HAVING

FUNÇÕES DE AGREGAÇÃO

Funções de Agregação Q16: Qual é a média de salário dos empregados no departamento de brinquedos? * Nao podemos responder em alg. rel.. mas é facil em SQL. select avg(sal) from E, D where E.dno = D.dno AND D.dname = brinquedo ; Na cláusula select, pode-se usar: avg(a), sum(a), min(a), max(a), count(a)

Funções de Agregação Q17: Quantos empregados trabalham em mais de um departamento? select count (distinct enome) from E E1 where enome in (select E.enome from E E2 where E2.enome = E1.enome AND E2.dno!= E1.dno);

Funções de Agregação Q18: Nome dos empregados que ganham mais que a média de salário do seu departamento? select enome from E E1 where sal > (select avg(sal) from E E2 where E2.dno = E1.dno);

GROUP BY E HAVING

GROUP BY Q19: Para cada departamento, liste o número total de empregados do departamento e a soma total dos salários. select dnome, sum(sal), count (enome) from E, D where E.dno = D.dno; Resposta errada!!! Imprime cada nome de departamento seguido pelo salário da companhia e total de empregados. brinquedo 1,000, 500 2002 Manuf 1,000, 500 2002 Pessoal 1,000, 500 2002

GROUP BY Quando queremos que um agregado seja computado separadamente para cada valor de um atributo então deveremos usar: group by

GROUP BY Q20: Para cada departamento, liste o número total de empregados do departamento e a soma total dos salários. select dnome, sum (sal), count (enome) from E, D where E.dno = D.dno group by dnome; Os atributos do group-by devem ser exatamente os itens não-agregado da linha de seleção (na maioria das SQLs).

GROUP BY Q21: Para cada departamento dê o número de empregados e a média de salário. select DNO, COUNT(*), AVG(sal) from EMP group by DNO;

GROUP BY Q22: Quais departamentos têm mais empregados do que a média dos dept, e uma média de salario por empregado mais alta que a média dos departamentos? Create View MediaDep(dnome, avgsal, noemps) as select from where dnome, avg(sal), count(enome) E, D E.dno = D.dno group by dnome; Select dnome from MediaDep where avgsal > (select avg(avgsal) AND from MediaDep) noemps > (select avg(noemps) from MediaDep);

GROUP BY e HAVING Q23: Mesma que Q22, mas exclua deptos com menos R$10000 na soma total dos salários dos seu empregados, e imprima a resposta em ordem alfabética. Create view GrandesDeptos (dnome, avgsal, noemps) as select dnome, avg(sal), count(enome) from E, D where E.dno = d.dno group by dnome having sum(sal) >=10000 order by dnome; Somente para testes em um grupo inteiro. Não para testes em tuplas. todas as condições devem envolver agregados.

GROUP BY Q24: Quais departamentos têm uma média de salário >R$ 2.000. select dnome, avg(sal) from E, D where E.dno = D.dno group by dnome having avg(sal) > 2.000

GROUP BY Q25: Subconsultas Quais departamentos na têm Cláusula uma média FROM de salario >R$ 2.000. select dnome from ( select dnome, avg(sal) from E, D where E.dno = D.dno group by dnome) as resultado (dnome, avgsal) where avgsal > 2.000 Note que não precisamos usar a clausula HAVING

Q26: Para cada empregado em dois ou mais depts, imprima o salario total dos seus gerentes. Assuma que um dept só tem um gerente. Create view dois_depts as select E1.enome, sum(e2.sal) #4 from E E1, D, E E2 where E1.dno = D.dno AND #1 E2.enome = D.ger group by E1.enome #2 having count(*) > 1 #3 order by enome; #5 Sequencia de avaliação das consultas: #1: primeiro, tuplas são escolhidas #2: então, grupos são formados #3: então, grupos são eliminados #4: então, os agregados são computados para a linha de seleção #5: então, as tuplas da resposta são ordenadas corretamente e impressas. Esta sequência de avaliação é seguida por todas as consultas.

COMPUTE E COMPUTE BY

COMPUTE Q27: Liste todos os tipos de livros que terminam com info e a soma total dos seus tipo preços. preço DB_info 30.95 DB_info 10.40 IA_info 42.05 RC_info 67.20 sum 150.60 select tipo, preço from TÍTULOS where tipo like %info order by tipo, preço compute SUM(preço) TÍTULO (título, tipo, preço)

OPERAÇÕES DE CONJUNTO SQL tem incorporado algumas das operações de conjunto da álgebra relacional União (UNION) Diferença (MINUS) Interseção (INTERSECT) Tuplas duplicadas são eliminadas do resultado As relações devem ser compatíveis ( têm os mesmos atributos e na mesma ordem).

ESQUEMA EXEMPLO EMPREGADOS (E) enome CPF salário CPF_Supervisor dnumero DEPARTAMENTOS (D) dnome dnúmero CPF_gerente TRABALHA (T) PROJETOS (P) CPF_Emp pnumero pnome pnúmero dnúmero

OPERAÇÕES DE CONJUNTO Q28: Liste os nomes dos projetos que têm um empregado chamado João Silva que trabalha no projeto ou gerencia o departamento que controla o projeto select pnome from P, D, E where P.dnum=D. dnum and D.CPF_gerente = E.CPF and union E.enome = João Silva select pnome from T, P, E where T.pnum=P. dnum and T.CPF_emp = E.CPF and E.enome = João Silva

OPERAÇÕES DE CONJUNTO Q29: Liste os nomes dos empregados que não trabalham em nenhum projeto select enome from E MINUS (EXCEPT) select enome from T, E where T.CPF_emp = E.CPF

OPERAÇÕES DE CONJUNTO Q30: Liste os nomes dos empregados que não trabalham em nenhum projeto select enome from E where NOT EXIST (select * from T where T.CPF_emp = E.CPF )

COMPARAÇÃO DE CONJUNTOS Q31: Liste os nomes dos empregados que trabalham em todos os projetos select enome from E where NOT EXISTS ( select * from P where NOT EXITS (select * from T where T.CPF_emp = E.CPF and )) T.pnum = P.CPF ))

DE AR PARA SQL 1: seleção select * R[A = a ] from R where A = a ; 2: projeção select A1,...,Ak R[ A1,...,Ak] from R; 3: Produto cartesiano select * R1 x R2 from R1, R2 ;

De AR para SQL 4:União select * R1 U R2 from R1 -- sem duplicatas- union select * from R2; 5: Diferença select * R1 - R2 from R1 where * not in (select * from R2);

De AR para SQL 5: Diferença select A1,..., An R1 - R2 from R1 except select B1,..., Bn from R2); 6: Interseção select A1,..., An R1 R2 from R1 intersect select B1,..., Bn from R2);