MySQL é uma fonte relacional sistema de gerenciamento de banco de dados aberto (RDBMS) que os indivíduos e as empresas utilizam com freqüência para executar o back-end de aplicações web. Em SQL , junta-se frequentemente frustrar novos usuários. Como os bancos de dados tornam-se maiores , torna-se crítico para consultas de usar junta de forma eficiente. Cadastre- chave do MySQL torna mais fácil trabalhar com novos e código legado . Associações interna
Quando você pensa em unir duas tabelas, você provavelmente pensa em uma consulta com uma simples junção de uma tabela como empregados com uma tabela como Departamentos :
Selecione Employees.last_name , Employees.first_name , Departments.department_nameFROM Departamentos , EmployeesWHERE Departments.department_id = Employees.department_id ;
Esta é uma junção interna . Ele recupera apenas as linhas onde o department_id é exatamente igual em ambas as tabelas . O código acima funciona no MySQL , mas você pode achar que é menos legível do que o seguinte :
Selecione Employees.last_name , Employees.first_name , Departments.department_nameFROM DepartmentsINNER Cadastre EmployeesON Departments.department_id = Employees.department_id ;
Estas duas consultas produzem exatamente a mesma saída . A diferença é que , usando o MySQL Cadastre palavra-chave , você fez isso mais óbvio que tipo de junção que você usou . Desde junção interna é o padrão, se você deixar de fora a palavra-chave INNER , MySQL ainda realiza uma junção interna .
Associações externas
Se você tem funcionários que não são atribuídos a um departamento específico e tem um valor NULL para a sua department_id , a juntar-se acima não serão exibidos os funcionários em tudo. Se você quiser que todos os funcionários se eles têm um departamento ou não, você tem que usar uma associação externa .
MySQL usa esquerdo ou direito com a palavra-chave JOIN para especificar que deseja uma junção externa, e dizer-lhe qual a tabela você quer os nulos de . Aqui está a nossa consulta revisto :
Selecione Employees.last_name , Employees.first_name , Departments.department_nameFROM EmployeesLEFT OUTER JOIN DepartmentON Departments.department_id = Employees.department_id ;
Você começa cada funcionário em sua saída , mesmo se o MySQL não encontra department_id para corresponder ao registro de funcionário . A tabela que você deseja permitir nulos de (departamentos) está à esquerda do sinal de igual .
Se você queria ver departamentos sem funcionários em sua saída, você usaria um RIGHT OUTER JOIN. A tabela que você deseja permitir nulos de , nesse caso, está à direita do sinal de igual .
Cruz junta
Fazendo cruz junta por acaso é um erro comum . É o que acontece quando você não especificar uma junção de todo. Se você não quer colocar uma junção na sua cláusula WHERE, ou usar um dos outros ... Cadastre-se sobre as opções , você tem todas as combinações possíveis das linhas em cada uma das tabelas na sua DE se eles têm um relacionamento ou não .
Se você puxar a partir de três tabelas com , respectivamente , 10, 20, e 3 linhas , você tem 10 x 20 x 3 linhas como a sua produção total. Você pode ver o problema se isso faz com que o seu banco de dados tem mais de alguns registros.
Raramente, você vai querer fazer uma junção cruzada de propósito. MySQL permite que você use o CROSS JOIN ... ON sintaxe para mostrar a qualquer um editar o seu código depois que a junção cruzada foi deliberado.