Bien les voy a contar un poquito qué es lo que vamos a hacer hoy yaos hacer un mega ejercicio de sql Con qué me refiero con me ejercicio es un ejercicio complejo donde vamos a armar tanto el diagrama antidad relación o sea vamos a hacer el planteo el ejercicio vamos a a partir de eso diseñar las bases de datos cada una de las tablas las relaciones todo eso lo vamos hacer a partir del planteo o sea les voy a enseñar Cómo Hacer el planteo Cómo hacer después el diseño en la base de datos va vamos
a rellenar un poco de datos en cada una de estas tablas ya tengo unas consultas preh hechas Sí y vamos a hacer en total si mal no recuerdo nueve 10 consultas sí las cuales van a estar divididas en tres niveles parte uno van a ser cuatro consultas bien trany sí las típicas Select eh Nada de otro mundo nivel dos vamos a tener consultas un poquito más complejas con subconsultas con Inner Joint y demás y después vamos a tener nivel tres donde directamente van a ser subconsultas e Inner joins básicamente eso bien fíjense lo que dice
la Consigna vamos a hacer una escuela de música fíjense que dice una escuela de música necesita una base de datos para gestionar las clases y cursos que ofrecerá se nos está diciendo clases cursos acuérdense los sustantivos son lo que tenemos que identificar siempre para esto el director de la escuela Manifiesta que necesitará almacenar los datos de los alumnos los cursos con sus respectivos niveles de habilidad y tipo de instrumento y las inscripciones de cada alumno en los cursos fíjense si hacemos análisis acá que siempre es la parte que ustedes más les cuesta del planteo yo
siempre les digo que para detectar tablas o entidades busquen sustantivos Qué son los sustantivos cosas básicamente si no se acuerdan de lengua y comunicación que son los Sustantivos básicamente sustantivos son cosas entonces acá es fácil detectar cosas porque nos pide almacenar alumnos cursos e inscripciones ahí ya tenemos una pista de que vamos a tener tres entidades probablemente que se relacionen entre sí sí de cada alumno en los cursos En dónde se debe especificar Si el mismo abonó la inscripción Okay es una escuela de música entonces hay alumnos que pueden hacer cursos de distintos instrumentos y
que la Inscripción cada uno va a tener una inscripción Y a partir de eso tenemos que poner la inscripción si la persona abonó o no la inscripción O sea si abonó o no el curso que tiene que hacer porque por ahí en esta escuela pueden empezar hacer el curso sin abonar bien nos tira como sugerencia los datos que necesita acuérdense cuando dice sugerencia significa que pueden cambiar los datos o podemos modificar no que la estructura sea la siguiente y ya nos está dando una Pista no alumnos ID alumno apellido nombre edad dirección teléfono mail cursos
ID curso nombre nivel de habilidad tipo instrumento inscripciones í de inscripción fecha inscripción sí que se ha inscrito si abonó o no la ID del alumno y el ID del curso acá fíjense que dice que a partir de esto tenemos que hacer el modelado de la base de datos con las correspondientes tablas y relaciones acá tenemos una pista muy importante fíjense que alumnos tiene su ID sí cursos tiene su ID inscripciones tiene su ID Pero además inscripciones tiene ID alumno que coincide con el ID alumno acá y tiene ID curso que coincide con el ID
curso de acá eso significa que inscripciones va a ser una tabla intermedia Okay significa que inscripciones va a relacionar a la tabla alumnos con la tabla cursos ya inscripciones tiene lo que se conoce como foreing Keys o claves foráneas sí acuérdense que la foreing Key de una Tabla es la primary Key de otra tabla en este caso ide alumno o ID alumno es foring key en inscripciones pero es primary key en alumnos lo mismo acá ID curso sí es foring key en inscripciones pero es primary key en cursos bien esto en este caso gente ya
tenemos el modelado prácticamente hecho solo tenemos que hacer el diagrama Sí esta web que es una de las más usadas algunos la conocen como app.diagrams.net si no pueden poner así Draw io draw significa dibujar en inglés eh Y io bueno la típica extensión de I Y usted le va a aparecer acá no crear un nuevo diagrama y peden elegir Con qué usuario quieren Yo estoy con todo Academy si ponen crear un nuevo diagrama Acá hay vocha de diagramas para hacer fíjense Tenemos diagrama de clase de flujo t ta pero si vean acá diagrama entidad relación
si ya tenemos como una plantilla PR Armada le Pon el nombre de quieren y voy a poner Ejercicio escuela música si voy a poner sin y todo para que no genere ningún error voy a autorizar Ahí está Ustedes van a tener que autorizarse la primera vez que hacen Sí en mi caso cada tanto yo renuevo las autorizaciones bien y les va a armar Esto sí que es como un diagrama entidad relación de prueba fíjense le ponen clientes órdenes y envíos Sí ustedes pueden Borrar todo esto y armar de cero o pueden reutilizar la misma plantilla
que ya les deja AC Armado yo lo que voy hacer es voy a reutilizar la misma plantilla no me voy a complicar la vida vamos a hacerlo así y vamos a vamos a utilizar la misma misma misma plantilla ahí ahí está perfecto Bueno qué vamos a hacer vamos a armar entonces nuestras tres tablas según la consigna la voy a poner acá teníamos alumnos cursos e inscripciones Entonces vamos a empezar por alumnos si vamos a empezar por alumnos y acá una pregunta para el Chat Por qué en base de datos pregunta top eh Por en base
de datos los nombres de las tablas se ponen en plural y no singular porque cuando hacemos nombres de clases en programación orientada objetos se ponen singular Por qué en base datos se ponen en plural en clases Cuando hacemos una en programación en estamos haciendo una clase la clase representa a la plantilla de un solo objeto yo a partir de una clase puedo crear muchos objetos pero cuando yo hago Una clase la clase representa a Cómo es un solo objeto bien Por eso en las clases se escribe con en singular se Por ejemplo si fuera una
clase sería alumno porque el alumno como una clase es una plantilla para armar un alumno ahora si yo estoy hablando de una tabla en una base de datos la tabla sí lo que hace es generar o guardar muchos registros dentro por eso al representar esos registros tiene que estar en plural en plural plural Más allá de que es una Convención Y que todos nos enseñan siempre en base de datos va plural y en o programación ent objetos va en singular bueno Más allá de la convención de que todos conocemos que es así porque sí esa
es la verdadera causa de Por qué ahí tienen aprendieron un dato nuevo de color Okay volviendo acá al modelado acá tenemos entonces ID alumno que va a ser nuestra primary key fíjense los que quieran ver la Consigna gente la consigna la voy a dejar la descripción Para que se bajen la la Consigna Para que vean el repositorio de github que que vamos a armar y todo tenemos acá PK ID alumno bien es nuestra Prim mariki ahora qué necesitamos apellido nombre dat dirección teléfono email apellido nombre dat vamos por parte entonces acá apellido nombre dirección a
ver email Y por último creo que pedía teléfono no O me falta algo más a ver qué más pide la Consigna edad pero edad no hace falta vamos a poner fecha de nacimiento en lugar de edad porque soy rehavy y no le quiero hacer caso al la edad cambia todos los años Sí vamos a hacerle vamos a poner un poquito más de complejidad vamos a poner fecha de nacimiento así tienen que guardar fechas Sí ahora acá hay un detalle depende Qué convención ustedes utilicen para modelar sí lo que les voy a mostrar a continuación dependiendo
Qué convención estemos Usando para modelar se pone o no el tipo de dato de cada uno de estos registros si por ejemplo si esto fuese un diagrama de clase se pone dos puntos y el tipo de dato por ejemplo dos puntos entero dos puntos lo que sea ustedes Acá pueden poner por ejemplo marchar y entre paréntesis Cuánto tiene si o cuántos caracteres va a tener en este caso marchar es el tipo de dato para guardar caracteres y podemos poner 35 Por ejemplo si lo mismo podemos poner para El nombre también podemos poner 35 Lo mismo
para la dirección marchar 35 Esto no es obligatorio pero es una buena práctica tener en cuenta esas cuestiones sí lo mismo acá marchar bueno el email bueno pero hay gente que tiene emails rel largos vamos a poner que pueda tener 25 fecha de nacimiento sí va a ser tipo date y el teléfono también va a ser marchar porque puede tener guiones más y demás y generalmente los números de teléfono suelen tener 10 dígitos pero si Le agregamos alguna característica o algo raro vamos a poner que voy a tener 15 bien Ahí está ahora bien tenemos
nuestra tabla alumnos ya modelada perfectamente acá sí y ahora lo que tenemos de que tener en cuenta son las otras vamos a las otras tenemos cursos voy a modelar por último inscripciones que es la tabla intermedia cursos que tenemos ID curso nombre nivel de habilidad y tipo de instrumento Entonces vamos a mirar acá Tenemos cursos Entonces tenemos la primary Key que va a ser ID cursos ven lo copado que está esto de ocupar plantillas O sea que ya les da la plantilla fíjense mucho más sencillo no tengo que perder tiempo no hay foreign Keys en
esta tabla Así que la puedo borrar y acá voy a poner todos los registros Ahí está ID cursos acá no cursos curso Ahí está y acá vamos a poner cada uno nombre nivel habilidad y tipo de Instrumento Ah vamos a poner nombre entonces nivel habilidad nivel habilidad y creo que era tipo instrumento no a ver el último tipo instrumento OK Vamos a tipo instrumento tipo yajo instrumento Ahí está vamos a agrandar acá un poquito ahí nos queda todo Perfecto ahí está listo espectacular Ahí está listo lo mismo acá le voy a chicar un poquito ahí
bueno no me deja nunca me deja editar cu quiero editar este en particular así Siempre me Hace la contra ahí Me dejo siempre me hace la contra dro bien y ahora tenemos nuestra tabla intermedia que es inscripciones Cuál es la primary Key a inscripción y ahora sabemos que tenemos dos foreign Keys pero yo voy a hacer lo siguiente s voy voy a ponerlo acá porque hace nuestra tabla intermedia vamos a hacer así yo voy a agrandar esto un poquito voy a llevar cursos más abajo porque este tiene varios Campos y van a ver que la
foring Key Ahora cuando la Ocupe sí la voy a poner en otro lugar no la voy a poner acá ahora van a ver vamos a poner primero vamos a seguir la convención y primero vamos a poner todos lo que son los atributos propios de esa tabla s Entonces tenemos ha inscripción que ya está fecha inscripción si abonó o no y ahí las dos for incr Entonces tenemos acá fecha inscripción que más pedía esperen que me olvido siempre si abonó o no perfecto abonó no INS perfecto y ahora Tenemos nuestras dos foring Keys que las voy
a poner ahí pero ay qu tema Ahí está perfecto que va a ser ID alumno que va a ser una foring key y ID curso que va a ser la otra fory fíjense como lo copado este enunciado que ya nos decía de alguna forma s Cuáles eran las forys ahora lo que voy a hacer yo para simplificar la vida voy a copiar acá el cuadrito de primary a ver si me deja ahí está y voy a marcar acá Cuáles son las dos foring Keys ahí a ver Ahí voy a poner que est es fk1 fk1
de fory 1 y voy a poner que ID curso sea fk2 vamos a ponerla ahí ahí está para marcar entonces con eso estamos marcando que estas dos son las foring Keys esta primera ID alumno esta segunda ID curso Okay entonces a partir de esa ahora lo que nos falta son las relaciones sí a partir de esto ahora viene mi pregunta al chat cómo va a ser la relación si tenemos en cuenta que la afor enquesta En inscripciones yo les voy a dar una pista los que vieron el curso gratuito de base de datos de tod
code yo explico que hay una regla muy muy fácil para darse cuenta de cómo es la relación bien ahí escel lo puso y esta es la pista que siempre doy hoy la n que es de muchos siempre va del lado donde está la foring Key siempre si tenemos for in key sabemos que hay una n a menos a menos que la relación sea un a un que en esos Casos puede ir la foring Key en cualquiera de los dos lugares en este caso ya como Nos está dando entender de que un alumno se puede inscribir
a muchos cursos sabemos que tenemos un a n y sabemos que que una inscripción o un curso puede tener muchas inscripciones entonces sabemos un n también sabemos que acá hay una foring key eso significa que esto puede ser una n Entonces el planteo que hacemos Es un alumno puede inscribirse a muchos curso es decir un Alumno puede tener muchas inscripciones uno a n fíjense coincide con la n que tengo acá lo mismo acá me paro en cursos un curso puede tener muchas inscripciones porque que pueden haber muchos alumnos que se inscriban a un curso entonces
un curso puede tener muchas inscripciones uno a n ahora Okay acá tenemos el apartado relación de la entidad para hacer el gráfico sí fíjense acá tenemos cero chumi después acá tenemos One chumi tenemos todo lo que Sean los distintos tipos de relaciones vamos a ocupar acá One chumi Y tenemos entonces de que un alumno va a tener muchas inscripciones Ahí está y lo relacioné y ahora vamos a crear otro One many uno a muchos si de qué cursos puede tener muchas inscripciones con este planteo que yo estoy haciendo acá Sí ahí ahí está vamos ver
si lo puedo poner más ahí está más derechito con este planteo ya tenemos el diagrama enad Relación hecho Qué significa estos tres palitos que ven acá s estos representan el n es decir que uno a muchos uno a muchos no es igual a el diagrama de de clases que muchos conocen donde que es un tipo uml Esto no es un tipo uml donde se pone el uno y después acá la n no cuando estamos haciendo diagrama entidad relación se pone esta simbología vamos a ir a phpm admin y voy a crear la base de datos
Dale php admin no me dejes parada Ahí está roty vacío Perfecto no miren las 25000 base de datos que tengo acá que son todos de laburito y cosas y testeos Okay voy a crear una nueva y voy a elegir utf pueden elegir Generalmente Yo elijo utf8 spanish pero como las versiones más nuevas no no viene como solía venir voy a poner utf 32 y nombre que le voy a poner en este caso escuela y bajo música ustedes pónganle el nombre que quieran pero si quieren hacer Igual ponemos escuela música para que le danen los Scripts
porque voy a tratar de de armar los scripts ahí ahí está perfecto Qué pasa ahora bueno tenemos que crear nuestras Cuatro Tablas Sí en nuestras nuestras tres tablas tenemos dos chances de hacerlo opción uno mediante create Table y todo lo demás y armarnos todo el código sql para hacer la creación de las tablas y la opción dos es si estamos trabajando con php my admin o con warch o con alguna de estas herramientas lo podemos hacer gráficamente que es mucho Más sencillo a uno y uno Perfecto espérenme entonces cambio la pantalla listo el pollo bien
fíjense si vamos a hacerlo manualmente s sencillo ponemos el nombre de la tabla ponemos las columnas y creamos pero si lo vamos a hacer mediante sql vamos acá sql voy a pegar ya la consulta que yo tengo Armada pero se las voy a explicar paso a paso Sí cuando vamos a crear una tabla de cero mediante código sql utilizamos El Comando create Table o la consulta Create Table create significa crear Table significa tabla es como que le estamos diciendo creame tabla sí la sintaxis que tiene o la forma de utilizar siempre es create Table Y
luego el nombre que le quiero poner a esa tabla en este caso alumnos y entre paréntesis siempre van sí los atributos es decir las columnas que va a tener esa tabla Okay siempre se pone primero el nombre que va a tener sí la columna luego el tipo de dato y luego alguna Característica especial que tenga por ejemplo en este caso ID alumno es un entero sí Y es una primary Ke Entonces ya le ponemos acá en el código que es una primary Ke coma siempre cada columna está separada por comas bien luego tenemos apellido barch
50 y creo que yo puse 35 en el diagrama Así que vamos a poner 35 nombre barar 35 acuérdense estos son los tipos de datos Okay acá vamos a cambiar no era edad sino que pusimos fecha nas creo Ahí está y Habíamos puesto que sea de tipo date no ahí está bien luego tenemos dirección que no me acuerdo qué puse creo que puse 35 también teléfono puse 15 y no teléfono puse sí 15 e email Puse 25 creo por las dudas okay fíjense Que básicamente lo que hacemos Es lo mismo que establecimos acá lo mismo
mismo mismo pero a nivel código Y por último Cerramos el paréntesis del crear table para decirle Okay hasta acá vanan las columnas el punto y coma que tenemos acá Es opcional sí no es necesario que utilicemos sí o sí el punto y coma bien a partir de eso voy a poner pantalla completa si estamos en alguna consola sql alguno por ahí lo está utilizando en el cmd vamos a ejecutar Esto sí ponemos continuar y fíjense como automáticamente se ejecutó y creó sí la tabla si yo vengo a la escuela música tengo una tabla alumnos fíjense
y si entro tengo acá ID alumno apellido nombre fecha nacimiento dirección todo perfecto puedo Incluso fijarme más detalles si quiero la estructura y fíjense que si me fijo la estructura me marca con una llavecita amarilla que efectivamente ID alumno sí es una es una primary key Okay fíjense acá Está marcado se entendió el cre Table Okay vamos a Entonces ahora les voy a mostrar la forma de hacerlo por interfaz gráfica van a ver que todavía es más fácil todavía vamos a ir acá a Nueva o acá incluso donde ustedes quieran cualquiera De los dos es
válida y vamos a poner el nombre de la tabla en este caso voy a poner cursos Ahí está y vamos a poner el número de columnas que no me acuerdo Cuántas columnas tenía cursos a ver una dos 3 cuatro columnas perfecto vamos a crear y ahí acá nos pide los tipos de datos de cada una Sí vamos a poner ahí curso que es un entero perfecto vamos a poner que sea Ahí está esperen que estoy mirando acá Algunos detalles Okay auto incremental sí prob que sea autoincremental está y que es una primary key perfecto ven
como lo podemos hacer todo por interfaz mucho más sencillo en índice ponemos que es una primary key y acá tenemos la opción de poner que sea autoincremental sí eso significa que cada vez que se agrega un nuevo registro es este número va a ir incrementando podremos hacer lo mismo en alumnos ahora lo voy a modificar bien acá vamos a tener el nombre que va a ser Un barch le voy a poner también un barch vamos poner 50 que es un poco más grande y acá creo que era nivel no a ver cómo era Cuáles eran
los los valores que tenía nivel habilidad y tipo instrumento a ver nombre nivel habilidad y tipo instrumento tenemos nivel habilidad y tipo instrumento instrumento perfecto los dos van a ser chars acuérdense como dijimos que esto podría estar también tercerizado cada uno en una tabla separado Si queremos Mejorar más todavía el modelado Vamos a ponerle 35 nivel y tipo instrumento 35 también para qué tanto Ok fíjense acá que tenemos my e inb acuérdense de esto ya les voy a mostrar Después qué significa eso de y no de B vamos a guardar perfecto y ahora por último
por último esperen que le voy a poner e en alumnos voy a poner que se autoincremental ID porque no pusimos Ahí está Le voy a poner que sea autoincremental perfecto Ahí está ahora Sí y ahora vamos a crear la de inscripciones que acaba empezar la vuelta vamos a poner inscripciones vamos a poner Cuántas a ver cuántas columnas tiene 1 2s 3 cu c Así que voy a tener que agregarle una acá a ver Ahí está perfecto tenemos ID inscripciones vamos a poner que sea índice primario que es una primary key perfecto que es autoincremental y
acá vamos a poner fecha creo que era a ver si me acuerdo Fecha de inscripción Vamos a ponerle tipo date después tenemos abonó inscripción para ha la persona abonó la inscripción que vamos a ponerle que sea acá tenemos distintas formas poner yo voy a poner que se un boolean si puede sea verdadero falso y acá tenemos ID alumno acá ID inscripción sería Ahí está ID alumno y acá ID curso que van a hacer dos for inis pero ahora les voy a mostrar un detalle Con esto si fíjense que si yo acá voy a índices fíjense
acá no me aparece nada no tengo ninguna opción para hacer relaciones ni nada y les voy a mostrar Por qué sí fíjense vamos a guardar esto fíjense que ID inscripción me tomó como primary K pero ID alumno y ID curso no Acá hay un error que siempre les muestro es un video exclusivo de esto que para hacer la foring Kiss tenemos que ver algo una opción que se llama Vista de relaciones y nos tiene que aparecer acá arriba Sí pero qué pasa Nosotros con estamos usando cierto motor e vamos Por decirlo de alguna manera estamos
utilizando un determinado motor o distribuidor de base de datos que lo que hace es prevenir de que podamos hacer relaciones y me decir Lucina pero no tiene sentido en una base relacional no poder tener relaciones Bueno aunque ustedes no lo crean eso sucede Sí si ustedes vienen acá al apartado Operaciones sí van a ver que acá en opciones de tabla hay una opción que se llama motor de almacenamiento sí está por defecto mayam que es un motor de almacenamiento que justamente no permite relaciones entre tablas para que funcionen correctamente las relaciones esto lo tenemos que
pasar ahí no deb dentro de la tabla donde vamos a hacer las foring Keys Sí ahora si ponemos continuar y nos fijamos acá en inscripciones vamos a ver Sí que ya hizo las modificaciones y ahora nosotros si venimos acá decir per luina qué pasa fíjense no me aparece la vista de relaciones pero si vamos a estructura que es donde tiene que aparecer si tenemos la vista de relaciones como tal entonces acá en vista de relaciones lo que nos dice es para crear las relaciones que van a tener nosotros fíjense tenemos dos relaciones uno a n
que tiene inscripciones Entonces nosotros en Inscripciones tenemos la foreing Key nosotros vamos a elegir qué columna queremos relacionar en este caso ID alumno vamos a poner qué base de datos escuela música y vamos a poner con qué tabla que queremos relacionar y fíjense lo que pasa acá me dicen que la única tabla con la que puedo relacionar es con inscripciones por qué creen que pasa eso Por si yo acá estoy poniendo la columna alumno y pongo AC la tabla apece solo la tabla Inscripciones es la única in de B exactamente exactamente yo alumnos y cursos
las dejé con myam Entonces qué pasa al dejarlas a las dos con myam sí eh automáticamente no pueden hacer relaciones ni alumnos ni cursos pueden sí fíjense acá arriba dice restricción de clave foránea y no de B Entonces yo tengo que ir a alumnos me voy acá arriba a operaciones Y también voy a cambiar alumnos a que sea ino deb y lo mismo voy a hacer en cursos Sí En cursos voy a venir a operaciones y voy a cambiar a ino deb damos a continuar y ahora sí me vuelvo a inscripciones me voy a estructura
y si voy a vista de relaciones ahora voy a intentar hacer la relación de vuelta voy a poner ID alumno y cuando pongo las tablas fíjense como ahora sí aparece la tabla alumnos cosa que hoy no aparecía bien se entiende es muy importante porque podemos ahí automáticamente ya me detecta que tiene Que relacionar con ide alumno fíjense gente esto esto lo explico en un video en super detalle pongan en YouTube error vista relaciones todo code ahí lo explico en super detalle no me voy a poner a explicar acá ahora porque vamos a tardar 25 horas
y no vamos a terminar más el ejercicio ahí en ese video lo explico en detalle pero básicamente son dos tipos de motores de almacenamiento que tienen ciertas restricciones unos con otros en maya y Sam no se pueden Hacer relaciones mientras que in deb sí se pueden hacer relaciones ahora con esto ya tengo me puedo poner acá por ejemplo fk le puedo poner el nombre que quiero fk1 por ejemplo guardo y ahora puedo crear otra le llamo fk2 para seguir lo que pusimos en el diagrama voy a poner ID curso y que me relacione con la
tabla curso si ahí me tomo automáticamente que la relación va a venir con ID curso bien le doy a guardar y Listo ya tengo mis Dos foreing Keys ahora si yo voy a inscripción y voy a estructura fíjense queé Cheto Eh me aparece acá una foring sí espectacular con grisito fíjense que me dice índice y acá abajo Si miran dice que se llama fk1 Y fk2 por qué puse fk1 fk2 obviamente podemos poner el nombre que queramos yo para guiarme por lo que pusimos en nuestro diagrama acuérdense que el diagrama siempre es una referencia un
estándar y que Generalmente se suelen utilizar los mismos nombres que están ahí si Entonces ya terminamos con esta primera parte sí ya hicimos el modelado Ya hicimos las relaciones pero ahora tenemos que agregar una serie de registros Random Sí a las tablas y tenemos ya también Cuáles son los tipos de cursos yo hice un poquito de trampa ahí les voy a mostrar y ya armé las consultas estoy ahora parada acá en escuela música Y voy a ir a sql y como les dije yo ya tengo esto repito se lo voy a dejar gente todo en
github Sí para que ustedes lo tengan fíjense yo ya había armado una consulta me maté con el nombre sí calle falsa Avenida siempre viva o sea no no me maté demasiado Le pedí a chat gpt que me tire ideas de datos y me tiró pero ahora vamos a cambiar eh lo que es el tema de edad fíjense cómo funciona sí e el insert el insert tenemos inser inchu que significa mete adentro básicamente Sí suena feo pero bueno Met adentro de alumnos que le voy a poner todo en minúscula para cumplir con el con Ahí está
con la convención los siguientes datos ID alumno apellido nombre edad acá edad vamos a tener que cambiar por fecha nas Ahí está dirección teléfono e email y luego se pone la palabra valies vales es valor básicamente lo que hace un insert es decir inserta dentro de alumnos teniendo en cuenta este orden de columnas los siguientes valores Eso Significa esta consulta si fíjense porque es tan importante entender un poquito de inglés y ahí lo que vamos a hacer es poner las ids los apellidos los nombres pero ahora acá en lugar de edades vamos a poner fechas
las fechas por convención se ponen siempre año mes día y se ponen entre comillas simples sí esto por convención depende el motor o el sistema gestor de B que ustedes están utilizando Esto puede cambiar sí eh o que hacan establecer las configuraciones Pero por convención y el estándar es utilizar de esa manera entonces yo voy a poner acá en qué s yo 1996 06 10 sí voy a copiar el mismo formato y voy a modificar la fecha Ahí está AC voy a poner 1999 03 20 acá voy a poner eh vamos a alguien de nuestra
edad de los millenial 1990 11 21 alguien que cumple un año antes que yo ahí ponemos acá voy a poner mi fecha De nacimiento Martínez Ana va cumplir igual que yo 23 del 11 91 acá vamos a poner a ver le puedo poner a 1995 5 y AC poner cu estoy inventando gente Cualquier fecha de nacimiento eh Y acá voy a poner vamos a poner alguien joven Alien 2001 que sea el mes 4 o del mes 12 alguien de alguien que cumpla Navidad Ahí está 25 de diciembre Okay dio Sánchez cumple 25 de diciembre con
esto nosotros ya insertamos una serie de valores Entonces no vamos a estar Perdiendo tiempo insertando uno por uno manualmente ahí tiene su ventaja si nosotros acá quisiéramos insertar me guardo la consulta manualmente acá por la interfaz gráfica nosotros podemos Sí vamos por ejemplo alumnos voy a salir acá y pongo insertar acá arriba y puedo insertar uno a uno manualmente pero digamos que es bastante en volante hacerlo entonces para poder hacerlo todo de una ya pongo la consulta sql directamente y me simplifico la vida Detalle a tener en cuenta cada registro tiene que estar entre paréntesis
para delimitar dónde empieza y dónde termina fíjense yo voy a poner un enter acá Cómo coinciden Sí cada columna con cada dato ID alumno es el primero apellido es el segundo nombre es el tercero o sea siempre tiene que cumplir el mismo orden incluso las columnas van entre paréntesis también Sí y donde termina el Script donde termina mi consulta pongo un punto y coma para marcar que termina Eh Y para separar cada uno de los registros pongo una coma bien Le damos acá a continuar y fíjense que me dice que todo okay seis filas insertadas
sin ningún problema si vamos a alumnos acá tenemos nuestros seis alumnos creados sin drama algún problema con el incinto gente Ahora les voy a mostrar cómo hacerlo con las claves con las claves foráneas y todo pero algún problema AC con el inser into venimos Entonces entonces a partir de esto lo que yo voy A hacer yo ya tengo acá mi machetito también para los insert de los distintos cursos que eran nueve Eso ya me lo armé Se los voy a mostrar me voy acá sql Ahí está esto les voy repito esto les voy a dejar
todo en el repositorio inser cursos idid curso nombre nivel habilidad tipo instrumento creo que lo escribimos tal cual a ver me voy a fijar por si no cambiamos y lo ponemos ni o no pusimos algo distinto nivel habilidad Tipo instrumento bien pusimos igual listo y lo que hice fue lo que nos dice la Consigna s guitarra principiante bueno acá fíjense un detalle Acá hay un detalle que les quería Mostrar nosotros pusimos que tiene nombre el curso sí nivel de habilidad y tipo instrumento yo básicamente le puse que el nombre sea la combinación del instrumento y
el nivel de habilidad sí lo correct esto para no para no Reventarme El coco pensando para el ejemplo Pero si ustedes quieren poner acá por ejemplo eh guitarras del monte por decir algo y que el nivel sea principiante an guitarra también o sea Quieren poner que el nombre del curso sea guitarreando con Aníbal estoy inventando no sé por puse Aníbal Pero bueno puse un nombre Random sí tengo un tío que se llama Aníbal e como es lo pueden hacer yo puse Directamente que el nombre sea la combinación del instrumento y el nivel vieron que a
veces ponen guitarra uno guitarra dos guitarra 3 bueno ustedes le pueden Pon el nombre que quieran yo me simplifié la vida hice eso S fíjense misma estructura son nueve nueva nueve nombres nueve niveles principiante intermedio avanzado principante avanzado y luego guitarra guitarra guitarra Esto es lo que hoy preguntaron en el chat que dijeron luisina No van a haber muchos Datos redundantes si nivel habilidad y tipo instrumento podían ser tablas separadas para no repetir tantas veces los datos Y es totalmente correcto gente se podría hacer sin problema pero en este ejercicio como vamos a tratar de
simplificar noos la vida vamos a hacerlo de esta manera bien a partir de esto le vamos a continuar si vamos a nuestra tabla cursos están todos los cursos que nos pidieron en la Consigna que son estos sí los nueves cursos que nos Pidieron espectacular y ahora ahora viene el K la cuestión Sí ahora viene la parte un poquito más compleja podríamos decir sí vamos a ver lo que va a ser el insert de inscripciones okay les voy a mostrar lo siguiente voy a copiar y pegar Ahí está este me lo armé yo siir luisina no
entiendo un pomo lo que pusiste acá les voy a explicar no es nada de otro mundo si un inserito com unicente o sea insertar dentro de Inscripciones le voy a poner con minúscula Ahí está ID inscripción fecha inscripción si abonó la inscripción ID alumno y ID curso básicamente Yo sé que tengo creados en base a la consulta que yo hice recién seis alumnos o sea que yo sé que sus ids van del uno al seis sí Por lo cual en esta columna pueden haber valores de uno a seis lo mismo pasa con ID curso es
ID curso son nueve Por lo cual pueden haber acá valores de 1 a nueve si yo pongo un valor que no Corresponda no me va a dejar continuar con el insert porque me va a decir que la clave foránea no existe bien o me puede lanzar un error o va a quedar asociado a un nul a un valor que no existe entonces básicamente lo que yo hice acá es crear 15 inscripciones con fechas en distintos meses de 2024 algunas en enero otras en febrero otras para que tengan meses variados puse que fíjense como no me
maté mucho puse que uno pagó uno no pagó Uno pagó uno no pagó uno pagó uno no pagó dos pagaron otro no pagó y así me hiz una secuencia sencilla acuérdense que si abonó o no la inscripción es un true false se bien pagó o no y puse que el alumno un un está inscritto al curso uno el alumno dos al dos el alumno tres al tres el alumno cuat al cuatro pero acá empecé a hacer un mix puse que el alumno uno también está inscripto en el dos que el alumno dos también está inscripto
en el curso tres que el alumno Tres está en el curso uno o sea me hizo un mix donde puse que hay alumnos que están inscritos a dos cursos y hay alumnos donde están a un solo curso sí me hiz un mix de datos ustedes pueden armarse lo que quieran o ocupar este mismo Script para eh hacer las inscripciones por qué acá no va ni el nombre ni el alumno ni el nombre del curso porque estamos trabajando con foring Keys acuérdense que lo que hacen las fore Keys sí es asociar las ids si Nosotros hacemos
esto por Script es de esta manera les voy a mostrar pero fíjense que me puede arrojar un error Por qué Porque esce abono insc no existe Ah claro pues ya me rme a ver cómo pusimos creo que puse aboro insc creo que le pone nombre a ver vamos a probar Ahí está perfecto ahora s anduvo porque yo he puesto en mi prearmado inscript y acá pusimos INS fíjense me quedó así s y si yo hago click porque me dice alumno uno no si yo Hago clic en el uno fíjense lo que pasa me lleva al
alumno un quién es OK eso significa que mi relación quedó bien lo mismo dice que se inscribió al curso uno si yo hago click me lleva a guitarra principiante eso significa que mis relaciones están bien hechas Ok eso significa que se está respetando esto que tenemos acá si que inscripciones me está sirviendo intermediario entre estos valores si yo vengo ahora acá y Quiero agregar uno manualmente vamos a agregar Uno más s fíjense lo que va a pasar el ID de inscripción si yo puedo poner valor se puedo autogenerar voy a poner que alguien que se
inscribió hoy 26 de junio voy a poner que sí Que pagó la inscripción me p me dice que pongo un o sea un un un cer voy a poner que sí Que pagó y fíjense si yo acá despliego me aparecen la ID y los apellidos de las personas entonces Esto es algo que ya tiene php my admin que lo Hace automáticamente con my sql que además de mostrarnos la ID nos muestra un dato para que el número no sea algo Random que decimos que miércoles esto sino que nos muestre ya algo más personalizado Entonces ya
sabemos que Ah Pérez era Pérez Bueno vamos a agregarle a Fernández eh que se inscribió al curso y acá fíjense que me toma principiante y termino avanzado no me toma el nombre del curso esto depende En qué orden Tengamos las columnas en el otro caso como la primera columna el orden del apellido toma el apellido Okay en este caso me está tomando el nivel depende En qué orden pongamos las columnas va a tomar un valor o va a tomar otro en este caso no me está tomando guitarra Me está tomando principiante Pero bueno si yo
se las ID le puedo anotar vamos a anotarle en creo que esta violí avanzado Okay era para mostrarles de que con eso validamos de que nuestras relaciones están bien y Que está trendo datos de otra tabla le damos a continuar y si miramos ahora la los datos de inscripciones el alumno 16 acabamos de escribir fíjense 5 y nu si yo voy a cco me lleva a Fernández Lucía y si yo voy al nu me lleva a violina avanzada Okay entonces terminamos con nuestro primer planteo Ahí va les muestro y ahora vamos a ir con la
parte que ustedes más les gusta que es la parte de las consultas Okay voy a masticar chicle Un ratito ahí va para que no después los que vean en YouTube está masticando chicle sí estoy masticando chicle vamos al nivel un vamos a arrancar tranqui vamos a tener estas cu consultas de nivel uno listar todos los alumnos inscritos en el curso de guitarra intermedio Mostrar todas las inscripciones realizadas después del primero de enero de 2024 contar la cantidad de alumnos que han abonado a la inscripción y listar Los cursos disponibles para alumnos avanzados como entre las
que tenemos ahora por lo que yo ya estoy viendo rápidamente vamos a tener un join y podemos tener un implícito explícito Así que se la voy a dejar por último Recuerden que teníamos cuatro consultas voy a arrancar con la primera la primera primera que era listar todos los alumnos inscritos en el curso de guitarra intermedio lo voy a dejar por último Porque esa tiene un Inner join si uno explícito uno implícito podemos ver pero lo voy a dejar por último vamos a las más sencillas si la que tenemos primero es voy a copiar y pegar
acá Mostrar todas las inscripciones realizadas después del primero de enero de 2024 bien acá básicamente tenemos que hacer un celec el celec acuérdense que es la consulta que utilizamos para traer datos para leer datos tenemos Select Sí y acuérdense que acá siempre tenemos que poner Cuáles son los campos que vamos a traer de la tabla en cuestión en este caso si ocupamos asterisco significa que estamos trayendo todos los datos a ver acá les voy a enseñar algo para los que no lo sepan hay una mala práctica de los hispanohablantes que decimos Select asterisco sí o
Select estrella no gente esto significa all all en inglés significa todo si aprendemos de esa Manera sabemos que Select es selecciona y el asterisco significa all que es todo selecciona todo si ocupamos Select all yo estoy diciendo seleccion me todo okay básicamente con eso aprendemos una mejor práctica de cómo es el nombre y de paso si hacemos la traducción literal aprendemos que significa selecciona todo bien Ahí vamos a poner from que significa desde sí Y ahí ponemos el nombre de la tabla en cuestión en este caso Inscripciones bien Ahora la estructura de un Select siempre
es la siguiente Select from Where en este caso es Select all seleccion me todo desde la tabla inscripciones Where dónde y acá vienen las condiciones en este caso Me pedía de que sean todas las inscripciones después del primero de enero sí de 2024 entonces acá voy a poner fecha Epa insc sea mayor A qué cosa acuerdense año Primero 2024 1 1 mes año repetimos por hacemos la consulta así Select all Traeme todo from inscripciones desde inscripciones fecha mayor a primero de enero de 2024 dónde la fecha de inscripción sea mayor al primero de enero de
2024 se entiende con esto Esta es una de las más sencillas que vamos a hacer hoy le damos a continuar y me trae todas las inscripciones que básicamente todas las inscripciones en este caso se hicieron Acá nos muestra el campo por el cual filtramos Todas se hicieron después del primero de enero 2024 así que nos tra absolutamente todas las inscripciones si por ejemplo cambiamos a que sea menor a primero de enero no tendría que tener ninguna si porque nadie se inscribió en el 2023 vamos a probar efectivamente fíjense no me devolvió ningún valor por qué
porque todas estas se inscribieron en el 2024 no en el 2023 así que me la guardo acá la voy a copiar en un bloc de Notas así me queda Ahí está para después subirlo todo a a github así ustedes lo tienen bien entonces ahora vamos a la otra consulta que era de nivel uno contar la cantidad de alumnos que han abonado la inscripción Okay acuérdense que dentro de la tabla inscripciones que es donde estamos posicionados ahora sí para hacer la consulta tenemos un detalle en Particular inscripciones tiene un campo que puede ser verdadero o falso
Sí ese campo nosotros vamos a tener que contar la cantidad de verdaderos que hay Porque si está en verdadero significa que la persona pagó la inscripción Okay entonces acuérdense que la estructura del Select siempre es Select from y Where Sí nosotros queremos traer todos sí los que pagaron pero no nos pide los datos de las personas que pagaron sino Que nos pide que contemos Cuántos pagaron nada más queremos saber cuántos de los 25000 alumnos que hay Bueno ahora tenemos poquitos tenemos 16 Pero bueno no menos Creo que tenemos seis alumnos de los seis alumnos Cuántos
pagaron y cuáles no O Cuántas inscripciones se pagaron de esos alumnos si Entonces en realidad que vez de contar la cantidad de alumnos ten la cantidad de inscripciones que fueron abonadas Pero bueno temas de redacción ahí porque si Es por contar la cantidad de alumnos ahí hay algo que está mal redactado acá lo que hay que contar es la cantidad de inscripciones abonadas Ok Voy a cambiarle Eso después en el vamos a poner acá en vez de contar la cantidad de alumnos voy a poner contar la cantidad de inscripciones abonadas así después cambio la Consigna
también ahí está entonces acá tenemos un detalle no puedo poner Select all Por qué Porque tengo que contar para contar voy a Utilizar el count y el count lo que me permite es poner el asterisco dentro significa eso que le digo seleccion me Traeme todo lo que puedas contar fíjense Este detalle Ojo mucho detalle de la tabla inscripciones donde y ahí va la condición abono insc c igual a true y acá tenemos un detalle Sí yo acabo de poner true pero abono INS está en un tipo de Dato que se llama Tiny int cuando solros
ponemos que sea bullen automáticamente muchos gestores de base de datos lo transforman a Tiny in timing in es entero pequeño es decir puede ser un uno o puede ser un cero acá también podremos poner en lugar de true poner un uno que significaría verdadero o poner false o poner cero sí cualquiera de estos es válido vamos a probar poniendo true y van a ver qué es lo que sucede Okay detalles a tener en cuenta el count si Acá pongo un espacio en el medio ya no funciona sí la sintaxis de sql es muy estricta con
esto tiene que estar el paréntesis pegado al count si hay un espacio en el medio o acá o donde sea puedo arrojar error mucho ojo ahí bien entonces ahora a partir de eso me pongo un poquito más grande Ahí está vamos a ejecutar la consulta y fíjense que me contó que la cantidad de inscripción que fueron abonadas fueron nu fíjense Yo acá Pusiera false ahí o sea las person son 16 inscripciones en total si nueve son las correctas Yo acá tendría que tener siete a ver hay siete que no están abonadas Así que fíjense y
podemos validar que efectivamente nuestra consulta funciona lo voy a dejar en true que era el original listar los a ver Acá está vamos a borrar esto me vengo acá escuela de música sql listar los cursos disponibles para Alumnos avanzados Yo acá pondría los cursos de nivel avanzado directamente Ahí está vamos a ponerlo así así le mejoramos la la reacción Ahí está bien acá ya cambiamos la tabla no estamos en la tabla inscripciones sio que vamos a ir a la tabla cursos básicamente le vamos a decir nos pide todos los cursos que sean de nivel avanzado
entonces Select all from cursos hamos bien Traeme todo desde cursos Where dónde y qu tengo que Fijarme acá el campo que establece si es avanzado si es principiante es intermedio ese campo era nivel habilidad ent pongo nivel habilidad igual creo pusimos con mayúscula no así avanzado vamos a probar si funciona esto lo porque es otra consulta sencilla sí cambiamos la tabla no más le damos a continuar y fíjense que me trae que hay tres cursos avanzado guitarra avanzado piano avanzado y violín avanzado Okay fíjense Qué pasa si Yo pongo acá con minúscula fíjense qué pasa
me trae igual y por qué esto gente Qué pasa si yo por ejemplo esperen que pongo acá editar de vuelta si yo acá pongo por ejemplo avanzados pongo mal ahí no funcionó qué es lo que pasa acá y les voy a contar un poquito el detalle Depende qué configuración tengamos en nuestro sistema gestor de base de datos va a ser estricto o no con Mayúsculas o minúsculas bien Esto es muy importante a tener en cuenta cuando nosotros trabajamos con los sistemas gestores de base de datos hay algunos que omiten el uso de mayúsculas y minúsculas
y son ibles y nos traen también las opciones sin mayúscula o sin minúscula u otros que son Realmente estrictos Y sí o sí se tiene que cumplir bien eh cuando estamos hablando de nombres de tablas y demás por convención siempre se ocupa en minúscula pero Cuando hablamos de el contenido de las tablas la recomendación que siempre se hace es escribir tal cual tengamos en la tabla es decir escribir con las mayúsculas las minúsculas y todo lo que corresponda bien si bien en este caso eh mi sistema gestor el php my admin de My sq está
en flexible Por lo cual me va a traer igual con mayúscula y minúscula no en todas las bases de datos sucede esto por ejemplo Oracle es una base de datos que es bastante estricta con el uso de Mayúsculas y minúsculas Por lo cual puede pasar que si ponen mal esto después no les traiga los datos que ustedes están buscando okis ahora viene la consulta más compleja de nivel uno listar todos los alumnos inscriptos en el curso de guitarra intermedio vamos a nuestro modelado nos pide todos los alumnos que estén inscritos ya sabemos que vamos a
relacionar estas dos tablas Sí en el curso de guitarra intermedia quién tiene datos de los alumnos inscripciones sí sabe quién es el alumno que está inscrito A qué curso Entonces nosotros podemos desde alumnos consultar a la inscripción los alumnos que estén inscritos a un determinado curso yo entre alumnos y inscripciones lo puedo hacer pero lo único que yo puedo hacer de esa manera es indicar la ID del curso en particular que yo estoy buscando que es guitarra Intermedio en este caso Sí ahora supongamos que yo no tengo el ID Yo sé que el curso se
llama guitarra intermedio pero soy una persona común y corriente no sé la ID obiamente si yo Mira acá en la base de datos Yo sé que guitarra intermedi ID dos pero vamos a suponer que yo no sé el ID si yo quiero hacer la fácil yo traigo todos los alumnos que estén en que tengan el dos en inscripciones y me trae todos Sí pero y hag una relación entre Las dos tablas Pero qué pasa AC acab tener que relacionar tres tablas entre sí okay Voy a tener que relacionar alumnos con inscripciones e inscripciones concursos para
poder traer todo okay Y acá vamos a hacer uso del maravilloso join y acá es donde se empieza a complejizar y les voy a mostrar fíjense primero y principal voy a poner pantalla completa bien sabemos que es un Select si lo que nos pidió es alumnos Por lo Cual vamos a hacerla sencilla si voy a traer el apellido y el nombre de los alumnos entonces voy a poner Select from y we Sí vamos a poner acá todas las condiciones des a agregar los join y demás que necesitemos entonces la tabla que voy a consultar en
primer lugar va a ser alumnos Okay Y le voy a poner un apodo le voy a poner a si para no ten escribir alumnos alumnos alumnos todas las veces bien Entonces le voy a Decir Select alumnos o a directamente a punto nombre y a apellido Qué cambió acá en esta consulta que no le estoy diciendo Select all no estoy dando asterisco tráeme todo no AC le estoy diciendo Traeme solo los nombres y apellidos los otros datos No me interesan Sí con esta parte de la consulta estoy diciendo Tráeme los nombres y apellidos de los alumnos
si yo no agrego ningún join ninguna condición ni nada qué va a pasar que me va a traer Solo los nombres y apellidos fíjense si yo lo lo hago así no más y ejecuto me trae todos los alumnos pero solo nombre y apellido O sea me filtra los datos pero yo no Necesito que me traiga Exactamente eso nombre y apellido pero de los que cursan guitarra intermedio Ok bien yo le pregunto a ustedes yo les di la pista primero tengo que juntar alumnos con inscripciones qué dato uso para juntar alumnos inscripciones para eso vamos Utizar
un join el join es unir Cómo hago para unir iones con alumnos mediante qué dato lo hago ID alumno y la ID alumno muy bien Perdón Qué hace la referencia le puse unao a alumnos veen acá para no tener que poner alumnos punto nombre acá alumnos punto nombre alumnos punto apellido que es relaro le puse un apodo le puse alumnos a Entonces esta a hace referencia a alumnos entonces cada vez Que quiero hacer referencia a la tabla alumnos puedo poner solo una a Eso significa Ok bien fíjense en este caso entonces me dijeron por perfecto
vamos a unir por la pH Ke Ahora les voy a mostrar un detalle en particular acá fíjense si yo aco el join voy a unir primero inscripciones con alumnos Ok yo voy a hacer la siguiente manera join inscripciones pero van a ver un detalle acá que les voy a mostrar le vamos a poner I de apodo a inscripciones on y Acá voy a poner a de alumno ID alumno se ig I ID alumno qué estoy haciendo acá y fíjense que me dice tipo de declaración desconocida y ya les voy a contar Por qué si bien
Le estoy diciendo Traeme nombre y apellido de los alumnos con la unión de la tabla a inscripciones con alumno que tengas en cuenta este es el on significa que tengas en cuenta O que tengas para unir la ID del alumno en la tabla alumno y la ID del alumno en la tabla de Inscripciones por eso puse acá I para que sea más fácil escribir inscripciones todas las veces y acá puse a para no tener que poner alumnos todas las veces este punto y como me quedó hoy cuando escribí en este punto no va muy bien
Walter Okay eso era exactamente lo que le estaba preguntando porque este join no me funcionaba era por el punto y como acá lo tomaron demasiado demasiado rápido Walter lo hizo Okay pero AC hay Un detalle más a tener en cuenta además si algunos escriben Inner join de esta manera o join cualquiera de las dos variantes es correcta en este caso Sí por qué Porque sql dependiendo Qué sistema gestor de base de datos estemos utilizando necesita o no la palabra adelante Inner join estamos haciendo referencia de que se unan pero también tenemos left join y también
tenemos right join sí Qué sucede eso qué sucede eso Que si yo estoy utilizando el join solo en el caso de mysql que es lo que estamos ocupando ahora toma de forma automática que es join sí pero si ustedes estn trabajando con otro sistema gestor puede ser necesario que pongan el Inner adelante para estos casos mucho ojo sí yo estoy uniendo acá inscripciones con alumno pero ahora Ahora yo tengo que unir Qué cosa inscripciones concursos porque si no cómo valido que sea guitarra Intermedio entonces tengo que unir inscripciones concurso para eso voy a hacer otro
join ahí join y voy a poner cursos C para ponerle un Apo también on y acá voy a poner iid curso c ig C ID curso se enti lo que estoy haciendo acá acá lo uní a alumnos con inscripciones mediante la ID de alumno y acá estoy uniendo cursos con inscripciones mediante el ID de curso con esto yo llego Fíjense alumnos a inscripciones llego mediante ID alumno y de inscripciones a cursos llego mediante ID curso acá tenemos el primer join acá tenemos el segundo join ahora que estoy dentro de cursos tengo que buscar los cursos
de guitarra intermedia Cómo hago eso de la siguiente manera pongo c punto nombre del curso se igual a guitarra intermedio Esta es una forma de hacerlo Se entiende esta consulta si hacemos esto Ahora vamos a probar si anda No si le doy a continuar me muestra que los dos que están inscritos en guitarra intermedio son María González y Juan Pérez qué otra forma yo puedo hacer esto otra forma de hacer esto lo voy a mostrar acá abajo sería Select vamos a hacer lo mismo A nombre com apellido sí Y acá puedo poner from alumnos A
inscripciones y cursos c y qu voy a poner acá Este detalle voy Mostrar ustedes me dicen si está bien o no aid alumno F que ocupo Jo c ig i alum voy poner otra coni I Epa I punto ID curso sea igual a c punto ID Curso and y voy aar uno más c punto nombre C ig ahora les pregunto borro la anterior dejo esta va a funcionar esta consulta que acabo de hacer fíjense el detalle yo declaré Traeme nombre y apellido del alumno desde las tablas alumnos la tabla inscripciones y la tabla cursos c
ahí está Perdón dónde la ID del alumno en la tabla Alumno se igual a la ID del alumno en la tabla inscripción y la ID del curso en la inscripción se igual ID del curso y el nombre del curso sea guitarra intermedio hacemos esto debería de funcionar vamos a ver si es así efectivamente trae el mismo resultado Y por qué Este luina pero no usaste join ahí efectivamente no gente y les voy a contar por qué esta Va a ser nuestra solución dos voy a contar por qué esto Si esto si ven el video de
joins que yo hice pueden buscar join como dije recién Inner joint todo está explicado ya en YouTube a nivel de detalle hay dos tipos de Inner join el join explícito y el join implícito el explícito es el primero que hicimos donde ponemos de forma explícita es decir que se ve la palabra join como tal entonces hacemos join que significa unir y unimos las dos tablas después join y unimos las otras dos tablas bien Ahora Esa es la forma explícita donde vemos la palabra join sin embargo nosotros podemos hacer un join implícito lo que significa que
dentro de la consulta ya está el join sin la necesidad de escribir el join Okay esta forma sin escribir el join es mucho más fácil de hacerla o sea como que más rápido asociamos qué con qué Pero es más prolija por así decir una manera o queda más lindo hacerlo Mediante los join como corresponde Sí igual ambas formas son Válidas pasamos al nivel uno vamos ahora al nivel dos bien nivel dos son tres consultas bien Hoy estamos agarrando la pala gente no se pueden quejar dice la primera consulta listar los nombres y apellidos de los
alumnos junto con los nombres de los cursos a los que están inscritos join a full acá eh después obtener el nombre y apellido de los alumnos que están inscritos en más de un curso acá ya tenemos subconsultas okay Y por último Mostrar El nombre del curso y la cantidad alumnos inscritos en cada curso subconsulta full de vuelta acá acá se viene el puro gente Eh bien la primera consulta que tenemos a ver me voy a venir escuela música me voy a venir acá la primera consulta a ver la voy a copiar acá el PDF es
la siguiente listar los nombres y apellidos de los alumnos junto con los nombres de los cursos a los que están inscritos primero y principal me pide Solo nombre y apellido de alumnos Por lo cual de entonces que es Select voy a poner a punto nombre acá a punto apellido y ya sé que es de la tabla alumnos hasta ahí vamos bien hasta ahí vamos bien o no pero hay algo más que me pide porque me pide nombre apellido del alumno junto con el nombre del curso Por lo cual en el Select yo tengo que Mostrar
nombre apellido de la persona pero tengo que Mostrar también el nombre Del curso y ahí se complica Por lo cual acá voy a poner c nombre a decir luisina acá se complicó todo Bueno voy a poner alumnos a para poner un apodo a alumno pero acá viene la complejidad ahora porque yo acabo poner c acá para nombre del curso tengo que poner acá también el curso o no o con el join Ya está probemos fíjense si allá acá yo pongo join inscripciones y por AC tengo que Unir para poder llegar a la tabla Vamos a
repasar para poder llegar a la tabla de cursos y que me salga el nombre y el apellido y el nombre del curso yo tengo que unir de vuelta alumnos con inscripciones e inscripciones con cursos porque acá están las dos for inscripciones en la tabla intermedia entonces para que yo pueda elaborar esto tengo que primero unir alumnos con inscripciones y después inscripciones Con cursos como hicimos en la consulta recién del join así acá vamos a hacer lo mismo voy a unir inscripciones y con e con alumnos y voy a tener en cuenta lo siguiente a ID
alumno c ig i ID alumno perfecto y ahora vamos a tener que hacer el segundo join sí curso c on y acá vamos aer comparar y punto ID curso se igual a c punto ID curso pero acá van a decir luisina para para para para qué estás haciendo acá Vamos de vuelta repasamos Traeme el nombre y el apellido del alumno le puse a de apoo alumnos sí y Traeme el nombre del curso dónde establecí este apodo acá en el segundo join bien Pero acuérdense para poder acceder yo tengo que unir primero a alumnos con inscripciones
y después inscripciones con cursos entonces en la primera Unión uní por la ID de alumno a inscripciones con alumnos y en el segundo join a Cursos con inscripciones de esa manera yo obtengo los cursos con este join con este join obtengo las inscripciones y ya los alumnos los tengo en el from con esto Yo estoy trayendo los datos que necesito vamos a probar a ver si funciona a ver y efectivamente miren Juan Pérez está en guitarra principiante en guitarra intermedio y inter medio Ah Mirad qué qué qué genio Juan María González está También en estos
tres Carlos López está en estos tres Ana Martínez está en estos dos Lucía Fernández en estos dos estos tres digo y Diego está en estos dos se entiende cómo hicimos y como el join acá nos facilitó la vida y unimos tres tablas de nuevo vamos a levantar la complejidad porque ahora vamos a empezar con las subconsultas que ustedes las aman las subconsultas el segundo la segunda consulta es esta acá a ver Ahí está Obtener el nombre y el apellido de los alumnos que están inscritos en más de un curso básicamente acá yo les voy a
decir deberíamos dividir en dos partes s una parte vamos a decir para mí parte uno voy a poner así parte uno es traer los alumnos no luego tenemos que contar la cantidad de cursos en la que está cada alumno y después tenemos que Filtrar los que estén en más de uno sea tenemos que hacer en la consulta estos tres pasos traer los alumnos contar la cantidad de cursos en la que está cada uno inscrito y filtrar a los que están en más de uno se traer solo los que se inscribieron en más de un curso
Por lo cual vamos a hacer una subconsulta y les voy a mostrar la siguiente manera vamos a hacer primero la parte más Fácil Select nombre y y voy a poner no voy a poner apodos porque no va a hacer falta from alumnos Okay ahora nosotros tenemos que ver que el ID del alumno esté dentro de la tabla inscripciones okay Y que si está más de una vez en la tabla de inscripciones sí en ese caso va a tener que aparecer o si No no Por lo cual vamos a hacer una subconsulta y vamos a poner
dónde la ID alumno in con esto hacemos la subconsulta y acá vamos a hacer la segunda consulta vamos a hacer Select ID alumno from inscripciones porque ahí vamos a contar en nuestra tabla intermedia y acá viene la complejidad porque acá lo que va a comparar es este we con este ID alumno que yo voy a tener acá porque lo que de resultado este c va a ser una ide alumno que yo voy a Comparar con este que tengo acá en mi consulta principal Y esta es mi subconsulta Por lo cual en esta subconsulta yo tengo
que hacer el filtro sí tengo que hacer este filtro los que tienen más de uno contar y a la vez traerlos que tienen más de uno para ello para ello yo puedo hacer un Group by ID alumno para agrupar a los alumnos por la ID para contemplar los duplicados o no y Qué puedo usar acá les pregunto a ustedes ustedes me Responden Qué puedo usar acá Además del count para contar los que tengan más de una inscripción a ver el habing muy bien Por qué habría que usar el having a ver gente acá Les explico
un detalle que vamos a ver Alo que no hice video Todavía en todo cod así que lo voy a hacer dentro de poquito hay una sentencia que se llama having having significa teniendo Por así decirlo que se puede usar en conjunto con cum average Max min etcétera con todos los Otros comandos que ya tenemos digamos predeterminados yo les dije que vamos a usar el count Okay que es para contar el hing los que nos permite es utilizar en conjunto con el Group by sí que ya ocupamos que se agrupe por ID alumno lo que nos
permite el hing dentro de esto es agregar una condición más para digamos especificar donde tenemos grupos de resultados especificar más condiciones Nosotros con el Group by lo que estamos haciendo es agrupar a las Inscripciones por el ID alumno es decir va a agarrar Okay hay tres inscripciones de este alumno yy tres inscripciones de este alumno tres inscripciones este alumno y las va a agrupar Sí en conjunto según la idea del alumno cuando encuentre va a decir Okay este alumno hay tres las agrupo acá de este alumno y de otras dos agrupo acá eso va a
ser el Group by el jaen lo que va a hacer va decir okay en esa agrupación dentro de esa agrupación hacer la siguiente Función y acá vamos a poner having count es decir habiendo contado o habiendo o haceme la cuenta por así decir dentro de ese grupo de lo que yo te estoy especificando ahora y ahí que le voy a especificar que la ID curso sea mayor a uno entonces entonces van a decir vicina para para Cómo que ID curso mayor a uno porque voy a hacer esto [Música] miren Okay si yo pongo ID curso
mayor a uno no tiene sentido porque me van a Buscar los cursos son mayores a uno pero si pong having count ID curso me va a contar todos los cursos la cantidad de cursos que son Sí en cada agrupamiento que tengo de alumnos sí entonces lo que va a hacer esto es Okay va a encontrar un alumno va a ver sus inscripciones tiene tres inscripciones las agrupa luego dentro luego de agruparlas va a decir okay Ahora voy a contar Cuántas ID curso hay dentro de esta agrupación va a contar Hay una dos tres hay más
de una sí la cuenta es mayor a uno es mayor a uno entonces ahí va a traerlo al in de acá de la subconsulta y se va a mostrar en el Select principal se entiende más o menos lo que estoy tratando de explicar es compleja est es una consulta heavy Por así decirlo de alguna manera es difícil Okay les hago la consulta y fíjense lo que me a devolver Juan Pérez está inscripto en más de uno María González también Carlos López también Ana Martínez también todos están inscriptos en más de un curso igual que ustedes
en todo con los cursos gratuitos tenemos la última que es Mostrar el nombre del curso y la cantidad de alumnos inscritos en cada curso este es bastante sencillo básicamente va a tener un Inner no más vamos a hacer así [Música] miren nos pide que mostremos primero el curso después la cantidad de alumnos Inscritos Entonces vamos a hacer esto vamos a poner c nombre vamos a poner acá cursos C para que nos quede el nombre y [Música] e Sí vamos a ponerlo así y vamos a poner acá count para contar dentro de una inscripción sí las
hay de alumno y vamos a tener ahí Okay qué pasa acá yo estoy diciendo Traeme todos los nombres de los cursos sí contando las ID Alumno Por qué contando las ID alumno porque cada curso tiene una inscripción asociada Y esa inscripción asociada que tiene cada curso tiene una serie de alumnos entonces lo que va a contar va a ser las ID alumn de las inscripciones detalle ahí eh una vuelta de tuerca Entonces ahora lo que vamos a hacer es el ler join vamos a unir a inscripciones y porque puse mayúscula acá minúscula Ahí está Con
ID curso [Música] Ahí está u luisina qu miércoles hiciste acá bien Un inscripciones concursos Ok y acá lo que estoy haciendo es traer el nombre del curso y traer o contar Mejor dicho las ID alumnos de cada curso fíjense que solo uní estas dos tablas inscripciones y cursos básicamente Y por último voy a Agrupar un grou by así practicamos grou by nombre si de los cursos entonces aper un curso la cantidad un curso la cantidad nos queda todo agrupo y bien Cheto bien le meto continuar y qué pasa acá dice que algo está mal en
count Por qué está algo mal en count por puede ser falta la coma muy bien muy bien Vamos a continuar pero me dice que está mal a inscripciones le falta la s muy bien saí muy bien Exacto inscripciones le falta la s Ahí está Entonces a partir de eso tenemos el count ahora sí tenemos inscripciones y ahora sí le damos a continuar y va a funcionar fíjense Lo bueno que está que nos dice que Ed itarra principiante tiene dos guitarra intermedio dos guitarra avanzado dos y nos hace el count [Música] espectacular muy importante el detalle
que dijeron de que siempre cuando hay un sel y un count y estoy teniendo entre Medio un elemento del Select Y no van el Select y el count juntos ahí sí o sí tiene que ir una coma en el medio muy muy bien buen detalle a tener en cuenta vamos a mir Cuáles son las tres consultas finales del nivel tres Okay de las consultas de nivel 3 tenemos listar los alumnos que no han abonado la inscripción o sea los que no garpar la inscripción esa es tranqui dentro de todo esa ya la hicimos hoy de
hecho si mal lo recuerdo hoy tempranito cuando Empezamos obtener los nombres de los cursos que tienen al menos un alumno mayor de 20 años inscrito Uf esa va estar complicada y listar el nombre y apellido de los alumnos junto con los nombres de los cursos en los que están inscritos pero solo para aquellos que se inscribieran estas dos son heavies listar los alumnos que no han abonado la inscripción bueno esta la voy a hacer de vuelta ya la hicimos hoy pero para los que llegaron más tarde Esta es la más Fácil sí podemos hacer Select
all from eh alumnos Where voy a hacerla lo más sencillo posible voy a ponerle acá un apodo y voy a poner eh A punto ID alumn igual a i punto ID ah alumno and voy a poner y punto Cómo se llamaba el campo que teníamos para Lason creo que era no acuerdo esto edes que tema por favor ig Podemos hacer as tranqui y debería andar a ver eh Para puse algo mal Qué puse mal ID alumno Ah no aclaré y que era qué boluda Ahí está y acá voy a poner eh A punto nombre a
punto Apellido voy a traer a los morosos que no pagaron a ver Ahí está y ahí tengo los morosos que no pagaron alguno de sus cursos vamos a hacer con un join también y que no varía demasiado nada Lo único que va a cambiar Es que lo haríamos Así voy a poner acá el C Que es igual ahí lo pongo el from va a ser alumnos Epa from alumnos A y acá lo único que difiere acá es que vamos a poner join o in join depende el sistema que estén usando inscripciones y on y acá
vamos a ponerle aid alumno igual I ID alumno y agamos el y punto abono INS igual a fse el que no pagó voy a borrar arriba fíjense que el resultado deía ser el mismo Exacto nos trae a todos los morosos nos trae a todos los morosos acá les dejo las dos opciones Sí Igual les voy a dejar en el txt también Sí vamos a esta que esta la veo complicada a ver obtener los nombres de los cursos que tienen al menos un alumno mayor de 20 años inscrito van rumbeando bien lo que dice dami es
correcto yo les voy a mostrar lo que yo haría en este caso Sí les voy a mostrar algo nuevo que no les mostré todavía les voy a mostrar el famoso llamado disting Qué significa disting Distinto Okay qué hacemos con el disting que si por ejemplo e se llega a repetir en un mismo curso o un mismo valor que nosotros traemos se repite más de una vez que me traiga solo valores distintos es decir si yo en una consulta va aparecer tres o cuatro veces el curso de guitarra avanzado por ejemplo porque tiene cuatro alumnos mayores
de 20 años yo con el dis lo que no importa si ya tiene uno ya está con esto dig dis listo distinge con que haya Uno ya está los otros que son repetidos no me interesa básicamente para eso ocupo el dis en este caso voy decir lo siguiente la tabla que voy a traer va a ser cursos vamos y lo que yo voy a hacer acá es traerme los nombres de los cursos OK Porque básicamente Eso es lo que me pide los nombres de los cursos que tien al menos un número mayor un alumno mayor
a 20 ahora que hacer join de inscripción concurso y de alumno concurso tengo que Hacer de atrás para adelante acuérdense que este era nuestro diagrama no Hoy hicimos de alumno inscripciones y de inscripciones a cursos ahora tengo que ir de atrás para adelante yo ahora estoy parada en cursos y tengo que unir con inscripciones y después unir inscripciones con alumnos Para ver cuáles son los alumnos que tienen edad mayor a 20 Okay pero vamos a tener un problema porque yo cuando planteé el ejercicio lo Planteé con el campo edad pero ahora vamos a tener el
campo fecha de nacimiento Ah ver les voy a mostrar cómo lo vamos a hacer eso okay bien a partir de eso vamos a tener acá si el primer join que va a ser entonces de inscripciones concursos como dijimos Ahí está perfecto y ahora el segundo join que va a ser de alumnos y vamos a asociar la inscripción ID alumno que sea igual a alumno ID alumno bien ahora viene la parte jodida ya estamos parados en alumnos o sea estamos en cursos unimos con inscripciones ahora unimos con alumnos y ahora tenemos fecha de nacimiento yo ya
sé cómo calcularlo si tuviéramos edad acá sería Where edad eh a edad a punto edad mayor Epa mayor a 20 y ya estaríamos Pero como ahora tenemos fecha nacimiento cómo hacemos para calcular ese 20 muy bien Walter Exacto la fecha de hoy menos la fecha de nacimiento perfecto ahora ahora cómo hago para obtener la fecha actual la fecha de hoy en sql qué pasa porque nosotros tenemos dos en sql tenemos cdate sí Y tenemos Now hay algo que tenemos dentro de My sql que se llama DIF Ok date no di de fecha es de difference
difference vendr ser de diferencia Es decir de resta nosotros Podemos ocupar el c date sin problema sin el Select acá y lo que tiene es que tiene podemos utilizar digamos dos parámetros ser la fecha de hoy current date y luego acá tenemos fecha de nacimiento Okay entonces acá vamos a tener la resta s ahora la resta que vamos a tener acá de estos dos si fíjense voy a voy a sacar todo esto del medio y voy a poner así s a ver si me deja verlo Ah no me vo a Dejar porque no importa qué
pasa esto me va a dar una resta entre fechas yo voy a restar estas Pero qué pasa Yo esto no puedo poner directamente mayor a 20 por qué qué va a pasar con esta resta en este caso lo que se suele hacer es la diferencia que haya entre las dos fechas dividido 365 Ese es el cálculo que se suele hacer en My seele Okay Alguien sabe por qué se hace ese digamos dividido esto acá Porque se hace dividido 365 está en días Muy bien Tena exactamente la diferencia entre dos fechas Cuando hacemos una resta entre
dos fechas el resultado que nos da el Day DIF es en días Por lo cual para poder obtener en años tenemos que dividir por 365 muy bien tenía ya muy muy bien ahí lo puso también Mahal lo puso Mauro exactamente cuando nosos hacemos una resta entre dos fechas el resultado es la cantidad de días que pasaron entre Esas dos fechas Por lo cual se pone dividido 365 lo que suelen hacer algunos por ejemplo para tener en cuenta los también los daños bisiestos es dividir por 365,25 con esto sí deberíamos traer sin problema Pero fíjense que
acá me dice que inscripciones escribí mal de vuelta me comí la s ahí está vamos vuelta ahí me trae Cuáles son los cursos que tiene al menos una persona mayor a 20 años las dos de guitarra los tres de guitarra Piano también violín también todos tienen prácticamente vamos a poner 35 o 30 as ahí Quién puso 30 Walter dio vamos a cambiar por 30 Dale vamos a cambiar por 30 y ahí sí vamos a ver si si filtra o no ahí va ahí está ahí sí ven ahí corroboramos que funciona el filtro funciona el filtro
pas le pusimos un 2001 y 99 el resto pusimos todos viejardos como nosotros pusimos todos viejardos después Del resto perfecto fíjense como acá ya tenemos join ya estamos utilizando funciones que yo la verdad en el canal nunca les expliqué por eso les dije que ya el nivel 3 era heavy Okay la última Acá tengo la última estaba buscando en mi machete Dónde estaba en el PDF ya estoy remada Okay Es la anterior esta Va a estar heavy también pero no tanto creo yo a ver listar el nombre y apellido de los alumnos juntos Con los
nombres de los cursos en los que están inscritos pero solo aquellos que se inscribieron en 2024 creo acá tenemos un problema porque todos se inscribieron en 2024 no no tenemos ncri 2023 pero bueno no importa Después última le agregamos uno para la consulta listar nombre y apellido de los alumnos junto con los nombres de los cursos o sea nuestro Select va a tener a nombre y apellido de alumno y nombre de curso en los que están Inscritos pero solo para aquellos que se inscriban en 2024 Okay el filtro entonces va a ser por el año
estoy pensando Okay ya se me ocurri hacerlo bien Vamos a arrancar vamos a tener a nombre a apellido por alumno Ahí está y sabemos que tambén vamos a tener que traer el nombre de los cursos entonces poner cto nombre ya vamos a declarar curso en El join si como estamos arrancando desde alumnos tenemos que unir alumno con inscripciones se acuerdan estamos parados en alumnos tenemos que hacer el join de alumnos con inscripciones y después inscripciones con cursos de vuelta para traer el nombre del curso y basándonos en la fecha de inscripción o sea vamos a
tener que ir venir ir venir Así que vamos a agregar acá el join inscripciones on con alumnos Ahí está y luego vamos a hacer Un join cursos con inscripciones eh curso c acá me comin No sí ID y acá me comí la i También acá ahí ahí está si le ponemos a podo a todo perfecto y ahora tenemos los dos joins a ver e ya tengo estoy acá Vine acá y ahora tengo que hacer el we Okay ya uní todo con esto ya con esta unión ya puedo traer el nombre del curso ya puedo traer
Los nombre de los alumnos Pero me falta el [Música] we yo tengo en la inscripción fecha inscripción pero yo no puedo poner 224 directamente hay dos formas de hacerlo acá la más más fácil gente es poner esto Esta es la más fácil que la fecha de inscripción sea mayor o igual a primero de enero 2024 Esta es la más fácil pero la complejidad está si Quisiéramos de sacar solo el año y no tener en cuenta la fecha completa en ese caso esto les muestro para que ustedes sepan más que nada tenemos la opción de usar
year y podemos con year solo obtener el año de una fecha es algo que les había mostrado todavía Okay entonces acá podemos hacer esto o podemos hacer directamente que sea mayor o igual al primero de enero de 2024 y con esto le Damos a continuar y qué pasa creo que puse mal algo a ver se ID curso no cursos Ahí está ID curso Vamos a continuar y ahí está nos tira todos los que se inscribieron en 2024 podría ser para corroborar que sea al revés de que sea eh mayor igual Pues igual a 2024 puedo
poner menor a 2024 entonces vemos a alguien si hay alguien que se inscribió en 2023 Sí vamos a ejecutar acá y no hay nadie porque no Hay nadie que se inscribió en 2023 o sea ahí corroboramos de que todos se inscribieron en 2024 ahí a lo que dice reis de web que es una subconsulta entiendo que sería menos eficiente correcto las subconsultas son eh acuérdense que consultas ad dentro de consultas Por lo cual a nivel recursos se consume mucho más cuando ocupamos subconsultas o sea las subconsultas hay que usarlas cuando ya no queda otra Como
en el caso del ejemplo que hicimos hoy Sí que no quedaba otra bueno en esos casos ocupan subconsultas pero si las podemos evitar las subconsultas es lo mejor y con esto gente Terminamos el día de pala qué les pareció cuéntenme los que ven después en YouTube cuéntenme en los comentarios les gustó qué les pareció cuéntenme [Música]