Bases de Dados. DML Data Manipulation Language Parte 2

Documentos relacionados
Bases de Dados. DML Data Manipulation Language Parte 3

Linguagem SQL Comando SELECT Agrupamento de Resultados

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

Bases de Dados. DML Data Manipulation Language Parte 1

A U L A 3 S U B G R U P O S D M L E D Q L : I N S E R I N D O E P E S Q U I S A N D O D A D O S E M U M A T A B E L A

SQL. Prof. Roger Cristhian Gomes

SQL (Tópicos) Structured Query Language

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

Álgebra Relacional e SQL

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

Rápida revisão do Modelo Relacional

António Rocha Nuno Melo e Castro

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

ANÁLISE E PROJETO DE BANCO DE DADOS

Definida pelo American National Standard Institute (ANSI) em 1986

Linguagem de Consulta Estruturada SQL- DML

Material Teórico. Cláusula GROUP BY e HAVING. Responsável pelo Conteúdo: Prof. Ms. Alexander Gobbato Albuquerque

Bases de Dados. DDL Data Definition Language

TRABALHO DE DEPENDÊNCIA ETAPA 2

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

Projeto de Banco de Dados

Sumário SELECT + FROM

Linguagem de Consulta - SQL

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

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

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

Structured Query Language (SQL) SQL é uma linguagem normalizada (ANSI) para consultas e actualizações de bases de dados relacionais.

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

- SQL Linguagem de Manipulação de Dados

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

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

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

Aula 11 SBD SQL Parte 3. Profa. Elaine Faria UFU

BCD29008 Banco de dados

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

TLBD II Instruções SQL

Manipulando a base de dados

Escola Secundária de Albufeira. Comandos MySQL. (Páginas Web Dinâmicas: PHP e MySQL) Carlos Nunes

SQL - Consultas

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:

SQL Consultas Básicas

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

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

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

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

Sistemas de Informação e Bases de Dados 2012/2013. Linguagem SQL

Introdução ao PostgreSQL

Banco de dados. Aula 22 O Comando SELECT. 1 Wedson Quintanilha da Silva -

IMPLEMENTAÇÃO DE BANCO DE DADOS

DML - SELECT Agrupando Dados

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-99: Esquema de BD EMPRESA

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

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

Prof. Fabiano Taguchi

Projeto de Banco de Dados

SQL DML. Frederico D. Bortoloti

Oracle Database: Fundamentos de SQL e PL/SQL

Linguagem de Consulta Estruturada SQL- DML

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

Bancos (Bases) de Dados

Comandos de Manipulação

PSI Linguagem de Manipulação de dados. Módulo 14

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

STRUCTURED QUERY LANGUAGE (SQL)

Há vários algoritmos para processar junções nested-loop join block nested-loop join indexed nested-loop join merge-join hash-join

SQL TGD/JMB 1. Projecto de Bases de Dados. Linguagem SQL

Banco de Dados. Prof. Antonio

Múltiplas Tabelas. Disciplina de Banco de Dados

Á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:

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

Tarefa Orientada 13 Agrupamento e sumário de dados

Consultas I Para que servem? Como funcionam Tipos de consulta Consultas Selecção Consultas parametrizadas Consultas Tabela de referência cruzada

DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS. Fábio Roberto Octaviano

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

SQL - Structured Query Language

Oracle Database 10g: Fundamentos de SQL e PL/SQL

Tarefa Orientada 7 Consultas de selecção

Bases de Dados BDDAD. Linguagem SQL. Comando SELECT Divisão Algébrica. Nelson Freire (ISEP LEI-BDDAD 2015/16) 1/9

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

Sintaxe do comando SELECT

Bases de Dados. Álgebra Relacional II Junções, agregações, vistas. P. Serendero,

Programação SQL. INTRODUÇÃO II parte

Banco de Dados II. Aula do dia 10/03. Revisão. SQL Estudado até o dia 03/03/2011

Linguagem SQL Comando SELECT Subqueries

Transcrição:

Bases de Dados DML Data Manipulation Language Parte 2

