SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
Bases de dados: SQL
SELECT, INNER JOINS e OUTER JOINS
Carlos Santos
LabMM 4 - NTC - DeCA - UA
Aula 06, 07-03-2012
Estratégia para a introdução de dados numa BD

Para não violar a integridade referencial da BD

  • Só podemos introduzir valores nas FK que já existam nas PK com que as
    primeiras estão relacionadas:
     • preencher primeiro as tabelas que não tenham FK
     • preencher depois as tabelas com FK, desde que as PK dessas relações
       já tenham valores 



                         Clientes                            Encomendas
                 idCliente     nomeCliente   nrEncomenda   dataEncomenda     Clientes_idCliente
                    1                João         1         2010-­‐02-­‐23           1
                    2               Maria         2         2010-­‐04-­‐11           2

                    3               Manuel        3         2010-­‐03-­‐13           2
                                                  4         2010-­‐05-­‐21

                                                  5         2010-­‐06-­‐25           5
E para apagar dados e tabelas?

Inverter a ordem anterior!

  • apagar primeiro os dados e as tabelas que tenham FK
Exemplos de SQL com INSERT

INSERT

  • INSERT INTO table_name VALUES (value1, value2, value3,...) -> se não
    existir uma PK com auto incremento
  • INSERT INTO decoracao.Vendedores (NomeVend, ApelidoVend) VALUES
    ('Manuel','Vieira');
SQL: SELECT

Vamos considerar como exemplo o exercício de gestão dos CDs. A base
de dados designa-se “MeusCDs” e existe uma tabela com os “Amigos”

  • SELECT * FROM MeusCDs.Amigos;
    “Devolve todos os campos de todos os registos existentes na tabela
    Amigos da BD MeusCDs”




  • SELECT nome, email FROM MeusCDs.amigos;
    “Devolve os campos nome e email de todos os registos existentes na
    tabela Amigos da BD MeusCDs”
SQL: SELECT ... WHERE

Para selecionar um determinado conjunto de registos utiliza-se a cláusula
WHERE
  • SELECT nome_colunas
    FROM nome_tabela
    WHERE nome_coluna operador valor;

A ter em atenção:

  • a coluna da condição não tem que estar na lista de nome_colunas
  • um valor do tipo string é escrito como “valor” ou ‘valor’
  • os operadores possíveis de utilizar são: =, <>, >, <, >=, <=, BETWEEN,
    LIKE e IN
  • o operador LIKE só deve ser utilizado para pesquisas em campos do tipo
    string
SQL: SELECT ... WHERE



 • SELECT * FROM MeusCDs.amigos WHERE nome = ”Rui”;



 • SELECT * FROM MeusCDs.amigos WHERE nome > ‘Carlos’;




 • SELECT * FROM MeusCDs.amigos WHERE nome > Carlos;
   “Unknown column ‘Carlos’ in ‘WHERE clause’
SQL: SELECT ... WHERE ... LIKE



Wildcards em SQL com operador LIKE

  • “_” -> pode ser substituído por qualquer caracter (mas apenas 1)
  • “%” -> pode ser substituído por 0 ou mais caracteres


  • SELECT * FROM MeusCDs.amigos WHERE nome LIKE ”R%”;



  • SELECT * FROM MeusCDs.amigos WHERE nome LIKE ”r%”;
SQL: SELECT ... WHERE ...



  • SELECT * FROM MeusCDs.amigos WHERE nome LIKE ”%o%”;




As condições também podem incluir os operadores lógicos: AND e OR

  • SELECT * FROM MeusCDs.amigos
    WHERE nome="pedro" OR email LIKE "r%";
SQL: SELECT ... ORDER BY ...

Os resultados finais podem ser ordenados pelos valores de uma ou mais
colunas
  • SELECT nome_colunas
    FROM nome_tabela
    ORDER BY nome_coluna(s) [ASC|DESC]

A ter em atenção:
  • a coluna que tem mais prioridade é a que aparece primeiro na lista de
    colunas
  • por defeito, a ordenação é ascendente
