SQL: Uma Linguagem de Consulta



Documentos relacionados
SQL: Uma Linguagem de Consulta. Database Management Systems, R. Ramakrishnan (tradução, autorizada, de Anna & Mario Nascimento)

SQL: Consultas, Programação, Gatilhos

António Rocha Nuno Melo e Castro

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

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

Prof.: Clayton Maciel Costa

Comandos de Manipulação

Projeto de Banco de Dados

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

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

Tarefa Orientada 14 Subconsultas

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

NOME SEXO CPF NASCIMENTO SALARIO

SQL DML. Frederico D. Bortoloti

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Standards ISO e ANSI SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003

Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. (

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

Reforçando conceitos de SQL Estudo de Caso: Agenciamento de Corridas de Táxis

Tarefa Orientada 13 Agrupamento e sumário de dados

Memória de aula Aulas 11 e 12

SQL. Prof. Márcio Bueno.

3) Palavra-chave distinct (select-from). Obter apenas os pibs distintos entre si.

SQL Comandos para Relatórios e Formulários. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL (Linguagem de Consulta Estruturada)

IF685 Gerenciamento de Dados e Informação - Prof. Robson Fidalgo 1

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

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

Sumário Introdução Breve História da Linguagem SQL l 0.3 Características da Linguagem SQL A Composição deste Livro 3

select nome from Médicos where codm in (select codm from Consultas where data = 06/06/13 )

Bibliografia. Bases de Dados 2013/2014 Linguagem SQL. Helena Galhardas. Raghu Ramakrishnan, Database Management Systems, Cap. 3 e 5 10/23/ IST

SQL UMA ABORDAGEM INTERESSANTE

Definida pelo American National Standard Institute (ANSI) em 1986

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

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

Capítulo 4 A Linguagem SQL. Murilo Silva de Camargo

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

SQL92 DDL( RIS, ACTUALIZAÇÕES E VISTAS) DML (QUERIES, SUBQUERIES,JUNÇÕES, E OPERAÇÕES SOBRE CONJUNTOS)

Linguagem de Consulta Estruturada SQL- DML

SQL (Structured Querie Language) Escola Secundária de Emídio Navarro 2001/2002 Estruturas, Tratamento e Organização de Dados

SQL. Introdução. Por que SQL? Setenças Select-From-Where

SQL Avançado Continuação. Renata Viegas

ORACLE 11 G INTRODUÇÃO AO ORACLE, SQL,PL/SQL. Carga horária: 32 Horas

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

Usaremos estas instâncias das relações Pilotos e Reservas.

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

Linguagem de Consulta - SQL

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

Introdução ao SQL Avançado

SQL Consultas Básicas

Prof.: Clayton Maciel Costa

Banco de Dados. Prof. Antonio

Pedro F. Carvalho OCP Oracle g LINGUAGEM SQL. São José do Rio Preto

BDII SQL Junção Revisão 8

Structured Query Language (SQL)

Bases de Dados 2005/2006. Aula 5

Prof. Daniela Barreiro Claro

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

Tarefa Orientada 16 Vistas

Álgebra Relacional. OBS: as operações Seleção e Projeção são operações unárias porque atuam em relações únicas.

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

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

EXEMPLOS DE COMANDOS NO SQL SERVER

Exercícios de Lógica Exercícios de Fixação 08

SQL (Structured Query Language)

SQL BANCO DE DADOS. Linguagem de consulta SQL. Linguagem de consulta SQL. Linguagem de Consulta Estruturada

Linguagem SQL. Comandos Básicos

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 4) Clodis Boscarioli

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

1. SQL Instrumental Select Delete Update Insert Group by Having Unnion All...

Banco de Dados Oracle 10g: Introdução à Linguagem SQL

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

MODELO DE DADOS VS ESQUEMA

Projeto e Implementação

BANCO DE DADOS aula 6 álgebra relacional -

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

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

Linguagem de Banco de Dados DML Exercícios

PROGRAMA. Objectivos Gerais :