Funções de Grupo São funções aplicáveis a conjuntos de linhas de uma tabela À totalidade dos elementos ou A um subconjunto especificado na cláusula WHERE Obtém-se como resultado apenas 1 elemento, independentemente da forma como foi especificado o conjunto Um conjunto é especificado utilizando a cláusula GROUP BY (subconjunto dos elementos de uma tabela) Quando nada é dito, ou seja, não usamos GROUP BY, estamos a trabalhar sobre todos os registos da tabela As funções de grupo utilizam-se na lista de selecção ou na cláusula HAVING É possível o seu encadeamento (ex: MAX(AVG(x)) ) Não é possível utilizá-las na cláusula WHERE

Funções de Grupo MAX([DISTINCT] exp) Máximo da expressão MIN([DISTINCT] exp) Mínimo da expressão AVG([DISTINCT] n) Valor médio de n ignorando valores nulos SUM([DISTINCT] n) Soma os valores de n ignorando valores nulos NVL(n,valor) Se é null mostrar valor COUNT([DISTINCT] exp) N.º de vezes que exp toma um valor não nulo COUNT(*) Conta todas as linhas seleccionadas incluindo as repetidas e que contenham valores nulos SUM e AVG aplicam-se apenas a valores numéricos. MIN, MAX e COUNT aplicam-se a todos os tipos de dados.

Exemplo - Contar Linhas Para contar quantos registos existem para determinada query utilizamos a função COUNT SELECT COUNT(*) FROM aluno; SELECT COUNT(DISTINCT local_aluno) FROM aluno; SELECT COUNT(nome_aluno) FROM aluno; SELECT COUNT(*) FROM aluno WHERE sexo_aluno = F ;

Exercício 1 Quantos alunos existem? SELECT COUNT(*) Numero de alunos FROM aluno;

Exercício 2 Contabilizar o número de alunos mas por localidade. SELECT COUNT(local_aluno) Numero errado de alunos FROM aluno;

DISTINCT com funções de linha SELECT DISTINCT COUNT(sexo_aluno) FROM aluno; SELECT COUNT(DISTINCT(sexo_aluno)) FROM aluno;

Exercício 3 Qual a idade média dos alunos? DEFINE idade = TRUNC((sysdate-data_nsc_aluno)/365.25); SELECT AVG(&idade) Idade média FROM aluno;

Exercício 4 Qual a idade do aluno mais velho? DEFINE idade = TRUNC((sysdate-data_nsc_aluno)/365.25); SELECT MAX(&idade) Idade do aluno mais velho FROM aluno;

A Cláusula GROUP BY Utilizada quando se pretende trabalhar sobre subgrupos dos registos de uma tabela: SELECT <atributos>, <funções de grupo> FROM <tabelas> [WHERE <condições>] [ORDER BY <atributos [ASC DESC]>] [GROUP BY <atributos>]; SELECT sexo_aluno Sexo, COUNT(*) Total FROM aluno GROUP BY sexo_aluno; Quantos alunos existem do sexo Masculino e Feminino?

Exercício 5 Quantos alunos do curso 1 existem por localidade? SELECT UPPER(local_aluno), COUNT(*) FROM aluno WHERE cod_curso = 1 AND local_aluno IS NOT NULL GROUP BY UPPER(local_aluno);

Exercício 6 Quais os nomes dos alunos que moram na mesma localidade? Não é possível agrupar por localidade, visto existir mais de um nome por localidade. SELECT nome_aluno, local_aluno FROM aluno ORDER BY local_aluno;

Exercício 7 Para as idades dos alunos, mostrar quantos têm a mesma idade. DEFINE idade = TRUNC((sysdate-data_nsc_aluno)/365.25); SELECT &idade Idade, COUNT(*) Numero FROM aluno GROUP BY &idade;

A Cláusula HAVING Quando o número de elementos em cada subgrupo é extenso torna-se mais viável observar de forma independente apenas aqueles que obedecem a determinada característica; A cláusula HAVING serve justamente para restringir os grupos a mostrar como resultado: SELECT <atributos>, <funções de grupo> FROM <tabelas> [WHERE <condições>] [ORDER BY <atributos [ASC DESC]>] [GROUP BY <atributos>] [HAVING <condições>];

Exemplo Cláusula HAVING SELECT local_aluno, COUNT(*) FROM aluno WHERE local_aluno IS NOT NULL GROUP BY local_aluno HAVING COUNT(*) > 1; Quais os nomes das localidades que têm mais do que um aluno a estudar na EST e quantos alunos têm?

