Combinando tabelas: produto seleção projeção

Tamanho: px
Começar a partir da página:

Download "Combinando tabelas: produto seleção projeção"

Transcrição

1 Capítulo 5 Combinando tabelas: produto seleção projeção Este capítulo trata de consultas que envolvem mais de uma tabela ou fonte de registros A combinação de tabelas é genericamente denominada junção no jargão relacional e corresponde às operações de produto, seleção e projeção da álgebra relacional 51 TIPOS DE JUNÇÕES Há três categorias básicas de junção: Cross Join Inner Join Outer Join, que abrange três subtipos: Left outer join Right outer join Full outer join CROSS JOIN A junção cross join, entre duas tabelas (ou fontes de registros) R e S, combina todos os registros de R com todos os registros de S De fato, ela é equivalente à operação de produto da álgebra relacional, apresentada no capítulo 3 Embora a junção cross join raramente seja utilizada isoladamente, é importante compreender seu funcionamento pois ela é a base das demais categorias de junções Potencialmente, toda consulta SQL que referencia mais de uma fonte de registros realiza uma operação de cross join Observe esta consulta, que produz as combinações de cada um dos registros da tabela ALUNO com cada um dos registros da tabela CURSO select * from aluno, curso matricula nome sexo alunocodcurso nascimento cursocodcurso curso 1001 M DIR 21/02/80 DIR 1001 M DIR 21/02/80 JOR Jornalismo 1001 M DIR 21/02/80 INF Informática 1002 Maria Rita Colatti F INF 10/11/78 DIR 1002 Maria Rita Colatti F INF 10/11/78 JOR Jornalismo 1002 Maria Rita Colatti F INF 10/11/78 INF Informática 1004 Oscarito Vianna M DIR 14/08/79 DIR 1004 Oscarito Vianna M DIR 14/08/79 JOR Jornalismo

2 68 Combinando tabelas: produto seleção projeção 1004 Oscarito Vianna M DIR 14/08/79 INF Informática 1005 F JOR 29/10/79 DIR 1005 F JOR 29/10/79 JOR Jornalismo 1005 F JOR 29/10/79 INF Informática 1007 M DIR 15/07/79 DIR 1007 M DIR 15/07/79 JOR Jornalismo 1007 M DIR 15/07/79 INF Informática 1008 Sacadura Miranda M INF 12/12/81 DIR 1008 Sacadura Miranda M INF 12/12/81 JOR Jornalismo 1008 Sacadura Miranda M INF 12/12/81 INF Informática 1010 F JOR 10/08/75 DIR 1010 F JOR 10/08/75 JOR Jornalismo 1010 F JOR 10/08/75 INF Informática Há 21 linhas no resultado porque foram combinados sete registros da tabela ALUNO com três registros da tabela CURSO (7 3 = 21) Se houvesse outras fontes de registros na cláusula from, o produto envolveria todas elas Por sua vez, a consulta select * from aluno, curso, disciplina produz = 147 registros, pois combina alunos, cursos e disciplinas A cláusula where pode ser livremente combinada com a junção cross join A consulta abaixo filtra as linhas do produto das duas tabelas select * from aluno, curso where sexo = 'M' matricula nome sexo alunocodcurso nascimento cursocodcurso curso 1001 M DIR 21/02/80 DIR 1001 M DIR 21/02/80 JOR Jornalismo 1001 M DIR 21/02/80 INF Informática 1004 Oscarito Vianna M DIR 14/08/79 DIR 1004 Oscarito Vianna M DIR 14/08/79 JOR Jornalismo 1004 Oscarito Vianna M DIR 14/08/79 INF Informática 1007 M DIR 15/07/79 DIR 1007 M DIR 15/07/79 JOR Jornalismo 1007 M DIR 15/07/79 INF Informática 1008 Sacadura Miranda M INF 12/12/81 DIR 1008 Sacadura Miranda M INF 12/12/81 JOR Jornalismo 1008 Sacadura Miranda M INF 12/12/81 INF Informática Note que, mesmo que nem todos atributos sejam mostrados no resultado, o produto da fontes de registros é levado a efeito select matricula, nome from aluno, curso order by matricula matricula nome Maria Rita Colatti 1002 Maria Rita Colatti 1002 Maria Rita Colatti 1004 Oscarito Vianna 1004 Oscarito Vianna 1004 Oscarito Vianna

3 Tipos de junções Sacadura Miranda 1008 Sacadura Miranda 1008 Sacadura Miranda Esta consulta ilustra um erro bastante comum de programadores SQL iniciantes, que incluem tabelas desnecessárias na cláusula from e esquecem-se de que seus registros participam do produto com as demais fontes de registros O sintoma mais claro deste erro é a repetição de linhas no resultado, provocada pelo produto com a tabela adicional No caso, cada aluno aparece três vezes porque este é o número de registros da tabela CURSO, incluída indevidamente na cláusula from Algumas implementações SQL aceitam uma sintaxe específica para o cross join A consulta select * from aluno cross join curso cross join disciplina nas implementações mencionadas é equivalente a select * from aluno, curso, disciplina INNER JOIN Na junção do tipo inner join os registros são combinados segundo algum critério lógico Normalmente, o projeto de bancos de dados prevê atributos que fazem a ligação entre as diversas tabelas do esquema Essas ligações, ou elos, são então utilizados como critério de combinação nas consultas SQL A junção natural, mencionada no capítulo 3, é um caso particular de inner join, pois combina registros que têm atributos comuns com valores correspondentes Um registro que não tem correspondente na outra tabela não aparece no resultado da junção A consulta a seguir ilustra este caso select curso, nome from aluno, curso where alunocodcurso = cursocodcurso order by curso, nome curso Informática Informática Jornalismo Jornalismo nome Oscarito Vianna Maria Rita Colatti Sacadura Miranda O resultado contém atributos das tabelas Curso e Aluno: a coluna curso vem da tabela Curso e a coluna nome, da tabela Aluno Assim, a cláusula from referencia essas duas tabelas Curso CodCurso Curso Aluno Matricula Nome Sexo CodCurso Nascimento

4 70 Combinando tabelas: produto seleção projeção Pensando em termos da Álgebra Relacional, o problema requer o produto da tabela ALUNO e CURSO seguido de uma seleção onde os atributos codcurso são iguais e de uma projeção sobre as colunas desejadas, nome e curso No esquema da nossa base de exemplos, podemos observar que há uma ligação entre alunos e cursos, através de um atributo comum, codcurso O raciocínio com as operações da álgebra aplica-se perfeitamente à consulta SQL acima Inicialmente, podemos iniciar a construção da consulta por uma forma simples, sem a lista alvo, sem filtragem e sem critério de ordenação select * from aluno, curso A consulta pode agora ser refinada pela filtragem das combinações que interessam, ou seja, onde o atributo codcurso da tabela ALUNO é igual ao atributo codcurso da tabela CURSO Como o produto acima abriga duas colunas com o mesmo nome, codcurso, essas foram individualmente diferenciadas por um prefixo que identifica a origem de cada uma select * from aluno, curso where alunocodcurso = cursocodcurso Até aqui teríamos a operação de produto, em função do cross join, e a operação de seleção, produzindo matricula nome sexo alunocodcurso nascimento cursocodcurso curso 1 M DIR 21/02/80 DIR 2 Maria Rita Colatti F INF 10/11/78 INF Informática 4 Oscarito Vianna M DIR 14/08/79 DIR 5 F JOR 29/10/79 JOR Jornalismo 7 M DIR 15/07/79 DIR 8 Sacadura Miranda M INF 12/12/81 INF Informática 10 F JOR 10/08/75 JOR Jornalismo Agora, aparecem no resultado somente as combinações válidas de alunos e cursos, pois o elo de ligação entre as tabelas foi empregado no critério de filtragem Para chegarmos à forma original da consulta, basta introduzirmos a cláusula select que especifica a lista alvo (a operação de projeção), o critério de ordenação e o resultado desejado é obtido select curso, nome from aluno, curso where alunocodcurso = cursocodcurso curso nome Oscarito Vianna Informática Maria Rita Colatti Informática Sacadura Miranda Jornalismo Jornalismo Consultas podem combinar mais de duas tabelas, simplesmente pela adição de novas fontes de registros na cláusula from Vamos considerar uma consulta que produz a lista de alunos e as disciplinas por eles cursadas, de acordo com os elos entre as tabelas da base exemplo

5 Tipos de junções 71 Professor CodProfessor Nome 1 0:n Disciplina CodDisciplina Disciplina CodProfessor CHST CHSP 1 0:n Inscrição Matrícula CodDisciplina Nota 0:n 1 Aluno Matrícula Nome Sexo CodCurso Nascimento 0:n 1 Curso CodCurso Curso O relacionamento entre alunos e disciplinas é estabelecido através das inscrições, e a consulta deve combinar os registros das três tabelas na construção do resultado Note que nesta consulta, todos os atributos foram qualificados, mesmo os que não são ambíguos Os registros da tabela INSCRIÇÃO servem como ponte, não contribuindo com atributos para o select alunonome, disciplinadisciplina from aluno, disciplina, inscricao where alunomatricula = inscricaomatricula and inscricaocoddisciplina = disciplinacoddisciplina order by alunonome, disciplinadisciplina nome Maria Rita Colatti disciplina Estatística Sociologia Dir Constitucional Civil Português Sociologia Compiladores Dir Constitucional Português resultado final O critério de filtragem, contudo, deve selecionar as combinações entre alunos e inscrições, através do termo lógico alunomatricula = inscricaomatricula e as combinações entre inscrições e disciplinas, através do termo lógico inscricaocoddisciplina = disciplinacoddisciplina OUTER JOIN: LEFT, RIGHT E FULL Na junção do tipo outer join os registros também devem ser combinados segundo algum critério lógico, com vimos na junção inner join A diferença é que mesmo os registros que não têm correspondentes na outra tabela podem aparecer no resultado da operação Esse registros sem correspondentes são combinados com um registro fictício, totalmente preenchido com nulos Dessa forma, todos os registros de um operando aparecem no resultado, seja combinados com seus correspondentes, seja combinados com o registro de nulos Se os registros do operando da esquerda são forçados no resultado, a junção é dita um left outer join; se forem forçados os registros do operando da direita, a operação é um right outer join; se forem forçados registros de ambos os operandos, a operação é dita um full outer join Para ilustrar, vamos considerar um exemplo onde a lista de alunos e suas notas é requerida O resultado contém os alunos que estão inscritos em alguma disciplina, juntamente com o código de cada disciplina e sua nota Somente alunos que tenham alguma inscrição aparecem porque a cláusula where requer que haja dois registros, um na tabela ALUNO e outro na tabela INSCRIÇÃO, select alunonome, inscricaocoddisciplina, inscricaonota from aluno, inscricao where alunomatricula = inscricaomatricula order by alunonome, inscricaocoddisciplina nome coddisciplina nota 117 4, ,0 112 NULL 114 7, , ,5 Maria Rita Colatti 210 9,5 112 NULL 317 8,0

