Eu tenho três tabelas nomeadas
**Student Table**
-------------
id name
-------------
1 ali
2 ahmed
3 john
4 king
**Course Table**
-------------
id name
-------------
1 physic
2 maths
3 computer
4 chemistry
**Bridge**
-------------
sid cid
-------------
1 1
1 2
1 3
1 4
2 1
2 2
3 3
3 4
4 1
4 2
Agora para mostrar o nome do aluno com o nome do curso que ele estudou,
**Result**
---------------------------
Student Course
---------------------------
ahmed physic
ahmed maths
ahmed computer
ahmed chemistry
ali physic
ali maths
john computer
john chemistry
king physic
king maths
Eu construo a seguinte consulta
select s.name as Student, c.name as Course from student s, course c join bridge b on c.id = b.cid order by s.name
Mas não retorna o resultado exigido ...
E o que seria de forma normalizada, se eu quiser descobrir quem é o gerente sobre os outros:
**employee**
-------------------
id name
-------------------
1 ali
2 king
3 mak
4 sam
5 jon
**manage**
--------------
mid eid
--------------
1 2
1 3
3 4
4 5
E deseja obter este resultado:
**result**
--------------------
Manager Staff
--------------------
ali king
ali mak
mak sam
sam jon
Respostas:
Basta usar:
fonte
Use a sintaxe ANSI e ficará muito mais claro como você está juntando as tabelas:
fonte
ANSI
sintaxe, vale a pena aprender. Isso o ajudará a evitarJOIN
erros como os que você cometeu no futuro.Para normalizar a forma
fonte
m.mid = e1.id
em.eid = e2.id
?fonte
Você pode JUNTAR várias TABELAS como este exemplo acima.
fonte
Consulta para juntar mais de duas tabelas:
fonte
Usa isto:
fonte
Não entre assim. É uma prática realmente muito ruim !!! Isso vai diminuir o desempenho na busca com dados massivos. Por exemplo, se houver 100 linhas em cada tabela, o servidor de banco de dados terá que buscar
100x100x100 = 1000000
horários. Teve que valer por1 million
vezes. Para superar esse problema, junte as duas primeiras tabelas que podem buscar o resultado na correspondência mínima possível (depende do esquema do seu banco de dados). Use esse resultado na Subconsulta e, em seguida, junte-o à terceira tabela e busque-o. Para a primeira junção ->100x100= 10000
vezes e suponha que tenhamos 5 resultados correspondentes. E então juntamos a terceira tabela com o resultado ->5x100 = 500.
Total fetch =10000+500 = 10200
times only. E assim, o desempenho subiu !!!fonte