Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Bases de dados: SQLSELECT, INNER JOINS e OUTER JOINSCarlos SantosLabMM 4 - NTC - DeCA - UAAula 06, 07-03-2012
Estratégia para a introdução de dados numa BDPara não violar a integridade referencial da BD  • Só podemos introduzir valo...
E para apagar dados e tabelas?Inverter a ordem anterior!  • apagar primeiro os dados e as tabelas que tenham FK
Exemplos de SQL com INSERTINSERT  • INSERT INTO table_name VALUES (value1, value2, value3,...) -> se não    existir uma PK...
SQL: SELECTVamos considerar como exemplo o exercício de gestão dos CDs. A basede dados designa-se “MeusCDs” e existe uma t...
SQL: SELECT ... WHEREPara selecionar um determinado conjunto de registos utiliza-se a cláusulaWHERE  • SELECT nome_colunas...
SQL: SELECT ... WHERE • SELECT * FROM MeusCDs.amigos WHERE nome = ”Rui”; • SELECT * FROM MeusCDs.amigos WHERE nome > ‘Carl...
SQL: SELECT ... WHERE ... LIKEWildcards em SQL com operador LIKE  • “_” -> pode ser substituído por qualquer caracter (mas...
SQL: SELECT ... WHERE ...  • SELECT * FROM MeusCDs.amigos WHERE nome LIKE ”%o%”;As condições também podem incluir os opera...
SQL: SELECT ... ORDER BY ...Os resultados finais podem ser ordenados pelos valores de uma ou maiscolunas  • SELECT nome_col...
SQL: SELECT ... ORDER BY ... • SELECT * FROM MeusCDs.amigos ORDER BY nome; • SELECT * FROM MeusCDs.amigos ORDER BY nome DE...
SQL: SELECT ... LIMIT ...Os resultados finais podem ser limitados a uma determinada gama deresultados  • SELECT nome_coluna...
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 umaquery sã...
Joins                       amigos                                                                         empresLmos id_a...
INNER JOIN (standard/exclusivo/natural)Num join natural, um INNER JOIN, os dados resultantes de uma query sãoapenas aquele...
INNER JOINExemplo: Selecionar todos os Amigos com Empréstimos  • SELECT MeusCDs.amigos.nome, MeusCDs.emprestimos.id_empres...
INNER JOINExemplo: Selecionar todos os Amigos com Empréstimos  • SELECT MeusCDs.amigos.nome, MeusCDs.emprestimos.id_empres...
OUTER JOIN (inclusivos)Os OUTER JOINS permitem obter os registos relacionados e os nãorelacionados. Podem ser do tipo LEFT...
LEFT OUTER JOINExemplo: Seleccionar todos os amigos com empréstimos e todos osamigos sem empréstimos  • SELECT MeusCDs.ami...
JOINS: exemplo 2Considere-se um stand automóvel onde cada vendedor é responsável pelavenda de vários automóveis. No entant...
JOINS: exemplo 2Selecionar todos os vendedores com carros atribuídos  • SELECT stand.vendedores.Nome, stand.automoveis.Mar...
JOINS: exemplo 2Selecionar todos os vendedores com e sem carros atribuídos  • SELECT stand.vendedores.Nome, stand.automove...
JOINS: exemplo 2Na tabela automóveis foram adicionados 2 novos registos (2 novosautomóveis) aos quais ainda não foi atribu...
JOINS: FULL JOIN no MySQLSelecionar todos os vendedores com carros atribuídos e sem carrosatribuídos e todos os carros atr...
JOINS: FULL JOIN no MySQLSelecionar todos os vendedores com carros atribuídos e sem carrosatribuídos e todos os carros atr...
Upcoming SlideShare
Loading in …5
×

06 LabMM4 - Bases de dados

1,002 views

Published on

SQL

Published in: Education
  • Be the first to comment

  • Be the first to like this

06 LabMM4 - Bases de dados

  1. 1. Bases de dados: SQLSELECT, INNER JOINS e OUTER JOINSCarlos SantosLabMM 4 - NTC - DeCA - UAAula 06, 07-03-2012
  2. 2. Estratégia para a introdução de dados numa BDPara 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. 3. E para apagar dados e tabelas?Inverter a ordem anterior! • apagar primeiro os dados e as tabelas que tenham FK
  4. 4. Exemplos de SQL com INSERTINSERT • 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. 5. SQL: SELECTVamos considerar como exemplo o exercício de gestão dos CDs. A basede 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. 6. SQL: SELECT ... WHEREPara selecionar um determinado conjunto de registos utiliza-se a cláusulaWHERE • 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. 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. 8. SQL: SELECT ... WHERE ... LIKEWildcards 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. 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. 10. SQL: SELECT ... ORDER BY ...Os resultados finais podem ser ordenados pelos valores de uma ou maiscolunas • 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. 11. SQL: SELECT ... ORDER BY ... • SELECT * FROM MeusCDs.amigos ORDER BY nome; • SELECT * FROM MeusCDs.amigos ORDER BY nome DESC;
  12. 12. SQL: SELECT ... LIMIT ...Os resultados finais podem ser limitados a uma determinada gama deresultados • 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. 13. SQL: SELECT ... LIMIT ... • SELECT * FROM MeusCDs.amigos LIMIT 1,2; • SELECT * FROM MeusCDs.amigos LIMIT 3,100;
  14. 14. E como obter dados resultantes de várias tabelas?Os processos de combinar dados de várias tabelas no âmbito de umaquery 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. 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. 16. INNER JOIN (standard/exclusivo/natural)Num join natural, um INNER JOIN, os dados resultantes de uma query sãoapenas 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. 17. INNER JOINExemplo: 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. 18. INNER JOINExemplo: 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. 19. OUTER JOIN (inclusivos)Os OUTER JOINS permitem obter os registos relacionados e os nãorelacionados. Podem ser do tipo LEFT ou RIGHT, de acordo com o sentidodo 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. 20. LEFT OUTER JOINExemplo: Seleccionar todos os amigos com empréstimos e todos osamigos 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. 21. JOINS: exemplo 2Considere-se um stand automóvel onde cada vendedor é responsável pelavenda de vários automóveis. No entanto, num dado momento, poderãoexistir: vendedores sem automóveis atribuídos e automóveis semvendedor atribuído.
  22. 22. JOINS: exemplo 2Selecionar 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. 23. JOINS: exemplo 2Selecionar 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. 24. JOINS: exemplo 2Na tabela automóveis foram adicionados 2 novos registos (2 novosautomóveis) aos quais ainda não foi atribuído um vendedor.Selecionar todos os vendedores com carros atribuídos e os carros semvendedor 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. 25. JOINS: FULL JOIN no MySQLSelecionar todos os vendedores com carros atribuídos e sem carrosatribuí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. 26. JOINS: FULL JOIN no MySQLSelecionar todos os vendedores com carros atribuídos e sem carrosatribuídos e todos os carros atribuídos e carros sem vendedor atribuído

×