6 72 Combinando tabelas: produto seleção projeção que tenham matrículas correspondentes Vamos supor, entretanto, que os alunos que não possuem inscrições devem ser listados mesmo assim Uma formulação adequada para a consulta seria select alunonome, inscricaocoddisciplina, inscricaonota from aluno left join inscricao on alunomatricula = inscricaomatricula order by alunonome, inscricaocoddisciplina select alunonome, inscricaocoddisciplina, inscricaonota from aluno, inscricao where alunomatricula = inscricaomatricula (+) order by alunonome, inscricaocoddisciplina nome coddisciplina nota 117 4, , NULL 114 7, , ,50 Maria Rita Colatti 210 9,50 Oscarito Vianna NULL NULL 112 NULL 317 8,00 Sacadura Miranda NULL NULL O emprego do left outer join força a inclusão de mais dois alunos que, por não terem inscrição alguma, não apareceram anteriormente no resultado A idéia é que os registros que não tenham correspondentes apareçam uma vez, combinados com um registro fictício, preenchido com nulos Oscarito Vianna e Sacadura Miranda não têm inscrições e, nas linhas onde aparecem, os valores dos atributos oriundos da tabela INSCRIÇÃO são nulos O exemplo acima mostra duas formas sintáticas distintas No Access, MySQL e SQL Server, a junção left outer join é explicitamente declarada na cláusula from No Oracle, o left outer join é simbolizado pelo operador (+) conjugado ao sinal de igualdade, significando que a fonte de registros é completada com registros de nulos As variações sintáticas de cada implementação SQL são detalhadas mais adiante neste capítulo A diferença entre right outer join e left outer join é meramente posicional A mesma consulta, com resultado idêntico, poderia ter sido escrita como select alunonome, inscricaocoddisciplina, inscricaonota from inscricao right join aluno on alunomatricula = inscricaomatricula order by alunonome, inscricaocoddisciplina select alunonome, inscricaocoddisciplina, inscricaonota from aluno, inscricao where inscricaomatricula (+)= alunomatricula order by alunonome, inscricaocoddisciplina Aqui, a cláusula from inscricao right join aluno on alunomatricula = inscricaomatricula especifica que os registros da tabela ALUNO, que aparece à direita na cláusula, que não têm correspondentes devem ser combinados com valores nulos O uso de right join compensa a inversão da ordem das fontes de registros, INSCRIÇÃO seguida de ALUNO

7 Entendendo a construção do resultado 73 JUNÇÕES DECLARADAS As junções declaradas empregadas nas consultas acima aderem à sintaxe SQL-92 Nas versões mais antigas do SQL, as operações de outer join eram especificadas no interior da cláusula where, como é o caso da sintaxe Oracle e de um caso particular do SQL Server, comentados mais adiante neste capítulo Entretanto, a declaração da junção externa fica mais compreensível quando declarada diretamente na cláusula from No padrão SQL-92, junções do tipo inner join ainda podem ser especificadas na cláusula where, como vimos nos exemplos acima A sintaxe de junções declaradas especifica os tipos de junções entre pares de fontes de registros Uma junção é definida por alguma das seguintes combinações cross join inner join on <condição de junção> left outer join on <condição de junção> right outer join on <condição de junção> full outer join on <condição de junção> Cada par de fontes de registros envolvidos numa junção declarada formam uma pseudo fonte de registros que pode, por sua vez, ser referenciada em outra junção declarada Observe as consultas seguir from aluno as a cross join inscricao as i cross join disciplina as d where amatricula = imatricula and icoddisciplina = dcoddisciplina from aluno as a inner join inscricao as i on amatricula = imatricula inner join disciplina as d on icoddisciplina = dcoddisciplina Note que, na primeira consulta, o resultado do cross join das tabelas ALUNO e INSCRIÇÃO é utilizado num segundo cross join com a tabela DISCIPLINA Na segunda consulta, o resultado do inner join (natural) das tabelas ALUNO e INSCRIÇÃO junta-se à tabela DISCIPLINA num segundo inner join Nem todas as combinações de junções declaradas são permitidas ou suportadas por todas as implementações SQL As possibilidades de cada implementação serão analisadas mais adiante neste capítulo 52 ENTENDENDO A CONSTRUÇÃO DO RESULTADO Uma dificuldade que surge com freqüência na construção de consultas é a correta compreensão de como o resultado é construído Dada a expressão de uma consulta, como pode o programador SQL analisá-la e prever seu resultado? Esta seção apresenta um roteiro para inferir a feitura do resultado de uma consulta SQL, com base no conceito de variáveis SQL VARIÁVEIS DE REGISTRO SQL Toda fonte de registros referenciada na cláusula from tem a ela associada uma variável de registro, implícita ou explicitamente declarada Vamos tomar como base a consulta apresentada num dos exemplos anteriores select alunonome, inscricaocoddisciplina, inscricaonota from aluno, inscricao where alunomatricula = inscricaomatricula order by alunonome, inscricaocoddisciplina Aluno e inscrição são variáveis de registro implicitamente declaradas, que herdam seus nomes das fontes de registros correspondentes Note que os atributos, ambíguos ou não, aparecem prefixados com os nomes dessas variáveis, aluno e inscricao, designando a origem de cada um deles

8 74 Combinando tabelas: produto seleção projeção A mesma consulta, com variáveis explicitamente declaradas e nomeadas, poderia ter sido escrita como, inota from aluno a, inscricao i where amatricula = imatricula order by anome, icoddisciplina produzindo resultado idêntico e sendo equivalente à que foi apresentada anteriormente As variáveis que representam os registros das tabelas ALUNO e INSCRIÇÃO são explicitamente declaradas e denominadas a e i, respectivamente, na cláusula from Em todo o restante da consulta, como nas cláusulas where e order by, as referências aos atributos passam as utilizar esses nomes Variáveis explícitas são um recurso intensamente utilizado por programadores SQL, porque abreviam a codificação das consultas e facilitam sua leitura Observe que, na declaração implícita, a consulta equivale à construção select alunonome, inscricaocoddisciplina, inscricaonota from aluno aluno, inscricao inscricao where alunomatricula = inscricaomatricula order by alunonome, inscricaocoddisciplina onde as variáveis de registro receberiam nomes idênticos aos de suas fontes de registros Como regra geral vale que toda fonte de registros tem uma variável de registro a ela associada; uma variável de registro pode ser implícita ou explicitamente definida quando sua fonte de registros é declarada na cláusula from A consulta abaixo é um exemplo em que uma fonte de registros tem uma variável de registro explicitamente declarada e a outra, não select anome, inscricaocoddisciplina, inscricaonota from aluno a, inscricao inscricao where amatricula = inscricaomatricula order by anome, inscricaocoddisciplina CONSTRUINDO O RESULTADO Uma variável de registro pode ser instanciada por qualquer dos registros da sua fonte correspondente Para cada combinação das diferentes instâncias das variáveis de registro de uma consulta, uma linha é construída e adicionada ao resultado se o critério de filtragem da cláusula where for verdadeiro Vamos tomar como exemplo a consulta from aluno a, disciplina d, inscricao i where amatricula = imatricula and icoddisciplina = dcoddisciplina order by anome, ddisciplina com as variáveis de registro explícitas a, i e d associadas às tabelas ALUNO, INSCRIÇÃO e DISCIPLINA, respectivamente O quadro a seguir mostra as possíveis instâncias para a variável a Os registros de ALUNO foram numerados de 1 até 7, e cada um deles é uma potencial instância a ALUNO Matricula Nome Sexo CodCurso Nascimento 1001 M DIR 21/02/ Maria Rita Colatti F INF 10/11/ Oscarito Vianna M DIR 14/08/ F JOR 29/10/ M DIR 30/06/ Sacadura Miranda M INF 12/12/ F JOR 10/08/1975 de a

9 Entendendo a construção do resultado 75 O mesmo ocorre para as variáveis d e i, cujas possíveis instâncias aparecem ilustradas nos quadros a seguir d DISCIPLINA CodDisciplina Disciplina CodProfessor CHST CHSP 112 Dir Estatística Compilado Bancos de Sociologia Português i INSCRIÇÃO Matricula CodDisciplina Nota NULL , , , , NULL , , ,0 Dentre as combinações das instâncias das variáveis a, d, i que são possíveis, algumas das que produzem as linhas do resultado aparecem assinaladas abaixo a i d amatricula imatricula icoddisciplina dcoddisciplina Quando a instância de a é o primeiro registro de ALUNO, i é o primeiro registro de INSCRIÇÃO e d é o primeiro registro de DISCIPLINA, a expressão lógica da cláusula where é verdadeira porque amatricula = imatricula and icoddisciplina = dcoddisciplina Essa combinação gera então uma linha do resultado, constituída de acordo com a cláusula select

