Como usar um INNER JOIN para combinar tabelas SQL para HTML5and CSS3 Programação

Como um programador de HTML5 e CSS3, você pode usar associações internas para combinar tabelas SQL. Quando você normalizar os bancos de dados, que muitas vezes faz sentido dividi-lo em várias mesas. Dê uma olhada rápida no herói

mesa.

image0.jpg

Você deve ter notado que a maioria das informações missão é ido agora a partir desta tabela, com exceção de um importante campo. o missionID campo é um campo inteiro que contém a chave primária da missão mesa. UMA chave estrangeira é um campo que contém a chave primária de outra tabela. As chaves estrangeiras são usados ​​para reconectar as tabelas que foram quebrados apart pela normalização.

Olhar para a relação entre as tabelas de missão e herói começa a fazer sentido.

image1.jpg

o missão tabela não tem um link para o herói. Ele não pode, porque qualquer missão pode ser conectado a qualquer número de heróis, e você não pode ter um campo listado.

Como construir uma junção cartesiana e uma associação interna

Compare o herói e missão tabelas, e você ver como eles se encaixam. o missionID no campo herói tabela identifica qual missão o herói está ligado. Nenhum dos dados missão real é na herói campo, apenas um link para o qual missão o jogador está ligado.

Criando uma consulta com ambas as tabelas é tentador. Esta consulta surge para unir as tabelas, mas, obviamente, não está fazendo a coisa certa. Você tem apenas três heróis e duas missões, no entanto, esta consulta retorna seis linhas! O que aconteceu aqui é chamado de Junção cartesiana. É uma combinação de todos os valores possíveis de herói e missão, que obviamente não é o que você quer.

image2.jpg

Você realmente não quero todos esses valores para aparecimento você quiser ver apenas aqueles em que o herói mesa de missionID jogos até ao missionID no campo missão mesa. Em outras palavras, você quer uma consulta que diz que só retornar as linhas onde os dois valores de missionID são os mesmos.

É quase idêntica à do último consulta, só que desta vez, uma ONDE cláusula indica que a chave fundamental e primária estrangeira deve corresponder-se.

image3.jpg

Esta configuração particular (usando uma referência de chave estrangeira para se juntar duas mesas) é chamada de junção interna. Às vezes, você vê a sintaxe como

SELECThero.name AS 'herói', hero.missionID AS 'heroMID', mission.missionID AS 'missMID', mission.description AS 'mission'FROMhero INNER JOIN missionONhero.missionID = mission.missionID-

Algumas das ofertas de banco de dados da Microsoft preferem esta sintaxe, mas realmente faz a mesma coisa: junte-se duas tabelas.

Impondo um-para-muitos relacionamentos

Sempre que o seu diagrama ER indica um relacionamento muitos-para-um (ou um-para-muitos), você geralmente usa uma junção interna. Veja como fazer isso:

  1. Comece com o diagrama ER.

    Nenhuma maneira que você está indo para obter este direito na sua cabeça! Faça um diagrama. Use uma ferramenta como o MySQL Workbench, algum outro software, papel e lápis, batom em um espelho, o que for. Você precisa de um esboço.

  2. Identificar relações um-para-muitos.

    Você pode ter que falar com as pessoas que usam os dados para determinar quais as relações são um-para-muitos. Nos dados herói, um herói pode ter apenas uma missão, mas cada missão pode ter muitos heróis. Assim, o herói é o lado muitos, e a missão é a de lado.

  3. Encontrar a chave primária de uma tabela ea tabela muitos.

    Cada tabela deve ter uma chave primária. (Às vezes, você verá alternativas avançadas como chaves com diversos campos, mas esperar até que você é um pouco mais avançado para essas coisas.)

  4. Fazer uma referência de chave estrangeira a uma tabela na tabela Muitos.

    Adicionar um campo para a tabela no lado muitos da relação que contém apenas a chave para a mesa por um lado.

    Você não precisa de uma chave estrangeira na tabela de um lado da relação. Este conceito confunde a maioria dos iniciantes. Você não precisa (ou quer) um link para muitos tabela porque você não sabe quantos links você vai precisar. Vários links seria um campo listado, que é exatamente o que você está tentando evitar.

Se as etapas anteriores são difíceis para você entender, acho que volta para o exemplo herói. Cada herói (de acordo com as regras de negócio) pode estar apenas em uma missão. Assim, faz sentido colocar um link para a missão na tabela de herói, porque você tem apenas uma missão.

Cada missão pode estar relacionado com muitos heróis, então se você tentar ligar missões para heróis, você listou campos na tabela de missão, violando a primeira forma normal. O resultado desta juntar-se parece muito com a intenção original do banco de dados, mas agora é normalizado.

image4.jpg

Muitos programadores ficar confuso com este exemplo, dizendo heróis devem ser autorizados a ir em missões múltiplas, ou eles não são muito bons heróis. Isso é um grande ponto, e traz-se uma das questões mais importantes no desenvolvimento de dados. O trabalho do programador de dados é refletir as regras comerciais em vigor.

As regras de negócios neste exemplo foram deliberadamente fez-se a simplificar explicar as coisas, então você tem uma regra de negócio no lugar (uma missão per herói) que pode não ser o melhor de um "salvar o mundo" perspectiva. No entanto, se essa é a regra de negócio que você tem, seu trabalho é para implementá-lo.

Como construir uma visão para encapsular a juntar-se

A consulta junção interna é tão útil, é um lugar dandy para uma visão. A vista para ser criado a partir dele:

CREATE VIEW heroMissionView ASSELECThero.name AS 'herói', mission.description AS 'missão', mission.villain AS 'vilão', mission.plot AS 'herói plot'FROM, missionWHEREhero.missionID = mission.missionID-

Ter uma visão significa que você não tem que re-criar a consulta de cada vez. Você pode tratar a vista como uma tabela virtual para novas consultas:

* SELECT FROM heroMissionView-

menu