©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.

Slides:



Advertisements
Apresentações semelhantes
Álgebra Relacional Marcelo Mendes Manaus
Advertisements

Banco de Dados Prof. Antonio.
SQL Structured Query Language (continuação)
SQL Structured Query Language (continuação)
Prof.: Bruno Rafael de Oliveira Rodrigues
Prof. Bruno Rafael de Oliveira Rodrigues
Elaini Simoni Angelotti
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone: 9531 – 7555.
Linguagens relacionais
Otimização de Consultas em SQL Parte I - Planos de Execução e Equivalências de Expressões da Álgebra Relacional AULA 19 Profa. Sandra de Amo Programa.
Gerenciamento de Banco de Dados
Algebra relacional nomeada e não-nomeada
Otimização de Consultas em SQL Planos de Execução e Equivalências de Expressões da Álgebra Relacional AULA 24 Profa. Sandra de Amo GBC053 – BCC
Subconsultas ou Consultas Aninhadas
SQL – Consultas Básicas
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
SQL – DML Consultas envolvendo relacionamentos entre tabelas
SQL – DML Consulta a dados de uma tabela
Operadores Especiais da SQL
SCC Bancos de Dados e Suas Aplicações
SCC Bancos de Dados e Suas Aplicações
Linguagem de Banco de Dados - SQL
Linguagem de Banco de Dados - SQL
©Silberschatz, Korth and Sudarshan (modificado)5.1.1Database System Concepts Capítulo 5: Outras linguagens Query-by-Example (QBE) Datalog.
SQL Álvaro Vinícius de Souza Coêlho
Capítulo 3: Modelo Relacional
Banco de Dados Aplicado ao Desenvolvimento de Software
Otimização de Consultas em SQL Planos de Execução
Capítulo 3: SQL Korth • Silberschatz • Sundarshan.
Desenvolvendo um script SQL
Treinamento sobre SQL.
Capítulo 2: Modelo relacional
Baseado no material do Professor Raul Paradeda
©Silberschatz, Korth and Sudarshan (Modificado)3.3.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução.
REVISÃO Comandos SQL - DML SELECT * FROM ?.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Cálculo Relacional.
AULA DE DÚVIDAS 9 de Abril de Especialização  Simplifica-se quando:  especialização é disjunta e  especialização é total e  não há relações.
©Silberschatz, Korth and Sudarshan (Modificado)1.1Database System Concepts Capítulo 1: Introdução Função dos Sistemas de Bases de Dados Visão dos dados.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
©Silberschatz, Korth and Sudarshan (Modificado)3.1.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução.
SQL Structured Query Language Linguagem de Consulta Estruturada
©Silberschatz, Korth and Sudarshan (modificado)9.2.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
©Silberschatz, Korth and Sudarshan (modificado)6.1.1Database System Concepts Capítulo 6: Integridade e Segurança Restrições ao Domínio Integridade Referencial.
IEC Banco de Dados I Aula 04 – SQL (II) Turmas: Sistemas de Informação Professora: André Luiz da Costa Carvalho
SQL.
©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.
©Silberschatz, Korth and Sudarshan (modificado)7.3.1Database System Concepts Capítulo 7: Design de Bases de Dados 1ª Forma Normal Objectivos com Design.
AOBD 07/08 Mini-Projecto 2 Soluções. 1) Considere que existem três relações R1=(A,B,C), R2=(C,D) e R3=(D,E) com chaves primárias A, C e D, respectivamente.
©Silberschatz, Korth and Sudarshan (Modificado)3.4.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução.
©Silberschatz, Korth and Sudarshan (modificado)7.4.1Database System Concepts Capítulo 7: Design de Bases de Dados 1ª Forma Normal Objectivos com Design.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
1 Structured Query Language (SQL) 4 SQL é uma linguagem normalizada (ANSI) para consultas e actualizações de bases de dados relacionais.
Subconsultas ou Consultas Aninhadas Forma alternativa de especificar consultas envolvendo relacionamentos entre tabelas Otimização –filtragens prévias.
2.1.1Database System Concepts©Silberschatz, Korth and Sudarshan (Modificado) Capítulo 2: Modelo ER Conjuntos de entidades Conjuntos de relações Aspectos.
©Silberschatz, Korth and Sudarshan (modificado)7.1.1Database System Concepts Capítulo 7: Design de Bases de Dados Objectivos com Design de Bases de Dados.
©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Uma Proposta para Bancos de Dados Categoriais Rafael C. Pinto.
Associações = JOIN SERVE PARA CONVERTER DADOS ENCONTRADOS EM DUAS OU MAIS TABELAS. CLÁUSULA JOIN PERMITE QUE OS DADOS DE VÁRIAS TABELAS SEJAM COMBINADOS.
Aula 09: Comando SELECT: Ligações entre tabelas e Subconsultas
Recuperação de Dados Banco de Dados Carina Farias
©Silberschatz, Korth and Sudarshan (modificado)6.1.1Database System Concepts Capítulo 6: Integridade e Segurança Restrições ao Domínio Integridade Referencial.
UCSal – Bacharelado em Informática
©Silberschatz, Korth and Sudarshan (Modificado)3.2.1Database System Concepts Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução.
SELECT Professor: Virgílio Fries Müller www. vfm.com.br
Programação para Internet Aula 12 SQL (Comandos de Consulta ao BD)
José Antônio da Cunha 2/6/2016 José Antônio - CEFET-RN 1 Disciplina: Banco de Dados.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Capítulo 5 Mais SQL: Consultas Complexas, Triggers e Views.
Álgebra Relacional Prof.: José Antônio da Cunha CEFET-RN
Transcrição da apresentação:

