[MUSIC] Bueno, hasta ahora vimos grandes pasos dentros de las consultas, estamos todavÃa enfocados en la parte de leer. Los datos de nuestras tablas, pero nos falta algo más. ¿Qué ocurre cuando necesitamos combinar la información de diferentes tablas? ¿Qué hacemos? ¿Cómo de alguna forma las unimos? ¿Cómo trabajamos dentro del Select? O si hay alguna otra cuestión. Entonces, vamos a ir a un ejemplo, que creo que con el ejemplo lo vamos a ir sacando rápidamente. Nuevamente voy a tener mi DER y vamos a ir al ejemplo. Un ejemplo relativamente sencillo, que nos va a permitir entender cuándo surge una necesidad de este estilo. FÃjense, en este ejemplo tenemos que nos solicitan todos los clientes con sus respectivos vendedores asignados. En el DER, lo que podemos ver es que nos piden, de alguna forma, clientes y vendedores, los vendedores son empleados. ¿Cómo sé si un cliente tiene un vendedor? El campo SupportRepId es una clave foránea que apunta al empleado. Acá está la marca, y eso me permite entender de que un cliente tiene un empleado asignado, que es de alguna forma el vendedor. Entonces, si hubiéramos ido al, pensemos en nuestra consulta, tenemos SELECT. Recuerden, siempre vamos con lo mismo, SELECT, FROM, WHERE. Me gusta escribir siempre, aún cuando, recuerda que WHERE no siempre se usa. Si no se usa se puede sacar, pero SELECT y FROM siempre va a ir, y el orden, es importante, no se puede invertir. Entonces, ¿cuál va a ser nuestro dominio? El dominio es, Employee. Ponemos una E para manejar energÃas y Customer. Ahora, ¿cómo hago para unirlos? [COUGH] Hay diferentes formas de unir una tabla, y la que vamos a utilizar es junta. Las formas de juntas que tenemos, la palabra reservada es JOIN. Tenemos dos tipos de juntas, inner o outers, en nuestro caso vamos a usar los INNER. Que es la junta natural, y ahora voy a explicar qué es lo que hace. [COUGH]. El INNER JOIN nos pide adicionalmente. Que utilicemos, o mejor dicho, que le aclaremos sobre qué campos se van a unir, ahora explico el paso a paso de esto. Bueno, y de aquà habÃamos dicho que es sobre empleado va con esto. Bueno, ¿qué es esto de junta? Cuando nosotros definimos el INNER JOIN, o le decimos al FROM si realiza una junta. Lo que va a hacer es por cada uno de los registros que tengamos en cliente. Va a ir a buscar qué relación existe o cómo se relaciona con la tabla empleado. Y nosotros le vamos a indicar a través de qué campos se relacionan. Nosotros sabemos que el cliente se relaciona con el empleado a través del campo SupportRepId. Y ese SupportRepID es una clave foránea que apunta al EmployeeId, que es el ID del empleado. Una vez que conforme eso, lo que hace el motor es conformar una tabla donde busca un cliente para dar. Vamos a ir a un ejemplo, va a ir a agarrar un cliente, vamos a ir a un cliente. Va a ir a buscar el SupportRepId, por ejemplo, en este caso 3. Va a ir a buscar a la tabla Empleado. Employee WHERE EmployeeId sea igual a 3. Y lo que va a hacer es combinar ambos datos. Va a decir, bueno, okay, en una nueva tabla, o es una tabla que genere memoria. Van a adjuntar el dato de cada cliente con su respectivo empleador. Y de esta forma me va a conformar una nueva tabla, ahora lo vamos a ver cómo queda. Entonces, tenÃamos el listado de clientes con sus respectivos vendedores, ¿tenemos condición a nivel de registros? No, en este caso no tenemos porque no lo dicen en el enunciado, no tenemos ninguna condición a nivel de registro. Es decir, por cada registro eliminar algunos que no cumplan con alguna condición, no los tenemos. Ponemos asterisco para ver lo que ocurre FÃjense, tenemos el Customer con ID 1, que tiene un EmployeeId, perdón un SupporRepId 3. Entonces, ¿qué hizo el motor? Fue a buscar al empleado con ID 3 y lo vinculó. A partir de ahora, hasta esta parte, les muestro, hasta SupportRepId. Son todas las columnas, todos los atributos que corresponden a cliente. A partir de EmployeeId, son los atributos que le corresponden a columnas, atributos que le corresponden a empleado. Y de esta forma, me permitió unir dos tablas, y obtener información de ambas tablas, pero con la relación que existe entre ellas. Vamos a ir a un ejemplo que tiene un poco más de sentido, o por lo menos nos va a dar una idea de para qué nos va a servir. Y cómo le vamos a sacar provecho a esto. Miren este ejemplo, ahora tenemos que mostrar el nombre de las canciones, el ID del álbum y el álbum. Entonces, vamos a nuestro DER, nos paramos en canciones. Y nos dice que quiere el nombre de las canciones con el correspondiente álbum, y quiere el ID del álbum y el tÃtulo. Cuando se refiere al álbum es el tÃtulo del álbum. you tenemos muy claro cuál podrÃa ser nuestro dominio, entonces volvemos a escribir SELECT FROM. WHERE por si lo vamos a utilizar, si no, lo borramos. Y ahora decimos cuál va a ser nuestro FROM, lo definimos de acuerdo al enunciado. En este caso, el enunciado nos menciona canciones y álbum. Entonces, Canciones recuerdan que es Track, vamos a poner un alias, y por el otro lado, álbum con una A, ¿cómo lo vamos a unir? A través de una junta del tipo INNER JOIN. ¿Y a través de qué campo? Bueno, eso lo podemos ver directamente de la definición de la tabla, acá lo vamos a ver también. FÃjense, Album tiene AlbumId, ¿no? Y a ver, Track. Tiene por algún lado el AlbumId, que es una clave foránea. Acá también lo podemos ver en la misma definición. Entonces, para Track Le decimos que se une a través de algún ID, que apunta a la clave primaria de la tabla álbum, ¿cómo es esto? Es decir, cada canción puede pertenecer a varios álbum. Entonces, de esta forma podemos relacionarlo y ahora sÃ, el WHERE no lo vamos a necesitar. Porque no tenemos ninguna condición a nivel de registro, ahora sÃ. Lo que puedo hacer es traerme el nombre de la canción, nos pedÃa el ID del álbum, y adicionalmente, el tÃtulo del álbum. Ejecutamos nuestra consulta y vemos qué respuesta tenemos. Y acá van a ver que tenemos el nombre de la canción y a qué álbum pertenece. Hay algunas canciones que están todas en el mismo álbum. No recuerdo si hay alguna canción que pueda estar en más de un álbum. Para eso lo que podemos hacer, y puede pasar, ¿eh? Es ordenar por el orden del álbum, perdón, de la canción. Ahà está, se fue la selección, y ahà ejecutamos nuevamente. Y no estarÃa viendo, por lo menos no veo alguna que aparezca en más de un álbum distinto. Pero puede pasar, puede pasar que una canción esté en más de un álbum, creo que acá tenemos una. Justo, esta canción, y esta otra. Perdón, esta canción aparece en dos álbumes distintos, es un tipo de relación que puede ocurrir. Y asà de esta forma podemos hacer. Junta de diferentes tablas. Ahora, ¿Cuántos INNER JOIN voy a necesitar? Bueno, vamos a hacer un ejemplo donde vamos a necesitar uno más y allà voy a terminar de cerrar la idea. you tenÃamos este ejemplo con el nombre de la canción y el ID del álbum, y hasta ahÃ. Qué pasa si además de estos datos Quiero el tipo de medio, mi negocio es la venta de canciones online o en algún medio en particular. Tenemos una tabla que es el MediaType, que me dice esa canción en qué tipo de medio está. Entonces, lo que necesitamos es, parte de lo que tenÃamos antes, porque fÃjense, mostrarle el nombre y ID de las canciones. Me pide algún dato más, el ID del álbum y el álbum, y además el tipo de medio [COUGH]. Entonces, puedo copiar algo de lo que tengo, y poder modificarlo. Arrancamos por incorporar MediaType. Déjenme ver cómo se escribe MediaType. Con una m [COUGH]. Y le vamos a decir que se va a unir, y a qué tabla se va a unir o a través de qué campo, o con qué campo tiene relación. Escribo y ahora lo explico. Tengo algo acá. Creo que se llama t.MediaType si mal no recuerdo, sÃ, MediaTypeID. MediaTypeID = m. MediaTypeId, mismo nombre. Revisamos a ver si no hay algo mal. Cuando declaro el INNER JOIN tengo que decirle a través de cuál se va a unir, me faltó el ON. Y noten algo, lo probamos a ver si funciona, antes agregamos el ID de la canción, creo que nos la pedÃan, t.TrackId. Y me pide el medio, que eso lo podemos sacar de acá. Muy bien, bueno, entonces ejecutamos la consulta y ahora la explicamos un poco. Tenemos la canción con el Track 1, el nombre, el álbum y qué tipo de medio es. Si es una archivo MPEG, o una AAC o de más tipos de medio. Creo que tenemos dos tipos de medio, no recuerdo ahora cómo estaba conformada, pero tenemos la consulta armada. Bueno, una regla a tener a cuenta, ¿cuántos INNER JOIN voy a necesitar? Bueno, la regla es que voy a necesitar tantos INNER JOIN como cantidad de tablas. Menos uno. Si tengo tres tablas, voy a necesitar dos INNER JOIN, si tengo cuatro tablas, tres INNER JOIN. A partir del segundo INNER JOIN, lo único que voy a tener que hacer es, a la derecha, incorporar la tabla con la cual quiero hacer una junta. Y en el ON definir a través de qué campos quiero una relación, a través de qué clave foránea y qué clave primaria. Algo a tener en cuenta, o que debo tener cuidado, Es que cuando vaya agregando nuevas tablas, es decir, nuevos INNER JOIN estén ordenados. Es decir, no haga referencia a una tabla que todavÃa no apareció o va a aparecer a posteriori. Digo, hago referencia en cuanto a la columna, es decir, que las pongo ordenadas. Si voy a hablar de, por ejemplo tengo una relación entre MediaType y Album, no existe. Entonces, tengo que haberlo ordenado, primero Track, después Album, después MediaType, y eso serÃa lo único. Y después puedo asà unir infinidad de tablas, no hay un lÃmite establecido. Y nos va a permitir poder unir diferentes tablas. FÃjense en mi DER la cantidad de relaciones que tengo con diferentes tablas. Y la cantidad de información que puedo juntar combinando atributos de otras tablas. Para esto es lo que nos va a ser muy, muy útil trabajar con junta natural. [MUSIC]