SQL: SELECT ... ORDER BY ...



 • SELECT * FROM MeusCDs.amigos ORDER BY nome;




 • SELECT * FROM MeusCDs.amigos ORDER BY nome DESC;
SQL: SELECT ... LIMIT ...

Os resultados finais podem ser limitados a uma determinada gama de
resultados
  • SELECT nome_colunas
    FROM nome_tabela
    LIMIT X,Y;

A ter em atenção:
  • X é o índice do primeiro elemento do resultado global que queremos obter
  • Y é o número de resultados
  • mecanismo muito útil para criar mecanismos de paginação de resultados!
SQL: SELECT ... LIMIT ...



 • SELECT * FROM MeusCDs.amigos LIMIT 1,2;




 • SELECT * FROM MeusCDs.amigos LIMIT 3,100;
E como obter dados resultantes de várias tabelas?

Os processos de combinar dados de várias tabelas no âmbito de uma
query são suportados pelas relações (JOINS) existentes entre elas.
  • exemplo: “listar todos os empréstimos indicando o nome do amigo”




                         amigos                                            empresLmos

   id_amigo           nome               telefone   id_empresLmo   data_empresLmo data_devolucao         id_amigo

      1         José	
  Mourinho        916545955        1           2010-­‐02-­‐23     2010-­‐02-­‐25      1
      2            Jorge	
  Jesus       234545955        2           2010-­‐04-­‐11     2010-­‐04-­‐18
      3       Domingos	
  Paciência     234897897        3           2010-­‐03-­‐13     2010-­‐03-­‐19      1
      4           Vítor	
  Pereira      923435566        4           2010-­‐05-­‐21     2010-­‐05-­‐23      4
      5        André	
  Villas-­‐Boas   934975766        5           2010-­‐06-­‐25     2010-­‐06-­‐29
Joins
                       amigos                                                                         empresLmos

 id_amigo           nome                         telefone                   id_empresLmo    data_empresLmo data_devolucao           id_amigo

    1         José	
  Mourinho                  916545955                        1             2010-­‐02-­‐23      2010-­‐02-­‐25      1
    2            Jorge	
  Jesus                 234545955                        2             2010-­‐04-­‐11      2010-­‐04-­‐18
    3       Domingos	
  Paciência               234897897                        3             2010-­‐03-­‐13      2010-­‐03-­‐19      1
    4           Vítor	
  Pereira                923435566                        4             2010-­‐05-­‐21      2010-­‐05-­‐23      4
    5        André	
  Villas-­‐Boas             934975766                        5             2010-­‐06-­‐25      2010-­‐06-­‐29




                            amigos	
  sem	
                 amigos	
  com            emprésLmos	
  
                            emprésLmos                      emprésLmos                sem	
  amigos
                            registos                                                   registos
                     não	
  relacionados                       registos         não	
  relacionados
                                                            relacionados
INNER JOIN (standard/exclusivo/natural)

Num join natural, um INNER JOIN, os dados resultantes de uma query são
apenas aqueles que podem ser relacionados entre as duas tabelas.

  • SELECT nome_coluna(s)
    FROM nome_tabela1
    INNER JOIN nome_tabela2
    ON nome_tabela1.nome_coluna=nome_tabela2.nome_coluna;

A ter em atenção:
  • os campos mencionados na condição do join são a PK e FK que
    estabelecem a relação entre as duas tabelas
  • os dados da tabela “nome_tabela1” que não estão relacionados com
    dados da tabela “nome_tabela2” não são retornados na query
  • o inverso da última afirmação também é verdade
INNER JOIN

Exemplo: Selecionar todos os Amigos com Empréstimos




  • SELECT MeusCDs.amigos.nome, MeusCDs.emprestimos.id_emprestimo
    FROM MeusCDs.amigos
    INNER JOIN MeusCDs.emprestimos
    ON MeusCDs.amigos.id_amigo = MeusCDs.emprestimos.id_amigo;


  • SELECT amigos.nome, emprestimos.id_emprestimo
    FROM amigos
    INNER JOIN emprestimos
    ON amigos.id_amigo = emprestimos.id_amigo;
INNER JOIN