f. Vocês podem selecionar todos os campos indicando-os, ou seja, sem usar * (boa prática) g. Muito relevante na manutenção de BD e de aplicações.

Motivação. Aplicações precisam acessar o BD Linguagens BD X Linguagens Programação. paradigmas diferentes (impedance mismatch)

Tarefa Orientada 15 Manipulação de dados

DML - SELECT Agrupando Dados

SQL Structured Query Language

Tarefa Orientada 10 Obter informação a partir de uma tabela

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

1. Assinale as afirmações que são verdadeiras e as que são falsas, corrigindo-as:

Bases de Dados 2012/2013 Restrições de Integridade em SQL. Helena Galhardas 2012 IST. Bibliografia

Consultas SQL Parte II

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

Banco de Dados I. Linguagem de Consulta (parte II) Recuperando Dados de Várias Tabelas (JOINS)

Linguagem de Consulta - SQL

Introdução às Bases de Dados

Principais Instruções em SQL. Contidas nesta apostila as principais instruções em SQL para a manutenção em Bancos de Dados.

Principais Instruções em SQL

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

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

SQL. Banco de Dados I. Componentes de SQL

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

Tarefa Orientada 12 Junção Externa, Auto-Junção e União

INE Banco de Dados II. Sumário

Transcrição:

SQL: Uma Linguagem de Consulta 1 Exemplos ilustrativos Considere, como exemplos, as seguintes relações: R1 sid bid day 22 101 10/10/96 58 103 11/12/96 Se a chave para a relacão de Reservas (R1) contivesse somente os atributos sid e bid como mudaria a semântica? S1 S2 sid snam e rating age 22 dustin 7 45.0 31 lubber 8 55.5 58 rusty 10 35.0 sid snam e rating age 28 yuppy 9 35.0 31 lubber 8 55.5 44 guppy 5 35.0 58 rusty 10 35.0 2 1

Consulta Básica SQL SELECT FROM WHERE [DISTINCT] target-list relation-list qualification relation-list Uma lista de relações (possivelmente com uma range-variable depois de cada nome). target-list Uma lista de atributos das relações em relation-list qualification Comparações (entre atributos e/ou constantes) combinadas usando AND, OR e NOT. DISTINCT é uma palavra chave opcional indicando que a resposta não deve contem duplicações. Duplicações não são eliminadas por default! (porque?) 3 Estratégia de Avaliação Conceitual A Semântica de uma consulta SQL é definida com a seguintes estratégia de avaliação conceitual : Computar o produto-cartesiano da relation-list. Descartar tuplas se elas falharem qualifications. Deletar atributos que não estão na target-list. Se DISTINCT é especificada, eliminar duplicações. Esta estratégia é provavelmente a menos eficiente para computar uma consulta! Um otimizador achará mais estratégias eficientes para computar as mesmas respostas. 4 2

Exemplos de Avaliação Conceitual SELECT S.sname, Reserves R WHERE S.sid=R.sid AND R.bid=103 (sid) sname rating age (sid) bid day 22 dustin 7 45.0 22 101 10/10/96 22 dustin 7 45.0 58 103 11/12/96 31 lubber 8 55.5 22 101 10/10/96 31 lubber 8 55.5 58 103 11/12/96 58 rusty 10 35.0 22 101 10/10/96 58 rusty 10 35.0 58 103 11/12/96 5 Uma Nota sobre Range Variables Somente necessário se uma mesma relação aparecer duas vezes na condição FROM. A consulta anterior também pode ser escrita como: OR SELECT S.sname, Reserves R WHERE S.sid=R.sid AND bid=103 SELECT sname FROM Sailors, Reserves WHERE Sailors.sid=Reserves.sid AND bid=103 Todavia usar range variables é uma boaidéia (estilo)! 6 3