10 76 Combinando tabelas: produto seleção projeção anome, nesse momento, tem o valor e ddisciplina tem o valor Dir Constitucional (note que essa linha não é a primeira no resultado final, uma vez que as linhas são posteriormente ordenadas) A partir daí, as demais combinações são testadas A próxima combinação é o primeiro registro de ALUNO com o primeiro registro de INSCRIÇÃO com o segundo registro de DISCIPLINA, cujos valores tornam falsa a expressão lógica, e assim sucessivamente Ao final do ciclo, as combinações que passam pelo critério de filtro são as seguintes a i d amatricula imatricula icoddisciplina dcoddisciplina Finalmente, ao lado de cada linha do resultado já ordenado, podemos conferir os números dos registros de cada tabela que, combinados, a originaram nome Maria Rita Colatti disciplina Estatística Sociologia Dir Constitucional Civil Português Sociologia Compiladores Dir Constitucional Português a i d Aqui é possível verificar que a linha que contém Bárbara Carlito, Estatística foi gerada quando a variável a continha o registro 4, a variável i continha o registro 4 e a variável d continha o registro 6 Para a linha Maria Rita Colatti, Compiladores os registros 2, 3, 4 instanciavam as variáveis de registro a, i, d, respectivamente O mesmo raciocínio aplica-se quando há junções do tipo left, right ou full outer join Após a avaliação das combinações válidas, os registros afetados pelas junções de outer join que não possuem correspondentes são combinados com registros fictícios preenchidos com nulos, com novas linhas anexadas ao resultado TIPOS DE JUNÇÕES NO ACCESS Access implementa as operações de cross, inner, left e right join A operação de cross join obedece à sintaxe básica da cláusula from, onde as fontes de registros aparecem separadas por vírgulas, com ou sem variáveis de registro SQL explicitamente declaradas A consulta é um exemplo disso from aluno as a, curso as c Para a operação de inner join, é possível optar pela combinação do produto (cross join) seguido de seleção, como na consulta

11 Tipos de junções no MySQL 77 from aluno as a, curso as c where acodcurso = ccodcurso que tem o mesmo efeito da consulta anterior, ou pela sintaxe de junção declarada, como from aluno as a inner join curso as c on acodcurso = ccodcurso As operações de left e rigth outer join seguem a sintaxe de junção declarada Um exemplo é a consulta ou sua equivalente from aluno as a left join inscricao as i on amatricula = imatricula from inscricao as i right join aluno as a on amatricula = imatricula TIPOS DE JUNÇÕES NO MYSQL A implementação do MySQL é a mais pródiga em termos de variantes sintáticas para as operações de junção, e implementa as modalidades cross, inner, left e right join O cross join, além da sintaxe básica da cláusula from, permite as seguintes variações from aluno as a, curso as c from aluno as a cross join curso as c from aluno as a straight_join curso as c As três consultas acima são equivalentes e produzem absolutamente o mesmo resultado A construção straight_join serve para indicar ao otimizador de consultas que as fontes de registros devem ser lidas rigorosamente na ordem em que aparecem na junção A operação de inner join pode ser obtida a partir do produto seguido da seleção das combinações de registros correspondentes, sendo que qualquer das sintaxes de cross join pode ser empregada como base Veja os exemplos from aluno as a, curso as c where acodcurso = ccodcurso from aluno as a cross join curso as c where acodcurso = ccodcurso from aluno as a straight_join curso as c where acodcurso = ccodcurso from aluno as a inner join curso as c on acodcurso = ccodcurso from aluno as a inner join curso as c using (codcurso) from aluno as a natural join curso as c Uma novidade aqui é a cláusula using no caso de natural join Ao invés de fornecer a expressão lógica que conecta os registros correspondentes, basta indicar quais são os atributos que estabelecem essa correspondência Assim, em lugar de especificar que a expressão lógica on acodcurso = ccodcurso é o critério de junção, basta listar os atributos que constituem os elos de junção natural, como using (codcurso)

12 78 Combinando tabelas: produto seleção projeção TIPOS DE JUNÇÕES NO ORACLE A implementação Oracle, das que foram aqui analisadas, é a que tem o menor número de variações sintáticas, embora também implemente as operações de cross, inner, left e right join A operação de cross join obedece à sintaxe básica da cláusula from, onde as fontes de registros são especificadas separadas por vírgulas, com ou sem variáveis SQL explicitamente declaradas A consulta é um exemplo disso from aluno a, curso c A palavra-chave as, opcional nas demais implementações, não é permitida, causando um erro sintático quando utilizada A operação de inner join é obtida somente pela combinação do produto (cross join) seguido de seleção, como na consulta from aluno a, curso c where acodcurso = ccodcurso Quanto às operações de left e rigth outer join, sua especificação se dá pela presença do operador (+) em conjunto com o operador de comparação que estabelece o critério de associação entre as tabelas sendo combinadas Um exemplo é a consulta from aluno a, inscricao i where amatricula = imatricula (+) Note que qualquer que seja a ordem das fontes de registros na cláusula from, o lado da junção que é completado com registros nulos é especificado diretamente pela posição do operador (+) em relação ao operador de comparação É como se o sinal positivo indicasse o lado onde os registros com nulos seriam acrescentados o operador (+) aparece sempre na cláusula from; (??? TABLE) quando duas tabelas são combinadas através de mais de uma coluna, o operador (+) deve aparecer em todas elas; um operador de comparação contendo (+) não pode ser conectado a uma outra expressão lógica pelo operador lógico or; (+) não pode ser combinado com o operador in; (+) não pode ser combinado com subconsultas; se três ou mais tabelas são combinadas, não é permitido que uma tabela possua colunas com (+) em comparações com mais de uma tabela Ou seja, uma tabela somente pode aparecer em algum tipo de outer join apenas uma vez; se uma tabela aparece num outer join com o operador (+) e a cláusula where possui algum tipo de seleção, esta seleção deve conter o operador (+) Este caso é melhor ilustrado com um exemplo A consulta from aluno a, inscricao i where amatricula = imatricula (+) produz a lista de alunos com suas inscrições, incluindo os alunos sem inscrição alguma nome coddisciplina Maria Rita Colatti 210 Oscarito Vianna NULL

13 Tipos de junções no SQL Server Sacadura Miranda NULL Observe a mesma consulta quando são selecionadas apenas disciplinas cujos códigos são maiores que 300 O resultado agora apresenta-se como from aluno a, inscricao i where amatricula = imatricula (+) and icoddisciplina > 300 nome coddisciplina Note que aparecem apenas as disciplinas de códigos superiores a 300 Note ainda que os alunos sem inscrição alguma não mais aparecem Isto ocorre porque houve uma seleção explícita sobre os registros da tabela INSCRIÇÃO Para manter no resultado os alunos sem inscrição alguma é preciso explicitar que a seleção sobre a tabela INSCRIÇÃO deve levar em conta o outer join entre as duas tabelas Assim, a consulta escrita como from aluno a, inscricao i where amatricula = imatricula (+) and icoddisciplina (+) > 300 produz a lista de alunos inscritos em disciplinas com códigos superiores a 300, além dos alunos que não tem inscrição alguma nome coddisciplina 317 Oscarito Vianna NULL 316 Sacadura Miranda NULL TIPOS DE JUNÇÕES NO SQL SERVER No SQL Server é possível construir consultas com todos os tipos de junção As operações de cross, inner, left e right join seguem sintaxe bastante semelhante à que é utilizada no Access No cross join, além da sintaxe básica da cláusula from, o SQL Server aceita uma sintaxe de junção declarada, como na consulta from aluno as a cross join curso as c Outra diferença, esta pequena, é notada no emprego de left e right outer join, onde a palavra outer é opcional, como nas duas consultas equivalentes, mostradas abaixo from aluno as a left outer join inscricao as i on amatricula = imatricula

14 80 Combinando tabelas: produto seleção projeção from inscricao as i right outer join aluno as a on amatricula = imatricula De modo a oferecer compatibilidade com suas versões antigas, o SQL Server aceita os operadores *= e =* na especificação de left e right outer joins Qualquer das duas consultas acima pode ser escrita como from aluno as a, inscricao as i where amatricula *= imatricula Entretanto, esta é uma sintaxe ambígua, que deve ser evitada, porque o caracter * pode ser interpretado como o operador aritmético de multiplicação em certos casos Note que, neste caso, a ordem das tabelas na cláusula from é irrelevante Quanto à operação de outer full join, sua implementação obedece à sintaxe from aluno a full outer join inscricao i on amatricula = imatricula 53 COMPARANDO AS VARIAÇÕES SINTÁTICAS Esta seção compara as várias alternativas sintáticas disponíveis nos SGBD analisados neste livro A partir de uma consulta de referência, empregando cada um dos tipos de junção, são apresentadas as diversas construções permitidas em cada implementação SQL CROSS JOIN DE DUAS TABELAS A primeira consulta de referência deve produzir todas as combinações de nomes de alunos com nomes de curso, obtida através do produto entre as tabelas ALUNO e CURSO, como mostrado abaixo nome Maria Rita Colatti Maria Rita Colatti Maria Rita Colatti Oscarito Vianna Oscarito Vianna Oscarito Vianna Sacadura Miranda Sacadura Miranda Sacadura Miranda curso Jornalismo Informática Jornalismo Informática Jornalismo Informática Jornalismo Informática Jornalismo Informática Jornalismo Informática Jornalismo Informática Para cada implementação SQL, o quadro a seguir mostra as variações sintáticas que expressam essa mesma consulta de referência