Exemplo: Selecionar todos os Amigos com Empréstimos




  • SELECT MeusCDs.amigos.nome, MeusCDs.emprestimos.id_emprestimo
    FROM MeusCDs.amigos
    INNER JOIN MeusCDs.emprestimos
    ON MeusCDs.amigos.id_amigo = MeusCDs.emprestimos.id_amigo;
OUTER JOIN (inclusivos)

Os OUTER JOINS permitem obter os registos relacionados e os não
relacionados. Podem ser do tipo LEFT ou RIGHT, de acordo com o sentido
do JOIN.

  • LEFT JOIN Mostra todos os registos relacionados
    (Amigos com Empréstimos)
    +
    Registos não relacionados da tabela esquerda (tabela de partida): amigos
    (Amigos sem Empréstimos)


  • RIGHT JOIN Mostra todos os registos relacionados
    (Amigos com Empréstimos)
    +
    Registos não relacionados da tabela direita (tabela de chegada):
    emprestimos (Empréstimos sem Amigos)
LEFT OUTER JOIN

Exemplo: Seleccionar todos os amigos com empréstimos e todos os
amigos sem empréstimos




  • SELECT MeusCDs.amigos.nome, MeusCDs.emprestimos.id_emprestimo
    FROM MeusCDs.amigos
    LEFT JOIN MeusCDs.emprestimos
    ON MeusCDs.amigos.id_amigo = MeusCDs.emprestimos.id_amigo;
JOINS: exemplo 2

Considere-se um stand automóvel onde cada vendedor é responsável pela
venda de vários automóveis. No entanto, num dado momento, poderão
existir: vendedores sem automóveis atribuídos e automóveis sem
vendedor atribuído.
JOINS: exemplo 2

Selecionar todos os vendedores com carros atribuídos




  • SELECT stand.vendedores.Nome, stand.automoveis.Marca,
    stand.automoveis.Modelo
    FROM stand.vendedores
    INNER JOIN stand.automoveis
    ON stand.vendedores.idVENDEDORES =
    stand.automoveis.VENDEDORES_idVENDEDORES
JOINS: exemplo 2

Selecionar todos os vendedores com e sem carros atribuídos




  • SELECT stand.vendedores.Nome, stand.automoveis.Marca,
    stand.automoveis.Modelo
    FROM stand.vendedores
    LEFT JOIN stand.automoveis
    ON stand.vendedores.idVENDEDORES =
    stand.automoveis.VENDEDORES_idVENDEDORES
JOINS: exemplo 2

Na tabela automóveis foram adicionados 2 novos registos (2 novos
automóveis) aos quais ainda não foi atribuído um vendedor.
Selecionar todos os vendedores com carros atribuídos e os carros sem
vendedor atribuído




  • SELECT stand.vendedores.Nome, stand.automoveis.Marca,
    stand.automoveis.Modelo
    FROM stand.vendedores
    RIGHT JOIN stand.automoveis
    ON stand.vendedores.idVENDEDORES =
    stand.automoveis.VENDEDORES_idVENDEDORES
JOINS: FULL JOIN no MySQL

Selecionar todos os vendedores com carros atribuídos e sem carros
atribuídos e todos os carros atribuídos e carros sem vendedor atribuído
  • SELECT stand.vendedores.Nome, stand.automoveis.Marca,
    stand.automoveis.Modelo
    FROM stand.vendedores
    LEFT JOIN stand.automoveis
    ON stand.vendedores.idVENDEDORES =
    stand.automoveis.VENDEDORES_idVENDEDORES
    UNION
    SELECT stand.vendedores.Nome, stand.automoveis.Marca,
    stand.automoveis.Modelo
    FROM stand.vendedores
    RIGHT JOIN stand.automoveis
    ON stand.vendedores.idVENDEDORES =
    stand.automoveis.VENDEDORES_idVENDEDORES
JOINS: FULL JOIN no MySQL

Selecionar todos os vendedores com carros atribuídos e sem carros
atribuídos e todos os carros atribuídos e carros sem vendedor atribuído

Mais conteúdo relacionado

Mais de Carlos Santos