Exercício 8 Mostrar as localidades que tenham apenas uma aluna a estudar na EST (ordenado por localidade). SELECT local_aluno Localidade FROM aluno WHERE sexo_aluno = F GROUP BY local_aluno HAVING COUNT(*) = 1;

Os Subgrupos É ainda possível formar grupos dentro de grupos: SELECT cod_curso Curso, sexo_aluno Sexo, COUNT(*) FROM aluno GROUP BY cod_curso, sexo_aluno; Quantos alunos, discriminados por sexo, existem em cada curso?

Dicionário de dados (1) A tabela dictionary indica-nos quais as tabelas que constituem o dicionário. Descrição da tabela DICTIONARY Visualizar todas as tabelas de sistema disponíveis para o utilizador.

Dicionário de dados (2) Visualizar todas as tabelas que o utilizador criou

Junção de Tabelas É com a junção que cruzamos a informação de diferentes tabelas Em SQL fazem-se junções indicando na cláusula WHERE de um SELECT a condição de junção das tabelas envolvidas Passos a seguir: Pensar no produto cruzado das tabelas (no FROM) Identificar a condição de junção (no WHERE) Fazer a projecção (na lista de selecção)

Exemplo Junção de Tabelas Obter uma lista de todos os alunos com o respectivo curso em que cada um está inscrito! Tendo 10 alunos e 4 cursos, vamos obter um produto cruzado com 40 registos de resultado! Agora fazemos uma equi-junção (=) Neste caso, queremos restringir os elementos por forma a ver apenas as linhas em que o código do curso é igual (comum a ambas as tabelas)

Nomes Simbólicos para Tabelas Da mesma forma que podemos definir pseudónimos para as colunas num SELECT, também podemos definir um pseudónimo (alias) para uma tabela Tal definição é feita na cláusula FROM, após o nome da tabela e é utilizada em posteriores referências à mesma

Exemplo - Nomes Simbólicos para Tabelas Nomes simbólicos a e c para as tabelas aluno e curso, respectivamente

Exercício 9 Mostrar os possíveis pares (M e F) que se conseguem formar entre alunos do mesmo curso. Não mostrando pares repetidos

Operadores SQL sobre Conjuntos São úteis na construção de queries que se refiram a tabelas distintas Combinam os resultados de duas ou mais instruções de selecção num só A ordem de execução é de cima para baixo mas podemos modificar prioridades de execução usando parêntesis Os operadores existentes são: MINUS: diferença de conjuntos UNION[ALL]: união de conjuntos (sem ALL mostra apenas os registos distintos) INTERSECT: intersecção de conjuntos

Regras - Operadores Sobre Conjuntos As instruções SELECT têm de envolver um igual número de atributos As colunas correspondentes têm de representar o mesmo tipo de dados Os nomes das colunas do primeiro SELECT são os que aparecem no cabeçalho do resultado A cláusula ORDER BY só aparece no fim da instrução após a aplicação de todos os operadores desejados

Exemplo - Operadores sobre Conjuntos Quais os alunos que ainda não concluíram SELECT num_aluno, nome_aluno nenhuma cadeira? FROM aluno MINUS SELECT DISTINCT a.num_aluno, nome_aluno FROM aluno a, inscricao i WHERE a.num_aluno = i.num_aluno AND i.data_avaliacao IS NOT NULL;

Exemplo Operadores Sobre Conjuntos Quais os nomes de todos os alunos e professores da EST? Quais os alunos cujo nome coincide com o de algum professor?

Junção Externa Ocorre quando se faz uma junção em que nem todos os atributos de uma tabela têm valor correspondente na outra (por exemplo, numa delas são NULL) Aqui mostramos todas as categorias, mesmo aquelas em que não há nenhum professor...

Referências e Links Úteis An Introduction to Database Systems C. J. Date Addison Wesley The Practical SQL Handbook Judith S. Bowman et al Addison Wesley Sintaxe de todos os comandos SQL para Oracle http://www.ss64.com/ora/ Tutorial Resumido de comandos Oracle http://www.engin.umich.edu/caen/technotes/oracletut.pdf Mais comandos e funções Oracle http://www.cit.uws.edu.au/docs/oracle/sqlref/ch2.htm