Que sailors reservaram pelo menos 1 barco? SELECT S.sid, Reserves R WHERE S.sid=R.sid Adicionar DISTINCT para esta consulta, pode fazer alguma diferença? Qual o efeito ao substituir S.sid por S.sname na condição SELECT? Adicionar DISTINCT para esta variante de consulta pode fazer diferença? 7 Expressões e Strings SELECT S.age, age1=s.age-5, 2*S.age AS age2 WHERE S.sname LIKE B_%B Ilustra o uso de expressões e padrões de strings: Forma triplas (idade dos marinheiros e 2 atributos definidos por expressões) para marinheiros cujo nomes comecem e terminem com B e contenham 3 ou mais letras AS e = servem para nominar campos no resultado. LIKE é usado para strings. `_ representa qualquer letra e `% representa 0 ou mais letras. 8 4

Achar sid s de sailors que reservaram um barco vermelho ou um verde. UNION: Pode ser usado para computar a união de dois conjuntos de tuplas compatíveis (que são eles mesmos resultado de uma consulta SQL). Se substituirmos OR por AND na primeira versão, o que teremos? Também disponível: EXCEPT (O que teremos se substituirmos UNION by EXCEPT?) SELECT S.sid, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND (B.color= red OR B.color= green ) SELECT S.sid, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= red UNION SELECT S.sid, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= green 9 Achar Sid s de marinheiros que tenham reservado um barco vermelho e um verde. INTERSECT: Usado para computar a intersecção de qualquer dois conjuntos compatíveis de tuplas. Incluido no padrão SQL/92 mas não suportado por alguns sistemas. SELECT S.sid, Boats B1, Reserves R1, Boats B2, Reserves R2 WHERE S.sid=R1.sid AND R1.bid=B1.bid AND S.sid=R2.sid AND R2.bid=B2.bid AND (B1.color= red AND B2.color= green ) Key field! SELECT S.sid, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= red INTERSECT SELECT S.sid, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= green 10 5

Consultas Aninhadas Ache nomes de marinheiros que reservaram barco #103 SELECT S.sname WHERE S.sid IN (SELECT R.sid FROM Reserves R WHERE R.bid=103) Uma característica poderosa de SQL: Uma condição WHERE pode conter uma consulta SQL! (De fato, condições FROM e HAVING também podem) Para achar marinheiros que não tem reservas #103, use NOT IN. 11 Consultas aninhadas correlacionadas Achar nomes de marinheiros que reservaram barco #103: SELECT S.sname WHERE EXISTS (SELECT * FROM Reserves R WHERE R.bid=103 AND S.sid=R.sid) EXISTS é outra comparação, como IN. Se UNIQUE é usado, e * é substituído por R.bid, acha marinheiros com pelo menos uma reserva para o barco #103. (UNIQUE verifica tuplas duplicadas; Porque temos que substituir * por R.bid?) Neste caso subconsultas tem que ser re-computadas por cada tupla de marinheiros. 12 6

Ainda sobre operadores de conjuntos IN, EXISTS e UNIQUE pode-se também NOT, i.e., usar NOT IN, NOT EXISTS e NOT UNIQUE. Também disponíveis: op ANY, op ALL, op IN, onde op é >, <, =, etc. Achar marinheiros que cujo taxa é maior do que algum marinheiro chamado Horatio: SELECT * WHERE S.rating > ANY (SELECT S2.rating 2 WHERE S2.sname= Horatio ) 13 Escrevendo consultas INTERSECT usando IN Encontre os sid s que reservaram um barco vermelho e um barco verde : SELECT S.sid, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= red AND S.sid IN (SELECT S2.sid 2, Boats B2, Reserves R2 WHERE S2.sid=R2.sid AND R2.bid=B2.bid AND B2.color= green ) De modo similar, consultas EXCEPT podem ser reescritas usando NOT IN. Para achar nomes substitua S.sid por S.sname na condição SELECT. (Funciona com INTERSECT?) 14 7

Divisão em SQL Encontre os marinheiros que reservaram todos barcos. SELECT S.sname WHERE NOT EXISTS ((SELECT B.bid FROM Boats B) EXCEPT (SELECT R.bid FROM Reserves R WHERE R.sid=S.sid)) 15 Divisão em SQL Sem EXCEPT: SELECT S.sname (2) WHERE NOT EXISTS (SELECT B.bid FROM Boats B WHERE NOT EXISTS (SELECT R.bid FROM Reserves R Sailors S such that... WHERE R.bid=B.bid there is no boat B without... AND R.sid=S.sid)) a Reserves tuple showing S reserved B 16 8

