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

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 inicialCarlos Santos
 
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 alunosCarlos 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 alunosCarlos Santos
 
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...Carlos Santos
 
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áticoCarlos Santos
 
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)Carlos Santos
 
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 EnvironmentCarlos Santos
 
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 CampusCarlos Santos
 
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 projectCarlos Santos
 
SAPO Campus: Gamification em contexto educativo
SAPO Campus: Gamification em contexto educativoSAPO Campus: Gamification em contexto educativo
SAPO Campus: Gamification em contexto educativoCarlos Santos
 
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 DeCACarlos Santos
 
T20_LM3: APIs e Scoreoid
T20_LM3: APIs e ScoreoidT20_LM3: APIs e Scoreoid
T20_LM3: APIs e ScoreoidCarlos 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çãoCarlos 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

PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxkellyneamaral
 
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.pdfcomercial400681
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfHELENO FAVACHO
 
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édiorosenilrucks
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfEmanuel Pio
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelGilber Rubim Rangel
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
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 atividadesFabianeMartins35
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇJaineCarolaineLima
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 

Último (20)

PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docx
 
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 EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
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
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdf
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim Rangel
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
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
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 

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