15 Comparando as variações sintáticas 81 from aluno as a, curso as c from aluno as a, curso as c from aluno as a cross join curso as c from aluno as a straight_join curso as c from aluno a, curso c from aluno as a, curso as c from aluno as a cross join curso as c CROSS JOIN DE TRÊS TABELAS Um segundo exemplo de cross join utiliza como referência uma consulta que deve produzir todas as possíveis combinações de alunos, cursos e disciplinas Este resultado contém 147 linhas no formato nome curso disciplina Para cada implementação SQL, o quadro a seguir mostra as variações sintáticas que expressam a mesma consulta básica, ddisciplina from aluno as a, curso as c, disciplina as d, ddisciplina from aluno as a, curso as c, disciplina as d, ddisciplina from aluno as a cross join curso as c cross join disciplina as d, ddisciplina from aluno as a straight_join curso as c straight_join disciplina as d, ddisciplina from aluno a, curso c, disciplina d, ddisciplina from aluno as a, curso as c, disciplina as d, ddisciplina from aluno as a cross join curso as c cross join disciplina as d INNER JOIN DE DUAS TABELAS Na comparação da operação de inner join, a consulta de referência produz a lista de nomes de alunos e respectivos cursos O elo entre as tabelas ALUNO e CURSO é o atributo codcurso, presente em ambas Note que, neste caso, utilizamos a junção natural entre essas tabelas

16 82 Combinando tabelas: produto seleção projeção nome Oscarito Vianna Sacadura Miranda Maria Rita Colatti curso Jornalismo Jornalismo Informática Informática Para cada implementação SQL, o quadro a seguir mostra as variações sintáticas que expressam a consulta de referência from aluno as a, curso as c where acodcurso = ccodcurso from aluno as a inner join curso as c on acodcurso = ccodcurso from aluno as a, curso as c where acodcurso = ccodcurso from aluno as a cross join curso as c where acodcurso = ccodcurso from aluno as a straight_join curso as c where acodcurso = ccodcurso from aluno as a inner join curso as c on acodcurso = ccodcurso from aluno as a inner join curso as c using (codcurso) from aluno as a natural join curso as c from aluno a, curso c where acodcurso = ccodcurso from aluno as a, curso as c where acodcurso = ccodcurso from aluno as a cross join curso as c where acodcurso = ccodcurso from aluno as a inner join curso as c on acodcurso = ccodcurso INNER JOIN DE TRÊS TABELAS O segundo exemplo de inner join supõe uma consulta de referência que produz a lista de alunos que têm inscrições, com as respectivas disciplinas nas quais estão inscritos, como é mostrado a seguir nome Maria Rita Colatti disciplina Dir Constitucional Dir Constitucional Civil Estatística Compiladores Sociologia Sociologia

17 Comparando as variações sintáticas 83 Português Português O quadro a seguir mostra as variações sintáticas para essa consulta from aluno as a, inscricao as i, disciplina as d where amatricula = imatricula and icoddisciplina = dcoddisciplina from ( aluno as a inner join inscricao as i on amatricula = imatricula ) inner join disciplina as d on icoddisciplina = dcoddisciplina from aluno as a, inscricao as i, disciplina as d where amatricula = imatricula and icoddisciplina = dcoddisciplina from aluno as a cross join inscricao as i cross join disciplina as d where amatricula = imatricula and icoddisciplina = dcoddisciplina from aluno as a straight_join inscricao as i straight_join disciplina as d where amatricula = imatricula and icoddisciplina = dcoddisciplina from aluno as a inner join inscricao as i on amatricula = imatricula inner join disciplina as d on icoddisciplina = dcoddisciplina from aluno as a inner join inscricao as i using (matricula) inner join disciplina as d using (coddisciplina) from ( aluno as a natural join inscricao as i ) natural join disciplina as d from aluno a, inscricao i, disciplina d where amatricula = imatricula and icoddisciplina = dcoddisciplina from aluno as a, inscricao as i, disciplina as d where amatricula = imatricula and icoddisciplina = dcoddisciplina from aluno as a cross join inscricao as i cross join disciplina as d where amatricula = imatricula and icoddisciplina = dcoddisciplina from aluno as a inner join inscricao as i on amatricula = imatricula inner join disciplina as d on icoddisciplina = dcoddisciplina Note que na segunda consulta Access e na última do MySQL foi necessário introduzir parênteses nas expressões de junção Do contrário, o Access acusa erro de sintaxe e o MySQL produz resultados errôneos OUTER JOIN DE DUAS TABELAS: LEFT E RIGHT A operação genérica de outer join pode ser do tipo left outer join, right outer join ou full outer join, dependendo de como os operandos são completados por ocasião da produção das linhas do resultado A primeira consulta de referência produz a lista de todos os alunos juntamente com os códigos das disciplinas, quando estiverem inscritos em alguma, caracterizando assim um caso de left outer join nome coddisciplina 317

18 84 Combinando tabelas: produto seleção projeção 112 Maria Rita Colatti 210 Oscarito Vianna NULL Sacadura Miranda NULL As variações sintáticas de cada implementação SQL que expressam essa mesma consulta referência são mostradas a seguir from aluno as a left join inscricao as i on amatricula = imatricula from aluno as a left outer join inscricao as i on amatricula = imatricula from aluno as a left outer join inscricao as i using (matricula) from aluno a, inscricao i where amatricula = imatricula (+) from aluno as a left outer join inscricao as i on amatricula = imatricula from aluno as a, inscricao as i where amatricula *= imatricula O quadro a seguir apresenta as variações da consulta de referência, agora construída com as fontes de registros em ordem inversa, caraterizando a operação de right outer join O resultado é igual ao que foi mostrado acima from inscricao as i right join aluno as a on amatricula = imatricula from inscricao as i right outer join aluno as a on amatricula = imatricula from inscricao as i right outer join aluno as a using (matricula) from aluno a, inscricao i where imatricula (+) = amatricula from inscricao as i right outer join aluno as a on amatricula = imatricula from aluno a, inscricao i where imatricula =* amatricula

19 Comparando as variações sintáticas 85 OUTER JOIN DE TRÊS TABELAS: LEFT E RIGHT Neste caso, a consulta de referência deve produzir a lista de todos os alunos e, quando for o caso, os nomes das disciplinas em que estão inscritos Esta consulta utiliza três fontes de registros, nominalmente as tabelas ALUNO, INSCRIÇÃO e DISCIPLINA, e tem por resultado a lista mostrada a seguir nome Maria Rita Colatti Oscarito Vianna Sacadura Miranda disciplina Português Dir Constitucional Compiladores NULL Estatística Sociologia Civil Dir Constitucional NULL Sociologia Português O quadro mostra as variações sintáticas que expressam a consulta de referência from ( aluno as a left join inscricao as i on amatricula = imatricula ) left join disciplina as d on icoddisciplina = dcoddisciplina from aluno as a left outer join inscricao as i on amatricula = imatricula left outer join disciplina as d on icoddisciplina = dcoddisciplina from aluno as a left outer join inscricao as i using (matricula) left outer join disciplina as d using (coddisciplina) from aluno a, inscricao i, disciplina d where amatricula = imatricula (+) and icoddisciplina = dcoddisciplina (+) from aluno as a left outer join inscricao as i on amatricula = imatricula left outer join disciplina as d on icoddisciplina = dcoddisciplina A seguir, as alternativas sintáticas da consulta de referência, porém empregando a operação de right outer join from ( inscricao as i right join aluno as a on amatricula = imatricula ) left join disciplina as d on icoddisciplina = dcoddisciplina from inscricao as i right outer join aluno as a on amatricula = imatricula left outer join disciplina as d on icoddisciplina = dcoddisciplina from inscricao as i right outer join aluno as a using (matricula) left outer join disciplina as d using (coddisciplina) from aluno a, inscricao i, disciplina d where amatricula = imatricula (+) and icoddisciplina = dcoddisciplina (+)

20 86 Combinando tabelas: produto seleção projeção from inscricao as i right outer join aluno as a on amatricula = imatricula left outer join disciplina as d on icoddisciplina = dcoddisciplina FULL OUTER JOIN Por fim, resta a operação de full outer join Esta operação é extremamente rara porque dificilmente um esquema de bancos de dados corretamente projetado permite e/ou requer sua utilização Como foram definidas, as tabelas do nosso banco de exemplos não propiciam um exemplo interessante Será necessário acrescentar um registro à tabela INSCRIÇÃO, de modo a ilustrar a operação O novo conteúdo da tabela INSCRIÇÃO fica como mostrado a seguir INSCRIÇÃO Matricula CodDisciplina Nota NULL , , , , NULL , , ,00 NULL 210 NULL Note que o registro acrescentado contém o valor nulo para o atributo matrícula É interessante, neste ponto, observar que o relacionamento entre as tabelas ALUNO e INSCRIÇÃO muda, pois uma determinada inscrição está ligada a zero ou um aluno, conforme mostra o diagrama abaixo X Inscricao Matricula CodDisciplina Nota 0:n 0:1 Aluno Matricula Nome Sexo CodCurso Nascimento Agora, se fizermos uma operação de full outer join entre as tabelas ALUNO e INSCRIÇÃO, haverá tanto o caso de alunos que não possuem inscrições como de inscrições que não correspondem a aluno algum Note que relacionamentos desse tipo, em geral, configuram anomalias na base de dados, seja de conteúdo (algum dado digitado erradamente), seja de projeto (relacionamentos 1:N que são opcionais no lado 1) Assim, nossa consulta de referência deve produzir como resultado a lista de todos os alunos e, se for o caso, suas inscrições Também deve incluir todas as inscrições, mesmo que não possuam um aluno correspondente nome coddisciplina Maria Rita Colatti 210 Oscarito Vianna NULL Sacadura Miranda NULL NULL 210