Operadores de Agregação Extensão significante da álgebra relacional. SELECT COUNT (*) SELECT AVG (S.age) WHERE S.rating=10 SELECT S.sname COUNT ( [DISTINCT] A) SUM ( [DISTINCT] A) AVG ( [DISTINCT] A) MAX (A) MIN (A) single column WHERE S.rating= (SELECT MAX(S2.rating) 2) SELECT COUNT (DISTINCT S.rating) WHERE S.sname= Bob SELECT AVG ( DISTINCT S.age) WHERE S.rating=10 17 Achar nome e idade do(s) marinheiro(s) mais velho(s) A primeira consulta é ilegal (?) A terceira consulta é equivalente a segunda consulta, e é considerada no padrão SQL/92, mas não é suportada em alguns sistemas. SELECT S.sname, MAX (S.age) SELECT S.sname, S.age WHERE S.age = (SELECT MAX (S2.age) 2) SELECT S.sname, S.age WHERE (SELECT MAX (S2.age) 2) = S.age 18 9

GROUP BY e HAVING Até agora, temos aplicados operadores de agregação para todas as tuplas (qualificadas). Algumas vezes, queremos aplicá-los para cada um de diferentes grupo de tuplas. Ache a idade do mais jovem para cada nível de taxa. em geral, não sabemos quantos níveis de taxas existem, e o quais são os valores destas taxas para estes níveis. Suponha que sabemos que estes valores de taxas vão de 1 à 10, isso é razoavel? SELECT MIN (S.age) For i = 1, 2,..., 10: WHERE S.rating = i 19 Consultas com GROUP BY e HAVING A target-list contem (i) atributos (ii) termos com operações de agrega,cão (e.g., MIN (S.age)). Os atributos (i) tem que ser um sub conjunto de grouping-list. Intuitivamente, cada resposta tupla corresponde a um grupo, e estes atributos tem que ter um valor simples por grupo. (Um grupo é um conjunto de tuplas que tem o mesmo valor para todos os atributos em grouping-list.) SELECT [DISTINCT] target-list FROM relation-list WHERE qualification GROUP BY grouping-list HAVING group-qualification 20 10

