Consulta sql entre 2 tabelas

21/03/2013

Olá pessoal,

Estou treinando na parte de sql e gostaria de tirar algumas duvidas.

1. Instalei o xampp com o apache e mysql ativo
2. Tenho um pequeno form em php para a busca
3. Tenho 2 tabelas: "ips" e "ssid"
3.1 A tabela "ips" contem: cod (chave primaria), ip, descricao, codssid (chave estrangeira com codssid da tabela ssid), qos
3.2 A tabela "ssid" contem: codssid (chave primaria), descricao, latitude/longitude

A principio tenho um "sql" para buscar o "ip" e "descricao" da tabela "ips". Segue abaixo:

$sql = "select ip, descricao from ips where descricao LIKE '% . $busca . %' OR ip LIKE '% . $busca . %' ORDER BY descricao"; // Estou longe de onde estou fazendo o treinamento, mas acredito que seja mais ou menos isso a busca :D

O que eu gostaria de saber é se posso incluir a tabela "ssid" na consulta, e que me retorne a "descricao" desse tabela sem duplicar os dados. Teria como realizar isso?

Elias Pereira

Respostas

22/03/2013

Alex Lekao

Oi Elias, bom dia!!!

Acredito que poderá usar com o join.

teste assim para ver se da certo.

select ips.ip, ips.descricao,ssid.descricao from ips
left join ssid on ssid.codssid = ips.codssid
where ips.descricao LIKE '% . $busca . %' OR ips.ip LIKE '% . $busca . %' ORDER BY ips.descricao

Espero ter ajudado.

Abraco.

Alex - Lekao
Responder Citar

22/03/2013

Guilherme Sousa

Elias, vc pode usar esse select do Alex, mas ao invés de usar "left join" use "inner join". Com o left join vc retornará dados da tabela ips mesmo que eles não tenham correspondentes na tabela ssid.

Abraço, Guilherme
Responder Citar

22/03/2013

Elias Pereira

@alex,

Obrigado pela ajuda! Funcionou exatamente como eu esperava! :)

@Guilherme,

Mas é exatamente isso que preciso, pois antes eu fazia a busca pela descricao. Agora consigo realizar a busca pelo descricao, ip e ssid_desc. Coloquei o INNER JOIN para testar, mas algumas buscas que eu fiz e sabia que existiam dados para isso não apareceram. Obrigado mesmo assim, pois entendi a diferença entre as opções.
Responder Citar

22/03/2013

Guilherme Sousa

Por nada Elias.

Olhe também esse artigo no Code Project. Ele exemplifica de modo gráfico os joins no SQL. Com as imagens fica bem fácil saber o que você realmente deseja que seja retornado na consulta.

http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

Abraço, Guilherme
Responder Citar

22/03/2013

Alex Lekao

Oi Elias, boa tarde!!!

Fico feliz em ter podido ajudar.

eu particularmente não entendo muito bem a diferença entre os dois, mas uso sempre o left e sempre tem dado certo, acredito que seja por causa dos condicionais que coloco no where.

Mas já peguei o link que o Guilherme passou para dar uma estuda, afinal conhecimento nunca eh demais(obrigado Guilherme).

Mas eh isso ae, precisando posta ai que a gente ajuda no que der... rsrsr

Abraco.

Alex - Lekao
Responder Citar

22/03/2013

Bruno Leandro

a diferença entre o inner e o left é a seguinte, no inner tem que existir o registro na tabela 1 e registro na tabela 2 com a chave igual, ex: na tabela ips possui um codssid com valor 1 para que seja listado tem que possuir codssid com valor 1 na tabela ssid, ja no left independente se existir o registro na tabela ssid com valor 1 ele ira listar
Responder Citar

22/03/2013

Guilherme Sousa

Elias, veja as imagens e se ainda tiver alguma dúvida em algum tipo de join não hesite em perguntar. Depois que eu vi essa imagem pela primeira vez meus problemas com join acabaram =)

Abraços, Guilherme
Responder Citar

22/03/2013

Alex Lekao

Blz...

obrigadao galera... essas dicas e sugestão de blogs, sites, fóruns, etc, etc... tem sido muito útil para mim.

Obrigado.

Abraco.

Alex - Lekao
Responder Citar

22/03/2013

Alex Lekao

Oi Guilherme, boa tarde!!

Realmente as imagens são bem ilustrativas, fica bem claro.

Obrigado pela dica.

Esse site sera mais um dos meus favoritos no navegador.

Abraco.

Alex - Lekao
Responder Citar

22/03/2013

Guilherme Sousa

Que bom Alex, fico feliz em ter ajudado. Na faculdade só vi o inner join e nem sabia da existencia dos outros =S

Depois que eu comecei mexer com SQL todo dia e surgiram problemas reais eu tive que aprender SQL de verdade.
Responder Citar

22/03/2013

Alex Lekao

Oi Guilherme,

apesar de já ser "tiosao"... eu estou fazendo faculdade so agora, e estamos vendo banco de dados na faculdade também, e isso foi uma das matérias que foram passadas rescentemente, e eu não as vi... rsrsr

mas eu vi varias opções de joins no curso de sql que fiz, mas como uso basicamente para ver o que tem na tabela da direita que seja igual na da esquerda, basicamente o que quero eh o que esta na tabela da esquerda mesmo, e o que preciso que seja mostrado referente das duas, uso na clausula where as condicionais para limitar ou mostrar o conteúdo da tabela da direita.

então por isso não me ative muito ao uso da inner join.

mas foi útil sim.

obrigado.

Abraco.

Alex - Lekao
Responder Citar