21 Combinando tabelas com outros fins 87 A raridade deste tipo de operação reflete-se nas implementações SQL: somente o SQL Server aceita uma construção sintática que a formula diretamente from aluno a full outer join inscricao i on amatricula = imatricula 54 COMBINANDO TABELAS COM OUTROS FINS Nem sempre a combinação de tabelas visa à identificação de registros correspondentes segundo seus elos de ligação lógica Para ilustrar essa afirmativa, vamos considerar novamente que o conteúdo da tabela ALUNO da base de exemplo tenha sido alterado, como no capítulo 4, e que três registros foram acrescentados ao conteúdo original, introduzindo dois pares de homônimos, Oscarito Vianna e Maria Aparecida da Silva Matricula Nome Sexo CodCurso Nascimento 1001 M DIR 21/02/ Maria Rita Colatti F INF 10/11/ Oscarito Vianna M DIR 14/08/ F JOR 29/10/ M DIR 30/06/ Sacadura Miranda M INF 12/12/ F JOR 10/08/ Maria Aparecida da Silva F JOR 24/09/ Oscarito Vianna M INF 12/05/ Maria Aparecida da Silva F INF 07/04/78 Vamos agora supor que seja preciso construir uma consulta SQL que indique os alunos que têm homônimos na base de dados Para isso, é preciso comparar cada nome com todos os demais e separar os que são iguais Entretanto, aqui surge um problema: até aqui, todas as comparações entre registros que fizemos foram entre registros de tabelas diferentes, combinadas pela operação de produto Como fazer para comparar um registro com os demais da mesma tabela? Pensando em termos de variáveis de registro SQL, podemos imaginar que, se for possível ter duas variáveis distintas sobre a mesma tabela, seria possível fazer as comparações Recorde que todas as possíveis combinações das instâncias das variáveis são consideradas na construção do resultado A consulta select a1matricula, a1nome, a2matricula, a2nome from aluno a1, aluno a2 where a1nome = a2nome faz exatamente isso! Vejamos o resultado produzido a1matricula a1nome a2matricula a2nome Maria Rita Colatti 1002 Maria Rita Colatti 1015 Oscarito Vianna 1004 Oscarito Vianna 1004 Oscarito Vianna 1004 Oscarito Vianna Sacadura Miranda 1008 Sacadura Miranda Maria Aparecida da Silva 1014 Maria Aparecida da Silva 1014 Maria Aparecida da Silva 1014 Maria Aparecida da Silva 1015 Oscarito Vianna 1015 Oscarito Vianna 1004 Oscarito Vianna 1015 Oscarito Vianna 1017 Maria Aparecida da Silva 1017 Maria Aparecida da Silva

22 88 Combinando tabelas: produto seleção projeção 1014 Maria Aparecida da Silva 17 Maria Aparecida da Silva O recurso de utilizar duas variáveis sobre a mesma tabela funciona para podermos comparar cada registro como todos os demais Acontece que um registro também é comparado com ele mesmo e, sendo os nomes iguais porque trata-se do mesmo registro, uma linha do resultado é construída cada vez que isso acontece É preciso refinar a consulta, pois sabemos que cada aluno tem uma matrícula diferente e, portanto, os reais homônimos deverão ter matrículas diferentes A consulta select a1matricula as matricula1, a1nome, a2matricula as matricula2 from aluno a1, aluno a2 where a1nome = a2nome and a1matricula <> a2matricula produz então matricula1 nome matricula Oscarito Vianna Maria Aparecida da Silva Oscarito Vianna Maria Aparecida da Silva 1017 Agora temos somente os que realmente são homônimos no resultado Porém, ainda há um problema: os nomes aparecem duas vezes Somente uma linha com cada par de homônimos seria suficiente Para resolver isso, podemos reformular a consulta como e teremos o resultado desejado select a1matricula as matricula1, a1nome, a2matricula as matricula2 from aluno a1, aluno a2 where a1nome = a2nome and a1matricula < a2matricula matricula1 nome matricula Oscarito Vianna Maria Aparecida da Silva 1017 Esta última mudança foi sutil Como a condição anterior aceitava as combinações de registros com matrículas diferentes, os resultados apareciam em dobro, porque quando a variável a1 tinha como instância o registro de matrícula 1004 e variável a2 o registro de matrícula 1014, uma linha foi incluída no resultado Porém, com as instâncias invertidas, isto é, matrícula 1014 em a1 e matrícula 1004 em a2, outra linha foi incluída A restrição de que a matrícula da variável a1 seja menor que a matrícula da variável a2 faz com que apenas uma vez essa combinação (matrículas 1004 e 1014) passe na expressão lógica de filtragem Este exemplo ilustra como a operação de produto pode ser utilizada como um recurso na construção de consultas SQL Como regra geral, o programador SQL deve lembrar que, sempre que for preciso comparar e/ou combinar registros de tabelas diferentes, ou de uma mesma tabela mais de uma vez, podem-se utilizar variáveis vinculadas a essas tabelas que representem cada um dos seus registros EXERCÍCIOS 51 Escreva uma consulta SQL que produza a lista de professores para os quais há algum aluno com nota ainda não preenchida (valor nulo) O resultado esperado é professor aluno disciplina

23 Exercícios 89 Zenubio Siqueira Dir Constitucional Zenubio Siqueira Dir Constitucional 52 Escreva uma consulta SQL que produza a lista de alunos que estão inscritos na disciplina Português, como mostrado a seguir matricula nome Escreva uma consulta SQL de produza uma lista com os nomes dos professores, em ordem alfabética, e seus respectivos alunos, na mesma ordem, como abaixo professor Carlos Azambuja Carlos Azambuja Lenira Rocha Olivia Straw Pedro Amarante Silvia Ferreira Silvia Ferreira Zenubio Siqueira Zenubio Siqueira aluno Maria Rita Colatti 54 Suponha que a chave primária da tabela INSCRIÇÃO foi removida e que houve um erro na alimentação do banco de dados que resultou em alguns alunos com inscrições duplicadas, em uma ou mais disciplinas, com notas diferentes, como abaixo matricula coddisciplina nota NULL , , , , NULL , , , , ,00 As duas últimas linhas constituem repetições indevidas Escreva uma consulta SQL que mostre esses alunos, juntamente com o nome da disciplina na qual há repetição de inscrição e a nota atribuída em cada inscrição O resultado deve aparecer como sugerido a seguir matricula nome disciplina nota1 nota2 5 Sociologia 5,00 3,00 7 Dir Constitucional 8,00 55 Uma concessionária de automóveis possui um banco de dados que registra os acessórios que equipam cada veículo sendo vendido Duas tabelas armazenam esses dados

24 90 Combinando tabelas: produto seleção projeção Veículo Chassis Acessórios YK YK YK YK K 6 Acessório Código Descrição 1 Direção hidráulica 2 Vidros elétricos 4 Rodas de liga leve 8 CD-Palyer 16 Câmbio automático A tabela Veículo contém o número do chassis de cada veículo juntamente com a soma dos códigos dos acessórios que o equipam, na coluna Acessórios Por exemplo, o automóvel YK está equipado com Direção hidráulica + Rodas de liga leve + CD-player, porque 1+4+8=13 Para essa base, escreva consultas SQL que produzam: a) a lista de veículos juntamente com seus acessórios, um em cada linha, como chassis descricao YK Câmbio automático YK CD-Player YK Direção hidráulica YK Rodas de liga leve YK Vidros elétricos YK CD-Player YK Direção hidráulica YK Rodas de liga leve K Rodas de liga leve K Vidros elétricos YK CD-Player YK Direção hidráulica YK Vidros elétricos YK CD-Player YK Direção hidráulica YK Rodas de liga leve YK Vidros elétricos b) os números de chassis dos veículos equipados, pelo menos, com CD-Player e Rodas de liga leve O veículo pode ter outros acessórios além desses chassis YK YK YK c) os números de chassis dos veículos equipados ou com Rodas de liga leve ou com Vidros elétricos, mas não os dois simultaneamente O veículo pode ter outros acessórios além desses chassis YK YK 56 Indique o resultado das consultas abaixo, nas implementações que as permitem Tente resolver este exercício sem auxílio do computador e explique os resultados a) select 1 as x from aluno

25 Exercícios 91 b) c) select 1 as x from aluno, inscricao, disciplina select 1 as x from ( aluno a inner join inscricao i on amatricula = imatricula ) inner join disciplina d on icoddisciplina = dcoddisciplina 57 Considere duas tabelas R e S, ambas com um atributo a, não necessariamente único Mostre as condições na quais a consulta é equivalente a select * from r outer join aluno s on ra = sa select * from r left join s on ra = sa union select * from r right join s on ra = sa para quaisquer instâncias de R e S

Um toque de álgebra relacional: UNION e outras operações

Um toque de álgebra relacional: UNION e outras operações Capítulo 10 Um toque de álgebra relacional: UNION e outras operações Embora o SQL sejasicamente uma linguagem oriunda da lógica de predicados, a operação de união é realizada explicitamente pelo operador

Leia mais

Um pouco de Álgebra Relacional

Um pouco de Álgebra Relacional Capítulo 3 Um pouco de Álgebra Relacional A compreensão das operações da álgebra relacional é extremamente importante para aqueles que querem conhecer melhor os mecanismos das linguagens de consultas para

Leia mais

matricula nome nota_media 1007 Carlos Maradona 7, Maria Lucia Silva 7, Maria Rita Colatti 9, Ricardo Biondi 8,00

matricula nome nota_media 1007 Carlos Maradona 7, Maria Lucia Silva 7, Maria Rita Colatti 9, Ricardo Biondi 8,00 Capítulo 9 Subconsultas Subconsultas em SQL permitem aumentar consideravelmente o poder de expressão da linguagem e seu alcance, pois tornam possível que uma consulta faça referência ao resultado de outras

Leia mais

Consultas SQL simples: selecionando e projetando

