Pregunta

He estado esperando para su uso se une por un tiempo, pero estoy teniendo problemas para visualizar la salida, así que sé cómo ponerlo en práctica.

Vamos a decir Tengo 2 tablas:

CREATE TABLE Cities (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    city tinyblob
);

CREATE TABLE Users (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    username TINYBLOB,
    city INT UNSIGNED,
    FOREIGN KEY (city) REFERENCES Cities (id)
);

Si mi solicitud es para ejecutar una consulta SQL para obtener los datos del perfil de un usuario, ¿cómo iba a utilizar una combinación para conseguir la ciudad relacionados con el registro de un usuario, y cómo aparecería el registro emite?

¿Fue útil?

Solución

Cada resultado de una operación de SQL es funcionalmente una nueva tabla, si es o no se almacena en el disco o en la memoria

La función de una combinación es "unir" dos mesas juntas en una tercera tabla sintética que (por lo general) sólo existe en la memoria durante el tiempo que se emite a la aplicación.

La razón de utilizar una unión es reducir datos Anomalías , asegurando que aparece de datos en una y sólo un lugar en la base de datos.

Tenga en cuenta lo siguiente:

Person ( ID Integer Primary Key, FName String, LName String, Address String, City String, ZipCode String)

A continuación, cada vez que el gobierno cambia códigos postales (lo que ocurre con demasiada frecuencia en su totalidad para los gustos de los desarrolladores de bases de datos * será necesario actualizar la tabla tales personas que todos los viejos códigos postales correctamente pertenecen a la ciudad correcta y nueva de código postal.

En este caso, el mismo código postal se encuentra en varias tuplas de la tabla, y si la tabla de forma manual es editable, estará sujeto a graves anomalías de actualización como new combinaciones ciudad / CP son entrado sin la base de datos como un ser actualizado.

Al tener tres tablas lugar, tenemos los mismos datos, pero con una mayor flexibilidad y fiabilidad (a costa de algo de rendimiento, a pesar de las preguntas de "desnormalización apropiada" son un tema para otra serie de respuestas.)

Person ( PersonID Integer Primary Key, FName String, LName String)

City ( CityID Integer Primary Key, City String, State String, ZipCode String )

Address ( AddressID Integer Primary Key, AddressLine1 String, CityID Integer References City, PersonID Integer References Person)`

Y podemos obtener una sola "mesa" de lo anterior a través de la siguiente consulta: SELECT Fname, Lname, AddressLine1, City, State, ZipCode FROM Person INNER JOIN Address USING (PersonID) INNER JOIN City USING (CityID)

Esto nos permite actualizar las tablas individuales cada vez que algo específica de ellos cambia, sin corromper el resto de los datos asociados.

Una INNER JOIN es el tipo predeterminado de unirse. En términos generales se señala: "combinar tuplas donde este registro de la tabla A Partidos este registro de la tabla B" Los otros tipos de uniones son OUTER JOINS y lo que se conoce como un CARTESIAN PRODUCT. Un unirse externa es "Toma todo, desde la izquierda o la tabla de la derecha (como se especifica) y donde los otros partidos de mesa, unirse a ella. En caso de que no coincide, llenarlo con nulos" y un producto cartesiano (sin entrar en el álgebra relacional es la siguiente:. Tomar todas las combinaciones posibles de tuplas de ambas tablas y salida de ellos, en una tabla, sin nada a juego

* Más que nunca, sobre todo en el caso de cambiar los límites de códigos postales debido a gerrymandering

Otros consejos

creo que estás buscando

SELECT username, cities.city FROM Users JOIN Cities ON (Cities.Id = Users.City)

lo que le daría

| username | city      |
| John     | Singapore |
| Toby     | London    |
| Eric     | Paris     |

pero no tome mi palabra para ella: hay que probarlo en su base de datos y ver lo que se obtiene

En pocas palabras, la instrucción SQL será -

SELECT FIELD1, FIELD2 .. FIELDN
FROM PARENT_TABLE 
  INNER JOIN CHILD_TABLE ON ( PARENT_TABLE.PARENT_KEY = CHILD_TABLE.FOREIGN_KEY)

Fields1 .. Fieldsn serán los campos que usted quiere a buscar -. De uno o ambos tabls

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top