©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação Valores nulos Junções Subconsultas embebidas Relações derivadas Vistas Modificação da Base de Dados Embedded SQL Linguagem de Definição de Dados

©Silberschatz, Korth and Sudarshan (modificado)4.2.2Database System Concepts Valores Nulos Os tuplos podem conter valores nulos, denotado por null, nalguns dos seus atributos. null significa um valor desconhecido ou que não existe. O predicado is null pode ser utilizado para testar a existência de valores nulos.  E.g. mostrar todos os números de empréstimos com um valor nulo na coluna amount. select loan_number from loan where amount is null O resultado de uma expressão aritmética com null é null  E.g. 5 + null devolve null Contudo, as funções de agregação ignoram os nulos  A seguir será analisado este assunto mais detalhadamente

©Silberschatz, Korth and Sudarshan (modificado)4.2.3Database System Concepts Valores Nulos e Lógica Trivalente Qualquer comparação com null retorna unknown  E.g. 5 null ou null = null Lógica trivalente usando o valor lógico unknown:  OR: (unknown or true) = true, (unknown or false) = unknown (unknown or unknown) = unknown  AND: (true and unknown) = unknown, (false and unknown) = false, (unknown and unknown) = unknown  NOT: (not unknown) = unknown  “P is unknown” é verdade se o valor de P é unknown Resultado da condição da cláusula where é tratado como false quando o seu valor é unknown

©Silberschatz, Korth and Sudarshan (modificado)4.2.4Database System Concepts Valores Nulos e Agregados Calcule o total de todos os montantes dos empréstimos select sum (amount) from loan  A instrução acima ignora montantes nulos  Resultado é null se não existir nenhum montante não-nulo Todas as funções de agregação excepto count(*) ignoram tuplos com valores nulos nos atributos agregados.

©Silberschatz, Korth and Sudarshan (modificado)4.2.5Database System Concepts Operações de Junção As operações de junção retornam uma relação como resultado da combinação de duas outras relações. Estas operações adicionais são utilizadas habitualmente em subconsultas na cláusula from Condição de junção – define quais os tuplos que são combinados nas duas relações, assim como quais os atributos que aparecem no resultado da junção. Tipo de junção – define como tratar os tuplos que não estão relacionados entre si (basedados na condição de junção). Tipos de Junção inner join left outer join right outer join full outer join Condições de Junção natural on using (A 1, A 2,..., A n )