Consultas SQL simples: selecionando e projetando Capítulo 4 Consultas SQL simples: selecionando e projetando Uma consulta SQL é composta por três cláusulas principais 1 : select from where O

Leia mais

Rápida revisão do Modelo Relacional

Rápida revisão do Modelo Relacional Rápida revisão do Modelo Relacional Conceito de relação Tuplas e atributos Rápida revisão do Modelo Relacional Regras de integridade Entidade: Deve existir uma chave primária com valor único e não-nulo.

Leia mais

DML - SELECT JUNÇÕES (JOIN)

DML - SELECT JUNÇÕES (JOIN) DML - SELECT JUNÇÕES (JOIN) 1. Apresentação Nas consultas (SELECT) apresentadas até aqui, somente uma tabela foi acessada por vez. Quando for necessário apresentar informações que estão em mais de uma

Leia mais

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

Bases de Dados. Álgebra Relacional II Junções, agregações, vistas. P. Serendero, Bases de Dados Álgebra Relacional II Junções, agregações, vistas P. Serendero, 2011-13 1 JUNÇÕES OU JOINS em SQL - R S A condição do JOIN é especificada na claúsula ON ou USING,, ou implicitamente

Leia mais

Faculdade Pitágoras Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Faculdade Pitágoras Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet Faculdade Pitágoras Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan Unidade 6.2 Álgebra Relacional - Junção PACIENTE cod-pac

Leia mais

Banco de Dados 1 2º Semestre

Banco de Dados 1 2º Semestre Banco de Dados 1 2º Semestre Aula 06 Prof. Gladimir Ceroni Catarino gladimir@gmail.com SERVIÇO NACIONAL DE APRENDIZAGEM COMERCIAL FACULDADE DE TECNOLOGIA SENAC PELOTAS SQL SERVIÇO NACIONAL DE APRENDIZAGEM

Leia mais

ÁLGEBRA E CÁLCULO RELACIONAL

ÁLGEBRA E CÁLCULO RELACIONAL UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO ERINALDO SANCHES NASCIMENTO ÁLGEBRA E CÁLCULO RELACIONAL MARINGÁ 2014 SUMÁRIO SUMÁRIO...1 1 INTRODUÇÃO...2 1.1

Leia mais

Pesquisas em Tabelas

Pesquisas em Tabelas Projeto e Administração de Banco de Dados Pesquisas em Tabelas Objetivo Nesta unidade você vai estudar sobre pesquisas em linguagem SQL incluindo comandos de junção de tabelas. Introdução Agora que temos

Leia mais

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

Aula 11 SBD SQL Parte 3. Profa. Elaine Faria UFU Aula 11 SBD SQL Parte 3 Profa. Elaine Faria UFU - 2018 Group by e Having Às vezes deseja-se aplicar operações agregadas a cada um dos vários grupos de linhas em um relação Group by e Having C31: Encontre

Leia mais

Álgebra Relacional e SQL

Álgebra Relacional e SQL Álgebra Relacional e SQL Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional Maneira teórica de se manipular o banco de dados relacional Linguagem de consulta procedural usuários

Leia mais

TLBD II. Continuação

TLBD II. Continuação TLBD II Continuação As expressões aritméticas podem conter nomes de colunas, valores numéricos constantes e os operadores aritméticos: OPERADOR DESCRIÇÃO + Adição - Subtracção * Multiplicação / Divisão

Leia mais

5. Expressões aritméticas

5. Expressões aritméticas 5. Expressões aritméticas 5.1. Conceito de Expressão O conceito de expressão em termos computacionais está intimamente ligado ao conceito de expressão (ou fórmula) matemática, onde um conjunto de variáveis

Leia mais

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

SQL - Perguntas. André Restivo. Faculdade de Engenharia da Universidade do Porto. February 24, 2012 SQL - Perguntas André Restivo Faculdade de Engenharia da Universidade do Porto February 24, 2012 André Restivo (FEUP) SQL - Perguntas February 24, 2012 1 / 46 Sumário 1 Introdução 2 Seleccionar e Filtrar

Leia mais

MATA60 BANCO DE DADOS Aula 10- Indexação. Prof. Daniela Barreiro Claro

MATA60 BANCO DE DADOS Aula 10- Indexação. Prof. Daniela Barreiro Claro MATA60 BANCO DE DADOS Aula 10- Indexação Prof. Daniela Barreiro Claro Indexação Indexação em SQL; Vantagens e Custo dos Índices; Indexação no PostgreSQL; FORMAS - UFBA 2 de X; X=23 Indexação Sintaxe: create

Leia mais

Sumário SELECT + FROM

Sumário SELECT + FROM Sumário 1 Introdução SQL - Perguntas André Restivo Faculdade de Engenharia da Universidade do Porto October 18, 2010 2 3 Operadores de Conjuntos 4 5 Agregações 6 Ordenações e Limites 7 Sub-perguntas 8

Leia mais

INDEX. Serve para organizar os dados e agilizar a pesquisa/consulta dos dados armazenado nas tabelas.