AVILA Crew – Uma experiência de tutoria de alunos para alunos
AVILA Crew – Uma experiência de tutoria de alunos para alunosAVILA Crew – Uma experiência de tutoria de alunos para alunos
AVILA Crew – Uma experiência de tutoria de alunos para alunos
Carlos Santos
 
SAPO Campus: Gamification em contexto educativo
SAPO Campus: Gamification em contexto educativoSAPO Campus: Gamification em contexto educativo
SAPO Campus: Gamification em contexto educativo
Carlos Santos
 
T20_LM3: APIs e Scoreoid
T20_LM3: APIs e ScoreoidT20_LM3: APIs e Scoreoid
T20_LM3: APIs e Scoreoid
Carlos Santos
 
T19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificaçãoT19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificação
Carlos Santos
 
T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)
Carlos Santos
 
T15_T16_LM3: Mais objetos do Javascript (2013-2014)
T15_T16_LM3: Mais objetos do Javascript (2013-2014)T15_T16_LM3: Mais objetos do Javascript (2013-2014)
T15_T16_LM3: Mais objetos do Javascript (2013-2014)
Carlos Santos
 
T14_LM3: Animação (2013-2014)
T14_LM3: Animação (2013-2014)T14_LM3: Animação (2013-2014)
T14_LM3: Animação (2013-2014)
Carlos Santos
 
T13_LM3: Arrays (2013-2014)
T13_LM3: Arrays (2013-2014)T13_LM3: Arrays (2013-2014)
T13_LM3: Arrays (2013-2014)
Carlos Santos
 

Mais de Carlos Santos (20)

Tecnologias da Comunicação em Educação 2018: Aula inicial
Tecnologias da Comunicação em Educação 2018: Aula inicialTecnologias da Comunicação em Educação 2018: Aula inicial
Tecnologias da Comunicação em Educação 2018: Aula inicial
 
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunosAVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
 
AVILA Crew – Uma experiência de tutoria de alunos para alunos
AVILA Crew – Uma experiência de tutoria de alunos para alunosAVILA Crew – Uma experiência de tutoria de alunos para alunos
AVILA Crew – Uma experiência de tutoria de alunos para alunos
 
chmod 777 education
chmod 777 educationchmod 777 education
chmod 777 education
 
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
 
Tecnologias da Comunicação em Educação: trabalho prático
Tecnologias da Comunicação em Educação: trabalho práticoTecnologias da Comunicação em Educação: trabalho prático
Tecnologias da Comunicação em Educação: trabalho prático
 
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
 
chmod 777 education
chmod 777 educationchmod 777 education
chmod 777 education
 
SAPO Campus towards a
 Smart Learning Environment
SAPO Campus towards a
 Smart Learning EnvironmentSAPO Campus towards a
 Smart Learning Environment
SAPO Campus towards a
 Smart Learning Environment
 
Repensar a tecnologia em contexto educativo: o caso do SAPO Campus
Repensar a tecnologia em contexto educativo: o caso do SAPO CampusRepensar a tecnologia em contexto educativo: o caso do SAPO Campus
Repensar a tecnologia em contexto educativo: o caso do SAPO Campus
 
A technological approach to Open and Social Learning: 
the SAPO Campus project
A technological approach to Open and Social Learning: 
the SAPO Campus projectA technological approach to Open and Social Learning: 
the SAPO Campus project
A technological approach to Open and Social Learning: 
the SAPO Campus project
 
SAPO Campus: Gamification em contexto educativo
SAPO Campus: Gamification em contexto educativoSAPO Campus: Gamification em contexto educativo
SAPO Campus: Gamification em contexto educativo
 
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCARepensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
 
T20_LM3: APIs e Scoreoid
T20_LM3: APIs e ScoreoidT20_LM3: APIs e Scoreoid
T20_LM3: APIs e Scoreoid
 
T19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificaçãoT19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificação
 
T18_LM3: Ajax
T18_LM3: AjaxT18_LM3: Ajax
T18_LM3: Ajax
 
T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)
 