Avaliação Conceitual O produto cartesiano da relation-list é computado, tuplas que falham qualification são descartadas, campos `desnecessários são deletados e as tuplas restantes são divididas em grupos pelo valor dos atributos em grouping-list. O group-qualification é então aplicado para eliminar alguns grupos. Expressões em group-qualification tem que ter um valor singular por grupo! Para todos os efeitos, um atributo no group-qualification que não é um argumento de um operador agregado também aparece no grouping-list. 21 Qual a menor idade do marinheiro com + de 18 anos, para cada grupo de taxa com 2 ou + tais mariheiros SELECT S.rating, MIN (S.age) WHERE S.age >= 18 GROUP BY S.rating HAVING COUNT (*) > 1 Somente S.rating e S.age são mencionados nas condições SELECT, GROUP BY or HAVING; Outros atributos desnecessários. Segunda coluna de resultados não é nominada. (Use AS para nomina-la.) sid sname rating age 22 dustin 7 45.0 31 lubber 8 55.5 71 zorba 10 16.0 64 horatio 7 35.0 29 brutus 1 33.0 58 rusty 10 35.0 rating age 1 33.0 7 45.0 7 35.0 8 55.5 10 35.0 rating 7 35.0 Answer relation 22 11

Para cada barco vermelho, qual o o número de reservas para este barco SELECT B.bid, COUNT (*) AS scount, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= red GROUP BY B.bid Agrupando uma junção combinação de tres relações. O que teremos se removermos B.color= red da condição WHERE e adicionamos uma condição HAVING com esta condição? E se retirarmos Sailors e a condição envolvendo S.sid? 23 Qual a idade do marinheiro mais jovem com idade >= 18, para cada grupo de taxa com 2 ou + marinheiros SELECT S.rating, MIN (S.age) WHERE S.age >= 18 GROUP BY S.rating HAVING 1 < (SELECT COUNT (*) 2 WHERE S.rating=S2.rating) A condição HAVING pode conter uma subconsulta. Compare com a consulta anterior 24 12

Encontre as taxas para as quais a idade média a menor sobre todas as taxas. Operadores de agregação não podem ser aninhados. ERRADO: SELECT S.rating WHERE S.age = (SELECT MIN (AVG (S2.age)) 2) Solução correta (in SQL/92): SELECT Temp.rating, Temp.avgage FROM (SELECT S.rating, AVG (S.age) AS avgage GROUP BY S.rating) AS Temp WHERE Temp.avgage = (SELECT MIN (Temp.avgage) FROM Temp) 25 Valores Nulos Os valores no campo de uma tupla são algumas vezes desconhecidos ou não aplicaveis inapplicable SQL tem um valor nulo especial para estas situações. A presença de null complica muitos resultados. P.ex.: Operadores especiais para verificar se o valor é ou não nulo. rating>8 é verdadeiro ou falso quando rating é igual a nulo? (Precisamos uma lógica de 3-valores). O significado das construção tem ser definido cuidadosamente. (e.g., condição WHERE elimina linhas que não são avaliadas como verdade.) Novos operadores (em particular, para outer joins) possíveis/necessários 26 13

SQL Embutido Comandos SQL podem ser chamados de dentro de um linguagem hospedeira (e.g., C ou COBOL) Comandos SQL podem se referir a host variables (incluindo variáveis especiais usadas para retornar o status). Deve incluir um comando para connectar ao banco de dados certo. Relações SQL são (multi-)conjuntos de registros, limite do número de registros não limitados a priori. Não há estruturas de dados similar em C. Para isso SQL suporta um mecanismo chamado cursor. 27 Cursores Podem ser declarados sobre uma relação ou consulta Pode-se abrir um cursor, e (repetidamente) capturar tuplas, movendo o cursor. Pode usar uma clásula especial, chamada ORDER BY, em consultas que são acessadas por cursor, para controlar a ordem na qual as tuplas são retornadas. Campos em ORDER BY tem que aparecer também na condição SELECT. A condição ORDER BY, que ordena a resposta tuplas, é permitidas somente no contexto de um cursor. Pode-se também modificar/deletar tupla apontada por um cursor. 28 14

Cursor com nomes de marinheiros que reservaram um barco vermelho, em ordem alfabética. EXEC SQL DECLARE sinfo CURSOR FOR SELECT S.sname, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= red ORDER BY S.sname Note que é ilegal substituir S.sname por, digamos S.sid na consulta (Porque?) Podemos adicionar S.sid para a consulta SELECT e substituir S.sname por S.sid na consulta in the ORDER BY? 29 Embutindo SQL em C: Um Exemplo. char SQLSTATE[6]; EXEC SQL BEGIN DECLARE SECTION char c_sname[20]; short c_minrating; float c_age; EXEC SQL END DECLARE SECTION c_minrating = random(); EXEC SQL DECLARE sinfo CURSOR FOR SELECT S.sname, S.age WHERE S.rating > :c_minrating ORDER BY S.sname; do { EXEC SQL FETCH sinfo INTO :c_sname, :c_age; printf( %s is %d years old\n, c_sname, c_age); } while (SQLSTATE!= 02000 ); EXEC SQL CLOSE sinfo; 30 15

Resumo Mais natural que antes, procedimentos de consulta de linguagens. Relacionalmente completa; e significantemente mais expressiva do que algebra relacional. Mesmo consultas que podem ser expressadas em AR podem frequentemente ser expressadas mais naturalmente em SQL. Vários caminhos alternativos para escrever uma consulta; otimizador deve procurar pelo plano de avaliação mais eficiente. na prática, usuários precisam estar atentos como as consultas podem ser otimizadas e avaliadas para melhores resultados. 31 16