INDEX. Serve para organizar os dados e agilizar a pesquisa/consulta dos dados armazenado nas tabelas. INDEX Serve para organizar os dados e agilizar a pesquisa/consulta dos dados armazenado nas tabelas. 1 INDEX o Criação de index segue o padrão ANSI (o mesmo comando para criar index em um determinado SGBD,

Leia mais

BDII SQL Junção Revisão 8

BDII SQL Junção Revisão 8 exatasfepi.com.br BDII SQL Junção Revisão 8 André Luís Duarte Leais são as feridas feitas pelo amigo, mas os beijos do inimigo são enganosos. Provérbios 27:6 SQL Introdução Produto cartesiano Nomes alternativos

Leia mais

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

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL. LINGUAGEM SQL SQL CREATE DATABASE MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL. SQL CREATE TABLE SQL NOT NULL O valor NOT NULL obriga que o campo contenha sempre

Leia mais

BANCO DE DADOS. SQL Select. Engenharia da Computação. Aula 20. Vamos considerar a tabela EMP para os exemplos a seguir. SELECT colunas FROM tabelas;

BANCO DE DADOS. SQL Select. Engenharia da Computação. Aula 20. Vamos considerar a tabela EMP para os exemplos a seguir. SELECT colunas FROM tabelas; Engenharia da Computação BANCO DE DADOS Aula SQL Select SELECT - recupera informação do Banco de Dados. Formato mais simples: SELECT colunas FROM tabelas; Vamos considerar a tabela EMP para os exemplos

Leia mais

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

ALGEBRA RELACIONAL. Álgebra Relacional Conjunto básico de operações para o Modelo Relacional O resultado é uma relação 1/5 Universidade Federal da Bahia Disciplina: Banco de Dados Prof a. Daniela Barreiro Claro ALGEBRA RELACIONAL Duas linguagens formais do Modelo Relacional o Álgebra Relacional e Cálculo Relacional Álgebra

Leia mais

Álgebra Relacional e SQL operações de interesse

Álgebra Relacional e SQL operações de interesse Álgebra Relacional e SQL operações de interesse Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri Álgebra Relacional Maneira teórica de se manipular o banco de dados relacional Linguagem de consulta

Leia mais

1. E 1 R 1 X R 2 (equi-join) C = D

1. E 1 R 1 X R 2 (equi-join) C = D UERJ FACULDADE DE ENGENHARIA DEPARTAMENTO DE ENGENHARIA DE SISTEMAS E COMPUTAÇÃO ENGENHARIA DE SISTEMAS B A. Considere as seguintes relações: R 1 (A:Dom 1; B:Dom 2; C:Dom 3) R 2 (D:Dom 3; E:Dom 4) R 3

Leia mais

BDII SQL Junção Revisão 8

BDII SQL Junção Revisão 8 exatasfepi.com.br BDII SQL Junção Revisão 8 André Luís Duarte Leais são as feridas feitas pelo amigo, mas os beijos do inimigo são enganosos. Provérbios 27:6 SQL Introdução Produto cartesiano Nomes alternativos

Leia mais

BANCO DE DADOS GERENCIAL 1 A U L A 2

BANCO DE DADOS GERENCIAL 1 A U L A 2 BANCO DE DADOS GERENCIAL 1 A U L A 2 N Í V E I S D E V I S Ã O, S U B G R U P O D D L : C R I A N D O B A N C O D E D A D O S, C R I A N D O T A B E L A S, E S T R U T U R A D A T A B E L A CONCEITOS :

Leia mais

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho Gilson de Souza Carvalho gaucho.gilson@hotmail.com 3.1.3 Condições compostas Linguagem e Técnicas em Programação As condições que vimos até agora sempre foram únicas. Entretanto, conforme aumenta a complexidade

Leia mais

1º Teste Sem consulta

1º Teste Sem consulta Bases de Dados 2013/14 12/Abril/14 10:00 Duração: 2h 1º Teste Sem consulta Leia com atenção a informação constante desta página, enquanto espera a indicação do docente para começar a resolução do teste.

Leia mais

Informática. Banco de Dados Relacional. Professor Julio Alves.

Informática. Banco de Dados Relacional. Professor Julio Alves. Informática Banco de Dados Relacional Professor Julio Alves www.acasadoconcurseiro.com.br Informática 1. BANCOS DE DADOS RELACIONAL Um BD relacional possui apenas um tipo de construção, a tabela. Uma

Leia mais

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

MODELAGEM DE DADOS - INTRODUÇÃO AO SQL: DML. Prof. Angelo Augusto Frozza, M.Sc. MODELAGEM DE DADOS - INTRODUÇÃO AO SQL: DML Prof. Angelo Augusto Frozza, M.Sc. http://about.me/tilfrozza DML Data Manipulation Language Linguagem de Manipulação de Dados Comandos básicos: Insert Update

Leia mais

A sintaxe básica para definir uma função é: function nome_da_função([arg1, arg2, arg3]) { Comandos;... ; [return <valor de retorno>]; }

A sintaxe básica para definir uma função é: function nome_da_função([arg1, arg2, arg3]) { Comandos;... ; [return <valor de retorno>]; } Definindo funções A sintaxe básica para definir uma função é: function nome_da_função([arg1, arg2, arg3]) { Comandos;... ; [return ]; Qualquer código PHP válido pode estar contido no

Leia mais

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

Exercício Aula Passada. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada 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@ufu.br Bloco B - sala 1B137 1 semestre de 2018 2 Escreva

Leia mais

Curso EFA Tecnológico Técnico de Informática e Sistemas. - Álgebra Relacional - João Leitão

Curso EFA Tecnológico Técnico de Informática e Sistemas. - Álgebra Relacional - João Leitão Curso EFA Tecnológico Técnico de Informática e Sistemas - Álgebra Relacional - João Leitão Linguagens relacionais Notações para expressar perguntas: algébrica aplicação de operadores a relações lógica

Leia mais

Manipulando a base de dados

Manipulando a base de dados Manipulando a base de dados Uma base de dados pode ser manipulada com quatro operações básicas: Incluir, Apagar, Alterar e Pesquisar. Vale lembrar que como toda linguagem para computadores, o MySQL tem

Leia mais

Abordagem relacional. Capítulo 4

Abordagem relacional. Capítulo 4 Abordagem relacional Capítulo 4 Abordagem Relacional Abordagem de modelagem de dados usada nos sistemas de gerência de banco de dados do tipo relacional. Modelagem em nível lógico (SGBD) e não conceitual.

Leia mais

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

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas Processamento e Otimização de Consultas Banco de Dados Motivação Consulta pode ter sua resposta computada por uma variedade de métodos (geralmente) Usuário (programador) sugere uma estratégia para achar

Leia mais

BCD29008 Banco de dados

BCD29008 Banco de dados BCD29008 Banco de dados Linguagem SQL Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina IFSC campus São José mello@ifsc.edu.br http://docente.ifsc.edu.br/mello/bcd 21 de agosto de 2017

Leia mais

TLBD II. Continuação (04)

TLBD II. Continuação (04) TLBD II Continuação (04) A figura abaixo resume as operações de junção: Junção de Tabelas As junções horizontais atuam sobre linhas. Permite mostrar os dados que estão armazenados em diferentes tabelas

Leia mais

Banco de Dados I Introdução SQL

Banco de Dados I Introdução SQL Banco de Dados I Introdução SQL Frederico Queiroga fredericoqueiroga@gmail.com https://sites.google.com/site/fredericoqueiroga/ Linguagem SQL Aspectos Gerais: Independência do fabricante: Está incorporada

Leia mais

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

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO Disciplina: Banco de Dados I Professor: Prof. Me. Everton

Leia mais

Revisão de Bancos de Dados

Revisão de Bancos de Dados Revisão de Bancos de Dados Conceitos Básicos 1. Defina o que é um banco de dados e o que é um sistema gerenciador de bancos de dados (SGBD). 2. Defina as arquiteturas de software em duas camadas (cliente/servidor)

Leia mais

Banco de Dados Prof. Célio R. Castelano Página 1 de 9. Álgebra Relacional

Banco de Dados Prof. Célio R. Castelano Página 1 de 9. Álgebra Relacional Banco de Dados Prof. Célio R. Castelano Página 1 de 9 Álgebra Relacional A álgebra relacional é uma linguagem procedural, que possui uma coleção de operações que são utilizadas para manipular relações

Leia mais

ANEXO B Manual básico de SQL

ANEXO B Manual básico de SQL ANEXO B Manual básico de SQL Este apêndice descreve como utilizar a Linguagem de Pesquisa Estruturada (SQL, Structured Query Language) para criar conjuntos de registros destinados às páginas dinâmicas.

Leia mais

Sintaxe do comando SELECT

Sintaxe do comando SELECT Universidade Estadual de Mato Grosso do Sul Ciência da Computação Banco de Dados Prof. Nilton nilton@comp.uems.br Sintaxe do comando SELECT SELECT FROM [WHERE ]

Leia mais

Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas

Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas Estrutura de um Programa em Linguagem Algorítmica Nesse curso nós vamos utilizar a linguagem algorítmica para

Leia mais

Curso de Banco de Dados. Prof. Rone Ilídio

Curso de Banco de Dados. Prof. Rone Ilídio Curso de Banco de Dados Prof. Rone Ilídio Introdução BD 1 BD 2 SQL BD 3 Dados Aplicação Sistemas de Gerência de Banco de Dados -SGBD Introdução Aplicação que controla os dados Drives ODBC, BDE, ect SQL

Leia mais

Capítulo 7. Expressões e Sentenças de Atribuição

Capítulo 7. Expressões e Sentenças de Atribuição Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário

Leia mais

Aula 8 BD1 Álgebra Relacional. Profa. Elaine Faria UFU

Aula 8 BD1 Álgebra Relacional. Profa. Elaine Faria UFU Aula 8 BD1 Álgebra Relacional Profa. Elaine Faria UFU - 2018 Introdução Linguagens de consulta formais associadas ao modelo relacional Álgebra Usa uma coleção de operadores e cada consulta descreve um

Leia mais

BCD29008 Banco de dados

BCD29008 Banco de dados BCD29008 Banco de dados Modelo ER & Modelo Relacional Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina IFSC campus São José mello@ifsc.edu.br http://docente.ifsc.edu.br/mello/bcd 18 de

Leia mais

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

Laboratório de Banco de Dados II Aula 04. Prof. Érick de Souza Carvalho Laboratório de Banco de Dados II Aula 04 Prof. Érick de Souza Carvalho 1 SQL (Structured Query Language ) Prof. Érick de Souza Carvalho 2 SQL Structured Query Language - Introdução É uma Linguagem para

Leia mais

O Modelo e a Álgebra Relacional

O Modelo e a Álgebra Relacional O Modelo e a Álgebra Relacional O Modelo Relacional Modelo de dados, que se baseia no princípio em que todos os dados estão guardados em tabelas Baseado em lógica de predicados e na teoria de conjuntos.

Leia mais

UTFPR - Universidade Tecnológica Federal do Paraná. Processamento e otimização de consultas

UTFPR - Universidade Tecnológica Federal do Paraná. Processamento e otimização de consultas UTFPR - Universidade Tecnológica Federal do Paraná Processamento e otimização de consultas Leyza Baldo Dorini 04/Nov/2009 Programação da aula Introdução: processamento e otimização de consultas Etapas:

Leia mais

Descrevendo Circuitos Lógicos (Continuação) CPCX UFMS Prof. Renato F. dos Santos

Descrevendo Circuitos Lógicos (Continuação) CPCX UFMS Prof. Renato F. dos Santos Descrevendo Circuitos Lógicos (Continuação) CPCX UFMS Prof. Renato F. dos Santos 3.6 Descrevendo circuitos lógicos algebricamente Qualquer circuito lógico pode ser descrito usando as três operações booleanas

Leia mais

Aula 16: UCP: Conceitos Básicos e Componentes

Aula 16: UCP: Conceitos Básicos e Componentes Aula 16: UCP: Conceitos Básicos e Componentes Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) UCP: Conceitos Básicos e Componentes FAC 1 / 34

Leia mais

BANCO DE DADOS I/MODELAGEM DE DADOS Prof. Ricardo Rodrigues Barcelar

BANCO DE DADOS I/MODELAGEM DE DADOS Prof. Ricardo Rodrigues Barcelar - Aula 5 - ABORDAGEM RELACIONAL 1. INTRODUÇÃO A abordagem relacional é muito próxima do modelo lógico é uma descrição de um banco de dados no nível de abstração visto pelo usuário do SGBD. Assim, o modelo

Leia mais

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

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 17. Escola Politécnica da Universidade de São Paulo PCS3413 Engenharia de So-ware e Banco de Dados Aula 17 Escola Politécnica da Universidade de São Paulo 1 SQL STRUCTURED QUERY LANGUAGE Manipulação de dados operações de modificam o estado das tabelas:

Leia mais

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA SUMÁRIO Introdução Conceitos básicos Formato básico Tipos primitivos Variáveis Constantes Operadores Operações

Leia mais

Modelo de dados relacional e as restrições de um BD relacional

Modelo de dados relacional e as restrições de um BD relacional Modelo de dados relacional e as restrições de um BD relacional O modelo relacional foi introduzido por Ted Codd, da IBM em 1970 atraiu a atenção em virtude de sua simplicidade e base matemática o modelo

Leia mais

TABELA ENTIDADE LINHA OCORRÊNCIA DA ENTIDADE COLUNA ATRIBUTO DA ENTIDADE

TABELA ENTIDADE LINHA OCORRÊNCIA DA ENTIDADE COLUNA ATRIBUTO DA ENTIDADE TABELA ENTIDADE LINHA OCORRÊNCIA DA ENTIDADE COLUNA ATRIBUTO DA ENTIDADE CARACTERISTICA DE UMA TABELA: NÃO EXISTEM DUAS LINHAS IGUAIS A ORDEM DAS LINHAS É INSIGNIFICANTE A ORDEM DAS COLUNAS É INSIGNIFICANTE

Leia mais

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

Banco de Dados I. Aula 16 - Prof. Bruno Moreno 04/11/2011 Banco de Dados I Aula 16 - Prof. Bruno Moreno 04/11/2011 Plano de Aula O comando DELETE Cláusula CHECK Comparações utilizando NULL Funções agregadas Junções de tabelas em SQL Visões Comando DELETE DELETE

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2 Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas Aula Tópico 2 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para o compilador

Leia mais

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

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 Tópicos do Curso: Introdução Listar os principais recursos do Banco de Dados Oracle 10g Apresentar uma visão geral de: componentes, plataforma de internet, servidor de aplicações e suite do desenvolvedor

Leia mais

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

SQL Básica DML. Prof. Marcos A. Schreiner. 22 de outubro de Curso de Licenciatura em Computação SQL Básica DML Prof. Marcos A. Schreiner Curso de Licenciatura em Computação 22 de outubro de 2015 Prof. Marcos A. Schreiner (UFPR) 22 de outubro de 2015 1 / 16 1 Introdução 2 SQL DML INSERT SELECT UPDATE

Leia mais

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

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013 Linguagem de Manipulação de Dados (DML) Estudo Dirigido A Linguagem SQL Preparação Criar um banco de dados denominado Escola ; Criar a tabela, como especificado abaixo: # RA Numeric(8) Nome Serie Turma

Leia mais

Aula 8: Complemento a Um e Complemento a Dois

Aula 8: Complemento a Um e Complemento a Dois Aula 8: Complemento a Um e Complemento a Dois Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Complemento a Um e Complemento a Dois FAC 1 / 40

Leia mais

conteúdos. bases de dados, SGBD e aplicações. conceitos. modelo relacional (DER) conceitos

conteúdos. bases de dados, SGBD e aplicações. conceitos. modelo relacional (DER) conceitos conceitos 1 conteúdos A necessidade de processamento de DADOS em tempo útil de forma a recolher INFORMAÇÃO relevante, foi sempre uma necessidade sentida pelo Homem. conceitos modelo relacional (DER) 04-01-2012

Leia mais

- Aula 01, 02, 03 e 04 Apresentação da disciplina.

- Aula 01, 02, 03 e 04 Apresentação da disciplina. 1 - Aula 01, 02, 03 e 04 Apresentação da disciplina. Disciplina: Algoritmos (Disciplina é pré-requisito para outras disciplinas). Plano de Ensino: Estrutura Sequencial, Estrutura de Decisão (Desvio Condicional

Leia mais

SQL (com MySQL) Apresentação OBJETIVOS. Programação

SQL (com MySQL) Apresentação OBJETIVOS. Programação SQL (com MySQL) Programação Formato: Mentored - Presencial Preço: 395 ( Os valores apresentados não incluem IVA. Oferta de IVA a particulares e estudantes. ) Horário: Flexível das 2ª a 6ª das 9h às 21h30

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;

Leia mais

<Course name> <Lesson number>- #

<Course name> <Lesson number>- # Obtendo Dados de Várias Tabelas EMPLOYEES DEPARTMENTS Exibindo Dados de Várias Tabelas 4-2 Produtos Cartesianos Gerando um Produto Cartesiano EMPLOYEES (20 linhas) DEPARTMENTS (8 linhas) Um produto cartesiano

Leia mais

ALGORITMOS E APLICAÇÕES. FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior

ALGORITMOS E APLICAÇÕES. FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior ALGORITMOS E APLICAÇÕES FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior Formato Básico do Pseudocódigo Tipos de dados O VisuAlg prevê quatro tipos de dados: inteiro, real,

Leia mais

Page 1. Prof. Constantino Jacob

Page 1. Prof. Constantino Jacob Tópicos Introdução à SQL Definição Tipos de Operações Instrução SELECT Sintaxe básica Operações relacionais de restrição, projeção e junção Instruções DML Delete, Update e Insert Instruções DDL Create

Leia mais

Administração de Banco de Dados

Administração de Banco de Dados Administração de Banco de Dados Aula 8 Prof. Marcos Alexandruk Aula 8 Índices (Indexes) Índices únicos Índices não únicos Índices de chave invertida Índices baseados em funções Índices de bitmap Tabelas

Leia mais

EXPRESSÕES RELACIONAIS

EXPRESSÕES RELACIONAIS AULA 7 EXPRESSÕES RELACIONAIS 7.1 Operadores relacionais Uma expressão relacional, ou simplesmente relação, é uma comparação entre dois valores de um mesmo tipo. Esses valores são representados na relação

Leia mais

SQL (Tópicos) Structured Query Language

SQL (Tópicos) Structured Query Language SQL (Tópicos) Structured Query Language ISI Introdução aos Sistemas de Informação SQL (Tópicos) 1 SQL: componentes SQL / DDL (Data Definition Language) Permite definir os Esquemas de Relação Permite definir

Leia mais

Circuitos Lógicos Combinacionais (parte 2) CPCX UFMS Slides: Prof. Renato F. dos Santos Adaptação: Prof. Fernando Maia da Mota

Circuitos Lógicos Combinacionais (parte 2) CPCX UFMS Slides: Prof. Renato F. dos Santos Adaptação: Prof. Fernando Maia da Mota Circuitos Lógicos Combinacionais (parte 2) CPCX UFMS Slides: Prof. Renato F. dos Santos Adaptação: Prof. Fernando Maia da Mota 4.5 Método do Mapa de Karnaugh Método gráfico usado para simplificar uma equação

Leia mais

Introdução. Ponteiros

Introdução. Ponteiros Introdução O correto entendimento e uso de ponteiros é crítico para um programador C. Há três razões para isso: 1. Ponteiros fornecem os meios pelos quais as funções podem modificar seus argumentos; 2.

Leia mais

1º Teste Sem consulta

1º Teste Sem consulta Bases de Dados 2012/13 10/Abril/13 14:30 Duração: 2h 1º Teste Sem consulta Leia com atenção a informação constante desta página, enquanto espera a indicação do docente para começar a resolução do teste.

Leia mais

!" # Modelos de dados. 1ª geração. 2ª geração. 3ª geração. Modelo Hierárquico Modelo Rede. Modelo Relacional

! # Modelos de dados. 1ª geração. 2ª geração. 3ª geração. Modelo Hierárquico Modelo Rede. Modelo Relacional Nuno Melo e Castro !" # Modelos de dados 1ª geração Modelo Hierárquico Modelo Rede 2ª geração Modelo Relacional 3ª geração Extensões ao modelo relacional Modelo lógico-dedutivo Modelo orientado a objectos

Leia mais

CAPÍTULO 4 - OPERADORES E EXPRESSÕES

CAPÍTULO 4 - OPERADORES E EXPRESSÕES CAPÍTULO 4 - OPERADORES E EXPRESSÕES 4.1 - OPERADORES ARITMÉTICOS Os operadores aritméticos nos permitem fazer as operações matemáticas básicas, usadas no cálculo de expressões aritméticas. A notação usada

Leia mais

Tarefa Orientada 7 Consultas de selecção

Tarefa Orientada 7 Consultas de selecção Tarefa Orientada 7 Consultas de selecção Objectivos: Consultas de selecção O Sistema de Gestão de Bases de Dados MS Access Consultas As consultas (queries) permitem interrogar a base de dados, de acordo

Leia mais

Classes e Objetos. Sintaxe de classe em Java

Classes e Objetos. Sintaxe de classe em Java Classes e Objetos Classes e Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que se baseia na construção de classes e utilização de objetos. Os objetos são formados por dados

Leia mais

Manipulação de Dados com SQL

Manipulação de Dados com SQL Manipulação de Dados com SQL Wendel Melo Faculdade de Computação Universidade Federal de Uberlândia www.facom.ufu.br/~wendelmelo Banco de Dados I manipulação de dados com SQL 2 Structured Query Language

Leia mais

VETORES Motivação AULA 19

VETORES Motivação AULA 19 AULA 19 VETORES 19.1 Motivação Considere o problema de calcular a média aritmética das notas de 5 alunos de uma disciplina e determinar e escrever o número de alunos que obtiveram nota superior à média

Leia mais

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período Programação I Aula 4 - Prof. Laura Silva de Assis Engenharia de Computação 2 o Período CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca UnED Petrópolis 2 o semestre - 2015 1 Sumário

Leia mais

IEC Banco de Dados I Aula 06 Álgebra Relacional

IEC Banco de Dados I Aula 06 Álgebra Relacional IEC Banco de Dados I Aula 06 Álgebra Relacional Turmas: Sistemas de Informação Professora: André Luiz da Costa Carvalho E- mail: andre@icomp.ufam.edu.br Ambiente virtual: hlp://bdufam.wordpress.com Sumário

Leia mais

Banco de Dados. Professora: Luciana Faria

Banco de Dados. Professora: Luciana Faria Banco de Dados Professora: Luciana Faria Introdução ao linguagem é a SQL (Structured Query Language) Linguagem de Consulta Estruturada Para se utilizar, administrar, e trabalhar com um banco de dados é

Leia mais

Introdução ao Modelo Relacional

Introdução ao Modelo Relacional INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE Introdução ao Modelo Relacional Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com 19/05/2016 Sumário Instalação do

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4 Algoritmos e Estruturas de Dados I (DCC/003) 2013/1 Estruturas Básicas Aula Tópico 4 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para

Leia mais

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1 INE5603 Introdução à POO Prof. A. G. Silva 28 de agosto de 2017 Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de 2017 1 / 1 Comandos de decisão simples e compostas Objetivos: Utilização de controles

Leia mais

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:

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: 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: o INSERT - permite a inclusão de novos registros (linhas) nas tabelas o

Leia mais

MATA60 BANCO DE DADOS Aula: Otimização. Prof. Daniela Barreiro Claro

MATA60 BANCO DE DADOS Aula: Otimização. Prof. Daniela Barreiro Claro MATA60 BANCO DE DADOS Aula: Otimização Prof. Daniela Barreiro Claro Introdução a Otimização SQL, SQL3 e OQL são linguagens declarativas O SGBD deve processar e otimizar estas consultas antes delas serem

Leia mais

Lógica Proposicional Parte 2

Lógica Proposicional Parte 2 Lógica Proposicional Parte 2 Como vimos na aula passada, podemos usar os operadores lógicos para combinar afirmações criando, assim, novas afirmações. Com o que vimos, já podemos combinar afirmações conhecidas

Leia mais