T15_T16_LM3: Mais objetos do Javascript (2013-2014)
T15_T16_LM3: Mais objetos do Javascript (2013-2014)T15_T16_LM3: Mais objetos do Javascript (2013-2014)
T15_T16_LM3: Mais objetos do Javascript (2013-2014)
 
T14_LM3: Animação (2013-2014)
T14_LM3: Animação (2013-2014)T14_LM3: Animação (2013-2014)
T14_LM3: Animação (2013-2014)
 
T13_LM3: Arrays (2013-2014)
T13_LM3: Arrays (2013-2014)T13_LM3: Arrays (2013-2014)
T13_LM3: Arrays (2013-2014)
 

Último

2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
LeloIurk1
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
edelon1
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
LeloIurk1
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
AntonioVieira539017
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
rosenilrucks
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
NarlaAquino
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
FabianeMartins35
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
RavenaSales1
 

Último (20)

2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptx
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 

06 LabMM4 - Bases de dados

  • 1. Bases de dados: SQL SELECT, INNER JOINS e OUTER JOINS Carlos Santos LabMM 4 - NTC - DeCA - UA Aula 06, 07-03-2012
  • 2. Estratégia para a introdução de dados numa BD Para não violar a integridade referencial da BD • Só podemos introduzir valores nas FK que já existam nas PK com que as primeiras estão relacionadas: • preencher primeiro as tabelas que não tenham FK • preencher depois as tabelas com FK, desde que as PK dessas relações já tenham valores Clientes Encomendas idCliente nomeCliente nrEncomenda dataEncomenda Clientes_idCliente 1 João 1 2010-­‐02-­‐23 1 2 Maria 2 2010-­‐04-­‐11 2 3 Manuel 3 2010-­‐03-­‐13 2 4 2010-­‐05-­‐21 5 2010-­‐06-­‐25 5
  • 3. E para apagar dados e tabelas? Inverter a ordem anterior! • apagar primeiro os dados e as tabelas que tenham FK
  • 4. Exemplos de SQL com INSERT INSERT • INSERT INTO table_name VALUES (value1, value2, value3,...) -> se não existir uma PK com auto incremento • INSERT INTO decoracao.Vendedores (NomeVend, ApelidoVend) VALUES ('Manuel','Vieira');
  • 5. SQL: SELECT Vamos considerar como exemplo o exercício de gestão dos CDs. A base de dados designa-se “MeusCDs” e existe uma tabela com os “Amigos” • SELECT * FROM MeusCDs.Amigos; “Devolve todos os campos de todos os registos existentes na tabela Amigos da BD MeusCDs” • SELECT nome, email FROM MeusCDs.amigos; “Devolve os campos nome e email de todos os registos existentes na tabela Amigos da BD MeusCDs”
  • 6. SQL: SELECT ... WHERE Para selecionar um determinado conjunto de registos utiliza-se a cláusula WHERE • SELECT nome_colunas FROM nome_tabela WHERE nome_coluna operador valor; A ter em atenção: • a coluna da condição não tem que estar na lista de nome_colunas • um valor do tipo string é escrito como “valor” ou ‘valor’ • os operadores possíveis de utilizar são: =, <>, >, <, >=, <=, BETWEEN, LIKE e IN • o operador LIKE só deve ser utilizado para pesquisas em campos do tipo string
  • 7. SQL: SELECT ... WHERE • SELECT * FROM MeusCDs.amigos WHERE nome = ”Rui”; • SELECT * FROM MeusCDs.amigos WHERE nome > ‘Carlos’; • SELECT * FROM MeusCDs.amigos WHERE nome > Carlos; “Unknown column ‘Carlos’ in ‘WHERE clause’
  • 8. SQL: SELECT ... WHERE ... LIKE Wildcards em SQL com operador LIKE • “_” -> pode ser substituído por qualquer caracter (mas apenas 1) • “%” -> pode ser substituído por 0 ou mais caracteres • SELECT * FROM MeusCDs.amigos WHERE nome LIKE ”R%”; • SELECT * FROM MeusCDs.amigos WHERE nome LIKE ”r%”;
  • 9. SQL: SELECT ... WHERE ... • SELECT * FROM MeusCDs.amigos WHERE nome LIKE ”%o%”; As condições também podem incluir os operadores lógicos: AND e OR • SELECT * FROM MeusCDs.amigos WHERE nome="pedro" OR email LIKE "r%";
  • 10. SQL: SELECT ... ORDER BY ... Os resultados finais podem ser ordenados pelos valores de uma ou mais colunas • SELECT nome_colunas FROM nome_tabela ORDER BY nome_coluna(s) [ASC|DESC] A ter em atenção: • a coluna que tem mais prioridade é a que aparece primeiro na lista de colunas • por defeito, a ordenação é ascendente
  • 11. SQL: SELECT ... ORDER BY ... • SELECT * FROM MeusCDs.amigos ORDER BY nome; • SELECT * FROM MeusCDs.amigos ORDER BY nome DESC;
  • 12. SQL: SELECT ... LIMIT ... Os resultados finais podem ser limitados a uma determinada gama de resultados • SELECT nome_colunas FROM nome_tabela LIMIT X,Y; A ter em atenção: • X é o índice do primeiro elemento do resultado global que queremos obter • Y é o número de resultados • mecanismo muito útil para criar mecanismos de paginação de resultados!
  • 13. SQL: SELECT ... LIMIT ... • SELECT * FROM MeusCDs.amigos LIMIT 1,2; • SELECT * FROM MeusCDs.amigos LIMIT 3,100;
  • 14. E como obter dados resultantes de várias tabelas? Os processos de combinar dados de várias tabelas no âmbito de uma query são suportados pelas relações (JOINS) existentes entre elas. • exemplo: “listar todos os empréstimos indicando o nome do amigo” amigos empresLmos id_amigo nome telefone id_empresLmo data_empresLmo data_devolucao id_amigo 1 José  Mourinho 916545955 1 2010-­‐02-­‐23 2010-­‐02-­‐25 1 2 Jorge  Jesus 234545955 2 2010-­‐04-­‐11 2010-­‐04-­‐18 3 Domingos  Paciência 234897897 3 2010-­‐03-­‐13 2010-­‐03-­‐19 1 4 Vítor  Pereira 923435566 4 2010-­‐05-­‐21 2010-­‐05-­‐23 4 5 André  Villas-­‐Boas 934975766 5 2010-­‐06-­‐25 2010-­‐06-­‐29
  • 15. Joins amigos empresLmos id_amigo nome telefone id_empresLmo data_empresLmo data_devolucao id_amigo 1 José  Mourinho 916545955 1 2010-­‐02-­‐23 2010-­‐02-­‐25 1 2 Jorge  Jesus 234545955 2 2010-­‐04-­‐11 2010-­‐04-­‐18 3 Domingos  Paciência 234897897 3 2010-­‐03-­‐13 2010-­‐03-­‐19 1 4 Vítor  Pereira 923435566 4 2010-­‐05-­‐21 2010-­‐05-­‐23 4 5 André  Villas-­‐Boas 934975766 5 2010-­‐06-­‐25 2010-­‐06-­‐29 amigos  sem   amigos  com emprésLmos   emprésLmos emprésLmos sem  amigos registos registos não  relacionados registos não  relacionados relacionados
  • 16. INNER JOIN (standard/exclusivo/natural) Num join natural, um INNER JOIN, os dados resultantes de uma query são apenas aqueles que podem ser relacionados entre as duas tabelas. • SELECT nome_coluna(s) FROM nome_tabela1 INNER JOIN nome_tabela2 ON nome_tabela1.nome_coluna=nome_tabela2.nome_coluna; A ter em atenção: • os campos mencionados na condição do join são a PK e FK que estabelecem a relação entre as duas tabelas • os dados da tabela “nome_tabela1” que não estão relacionados com dados da tabela “nome_tabela2” não são retornados na query • o inverso da última afirmação também é verdade
  • 17. INNER JOIN Exemplo: Selecionar todos os Amigos com Empréstimos • SELECT MeusCDs.amigos.nome, MeusCDs.emprestimos.id_emprestimo FROM MeusCDs.amigos INNER JOIN MeusCDs.emprestimos ON MeusCDs.amigos.id_amigo = MeusCDs.emprestimos.id_amigo; • SELECT amigos.nome, emprestimos.id_emprestimo FROM amigos INNER JOIN emprestimos ON amigos.id_amigo = emprestimos.id_amigo;
  • 18. INNER JOIN Exemplo: Selecionar todos os Amigos com Empréstimos • SELECT MeusCDs.amigos.nome, MeusCDs.emprestimos.id_emprestimo FROM MeusCDs.amigos INNER JOIN MeusCDs.emprestimos ON MeusCDs.amigos.id_amigo = MeusCDs.emprestimos.id_amigo;
  • 19. OUTER JOIN (inclusivos) Os OUTER JOINS permitem obter os registos relacionados e os não relacionados. Podem ser do tipo LEFT ou RIGHT, de acordo com o sentido do JOIN. • LEFT JOIN Mostra todos os registos relacionados (Amigos com Empréstimos) + Registos não relacionados da tabela esquerda (tabela de partida): amigos (Amigos sem Empréstimos) • RIGHT JOIN Mostra todos os registos relacionados (Amigos com Empréstimos) + Registos não relacionados da tabela direita (tabela de chegada): emprestimos (Empréstimos sem Amigos)
  • 20. LEFT OUTER JOIN Exemplo: Seleccionar todos os amigos com empréstimos e todos os amigos sem empréstimos • SELECT MeusCDs.amigos.nome, MeusCDs.emprestimos.id_emprestimo FROM MeusCDs.amigos LEFT JOIN MeusCDs.emprestimos ON MeusCDs.amigos.id_amigo = MeusCDs.emprestimos.id_amigo;
  • 21. JOINS: exemplo 2 Considere-se um stand automóvel onde cada vendedor é responsável pela venda de vários automóveis. No entanto, num dado momento, poderão existir: vendedores sem automóveis atribuídos e automóveis sem vendedor atribuído.
  • 22. JOINS: exemplo 2 Selecionar todos os vendedores com carros atribuídos • SELECT stand.vendedores.Nome, stand.automoveis.Marca, stand.automoveis.Modelo FROM stand.vendedores INNER JOIN stand.automoveis ON stand.vendedores.idVENDEDORES = stand.automoveis.VENDEDORES_idVENDEDORES
  • 23. JOINS: exemplo 2 Selecionar todos os vendedores com e sem carros atribuídos • SELECT stand.vendedores.Nome, stand.automoveis.Marca, stand.automoveis.Modelo FROM stand.vendedores LEFT JOIN stand.automoveis ON stand.vendedores.idVENDEDORES = stand.automoveis.VENDEDORES_idVENDEDORES
  • 24. JOINS: exemplo 2 Na tabela automóveis foram adicionados 2 novos registos (2 novos automóveis) aos quais ainda não foi atribuído um vendedor. Selecionar todos os vendedores com carros atribuídos e os carros sem vendedor atribuído • SELECT stand.vendedores.Nome, stand.automoveis.Marca, stand.automoveis.Modelo FROM stand.vendedores RIGHT JOIN stand.automoveis ON stand.vendedores.idVENDEDORES = stand.automoveis.VENDEDORES_idVENDEDORES
  • 25. JOINS: FULL JOIN no MySQL Selecionar todos os vendedores com carros atribuídos e sem carros atribuídos e todos os carros atribuídos e carros sem vendedor atribuído • SELECT stand.vendedores.Nome, stand.automoveis.Marca, stand.automoveis.Modelo FROM stand.vendedores LEFT JOIN stand.automoveis ON stand.vendedores.idVENDEDORES = stand.automoveis.VENDEDORES_idVENDEDORES UNION SELECT stand.vendedores.Nome, stand.automoveis.Marca, stand.automoveis.Modelo FROM stand.vendedores RIGHT JOIN stand.automoveis ON stand.vendedores.idVENDEDORES = stand.automoveis.VENDEDORES_idVENDEDORES
  • 26. JOINS: FULL JOIN no MySQL Selecionar todos os vendedores com carros atribuídos e sem carros atribuídos e todos os carros atribuídos e carros sem vendedor atribuído