©Silberschatz, Korth and Sudarshan (modificado)4.2.6Database System Concepts Junção versus Produto Cartesiano Listar o nome, número de empréstimo e montante de todos os clientes que efectuaram um empréstimo na agência de Perryridge. select borrower.*, amount from borrower, loan where borrower.loan_number = loan.loan_number and branch_name = ‘Perryridge’  Versus select borrower.*, amount from borrower natural inner join loan where branch_name = ‘Perryridge’ A última separa claramente onde ir buscar os dados de onde se colocam condições “de filtragem” (selecção)  Esta separação não só torna a leitura mais fácil, como pode ser aproveitada para implementações.

©Silberschatz, Korth and Sudarshan (modificado)4.2.7Database System Concepts Relações de Exemplo Relação loan amount Relação borrower customer_nameloan_number Jones Smith Hayes L-170 L-230 L-155 branch_name Downtown Redwood Perryridge loan_number L-170 L-230 L-260

©Silberschatz, Korth and Sudarshan (modificado)4.2.8Database System Concepts Exemplos loan inner join borrower on loan.loan_number = borrower.loan_number branch_nameamount Downtown Redwood customer_nameloan_number Jones Smith L-170 L-230 branch_nameamount Downtown Redwood Perryridge customer_nameloan_number Jones Smith null L-170 L-230 null loan left outer join borrower on loan.loan_number = borrower.loan_number loan_number L-170 L-230 loan_number L-170 L-230 L-260

©Silberschatz, Korth and Sudarshan (modificado)4.2.9Database System Concepts Exemplos loan natural inner join borrower branch_nameamount Downtown Redwood customer_name Jones Smith loan natural right outer join borrower branch_nameamount Downtown Redwood null null customer_name Jones Smith Hayes loan_number L-170 L-230 loan_number L-170 L-230 L-155

©Silberschatz, Korth and Sudarshan (modificado)4.2.10Database System Concepts Exemplos loan full outer join borrower using (loan_number) branch_nameamount Downtown Redwood Perryridge null null customer_name Jones Smith null Hayes Listar todos os clientes que têm uma conta ou um empréstimo no banco (mas não ambos!) loan_number L-170 L-230 L-260 L-155 select customer_name from depositor natural full outer join borrower where account_number is null or loan_number is null

©Silberschatz, Korth and Sudarshan (modificado)4.2.11Database System Concepts Subconsultas imbricadas SQL disponibiliza um mecanismo para imbricar consultas umas dentro de outras. Uma subconsulta é uma expressão select-from-where que se encontra dentro de uma outra (sub)consulta. Subconsultas na clausula from são entendidas como cálculo de relações auxiliares. As subconsultas na clausula where são utilizadas habitualmente para efectuar testes de pertença a conjuntos, comparações entre conjuntos e calcular a cardinalidade de conjuntos.

©Silberschatz, Korth and Sudarshan (modificado)4.2.12Database System Concepts Consulta de exemplo Listar todos os clientes que têm contas e empréstimos no banco. select distinct customer_name from borrower where customer_name in (select customer_name from depositor) Encontrar todos os clientes que têm empréstimos mas não possuem contas no banco select distinct customer_name from borrower where customer_name not in (select customer_name from depositor)

©Silberschatz, Korth and Sudarshan (modificado)4.2.13Database System Concepts Consulta de exemplo Listar todos os clientes que têm uma conta e empréstimos na agência de Perryride select distinct customer_name from borrower natural inner join loan where branch_name = “Perryridge” and (branch_name, customer_name) in (select branch_name, customer_name from depositor natural inner join account) Nota: A consulta acima pode ser escrita de uma maneira muito mais simples. A formulação utilizada serve apenas para ilustrar as possibilidades da linguagem SQL.

©Silberschatz, Korth and Sudarshan (modificado)4.2.14Database System Concepts Comparação de conjuntos Apresentar todas as agências que têm activos superiores aos de alguma agência localizada em Brooklyn. select distinct T.branch_name from branch as T, branch as S where T.assets > S.assets and S.branch_city = ‘ Brooklyn ’ A mesma consulta recorrendo à cláusula > some select branch_name from branch where assets > some (select assets from branch where branch_city = ‘ Brooklyn ’ )

©Silberschatz, Korth and Sudarshan (modificado)4.2.15Database System Concepts Definição da cláusula Some F some r  t  r  : (F t) em que pode ser :  (5< some) = true ) = false (5  some) = true (pois 0  5) (ler: 5 menor que algum tuplo na relação ) (5< some ) = true (5 = some (= some)  in No entanto, (  some)  not in

©Silberschatz, Korth and Sudarshan (modificado)4.2.16Database System Concepts Cláusula all Listar os nomes das agências com activos superiores aos de todas as agências localizadas em Brooklyn. select branch_name from branch where assets > all (select assets from branch where branch_city = ‘Brooklyn’) Sem o all (select branch_name from branch) except (select branch_name from branch T,branch S where S.branch_city = ‘Brooklyn’ and T.assets < S.assets)

©Silberschatz, Korth and Sudarshan (modificado)4.2.17Database System Concepts Definição da cláusula all F all r  t  r  : (F t) (5< all) = false ) = true (5  all) = true (dado que 5  4 e 5  6) (5< all ) = false (5 = all (  all)  not in Contudo, (= all)  in

©Silberschatz, Korth and Sudarshan (modificado)4.2.18Database System Concepts Teste de Relações Vazias A construção exists devolve o valor true se a subconsulta é não vazia. exists r  r  Ø not exists r  r = Ø

©Silberschatz, Korth and Sudarshan (modificado)4.2.19Database System Concepts Consulta de exemplo Listar todos os clientes que têm uma conta em todas as agências de Brooklyn. select distinct S.customer_name from depositor as S where not exists ( (select branch_name from branch where branch_city = ‘Brooklyn’) except (select account.branch_name from depositor as T natural inner join account where S.customer_name = T.customer_name) ) Notas:  Repare que X – Y = Ø  X  Y  Não se pode escrever esta consulta com combinações de = all ou de suas variantes.  Em álgebra relacional esta consulta escrever-se-ia com uma divisão:  customer_name,branch_name ( depositor account)   branch_name (  branch_city=‘Brooklyn’ ( branch ))

©Silberschatz, Korth and Sudarshan (modificado)4.2.20Database System Concepts Cláusula contains Listar todos os clientes que têm uma conta em todas as agências de Brooklyn. select distinct S.customer_name from depositor as S where (select account.branch_name from depositor as T natural inner join account where S.customer_name = T.customer_name) contains (select branch_name from branch where branch_city = ‘Brooklyn’) Nota: Não existe no Oracle, o que não é grave pois: X  Y  X – Y = Ø

©Silberschatz, Korth and Sudarshan (modificado)4.2.21Database System Concepts Divisão em SQL r  s = { t | t   R-S (r)   u  s ( t(u)  r ) } De forma equivalente:  Seja q = r  s  Então q é a maior relação satisfazendo q x s  r Seja r(A,B) e s(B). Em SQL, r  s é obtido por: select distinct X.A from r as X where (select Y.B from r as Y where X.A = Y.A) contains (select B from s)

©Silberschatz, Korth and Sudarshan (modificado)4.2.22Database System Concepts Testar ausência de tuplos duplicados A construção unique verifica se o resultado de uma subconsulta possui tuplos duplicados. Encontrar todos os clientes que têm só uma conta na agência de Perryridge. select T.customer_name from depositor as T where unique ( select R.customer_name from account natural inner join depositor as R where T.customer_name = R.customer_name and account.branch_name = ‘Perryridge’) Esta construção não está disponível no Oracle

©Silberschatz, Korth and Sudarshan (modificado)4.2.23Database System Concepts Consulta de exemplo Listar todos os clientes que têm pelo menos duas contas na agência de Perryridge. select distinct T.customer_name from depositor T where not unique ( select R.customer_name from account natural inner join depositor as R where T.customer_name = R.customer_name and account.branch_name = ‘ Perryridge ’ )