Sql el lenguaje más utilizado de todo el mundo para manejar bases de datos eso es sql uno de los lenguajes de programación más poderosos que existen Y sí sql es un lenguaje de programación y también estoy yo Lucas dalto programador y creador de contenido educativo que está acá para darte el mejor curso de sql que vas a ver en toda tu vida Pero un poco flaco ya tenía que aparecer Qué pasa Qué pasa Por qué me interrumpís en medio de la Introducción del curso otra vez vas a arrancar así nomás con el curso y Sí
obvio es lo que estoy haciendo No sé qué esperas que haga y que no es una introducción para que más o menos sepamos espere 42 días para esto vos sabés que la gente Solamente entra para aprender sql No claro y el minuto van a ver el mejor curso de sql pero no estoy hablando de eso ok Está bien Y entonces de qué hablas Job por Dios pero tenés que motivarlos un poquito avivamelos Darles un poco de motivación contá un poquito porque haces este curso así me los mantenés ahí más pilas Dale bastante necesario el comentario
igual pero bueno esta vez lo voy a intentar en este canal ya hemos hecho varios cursos como el de html El de css El de javas de python y en algún punto todos estos cursos han sido los mejor de la plataforma es decir buscabas html y saltaba buscaba css y saltaba buscabas javascript y saltaba buscabas python y saltaba de hecho Pueden corroborarlo vayan y busquenlo y van a ver que así es esta no va a ser la excepción y de hecho es mucha casualidad ya que sql es el próximo lenguaje que nosotros deberíamos ver para
continuar con la curva de aprendizaje del Canal Pero también es uno de los más demandados últimamente es decir sql está teniendo un auge espectacular es un lenguaje que tiene más de 50 años y aún así está en uno de sus mejores momentos sql básicamente es muy demandado y cada Vez está con más crecimiento y con más demanda ya que es uno de los lenguajes requisitos básicamente para todo lo que es el mundo de la programación y la Inteligencia artificial que como ya sabemos está despegando a escalas agigantadas que por cierto también vamos a hacer un
curso de Inteligencia artificial en este canal Así que andaba activando la campanita para cuando salga Qué significa esto bien que no solamente hago el curso porque me lo piden ya que A pesar de no hacer el curso que ustedes más me piden es el curso que ustedes más buscan Así que no busquen más acá está bastante buena la intro y aburrida pero la verdad que bastante bien yo particularmente apruebo ahora ya puedo comenzar me vas a dejar ahora la verdad que sí sí ya podrías comenzar si querés Bueno gracias arranca con el concepto sí iba
a arrancar con eso y bueno qué sé yo te lo digo por las dudas si ya está ya entendí ya está te espero Dale sql Significa no bueno así no se puede yo me retiro así sí sí retírate por favor ya Bueno me retiro y encima voy a comprarme esa misma remera que tenés vos Dale dale buenísima así así ya puedo comenzar una vez por todas con el curso de alto no está buenísima andate de una vez yo me voy calmate a quién te comiste qué denso este tipo bueno bueno gente Ahora sí les doy
la bienvenida al mejor curso de sql de todo YouTube y no es que Necesariamente lo diga yo sino que es un curso que estaba al lado por empresas que utilizan sql en sus sistemas de hecho muchas de estas empresas son sponsors de canal Así que nada Muchísimas gracias a estas empresas por tomarse el tiempito de darle una chequeada Ahora sí basta de hablar arranquemos con este espectacular curso de sql bien para comenzar este curso como todo curso tiene diferentes apartados el Primer apartado es un apartado teórico que básicamente vamos a entenderlo fundamentos vamos a conocer
sql para que entendamos Con qué estamos trabajando porque no podemos escribir código si no sabemos qué es lo que estamos escribiendo además si realmente queremos utilizarlo para trabajar si lo queremos utilizar Porque queremos adquirirlo como skin laboral es completamente necesario la parte teórica si realmente quieres adquirir el skill de sql esto viene en Pack completo en el apartado teórico vamos a ver diferentes conceptos vamos a entender bien que son los campos los registros digamos las entidades los atributos vamos a entender conceptos con los que nos vamos a topar cuando querramos realizar cualquier cosa en sql
Entonces es importante que los que los entendamos después viene el apartado del código que es donde nos podemos escribir código sql a cuatro manos la mayor parte del curso va a ser código obviamente una Vez que pasemos el apartado teórico ahí comienza el apartado de código que repito es la mayor parte del curso y además entre medio va a haber ejercicios es decir vamos a tener ejercicios para ir llevando a la práctica todo ya que esto es básicamente para que podamos memorizar mejor ya que hay gente que confunde mucho el concepto de memorizar y recordar
memorizar es guardar información en nuestro cerebro recordar es acceder a la información que Guardamos en nuestro cerebro ahora si memorizamos bien es más fácil recordar hay muchas técnicas para memorizar pero si en medio del curso les pongo ejercicios para que digamos lleven a la práctica todo lo que vienen aprendiendo están memorizando lo mejor Entonces cuando después tengan que recordar eso que aprendieron lo van a recordar mucho más sencillo de una forma mucho más sencilla es decir sin tanto esfuerzo porque ya lo tienen como en la mente no Por eso los ejercicios van a estar ahí
como mentiditos entre los diferentes apartados a lo largo de todo el curso Ahora sí arranquemos desde cero con sql vamos bien Qué es sql todo muy lindo Ya vimos bastantes minutos del curso pero que joraca es sql bien sql son las siglas de estructuras sí no tengo mejor inglés del mundo pero en español significa lenguaje de consultas estructuradas nuestro nombre lo dice ok es básicamente el Lenguaje y nos permite trabajar con pases de datos relacionales Y sí sql es un lenguaje de programación hay gente que no sabe esto que se piensa que sql no porque
no lenguaje de programación no ese cuál es un lenguaje de programación Sí el nombre significa lenguaje de consultas estructuradas Pero sql es un lenguaje de programación de hecho es un lenguaje estandarizado no y muy utilizado en el mundo de hecho se repite el más utilizado de todo el mundo Para manejar bases de datos vuelvo a lo que les dije antes de hecho es un lenguaje estandarizado es estandarizado Qué significa que sea estandarizado significa básicamente que lo aprendemos una sola vez y después lo podemos utilizar para todo lo demás porque al ser un estándar todos los
gestores de bases de datos tienen que manejar este estándar Cuál es el estándar y el que vamos a aprender en este vídeo entonces una vez que aprendas Sql vas a poder entender todos los demás gestores vas a ser pobre my Secret la de ahora que todo toda la mayoría de los gestores de bases de datos se manejan 100% por el estándar entonces ese culo lo aprende Solamente una vez y puedes manejar cualquier gestor de base de datos con sql server con my Secret con pobres sql con María de B con Oracle después obviamente cada gestor
tiene sus cositas sus tonterías Que es como bueno a ver nosotros manejamos sql acá pero Además le agregamos esta cosita tenemos todo sql Pero además agregamos esta función Aparte que es buena o sea cada gestor tiene sus propias cosas internas muy chiquititas pero ese cuero lo aprendemos una sola vez y nos sirve para todos O sea no es como que tenés que aprender pobre y después tenés que aprender no aprendes sql y es medianamente lo mismo para todas las bases de datos de hecho esto es buenísimo porque es un lenguaje que Digamos está hace más
de 50 años y si bien si fue recibiendo mejoras es lo mismo o sea no es como que no porque me vio un curso sql ya pasaron tres años y me tengo que actualizar no si vos estás viendo este curso dentro de tres años dentro de cuatro años no te vas a tener que lizar porque ese Cuál es el mismo Ok repito es el mismo de hecho es el lenguaje de programación que tiene más de 50 años y aún así se sigue usando casi Exactamente igual que hace 50 años Cosa que es una locura antes
la información la almacenábamos en algo llamado bases de datos basadas en archivos donde agarramos un texto plano y separamos los valores que queríamos almacenar con comas con signos y todas técnicas que nos hacía quizás súper fácil guardar la información pero que sea muy difícil después obtener esos datos usarlos de forma ordenada sencilla y sin tanto lío por otro lado tenemos a Edgar code que fue el inventor del Álgebra relacional que básicamente sirve para utilizar conjuntos Y trabajarlos entonces este muchacho dijo Y por qué no creo una base de datos que esté basada en álgebra relacional
y ahí aparecieron las bases de datos relacionales y aparece sql que es el lenguaje utilizado para trabajar con ellas sql internamente es meramente álgebrarelacional antes guardamos la información de cualquier forma estaba era muy fácil guardarla pero era muy difícil acceder a Esa información entonces este tipo dijo Bueno la verdad es que si tenemos que guardarla de forma muy fácil pero es complicada accederla No nos sirve Entonces qué hacemos bueno creemos un sistema específico para que podamos trabajar con estos conjuntos de datos Porque eso es sql por eso internamente sql funciona con álgebracional no es lo
mismo álgebracional que relaciones de tablas y demás son cosas diferentes no lo confundan Pero sí va de la mano Esto No sirve a la hora de escribir código y casi nunca en realidad A menos que queramos hacer cosas muy específicas de bajo nivel pero está bueno que lo sepamos no que sepamos que sql está compuesto por álgebra relacionada perdón relacional y que básicamente la solución que nos trae es poder guardar bien la información poder manipular bien la información y cierta tantas cosas que es lo que vamos a ver durante el curso sí todo muy lindo
alto pero ya está ya sé Para qué sirve Pero qué puedo hacer con eso porque si Para qué sirve me desisto y no me decís qué puedo hacer con sql no me sirve Yo quiero saber qué es lo que voy a poder hacer cuando termine el curso es decir termina el curso y más o menos qué es lo que la verdad que tiene muchísimos usos muchísimos no te prometo que cuando termines el curso vas a poder hacer todo eso por un tema de que hay conceptos más que son matemáticos o complejos o de Inteligencia artificial
Pero sql lo utilizamos en todo o sea lo utilizamos para hacer Inteligencia artificial para hacer sistemas de gestión si quieres hacer un sistema de gestión no usa solamente sql usas sql y algún lenguaje de programación por ejemplo Entonces tienes que aprender sql y un lenguaje de programación pero eso es obvio Tenemos un montón de cursos de programación como el de python que fue el último que subimos Así que si quieren vayan a verlo de hecho es muy probable Que al final de este curso hagamos un ejercicio mezclando python con sql para que bueno como ejercicio
final no como Plus extra que les voy a regalar pero En definitiva con sql podemos hacer lo siguiente podemos crear y administrar bases de datos es decir sql nos permite crear modificar eliminar y hacer diferentes cosas con bases de datos tablas y otros objetos que tienen la base de datos después podemos consultar datos es decir sql permite realizar Consultas a una base de datos para obtener información específica como encontrar clientes con una edad determinada o Buscar productos con específico también podemos modificar los datos o sea ese cuero nos permite actualizar los datos insertarlos Y también
eliminarlos No todo lo que tenga que ver con datos en una base de datos también Podemos agregar restricciones y reglas de integridad esto es como agregar condiciones para asegurar que Los datos cumplan con ciertos criterios por ejemplo una restricción puede establecer que un campo en una tabla no puede estar vacío o que debe contener un valor único esta restricciones lo que hacen es asegurar que los datos en una tabla sean precisos y consistentes nos permite también generar informes realizar análisis de datos o sea por ejemplo para hacer análisis científico de datos no esto lo utilizan
mucho los científicos de datos Y analistas para Realizar análisis y visualizaciones de datos complejos además se pueden administrar usuarios y permisos o sea esto es para garantizar que solamente las personas autorizadas puedan acceder a la información también se puede analizar transacciones se pueden analizar copias de seguridad y restaurar datos se puede integrar con otras aplicaciones se puede usar para limpieza de datos para normalización de datos para organización de cálculos avanzados Para combinación de datos múltiples Fuentes para optimización de rendimiento y para muchas cosas más Pero normalmente en un programa común para hablarle a una base
de datos y que registre nuestros datos los modifique los elimine y sobre todo también para obtenerlos no para después poder hacer cosas Si registramos un usuario después vamos a poder querer acceder a su nombre a su usuario y a otros datos que están registrados bueno todo esto con sql Sí es así la verdad De Hecho no puedes avanzar en el mundo de la programación en informática sin saber secuela O sea no podés tenés que aprender sql y lo tenéis que aprender Ahora sql tiene conceptos como por ejemplo variable funciones triggers índices entidades atributos Y muchísimas
más que bueno los vamos a ver en este curso obviamente Así que Esto va a ser así primer te voy a explicar los fundamentos fundamentos principalmente de bases de datos después cuando ya te Haya explicado los fundamentos de bases de datos vamos a ir directamente al código pero con conceptos es concepto código concepto código Así vamos llevando a la práctica y después ya ahí se viene un par de ejercicios Ok quiero que lo veamos bien porque a veces estuve viendo tantos cursos de sql y en todos los cursos es como que uno no termina de
entender no por donde arrancar por Cómo comenzar como que son intermedio avanzados no hay nada desde cero por eso Quiero que arranquemos bien desde cero Ok que arranquen con nada entendiendo las bases y salgan Sabiendo todo mi objetivo es que estén como orientados no como que no necesiten saber o ver otros cursos para llegar a este Quiero que desde cero lo puedan entender y comprender Así que para eso tenemos que repito ver los fundamentos Así que vamos con los fundamentos de bases de datos Bueno cuando trabajamos con bases de datos hay diferentes objetos con los
que Básicamente nos vamos a topar OK Por eso ahora te voy a enseñar justamente Cuáles son esos objetos con los que nos vamos a encontrar cuando querramos hacer cosas con sql vamos a ir desde los más abstracto hasta lo más tangible es decir vamos a ir desde lo que es más teórico hasta lo más práctico y hasta lo que es más visual más código para empezar vamos con el concepto principal de todo que es una entidad si nunca escuchaste hablar de lo que es una entidad prepárate Porque Ok es como un objeto Okay es como
un objeto una entidad puede hacer referencia a cualquier cosa o concepto que tengamos en la vida real si saben de qué hablo normalmente podemos representarlas con tablas Ok una entidad Es una representación de algo me explico o sea así como si nosotros dibujáramos una casa el dibujo no es la casa simplemente Es una representación de la casa Esto es lo mismo una entidad no es la entidad yo digo entidad persona una Entidad personal no es la persona es una representación de la persona lo que hacemos con las entidades es almacenar información sobre las entidades envases
de datos por ejemplo una entidad puede ser persona y almacenamos toda la información de persona en las bases de datos por ejemplo en una base de datos de una tienda en línea las entidades pueden ser por ejemplo clientes productos órdenes de compra proveedores etcétera y la nomenclatura que se usa Para representar las entidades se llaman notación de Chen y básicamente es una forma de poder representar entidades y sus relaciones Bueno ahora qué hora qué es esto simple supongamos que yo tengo la entidad casa esto en este en esta nomenclatura cómo lo podemos Representar en esta
anotación bueno básicamente es con un cuadrado encerramos la palabra en un cuadrado simple esto significa que es una entidad Ok cuando ponemos una palabra y la encerramos en un cuadrado Estamos diciendo esto es una entidad a ver si estamos fuera de la notación de Chen es simplemente un dibujo de una palabra encerrado en un cuadrado medio rancio no pero dentro de la notación de Chen una palabra encerrada en un cuadrado significa que es una entidad Por ejemplo en una base de datos de una tienda en línea las entidades pueden ser por ejemplo clientes proveedores órdenes
de compra etcétera es decir la base de datos es sobre una tienda en línea pero Las entidades son bien Ahora ya está tenemos a nuestra casa encerrada en un cuadrado OK Pero si yo me pregunto esto no ahora que en conclusión podemos llegar qué es lo que una entidad hace que una entidad sea una entidad y sus atributos es decir una casa no es una casa Si no tuviera ambientes ubicación tamaño y otras tantas propiedades bien Ahora sí tenemos la entidad casa tenemos los diferentes atributos tamaño dirección ambiente su ubicación precio Propietario fecha de construcción
antigüedad ventanas y puertas los atributos los representamos con un óvalo pero también tenemos algo que son atributos simples y atributos compuestos Esta es una forma de dividir los atributos tenemos por un lado los simples y por otro lado los compuestos los simples son atributos que simplemente tienen datos únicos No están compuestos por nada más por ejemplo el precio de una casa puede ser 100 mil Dólares ya está no es más que eso pero un atributo compuesto puede ser el ambiente Por qué Porque los ambientes a su vez se componen de otros atributos más pequeños un
a su vez tiene un tamaño y un tipo de ambiente porque un ambiente puede ser un comedor una habitación no deja de ser un ambiente puede ser un living y también tiene un tamaño por ejemplo 50 metros cuadrados o unos 40 metros cuadrados la forma de representar los atributos compuestos Es simplemente Sacando una limita dando a entender que están compuestos algo así como si fuera una especie de Rama no árbol genealógico algo parecido pero es eso no dejan de ser atributos Ok son simplemente atributos atributos comunes ahora después tenemos los atributos multivalor es decir tienen
más de un valor Cuáles son los atributos multivalor de una casa fácil los ambientes porque porque hay más de uno también las ventanas y también las puertas porque hay más de Una puerta y además de una ventana cómo representamos los atributos multivalor simple Se les hace un doble círculo un doble óvalo así como los atributos comunes los representamos con simplemente un óvalo los atributos multivalor los representamos con dos óvalos una línea otra línea un círculo otro círculo después tenemos los atributos derivados los atributos derivados son atributos que básicamente los podríamos obtener con cualquier otra Información
en este caso son antigüedad y ubicación por qué y porque la antigüedad de una casa la podemos tener con la fecha de construcción es decir si sabemos que se construyó el 1 de enero del 2010 y estábamos en el 1 de enero del 2030 acaban de pasar 20 años entonces es un atributo derivado porque lo podemos obtener a partir de otro atributo y la ubicación lo mismo la ubicación la podemos obtener a partir de la dirección si bien obviamente es Entendible que las ubicaciones tienen dirección Barrio O localidad o estado y demás O sea no
solamente es la dirección esto simplemente un ejemplo para que lo puedan entender mejor los atributos derivados los identificamos con un borde punteado o sea básicamente si saben css es literalmente como un Border es lo mismo es como es un óvalo con Border es un bordeado punteado bien hasta acá todo bien Okay pero después tenemos algo llamado clave y en inglés key no se lo Digo así pues es clave aquí Pero hay gente que no entiende que es que y kei y esto básicamente es una forma única de identificar algo las casas por ejemplo se identifican
con el ID de vivienda ya cuando las registramos en el Registro de Propiedad tenemos una ID que hace que la casa sea única eso puede ser por ejemplo un atributo las casas tienen todas una y de vivienda es una algo que las identifica y las hace única porque sí las casas pueden tener qué sé yo mismo Color mismo tamaño misma cantidad de ambientes misma cantidad de puertas mismas ventanas puede tener mismo todo pero son diferentes y se separan por el aire de vivienda no importa Por más que tengan todo igual eso es diferente el aire
de vivienda si tenemos por ejemplo una entidad personas Ok tenemos por ejemplo dos hermanos gemelos son exactamente iguales Cuál es la diferencia el documento de identidad así diferenciamos a las personas pueden ser Iguales pero si tienen un documento de identidad diferentes son personas diferentes bueno esto sería el key o la clave es una forma de hacer que algo se vuelva único poder identificarlas y que no haya otro que sea igual Uy se movió que se me relaje porque los cacheteo al micrófono básicamente es un atributo que le agregamos a una entidad para identificar que sea
único e irrepetible pero como les dije no dejan de ser atributos Ok no Dejan decir atributos Así que las tenemos que encerrar también en un óvalo por ser un key o una clave la forma de representarlas en la anotación de chem es con un subrayado y así como esto tenemos muchas más formas de representar no diferentes conceptos en las bases de datos con la notación de Chen base digamos relaciones y demás incluso también las podemos representar ya que de hecho la notación de 80 también tiene conceptos como por ejemplo relaciones y Otras cosas más Pero
vamos a ir viéndolas con el curso porque para arrancar no es necesario o sea eso que les podría explicar ahora para escribir código no es necesario así que por ahora no lo vamos a ver OK Pero para verificar que está todo bien y que ustedes entendieron todo vamos a hacer una cosa quiero que vayan ahora mismo a buscar un lápiz y un papel o si tienen están desde una computadora que abran Paint o lo que quieran y Bueno hay que ser extraño para Mirar un curso sql desde el celular pero si estás viendo los desde
el celular agarra WhatsApp saca una foto y anda la parte para editar la foto para que puedas pintar Okay algo para pintar y vas a poner un cronómetro de 5 minutos OK Te voy a dar un ejercicio para que puedas aliviar dos ejercicios pero vamos con el primero el primer ejercicio consiste en pensar una entidad que tenga cinco atributos uno que sea multivalor y otro que sea un identificador un key los Otros tres pueden ser los que quieras y los representamos con la anotación de Chen Ok para arrancar vamos a hacer eso así que le
doy 5 minutos pausen el vídeo y continúenlo una vez que lo tengan listo Dale y va Bueno listo ya está fue bastante rápido la verdad que para mí duró 2 segundos Espero que para ustedes un poquito más yo también hice lo mismo es decir así como ustedes lo hicieron Yo también lo hice para que lo hagamos todos juntos Bueno lo que yo pensé fue Lo siguiente la entidad que elegí fue persona los atributos son altura edad nombre hobbies y documento de identidad hobbies es un atributo multivalor y el documento de identidad en este caso es
el dni es el key con eso básicamente acabamos de representar con la anotación de Chen a la entidad persona con sus diferentes atributos y lo logramos hacer bien si no lo hiciste bien nada repasarlo e intenté entenderlo pero creo que hasta ahora Estamos bastante light y Bastante fácil no por ahora bueno acá tenemos un dibujito que hay muchas palabras ok muchas palabras y una entidad la entidad es empleado y después Tenemos un montón de atributos lo que tenemos que hacer es encerrarlos en la forma correspondiente según la notación de Chen la idea de este ejercicio
es ver si entendimos lo anterior bien arrancamos de arriba para arrancar el ID empleado fácil lo encerramos porque es un key es un identificador de empleado Nombre apellido fecha de nacimiento edad género estado civil ciudad estado código postal número de teléfono mail y dirección las encerramos en atributos comunes simplemente son atributos pero acá hay algo interesante información de contacto en realidad es un atributo compuesto porque información de contacto contiene al número de teléfono y al mail es decir sería una tontería crear diferentes atributos para algo que puede representarse con uno solo no Información de contacto
información de contacto abarca todo abarca número de teléfono mail y dirección porque lo podemos contactar yendo a la casa por mail o por número de teléfono hasta ahí venimos bien después tenemos habilidades habilidades podemos decir que es un atributo multicolor porque tiene más de una después tenemos la edad Ok y le da lo mismo es un atributo derivado porque porque con la fecha de nacimiento ya podemos saber la edad entonces es un Atributo derivado bueno En definitiva nos quedó así pero este bastante loco No porque si queremos incluso podemos decir que la fecha de nacimiento
por ejemplo también puede ser un atributo compuesto ya que podría tener un día un mes y un año o sea todo es bastante subjetivo si nos ponemos a pensar Pero lo importante es que esto tenga un sentido no Eso es lo importante poder reducir la mayor cantidad de información posible en los campos correctos es decir en vez de Tener tres Campos para día de nacimiento mes de nacimiento y año de nacimiento lo resumimos en fecha de nacimiento Lo importante es ser concisos precisos y no ser bastante redundantes o almacenar datos que no son necesarios No
ya la fecha de nacimiento es suficiente entonces si bien podríamos hacerlo no es necesario decir esto es Interesante como ya se lo expliqué por qué más que nada porque podemos jugar con esto decir Bueno entonces para Porque si yo me Pongo en la fecha de nacimiento tengo otros tres atributos que son tía año pero no lo importante es ser conciso ser simples y con el tiempo y cuando lo vayan haciendo le van a agarrar practicar van a decir Ah Pero para qué voy a poner una fecha de nacimiento y una edad si puedo poner una
de las dos y con la otra bueno Es depende lo que quieran hay diferentes metodologías diferentes necesidades de los diferentes proyectos Pero lo importante es que Sepan para cruzar estas herramientas y que no hace falta que pongan tres Campos que uno es Día de nacimiento año de nacimiento y mes de nacimiento sino que pueden poner un solo día fecha de nacimiento lo mismo con información de contacto la información de contacto es por ejemplo bastante como poco específico el lugar de información de contacto pueden poner por ejemplo número mail y dirección es Interesante como podemos jugar
un poquito con todo esto Que tenemos a nuestra disposición pero con el tiempo y mientras vayamos haciendo las cosas nos vamos a dar una idea Lo importante es que entiendan Cómo usar esta notación y cuando veamos un diagrama de esto si llegamos a la O sea qué es esto podamos entenderlo que cuando estemos trabajando para una empresa o queramos hacer proyectos y armamos el nuestro propio podamos verlo digamos Ah ok Ahora entiendo Ok esto tiene que estar acá Ah esto es una tabla Ah esto es un atributo esto y eso es lo ideal así como
un programador sabe leer código un desarrollador web sale el código html y css un programador de python sabe leer código python es importante que ustedes sepan leer Por más que no sea código sql que entiendan esto a lo que nos estamos refiriendo cuando hablamos de una anotación que lo vemos hicimos a entiendo esto y ahora sí cómo llevarlo a código ustedes no saben cómo llevarlo código Así que vamos a ver Ahora cómo llevarlo a código esta parte es sin duda mi preferida Porque arrancamos con el código y esto es lo que a mí me encanta
Sí lo sé podría explicar lo que es una entidad débil una clave débil Hay un montón de otros conceptos que tenemos y que podríamos aprender Pero para qué explicar todo eso Si normalmente ahora no me voy a poner tan complejo como para hacer un curso sql en el que tengamos que hacer proyectos gigantescos y que tengamos que Usar ciertas cosas eso se van a dar cuenta ustedes con la práctica y es cuestión de agarrar o sea Probar con chat gpt digamos y decirle Che me decís De qué forma puedo hacer un es sencillo o sea
hoy en día ya no tenemos que andar recordando todo y que esté nuestro cerebro cuando tengamos que hacer algo y lo podamos entender vamos a encontrar y vamos a saber la forma de buscarlo OK Por eso las primeras si la quieren la pueden comprar en tienda de alto Ok que Les dejo el Instagram o sea están bastante buenas Así que vayan en instagram compren las y también Síganme bien en instagram soy alto Así que nada es interesante si me quieren hacer cualquier pregunta cualquier duda y como reconocimiento de Instagram ya estamos verificados en instagram tenemos
el tilde ahora bueno medio que todo el mundo lo puede tener no pero bueno nada Yo lo tuve antes que antes que antes que se venda Así que si basta de parloteo Vamos con el código directamente que esta parte me emociona y yo voy a hacer lo posible para explicarles lo que tienen que ir aprendiendo en el mejor orden posible y para que sea el curso lo más llevadero y que puedan entrar sin necesidad de saber nada y que puedan salir Sabiendo todo Así que ahora sí de una vez por todas arranquemos con el código
en este curso hermoso que me encanta me encanta vamos con el famoso Select Me pone súper contento que ya estemos en el apartado de código es decir ahora ya vamos a comenzar a escribir código Pero antes de escribir código tenemos que instalar algo llamado gestor de bases de datos qué es lo que nos va a permitir movernos y realizar ciertas operaciones de una forma más sencilla nos va a dar una una especie de interfaz gráfica para que podamos operar y que no sea más sencillo todo los gestores de bases de datos vienen digamos con la
base de Datos incluida para que podamos guardar La información entonces En definitiva no podemos escribir código de sql si no tenemos un lugar donde guardar información donde operar la información y con qué información trabajar porque como ya sabemos ese cuál es su lenguaje para interactuar con una base de datos pero con cuál es decir en este caso cuál vamos a utilizar bien a ver una base de datos es digamos un conjunto de información organizada y estructurada Que podamos manipular y digamos interactuar de una forma eficaz eficiente En otras palabras una base de datos es algo
que básicamente tiene un sentido o que guarda información a la que podemos darle sentido o conectar esas cosas entre sí es decir si por ejemplo hacemos una base de datos de una persona lo que hacemos Ahí estamos guardando los datos de una persona el nombre el apellido la edad a su vez podemos guardar Por ejemplo que yo las Citas al médico que tuvo esa persona Entonces vamos a aprender a relacionarlas y son cosas que podemos conectar entre sí porque estamos guardando los datos de una persona a ver originalmente podríamos guardar simplemente los datos en nuestra
memoria y ya está los tenemos acá en nuestra memoria pero básicamente eso digamos ya lleva miles de miles de años y desde delante de la prehistoria que se inventó la escritura que fue la forma en la que Dijimos Mira no podemos guardar todo en la memoria y metemos un método Okay inventamos la escritura y esa fue la primer forma que tuvo la humanidad de guardar información de una forma en la que no sea mental es decir no guardamos la información en nuestra cabeza sino que la guardamos en algo más que de lo que no dependamos
nosotros es decir fue un invento que renovó todo después aparecieron cosas mucho más innovadoras como por ejemplo los medios analógicos o Los medios digitales para guardar información y acá estamos hoy en día en un curso sql en el que vamos a aprender a manipular esa información que tenemos almacenada pero si sql es un lenguaje para interactuar con bases de datos donde se guarda la información que vamos manipular con sql y la respuesta ya sabemos lo venimos hablando durante el curso y es en una base de datos pero la verdadera pregunta es en cuál porque tenemos
my si cual tenemos pobre tenemos Oracle tenemos sql server en cual bueno básicamente a mí se me ocurrió usar es qlite o sqlite porque es la mejor opción para este curso por qué y déjame comentarte un poco el Por qué primero porque es el sistema de gestión de bases de datos más común del mundo se utilizan todos los sistemas operativos populares como Mako es como Linux como Windows como Android etcétera es compatible con muchísimos lenguajes de programación como python Java c++ Rubí muchísimos Otros otra cosa muy buena es que no tiene servidor lo que significa
que no necesitamos un servidor de base de datos Dedicado para poder ejecutar digamos sturite lo que hace que sea muy fácil de usar otra cosa buena es que está integrado directamente con la aplicación o sea se integra directo a la aplicación O sea no necesitamos instalar nada aparte Esto hace que cuando lo tengamos que usarlo podemos usar de una forma muy fácil sin necesidad incluso de andar Haciendo configuraciones adicionales en el servidor ni nada no eso no nos olvidamos y otra cosa es que incluso Si queremos trabajar la consola de es más poderosa que Excel
Y es más simple que pandas en algunos aspectos no pero es importantísimo esto porque para análisis de datos es poderosísimo Recuerden que en este curso vamos a hacer un curso de justamente Inteligencia artificial entonces medio que nos va a servir Y por último porque es simplemente una forma De aprender es decir ahora lo aprendemos con es pero lo que aprendamos y lo podemos aplicar a cualquier otro gestor es decir podemos hacer pobre podemos trabajar con sql podemos trabajar con todas las que venimos llevando siempre o sea no es como que aprendemos solamente es que aprendemos
y después con lo que aprendimos acá lo podemos usar para todas las demás Esta es simplemente una de tantas una vez que estaremos estar listos para bueno empezar a escribir Código Así que ahora sí ya estamos dentro del apartado de código Pero tiene que dar una introducción no a la parte práctica Así que ahora sí vamos con la instalación el entorno la configuración y todo eso acá ahí quiero hacer un énfasis porque en maxistra de una forma en Linux instalado de otra forma y en Windows instala de otra forma yo les voy a mostrar Cómo
se instala el Linux y en Windows bueno en Windows buscamos esquilate 3 literal Vamos a Google y Buscamos es q tres no nos confundamos con los anuncios acá dice anuncio acá dice es que light.org la página oficial Ok es q light.org fácil y acá Ok podemos darle en Download cuando le damos en Download se nos va a abrir esto que está acá tenemos que ir a donde dice Free fired binaris For Windows por qué porque tenemos una para Mac una para Linux una para Android en este caso tenemos que instalar las Tools Ok porque esto
básicamente nos va a permitir acceder a Trabajar con sqlite entonces lo que hacemos Es descargar esta específicamente que dice Tools ahí se me está descargando se me descargó la muestro carpeta tengo Esto del curso de python que lo hicimos que si quieren ir lo pueden ir a verlo Los invito a que vean el curso de python que es poderosísimo de hecho muy probablemente al final de este curso hagamos un ejercicio con python para unir ambos lenguajes ya que ya que estamos ahora le Vamos a dar extraer aquí y se va a extraer esta carpeta que
lo que vamos a hacer es copiar esto Ok simplemente copiarlo venir a la base del disco acá y crear una nueva carpeta yo voy a poner sqlite 3 esto lo tienen que poner en el disco que tenga Windows y lo voy a pegar ahora van al disco 3 y en acá nomás tipo le dan botón derecho vieron que le das ver actualizar Bueno le dan en donde dice abrir con terminal si acá no les aparece la opción De abrir en terminal lo que tienen que hacer simplemente es venir a Windows Powers Ok y ir moviéndose
en este caso yo voy a dar CD punto punto para ir para atrás CD punto punto ir para atrás y acá ya estoy en C ahora pongo CD es 3 y ya estoy en esta carpeta literalmente estoy en la carpeta de acá OK Pero nada en algunos Windows si ustedes vienen acá y le dan botón derecho automáticamente dice abrir en terminal o correr con Powers entonces en vez de hacer todo lo Que acabo de hacer recién se les Abre directamente pero esta es una forma muy común sirve con cmds y es lo mismo en realidad
Pero bueno nada Para qué tenemos que entrar a esta carpeta y en esta carpeta tenemos que entrar Para que vean que si queremos correr ese like ya lo podemos hacer podemos venir y poner punto barra Excuse light 3.exe estamos ejecutando este archivo que está acá porque si se fijan este archivo que está acá ver extensiones de archivos acá Podemos ver que dice esquilate.exe o sea si yo quiero este archivo tengo que poner este Comando le doy enter y ya está se abrió ahora sí fíjense que ya estoy escribiendo código en sqlite Yo acá puedo escribir
cualquier cosa veis dalto y se crea la base de datos de alto o sea ya podemos trabajar con código sql acá Okay pero imagínense que tengamos que andar haciendo esto y además tenemos una consola en medio rancio todo así que para evitar todo este lío y para Trabajar bien y como se debe vamos a cerrar esto y esto lo vamos a dejar acá pero ahora lo que tenemos que hacer es apretar acá Ok si se fijan si están en Windows cuando ustedes aprendan acá arriba lo que están haciendo ahora es se les va a seleccionar
el pad para que ustedes lo puedan copiar Esta es la ruta absoluta de la ubicación en la que están los archivos que necesitamos lo que tenemos que hacer ahora es decirle a Windows Che Mirá Quiero poder acceder a Esta consola de cualquier lugar o sea sin importar en donde esté Quiero poder acceder a estos archivos en cualquier lugar desde cualquier carpeta cómo hacemos eso bueno y ahora simplemente acá Venimos y ponemos variables y nos dice editar las variables del entorno del sistema entramos acá si no lo pueden hacer de esta forma pueden ir dándole en
botón derecho propiedades pueden ir viéndolo ustedes pueden buscar algún tutorial cómo hacerlo pero es una Boludez si entran acá y buscan variables le va a saltar esto editar variables dentro del sistema lo abren Ok y acá está lo tengo acá acá básicamente Vamos a entrar donde dice variables de entorno entramos acá y tenemos que darle acá en pad doble clic y se nos va esto que está acá otra vez los mosquito otra vez arrancan los mosquitos esto que está acá justamente son rutas locales a las que podemos acceder desde cualquier carpeta entonces lo que vamos
A hacer darle nuevo y darle control V para pegar la ruta le damos a aceptar aceptar y aceptar ya está ahora podemos acceder a estos archivos de cualquier lugar esto ya es espectacular vamos a hacer magia prácticamente pero como nosotros queremos poder manejarlo bien y manejarlo en el navegador por ejemplo vamos a venir ahora a instalar el browser sqlite browser buscan esto que es como el navegador de sqlite y está acá lo mismo es browser.org en Download Van a descargarse Ok el estándar Installer como yo ya me lo descargue no me lo voy a descargar
nada en chiste ya saben que siempre las cosas con ustedes Así que vamos y nos los descargamos juntos Okay yo no lo dejo en banda si ustedes tienen Windows 32 bits que se quedaron en la época del pedo se quedan el 32 si no el 64 yo instalo este le damos acá habitamos con msi se va a abrir Esperamos que se abra que tarda un poco quiere que lo cacheteemos el Sistema ahí se abrió le damos en next aceptamos next yo creo que se ponga en el escritorio Así que le voy a dar clic acá
y next next install Sí claro que quiero que genere cambio Si estoy haciendo un curso sql maestro cómo voy a preguntar eso Finish perfecto listo Ahora parece que no pasó nada pero si minimizamos y abrimos acá tenemos esto que sea que nos acaba en el escritorio lo tenemos en el escritorio Ok entonces lo voy a abrir y acá ya Tengo esto con lo que vamos a trabajar bueno así digamos podemos tener listo el entorno para trabajar en Windows Así que vamos a ver cómo lo podemos hacer el Linux Bueno ya que estoy usando una distribución
de ubuntu OK Pero básicamente usamos lo de siempre el sudo apt install en este caso ponemos like 3 Pero bueno se va a instalar todo Bueno hasta acá ya estamos bien ahora tenemos que instalar el browser OK Así que vamos a instalarlo es muy simple lo mismo sudo Apt install esquilate browser bueno así termina instalar este error puede saltar es común pero la solución este error es esto que está acá es poner esto y ya estamos listo ahora sí ya tenemos divi browser también instalado ahora en donde lo hayamos instalado tenemos que ir y buscarlo
y cuando lo encontremos simplemente lo llevamos al escritorio como acceso directo y ya estamos cualquier duda igual ya saben que pueden buscar algún tutorial en cualquier lugar De cómo instalarlo y lo pueden encontrar Estas son las formas de instalarlo Ok si tienen Mac búsquenlo realmente es muy sencillo O sea créanme que si no pueden seguir un simple proceso de instalación va a ser complicado seguir un curso entero la instalación es el proceso más fácil así que cada vez que se traben con un punto que digan Uy la verdad que hoy se me complica esto no
puedo avanzar búsquenlo en otro lado porque es muy común cuando uno toma cursos trabarse y Seguir una pena que no puedan adquirir todos los conocimientos que se brindan en los cursos por no hacer procesos de instalación pasa mucho pasa muchos cursos que a la gente me dice dalto la verdad es que simplemente no no me salta como te salta a vos y no lo ven y es una tontería y la gente le responde en los comentarios te olvidaste de guardarlo o es una tontería eso es algo muy simple Entonces lo solucionan y pueden adquirir todo
el conocimiento del curso y Aprender No esas trabas que no les impidan digamos aprender en realidad en cualquier trabajo en la vida uno tiene que aprender a desenvolverse no Así que si no lo podemos solucionar vamos a hacer lo posible por encontrar la solución bueno gente ahora sí ya estamos listos estoy emocionadísimo vamos a arrancar directo con el código vamos de lleno a escribir código sql bien Ahora sí viene el verdadero Apartado del código porque antes sí era como una introducción en realidad a la pantalla porque estábamos configurando instalando y demás Ahora sí viene la
parte del código bien para comenzar Qué hago con una percha acá No tengo idea datos de interés si alguien dice sí cuál se refiere a sql OK Pero simplemente hay gente que le cuesta un poco hablar entonces dice medio que sí cual Ah Bueno en realidad lo que pasa es que antes la primera versión de sql era Secueld english lo que pasa es que nada dos años después como se dieron cuenta que era un lenguaje que ya estaba registrado tuvieron que cambiarlo y le sacaron la e de English y quedó estructuras y ahí quedó sql
así que sql son los términos para los que uno se refiere sql Bueno dije que íbamos con el código me puse a explicar más cosas Bueno no importa vamos a abrir primero y principal el DVD browser de hyught bueno para arrancar vamos a poner en edit Preference y vamos a dejarlo en modo oscuro porque a nadie le gusta el modo claro de esto a nadie le gusta Así que vamos a dejarlo en modo oscuro y ahora sí con esto en modo oscuro vamos a arrancar a trabajar esto como ya saben es una especie de navegador
es como un browser para base de datos Recuerden que los navegadores básicamente lo que hacen es mostrarnos de forma gráfica información que ellos pueden interpretar interpretan código html css javas y nos Lo muestran de forma gráfica esto lo mismo esto interpreta lo que la base de datos eslite almacena la estructura y toda la información para brindarnos esta interfaz además de otras cosas que les agrega para poder operarla no para arrancar tenemos que crear una base de datos normalmente para crear una base de datos utilizamos la consulta voy al bloc de notas sí soy medio enfermo
pero no importa create database usuarios o la base de datos de alto por ejemplo y esto Lo que hace automáticamente es crear una base de datos pero en lugar de ejecutar esta operación lo vamos a crear directamente desde acá en New database y acá le vamos a poner un nombre vamos a decirle Por ejemplo usuarios punto db porque la extensión punto de B le dan tendrá este browser que estamos trabajando con bases de datos no no me dejó guardarla acá Así que lo tiene que guardar acá en esta otra ruta no importa le doy en
guardar y ahí se guardó ahora Me está diciendo Che Mira una base de datos tiene que tener una tabla porque si no es como una base de datos sin tablas se acuerdan que hablamos de entidades Bueno una entidad la representamos con una tabla que es una tabla bien acá me anoté un par de conceptos que tenemos que tener en cuenta si nosotros queremos entender las cosas básicas con las que estamos trabajando vamos a marcar primero tabla cuando le expliquemos una tabla es una Estructura de datos que se organizan filas y columnas es decir un tablero
de ajedrez podía ser una tabla porque tiene filas y columnas las filas están enumeradas como ocho siete seis y las columnas como absd una tabla periódica es una tabla porque tiene filas y tiene columnas eso básicamente son las tablas Son estructuras de datos no que básicamente están organizadas en filas y en columnas simple ahora ya que explicamos lo que es una tabla le vamos A marcar como que ya lo vimos y volvemos acá entonces las tablas tienen nombre si yo acá por ejemplo le pongo tabla usuarios o users user significa usuarios acá si se fijan
Esto me está creando un código estos gestores de bases de datos nos permiten digamos que sea más fácil todo lo que tiene que ver con trabajar con bases de datos nosotros deberíamos ejecutar este código sql para crear una tabla Pero esto nos lo hace más fácil es decir normalmente nosotros agarraríamos Seguiríamos create database usuarios después decimos create Table users y acá empezaríamos a crear la tabla pero las tablas como ya saben tienen filas y columnas entonces esa fila y columnas almacenan información almacenan algo llamado Campos el campo es el nombre de la columna me explico
es como un Excel vieron que en Excel arriba de todo ponemos el primer campo bueno eso sería como el el nombre entero de la columna acá encontré un pedazo de ejemplo para Trabajarla si se fijan arriba hay uno dos tres cuatro cinco seis esto sería el campo el campo acá es uno y uno tiene estos datos el campo 2 tiene todos estos datos Estos son columnas solamente que en sql las columnas las llamamos en bases de datos en realidad las bases las columnas las llamamos Campos en este caso si yo te digo por ejemplo Mostrarme
el tercer registro y decime lo que tiene el campo 2 y me va a mostrar esto que está acá que dice x menos 4 Igual 17 Entonces ya entendimos lo que es un campo un campo es un campo es una columna básicamente pero a su vez hablé del registro que es un registro Bueno un registro es una fila así como esto es un campo OK Así como estos y cada uno de estos que está acá son Campos que básicamente son columnas esto que está acá son los registros todo esto es un registro yo te digo
por ejemplo el registro 2 Qué es el registro 2 y el registro 2 contiene la información del Campo 1 del campo 2 del campo tres del campo 4 del campo 5 y del campo 6 de algo o de lo que está haciendo referencia a la entidad si yo por ejemplo tengo una tabla que dice usuarios el segundo registro puede ser nombre apellido edad mail currículum y otros datos más dirección de casa por ejemplo Entonces eso es un registro son datos con cada uno de lo de la información de la persona no O sea tenemos toda
la información en una sola Fila eso es un registro la diferencia entre los registros y los campos es que el campo es solamente esto Esto es el valor del ahí tenemos otro concepto esto que está acá viene siendo el valor del campo o sea cada celda individual cada cuadradito esto en realidad es un rectángulo es el valor del campo Entonces técnicamente ya tenemos otros conceptos tenemos registro que es básicamente una fila en inglés se dice récord esto que está acá básicamente es Como se dice en inglés lo que está al lado y valor de campo
Entonces ya sabemos que una tabla es una estructura de datos que se organizan filas y columnas un campo es el nombre de las columnas es como el dato que vamos a almacenar ahí adentro sería igual a una variable si yo tengo por ejemplo una variable nombre el valor de la variable puede ser Lucas o puede ser Pedro o puede ser Jaimito nombre puede ser igual cualquier cosa Esto es lo mismo el campo Y usuario puede ser igual a soy alto igual a petrix igual a lo que sea entonces está el campo y el valor del
campo cada uno de los cuadritos tenemos acá es el valor del campo Cuál es el campo y 5 por ejemplo en este caso o puede ser cuatro o puede ser seis y registro es toda la fila entera toda la fila es el registro y después tenemos una consulta y un identificador que por ahora lo de identificadores Prefiero esperar un poquito más para Explicárselos pero lo de consulta lo vamos a ver ahora en breve ahora tenemos que tirar cada uno de los campos Bueno vamos a crearlos el primero se va a llamar nombre ok Uy acá
tenemos otro problema integral qué es esto Qué opciones me está tirando PK hay la u default check nn ojo Qué significa todo ya estoy colapsando Okay despreocúpense esto es completamente normal y acá lo que nos está pidiendo esto que está acá nos vamos a olvidar todo lo demás que no Es el type olvídense que existe porque no lo vamos a usar o sea ahora no si más adelante ahora no lo que nos piden type es el tipo de dato que va a ser el campo porque un campo si yo tengo un campo nombre nos puede
pedir un texto pero yo tengo un campo de edad nos va a pedir un número entonces son datos diferentes que tenemos que almacenar si yo tengo un campo fecha vamos de tipo fecha Entonces tenemos que entender que cada dato almacena valores diferentes entonces Depende el dato que sabemos que vamos a almacenar acá se pone un valor diferente tenemos diferentes tipos Ok tenemos integrar que es como entero text que es texto blog que es como una especie de archivo que imágenes fotos vídeos etcétera real que es para matemáticas y numeric que es para matemáticas precisas ahora
vamos a ver bien cada uno integrar esto es como si quisiéramos almacenar un número cualquiera Ok un número por ejemplo el número de identificación del Usuario o la edad o la cantidad de productos disponibles que hay de un producto por ejemplo Cuántas manzanas hay y hay siete entonces para eso se usa int Okay integrar Ese el equivalente a int en Java por ejemplo después está text que es texto esto lo usamos como les dije antes para por ejemplo almacenar nombres direcciones de correo electrónico descripciones todo lo que tiene que ver con texto Okay en este
caso es texto el que el que vamos a Poner porque es un nombre entonces lo dejamos en texto pero también tenemos lo voy a explicar ya que estábamos los otros tres que son importantes uno es blog blog almacena datos binarios Ok es decir trabajamos con blog cuando queremos guardar archivos imágenes fotos vídeos y todo lo que sea binario después real es como para almacenar float reales como si fuera float o datos flotantes que jugará qué es esto los valores con coma si guardar Por ejemplo porcentajes Números con coma esto lo guardamos en real y después
tenemos numeric que lo que hace numeric es trabajar con números que necesitan una precisión matemática muy alta es decir si yo por ejemplo tengo que trabajar con números como pi que son casi infinitos o todavía no lo sabemos o con resultados de divisiones que son muy importantes y que guardan muchas comas números enormes y que necesitamos un cálculo matemático grande para poder almacenar esa información Tenemos que usar numeric ahora Cuál es la diferencia entre numeric y real Por ejemplo si real almacena números con coma o números como porcentajes y numeric también y Cuál es la
diferencia solamente el uso el concepto no la diferencia es que Real básicamente es un tipo de dato de 8 bytes es decir 64 bits Y es más rápido o sea almacena menos información y es más rápido mientras que Real Ok me Perdón mientras que numeric no tiene límite o sea puede almacenar Datos de cualquier tamaño y de cualquier precisión Pero es más lento o sea trabajar es más lento pero si queremos precisión matemática tenemos que usar este en cambio real es más rápido pero tiene menos capacidad para guardar datos que son muy grandes y además
tiene menos precisión matemática es decir cuando trabajamos con operaciones Matemáticas puede que lo que hayamos guardado no tenga mucha precisión Entonces nos dé un cálculo algo mal si guardamos pi en real No es lo mismo que si guardamos pi en numeric con Real vamos a tener mucha menos precisión que con numérica Esa es la idea Pero esto es un dato de valor que les puedo decir es que es que un like trabaja con digamos es uno de los pocos gestores de base de datos que trabaja de forma dinámica es decir cualquier dato puede estar en
el campo de cualquiera me explico O sea yo puedo poner números en texto el texto en números archivos binarios en donde sea Por qué Porque este tipo Dinámico o sea lo que insertemos hace que la columna se transforme en eso o por lo menos ese ese valor de campo específico yo guardo un número en un campo de texto está perfecto si yo guardo un texto en un campo de número está perfecto porque es esto porque es uno de los pocos que lo permiten ahora hacerlo es una mala práctica esto es importante que lo sepan hacer
esto es una mala práctica o sea no es recomendado hacerlo para nada Por eso Existen los tipos de datos pero en caso de que no suceda es que Lite lo permite hay una forma de sacar esto en sqlite pero no lo vamos a ver porque ya es complejizarse mucho solamente por ahora tienen que entender esto que es importante y es nada que cada campo tiene un tipo de dato y que depende el tipo de dato que le demos lo ideal es guardar cierto tipo de información u otro tipo de información en este caso si pusimos
el campo nombre vamos a dejarlo En texto porque lo que estamos guardando acá es texto acá el campo default es por si queremos que tenga un valor por defecto si yo por ejemplo quiero que todos mis usuarios se llamen Mohamed acá vengo y pongo Mohamed entonces cada vez que se haga que se inserte un nuevo registro y este campo no esté completo se va a poner el valor por default o sea el que tiene por defecto que es Mohamed O sea que si yo Registro un usuario que tenga apellido Edad y no sé qué más
y no le pongo nombre el nombre va a ser moamed porque es el valor que puse por defecto en este caso lo voy a sacar porque no quiero que tenga esto después tenemos el primary cake que es para primaria tenemos ahí que es autoincremento este que está acá es not now pero lo vamos a explicar a medida que vayamos avanzando el curso porque no quiero cargarlos con tanta información OK Por ahora nos quedamos con esto vamos a leer otro que va a ser Apellido y también va a ser un texto vamos a agregar otro que
va a ser edad y obviamente edad ya va a ser un número entonces lo dejamos en integrar y por ahora estos son los datos con los que vamos a trabajar okay nombre apellido algo más tranqui si se fijan y siguen mirando esto que está acá acaba de crear un código sql es decir lo que nosotros podemos ir haciendo acá si se fijan va modificandolos y yo toco esto acá me lo cambia si yo le cambio el nombre de la Columna me la cambia apellido Oh me la cambia porque porque esto lo hace automáticamente porque entiende
Lo que nosotros estamos queriendo hacer y lo lleva a código es decir Ah o sea que vos querés crear tres columnas nombre apellido Dad con los campos de tipo de dato texto texto e int Bueno te creo un código para que vos lo puedas ejecutar Y ejecute eso que vos querés es como una especie de gestor que nos permite que nosotros en vez de escribir el código lo Hagamos gráfica pero en realidad si no quisiéramos hacerlo de esta forma lo podemos escribir en código y esto que estamos diciendo acá es exactamente lo mismo que este
código Entonces ahora le vamos a dar en Ok y ahí ya se acaba de crear la tabla no aparece Pero tenemos una tabla acá la podemos ver que dice users users tiene nombre apellido y edad Hasta qué estamos bien pero bueno ahora tenemos que cargar esto con datos Porque no tenemos datos Si queremos manipular Datos tenemos que crear estos datos Así que para eso tenemos que insertar los primeros datos que tendríamos que insertar Entonces vamos a execute y ahora sí vamos con la primera consulta de todas las que vamos a hacer Vamos a ver la
información de esta tabla bueno la primer consulta es la famosa consulta uno de todos que es un Select Y por qué digo consulta bien porque normalmente acá es importante que lo expliquemos un cueri o una consulta es lo mismo que hoy Es consulta en inglés es hacer una consulta una base de datos es decir es preguntarle o pedirle información a una base de datos es decir una búsqueda en una base de datos sirven para eso justamente sirven para obtener información que está almacena la base de datos que en realidad el Select como tal no es
una consulta sino que es la sentencia que nos permite hacer consultas lo que yo voy a hacer ahora es seleccionar todo el asterisco en Programación es el símbolo universal no el carácter universal para hacer referencia que queremos todo en css por ejemplo lo usamos para decir todas las propiedades quiero que se modifiquen en sql lo usamos para decir bueno seleccioname todo seleccioname todo from Ok from Y users por qué Porque la tabla es usuarios si yo vengo acá bueno acá me acabo de cambiar un poco el tamaño de los tipos de letra porque si no
me va a volver un poco loco le di acá En edit preferenses y básicamente esto lo cambia 10 esto que está acá lo puse como 14 que es esto que están viendo ahora el Data router lo dejé en 12 esto lo cambie a 13 bueno no Y esto que está acá lo puse en 13 que son los resultados no y acá puse 22 que es para el tamaño de esto que está acá y cuando yo escribo acá ustedes lo van a poder ver más grande porque si no creo que se les va a complicar un
poquito no hacer todo En definitiva si yo vengo acá y pongo Select asterisco from y users Ok la estructura de esto es lo siguiente Select es justamente la sentencia que nos permite seleccionar algo Ok el asterisco es el selector Universal de todo from tabla entonces la estructura es Select que queremos seleccionar from nombre de la tabla en este caso estamos seleccionando todo de la tabla usuarios que es esta tabla que tenemos acá Entonces le doy en execute sql en este botoncito que está acá o también puedo Apretar f5 como ustedes prefieran y acá me tira
esto que está acá la primera línea no dice ejecución finalizada sin errores perfecto tardó 5000 segundos y nos resultó o sea nos retorno cero filas Claro si no tenemos registros y acá nos devuelve la consulta que hicimos bien perfecto hasta acá está todo bien Ahora si queremos manipular datos tenemos que insertar datos así que de hecho ese es el término utilizado para insertar datos tenemos que realizar un insert Así que Vamos a analizarlo cómo se hace inserte bueno en insert básicamente se pone insert into Ok insert into acaba el nombre de la tabla en este
caso tenemos que decir users porque queremos insertar en la tabla usuarios y ahora lo que tenemos que poner es entre paréntesis sería como hacer una dupla en python las columnas que queremos insertar en este caso las columnas que vamos a insertar son nombre apellido y edad Así que acá tenemos que poner nombre apellido y edad Acá hay una falta de congruencia Es que la base de datos Está en inglés y los campos o sea el nombre o sea los campos están en español entonces hay una falta de congruencia lo correcto sería modificar tabla y poner
usuarios usuarios Entonces ahí sí tenemos esto correcto ahora Yo acá le voy a dar inserte intro usuarios Ok y acá tenemos Ahora sí usuario porque porque esto es una falta de congruencia porque tengo un nombre en inglés y todo lo demás en Español Lee todo en inglés o todo en español mi recomendación en inglés pero nada Ahora como es un tutorial y quiero que ustedes lo entiendan bien Vamos a trabajarlo en español OK Pero ustedes normalmente lo pueden hacer en inglés ya que si ustedes quieren meterse en la industria la mayoría de todo está en
inglés o en chino pero no creo que quieran chino Bueno entonces lo que hacemos acá de selección mira insertarme en la tabla usuarios Ok el campo nombre Apellido y edad estos son los datos que vamos a insertar ahora qué valores bueno los valores values esto lo pueden poner abajo o al lado yo lo pongo abajo porque si no no me entra y acá de vuelta abrimos paréntesis otra dupla y acá decimos los valores por ejemplo entre comillas el texto Recuerden que siempre va entre comillas si yo quiero escribir un texto lo pongo entre comillas en
este caso voy a poner los valores Lucas por ejemplo de hecho usen comillas simples Que las comillas simples son más óptimas que las dobles estamos insertando el nombre Lucas estamos insertando el apellido dalto y estamos insertando la edad que voy a poner 21 Ahí va pues cumplo ya cumplo 21 Entonces como si tuviera 21 cumplo en realidad en en dos meses pero pongo 21 Entonces si esto lo ejecutáramos qué es lo que va a suceder Bueno le doy enter y me dice la ejecución finalizada sin errores el resultado cuál fue consulta ejecutada Exitosamente acá me
dice que la consulta ejecutó pero cómo si ahora no le estoy haciendo una consulta es decir si ahora no estoy consultando información por qué me dice que es una consulta bueno la resulta es una consulta porque cualquier operación que realicemos con sql como un insert Ok es una consulta Si queremos modificar la información de la base de datos es una consulta esto es un concepto que primero resulta extraño Pero si yo le digo a la base de datos Che modificame este nombre Eso no es una consulta Bueno en realidad sí sí es una consulta y
el concepto es un cueri el es justamente como una especie de de solicitud que le hacemos a la base de datos Che podrías por favor eliminar esto y te va a responder Mira el resultado fue que sí lo logré ejecutar correctamente y se eliminó acá me dice hay una fila afectada y tomó 2 milisegundos O sea que si yo elimino un dato es una consulta Sí si yo modifico Un dato o agrego un dato también es una consulta Sí al principio es confuso pero sí no es solamente pedir datos a la base de datos una
consulta sino que es varias acciones a la vez normalmente las consultas se utilizan para vos llamados crudo que es create read update delay son las cuatro operaciones básicas de cualquier sistema de gestión tenés que poder create o sea crear información read o sea leer información update o sea actualizar la modificarla y delate la de Eliminarla entonces todas esas cosas se consideran consultas Bueno ahora yo estoy acá perfecto vamos a ver qué es lo que sucedió si yo ahora le digo Bueno voy a cortarlo con control x Select from usuarios vamos a ver qué es lo
que me devuelve ahora vamos a ejecutarla ahora me acaba de volver una tabla una tabla muy pequeña con solamente un registro el campo nombre el campo apellido y el campo Dad y los registros el valor para cada uno de estos Campos Pero entonces Parada vamos a hacer de vuelta vamos a registrar más datos voy a poner Pedro Jorge Lin y tiene 26 Pero qué pasa si yo de repente Quiero agregar varios datos Cómo puedo hacer Bueno esto básicamente es separándolo por coma yo lo voy a hacer así para que esté más inventado y dental el
código significa ordenarlo y yo acá puedo insertar varios datos Porque los estoy separando por coma entonces acá voy a insertar varios datos en este caso voy a poner Juan Álvarez y Le voy a dar 16 acá voy a poner 52 y te lleva a llamar Roberto Tito Roberto ya sabemos la historia de los Roberto en este canal y le sacó la coma qué es lo que estoy yendo acá estoy diciendo Che Mira fíjate inserta me Ok en la tabla usuarios estos datos Pero más bien lo podemos leer de otra forma lo podemos leer como estos
Campos que están acá son los campos que te voy a pasar para que insertes en la tabla usuarios los valores son este para un registro coma Este para otro registro coma y este para otro registro Esta es una forma de ejecutar varios insert en realidad un insert que registra varias veces es decir hace varios registros Así que vamos a darle acá a ver qué pasa y nos tira un error esto es porque yo soy un y me olvidé de cerrar las comillas en los apellidos porque esto es comillas si no me di cuenta le pido
disculpas de hecho hablando de comillas como esto es un campo de tipo texto No Necesitamos las comillas los números no se representan con comillas son números un texto si lo representamos con comillas porque cuando nosotros queremos insertar texto podemos usar comillas simples comillas dobles pero cuando usamos números no se usa eso para usar un para insertar un número solamente es un número que no hace falta que lo pongamos entre comillas Entonces nada Está bueno que lo saquemos pues si no estamos insertando un texto en realidad En vez de un número ahora sí vamos a volver
a ejecutar la consulta y ahí se acaba de registrar Bueno vamos a verificarlo si yo acá pongo Select from usuarios cuando actualizo Ahora sí tengo esta información Ya tengo la información del nombre de apellido de edad y acá tengo el número de Registro registro 1 registro 2 registro 3 registro 4 y no se acaban de dar cuenta pero hasta esta altura acabamos de crear una base de datos crear una tabla de usuarios de una Base de datos entender Para qué sirve cada dato cada tipo de dato creamos inserts o sea insertamos datos creamos un insert
para insertar múltiples registros al mismo tiempo de una sola de una sola consulta y por último logramos entender cómo seleccionar todos los datos y traernos todos los datos que nos devuelve una base de datos además de entender diferentes conceptos no como por ejemplo tabla de campo registro y consulta que lo vamos a marcar ahora nos Identifieres o identificadores que de hecho en realidad acá debería haber puesto identificadores pero no sé por qué lo puse en inglés cuando en realidad todo esto está en español bueno en fin vamos a ver lo que es esto hay más
o menos aumenté un poco la letra de todo para que más o menos lo puedan ver bien pero nada por las dudas No a mí no me han dicho varias veces en los cursos que algunos tienen compu chiquititas y demás Así que nada por eso por las dos lo Comenté como el tamaño de letra de todo pero no se olviden que nosotros nos enfocamos en esta pantallita de acá esta pantallita de acá y esta de acá por ahora bien no está de más Resaltar que cada consulta Ok que hacemos Nos devuelve una tabla nueva es
decir cada Select todos los Select cada vez que hacemos un Select Esto sí o sí nos de una tabla nueva la tabla puede ser resultado de todos los datos que tiene la base de datos o puede ser una tabla Nueva creada a partir de los datos filtrados Porque por si yo le digo acá seleccioname el nombre Esto me va a seleccionar solamente el nombre Entonces esto simplemente una tabla nueva no es una tabla original yo digo seleccionarme el nombre y la edad Esto me selecciona el nombre y la edad yo digo el nombre el apellido
y la edad esto solamente estos datos me estaciona el apellido y la edad apa esta no la tenían Eh sí si se emocionaron y dijeron Ah dale un like a Este vídeo y si no lo hiciste hacerlo también de esta forma estamos editando algunos Campos Entonces si queremos seleccionar un campo lo seleccionamos así Si queremos seleccionar dos Campos los separamos por coma la coma es para separar no para arrancar ni para terminar siempre para separar entonces tienen que entender que todos los Select lo que nos devuelven siempre son tablas una tabla puede ser aunque tenga
solamente un dato es decir aunque tenga Un solo dato no deja de ser una tabla Entonces nada conceptualmente sepamos que siempre nos devuelven tablas y ahora con esto ya acá ya sabemos lo que es una tabla que es una digamos Estructura de datos que se organiza en filas y columnas que almacena información sobre una entidad específica ahora le Podemos agregar ese Plus que las tablas almacenan información sobre una entidad específica porque porque Recuerden que las entidades se representan con tablas Qué información almacenan las tablas y información sobre esa entidad Entonces nada es interesante que ahora
con simplemente como que vamos uniendo Los Cabos Y a lo largo del curso van uniendo un montón más de cada que esto se trata el mundo de los datos y las bases de datos y todo este mundo que es hermoso ahora vamos a ver bien este concepto de identifieres identificadores en este caso ya es primaria específicamente porque tenemos las llaves foráneas y las Llaves primarias que son diferentes tipos de formas de identificar algo Hay mucha teoría al respecto Ok yo les voy a enseñar porque las tienen que usar tienen que aprender a usarlas y son
una de las herramientas más poderosas que existen en cuanto hablamos de bases de datos por ahora vamos a ver bien eso de Fray links pero sí vamos a entender Cómo funcionan los identificadores OK Así que vamos con esto de los identificadores vamos Bueno a ver si queremos entender Para qué son los identificadores primero tenemos que entender cuál es el problema que viene a solucionar que en realidad no es como que se hayan inventado mucho Después de las bases de datos sino que necesitamos identificar los datos de alguna forma Entonces ese es el problema que solucionar
pero les voy a plantear un problema mucho más gráfico para que lo entienda mejor supongamos que yo vengo acá Ok a brawl Data Yo acá Tranquilamente podría darle en donde dice inserta New record y Table y yo le doy acá y acá por defecto los valores se me ponen nulos OK Pero yo acá puedo escribir y poner por ejemplo Lucas Dalton y acá pongo 21 entonces de esta forma yo acabo de registrar un dato un registro acabo de insertar un registro que es Exactamente igual a uno que ya existía antes de hecho yo puedo venir
acá a sql y poner un insert insert into usuarios nombre apellido edad values Lucas dalto 21 yo esto lo registro listo dice que se registró correctamente y el dato se insertó el registro se insertó vengo a la estructura y y vengo a broads Data efectivamente se acaba de registrar cuál es el problema bueno el problema es el siguiente De qué forma podemos identificar este registro porque esto que está acá no cuenta Eh Esto que está acá lo pone automáticamente el browser Pero en cuanto al metadatos ese numerito que está acá no existe esto solamente un
Registro del browser Cómo podemos identificar que este registro es diferente de este hay alguna forma de hacerlo No no existe para eso utilizamos identificadores los identificadores en este caso son identificadores primarios tenemos dos tipos de identificadores O mejor dicho Los primers o Los foriking Kiss los foreigning Keys son las claves que hacen referencia a una primaria de otra tabla pero no nos vamos a entrar mucho vamos a primero y principal Mostrarles Cómo podemos digamos modificar una tabla acá para básicamente crear un identificador normalmente lo que haríamos sería venir a datase structure usuarios Ahora sí botón
derecho y modifique table vamos a venir acá y acá tenemos la tabla como antes Ok lo que tenemos que hacer acá vamos a darle de vuelta vamos a venir un poquito más para abajo para que puedan ver esto que estamos haciendo completamente y voy a clickear acá y voy A darle mood top esto para que se ponga arriba de todo y acá a esto esto que está acá voy a aumentarlo un poco para que se vea completo le voy a dar ID el ID en este caso es el ID del usuario Así que voy a
poner ID usuario este ID básicamente nos va a crear una identificación única que va a identificar a cada usuario por esta identificador si se fijan cuando yo le doy en auto incremento no me va a dejar por qué porque acá lo que tendríamos que Hacer en realidad si quisiéramos trabajar con esto es Eliminar todos los registros ahora vamos a ver bien Por qué Así que lo que voy a hacer es dejar esto que dice ID usuario le voy a dar en Ok Ok y voy a venir acá y simplemente fíjense que está en null Así
que lo que vamos a hacer es venir a execute sql y Eliminar todos los registros como los eliminamos bueno delate todo from usuarios de esta forma eliminamos todos los registros para para que no haya Iguales voy a sacarle el asterisco y lo voy a ejecutar Ahí está perfecto Ahora sí de hecho si vengo acá ahora vemos que no tengo más información Entonces ahora sí voy a venir a la tabla usuarios modificarla guardar y acá le puedo poner autoincremento por qué Porque si le pongo autoincremento vamos a entender qué es lo que acaba de pasar recién
el auto incremento es una propiedad de las claves primarias en este caso fíjense que se marcó automáticamente la opción De primary key porque porque eso no es una un campo que se va a auto incrementar Por más que nosotros no querramos se va a auto incrementar para hacer que cada registro sea único Por qué le ponemos también el PK que significa primary key las ventajas de usar primariquí primero y principal es que nos asegura una integridad referencial O sea que podemos hacer referencia a cualquier registro sin tener valores duplicados Por qué Porque No nos Estaba
dejando a poner la opción de autoincremento porque para que sea auto incrementable debe ser primariquí de la saco no me lo deja tiene que ser autoincremento y primaria y juntas de hecho le puedo sacar el autoincremento puedo sacarle el auto incremento a la prima Ricky pero no puedo sacarle el primer equipo incremente eso es bastante loco Esto es para que cada registro sea único O sea no voy a poder registrar esto de forma duplicada el ID va a ser Único y cada registro va a tener una ID diferente entonces cada registro va a poder identificarse
de alguna forma además es que un like utiliza una estructura de de índice de árbol B para acelerar las búsquedas en una clave primaria esto es básicamente para que podamos utilizar las primerick para hacer búsquedas más rápidas más eficientes más efectivas y todo o sea es más óptimo y rinde más entonces yo ahora le doy en Ok Ok y modificó esta tabla Fíjense Qué pasa si yo ahora de repente si yo le doy en ad New record ya el primer registro Aunque todos los demás Campos estén null este se agregó con un uno le doy
otro registro ahora Este es un dos le doy otro y este es un 3 le doy otro y este es un 4 porque porque tiene el la propiedad de auto para que cada valor sea auto incrementable cada registro Perdón se auto incremente entonces Incluso si yo vengo acá y hago un insert voy a venir y poner insert Into usuarios nombre apellido y edad es decir no voy a pasarle el ID no le quiero pasar el ID solamente quiero insertar estos Campos values Lucas dalto 21 voy a copiar esta consulta Ok para intentar insertarla dos veces
la inserto una vez y abajo le vamos a decir otra cosa le vamos a decir Select from usuarios para que primero está Vamos a darle un punto y coma para separarlas hay que darle un punto y coma si vamos a poner más de una consulta okay tenemos Que separarlas con un punto y coma si no no es necesario en este caso para separar las afirmaciones las consultas le pongo punto y coma Entonces primero nos inserta este dato y después nos muestra la tabla digamos no Entonces le damos insertar y ahí nos muestra Primero insertamos este
dato yo voy a intentar hacerlo de vuelta a los datos se insertaron pero ahora hay una forma diferente de identificarlas no es lo mismo este registro que este Porque aunque tenga el mismo nombre el mismo apellido y la misma edad los puedo diferenciar por el ID de usuario uno tiene una idea de usuario 5 otro tiene una ID de usuario 6 esto es similar por ejemplo en instagram evidentemente no funciona así de forma interna pero pueden hacer de cuenta que el audio de usuario puede ser como el vieron que en instagram solamente pueden poner un
username si ustedes buscan soy dalto en instagram voy a saltar Solamente yo y Nadie más porque soy de alto solamente hay uno no hay más soy alto todo lo demás son falsos no es que son falsos sino que tienen otro username porque porque el username es de uno único y no puede haber otro igual si pueden haber dos personas que tengan de nombre Lucas dalto porque ese es el nombre pero el username es único para cada uno Esto es lo mismo tenemos una ID que nos identifica a cada usuario esto es excelente esto es fascinante
y para esto Queridos muchachos sirven los ids en este caso los identificadores primarios las claves primarias identificadores hay dos los primarios o las claves primarias y las claves for ahora por qué estoy mencionando tanto esta palabra foránea clave foreging qué foreigning bueno lo vamos a ver ahora pero no se apresuren no se apresuren porque tenemos que entender otras cosas antes pero por ahora acabamos de entender lo que es un identificador o un entify o un ID Perfecto es lo que es como un campo específico o sea un identifier un identity fire no deja de ser
un campo okay un campo que sirve para identificar un registro entero Recuerden que tenemos los registros los campos la tabla Bueno un identificador Ok es un campo especial que no sirve para identificar un registro entero por qué Porque un registro puede tener todos los datos exactamente iguales pero por lo menos hay un campo que es diferente el Identificador que nos permite identificar cada registro de forma única perfecto bien Ahora que entendimos el concepto ya los conceptos básicos ya los tenemos Así que vamos a meternos más de profundidad en el resto de cosas Cerramos el Paint
y comenzamos Bueno también cabe Resaltar que los identificadores primarios no pueden ser nulos o sea no se puede poner null por eso no me dejaba poner esta columna como auto incrementable Porque porque si es auto incrementable automáticamente se convierte en una clave primaria y las claves primarias no pueden tener valores nulos y cuando yo inserto una nueva tabla O sea si yo acá por ejemplo agrego una una nueva tabla vamos a venir acá y poner modify Table y voy a poner en esta tabla le vamos a crear un nuevo campo que va a ser dirección
por ejemplo no dirección y va a ser tipo texto Si Lo agrego Cuando vengo acá van a ver que sí se creó el Campo dirección pero como es un dato que jamás registramos tiene todos los valores nulos para cada registro es un valor nulo cuando lo queremos hacer auto incrementable no vamos a poder auto incrementarlo porque porque si lo hacemos auto incrementable tiene que ser una clave primaria y si es una clave primaria no puede tener valores nulos entonces me tiraba el error que me tiraba antes pero que ahora más o menos vayamos uniendo Cabos
y entendiendo Esto Bueno ahora sí voy a hacer algo que es Eliminar todos los registros nuevamente O cambiarlos mejor dicho voy a rellenar los registros para que más o menos tengamos todos los registros de hecho voy a borrar este campo porque como que no lo voy a usar ahora Así que lo voy a eliminar me muevo Y le doy acá y voy a rellenar estos Campos para que hagamos otro ejercicio a continuación Así que aguante un segundo que rellenan los campos y continuamos Bueno ahí los modifique y ahí tenemos una base de datos con Bueno
un una tabla de usuarios que tiene nombre apellido Dad y un identificador para cada usuario perfecto hasta ahí estamos bien esta tabla que está acá olvídense se creó automáticamente pero es como que no la podemos eliminar Así que despreocúpense vamos a crear otra tabla OK Vamos a darle click Table Y esa tabla va a ser por ejemplo de turnos médicos turnos médicos va a ser el nombre de la tabla No le pongo acento porque esto nos puede generar conflictos lo ideal es no usar acentos ni caracteres especiales No si lo soportan pero evitemos problemas voy
a agregar un campo que es ID de turno o sea cada turno tiene que tener una idea diferente si yo por ejemplo te digo sí Mira viene siete veces a tu consultorio Bueno pero decime Cuál de las siete veces me estás hablando no lo que pasa es que vine para que me chequees la pierna y me diagnosticaste una Enfermedad pero no me acuerdo cuál Bueno a ver Tengo muchos registros decime qué día viniste y te voy a decir o mejor dicho decime el del turno así yo busco el numerito del turno y puedo entender todo
lo que vimos y todo lo que sucedió en esa consulta Entonces el ID de turno nos va a identificar específicamente este turno Y va a ser un int va a ser auto incrementable y listo no hay problema ya estamos vamos a crear un campo que es profesional en este caso va A estar el nombre del profesional por ejemplo acá va a estar el motivo o el paciente Mejor dicho que en este caso le podríamos poner paciente Pero hay una práctica que normalmente se utiliza para para bases de datos que es cuando vamos a utilizar un
ID que hace referencia a otro ID tenemos que poner el mismo ID Entonces en este caso vamos a poner ID usuario Por qué Porque en usuarios tenemos un campo que es ID usuario y si en este caso queremos hacer referencia a Ese a ese registro por el ID tenemos que usar exactamente el mismo después hay técnicas para hacer que sea más legible pero no está de más usar esto y después agregamos otro Bueno a esto le vamos a poner también como que sea texto a esto también va a ser texto vamos a estirar un poquito
para que se vea más ahí bueno Y por último voy a agregar un campo que va a ser motivo motivo va a ser texto y vamos a ver uno más que va a ser horario por ejemplo iba a ser también texto ahí Tenemos una tabla Okay con cinco Campos hay de turno profesional hay de usuario motivo y horario Perfecto Bueno ya podemos entonces va este el ID de usuario va a ser número también ahí va y ya le damos Okay ahora tenemos una nueva tabla bueno tenemos la tabla Así que vamos a hacer un insert
vamos a venir a broad Data vamos a venir a excute acá bueno acá simplemente vamos a empezar los valores vamos a poner turnos médicos y acá voy a poner el ID no hace falta Porque se automáticamente crece así que voy a sacar un turno para profesional ID del paciente ID usuario en este caso esto lo voy a tirar para un costado para que no se nos moleste acá y usuario motivo y horario estos son los datos que voy a registrar y los valores son el profesional va a ser Ramírez el doctor Ramírez el ID de
usuario es él a ver mi ID usuario era el 6 si no me equivoco Así que voy a ponerme 6 va a ser dolor de panza por ejemplo y el Horario va a ser a las a las 12:30 del mediodía Entonces ya técnicamente registro esto OK Vamos a seleccionar esto ejecuto y ahí me acaba de decir listo hay un registro Ok hay un registro Qué pasa acá bueno acá lo que acabo de hacer es registrar o mejor dicho insertar un registro en esta tabla Entonces tenemos el primer turno por qué Porque el ID turno no
hace falta que se lo pasemos es automático porque se auto incrementa o sea cada registro va a Tener uno dos tres cuatro siempre va a ser el número siguiente el profesional es el doctor Ramírez el profesional que me va a atender el ID de usuario es este yo voy a seleccionar dos tablas ahora Select from turnos médicos y ahora voy a darle Select from usuarios y acá voy a registrar otro turno el doctor Ramírez también va a atender al usuario 3 por dolor de cabeza por ejemplo a las 11:30 Entonces ejecuto esto y ahí me
muestra todos los requisitos Ah perdón olvidé el Punto y coma Ahí va Ahora sí lo ejecutamos y acá tenemos Esto bueno pasando acá lo que pasa es que se están superponiendo las tablas esto que está acá lo vamos a borrar para que no nos estorbe yo si quisiera Mostrar no puedo hacer esto porque esto lo que está haciendo es reescribe la tabla anterior primero lo que hace es bueno te muestra la tabla turnos médicos y después tiene que borrarla para mostrarte la de usuarios para que nos muestre las dos Juntas simplemente ponemos coma usuarios y
ahí ya nos estamos dando a dos tablas le doy en ejecutar y ahora nos mostró esto que está acá pero ahora simplemente lo que hacen las tablas es superponerse Entonces técnicamente no nos están mostrando nada lo que nos está mostrando acá es son cosas que básicamente no podemos unir para esto se tiene que utilizar un join que después vamos a ver bien que es un join Y estos son los tipos de problemas que surgen porque Porque yo querría Mostrar las dos tablas Y fácil si yo muestro turnos médicos tengo tres turnos que se registraron Ok
tengo tres turnos registrados uno tiene la ID de usuario 6 si yo quiero saber quién es mi cliente paciente tengo que hacer esto tengo que venir y poner usuarios Buscar a ver cuál es el 6 Ah Acá está el 6 Ok Lucas de alto fue atendido bueno a ver vamos a ver quién más fue atendido turnos médico ejecutamos el siguiente fue el ID 3 Bueno vamos a usuarios de vuelta a ver a quién Atendió después el id3 Martina Okay atendió a Martina Acosta porque la ID de usuario 13 es el de Martín Acosta turnos médicos
ejecutamos Ah la Atendió de vuelta a Martín Acosta Y esto no se puede no es viable para esto tenemos que utilizar justamente joins y otras cosas que vamos a ver más adelante que todavía no quiero que nos metamos ahí Pero simplemente quiero que entiendan que lo que tenemos que lograr hacer es Relacionar una tabla porque acá hace referencia esta idea de usuario Bueno vamos a crear un Paint como hacemos siempre para empezar Recuerden que tenemos las claves primarias y las claves foráneas acá la clave primaria es sin duda Esta que está acá Ok Esta que
está acá es la PK Porque así es como esquilate abrevia las claves de hecho así Se abrieron las clases primarias con PK sería clave primaria Esta es una clave primaria de esta tabla Y esta es Una clave primaria de esta tabla hasta ahí estamos bien cada tabla tiene su clave primaria es como su identificador Cómo hace la tabla turnos médicos para identificar a cada turno Y por el ID de turno como hace la tabla usuarios para identificar a cada usuario y por el ID de usuario Perfecto ahí estamos todo bien Ahora esto que está acá
está esta este campo de Acá no está siendo referencia a ninguna clave primaria ni identificar porque las claves primarias No se pueden repetir y acá Se repitió porque porque el hay un paciente que tuvo dos veces una consulta médica entonces no es primaria y si no es primaria Entonces qué estamos haciendo con esta clave bueno Esta que está acá es un campo este que está acá es un campo que utilizamos para hacer referencia a una ID de otro lugar porque si esto que está acá con esto podemos acceder a los registros de todos los usuarios
Qué significa que estamos Teniendo una clave foránea que es como una secundaria de esto entonces técnicamente ID de usuario es una clave foránea o sea un foreigging key en este caso se escribe así forme en este caso es una clave foránea por qué Porque este ID Ok este ID está haciendo referencia a estos Campos el 6 hace referencia al 6 y el 3 hace referencia al 3 como esta tabla necesita hacer referencia a los usuarios de una forma única para que con un numerito identifiquemos al usuario Esa forma que utiliza es el valor que tiene
ese usuario único y ese valor único del usuario es el ID de usuario Entonces lo podemos usar para identificarlo esto es excelente Porque con este numerito tenemos información de todo el usuario es fantástico si yo por ejemplo tengo una tabla que dice ID turno no y el turno tiene como profesional al doctor Ramírez sabemos que hay un paciente que vino por dolor de panza y que estuvo a las 12:30 quién Es bueno el aire de usuario 6 Ok acá lo buscamos el aire de usuario 6 es Lucas dalto y tiene 21 años Este es el
poder de las claras foráneas El problema es que rindan menos O sea no son siempre muy eficientes pero en unos casos son necesarias porque si no no hay otra forma de hacer referencia esto se puede validar en la aplicación o se puede validar directamente en la tabla como tal pero eso ya no vamos a meter porque son otro tipo de temas lo que tienen que Entender es que la clave primaria es una clave que no sirve para identificar un registro como único y la clave foránea es una clave que nos permite hacer referencia a una
clave primaria de otra tabla O sea no podía ser una clave foránea si no estuviera siendo referencia a una clave primaria de otra tabla Esa es la definición Entonces vamos a poner acá las definiciones con la primariquí identificamos un registro entero para que cada registro se vuelva Único y con la foreigs o las claves foráneas lo que hacemos Es hacer referencia a una primariquilla o sea una clave primaria de otra en este caso a qué está haciendo referencia hay de usuario y al usuario del de la tabla usuarios Por eso yo les decía que es
una buena práctica se acuerdan que íbamos a poner paciente se acuerdan de eso en este caso le podríamos poner paciente Pero hay una práctica que normalmente se utiliza para para bases de datos que es Cuando vamos a utilizar un ID que hace referencia a otro ID tenemos que poner el mismo ID acá cuando usamos una foreign key lo que utilizamos es el mismo nombre que le dimos porque esto nos genera una identidad y una relación Es más legible y no nos entorpece la lectura entonces tiene mucho más sentido ponerle exactamente el mismo nombre al campo
que al campo de al que estamos haciendo referencia O sea si hacemos referencia la ley de usuario y Pongámosle exactamente el nombre que tenía antes Bueno toda esta explicación fue para que entiendan los identificadores porque hay mucha gente que se pierde mucha gente que se marea y yo Les recomiendo que si no entendieron mi explicación No se preocupen no se sientan abrumados vayan algún material y búsquenla porque Obviamente no voy a ponerme a explicar 30 de 30 formas diferentes esto porque tengo que avanzar con el curso o sea así como ustedes Todos los conceptos que
vieron hasta ahora los entendieron hay gente que no entendió seguramente algún que otro concepto pero es normal probablemente si alguien no entendió algún concepto que Di lo buscó y por eso pudo continuar el curso Ok la gente no es perfecta y no siempre entiende a la primera vez aunque intenta explicarlo de la mejor forma posible siempre hay un porcentaje por más mínimo que sea que le cuesta entender y si Lamentablemente estás Dentro de ese porcentaje mi consejo es buscar algún otro vídeo que te explique específicamente esto no te vayas a otro curso eh No no
seas hijo de no Quédate aprendiendo en este curso pero específicamente esto si te llega a costar o lo que te haya costado buscarlo en algún otro lugar tenés chat gpt también para sacarte las dudas de hecho la remera no probaste pero si lo entendieron ahora entenderán cómo graficar un diagrama un diagrama Sencillo vamos a eliminar todo esto y vamos a graficar un diagrama Ok Cómo podríamos graficar esto que está acá con un diagrama que nos permita relacionar estas tablas simple bueno acá tengo la representación de las tablas acá estoy diciendo Esta que está acá es
una tabla Ok una tabla llamada turnos médicos que tiene una ID turno que es un identificador principal que de hecho acá le podríamos agregar como una llavecita es el signo que se suele Utilizar para mostrarnos que está identificándose pero en este caso no Vamos allá porque es innecesario tiene un profesional un ID de usuario un motivo y un horario y después tenemos la tabla usuarios que tiene un identificador único llamado y de usuario tiene un nombre tiene un apellido y tiene una edad estos Campos pertenecen estas tablas si yo quisiera relacionarlas Cómo haríamos bueno las
tablas se relacionan por las foreim Kiss O sea por las claves foráneas si yo quisiera relacionar estas tablas simplemente hago esto el ID de usuario pasa a ser la foreim Key de turnos médicos porque hace referencia a la primariquí de usuarios y de esta forma conectamos bases de datos por qué Porque si yo por ejemplo tengo un registro que sea por ejemplo como ya vimos antes el ID de turno es un cero el profesional es doctor Ramírez el aire de usuario es 6 el motivo es dolor dolor de panza por Ejemplo o dolor y el
horario es 12:30 por ejemplo Cómo puedo relacionar esta información con esta tabla no tiene nada que ver no sí sí la tabla que conecta estas dos es el id Cuál es el id 6 o sea que yo tengo que ir a buscar cuál es el registro que tiene el id6 y cuando encuentro el registro con el id6 voy a encontrar los datos el usuario que tiene la y b6 se llama Lucas tiene el apellido de alto y tiene 21 años Esos son los datos del usuario con el ID 6 y ahí Acabo de relacionar las
tablas entonces puedo venir acá y buscar esa relación nuevamente vamos a hacerlo una vez más a ver si lo entendimos seleccionamos todo de turnos médicos y acá tenemos un turno un turno que nos pide el usuario 6 vamos a chequearlo cuando vamos al aire de usuario 6 acá tenemos es un turno que pidió Lucas dalto que tiene 21 años Y de esa forma tenemos una relación entre tablas de esta forma podemos conectar tablas y crear sistemas y bases de datos Que nos permitan Conectar a las tablas entre sí para que después van a entender cuando
trabajemos con procesos más complejos podamos hacer cosas que nos permitan hacernos la vida muchísimo más fácil porque el micrófono perdón pero En definitiva van a ver su importancia cuando las necesiten por ahora es simplemente teoría que parece que es inútil pero hasta que no la necesiten no van a ver su utilidad A menos que ya sean unos visionarios se acaban de Entender en su totalidad todo con el ejemplo que di pero qué pasa si yo les dijera que existen bases de datos de prueba que podemos utilizar para este curso porque a ver ahora Estamos trabajando
con datos muy pobres con bases de datos con muy poca información pero existen bases de datos de prueba que nos permiten a nosotros trabajar con datos reales y con los que podemos operar para que podamos llevar el aprendizaje a otro nivel estoy hablando De una de las bases de datos más conocidas de todas estoy hablando de la base de datos northwin si venimos acá y buscamos base de datos norwi vamos a vamos a encontrar un montón de diagramas estos son los diagramas de una base de datos que es muy conocida y que es muy utilizada
para aprender y para entender este tipo de cosas y es esta base de datos yo la tengo Así que vamos a descargarla OK Para que podamos exportar esa base de datos a este gestor para que Tengamos todas las tablas con toda la información y ahí sí ya van a hacer cosas diferentes porque vamos a estar trabajando con mayores volúmenes de datos vamos a estar trabajando con otro tipo de consultas que nos van a permitir hacer otras cosas y ver otros resultados Porque de nada nos sirve trabajar con cuatro datos locos o mostrarles cosas avanzadas que
no tienen uso práctico porque no estamos trabajando con datos que nos permitan aplicar esos usos Avanzados Así que para continuar en el curso vamos a descargar esta base de datos norwin que justamente utiliza el modelo relacional que es el diagrama que acabamos de ver recién esto que está acá es el modelo relacional y es una forma en la que relacionamos bueno no es el modelo como tal pero es una una forma de en diagrama utilizando el modelo relacionar relacionar bases de datos esto que vamos a hacer Recién ahora tiene dos tablas Pero qué pasaría si
Tuviera muchísimas más bueno tenemos cosas como estas que ahora seguramente vamos a entender mucho más fácil cuando las veamos porque como ya entendimos esto y que este este conector nos dice Che Mira la forma en la que se relacionan es por una llave foránea Bueno vamos a entender estos diagramas Así que vamos a bajarnos esta base de datos vamos a abrir su diagrama y una vez que entendamos el diagrama vamos a empezar a hacer consultas para Manipular estos datos y jugar un poco con ellos así que vamos estuve grabando todo este tiempo con el aire
lo podrías Apagar por favor no lo puedo creer Bueno una cosa que quiero decirles Si antes escucharon un ruido que es medio molesto que es como lo que pasa es que sí desde el curso de python ustedes vieron que no pare de sufrir por el calor y como chorreaba y ahora no estoy sufriendo porque tengo un aire acondicionado de 6000 fibras Enfrente y básicamente el estudio siempre lo dejo como unas dos tres horitas antes para que refresque todo y pueda apagarlo antes de grabar Pero esta vez me olvidé de apagarlo y nada como que estuvo
en esta grabación anterior este este pedacito del curso estos últimos 20 minutos habrán sido quizá un poco menos no sé no lo diste todavía el video lo van a ver ustedes editado pero no estuvo ese ruido Pero ojalá que no haya sido molesto Y si lo fue pido Disculpas Ahora sí continuamos con la base de datos que de hecho la tengo acá es esta base de datos Okay les voy a dejar el enlace en la descripción para que puedan seguir mis pasos y en caso de que este enlace ya no esté más disponible yo me
voy a encargar de que dejarles un enlace con este mismo código para que puedan seguir el curso con los mismos datos y que puedan manipular la misma información que estoy manipulando yo para que vean los mismos resultados Que estoy viendo yo vieron que a veces las páginas dejan de estar disponibles bueno En caso que estoy deje está disponible yo mismo voy a encargar de dejarles un enlace con esto de vuelta Así que vayan a la descripción y tengan esto y si no tienen ganas de ir a la descripción bueno busquen básicamente esto que está acá
que es wiki university.org norwing sqlite y no va a saltar todo esto que está acá que jora qué es esto bueno Esto que está acá es Un código larguísimo de sql con muchas consultas que nos va a permitir crear y hacer todo para que tengamos la base de datos en nuestro gestor vamos a copiar desde acá porque esto que acá son comentarios que más adelante vamos a explicar qué es lo que son pero básicamente es como algo para el desarrollador algo que sql no interpreta y que solamente nos sirve a nosotros para leerlo pero sql
no lo interpreta o sea si lo interpreta pero lo ignora Así Que vamos a copiar desde acá vamos a Bajar bajar y copiar hasta el final de todo voy a bajar hasta abajo es bastante esto porque tiene bastante información son datos que está registrando que a nosotros nos van a servir Así que simplemente copio esto y ahora sí vamos a darle en Nueva base de datos vamos a guardarla como North wind.dv Me faltó una hacha acá Ahí va y la guardamos esta que ya tenemos ahora de usuario punto de Vela vamos a guardar Para que
nos quede de recuerdo y acá nos pide que creemos algo Yo acá con como me salta esto voy a cerrarlo no quiero ninguna tabla lo que voy a hacer Ya estoy en norwin TV por más que me salte esto que está acá estoy en norwin lo podemos verificar con el archivo que tengo acá arriba voy a darle control V para pegarlo y acá tengo todo lo que copié lo tengo todo acá le doy en ejecutar la consulta y ahí se está ejecutando si se fijan esperemos que se Termine de ejecutar a bueno tarda listo acá
me dice que la ejecución finalizó sin errores y ya estamos listos De hecho si ahora vamos a brows Data vamos a ver que ahora tenemos varias tablas acá en donde dice Table tenemos varias tablas tenemos la tabla categorías la tabla clientes la tabla empleados la tabla detalles de la orden la tabla órdenes la tabla productos la tabla envíos y la tabla proveedores o sea Ah bueno Ok no encontró ninguna amenaza fantástico Windows defender me pone re contento verdad y bueno tenemos Script seconds que esto no es nuestro ya es algo de interno ahora la pregunta
es cómo joraca sé yo cómo manipular esta información y cómo se relacionan estas tablas las unas con las otras bueno para entender un poco estas tablas porque cuando nosotros entramos a una empresa y tenemos bases de datos que manejar y demás lo que tenemos estado Que es un Diagrama y ese diagrama nos permite entender cómo se relaciona una tabla con la otra Y como por ejemplo este employ ID este categoría ID este producto ID este orden ID todo esto se relaciona no Cómo se relacionan todos estos datos pero lo tenemos en un diagrama y esta
base de datos tiene su diagrama Así que vamos a verlo si le damos acá donde dice northwin nos va a llevar a esto que está acá que es el diagrama lo que yo voy a hacer es abrir esta imagen pero mejor Dicho en una pestaña y acá tengo la imagen Ok Esta es la imagen que tenemos que analizar voy a poner pantalla completa tiene un poco de mala calidad pero no importa se lee la verdad que se lee y bien acá tenemos las relaciones Ok las relaciones y como estos datos se relacionan entre sí bueno
para empezar tenemos la tabla principal que es customers OK y acá básicamente tenemos algo que se llama uno n pero no Quiero meterme en eso porque no quiero que Hablemos de temas de cardinalidad por ahora eso lo vamos a dejar un poquito más para adelante pero por ahora tienen que entender que la tabla customers o sea clientes tiene un customer ID el nombre del cliente el nombre de contacto la dirección una ciudad un código postal y un Estos son todos los datos que nosotros registramos del cliente nosotros de un cliente registramos el customer name es
decir el nombre el contact name el nombre de contacto Address o sea su dirección City que su ciudad postal que su código postal y el countios el país ahora cómo se relaciona esto con orders yo tengo otra tabla que se llama órdenes Okay las órdenes las podemos identificar con su llave primaria que se llama orden ID en este caso es order ID en inglés y Esta es una clave primaria que nos permite identificar a cada registro que de orden porque esto es una orden qué más registra bueno registra el cliente o sea Quién es el
cliente que hizo la orden y así conectamos esta tabla ya está ahora acabamos de conectar la tabla clientes Cómo y porque cada orden tiene un ID de cliente ese ID cliente hace referencia a esta tabla customers que tiene todos los datos del cliente O sea que solamente con su ID podemos obtener todos sus datos Y así relacionamos estas dos tablas bien después tiene un empleo ID que en paso es el nombre del empleado Quién fue el empleado que le vendió el Producto el empleado que lo vendió lo podemos obtener con su empleo ID Por qué
Porque es una forma es una es otra forma en key que hace referencia a esta tabla nueva que es employs que es empleados a su vez esta tabla registra el primer nombre el segundo nombre la fecha de nacimiento la foto y sus notas después el shipper se el envío el ID de envío en este caso que sería shipper bueno shipper es una empresa que se encarga del envío O sea no es como el envío como Tal sino que es una empresa que se encarga del envío quien se encarga del envío en esta orden y se
encarga y acá nos pide el nombre y nos pide el número entonces si yo por ejemplo digo Mira a ver mi orden es la orden número 25 Bueno a ver quién la ordenó el Houston ID 5 Ah ok a ver quién es el que usted y cinco y tengo todos los datos del houstomer a su vez Quién es el que vendió esto y lo vendió Y tenemos el nombre de la persona que lo vendió el apellido sus datos Ah Bueno Y también tenemos la fecha perfecto esto es un dato individual un dato propio de la
tabla orders y después quién se hace cargo del envío bueno shipera ID el chip ID es un identificador único y nos dice el nombre de la empresa que se hace cargo del envío y el número de la empresa que se hace cargo del envío perfecto Listo ya tengo toda la información ahora esto a su vez se conecta con otra tabla que es los detalles de la orden el primer campo Es una clave primaria que nos indica bueno el orden de Tail ID perfecto listo es el detalle de la orden nos pide el orden ID que
hace referencia a la clave primaria orden ID En definitiva es una clave foránea o sea orden ID es una clave foránea de order details que hace referencia a la clave primaria order de la tabla orders y después tenemos product ID que es otra clave foránea de order details que hace referencia al ID de productos si yo quiero decir a ver el Detalle de la orden es la orden que acá nos dice todo lo que ya vimos antes la cantidad del producto que Cuántos compró 3 4 5 y compró 7 listo 7 y el product ID
que en este caso Qué producto compró bueno el producto ID es 7 Ok a ver el ID 7 listo el producto con el ID 7 tiene un nombre un proveedor quien nos provee ese producto una categoría y unit que es la cantidad de unidades que tiene y price que es el precio a su vez después tenemos su Player ya tenemos proveedores Supónganse que este producto ID tienen un supplyer 7 por ejemplo listo a ver quién es el supplyer 7 tiene un nombre un nombre de contacto una dirección una ciudad un código postal un país y
un número de contacto volvemos más atrás también tiene una categoría a ver supongamos que nos tocó el categoría ID 3 a ver cuál es el categoría i3 y el categoría i3 tiene un nombre y una descripción puede ser por ejemplo no sé que son frutas y la descripción puede Ser es una banana fruta verde amarilla y cosas y de esta forma acabamos de conectar todas las tablas entre sí y crear un diagrama casi perfecto de cómo todas las tablas eran información de forma ordenada Por qué Porque Tenemos tantos datos que tenemos que saber ordenarlos tenemos
que entender cómo los datos están ordenados porque cuando nosotros somos una empresa o cualquier sistema de gestión cualquier cosa de la que necesitemos guardar datos Tenemos Que tener bases de datos organizadas que guarden información sobre las diferentes partes que necesita el almacenar información podamos relacionar las tablas entre sí Y Cuando querramos acceder a algo podamos hacerlo sin problemas cuando queremos obtener datos los podamos obtener sin problemas y sepamos a dónde ir a buscar las cosas Yo sé que si quiero buscar por ejemplo la cantidad de productos que se vendieron de algo lo busquen order details
si Quiero saber dónde están los clientes lo busco en customers y tengo todo sobre los clientes si Quiero saber sobre mis empleados lo busco en la tabla empleados pero a su vez una orden la hizo un cliente y tengo todos sus datos una orden La vendió la generó un empleado que fue El vendedor tengo todos los datos del empleado y además se le asignó a una empresa que se encarga de repartir ese envío y tengo todos los datos empresa así podemos relacionar la Información y tener estructuras que son escalables viables y que nos permiten trabajar
con datos en la vida real de forma profesional Este es el poder de saber manejarse bien con la información y sql es la herramienta que nos permite manipular esta información que debería estar bien estructurada entonces sql no solamente código porque técnicamente sí sql Si queremos lo vamos a hacer solamente código Pero de nada nos sirve si la tierra no estaba inaplicada porque Si esto fuera un desastre no podríamos acceder bien a los datos No tendríamos un orden No tendríamos nada de lo que estamos leyendo y trabajar con sql Sería mucho más complicado por eso esta
parte teórica es súper importante porque tener bien las bases nos permite que las consultas y todo lo que hagamos con sql sea más sencillo legible entendible eficaz e incluso escalable si no lo entendiste mírate algún vídeo que lo explique Ok pero no sigas después Mirando Este vídeo si no entendiste esto mírate otro vídeo que te explique lo mismo pero volvé al principio el vídeo donde te arranco a explicar lo que son los identificadores volvé hasta ese punto del video te aseguro te aseguro que si esta parte la vez dos veces la vas a entender O
sea si no entendiste mucho hasta este punto del vídeo pero retrocedes al apartado de identificadores ahora sí lo vas a entender todo porque al principio te Hablo de cosas que explico después entonces si ahora las volvés a ver vas a decir ah te lo aseguro Así que si no lo entendiste retrocede hasta el apartado identificadores y volvió a ver el vídeo hasta este punto y vas a ver que lo entendiste Y de esa forma te va a quedar mucho más en la mente pero ahora vamos a arrancar a trabajar con esta base de datos Porque
ya está basta de hablar de alto tenemos bases de datos con un montón de información y con un montón de Formas de operarlas y manipularlos vamos a empezar a aplicar sql a todo esto y ahora sí me emociona porque ahora se viene la parte tryhard Así que vamos bueno a ver para comenzar tenemos que entender que hay Campos que quizá ustedes puede que les cueste entenderlos puede que les sea más fácil llamarlos de otra forma porque miren Tenemos un montón de Campos o sea Tenemos un montón de perdón de tablas y cada tabla tiene un
montón de Campos entonces a veces Puede que se confundan un poquito a la hora de llamarlos Entonces qué podemos hacer voy a borrar esta consulta que había hecho antes y voy a hacer un Select un Select simple con Select employs vamos a ejecutar esta consulta y ahí nos tiró toda esta información es fácil una información sencilla de los empleados esto que está acá es interesante porque porque si acá dice foto y sin embargo está guardando esto y esto no es una foto qué es esto Esto es Interesante esto que está acá hace referencia a una
URL porque porque las fotos normalmente Las guardamos en el servidor y lo que guardamos acá es la url entonces supongamos que el usuario sube una foto de perfil que dice Dalton No mi foto de perfil Entonces yo no guardo mi foto acá lo que yo guardo acá es la url y la foto la subo al servidor y nada más le digo la imagen es y le pasó la URL entonces automáticamente se muestra la imagen sin Tener que andar registrando la imagen en la base de datos que después es un problemón traerla de vuelta en baken
esto ya es término para cuando trabajemos con lenguaje de programación y con sql los mezclamos nada que está bueno que lo sepan no que uno normalmente no almacena la imagen en la base de datos sino que almacena la URL la ruta Así que nada eso Bueno ahora Estamos seleccionando employs no pero supongamos que yo quiero seleccionar el Last name como apellido Por qué Y porque Last name técnicamente es el último nombre que en español se traduce como apellido pero a veces me confunde no a veces veo lasting y me confunde si es el caso te
recomendaría ir a un psicólogo no y ya después a la escuela para aprender inglés básico no se ofenden Es un chiste que te cacheteos pero la segunda opción que no pueda cambiarlo y es un tipo sin como como iglesia abandonada no no tiene cura Merezco me merezco lo peor Bueno cómo hacemos para darle otro nombre a las columnas y basil podemos venir acá a la estructura de la base de datos acá tenemos las tablas vengo and Plays le doy en modificar y acá le cambio esto por apellido pero esto no es correcto no es correcto
porque si lo tengo en inglés y lo paso en español hay falta de congruencia y tengo no es una tontería entonces lo que hago es lo cambio de forma temporal asignándole otro nombre Como a hueso con la cláusula as yo selecciono Last name si yo acá lo ejecuto me va a ver solamente el Last name pero ahora yo le voy a dar Last name as apellido Entonces ejecuto esto y ahora me devuelve los mismos datos pero el campo Last name se acaba de convertir en apellido pero si vuelvo acá el campo es el mismo eh
No se modificó sigue siendo Last name vamos a seleccionar el employ es Last name acá pero acá es apellido la tabla Recuerden que los Select nos devuelven nuevas tablas Esa es la magia del Select con el Select podemos pasar mil formas de trabajar con conjuntos Y esta es la magia del álgebra lineal que funciona de forma interna que nos permite hacer muchísimas operaciones y devolvernos nuevos conjuntos que esto interpreta como nuevas tablas que a su vez tienen nuevos valores entonces asignarle un nuevo nombre al campo es una de esas posibilidades estoy yo por ejemplo Last
name como apellido pongo Una coma y ahora digo y también quiero que me devuelvas el First name como nombre Entonces yo lo ejecuto y me devuelve apellido y nombre y ahí está los campos son los mismos Repito no cambiamos nada es Last name y First name ahora si yo quisiera que me lo devuelva al revés que primero me devuelve el nombre y después el apellido pongo primero esto y después Esto entonces lo ejecuto y ahí me devuelve primero el nombre y después el apellido entonces Está bueno viste porque podemos jugar un poco con esto y
sql entiendo lo que queremos hacer y nos devuelve una tabla nueva esto normalmente no lo usaríamos Pero para qué podemos usar Esto bueno Esto se usa principalmente por dos motivos el primer motivo por el que usamos la cláusula as es porque queremos agregarle un nombre más descriptivo a la tabla supongan sé que tenemos una tabla llamada no sé jds 532 eso no debería pasar que no debería pasar pero a veces De sistemas automáticos y existen casos en los que a veces sí tenemos nombres que son muy poco intuitivos y complicados de leer Entonces si hay
un campo llamado nj45 y hace referencia al nombre de una tabla de no sé qué le ponemos nj45 a nombre Entonces yo sé que cuando estoy leyendo esos Campos Estoy leyendo los nombres Entonces es más fácil para que yo lo pueda interpretar e incluso después van a ver que lo podemos operar o sea ese QR nos permite hacer Muchas cosas pero muchas cosas Estoy seleccionando esto y le estoy agregando otro nombre diferente entonces es como que después con ese mismo nombre vamos a poder hacer muchas cosas y si yo quisiera modificar o utilizar funciones o
lo que sea ya no la uso más acá la aplico acá entonces realmente nos permite hacer muchas cosas esto incluso yo puedo hacer algo así les voy a hacer un adelanto muy rápido vamos a seleccionar otro campo que en este caso Es products productos Ahí va y lo ejecutamos fíjense que product tiene un precio Ok esto que está acá es el precio de de products si yo acá pongo price y lo ejecuto me devuelve el precio solamente el precio pero si yo acá le hago esto esto todavía no lo vamos a ver pero es una
forma de hacer una operación esto significa que queremos que queremos seleccionar el precio y multiplicarlo por 2 lo ejecuto y me devuelve lo mismo fíjense que en vez de 18 me devuelve 36 Antes me devolvía 18 y ahora me devuelve 36 se preguntan Cómo hago para ir para atrás y para adelante es apretó acá en el campo de sql y pongo control Z y después para ir para adelante es control y Entonces de esa forma como puedo hacer las cosas más rápido no Entonces me devuelve el doble Pero qué pasa acá dice price por dos
acá arriba y queda feo este campo es un campo que es raro Entonces cómo puedo renombrarlo fácil a esto lo renombro como precio doble y Cuando lo ejecuto me dice el precio doble es esto incluso puedo seleccionar dos veces el mismo campo pongo price co price por 2 a precio doble lo ejecute y me devuelve el precio original y ahora me devuelve el precio doble Por qué Porque primero le digo Che seleccioname el precio y después seleccioname el precio multiplicado por dos y cambia el nombre a precio doble esto en la tabla products entonces me
devuelvo el primero el precio que está acá y después el Precio doble que es igual a esta operación esto es bastante loco dicho podemos solamente decirle price y se ejecuta también pero es raro normalmente tiene que haber un cambio para que tenga sentido esto no y ahí está esto es una posibilidad no se me pongan locos no se me alteren Es simplemente una forma de asignar diferentes valores a cosas que seleccionemos porque a veces no seleccionamos Campos seleccionamos otras cosas Yo acá puedo decir por ejemplo Zoom price precio doble o suma total o suma de
precios y esto me va a devolver un solo un solo campo con la suma de todos los precios pero repito no son cosas que vamos a ver ahora lo vamos a ir viendo durante el curso Okay y van a ir viendo la utilidad de as con el tiempo solamente quiero que sepan que pueden usar as para hacer referencia a columna con otro nombre es decir le cambiamos el nombre de la columna En otras palabras bien ahora tenemos un Problema mayor Select from products Ok tenemos productos por ejemplo ya está el problema de esto es que
si yo por ejemplo digo Mira la verdad es que tengo una situación muy particular muy peculiar Y es que quiero ordenarlos los productos quiero ordenarlos y no los quiero ordenar por el product ID porque por defecto vienen ordenados por el product ID Por qué Porque es auto incrementable entonces cada registro va a tener una ID diferente según se Registró y parece que se ordenó por el producto ID pero en realidad es que simplemente están como en orden de registro Esto está ordenado según lo fuimos registrando pero supongamos que yo quiero seleccionar los que tengan menor
precio al principio y los que tengan mayor precio después es decir quiero seleccionar por precio de forma ascendente por ejemplo O sea que arranquen con poco y vayan mostrándome después los que tengan más precios Arranque desde el que menosprecio desde el que menos vale Hasta el que más vale Y que me lo ordene por esto específicamente cómo lo puedo hacer bueno para eso usamos la cláusula order by abajo y usar order by order by es una cláusula que nos permite utilizar diferentes filtros para ordenar en este caso quiero ordenarlo por price Ok por price Pues
yo ahora le doy ejecutar lo que va a hacer es que automáticamente se va a ordenar de forma ascendente es Decir va a arrancar con algo que es lo mínimo y va a terminar con algo que es el valor máximo nos va a mostrar el producto que menos vale que es Jay tost que no sé qué significará pero es el nombre de un producto que de hecho el producto es el producto número 33 y tiene un precio de 2,5 dólares estos prestan en dólares vale 2,5 dólares es el producto que menos vale Y solamente de
esta forma agregándole esta simple cláusula acabamos de hacer un filtro Para seleccionar por precios de hecho esto es como decir as que es ascendente es lo mismo si yo ejecuto Esto me tira el mismo resultado Solo que si se lo saco por suerte funciona igual no hay mucha diferencia en rendimiento o por lo menos no hay diferencia en rendimiento acá porque ustedes tienen que entender que de nada sirve hacer el sistema más escalable y mejor estructurado del universo si vamos a trabajar con tres datos locos y la mejora del rendimiento Es de un 1% y
ese 1% representa 10 dólares en ahorro de recursos no pagar un desarrollador para que me haga el mejor sistema del mundo que mejora Un 3% y que ese 3% sea 30 dólares por mes estamos gastando 3000 por mes para mejorar un sistema que me genera 30 dólares de ahorro en recursos es un ejemplo no después obviamente lo que hacemos con esto es evaluar los planes y ver qué onda pero acá en este curso Vamos a aprender a optimizar las Consultas Sí Más adelante llegado a un punto en el que entendamos bien cómo funciona sql o
gran parte de sql Vamos a aprender a optimizarlo Porque si hay cosas que consumen muchos recursos que podemos evitar no te estoy hablando de hacer un porcentaje de mejora del 2% Aunque suma Porque si hacemos 10 mejora del 2% terminamos mejorando un veintipico por ciento pero hay cosas que cambian drásticamente el rendimiento O sea que lo cambian por mucho Entonces Nada vamos a ver de optimización yo particularmente bueno en este caso la voy a usar porque en algunos casos se considera una buena práctica ya que es un código más legible y como una cláusula que
termina de cerrarnos El order by no es como no es necesario casi para nada pero es una buena práctica así como el punto y coma por ejemplo en javascript Ok A veces lo que mejor rinde No necesariamente es lo mejor siempre Ahora qué pasa si nosotros quisiéramos Por ejemplo utilizarlo Porque si yo digo que esto es lo mismo que esto es porque este es el parámetro por defecto de esto pero qué otros valores tiene O sea qué otros valores podemos cambiar Bueno si no es ask que significa ascendente es desk que es descendente si yo
ahora corro esta consulta ahora me lo devuelve al revés me los está ordenando de forma descendiente se está ordenando de forma descendente o sea el más alto al principio y el más Bajo al final ahora dice que el primer ahora fíjense que el primer resultado que me tira es coche de blaie que no sé qué hora casera Pero vale 263 dólares y tiene el producto id38 Ahora qué pasa si yo por ejemplo en vez de ordenar por precio quiero ordenar por product name si lo ejecuto como me lo está ordenando si no hay números Bueno
lo que pasa es que ahora Estamos ordenando de forma alfabética Cuál es la jerarquía de esto bueno por defecto Recuerden que esto es As Es decir de forma ascendente Ok y esto funciona así vamos a ir a Paint nuevamente primero Ok lo que menos valor tiene son los null Esto es lo que menos vale cuando usamos order by algo de forma ascendente el valor más bajo en null O sea que ahora nos muestra la a pero si no nos mostraría un null después le siguen los números o sea que si no hay nulos después vienen
los números o sea se ordenan por los números de mayor a menor del 0 al 9 cuando termina Después arrancan los caracteres especiales que son por ejemplo el punto la coma los acentos todo esto entra dentro de caracteres especiales y lo que más vale lo que más rango tiene son simplemente las letras las letras son lo que más vale Qué significa que en orden ascendente primero viene este después Este después Este y después este y en orden descendente es al revés primero nos va a aparecer las letras después los caracteres especiales después los Números y
después los null Ese es el orden jerárquico Entonces en este caso se ordena desde la a hasta la z es bastante interesante esto es bastante interesante porque estamos ordenando los y entendiendo la jerarquía no Qué pasa si yo por ejemplo tengo un dato nulo y se va a mostrar primero y si lo pones en descendente y tuvieras un nulo se mostraría al final primero se muestran los nulos después se muestran los números después los caracteres Especiales y después las letras comunes y si lo ordenamos de forma descendente es al revés O sea primero las letras
después colocar caracteres especiales después los números y por último los nulos los nulls al final nada tienen que ir probando y con el tiempo pero ahora yo lo que voy a hacer es intentar buscar alguna tabla que tenga valores nulos así que vamos a ir a browse Data pasearnos por acá hasta que encontremos algún valor nulo nada nada no hay valores Nulos nada no hay valores nulos nada Como no hay valores nulos los vamos a crear nosotros estábamos en productos Vamos a darle en inserte año récord y se acaba de insertar este dato y me
tiró datos nulos así que bueno vamos a checarlo venimos acá lo ejecutamos y primero se muestra el número por qué Porque está de forma ascendente lo que menos vale Esto es lo que más vale Qué pasa si nosotros a nosotros no nos interesan los números los datos nulos no Porque ya está ya vimos que con ascendente nos lo muestra primero y condescendiente con el desk nos lo muestra al final hasta acá ya está pero qué pasa si yo quiero que igual en nask me muestre los nulls al final porque yo quiero que me muestre los
números nulos al final porque tengo 200.000 datos nulos Y no quiero que me aparezcan al principio bueno se agrega nulls Last esto le está diciendo a la a la es una es como una cláusula que le está Diciendo Che Mira a ver todo muy lindo que en orden ascendente los nulls valen menos y que los tengo que poner al principio pero quiero que los pongas al final entonces ejecutamos la consulta y ahí desaparecen no lo que pasó fue que aparecieron al final Si queremos que aparezcan al principio tenemos que poner nulls First y técnicamente poner
esto y no ponerlo es lo mismo o sea el nulls First lo tenemos que utilizar con desk porque porque desk si le sacáramos el Null First no nos mostraría los nulos primero nos mostraría al final pero si se lo pusiéramos aparecen primero O sea null's First básicamente es como para usarlo con desk y nulls Last es para usarlos con ask ya que solamente lo que hacen es agarrar los nulos y ponerlos al principio o ponerlos al final Eso es todo acá pueden pasar mil cosas pueden ordenarse mil formas diferentes pero los ponemos al principio o
lo ponemos al final esto sirve incluso sin ordenarlos Ya que si yo sacara esto pongo Random tengo que ponerlo entre paréntesis porque es una función Random es una función por eso va entre paréntesis yo lo ejecuto Perdón acá no tengo que poner product name order by Random es así es order by Random ahora ejecuto y ahora sí me tira los resultados porque esto me está diciendo Che mira lo voy a ordenar de forma aleatoria de hecho fíjense que acá No hay ningún tipo de orden si yo actualizo me cambio el orden de vuelta Actualizo me
cambio de vuelta y cada vez que actualice me lo va a cambiar porque porque esto es completamente aleatorio entonces me lo ordenan como quiere Esto está bueno cuando queremos obtener datos que están desordenados para después de hacer cosas con eso y yo acá le puse nulls Last pero fíjense que no me está respetando la cláusula de nulls Last O sea no me está poniendo los nulls al final lo que pasa es que Random no me lo va a permitir porque Random es aleatorio Entonces por ahora si hay una forma pero no la vamos a ver
ahora vamos a dejarlo así Random nos ordena todo de forma aleatoria Ok es una buena función es interesante repito si hay una forma de usar nulls y manejar los nulls con Random pero no quiero mezclarlos tanto es una boludez así que entiendan que está buena esta función Random que nos permite ordenar de forma aleatoria de hecho podemos ordenar por dos Campos eso es otra función interesante yo puedo Decir Bueno vamos a ordenarlo por producto name acá lo ordeno y además por product o por su playa Ahí va su Player ID Entonces yo lo actualizo y
fíjense que me lo está ordenando por product name De hecho yo voy a poner desk descendiente pero yo voy a venir a broad Data y agregar algunos récord más 1 2 3 acá a su playera y voy a poner 8 a este voy a poner un 9 un 4 y este le voy a poner un 14 vamos a ver qué pasa si yo vengo acá y ejecuto la misma consulta Ah fíjense que primero me está ordenando por product name ya está son todos nulos pero qué pasa hay Campos nulos pero a su vez de qué
forma lo ordenamos porque estamos ordenando pero son vehículos no sabemos cuál poner primero y del mayor al menor porque le dijimos des si suele pasar ascendente me sonaría al revés 4 8 9 14 Entonces es como que podemos hacer una segunda forma de pedirle que nos ordene todo no como hay cuatro nulos cuál me pone primero Bueno ahora que ya No sabemos de qué forma ordenar porque los cuatro tienen el mismo campo ordenados por este campo Ok del menor al mayor también lo podríamos ordenar por ejemplo por product ID entonces acá están los órdenes y
ahora va por pregunta y dice 78 79 80 81 también puede ser de forma descendente 81 80 79 78 y 7 y de esta forma más o menos es como podemos ordenar los productos podemos darle un doble filtro o sea es como ya está tengo los cuatro datos Iguales ahora filtrarmelos por otra cosa y es como podemos jugar un poco en esto lo recomiendo que prueben que jueguen que ahora se pongan a hacer consultas con la base de datos no actualicen datos no los modifiquen y los eliminan porque vamos a trabajar entonces ustedes lo hacen
después como que les va a afectar un poquito lo que hagan cuando están trabajando con este curso Pero puede jugar un poco en consultas Select y prueben seleccionar cosas ver qué es lo Que salta Los invito Ok Los invito porque es lo más práctico y lo más lindo así que vayan a hacerlo no tan lindo como tu hermana pero bueno tampoco se puede pedir mucho Así que no tienes hermana pero despreocúpate no pasa nada si quieres te puedo hacer una mañana no hay problema después también podemos borrar las filas duplicadas es decir las que tengan
el mismo campo Las podemos eliminar supónganse que yo quiero eliminar todos Los duplicados de nulo no Cómo puedo hacer para eliminar los duplicados de nulo vamos a sacarle el order by si yo quisiera por ejemplo seleccionar product name esto que está acá como ya saben los últimos registros están nulos Pero si yo le dijera distint product name esta cláusula distint se selecciona se escribe Perdón después del Select porque poeta seleccioname los valores únicos de product name yo lo ejecuto bajo y me va A devolver solamente un nulo Porque todos los que se repitan me los
elimina me devolvió el que tiene nulo una sola vez pero si yo acá le pongo order by product name as esto lo que va a hacer va a ser ordenarse de forma alfabética O sea que el primer null es el primero que se encontró lo que estoy haciendo acá es un product name de cada cosa si hay más de un product name resumirlo porque De qué me sirve saber que tengo un Alice mutuon un Alice mutton una limuto no el Producto es Alice motor si tenemos frutas tenemos bananas peras y uvas si después dice a
ver qué frutas tenemos tenemos banana pera uva banana no ya me dijiste banana no me lo digas de vuelta bueno para eso está cláusula y si además La queremos ordenar usamos esta función Si queremos descendente tenemos descendente Si queremos Random la tenemos Random y de esta forma estamos mezclando la función Random incluso con orden utilizando la cláusula order by y Así a su vez estamos mezclando distinto con order by Así que está bueno porque de esta forma estamos como mezclando de a poquito todo lo que venimos aprendiendo ya supimos seleccionar una columna eliminando datos duplicados
Y encima ordenándolas de diferentes formas así que me pone contento esto la verdad que viene avanzando bastante bien porque a ver si podríamos seguir con esto de order by tenemos varias formas más tenemos por ejemplo colate que para Cuando trabajamos por ejemplo con datos de diferentes idiomas o alfabetos tenemos y fecha para página los resultados tenemos using para utilizar una función de ordenamiento digamos y Case para ordenar los resultados usando condiciones pero son cosas que por ahora no vamos a ver excepto eso último que acabo de mencionar eso de condiciones no el Case condiciones porque
en sql obviamente al ser un lenguaje de programación tenemos condiciones Si yo Por ejemplo quisiera seleccionar tengo acá quisiera seleccionar de la tabla productos el nombre del producto que tenga el product ID 14 cómo lo puedo hacer o sea sí yo ahora viéndolo sé que es tofu pero si lo quisiera ser automáticamente Por ese equipo tuviera un millón de registros no quiero ir hasta Buscar el número 1 millón y bajar No no quiero buscar Búscame el nombre del producto con ID un millón 558.325 y que me lo muestra Automáticamente cómo hacemos o para filtrar por
nombre esto lo vamos a hacer con las condiciones Así que vamos a ver cómo son las condiciones que es uno de los apartados más importantes de sql porque las usamos para todo incluso para eliminar está hay un famoso meme de que si usamos el que es lo que usamos antes delate from products si nosotros ejecutamos esto se borra todo todo y si no ponemos las condiciones que en las condiciones del famoso Where Ok se nos Borra toda la base de datos completa la tabla en realidad toda la tabla completa y está el meme no hay
un montón de memes sobre eso Entonces hasta para eliminar productos tenemos que saber localizarlos los localizamos con las condiciones porque porque yo quiero eliminar el producto que tiene ID 15 lo puedo eliminar a ver el usuario se acaba de eliminar la cuenta nosotros no sé creamos un sistema y una red social y le damos al usuario a la opción de eliminar Su cuenta cuando eliminamos su cuenta tenemos que eliminar sus datos bueno elimina los datos del usuario 250.000 por ejemplo O al contrario quiere cambiar su nombre quiere hacer un cambio de su nombre quiere ahora
en vez de llamarse Lucas se llama Jaimito bueno cambiame el nombre a Jaimito en donde el ID sea no sé 250.000 entonces las condiciones nos permiten hacer Prácticamente todo Por eso tenemos que verlas a continuación Así que vamos con Condiciones bueno como verán antes de comenzar quiero decirles que cambie el color de fondo porque yo normalmente lo que hago mis cursos es quiero ambientarlos no el azul siempre es un color básico con el que arrancamos después continúan los colores más digamos rojos cercanos al rojo en este caso es Violeta Mientras más rojo sea el color
más oscuro más Dark más complicado y más heavy se pone la cosa ahora estamos en un nivel como Intermedio entonces por eso tengo este Violeta porque es algo tranqui pero ya es un poco más avanzado que lo que vimos al principio Entonces nada como que para ambientar dije Bueno Este es el color que para mí va Así que ahora con este contexto ya podemos avanzar con las condiciones acabo de volver pensé que te habías dado cuenta cuando entré pero bueno evidentemente no creo que me voy a quedar un rato mientras estás esta clase no por
favor después de que termines Esta clase me voy tranqui o sea Solamente porque me interesa esta clase un apartado preferido del curso hasta ahora por favor no me lo arruines es que realmente me interesa esta parte o sea No no es por Simplemente que me interesa Y sé que me sirve o sea incluso creo que hasta mis dudas pueden aportar al curso OK Bueno pero solamente te pido un solo favor un favor no interrumpas A menos que tengas una duda o algún comentario que aporte al curso Ok me Quedo callado ni me vas tiempo bueno
comienzo Entonces espero que no me interrumpas obviamente yo me quedo callado Ok bien perfecto la capacidad de poder utilizar digamos condiciones en consultas es vital porque esto nos ayuda a filtrar y encontrar datos específicos las condiciones en sql al igual que en cualquier otro lenguaje de programación básicamente lo que hacen es verificar que una condición se cumpla y en caso de que se cumpla y sea true va a pasar algo En los lenguajes de programación normalmente cuando una condición se cumple ejecutamos un código en sql si una condición se cumple puede traernos por ejemplo unos
resultados es decir algo así como por ejemplo devolveme todos los campos en donde el nombre sea Lucas Entonces internamente esto cómo funciona dice If nombre igual Lucas devolver resultado entonces va registro por registro Y en donde el nombre sea igual a Lucas te devuelves el resultado Como dije antes en sql manejar condiciones es algo increíblemente fundamental porque Bueno si yo por ejemplo te digo Mira Quiero que me devuelvas el nombre del usuario que tiene la ID 7 por ejemplo lo que hace esta consulta es decir bueno a ver vamos a buscar el usuario con la
i7 listo este usuario tiene una ID 7 Ok listo a ver el registro completo el nombre cómo se llama Lucas Ok listo Entonces el usuario con ID 7 tiene el nombre Lucas y nos Devuelve Lucas son importantísimas las consultas Pero cómo puedo hacer esto en este caso Este ejemplo por ejemplo puntualmente cómo lo puedo hacer De qué forma puedo trabajar con condiciones en sql Bueno la verdad que hay varias cláusulas y se puede trabajar de varias formas Así que vamos a comenzar se puede preguntar ahora No todavía no tengo que esperar mucho para poder preguntarte
algo hasta que se me cante Rey Háblame bien por favor Dale soy un alumno te voy A ignorar una charla hace poquito y esta remera que ya saben que es la primera remera que lancé en la tienda de alto en la tienda de alto este digamos esta tienda de ropa de programador pero básicamente la voy a mejorar con el tiempo estoy invirtiendo mucho y creo que las cosas de calidad tienen la mejor tela el mejor estampado quiero hacer las mejores cosas no me voy a quedar con algo básico quiero hacer algo muy bueno Obviamente con
esto lo ideal es avanzar A lo largo del tiempo pero esta remera básicamente la estrené Ok y observen esto porque esto es muy gracioso subí esta foto acá donde estoy bueno Nada hablando parte de la charla todo esto es la gente que vino al show todo y observan esto que lo tengo mejor en mi historia que lo tiré miren esto [Música] se les conocieron completamente o sea tiré una remera que es esta remera que está acá la tiré y se desconocieron Completamente sigue mirando Si agarraban a las piñas Pero saben que lo más gracioso ustedes
pueden decir terminó retráis Esto bueno si vienen acá y observamos esto acá lo publiqué En mi Instagram Porque se ve más completa se sacaron una fotito O sea no les importó nada y agarraron y dijeron Bueno me sacó bueno se estaban a trompadas un ratito y después van y se sacan fotos son a propósito vieron un premio Ok que no Sé por qué no lo traje y me olvidé de traerlo pero lo voy a poner allá atrás okay Así que en el próximo video del curso lo voy a poner por ahí seguramente tengo que ver
encontrar un lugarcito acá para la escena para Que aparezca Así que le voy a poner ese hermoso el premio es pesimismo Acá tengo una foto con el premio No creo que se vea Okay a ver si se enfoca esto no creo que se vea realmente no creo que se vea pero este es el premio Ah Se lo voy a mostrar Cuando venga la próxima vez ya el próximo video se los muestro pero es una locura Perdón perdón sé que me voy mucho Perdón me estoy yendo mucho de Mambo vamos a lo que nos compete condiciones
en sql Ahora sí lo que pasa es que esto lo hago para que el que está viendo miedo que si se quiere y que se vaya No pero bueno se ve que no se va con nada mientras estoy hablando el tipo sigue ahí observando todo lo que hago bueno ahora sí continuamos bueno Esto es lo Último que tenemos Ok lo que teníamos hace un tiempito vamos a borrarlo completamente la primer consulta la famosa cláusula Where que es la condición más común de todo sql la cláusula en realidad para trabajar con condiciones cómo funciona Bueno vamos
a ir por ejemplo a products bueno a ver quiero ver cómo Cuál es el nombre del product ID 14 no Entonces yo vengo acá y digo bueno a ver Select product name from products y acá básicamente si Ejecutamos esto no va a devolver los nombres solo el nombre de los productos ya saben estamos seleccionando solamente el campo nombre de producto de la tabla de productos O sea que solamente este campo que es el product name es el que se va a seleccionar listo acá lo tenemos perfecto pero ahora yo quiero obtener específicamente el ID repito
podría ponerlo acá pero voy a ir para abajo acá usamos la cláusula Where así se escribe Where ya que digo bueno a ver vamos a Obtener el campo product name es decir seleccioname solamente este campo de la tabla productos acá lo hizo pero ahora tenés que seleccionarme solamente los registros donde el product ID Ok sea igual a 14 Entonces ejecutamos esto y me dice apa ya me devolvió el tofu Por qué Porque lo que le estoy pidiendo se está cumpliendo me está devolviendo el product name que es el único campo que le pedí solamente le
pedí el name y me lo devolvió del registro en donde la Inicia 14 y recuerden que no hay no puede haber dos registros con el mismo ID es único entonces me devuelve esto yo le digo el del 12 me devuelve este si yo le digo el del 16 me devuelve este y ahora yo puedo decir otra cosa devolvermelo todo completo a ver qué es lo que me devuelve y me devuelve todo el registro completo Entonces vamos a ver todos los datos del tofu A ver vamos al tofu es el 14 el supplyer ID es el
6 o sea vayas a ver quién es el proveedor Número 6 la categoría 7 no sé de qué categoría es tofu pero vamos podemos verlo después Y dice Bueno básicamente el precio es 23,25 dólares por 40 a 100 gramos más o menos está bien esto nos puede también servir para un proceso inverso yo por ejemplo sé que el tofu se llama tofu inteligente no pero no sé cuál es el producto ID y no me voy a poner a buscar uno por uno porque yo puedo venir aquello a ver dónde está el tofu Hay un Montón
de productos pero no sé dónde puedo encontrar el tofu bueno ponemos acá y producto name sea igual a tofu Entonces lo estamos buscándolo por nombre y acá me devolvió Exactamente lo mismo por qué Porque yo le estaba pidiendo que me devuelva el registro en donde name sea igual a tofu ahora supongamos que yo tengo Mira la verdad que quiero comprar algo para comer pero no sé qué OK Pero tengo unos 40 dólares bueno mostrame Todas las opciones que valgan menos de 40 dólares y se las puedo comprar Bueno vamos a seleccionar de productos donde price
sea menor que 40 porque tengo 40 entonces puede ser menor o igual en este caso esto significa menor o igual así es menor que así es mayor que así es menor o igual que y así es mayor o igual que esto fácil esto es como matemática que matemática básica en este caso tiene que ser menor o igual a 40 le damos ejecutar y ahora nos está devolviendo todos los Productos que valgan menos de 40 acá podemos ver ven el precio y puede llegar a valer hasta 40 por eso el 40 nos lo devuelve a ver
si hay algún producto con 40 sí Este vale 40 acá pero más de 40 no y después nosotros decimos bueno a ver quiero que me muestres los productos más caros que más de 40 bueno tienen que valer más que 40 porque porque el precio tiene que ser mayor que 40 ejecutamos y bueno ahora me está tirando esto todos los productos Ok que sean mayores a 40 El Word básicamente sirve para eso o sea así como con el Select seleccionamos lo que queremos o sea seleccioname Campos qué Campos me quieres seleccionar Bueno te quiero seleccionar el
product name el ID Bueno ahora le digo seleccionar todos todos los campos seleccionamelos todos quiero que quiero tener todos los campos con el Where le decimos OK ahora seleccioname registros pero cuáles Bueno solamente los registros que cumplan con esta condición el campo price tiene que Valer para cada registro más de 40 Estos son operadores de comparación porque porque comparan valores por eso llaman operadores de comparación estamos comparando un valor con otro valor estamos comparando el precio con un número porque price para cada vuelta va a ser igual a esto o sea cuando esto internamente cómo
funciona va registro por registro y verifica que esta condición se cumpla entonces en el primer registro va a decir Ok a ver Cuánto 97 Entonces no lo devuelvo vamos con el siguiente Cuánto vale ese sentido Entonces no lo devuelvo y cuando valga menos de 40 lo devuelve no en este caso tiene que valer menos de 40 entonces si yo por ejemplo ejecuto este cuando llega el producto ID 9 va a decir 97 esto que está acá no es menor que 40 por qué Porque 97 Es mayor que 40 entonces no lo tengo que devolver porque
esto es como si dijéramos 97 y no me lo devuelve 62.5 número devuelve 81 número devuelve Entonces tiene que ser el precio menor que 40 lo ejecutamos y ahí podemos ver que antes el que era el ID 9 valía 95 no le volvía porque porque lo que hace es comprueba que cada registro compra la condición el registro que coincida con eso lo así como también podría modificar los datos yo por ejemplo esto lo voy a guardar pero voy a abrir la base de datos que teníamos antes Open dataz usuarios Acá está Rose Data tenemos esto
usuarios y turnos médicos usuarios tiene Seis registros turnos médicos tiene tres registros supongamos que yo digo bueno a ver la verdad es que este falso Por qué Y porque no puede haber dos registros Que tengan un horario a las 11:30 por la misma persona Solamente un turno Porque si yo Después te digo te tengo que cobrar te tengo que cobra dos turnos porque hay dos turnos Pero cómo si el esta persona vino una vez al médico vino una sola vez y se registró dos veces Okay eliminamos el registro Cómo podemos Eliminar específicamente este registro bueno
sabemos que es el 23 qué hacemos entonces venimos decimos Bueno delate okay from no hace falta poner el asterisco porque el delay elimina todo delate from turnos médicos Okay Where ID en este caso como era ID turno Ok ID turno sea igual a 3 Entonces si el ID turno es Exactamente igual a 3 me va a eliminar el campo de hecho primero vamos a seleccionarlo para que puedan ver la diferencia Select from turnos médicos Ahí corremos y ahí me lo seleccionó Ok acá estamos y ahora tengo la consulta anterior que la pego ya que lo
ejecuto Entonces esto lo que va a hacer es no se elimina el registro en el que esta condición sea verdadera Okay esta cumple no tiene ID Entonces lo va a saltar no va a hacer nada esta lo cumple no porque Lady turno es dos lo va a saltar no va a hacer nada esta lo cumple sí porque la ID turno es 3 ejecutamos Select from turnos médicos y acaba de desaparecer el Turno que no nos servía para nada y así podemos eliminar un registro específico con esto ahora supongamos que quisiéramos decir bueno a ver la
verdad que lo registre mal Ok puse que el horario de este turno era a las 11:30 pero en realidad no era las 11:30 me confundí eran las 10:30 o sea el doctor va a llegar a las 11 porque tiene que atenderlo en media hora después y en realidad debería llegar a las 10 porque el turno es a las 10:30 me confundí y Puse 11:30 Cómo hago para cambiarlo bueno usamos la consulta update recuerdan que les dije en el crudo create update delate bueno la web update update esta no la vimos antes pero básicamente con vamos
a actualizar una información Ok qué tabla vamos a actualizar bueno actualizarme la tabla turnos médicos quiero que me actualice la tabla turnos médicos el campo usuario set horario Y por qué lo quieres modificar horario Bueno quiero hacer que El horario ahora sea las 10:30 Ok porque dice que son las 11 y media pero a las 10 pero qué pasa si yo ejecuto Esto me va a cambiar todos los horarios porque porque está cambiando el horario de todos los turnos porque está seleccionando todos qué toca hacer entonces bueno tenemos que usar Word vas a modificar solo
los registros que cumplen esta condición el ID del turno es igual a 2 Entonces ahora yo vengo acá actualizo esta consulta y vamos a Verificarlo le damos en Select turnos médicos vamos a poner un punto y coma y ahí nos muestra el horario de hecho como acá primero ejecutamos la consulta y después mostramos la tabla acá yo puedo poner 12:30 ejecuto Y fíjate Hay cambio de vuelta pongo 10 30 ejecuto y cambio de vuelta ahí volvió a hacer 10:30 además de cambiarle Ok vamos a tirarlo para abajo esto así nos queda más ordenadito además de
cambiarle el horario Quiero cambiar el Motivo porque de repente el paciente me dijo no Además no era por dolor de cabeza era porque yo no sé dolor de muela Entonces el tipo va a venir dos aparatos para analizarme la cabeza y en realidad tiene que venir con algo para arreglarme los dientes por ejemplo no entonces coma motivo vamos a modificar también el motivo y el motivo a que va a ser igual y va a ser igual a dolor de muelas por ejemplo y ya está por qué Porque set nos pide las columnas y el Nuevo
valor Entonces es columna nuevo valor coma columna nuevo valor y después no hace falta la coma porque la coma es para separarlo esto nos quedaría así más o menos no ahí actualiza me la tabla turnos médicos los campos que me vas a utilizar son horario que va a ser 10:30 motivo que va a ser dolor de muelas y solamente Este cambio va a ser aplicado a los registros que tengan el ID de turno 2 Cuál es el registro que cumple con esa condición el segundo entonces Actualizamos y OK ahora me dice que es dolor de
muelas ya está y se cambió y así podemos trabajar con la consulta update para modificar los datos a lo largo del curso no vamos a trabajar con estas consultas con delate y con update por ahora porque no queremos andar modificando datos Lo importante es que entiendan Cómo acceder a eso porque es como tener modificamos todos los registros Entonces ahora que ya podemos aprendimos el Word quería mostrarles Cómo cómo funcionaba con el update y el directo Así que volvemos a la base de datos de antes acá me la guardé acá norwin debe Ahora sí Ahora sí
hagan una pausa en el curso vayan ustedes a probar un poquito jueguen un poco con el World a ver si aprenden a seleccionar por varias formas jueguen el Where y muevanse un poco manipulen un poquito ahí los datos y cuando lo hayan hecho vuelvan así continuamos con lo siguiente que son los diferentes operadores de Lógica o sea operadores lógicos no prueben Y si ya lo hicieron avanzamos con lo siguiente si tomo agua con gas y no no tengo 50 años cuál es el problema además de juzgarme porque me gusta la menta granizada me van a
juzgar porque tomo agua con gas pero soy Friki tranqui que eres un cachetazo Pues mira re violento bueno Vamos a continuar lo que nos está llamando por ahí es el operador and or y el not vamos a sacar esto y vamos a Darle Select products ejecutar y ahí tenemos esto para no quedarnos con la imagen de antes y ahora vamos a arrancar a trabajar con otros datos OK Vamos a hacer otra cosa que es bonita A mí me gusta mucho vamos a poner un World y vamos a hacer una condición antes y or no sirve
para aplicar varias condiciones O sea si ya entienden de lógica sabrán que el ant y el or sirven para decir que se cumpla este y este o sea o para que se cumpla este o este o sea Sis or cheese es decir condición 1 and condición 2 condición 1 es la que pusimos antes que antes poníamos por ejemplo product ID igual 2 y acá puede ser condición 2 por ejemplo qué sé yo product name es igual a otra cosa tienen que cumplirse dos condiciones Esa es la la estructura del anda no podemos poner varios han
dicho podríamos poner tres pero vamos a ir de a poquito que vamos a arrancar con este básico OK Vamos a Arrancar con los ejemplos vieron que a veces cuando ustedes van y hacen una compra les dicen Oh has sido el comprador número 1 millón has ganado un premio a mí particularmente nunca me pasó pero creo que entienden A dónde vamos no supongan que ustedes le quieren dar un premio al usuario número 50 al 55 los usuarios que se registraron entre el 50 al 55 van a ganar un premio o sea del 50 al 54 qué
hacemos bueno primero seleccionamos todo de customers acá si Yo lo corto esto tengo esto tengo los clientes perfecto ahora Quiero obtener desde el cliente 50 hasta el 55 Cómo puedo hacer Bueno vamos a usar el Where con las condiciones vamos a hacer esto para poder manejar rangos Porque si solamente ponemos una condición le podríamos decir a ver decime los clientes Que tengan un ID mayor a mayor o igual a 50 entonces acá me van a devolver los primeros No ya tenemos acá 50 51 52 53 54 estos son los Cinco Acá hay cinco registros que
son los que se ganaron el premio pero me están abriendo un montón más yo tengo que decirles que tiene que ser mayor a 50 mayor igual a 50 pero menor que 55 porque el 55 ya no gana un premio y solamente con una condición no lo puedo hacer tengo que decirle dos condiciones y ahí utilizamos en la condición 1 ya la aplicamos y ahora vamos a aplicar la segunda condición houstonera ID tiene que ser menor que 55 ejecutamos y ahí Nos devolvió los registros que queríamos acá vamos a utilizar la cláusula andt para poner dos
condiciones a esta consulta y que nos devuelva un Rango de registros esto es una forma muy útil y muy práctica para utilizar ant después tenemos el operador or el operador or lo que hace es toma una o toma otra si yo ejecuto estor me va a tirar Cualquier cosa ahí lo acabo de ejecutar de vuelta no tiene sentido porque esto me ha devolver todo Ok primero fíjense Esto me Devuelve primero del registro 50 hasta el 91 y después del 1 hasta el 49 Porque es esto porque lo que hace esto es bueno a ver primero
vamos a verificar que solamente los que sean mayores a 50 se cumplan Ok todos estos cumplen Esa condición hasta este y si no la cumplen también los vamos a mostrar pero tienen que ser menores a 55 y acá me muestra todos estos hasta el 49 o sea es la cláusula más estúpida que podemos poner el oro en Casos como estos Pero dónde Nos puede servir bueno supongamos que yo quiero seleccionar a dos empleadas no está la empleada and y la empleada Nancy por ejemplo no vamos a ir a empleados vamos a ir a la cláusulas
empleadas employs y vamos a ver quiénes están acá Bueno yo sé que hay dos empleadas que ganaron un premio no por ejemplo Annie y Nancy Entonces quiero seleccionar a ellas dos para que me muestren todos sus datos Yo sé que una se llama Nancy y otra se llama Ann entonces las quiero Seleccionar digo bueno a ver nuevamente la seleccionaríamos por el empleo ID Pero sabemos que no tenemos empleados que se repitan los nombres ya es un dato que lo tenemos de empresa no hay ningún nombre duplicado en Nuestra Empresa entonces podemos y me va a
devolver Nancy Ah bueno pero yo tenía que seleccionar a dos Cómo hago que pongo esto y además pongo otra más o cómo hago porque no no sé qué hacer no lo puedo hacer Bueno vamos a volver para Atrás tenemos que seleccionar a Nancy o a Annie entonces ponemos esta consulta y ahora ponemos un or si esta condición no se cumple verifiquemos que se cumple esta otra cuál bueno el First name puede ser también an y cuando lo ejecutamos nos devuelve estas dos por qué Porque la primer condición que puede cumplir es esta la cumplió listo
ah no pero esta que está acá no la cumple no pero es o esta o esta esta que está acá no cumple esta pero sí cumple esta y el segundo Registro no cumple esta pero sí cumple Esta es decir con que cualquiera de las dos condiciones se cumpla o sea con que esta condición o que esta condición se cumpla en la consulta me devuelve ese registro como Nancy cumplió una de las dos condiciones me lo devolvió como han la Otra condición también me devolvió si hubiera más registros que tenga alguna de estas dos condiciones me
devolvería más registros pero este es un caso como Ok no es como que seleccionamos hacia Los empleados nuestra compañía pero nada como que entiendan el uso aprendes un montón si prestas atención y justamente Esa es la idea del curso aprender recontra coincido Pero tengo una duda Ojalá que sea algo útil a ver decime indagando un poquito más en eso que estabas explicando me puse a pensar qué pasaría si mezcláramos un or y and en la misma consulta esto se puede hacer increíble que has hecho una buena pregunta Bueno le voy a explicar pero Cuando lo
explique por favor después de Mi aplicación no hagas ningún tipo de comentario Ok no voy a decir ni gracias gracias otra cosa interesante que también podemos unir Ok podemos unir el or y el and vamos a ver un ejemplo no es muy rebuscado pero lo vamos a ver suponente que yo quiero asegurarme que alguna de las dos condiciones se cumpla pero que si no se cumple ninguna de las dos que no sea se acuerdan que antes yo vimos la Función anda and sirve para hacer que se cumplan dos condiciones y o más incluso que todas
las condiciones que estoy poniendo que se cumplan pero si alguna no se cumple Entonces no va Bueno vamos a verificarlo supongan que yo voy a poner acá productos no vamos a ir a productos selecciona los productos Tengo estos Bueno vamos a hacer lo mismo que hicimos antes War donde el price sea mayor a 20 Perdón menor a 20 vamos a poner a 20 supongamos que queremos Productos que valgan menos de 20 dólares Porque no tenemos 20 dólares para gastar en comida hoy no tenemos Entonces vamos a decir que valga menos de 20 pero decimos Bueno
la verdad que si hay algo que vale más de 20 que puedo comer es lo que está en la categoría 8 porque la categoría 8 que yo no sé es vamos a ver qué es la categoría 8 la categoría 8 es de no la categoría 6 está la categoría 6 es de carne de ave y a nosotros nos encanta la carne de ave entonces decimos Bueno a ver puede ser menor a 20 dólares pero si vale más de 20 dólares solamente que sea carne de ave entonces decimos or categoría ID es igual a 6 Porque
la que nos gusta es la carne Entonces ejecutamos esto y nos va a devolver todos estos porque tienen un valor menor a 20 ven no hay ninguno que se pase ninguno de esto se pasó Ah no para Acá hay uno 39 dólares vale Ah pero tiene categoría y 16 o sea es de carne de ave Sí está bien lo pago Ah Acá hay otro de 123 dólares no cumple la condición Ah pero sí cumple la otra que tienen que ser de categoría Y di seis Ah entonces los únicos productos que valen más de 20 que
me van a devolver son los que tengan la categoría y di6 y si no tiene la categoría hay 16 tienen que sí o sí valer menos de 20 dólares y ahí con eso acabamos de verlo pero supongamos que ahora decimos Bueno pero para Además de eso and la condición que tiene que cumplirse sí o sí la que sí o sí se Tiene que cumplir Es que yo quiero que el suplayer ID sea 7 Porque yo solamente Confío en el proveedor 7 No pues tengo 15 proveedores por ejemplo pero solamente sé que el 7 me trae
la mejor comida entonces yo te algo que valga menos de 20 o de última si no vale menos de 20 que por lo menos sea de carne de ave pero la que tiene que cumplir Sí o sí tiene que ser que el supplyer ID sea 7 Porque el único proveedor tuyo que confíes en el 7 ejecutamos esto Qué pasó Ahí acá el supplyers uno Qué pasó y lo que pasa es que se está ejecutando esto por un lado y todo esto por el otro entonces las condiciones que se tienen que cumplir es que tenga la
categoría 6 y además el Suplay de ID 7 es o esto o todo esto junto me explico es si tiene que cumplir esta condición y si esta no se cumple puede cumplirse estas juntas O sea que tenga el categoría 16 y que además sea su playera i7 Pero si yo quisiera solamente unir estas dos Cómo Hago Bueno un paréntesis con paréntesis agrupamos entonces de esta forma le decimos Mira tiene que tener un precio mayor a 20 o categoría 16 o sea puede ser o esta o esta pero lo que tiene que ser obligatorio el hand
es que sea del proveedor 7 sí o sí sin importar la comida que me des que sea de proveedor 7 ejecutamos y ahora solamente y devuelve las de proveedor 7 que valen menos de 20 o que son de categoría ID 6 en este caso esta vale menos de 20 si tiene categoría I3 pero la que me cumple Yo sí es la del supley dice 7 y vale menos de 20 no me cumplió esta pero me cumplió esta yo le puse un honor Así que no hace falta que sean de categoría y 16 mientras valga menos
de 20 Ah pero esta vale 39 bueno no hace falta que valga menos de 20 mientras tenga categoría 16 tiene categoría ID seis y estas 15 no tiene categoría ID 6 Pero vale menos de 20 Entonces esta vez es o esta condición o esta condición la que es obligatoria es Esta que está acá y de esta forma podemos mezclar el or y el an y ahí nuevamente Los invito a ustedes a jugar un poquito con las pruebas los errores poner on are incluso háblele a chat gpt Dígale que les hagan un par de pruebas o
jueguitos para que ustedes puedan moverse y entender un poco Cómo funciona esto porque hasta que no lo lleven a la práctica no se entiende créanme Yo hasta que no lo lleva a la práctica No lo entendía Así que ustedes tienen que Llevarlo a la práctica para entenderlo es como un es humano el aprendizaje es un proceso activo no pasivo ustedes no aprenden bien no aprenden haciendo así que todo lo que vamos viendo hagan Ok hagan vamos a hacer algo más fácil Ok supongamos que yo tengo acá productos y ahora le voy a decir Che Mira
la verdad que quiero que me selecciones productos donde el precio sea mayor a 40 Esto me está devolviendo todos los productos que el precio es mayor a 40 o sea tienen que Valer más de 40 Sí o sí sino no me muestra ahora si yo quisiera lo contrario o sea negar esta condición que no me devuelva los productos donde el precio sea mayor a 40 o sea sí mayor a 40 nombre lo devuelvas Cómo hago Bueno le ponemos not lo niega o sea hace todo lo contrario lo ejecutamos y ahora nos devuelve los productos solamente
que no cumplen estas condiciones es como un Contrera che No hagas esto lo hace el precio tiene que ser mayor a 40 Ok not Cuánto tiene que valer algo más que 40 not siempre por favor mostrame los productos que valgan más de 40 not te muestra lo que valen menos para eso sirve la nota te niega una condición sabes como que la está negando vos decís esto no hace lo contrario lo ideal es utilizarla para cosas útiles Porque si yo por ejemplo acá te digo esto que está acá es lo mismo que decir fíjense esto
y poner invertir esta condición para invertirla Recuerden que para invertir Un mayor que se utiliza un menor o igual a entonces ahí fíjense que si lo ejecuto me da exactamente el mismo resultado me da 69 resultados y todos tienen la condición que le pedí y si lo hago al anterior de la forma anterior también me da 69 resultados y todos cumplen la condición o sea es lo mismo es exactamente lo mismo entonces es como medio estúpido usar not cuando se puede abreviar y de esta forma es como que tengo lo mismo entonces lo mismo pero
Más barato incluso Así que es medio al pedo así que vamos a aplicarlo a un caso útil les parece supongamos que alguno de nuestros clientes nos hackeó OK Vamos a ir a houstomers Ok Acá está seleccionamos todos los clientes acá nos aparece el país Qué pasa el cliente que nos hackeó provienen de Estados Unidos no sabemos que alguien de Estados Unidos no hackeó Entonces vamos a mandarle un mensaje a todos los clientes que no sean de Estados Unidos por qué Porque si Estados Unidos no hackeó así que vamos a hacer un filtro porque porque como
no queremos que le llegue a nadie de Estados Unidos vamos a sacarlos normalmente tendríamos que decir vamos a seleccionar los clientes donde country sea igual a France or country sea igual a dyn Mark or y así tuvieran tendríamos que poner todos los países que no son Estados Unidos tendríamos que armar algo recontra grande con todos los países que no son Estados Unidos O sea tendríamos Que decir que el country puede ser Francia o que el country puede ser Dinamarca o que el country puede ser México o el County puede ser Brasil y así con todo
se nos haría una condición relarga una consulta larga con muchas condiciones para eso simplemente usamos notas not country igual usa entonces ejecutamos y fíjense que ahora nos devuelve todo menos usa vamos a checarlo Si antes ejecutábamos esto el registro número 45 era de USA Bueno ejecutamos Vamos a ver el registro número 44 está el 46 no Por qué Porque ya no nos muestra los de USA ya no hay más registros de gente de USA acá están todos los clientes que no son de Estados Unidos de esta forma podemos utilizarla en este caso de una forma
de una manera útil porque porque no estamos haciendo algo irrelevante que lo podemos hacer otra forma más fácil no Para qué complicarnos la tanto si lo hacemos más fácil bueno Esto no en este caso Sí está Bien usada y estamos aplicando correctamente la cláusula not para negar una condición si no supiéramos Cómo usar esta cláusula tendríamos que poner muchísimos or que sería asqueroso con esto lo simplificamos muy fácil Este es un buen caso de uso ahora también Podemos mezclarlas cómo hacemos para mezclarlas con el and simple esto es una condición que puede ser una negación
no entonces va como que todo dentro del mismo paquete supongan sé que yo digo Que los que nos hackearon son de Estados Unidos o de Francia no sabemos O sea no queremos que le llegue a la gente Estados Unidos ni tampoco queremos que le llegue a gente de Francia Entonces vamos a decir and not country igual Friends que estamos diciendo con esto bueno Mira la verdad que si el país es usa no me devuelva ese registro Y si el país es Francia tampoco me vuelvo a hacer registro Y si yo le doy ejecutar ahora además
de dar además de eliminarme Los de Estados Unidos me elimina también los de Francia porque porque tiene que cumplir estas dos condiciones la condición tiene que ser que sea que no sea de USA Y además que no sea de Francia si yo acá le diera un or qué pasaría y Francia está igual y usa también porque ah no puede ser de USA Ah o sea que puede ser de Francia para que el not funcione correctamente porque es una negación si no es de Estados Unidos lo devolvemos a O sea que si me Devolviste un registro
que no es Estados Unidos ya puedes pasar o sea que Francia acá cumple esta condición porque porque Francia no es de Estados Unidos entonces pasa con que se cumpla esta o esta ya es suficiente Si queremos asegurarnos que no se cumpla ninguna de las dos va unan Ok a veces cuesta un poco entenderlo cuando utilizamos un not Pero quizás si no lo entienden es porque están viéndolo como si el not no estuviera véanlo con el not Okay Francia cumple esta Condición porque porque no tiene que ser usa y Recuerden que el or sirve para que
se para que nos devuelva un registro que cumpla con esta o con esta Y sí acá le estamos diciendo que no tiene que ser Francia o sea que si un registro es Francia esta condición no lo está cumpliendo porque sí es Francis Yo le pedí que no sea Francia bueno pero or devuelve si se cumple una u otra esta no la cumple pero aún así porque Francia no es Estados Unidos entonces me la vuelve Y me la deja pasar y es estúpida esta Constitución estúpida o es obsoleta Entonces le damos en ant Y ahí sí
me devuelve resultados que no son ni de USA ni de Francia y así es como podemos utilizar el not y elland combinados Incluso si se les cuesta un poco pueden poner así y así incluso también Así es válido entonces ejecutamos Y es lo mismo ven no hay problema con esto Mientras usted se sientan cómodos y a veces cuando tenemos códigos muy largos es una Buena forma legible no de ponerlo pero nada como ustedes mejor les parezca tengan en cuenta que si nosotros hacemos dejamos un espacio y ejecutamos Ok tampoco pasa nada O sea que ustedes
lo pueden intentar Pero esto no en todos los gestores dice así hay gestores de base de datos que esto sí les tira error Entonces nada entiendan que esto simplemente para ustedes y en este caso para sqlite de hecho al final de este curso vamos a ver algunas semejanzas y Diferencias con otros gestores vamos a ver si todo lo que hicimos en este curso se puede aplicar al 100% a otros y cuáles son las mínimas diferencias que tiene esquilate con otros gestores para que como ustedes salgan del puedan trabajar con pobre con my Secret y demás
Al mismo nivel que con esquite o sea si hay cosas que estamos enseñando que en otros gestores es un pelín distinta la vamos a enseñar Así que ustedes despreocúpense de eso porque lo ideal es Que salgan de acá entendiendo Cómo usar la mayoría no y no teniendo después errores o problemas pero bueno nada Así es como mezclamos not y además podemos usarlo de una forma muy ingeniosa se acuerdan que antes queríamos seleccionar al cliente que tenga el producto mayor o igual a 50 ant houstonera ID menor que 55 y eso lo que nos devolvía si
se fijan era estos cinco registros que eran los ganadores de estos registros ganaron un premio qué premio y Ganaron un y ganaron un premio por estar entre el cliente 50 y 55 Ahora qué pasa si es un premio que por ejemplo no está disponible en Germany cómo hacemos germani Es Alemania Lamentablemente llegamos a Bélgica hay United Kingdom a Argentina a Canadá pero no llegamos a Germany O sea a Alemania tenemos que excluirlo cómo usamos y un nos ponemos así y abajo pongo and not country igual Germany Entonces ejecuto esto y qué pasa Ya está cumple
todas las condiciones Por Qué Porque son registros que tienen un customer ID mayor a 50 Sí todos estos son mayores de 50 Pero además tienen que ser menores a 55 si son menores a 55 y además el país No tiene que ser Germany y ahora sí no Manny cuál es el problema que tengo cuatro registros y los ganadores son cinco Qué puedo hacer ahora porque la verdad es que yo quería seleccionar cinco ganadores solamente cinco pero no tienen que ser de Germany qué hago hago así 56 Ah ahí va Pero qué Pasaría si yo no
supiera que hay clientes de Germany porque yo técnicamente no debería saberlo Bueno a esto hay una solución mucho más óptima que andar haciendo esto porque si de repente el cliente número 55 no Estados Unidos y también el germani nosotros no lo sabemos automático no tenemos que andar cambiando 575 hasta encontrar al usuario no lo que se hace acá es sacamos esta condición y decimos bueno a ver ya está acá tenemos cinco registros No ya Está uno dos tres cuatro cinco no son de Germany no hay ninguno de Germany ya está las dos condiciones que tienen
que cumplir tienen que ser los cinco primeros registros a partir del 50 que no sean de Jordan Pero cómo hacemos para hacer que solamente nos salgan cinco Porque lo que queremos es un límite de cinco registros más de cinco registros no queremos para eso usamos la cláusula limit limit 5 ejecutamos y ahí nos devuelve 5 registros y ya está esta es La forma óptima de hacerlo Incluso si le decimos que además por ejemplo ant not country es igual a UK porque tampoco permite premios de unitedman entonces ahí está Ah pero Escuchar me olvidé Perdóname Tampoco
puede ser de Argentina okay Bueno tampoco puede ser de Argentina no importa esto se adapta y siempre nos va tirando a Tampoco puede ser de México bueno tampoco es de México y esto siempre se adaptar y siempre nos va a tirar los primeros cinco resultados Que cumplan estas condiciones Ah querés más condiciones no puede ser tampoco ni de USA ni de Francia por ejemplo Friends listo siguen saliendo cinco registros y acá tenemos a los ganadores de los premios excluyendo todos estos países no participan y Alemania ni Reino Unido ni Argentina ni México ni Estados Unidos
ni Francia y aún así tenemos cinco ganadores porque acabamos de incluir a todos los países que no participan Esta es una buena forma de utilizar y aplicar La cláusula limit 5 es muy útil es muy útil porque a veces decimos bueno a ver Mostrarme las primeras cinco publicaciones de esto allá de acá créanme que el límite es muy útil y nada ahora que la vimos es buena no es buena porque nos permite poner un límite si hay 255.000 consultas y se hace muy grande la consulta con límites decimos bueno a ver no quiero que me
devuelva 50.000 resultados Devuélveme los primeros cinco Número diez y yo con eso me conformo ya está así podemos aplicar ant y not Y encima la cláusula limit para limitar la cantidad de resultados que queremos recibir ahora vamos a hacer otra cosa más piola supongamos que un cliente viene a preguntarlos por nuestros productos listo hacemos un Select from products listo maestro toma acá tenés todos los productos ahora no dice no Bueno pero la verdad que la carne de ave no me gusta Ok bueno Not categoría ID igual 6 porque sabemos que la categoría 6 es de
carne de ave entonces ahí le devolvemos todos los productos que tenemos que no sean carne de ave ahí está la carne de ave ya no está dentro del minuto y le ofrecemos al usuario y ahora nos dice a ver quiero que me muestres los productos de mayor calidad que tengas los que son de mala calidad sacamelos y yo dalto sé que el proveedor 1 que es exotil liquid lo tenemos por acá es este exotil liquid Tiene el Suplay 1 este proveedor es malísimo no quiero mostrarle a mi cliente que me pide buenos productos algo que
me traiga este proveedor porque es malísimo Entonces qué hago Bueno vamos a escribirlo and not su Play ID 1 porque este proveedor me trae más los productos Entonces ya está ahora no nos muestra ni los productos que sean de carne de ave ni los que nos traiga el proveedor 1 ya está pero ahora el cliente se pone medio pesado y nos dice Y además tengo Solamente 30 dólares para gastar Ok and tiene que ser mayor a Perdón menor a 30 menor o igual a porque tiene 30 dólares ya vamos a darle 30 puede gastarlos Ahí
va Nos devuelve solo los productos que valen menos de 30 dólares listo estás conforme al cliente y de repente la basura nos dice Ah bueno pero son muchas opciones Mostrarme tres opciones a ver si si elijo más rápido bueno le mostramos tres opciones limit 3 Ahí está feliz maestro estas tres Opciones y las Baby dice no me gusta ninguna actualizame Ah pero son las mismas opciones autorizame Ah pero qué pasa son siempre las mismas tres entonces la basura de nuestro cliente quiere que le salgan tres resultados aleatorios OK Para que él pueda elegir más rápido
No porque conoces la ley la ley de hit dice que mientras más opciones tenemos para decidir menos tardamos eso lo expliqué en un vídeo de ux que hice de leyes de diseño de Interfaces y experiencia de usuario si vamos a un kiosco Y tenemos muchas cosas para elegir nos cuesta elegir pero si tenemos un chocolate y un caramelo elegimos o el chocolate porque es más rápido es más fácil elegir 20 chocolates diferentes tardamos más energía es lo mismo este cliente tiene 300 opciones pero no dice quiero que me des tres nada más porque quiero elegir
más rápido no quiero andar eligiendo entre miles de opciones Dame tres opciones así yo las Veo más o menos y elijo más rápido así que bueno le mostramos tres opciones pero son siempre la misma 3 cómo hacemos que sea aleatorio bueno Vamos a darle order by Random y de esta forma actualizamos esta consulta y ahí me saltan tres opciones Random que no son del proveedor uno exotic que es una bosta que no son carne de ave y que vale menos de 30 dólares y están ordenadas de forma aleatoria y nos devuelve solamente tres y cada
vez que actualizamos nos van A saltar siempre resultados que son diferentes siempre resultados diferentes para que el cliente pueda ver elegir te gusta esto esto esto esto Dame este Listo Ya está este fue le vendimos se fue a la bosta no vendimos nunca más ese cliente que tiene insoportable objetivo cumplido No sé si se dan cuenta pero vieron que yo le dije que durante el curso íbamos a estar haciendo ejercicios bueno los ejercicios en sql son tan fáciles como ir haciendolos acá Porque tenemos una base de datos gigantesca Y mientras les enseño Vamos haciendo ejercicios
estos son los ejercicios que yo les dije que íbamos a hacer para reforzar su su capacidad de aprendizaje estos ejercicios que estamos haciendo ahora prácticos nos sumen un montón les aseguro que este ejercicio acabaron de ver les abrió también la cabeza y dijeron Ah y se sienten que saben no miren que no es tan sencillo linda saber que aprendemos saber que Sabemos algo bien pone contento que sientan esa sensación que yo sentía alguna vez y de hecho la siento siempre porque yo aprendo cosas todo el tiempo nunca tenemos que dejar de aprender más que nada
porque nos quedamos obsoletos sino y siento que aprender cosas nuevas es tan lindo y estos ejercicios son una forma que vengo haciendo durante todo el curso que venimos haciendo ejercicios de ejercicio que les ayuda un montón a entender Pero bueno basta de hablar Vamos con lo siguiente Porque todavía nos queda mucho que aprender pero tengan en cuenta que a veces esto les puede fallar porque antes de avanzar quiero decirles que esto les puede fallar en algunos casos el primer caso en el que esto después tirar un error es en el sintaxis incorrecta si ustedes no
escriben las cosas correctamente puede lanzarles un error Así que atentos a eso si a ustedes les un resultado que no es el que ustedes están esperando es porque No hay nada incorrectos a la sintaxis es correcta pero están utilizando mal las herramientas hay un operador que no está donde debería estar o la lógica la están manejando mal Entonces ustedes hay algo que no coinciden no pero cómo cómo está devolviendo estos resultados si le pedí esto okay No te está devolviendo lo que vos le pedís porque esto no falla fíjate bien porque hay algo que está
haciendo mal otro error muy común es confundir el oro con el anda fíjense bien Cuándo Utilizar el or y cuando el Land porque a veces Puede que no nos termine de cerrar pero si a veces hay algo que no le sale y les cuesta y no les da como quieren revisen si ese olor si ese Lan o si es el not porque a veces mezclando estos tres pueden surgir inconvenientes no entonces Les recomiendo revisarlo si algo sale mal si a veces tienen registros que están incluidos que tampoco son los correctos fíjense Porque pueden también estar
utilizando not de Forma incorrecta cuando a veces utilizamos el operador not de forma incorrecta puede incluir registros Ok que no son los que deberían estar ahí entonces fíjense bien cómo lo utilizan lo mismo al revés una condición incorrecta si tienen condiciones que no son correctas pueden hacer que no les devuelva consultas que les deberían devolver Entonces siempre revisen bien la lógica de lo que están haciendo y bueno nada después Además de todos estos Tenemos operadores como like between y un par de operadores más que lo vamos a ver ahora OK Porque nos falta mucho por
aprender Así que vamos con esos operadores que la verdad que estoy emocionadísimo y estoy básicamente orgasmeándome para que podamos ir con esos porque yo quiero que avancemos porque hasta ahora perdimos un montón fíjense si les voy a mostrar al principio del curso no sé si lo hubieran entendido pero ahora no solamente que lo Entienden sino que además lo saben hacer ustedes y lo pueden llevar a la práctica y ya pueden trabajar con sql de una forma mucho más práctica pero todavía le falta bastante por aprender Así que vamos bastante en el curso es así venimos
bastante bien en el curso vamos bastante adelantados pero esto es como lineal o casi exponencial lo que van aprendiendo cada vez es mejor y es nos permite ser más cosas y potencia lo anterior O sea fíjense que si aprendimos A usar el Word potenciamos todo lo anterior aprendimos a usar el Land potenciamos todo lo anterior aprendimos el not mezclar las cláusulas y el límite y potenciamos todo lo anterior nos falta mucho todavía nos falta mucho así que sigamos aprendiendo que estoy emocionado por seguir con que vamos Bueno vamos con la siguiente cláusula para seguir trabajando
con condiciones te faltó algo mi querido dalto hay un operador que funciona Exactamente igual Que not Y es más común que en otro no existe un operador que sea Exactamente igual está muy seguro de lo que estás diciendo sea que operador te referís pero no es como estás diciendo lamentablemente no creo que te estés refiriendo al que yo me estoy refiriendo ya que yo me estoy refiriendo es al operador del signo de exclamación y el igual estás hablando de un operador de comparación que llamamos distinto de y no se usa para Exactamente lo mismo Dijiste
una boludez y si me lo permitiste lo explico ahora genial Bueno me quedo acá para escucharte siempre se aprende algo nuevo Me parece perfecto de hecho Gracias por mencionarlo ya que justo ese era el operador del que teníamos que hablar ahora en este apartado del curso Bueno ahora vamos a ver un operador bastante distinto que es distinto de juego de palabra no bueno primero vamos a borrar todo lo que ya teníamos en el curso ahí está En el curso acá en la consola bien como ya tenemos a nuestro querido amigo un fumable podemos realizar cualquier
consulta Como por ejemplo Select from customers Y si yo selecciono not country igual usa esto claramente acá Me faltó el weather Ahí va esto claramente me va a devolver todos los clientes que no son de USA pero como ya vimos si yo le digo así Este es el operador de distinto de básicamente un signo de exclamación cerrándose y un igual le doy ejecutar y Me devuelve lo mismo o sea no hay cambios es exactamente lo mismo Entonces cuál es la diferencia porque le dije este salame que no eran exactamente iguales Así que hay un motivo
bueno creo que la respuesta está jugando un poquito con lo que veníamos hablando y si se dan cuenta en los diálogos y en el curso ya se mencionó esto la diferencia es que al igual que or y ant not es un operador lógico mientras que distinto de quiero aclarar que cuando digo distinto de me Refiero a este operador Ok entonces como notes un operador lógico igual que ore y ant distinto de es un operador de comparación es decir se usa para comparar valores vamos a hacer esta tablita ya que estamos Ah una cosa que quiero
aclarar que mientras estaba editando el vídeo porque yo lo acabo es grabo edito y me di cuenta que nunca lo dije así que creo que es un buen momento para decirlo si vieron que al principio del curso hice un diagrama con la Notación de Chen y después cuando expliqué diagramas lo hice con esto es porque es más o menos lo mismo solamente que esta es una forma moderna de trabajar con el diagrama de Chen Solo que no es diagrama de Chen es simplemente un diagrama entidad relación Ok Sólo que no estamos utilizando anotación de Chen
estamos utilizando un enfoque un poco más moderno es igual cuando lleguemos un poquito más al final del curso lo vamos a ver pero nada no Está mal mencionarlo no porque por ahí dijeron pero cómodo me me mostraste el diagrama pero son diferentes formas Aunque hablás de lo mismo y bueno porque uno usa la notación de Chain y otro usa un enfoque un poco más moderno que es el que Bueno estamos viendo que vimos hasta ahí No Entonces nada para aclararlo por las dudas porque nunca lo mencioné y no está de más mencionarlo por qué entra
Paint bien entro a Paint porque me vine a poner una imagen porque vieron como yo Siempre dibujo bueno esta vez dije no voy a dibujar la verdad que no tengo ganas dibujar Así que para no andar dibujando me armé en mi casa esta imagen que no pueden negar que es una linda imagen como tu hermana bueno la diferencia entre un operador de comparación y un operador booleano Yo sé que digo booleano pero es booleano pero nada soy medio medio analfabeto para el inglés Así que ignorarme pero se dice buleano la diferencia entre uno para un
Operador booleano y un operador de comparación es la siguiente primero operador booleano es el operador lógico Ok a los operadores lógicos también se les dice operador uleanos de hecho a los operadores julianos se le dice operadores lógicos porque el nombre más que operador Lógico es operador booleano porque operan valores booleanos los valores booleanos pueden tomar solamente dos valores en este caso es true o Falls eso es programación básica lo sabemos Siempre es verdadero Force es falso representa la dualidad entonces volvamos a los operadores de comparación los operadores de comparación como están viendo lo que hacen
es tomar el valor 1 y con un operador lo comparan con el valor 2 es decir la estructura es valor 1 operador valor dos por ejemplo Select from products Where y acá viene el operador price mayor o igual a 10 Ahora si bien acá tenemos la operación en realidad lo que pasa es que lo que Estamos haciendo es comparar valor 1 con valor 2 y esto nos puede devolver dos cosas otro o false nunca se preguntaron por qué las condiciones funcionan bueno el Where básicamente lo que hace es nos devuelve un registro si al pasarle
este proceso es decir imaginen que price en cada vuelta de cada registro que va intentando analizar la condición va a ser igual a un valor esto funciona como si fuera un bucle OK Para verificar que todos los registros cumplan esta Condición porque digamos igual funciona así si yo le digo Devuélveme los productos que valen más de 10 dólares para que solo me devuelva productos con más de 10 dólares tiene que pasar por todos los registros y va descartando los que se dan cuenta que vale más de 10 dólares es decir en este caso nos devuelve
los que son mayores a 10 Así que En definitiva descarta los otros o sea básicamente analiza todos los registros y los que no cumplen la Condición Simplemente no los devuelve pero no es que no llega a tocarlos sí llega a esos y los descarta pero como los descarta bueno el valor de Price es igual al valor de campo price en ese registro o sea cuando vamos al primer registro price va a ser igual a lo que tenga en el campo si el campo de Price dice 30 lo descarta si el campo de Price dice 40
lo descarta porque porque price va a ser igual a cada valor en cada registro Entonces si la condición se Cumple es decir si es true va a devolvernos algo y si es false Es decir si la condición no se cumple no nos devuelve ese registro y va a comprobar que el siguiente registro cumpla la condición para ver si lo devuelve o no es decir va registro por registro para ver cuál nos devuelve y cuál no Y la forma para determinar si lo va a devolver es que esta condición tiene que ser verdadera si estos verdaderos
nos lo devuelve y ahí estamos trabajando con Valores booleanos Entonces cuando usamos un operador de comparación lo que nos devuelve es otro o falso si el resultado es true el Word nos devuelve el registro si el resultado false el web no nos vuelve el registro sino en el curso de python que ojalá que vengan del curso de python esto está muy claro o sea en el curso explicamos muy claro pasa con las condiciones Si ustedes llegaron hasta el apartado de condicionales esto que está acá funciona Exactamente igual es así es Muy simple esta aplicación pero
si no igual tranqui porque lo intentamos explicar con tiempo y con tranquilidad hasta que estamos bien no los operadores de comparación comparan dos valores y nos devuelven verdadero o falso si la comparación es verdadera es true si la comparación es falsa es false por qué Porque si la primer condición dice precio Es mayor que 20 y el precio es 2 no es mayor que 20 no se cumple la condición entonces falso y si es false No devuelve el registro si precio es 30 30 Es mayor que 10 Entonces si se cumple el registro la condición
entonces devuelve el registro ya está O sea que si es true lo devuelve si es falso no lo devuelve tenemos que entender que internamente esta condición es como si después se convirtiera en true o en false o depende el resultado final no ahora los operadores lógicos operan directamente con los valores voleanos o sea un los operadores de comparación nos Dan valores boleanos y los operadores lógicos operan directamente con valores booleanos es el ant funciona con valor 1 and valor 2 es decir se tiene que cumplir la condición 1 y se tiene que cumplir la condición
2 o sea si valoro nuestro y valor dos también es true nos va a devolver true si cualquiera de los dos o los dos son falsos nos va a devolver falsos porque eso sean dice Che A ver es rubia y es mayor a 18 Ok la dejo pasar a boliche así piensan algunos Para todas si cumple las dos condiciones va cierro y hay mayor a 18 la dejo pasar a boliche sin pagar ahora es mayor a 18 sí es rubias no no la dejó pasar a boliche porque para pasar si tiene que ser rubia y
mayor adicional tiene que cumplir las dos condiciones Si no es rubia ni es mayor a 18 ni hablar así funciona ya lo vimos ya lo entendimos eso Entonces esto tiene que ser true porque la comparación después se convierte en booleano como ya les dije Internamente cuando nosotros ejecutamos un operador de comparación es como si todo el texto todo el código después se convirtiera en true o Falls porque eso es lo que nos devuelve price mayor a 10 para cada vuelta del registro se va a convertir en true o en false dependiendo de lo que valga
price en el momento del registro Si estamos en el registro 4 y en el registro 4 price es 5 este price va a ser 5 si estamos en el registro 7 y price es 30 este price va a ser 30 y Cuando se haga la comparación esto se va a convertir en true One y esos valores son los que operamos acá por eso nosotros decimos cuando operamos con ant por ejemplo Select from usuarios o sea proveedores es igual a dos Entonces esta consulta dice el precio es mayor a 10 y el proveedor es 2 si
estas dos condiciones se cumplen nos devuelve el registro porque estamos operando con valor booleano y valor booleano or es lo mismo si se cumple esta condición o esta Condición O sea si esta es true o Esta es true te devolvemos true si las dos son falsas te devolvemos falso y si las dos son true te devolvemos true acá tenemos un ejemplo de consulta seleccionar todo de la tabla usuarios donde valor boleano 1 or valor booleano 2 y acá está not funciona así no funciona con valores booleanos en este caso es not true nos devuelve false
not Falls nos devuelve true quiero mostrarles algo si venimos acá y yo acá Pongo World not true esto nos devuelve false Y si yo acá pongo not Falls esto nos devuelve true Por qué Porque no hay condición en todos los registros Esto va a ser verdadero es decir fíjense que si yo pongo not Falls nos va a devolver todo vamos a achicarlo una vez más Si yo pongo false and false nos devuelve nada si yo pongo false and true tampoco nos devuelve nada Y si yo pongo true and true ahí sí me está devolviendo todo
porque para que esta condición corra Ambas tienen que ser verdaderas si yo acá pongo true or true nos lo devuelve si yo pongo false true no lo devuelve para que or no nos devuelva ningún registro tiene que ser false y false ambas falsas entonces no es lo mismo si yo le doy not Falls significa que es true porque no es falso o sea están negando que es falso y si estamos negando que falso es verdadero y si esto es así esto funciona World true nos devuelve todos los registros World Falls Nos devuelve ninguno sé que
esto es mucho para procesar Okay pero este es un curso sql en donde yo quiero que entiendan todo porque si no entienden estas cosas después realmente eso esto no explica ningún curso ningún curso en YouTube explica estas cosas y entiendan que no lo abandonen por la paja porque sé que es complicado lo acepto sé que lo acepto que es complicado pero si ustedes abandonan el curso por estas cosas no van a llegar a ser profesionales porque Esto no se explica en ningún lado Y si entienden las bases de esto ustedes pueden hacer muchas cosas el
día de mañana porque van a entender Con qué están trabajando y las bases fundamentales del código que está manejando entonces repasen este apartado porque es que es complicado repaselo y una vez que lo hayan repasado es decir vuelvan al principio de este de este fragmento y cuando lleguen a este punto de vuelta Ya están listos para continuar Y si lo entendieron de una lo felicito porque son parte del grupo de personas que lo entendió la primera felicidades ahora sí avanzamos como les comentaba los operadores de comparación comparan cualquier valor puede ser un booleano un número
un texto con cualquier otro valor un número un boleano un texto Si nosotros hacemos como hicimos antes y es seleccionamos por ejemplo round customers Where country diferente de USA esto nos va a devolver lo mismo todo Donde el país no se usa por qué Porque está comparando que el valor no sea usa Y si esta condición se cumple O sea si esto nos devuelve true nos va a doler los registros Entonces cuando vaya y diga a ver el registro 1 country va a ser igual a Germany Entonces esto es así esto es Money germani es
diferente de USA sí Entonces lo devuelve después va a ser México México es diferente de USA sí Entonces lo devuelve Y esto es igual con not si yo digo not country igual usa Esto es como si yo dijera not your Money igual usa esto es verdad sí porque porque no lo niega bueno acabo de borrar para dar una repasada pero En definitiva tienen que entender que son operadores que funcionan parecido pero que no son lo mismo porque uno es un operador de comparación y otro es un operador booleano es decir era la misma si decís
eso porque en realidad no entendiste nada no maestro Sí lo entiendo el tema es que cuando lo Llevamos a la práctica no deja de ser algo interno y casi simbólico porque cuando los utilizamos ambos nos dan el mismo resultado no déjame explicarlo mejor ahora sí explicar la diferencia entre estos operadores que si bien es mínima yo digo no es Exactamente igual Es decir si es muy parecido el uso pero no es Exactamente igual porque a pesar de que nos den resultados exactamente iguales el funcionamiento es distinto dos por dos es cuatro y dos más dos
También es cuatro pero no podemos decir que 2 por 2 funciona Exactamente igual a 2 + 2 porque aunque tengamos el mismo resultado del funcionamiento es diferente multiplicar no es sumar Aunque en este caso sea el mismo resultado es la comparación medio tonta teniendo en cuenta que la multiplicación si genera resultados diferentes en algunos casos pero quiero que entiendan que no es lo mismo un operador que otro solamente por haber llegado al mismo resultado sino Que el funcionamiento interno es bastante diferente de hecho fue a propósito el hecho de explicarles primero el y después Este
operador para que primero entiendan el Note después entiendan este operador y después entiendan Cuáles son las diferencias a nivel interno Y si ustedes llegaron al punto de aprender sql hasta el punto de poder entender la diferencia entre dos operadores que funcionan y nos dan los mismos resultados pero entender cómo Funcionan de forma interna y hasta la estructura del lenguaje podemos decir que ya estamos en una etapa un pelín más avanzada Así que lo que voy a hacer para el próximo nivel es cambiar un poco la luz porque siento que lo merece merece estar con la
luz Un poquito más arriba de hecho no lo notaron muchachos pero acá está el premio dice premio revelación Bueno lo dejo acá donde estaba Perfecto Bueno gente Ahora sí vamos con el siguiente operador que es El operador betwing que Estoy ansioso porque lo aprendamos a utilizar de hecho vamos a ver varios operadores más Vamos a ver between like y un par más así que vamos con esos aparadores que ya Oh me encanta porque estamos llegando un apartado del curso que nos acercamos a la recta final porque todos los cursos se mueren en los joints nosotros
no vamos a morir Ahí vamos a ir más lejos porque quiero que aprendan en serio Ese es mi objetivo que salgan de acá Sabiendo realmente sql y lo mejor de este curso es que si algo no se entiende o algo no se termina de no les termina de cerrar terminan entendiendo lo que antes no entendían por ejercicios que hacíamos en un futuro esos magnífico porque siempre se repasan cosas de temas anteriores para temas nuevos Entonces como es muy bueno así que bueno paro de hablar vamos de lleno con el siguiente operador que es bitcoin bien
Ahora nos toca trabajar con el Siguiente operador que es el operador bitcoin por otro lado Me gusta el cambio de iluminación siento que es un cambio fuerte de iluminación porque tira más al lado hard Ok todavía no es un rojo es decir no estamos en el nivel de llegar a un rojo todavía pero estamos en un casi rojo y eso para mí ya da para pensar Ok hay que concentrarse enfocarse y si lo de antes les pareció suave ahora arranca un poquito más heavy no por between como tal porque between like y los próximos Operadores
que vamos a ver van a ser bastante sencillos pero es una forma de decirles se viene el rojo Ok es decir se viene lo complicado pero no se olviden nunca de que no existen cosas complicadas de aprender sino que existen cosas donde necesitamos haber tenido mejores bases para alcanzar ese Conocimiento es decir no puedo aprender a potenciación si no se sumar pero una vez que sabemos sumar y multiplicar potenciales bastante simple una vez que Sabemos todo lo que ya vimos en sql betwin es bastante simple porque tenemos las bases sólidas y tenemos las bases fuertes
y si lo que vamos a hacer o no les cuesta es porque simplemente tienen unas buenas bases ya que este curso está hecho para eso así que contentos Pero eso no significa que no estemos cerca de la parte más Hardcore que es el apartado de los Jones a su consulta si todo ese mundillo así que bueno ahora sí una vez por todas vamos con otro operador que Nos va a hacer la vida más fácil que es el operador betwing es un operador de comparación que se utiliza para seleccionar valores en un Rango específico puede ser
utilizado con cualquier tipo de dato numérico texto siempre y cuando sea compatible con el operador seleccionamos todo de la tabla productos donde productos productos dónde voy a decirle que quiero seleccionar productos que estén en un Rango de precio determinado por ejemplo Que valgan entre 20 y 40 dólares si vale más de 40 No si valen menos de 20 tampoco es un Rango bueno normalmente lo que habríamos hecho en otra situación habría sido Word price mayor a 20 and price menor a 40 bueno se acuerdan que les comenté que esta es una forma de trabajar con
rangos El ant Bueno hay una forma mejor que es betwin en este caso es price lo mantenemos y decimos between 20 and 40 es le estamos diciendo que va a estar entre 20 y 40 los precios Ejecutamos esta consulta y acá nos devuelve todos los productos donde el rango de precios es entre 20 y 40 obviamente tiene muchos más usos no solamente es entre rangos numéricos de hecho casi el consumo Es el mismo con ant que combinen Así que tiene otros usos que son mejores incluso de hecho lo podemos usar también con ant si yo
acá por ejemplo digo ant categoría ID igual 6 creo que esto era carne de ave no bueno Esto se ejecuta Qué hace tiene que Valer entre 20 y 40 y además tiene que ser del categoría ID 6 es decir tiene que ser de carne de ave o sea esto corre por un lado y esto Ok corre por el otro lo mismo con un oro puede ser o una o la otra que cumpla cualquiera de los dos ya está bien entonces si vemos productos que por ejemplo valen 123 dólares decimos cómo puede ser si le dijimos
que esté entre 20 y 40 y porque usamos un no puede valer entre 20 y 40 o puede ser de categoría 6 cualquiera de las dos Condiciones está bien Lo mismo con la cláusula No si yo acá pongo not 20 a 40 esto lo que hace es devolverme todos los registros que no tengan un precio entre 20 y 40 Es decir me devuelve todos el not betwin es igual que el operador por defecto si yo hago esto esto funciona igual OK Porque la gracia de not es que not puede negar esto que está acá que
se va a convertir en un valor booleano es decir al ser un operador de comparación Recuerden que todo esto cuando se pase Por cada registro va a ser igual a true o va a ser igual a falso entonces para el registro en el que esto sea igual a true nos lo devuelve para el registro en el que esto sea igual a false no lo devuelve esto ya lo vimos Ok Es decir para cada registro depende la condición este esto se va a convertir en digamos un valor diferente entonces podemos decir not o directamente lo podemos
decir acá pero esto ya es otro operador tenemos el operador bitcoin y el Operador not betwing pero es lo mismo o sea es exactamente lo mismo que poner esto acá solamente que esto se llama operador not betwing y esto simplemente es un betwing acompañado con un not si yo le digo a alguien haceme un not be Twin técnicamente me hace esto Ok esto sin este not pero técnicamente yo le digo hacemos una negación del betwin me hace esto que es como algo diferente que en realidad a la hora de trabajar en la vida real ni
se habla de estas cosas es Como es lo mismo o sea no importa si es not price between o price no es la misma realidad pero que sepan que están las dos posibilidades solamente nos sirve para seleccionar Rango de números porque si no sería muy estúpido también nos sirve para seleccionar fechas si yo por ejemplo vengo a broads Data vamos a buscar algún campo en el que haya fechas acá tenemos Okay Birthday es un digamos campo que tiene formato fecha año mes día si nosotros quisiéramos buscar entre Nuestros empleados empleos yo esto lo saco y
ejecuto acá vemos que nos devuelve esto el Birthday lo que tenemos que filtrar yo quiero encontrar a los empleados que tengan una fecha de nacimiento que haya nacido entre el 60 y el 70 por ejemplo Entonces yo digo Bueno Where date between 1009 60 en este caso vamos a ponerlo así 1960 guión cero guión 1 and 196 perdón 1970-0-1 y ahí tenemos la consulta yo Esto lo ejecuto y me devuelve las fechas porque porque esto entiende el formato este tipo de formato es un formato que aunque sea texto porque si no deja de ser texto
eh o sea es un texto sql lo interpreta como si fueran fechas y dice Ah ok me está pasando un año un mes y un día Ya está ya entendí entonces te puedo hacer esta búsqueda si nosotros en vez de encontrar gente que haya nacido entre el 60 y el 70 quisiéramos Buscar gente que haya nacido entre el 50 y 60 Nosotros tendríamos esto toda la gente que nació entre 50 y el 70 porque between no sirve para Buscar fechas ven que es útil esto lo podríamos hacer con el and a ver vamos a chequearlo
si yo pongo Where birthdate sea mayor a esto and Birthday sea menor a esto esto lo ejecutamos y a pesar de que nos devuelve el mismo resultado porque se puede comparar también con el and no me van a decir que todo esto es más corto y más abreviado que esto realmente no en Términos de eficiencia son casi lo mismo es decir no no hay diferencias de rendimiento pero se suele no se olviden que se suele utilizar el operador correcto para cada caso como en cada herramienta de programación Entonces si tenemos betwing y nos genera casi
un resultado como anda pero bitwing es un emperador específico para manejar rangos entonces trabajemos con bitcoin Porque además mejora la elegibilidad del código y recuerda La estadística que siempre Les menciono el 10% del tiempo lo pasamos escribiendo código es decir si nosotros estamos desarrollando cualquier cosa Solamente el 10% del tiempo estamos escribiendo código el resto estamos simplemente leyéndolo es una Data para que tengan en cuenta ya lo dije muchas veces pero se las vuelvo a repetir Entonces si vamos a estar la mayor parte del tiempo leyéndolo el código escrito tiene que ser bueno así que
vamos con el siguiente operador que es un operador Que para mí también es muy interesante y este sí es muy utilizado más que between incluso y es el famoso Pero quizás lo han escuchado ya like Sí el operador like antes de pasar a like una cosa que quiero Resaltar es que bitcoin incluye los valores límites esto y esto también están incluidos es decir si yo le digo que me pase por ejemplo rangos entre el empleo y ID 2 y 4 los límites están incluidos es decir el 2 se incluye y el 4 También betwing incluye
los límites y Otra cosa que está casi me olvido el valor 1 no puede ser mayor al valor 2 es decir si yo acá pusiera entre 6 y 3 Esto me va a volver cualquier cosa OK Porque es del menor al mayor el primer valor tiene que ser el menor y el siguiente tiene que ser el mayor si yo acá pusiera tres y tres es como si solamente dijera tres entonces me funciona Porque los límites están incluidos pero no puede estar por delante el número más grande porque no nos va a devolver nada Y por
Último no podemos buscar entre tipos de datos que no sean compatibles si yo busco por ejemplo una fecha y hago esto y esto Esto no va a funcionar ni aunque lo cambie de lugar esto no funciona y si funciona nos tiran errores porque está tirándonos cualquier cosa porque solamente podemos comparar con cosas que sepamos que funcionan como nosotros estamos esperando acá Me está doliendo alguien que nació el 28 los que nacieron el 58 y realmente no está funcionando Entonces técnicamente se comporta como estos no queremos si yo acá le dijera 1950 sé que tampoco me
devuelve nada porque porque genera un comportamiento inesperado entonces manejen tipos de datos compatibles y es una técnica muy usada para trabajar con números boleanos es decir si nosotros tuviéramos una columna booleana hay algo que no les dije de los boleanos en sql la forma estándar de trabajarlos es con ceros y Unos porque nosotros ponemos true Okay true y ponemos false es una forma clásica siempre la ponemos true y Falls y también siempre la ponemos Pero si yo acá digo true esto no selecciona todos los resultados porque la palabra reservada true le indica que es un
valor positivo es decir true pero es cero el término correcto Perdón es uno el término correcto yo ejecuto Esto me ejecuta lo mismo porque true Es como decir uno y cero Es como decir false es Como los números binarios 0 es no pasó de corriente y uno es paso de corriente Esto es lo mismo cero es false uno es true Entonces esto también lo podemos hacer funcionar con esto Si yo hago por ejemplo cero and cero Esto me devuelve nada uno Esto me devuelve todo con el oro esto funciona y ahora que le doy los
dos cero Ninguno me corre y si le doy not 0 me devuelve todo porque están negando al falso o sea que es true Y si le doy uno está negando al verdadero entonces me devuelve falso entonces between se puede utilizar para por ejemplo manejar valores booleanos si tuviéramos una columna boleana booleana Perdón yo sé que digo booleano noble es decir booleano con una booleana podemos decir que between en este caso es columna booleana betwin 0 and 1 y de esta forma estamos seleccionando todos los valores booleanos Pero nada no lo vamos ahora porque no tenemos
ese tipo De columnas pero es interesante que también lo pueden saber Repito no para de tirar fax por todos lados Ahora sí vamos de una vez por todas con el operador like el operador like Es un operador también de comparación que se utiliza para buscar y filtrar obviamente registros en función de ciertos patrones de cadenas de texto el operador like en sql es como las expresiones regulares o sea se parece a las expresiones regulares en el Sentido de que ambos permiten digamos buscar y filtrar datos mediante digamos patrones de texto sin embargo like es mucho
más simple y limitado en comparación a las expresiones regulares like permite realizar búsquedas de texto parcial utilizando algo que se llama comodines así le dicen comodines o mejor dicho carácter comodín en otra base de datos tenemos muchísimos es decir en pobre y demás tenemos muchísimos comodines pero nesquiu light tenemos dos Algunas bases de datos los agregan se acuerdan que les dije que algunas veces tienen diferencias con otras bueno algunas como que agregan más al final del curso Igual cuando veamos las diferencias con las diferentes bases de datos vamos a entender las diferencias que hay con
cada una para que puedan adaptar si no vayan en bolas por defecto utilizar un like Es Exactamente igual que utilizar un igual Last name like fuller Ok esto que está acá si lo Ejecutamos de volver fuller Pero si yo pongo un espacio ya no nos va a devolver fuller Ok es Exactamente igual que un igual es como si pusiéramos esto like funciona así Ok es como un igual es parecido Ok Cuál es la diferencia entre el igual y el like bueno la diferencia es que tenemos estos comodines o sea estos caracteres especiales que nos permiten
hacer diferentes cositas el primer operador el primer comodín Perdón que se puede utilizar el like Recuerden Que son dos tenemos el porcentaje y el piso o el guion bajo como le quieran decir si yo tengo el porcentaje este signo de porcentaje significa que no hace falta que arranque con lo que ponga después si yo pongo porcentaje fuller significa que puede haber cosas antes de hecho si yo por ejemplo pongo uler si yo pongo esto Esto no me va a funcionar porque es como un igual si yo pongo la r no me va a funcionar pero
yo pongo el porcentaje y la r ahora me devuelve este Apellido me devuelve este este registro Perdón por qué Porque le está diciendo a ver tiene que haber una r al final o sea va a terminar con una r pero antes puede haber cualquier cosa efectivamente termina con una r y antes puede haber cualquier cosa lo mismo al revés yo puedo decirle puede arrancar con una F y terminar con cualquier cosa y efectivamente arranca con la F y termina con cualquier cosa Recuerden que acá puse una F minúscula porque slide no es Case sensitivo es
decir no es sensible a mayúsculas y minúsculas yo puedo poner esto por ejemplo con minúscula que igual me va a tirar lo mismo pero en algunos gestores de datos Esto no es así y la recomendación por defecto es trabajar con los datos correctos Yo acá debería poner la F con mayúscula porque en algún objeto de base de datos Y cuando trabajamos con algunas integraciones con programas en la vida real lo normal es si una es mayúscula unas letras Mayúsculas las ponemos mayúsculas una letra minúscula La ponemos en minúscula trabajar las cosas como son okay Entonces
hasta ahora entendimos que like Es como el igual pero si usamos el porcentaje podemos decir arranca con esto y puede terminar con cualquier cosa así como también podemos decir con arranca con cualquier cosa Pero tiene que terminar con r y Qué pasa si yo pongo porcentaje a los dos costados le estoy diciendo con tengo una r está todo Bien o sea puede tener una r en cualquier parte y sí lovering tiene la r acá antes de la r puede haber cualquier cosa y después de la r puede haber cualquier cosa como cumple con la condición
lo devuelve de esta forma estamos como que verificando que tenga esta letra si yo acá quiero que tenga la e y la r me va a durar solamente dos registros Por qué Porque los únicos que tienen la e y la r son fuller y left antes de la e y la r puede tener Cualquier cosa y después de la e y la r tiene que tener cualquier cosa Pero tiene que encontrar estas dos letras juntas la e seguida de la r después lo que sea antes también pero tiene que estar Esto entonces técnicamente entendimos que
uno de los comodines es el porcentaje ya no se puede usar para más nada se puede usar para esas dos cosas para verificar que una cadena empiece con algo que una cadena termine con algo o que contenga algo para Verificar que empiece con algo lo hacemos de esta forma ponemos solamente al final en este caso que empiece con f listo cumple la condición si yo quisiera verificar que termine con pongo primero el porcentaje y después con lo que termina termina con la r lo ejecutamos lo sigue devolviendo Y si queremos solamente verificar que contenga esa
letra esa palabra lo que queramos doble porcentaje No pasa nada volvemos a ejecutar además a veces es un Error de display que lanza sin sentido y de esta forma chequeamos que el registro en la columna Last name contenga una r si quisiera verificar que tenga una u pongo la u y me salta todos los que tienen u si quiero fijar que tengo una a ahí me saltan todos los que tienen a si quiero que tenga una x no hay ninguno Okay no hay ninguna persona que en su Last name tenga una x así funciona el
operador like en conjunto con su comodín porcentaje pero también Recuerden que Tenemos otro comodín que es el guión bajo Cómo funciona el guión bajo bueno se acuerdan que antes estaba fuller supongamos que yo les digo esto tienen que devolverme los empleados que tengan seis letras en su nombre y que arranquen con la F y terminen con la r Bueno hacemos esto 1 2 3 4 estamos diciéndole que tiene la F4 caracteres después 1 2 3 4 y termina cierre ejecutamos esto y nos devuelve fuller porque esto que está acá significa cualquier cosa no importa lo
Que venga cada uno de los guiones hace referencia a un carácter supongamos que yo sé que arranca con full pero no sé cómo termina digo Uy arranca con full cómo termina Esto bueno calculo que puede tener algo después sé que tiene dos letras después punto punto dos letras y si yo dijera no no tiene tres letras son tres y ya no me devuelve más porque porque le estoy diciendo es un full y tiene otra letra otra letra otra letra y no en realidad no tiene tres Caracteres más tiene solamente dos Entonces lo borramos y ahí
lo vuelve a devolver esto es más útil cuando en realidad sabemos parte de algo y Simplemente no lo encontramos o cuando queremos asegurar la cantidad de caracteres Porque si yo por ejemplo pongo Esto me va a devolver full Pero si yo digo no no quiero que tenga solo un carácter más porque con esto nos devuelve todos los registros que arranquen con full Pero puede estar Fully fulanito puede haber un montón de full pero solamente sé que hay un full con un solo carácter me va a devolver el full con un solo carácter ejecuto y ahí
me lo devuelve porque no me lo devuelve y porque no hay ninguna ningún registro que tenga cinco letras arranque con full y después le siga una full tiene seis letras ahí agarro y de esta forma aseguramos que una cadena tenga una cantidad de caracteres lo mismo con el huler supongamos que yo sé que se llama Que en el medio tiene una u Ok tiene una u ahí está la f u l l e r actualizo y me lo devuelve por qué me devolvió también el suyama y bueno porque cumple la condición Cuál es la condición
tiene que haber solo un carácter adelante de la u solo uno no puede haber Ni más ni menos uno tiene la s listo es un carácter y después de la u tienen que haber uno dos tres cuatro caracteres y a m a 4 caracteres también cumple la condición acá tenemos dos registros Que cumple la Condición y también se pueden mezclar yo puedo poner Dame un nombre que tenga una u y que tenga cinco letras al Entonces yo digo Bueno tiene cinco caracteres y después que me devuelva lo que quiera entonces si hay más que me
devuelva más es un carácter un carácter la u también tiene la u como segundo carácter y después le dije 1 2 1 2 y después lo que sea perfecto cumple con la condición entonces también lo devuelve de hecho ya que acá lo hubiéramos pasado un carácter Extra en vez de devolvernos estos dos Perdón Es uno más No sabría devuelto este porque es el único registro que tiene algo seguido de una u seguido de siete letras si bajamos a 5 después nos devuelve los de antes así es como funciona este comodín que es el segundo comodín
estándar del operador like ven como estamos aprendiendo un montón Ya vimos en un saque el operador bitcoin y el operador like la verdad que son golpes de realidad hermosas que decís Ah Con razón porque yo la única forma que tenía de verificar que una persona tenga algo solamente poniendo exactamente el campo pero no sabía cómo hacer para verificar bueno Esta es la forma Ok con bitcoin buscamos entre rangos y con like podemos hacer una especie búsqueda por patrones de texto porque esto es un patrón de texto Cuál es el patrón una letra después tiene que
haber una u y después tiene que haber cinco letras si yo hiciera este patrón tiene que haber Una letra una u y terminar con otra letra pueden ser cualquiera Eh pero en el medio tiene que haber una u Ese es el patrón este por ejemplo es otro patrón Cuál es el patrón arranca con la f termina con lo que sea es un patrón si hubiera otro nombre Como por ejemplo Fausto también lo cumple porque porque arranca con la F y termina con lo que sea como le dije también se puede mezclar Pero bueno esto ya
es tema para que prueben ustedes repito yo siempre lo Mismo prueben un poquito porque el aprendizaje No es un proceso pasivo sino que es un proceso activo para aprender es más probable que entiendan todo y asimile mucho mejor después de que ustedes hagan sus propios ejercicios entonces pongan pausa este video vayan a ejercitarse un poco no hacerse la manola sino que a jugar un poco con la manito para hacer que esto sea realidad después si le sale bueno jueguen con la manera no hay problema pero por lo menos habrán Tenido esto resuelto Así que una
vez que tengan esto listo y lo hayan entendido avanzamos con el siguiente operador mínima aclaración antes Recuerden que esto también se puede utilizar con not like not Last name lag and y poner Otra condición Ok podemos usar or esto obvio cada operador que trabajemos de comparación lo podemos mezclar con los valores los operadores lógicos Perdón Porque todos los operadores de comparación nos devuelven valores y los Valores booleanos pueden ser operados por los operadores lógicos que son and Or Not y después de después del que vamos a ver ahora vamos a ver otro operador lógico más
así que vamos con el siguiente operador el siguiente operador es el operador is null o is not null son dos operadores que es muy sencillo la verdad O sea si yo por ejemplo devuelvo acá la tabla productos order by order by product ID Ahí va desk Esto me devuelve primero los Nulos Por qué y Porque primero siempre me va a devolver los resultados que son nulos que en realidad esto no es así porque en realidad los nulos se devuelven primero con el As Y en este caso solamente por producto ID porque me lo devuelve de
forma descendente Así que deberíamos poner product name Y ahí sí En realidad lo está devolviendo porque devuelve los números primero por la regla de jerarquías que vimos al principio ahí tenemos los nulos Ok Es Una diferencia entre lo que acabo de hacer recién y lo que mostré antes no nada pero solamente quería que se cumpla regla para que recordemos un poquito que lo cuando usamos la forma ascendente por defecto los null se muestran primero pero supongamos que esto tenga que cumplir condiciones OK Vamos a poner las condiciones las condiciones van antes del order by no
se olviden la verdad que me molesta un poco que aparezcan nulos sabes que no me gusta porque los nulos Son complicados de trabajar algo nulo es algo que no está del todo definido por la base de datos entonces no quiero que me devuelva los valores nulos Bueno vamos a verificarlo entonces name is null Entonces en este caso me voy a devolver solamente los valores en los que product name sea nulo y así como le decimos is null le podemos decir is not null y ahí nos devuelve solo los que no son nulos no hay valores
nulos la verdad que no es más que eso simplemente es Como decimos Che Devuélveme los valores que no sean nulos y acá puede haber un chiste porque también es is not null o es is null y not Brown name is nulos es como podemos jugar un poco con el no todo el tiempo dicho podríamos poner un not acá y un not acá y esto que está acá es como matemáticas literal negativo menos negativo es positivo ven me devuelve los dos si saco el negativo y saco el negativo es decir Tacho lo mismo signos por los
que multiplico me Devuelve lo mismo matemáticamente funciona igual pero se entiende no que aquí se referirme a que es matemático y que si lo vimos en la escuela acá también funciona seguro ni se acuerdan de lo que estoy diciendo Pero no importa lo dejamos pasar porque este punto del curso de hecho para limpieza de datos es muy usado porque le decimos Che la verdad que devolverme los valores nulos y podemos ver Cuáles son los valores que están nulos dentro de nuestro nuestra Tabla no Entonces ahora que ya medio que vimos bastantes operadores que vamos adquiriendo
un poco de experiencia que ya estamos aprendiendo cosas nuevas rápido así así como si nada cosas que deberían tardar más tiempo en aprenderse las aprendemos rápido porque ya tenemos más calle estamos en una sección que es a punto de iniciar la avanzada y Tenemos calle lo tenemos que ir por lo entendemos y lo entendemos rápido y eso no pone contento pero todavía falta lo Más complejo de sql que es el apartado de la subconsultas pero para entenderla su consulta se entender eso tenemos que ya meternos en el apartado De relacionar las tablas es decir tablas
relacionales y entender bien cómo funciona Este modelo de relaciones se acuerdan que antes hablamos del modelo entidad relación que parece que no nos servía para nada el que explicamos con Paint es decir si buscamos esto en Google nos salta esto que es literalmente con lo Que estuvimos trabajando y operando no sé cuál de todos habíamos visto pero esto literalmente es con lo que Estuvimos viendo o sea estuvimos como un apartado no sé cuánto tiempo entendiendo Cómo funcionaba diagrama bueno se acuerdan que explicamos lo que era la foráneas las llaves primarias es decir la forense y
las primariquis Bueno al fin les vamos a dar uso pero antes vamos a dar una pequeña introducción con el siguiente operador que es el operador in Ok el operador Inn es un operador de no ojo ya no es de comparación es un operador lógico por eso ya vamos para meterlo directamente en otro apartado pequeñito okay Porque es otro operador lógico porque solamente hasta ahora lógico vimos tres and or y no Ahora vamos por un cuarto entonces creo que se merece una pequeña sección y sobre todo cuando es la introducción a la subconsultas Así que el
próximo operador que vamos a ver es el operador in y es La introducción a las subconsultas supongamos que tuviéramos que seleccionar los productos de los proveedores 3 4 5 y 6 Bueno vamos a hacerlo Select from products Where supply ID igual 3 and suppyright ID igual 4 y lanzamos así 5 6 todo este código para una consulta lo ejecutamos y bueno evidente Ah porque no es Perdón perdón el boludo quiere enseñar algo que explica cualquier tonterías Bueno ahí va es algo básico que decimos bueno a ver Puede ser o del proveedor 3 o del proveedor
4 o del proveedor 5 o del proveedor 6 si no es ninguno de esos proveedores no lo devuelve entonces ahí vamos a ver solamente de estos proveedores tenemos el resultado y es este que estamos viendo pero qué pasaría si tuviéramos que poner una condición una tras otra o sea tenemos que chequear que haya 35 or todos estén correctos sería un lío bueno el operador y medio que viene a solucionar esto no porque es Como una abreviación al operador que a su vez es un operador Lógico es decir ambos son operadores lógicos pero sobre lo que
viene siendo una tupla no que es como un sobre un conjunto de datos vamos a verlo en vez de hacer esto Yo siempre digo World su Player ID in 3456 actualizo y esto me devuelve exactamente el mismo resultado pero de una forma más abreviada por qué porque le estoy diciendo el supplyer ID de cada registro o sea del registro que estás Analizando porque Recuerden que esto va registro por registro cuando le pasamos una consulta esto para devolvernos los registros que nosotros estamos queriendo consultar o sea si queremos que nos devuelvan la gente mayor a 18
pasa por todos los registros entra en la entra en la edad y si es mayor a 18 lo devuelve pero hace eso con no con todos a la vez lo hace uno por uno como si fuera un bucle bueno Esto es lo mismo acá Ok suppyright ID va registro por registro y Toma el supplyer ID de cada registro si el Suplay de estrés se fija a ver tres está en estos valores puede ser o este o este o este o este y como tres está lo devuelve si el supply de 7 dice a ver 7
hagamos de cuenta 7 está en 3 4 5 o 6 no en este conjunto de datos en este esta especie de tupla Ok no está no se encuentra Entonces no devuelve el registro y así funciona esta cláusula Inn se puede utilizar en la cláusula Select en update y en delate voy a Seleccionar a los empleados en plugins Yo quiero seleccionar a fuller y a King Ok digo Where Last name igual fuller or Last name igual King esto lo ejecuto y me da esto pero yo tranquilamente podría ser esto y puedo decir in fuller King cierro
esto y cuando lo ejecuto me devuelve lo mismo porque sí cuando este registro hace una comparación esto es técnicamente fuller y Dentro de este conjunto de datos podemos hallar a este dato lo mismo que abajo Así es como Funciona para cada registro este valor va a ser igual a Last name en el registro o sea si estamos en el registro 2 va a ser igual a fuller estamos en el registro 30 va a ser igual a King y esos van a ser los registros que va a devolver Porque esos valores los encontramos en este conjunto
es una forma de abreviarlo Ok es una forma de decirle esto que está acá puede ser igual a esto o a esto o a todos los valores que pongas a continuación puede Ser igual a lo que quieras okay pero si está dentro de estos valores te lo devuelvo y también tenemos la forma de negarlo como ya vimos siempre nota ahí está medio metiendo presión con un not Recuerden que puede ser no normalmente los operadores los ponemos con mayúscula not-in Ahí va y ahí sí no funciona Porque porque ahora nos devuelve lo contrario no nos devuelve
los que sean fuller o king nos devuelven todos los que no sean fuller o king y también Podemos ponerlo adelante el not-in o el in con un nota delante es decir con una negación funcionan Exactamente igual pero es más común usar not-in Ok Recuerden que el not siempre se utiliza al lado del operador es not betwing not like no y así es más común no pero no es no está mal utilizar acá adelante no es lo mismo o sea realmente no hay solamente que para mí es más legible por lo menos hasta por los colorcitos
que nos ponen que son azulcito como verlos Juntos para mí es mejor pero bueno cada uno elegirá como lo pone no y este es el uso del notting pero el link no tiene solamente este uso el in es una de las primeras cosas que tenemos que entender Si queremos comprender cómo funciona el tema de los joints ya que con Inn podemos hacer una subconsulta que es una consulta adentro de otra consulta es decir puedo Al fin mezclar una aquí y encontrar relaciones Sí y eso nos lo permite in vamos a ver más adelante que Inn
no es la mejor forma de hacer esta operación Ok es decir De relacionar tablas existen otra cosa llamado joints incluso existen mejores cosas que esas vamos a ir viendo con el tiempo porque lo ideal es que empezamos a introducirnos pero si queremos entender los showins y demás es la mejor cosa que podemos hacer entender in y el tema de la subconsultas Así que ahora sí arrancamos con mi apartado preferido del curso de sql que es todo el tema de la Subconsultas y de los joins Así que vamos así Ahora sí con esta etapa de las
relaciones entre tablas y comenzar con el modelo relacional de un sistema que está basado meramente en álgebra relacional los felicito por llegar a este apartado del curso y ahora sí Prepárense porque como les dije Viene mi apartado preferido vamos a ver subconsultas vamos Bueno ahora lo que tenemos que ver es funciones de agregación las funciones de Agregación básicamente nos permiten agrupar datos resumirlos e incluso trabajar con estadísticas sobre los datos las funciones de agregación se utilizan con la cláusula Select utilizando estas funciones podemos obtener datos como por ejemplo el número de Registro de una tabla
el promedio de un conjunto de valores el valor máximo o mínimo de un campo por ejemplo podemos obtener el valor de la fila anterior el valor de la fila siguiente también tus Estadísticos como les dije como por ejemplo la mediana la desviación estándar y más mucho más la estructura es arrancar con un Select y seguir con la función en este caso es función Recuerden que las funciones como se lo dije antes van entre paréntesis como en la mayoría de los lenguajes de programación de hecho y Recuerden que este campo lo que hace es seleccionar columnas
yo puedo decir por ejemplo employes algo más rápido y estoy Obteniendo esto Esto es el selector de todo Es decir me selecciona todo de la tabla employs pero como sabemos puedo pedirle que me seleccione el First name el Last name y esto lo que me devolvería sería el First name y el Last name de la tabla empleados O sea que esto lo que nos devuelve son columnas que seleccionamos de hecho yo puedo pedirle que me que me devuelva muchas veces el apellido por ejemplo y me devuelve el mismo dato porque le está haciendo lo Que
le pido en Select lo que hacemos Es seleccionar Campos Bueno entonces cuando usamos una función de agrupación esto nos va a crear un nuevo campo aparte que nos muestra el resultado esa función lo que nos retorna esa función supongamos que yo quiero contar Cuántas filas tiene una tabla no o por ejemplo el número de valores en una columna Qué hago yo y yo digo count Quiero ver cuántos First name Ok hay en empleados ejecuto esto y me devuelve 10 Qué significa eso que hay 10 Empleados porque me está diciendo que hay 10 valores en el
campo First name O sea que hay 10 nombres en la tabla empleados y si se fijan Esto me devuelve un campo count First name y yo esto puedo como vimos al principio del curso asignarle un valor yo voy a decirle as cantidad de nombres entonces actualizó Y esto me muestra cantidad de nombres cantidad de nombres 10 y ahí estoy usando una función de agregación count es una función de agregación que nos Sirve para contar la cantidad de valores en un campo otra función por ejemplo es zoom que suma los valores de un campo supongamos que
yo tengo la tabla productos Select price from products Esto me muestra el precio de todos los productos hasta acá estamos bien esto ya lo sabemos Ok el precio de todos los productos supongamos que yo quiero sumar todos los precios Cómo hago bueno uso la función zoom esta función me suma todos los valores de la columna actualizo y Ven tengo todos los valores Qué significa esto que si sumo el valor de todos los precios así yo vendiera uno de cada precio Esto me pagarían porque este es el valor de todos los precios sumados después tengo ABC
abg significa promedio a dejé lo que nos devuelve es justamente el promedio que el promedio como ya saben nos permite más o menos ver cuál es el promedio tampoco hay mucha ciencia es el promedio suma todos los números y los divide por la misma cantidad de Valores es una bola es un promedio Entonces yo ejecuto esto y me devuelve el promedio O sea que en promedio los productos cuestan 27 dólares de hecho acá podemos usar otra función que es round round lo que hace es redondear un valor Qué significa esto que con round yo puedo
pedirle que en vez de ser 27.4408 me lo redondee Y de esa forma ahora me quedan 27 Recuerden que las funciones van entre paréntesis Entonces yo estoy usando la función round y me Está pidiendo a ver qué quieres redondear Okay Quiero redondear el promedio Ok que esto es algo aparte esto que está que es algo aparte quiero redondear el promedio de Price entonces esa forma ahí sí estoy redondo y como tengo un nombre acá todo re feo lo puedo asignar como promedio entonces ahí lo ejecuto y ahí tengo promedio si se fijan es un promedio
de hecho supongamos que yo quisiera redondear a más decimales No acá pongo una coma pongo una coma Después del primer parámetro porque esto es así esto es round n1 coma n2 es decir el número uno y el número 2 el número 1 es el valor que queremos redondear en este caso es ABC price Porque queremos redondear el promedio del precio y después tenemos n2 n2 es el valor con la cantidad de deci si yo que quiero que tenga dos decimales pongo dos ejecuto y me da dos decimales 27.44 si yo quiero que tenga cuatro decimales
me da cuatro decimales yo creo que tenga un decimal Me da un decimal yo creo que tenga cero decimales me da 0 entonces me queda 27 si yo no le pongo nada es como si le pusiéramos el cero porque es por defecto si entienden de programación entenderán lo que digo por eso yo lo que recomiendo para entender el curso de sql y sacarle el máximo jugo a todo es que vean el curso de python porque no me voy a explicar ahora por ejemplo a explicar lo que es un parámetro porque realmente el curso sql sería
muy largo ya bastante Que lo esté haciendo como para tontos literal intento hacer el curso más básico posible para que todos entiendan a pesar de que no sepan programar pero hay cosas como esta que si yo me tengo que poner explicarles lo que es un parámetro o sea imagínense que el parámetro lo estamos viendo a mitad del curso de python Por eso digo mi recomendación más fiel es vayan a ver el curso de python además python es uno de los lenguajes más poderoso que existe Les va a servir y cuando terminen sigan con el curso
de sql pero nada entendiendo que no no lo van a saber básicamente una función es como una algo interno del programa algo en este caso Ok cada vez que usamos la función round va a redondear lo que tiene entre paréntesis si lo que tiene entre paréntesis es un valor en este caso es esto que está acá Ok nos redondea esto pero si yo le pongo dentro del paréntesis una coma y le paso otro valor Que se llama otro argumento en este caso es 2 esto es la cantidad de decimales Ok repito véanlo con python para
que entiendan mejor pero si no nada es una bola estoy redondeando el promedio del precio bueno vamos a seguir con la siguiente función de agregación round es una función pero no es una función de agregación simplemente es una función de sql puedo redondear cualquier cosa esa es una función para redondear después tenemos 1000 si yo quiero decir Che A Ver quiero encontrar el precio mínimo Ok Quiero encontrar el precio mínimo Cómo hago pongo min y min lo que me devuelve es el producto que menos vale Mind price Esto me está devolviendo 0 Por qué Porque
si yo vengo acá a broad Data y vengo a products y los ordeno por price si apretó acá lo puedo ordenar por price el valor mínimo de Price es cero porque tengo estos Campos que son nulos Okay pero si no me devolvería este 2.5 como tengo el valor mínimo de Price es cero O Sea hay productos que valen 0 porque son nulos y son errores que después vamos a usar como los limpiamos de hecho acá yo puedo decir Where product name por ejemplo is not null Entonces esta forma evito tener datos nulos actualizo Y ahora
sí el valor del precio mínimo es este de hecho podría decirle que me pase el nombre por ejemplo name o product name Ahí va coma min y ahora sí me devuelve el nombre del producto y el precio mínimo Por qué el precio Che Devuélveme el nombre del producto y el precio mínimo de la tabla productos pero el product name no tiene que ser null porque si no si yo esta condición no la pusiera de hecho vamos a anularla esto que está acá es un comentario que si yo pongo las dos los dos guiones adelante de
una línea de código me la comenta Qué significa esto que no se va a ejecutar O sea yo ejecuto esto y es como si esta línea no existiera si yo pusiera acá en lo mismo guión No pasa nada porque Porque es como si sql no lo interpretara o sea es código que no se ejecuta es como si literalmente no existiera para qué sirven los comentarios y sirve para el desarrollador pueda leer yo acá arriba puedo decir por ejemplo acá estoy obteniendo el producto con menor precio Entonces el desarrollador que venga acá y lea va a
decir Ah ok En esta consulta lo que hace es obtener el producto con menor precio al desarrollador le sirve mucho en este Caso nos está sirviendo para no usar esta línea o sea al comentar esta línea es básicamente como que no la usamos si yo de hecho esto que está acá arriba lo dejara y lo ejecuto esto nos devuelve el mismo resultado si yo esto lo descomento en el resultado lo tenemos igual porque esto no lo interpreta es como si no existiera que hay en este caso lo descomentábamos Para que vean que si esta línea
no se ejecuta Okay la de esta que está acá el producto con el menor Precio es esta vamos a ejecutarlo y ahí nos devuelve el null Por qué Porque el valor más chico es cero pero el nombre del todos los productos que tienen el valor cero es null si usamos la condición de que los campos no tienen que haber datos nulos o sea el product no puede ser null me va a volver este porque es el valor más chiquito de todos los que sí tienen nombre Porque estos productos no existen Entonces técnicamente estamos haciendo una
Consulta correcta y después tenemos Max si yo quisiera obtener el digamos producto con el precio máximo ejecuto y acá me dice cote de Player 263.5 dólares acá no hace falta ponerle esto porque los campos nulos no no afectan nada lo ejecuto y es lo mismo pero quería llegar a que entiendan que así como ahora estamos con estas funciones que ya vimos recién que son muy básicas tenemos muchísimas pero muchísimas funcionalidades tenemos Funcionalidad que hacen de todo lo que se imaginan una barbaridad tenemos pero después si quieren complejizar y meterse a nivel de optimización de cosas
mínimas pero por ahora con que sepan sql entiendan las bases sepan trabajar de la mejor forma posible estamos más adelante vamos ahora en este curso también pero que sepan que hay muchísimas funciones de agrupación Okay pero no nos vamos a trabajar con eso porque se nos haría como que medio todo imposible ahora Digamos hacer eso no se puede pero sí lo que se puede antes de ir con la subconsultas es ver growing que es lo último que vamos a ver antes de trabajar con sus consultas porque literalmente ya habríamos hecho y terminado todo para poder
estar de lleno en lo que viene siendo la sus consultas sin distraernos y teniendo los conocimientos no porque para meterse en sus consultas hay que tener un conocimiento previo hay que entender cier Tas cosas y ya con Aprender global y Javi que es lo que vamos a ver ahora a continuación ya podría decir que estamos listos para trabajar de lleno con sus consultas Así que basta de hablar y vamos de lleno con grow y heaven bien la cláusula global se utiliza para agrupar uno o varios registros Ok Según uno o varios valores de las columnas
otra vez acá me hice una pequeña tablita en Paint pues me encanta Paint soy fanático de Paint pero acá podemos ver Cómo funciona esto acá tenemos digamos varios productos no el cliente es el mismo es XXX para todos acá Me olvidé de poner los demás datos pero es para el mismo para todos perdón pero mi top no me permite avanzar si no está todo bien puesto si vas a usar Paint por menos explica bien bueno ahora sí tenemos esta tabla de ventas realizadas cada venta que se hace registra el producto que se vendió el cliente
y la cantidad que compró Para qué nos sirve agrupar por Producto bueno supongamos que yo quiero obtener la cantidad de ventas de cada producto qué hago bueno uso porque producto es este nombre o sea quiero agrupar por producto y los campos que tengan el mismo valor se agrupan Qué significa esto que si yo tengo banana banana banana y banana Tengo cuatro bananas Qué significa esto que si yo que me sume cada valor individual yo lo que puedo obtener después es ya con otra cosa que vamos a ver más adelante pero Despreocúpense lo vamos a ver
ahora con una función de agregación que es con zoom se acuerdan que zoom me sumaba todo el valor de una columna Bueno si yo esto le diera zoom me sumaría todos los valores Pero si yo antes le doy un grow lo que va a ser el grow es en vez de sumarme todos los valores me los va a agrupar para que me diga la cantidad total de ventas de una banana fíjense 4 + 3 + 4 + 2 da 13 después manzana son 10 ventas 10 10 manzanas se vendieron Porque porque tenemos manzana 3 manzana
4 3 + 47 manzana 29 bueno medio que no sé sumar Y en vez de poner 9 puse 10 pero bueno podríamos hacer de cuenta que en vez de ser 9 son 10 manzanas que se vendieron y después ciruela acá ciruela dice 5 y 3 5 + 3 son 8 Entonces se vendieron 8 las 10 manzanas y tres semanas esto lo podemos hacer con Grove by porque basta vamos a verlo en código por ejemplo supongamos que lo que queremos Hacer es obtener el de precios de un producto venimos acá y ponemos ABC price ataque está
todo bien ya está esto nos devuelve el promedio que ya lo hicimos antes de del precio o sea suma todos los productos los divide por la cantidad de productos que hay y saca el promedio esto es el promedio ya lo sabemos matemática básica jardín de Infante Pero si yo de repente ahora lo que hago es decir grow supply ID Esto es lo que hace es Ordenarlos por proveedor de hecho Vamos a darle en ejecutar y ahí si se fijan tengo Vamos a darle un redondeo en este caso round para que se redondeen los números sino
tengamos que hacer tanta vuelta además y el grow vamos a poner abajo Ahí va Ahora sí acá lo que estamos obteniendo es el promedio de cada proveedor yo voy acá voy a venir acá y darle en supply ID coma round el suplayer y Recuerden que es el proveedor cada proveedor tiene un supplyer ID es Decir el proveedor 1 es decir el precio el promedio de lo que cuestan los productos del proveedor uno es de 16 dólares el promedio de lo que cuestan los productos del proveedor 2 es de 20 dólares el promedio del tercero es
de 30 dólares el del cuarto 35 el del quinto 30 el del sexto 15 yo bueno a ver ahora de repente Quiero ver quiero verlos en orden Quiero ver cuál es el que más vale Bueno oroder bye round cierto tengo que hacer Todo esto de vuelta bueno mejor en vez de hacer esto le voy a asignar un valor as promedio Ahí va promedio Entonces esta forma le digo order by promedio y se actualizó ahora me los ordena por el promedio y esta columna tiene un valor el Sublime ID 10 es el que menos vale en
este caso Vamos a darle desk así se ordena por el que más vale al que menos vale el promedio del suplete 18 es de 141 dólares el proveedor con los productos más caros en promedio es el Proveedor 18 con un promedio de 141 dólares por producto pero el problema de esto el problema de agruparlo por por este valor es que lo que estamos haciendo es que como les dije está separando los y agrupándolos o sea todos los que tengan el supply 18 los agrupa por esta función de agregación Por ejemplo si hay siete registros con
el supplyday 18 suman los siete registros y aplica un promedio Pero qué pasa con los demás campos es decir qué pasa si yo acá De repente vengo y pongo product name esto que está acá me va a volver un nombre pero cómo Por qué me devuelve esto y esto que está acá nos devuelve el primer registro con este supply ID o sea si yo vengo a brawl stata en products y los ordeno por el supply ID Okay vamos al 18 el primero que tiene el 18 escote de Blade hay más eh tenemos este que está
acá abajo pero el que el primero que tiene el aire 18 es este Entonces lo muestra el primer producto con el supply ID 4 es Michi no sé qué como lo sé y si venimos acá el 4 hay varios hay tres productos con el Suplay 4 pero el primero es Michi O sea que grow lo que hace es agruparlo y nos devuelve el primer valor de cada uno o sea que si yo acá no usara el ABC Price se obtendría que sería el precio más bajo esto no sería un promedio Esto es lo que nos
devolvería sería el precio más bajo si yo acá le doy no le doy una orden si yo que le doy De hecho a un as me Devolvería el precio más alto entonces volvemos a lo que teníamos antes supply ID Ahí va lo dejamos acá y ahí tenemos el Suplay Lady y el promedio estamos haciendo que nos devuelve incluso lo podemos hacer por categoría categoría ID y lo lo agrupamos por categoría ID de esta forma hay uno para cada categoría está la categoría nula Así que vamos a usar una condición Word categori ID y East null
Ahí está entonces la ignoramos al valor nulo cuál es el problema acá a El problema es que el Where va adelante del grow esto es bastante loco pero si vuelvo adelante Entonces ahí sí porque primero se usa la condición O sea primero se selecciona se hace la selección después se usa la condición con el filtrado y después se agrupa o sea lo que agrupamos es en los registros porque porque como funciona esto internamente internamente agarra todos los registros que nos devuelve y los agrupa pero si después vas a filtrarlo Tenés que hacerlo antes porque porque
el Where sirve para usar condiciones y filtrar los resultados O sea si me vas a bajar 8 resultados ahora bajame 4 porque con la condición que te di me bajas 4 y esos cuatro después los agrupo Entonces primero va la condición el Word y después Valoy y ahí sí acá me está devolviendo el categoría ID con el promedio de cada categoría bi en este caso vemos más o menos Cuál es el promedio de costo de cada categoría Vemos que la categoría que más cuesta es la 6 y el promedio de la categoría 6 que justo
es carne de ave el promedio de los productos de carne de ave es de 54 dólares Recuerden que si venimos acá y le damos en categoris vemos que las 6 es Meet que significa carne de ave y nos da la casualidad que en promedio es lo que más cuesta no se olviden que si a esto le sacamos el grow y le sacamos todo esto Simplemente nos devuelve un valor porque porque lo que hace es no suma Todo Ok no suma todos los campos de precio entonces por eso nos devuelve solo uno lo que hace una
función de agregación es en este caso esta que es el promedio es devolvernos solo un dato una un registro solo con esta modificación hecha Cuál va a ser la modificación este campo que va a llamarse promedio va a tener el promedio de todos los precios pero como les dije si le pasáramos un nombre si le pidiéramos cualquier cosa siempre no va A volver el valor más bajito si Yo acá le paso product name esto que está acá me va a volver el Chase Por qué Porque Chase es el primero de todos los productos Yo vengo
acá products y el primero fuera chang me devolvería chang pero el primero chais si yo le digo supply ID que también me devuelve ID me va a volver uno porque porque el primer producto tiene uno como Suplay o sea básicamente es como si me devolviera el primer registro pero con un campo extra Que es el promedio de precios entonces grow sirve A ver Mira está todo bien que me hayas sacado un promedio pero ahora yo quiero que el promedio no sea de precio quiero que el promedio sea por categoría porque yo quiero saber no quiero
saber cuál es el promedio de todos mis productos Yo quiero saber cuál es el promedio de cada categoría el promedio la categoría 2 es de $2 el promedio la categoría 3 es de 20 dólares Bueno entonces ahí es cuando usamos el Grove by en este caso vamos a agruparlo por categoría ID es decir todo lo que tenga el mismo categoría ID se agrupa Y en este caso se calcula el promedio entonces actualizamos y ahí tenemos la información y ahí estamos trabajando con estas funciones pero ahora tenemos otro problema porque supongamos que yo voy a decirle
Mira vamos a hacerlo por proveedores mejor quiero sacar el más o menos por proveedores si a mí lo que me interesa es ver cuál es el proveedor que Me tiene productos más altos No yo digo Bueno quiero filtrarlo quiero que esto solamente me devuelva productos en donde el promedio sea mayor a 40 Bueno digo voy a intentar con un Where si pongo acá un Where en este caso promedio Word promedio sea mayor a 40 si el promedio es más de 40 entonces devuélvemelo Ah pero no me deja pues intentar de vuelta no no fue un
error realmente no me deja para esto hay una cláusula extra que es el con el Where Necesito que entiendan Esto con el World no podemos hacer referencia a la función de agrupación Por qué Porque Recuerden que con algo que llaman grupos en sql se llaman grupos Ok grow nos permite crear grupos las funciones de agregación también nos permiten trabajar con grupos y hay una cláusula llamada having que no sirve para ser filtrado de grupos así como el Word filters el javin filtra grupos O sea que se usa después del grow si yo vengo acá y
le digo having el Javi no Joda es como un Where pero en vez de filtrar registros filtrar grupos como les dije Ahora sí puedo decirle promedio Ok tiene que ser mayor a 40 y ahora sí si se fijan me va a devolver solamente los valores en los que el promedio sea mayor a 40 por qué Porque promedio es el resultado de una función de agrupación y nosotros no podemos usar Esto ni esto ni esto en un Word para trabajar con condiciones en una función de agrupación se usa el javin es decir yo no puedo Trabajar
con promedio ni con ni con operadores de comparación ni con operadores lógicos no puedo trabajar con condiciones en un Word que sean fruto de una función de agregación perdón si digo función de agrupación es un error mío no sé por qué se me mezcla digo función de agrupación pero es función de agregación Entonces como les decía no se puede trabajar en un Where con funciones de agresión por qué porque las funciones de agregación nos permiten trabajar con Grupos y viceversa Y si queremos trabajar con grupos Cuál es la cláusula que es parecida al Where pero
que en vez de usar un Where en vez de filtrar filas filtra grupos javing o sea si queremos trabajar con condiciones en funciones de Aviación tenemos que usar Javi en este caso la función de agregación está almacenada en este alias por medio si lo queremos filtrar tenemos que usar el Javi acá decidimos por medio nosotros podemos usar un Word También acá eh Word Y acá simplemente seguimos filtrando registros Pero para qué sirve esto los registros que filtremos acá no se van a tener en cuenta para calcular el promedio supongamos que yo la voy a decir
Where product name is not null entonces actualizo y ahora vale más esto Ahora hay más valor Porque porque los campos nulos se estaban teniendo en cuenta O sea estos Campos que están nulos ven que dicen null y demás vamos a darle por product ID vamos a ir abajo de Todo acá tenemos los campos nulos y este campo nulo tiene precio cero O sea que si antes estábamos sacando promedios ese promedio que sacábamos incluía estos ceros entonces con el Where lo que hicimos es sacar esto y después se agrupa como les dije esto funciona así supongamos
que tenemos todos estos registros porque está tan abajo el micrófono increíble supongamos que tenemos todos estos registros Ok hasta que está todo bien listo todos los Registros todo lo que quieran esto primero pasa por el Where si yo acá en el Select estoy usando una función de agregación la función de agregación todavía no se va a usar hasta que no filtre Esto internamente sí primero viene el Select después el Where pero cuando se ejecute Recuerden que primero se hace todo lo que es la devolución de filas y después se trabaja con los grupos como acá
le estoy diciendo agrupamelo por su playera ID acá le Estoy diciendo Devuélveme los campos que no son nulos O sea que si yo esto lo comento esta cláusula la comento y no me la tiene en cuenta me está devolviendo menos y este no es el promedio real esto que está acá es un dato falso porque estamos trabajando con valores nulos para el promedio vamos a hacer un cálculo simple si yo por ejemplo tengo cinco más ocho más tres tengo tres valores lo divido por tres Acá tengo el promedio el promedio entre 5 8 y 3
es 5,3 Pero si yo dijera 5 + 8 + 3 + 0 + 0 y lo divido por 5 porque ahora tengo cinco números así se saca el promedio ahora me dice que el promedio es 3,2 pero el promedio real no es ese porque estoy teniendo en cuenta estos nulls estos estos precios cero que no existen entonces para sacar esos precios uso Esta cláusula que está acá y los filtros y después de que me devuelvan los productos filtrados ahora sí me los separa en grupos por el supply ID Después lo filtra y los que tengan
un promedio mayor a 40 me los muestra Entonces ahí es cuando está trabajando y funcionando correctamente esta consulta en la tabla order details Por ejemplo si se fijan acá order details Vamos a entrar esta tabla para que la absorbemos mejor tenemos el producto de las órdenes los datos de las órdenes tenemos el producto que se vendió que hace referencia el producto ID hace referencia al producto que se vendió y La cantidad O sea que si por ejemplo venimos a esta tabla tenemos información de no sé por ejemplo se vendió una banana y cuántas bananas se
vendieron tenemos producto y cantidad Cómo podemos utilizar las funciones de agregación y global para ver cuál es el producto que por ejemplo más se vende porque podemos hacer eso podríamos ver cuál es el producto que más se vende bueno primero vamos a seleccionar todo fíjense que estamos trabajando con consultas que ya Son re largas o sea esto hace un tiempito ni lo habrían entendido Y ahora se está entendiendo cosas que es magnífico voy a seleccionar order Select todo from order details ejecuto y tengo todos los datos a mí solamente me interesa el producto ID y
el quantiti hasta que estamos bien Esto lo único que me interesa el producto y la cantidad es decir qué productos se vendió y Qué cantidad se vendió Yo sé que por ejemplo hay productos que se vendieron varias Veces por ejemplo acá se vendió el producto 2 una vez se vendió 20 20 unidades del producto 2 y acá se vendió 50 unidades del producto 2 O sea que tenemos que encontrar una forma de agruparlos bueno con global primero sumamos las cantidades en este caso es zoom quantiti para sumar todas las cantidades y ahí tenemos el valor
de todo esto es todo la cantidad total de productos que se vendió en este caso nos devuelve el primer valor de Productividad Así que lo vamos a ignorar y abajo le damos grow by product ID es decir vamos a hacer que se agrupen todos los productos ID y que se sumen las cantidades O sea si hubo tres ventas del producto 4 quiero que me sumes todas las cantidades de las tres ventas entonces ahí tenemos el producto 1 se vendió 159 veces el producto 2 se vendió 341 Y tenemos Cuántas veces se vendió cada producto en
total porque por ahí el producto 2 como Vimos una vez se vendió 20 unidades otra vez se otra vez se vendió 40 Pero de esta forma estamos agrupando todas las ventas del producto 2 como de esta forma ahora después de esto tenemos que ordenarlos vamos a darle order by en este caso Vamos a darle total a total Ahí está como que queda feo esto acá el zoom quantiti Así que vamos a darle order by total actualizamos y ahora sí tenemos la columna con el nombre total y estamos ordenándolas por total O sea que el Producto
que menos se vende es este que está acá tuvo cinco unidades vendidas el producto 67 y el producto que más se vendió es el producto 31 que se vendió 458 veces una locura ahora digo la verdad que los productos que se vendieron menos de 50 veces los quiero descartar quiero dejar de venderlos Porque a mi negocio no le es rentable vender productos que venden menos de 50 unidades entonces digo bueno Qué puedo usar un World si yo pongo un Word y Pongo donde el total es mayor a 50 esto no me funciona porque tenemos que
usar un javin el Javi viene antes del order by pero después total mayor a 50 de esta forma sólo me devuelve los productos que son mayores de 50 pero yo quiero ver Cuáles son los que vendieron menos de 50 unidades para eliminarlos los que vendieron menos de 50 unidades son estos productos que están acá Qué significa que tengo que dejar de comercializar el producto 67 el 45 el 22 y todos estos productos los tengo que dejar de comercializar porque vendieron menos de 50 unidades es más esto a veces cuando estamos trabajando con otros lenguajes de
programación hacemos esta consulta de sql nos devuelve muchos datos yo solamente ahora Quiero obtener el producto más vendido Cómo puedo hacer Bueno normalmente lo que haría sería sacarle esta condición como hicimos antes y acá tengo todos los productos Entonces el más vendido es Este si yo acá le doy dees Ahora me voy a mostrar el más caro arriba pero me está devolviendo un montón de datos Yo realmente le pedí un dato quiero que me devuelva solamente un campo el campo que quiero que me devuelva es el campo con el total quiero que un solo dato
con el más vendido como hago eso Bueno vamos de vuelta con el Javi No no no no La respuesta es simple limit 1 ya está este es el producto más vendido un campo Solo que me dice mira el producto que más se Vendió es el producto 31 y se vendió 458 veces seguí vendiéndolo porque se vendió un montón de veces y si yo quiero obtener el producto que se vendió acá simplemente poner ask y esta forma obtenemos el producto que menos se vendió Que es el producto 67 una cosa importante que tienen que entender es
que no podemos no podemos agregarle una función de agrupación a otra función de agrupación o sea yo sí puedo decir acá Javi Max product ID por ejemplo OK Y ahí Sí me devuelve un dato listo esto funciona pero no puedo decirle Max total porque por ahí yo digo no a ver si me ahorro esta cláusula le digo Devuélveme el valor máximo del total porque Recuerden que cuando yo hago esto vamos a esto vamos a eliminarlo cuando yo hago esto ahora cada producto Tiene un total el más caro es este Entonces yo creo que me vuelva
el valor máximo de total hago esto no esto no se puede Porque porque total es el resultado de una función de Agrupación que es esta porque total es el resultado de una función de agregación nosotros no podemos usar una función de agregación con un valor de otra función de agregación porque esto que está acá es como si dijéramos Esto es lo mismo y esto no se puede hacer no Se puede mezclar dos veces la función de agregación O sea no podemos primero aplicar el filtro zoom y después el filtro Max en una misma consulta no
se puede con subconsultas Sí ya las vamos a Ver pero no se puede entonces la forma en vez de hacer esto es con el limite 1 y ahí está ahí lo tenemos el producto más barato el producto más caro entonces para repasar esto yo sé que el micrófono debería estar acá abajo apuntándome a la boca pero es como que hay un problemitas zarpado el próximo vídeo ya va a estar más arreglado esto pero nada no quiero hacer tanto lío lo voy a sacar aquel voy a agarrar con la mano Pues la tengo re grande Qué
es eso anda teniendo un Soporte para micrófono Yo soy el soporte bueno En definitiva Mientras que el Word filtra registros el javin filtra grupos Tenemos también una jerarquía primero lo que se hace es siempre se selecciona primero se usa el Select y se selecciona todo o sea primero hacemos la selección de lo que queremos seleccionamos los campos todas hacemos en todo en el Select hacemos la sección completa lo segundo es filtrar registros es decir usamos el Where si hubiera un Where lo Usaríamos después después lo que sigue en caso de que hayamos usado una condición
es por ejemplo agrupar registros eso lo hacemos con el Gro y hacemos las agrupaciones después si hiciéramos algo más podemos hacer por ejemplo un having es importante que sepan que el Javi no se puede usar sin el grow porque el grow agrupa registros y el javin trabaja con grupos o sea el having no trabaja con filas si intentamos usar un javin sin el grow no Sirve porque el Javi solamente trabaja con grupos Es una cláusula que usamos para los grupos O sea que si la usamos sin el grow la estamos aplicando sobre filas y nos
va a tirar un error porque no usas filas se usa sobre grupos entonces grow y después el having y después usamos el order by y hacemos la ordenación el ordenamiento la ordenación hijo de hacemos el ordenamiento y en caso de que queramos limitar resultados viene después Entonces Primero seleccionamos después filtramos después agrupamos registros después filtramos grupos después hacemos el ordenamiento y después hacemos las limitaciones en caso de que queramos eso es como el orden en el que deberíamos hacer las cosas porque si no puede que nos tira un error en el jardín podemos usar operadores
de comparación operadores lógicos y funciones de agregación lo que no podemos hacer es meter una función de agregación adentro De otra función de agregación O sea no podemos combinar funciones de agregación ni tampoco podemos meter en alias que haga referencia a una función de agrupación dentro de otra función de agrupación así como no podemos usar por ejemplo Max total o zoom total podemos usar quantiti que es un campo nativo de la tabla y después Total no podemos el resultado de una función de agrupación meterlo dentro de otra función de agrupación esto se puede hacer con
su Consultas Pero todavía no estamos en ese punto estamos metiéndonos en eso porque ya llegó el momento de aprender subconsultas porque de hecho las necesitamos para poder avanzar porque cómo haríamos si quisiéramos saber cuál es la cantidad total vendida porque por ahí hay algo que no me estoy dando cuenta Quizá el producto que menos se vendió valía 300 dólares entonces subo cinco ventas de un producto de $300 O sea que generamos 1500 dólares pero por Ahí el producto que más se vendió que tuvo 450 ventas más o menos valía 2 dólares entonces por ahí el
producto que menos se vendió no generó más que este producto que se vendió más entonces lo que quiero hacer ahora es algo loco porque porque hasta ahora lo que estoy haciendo es trabajar con una sola tabla con order details Pero qué pasa Yo lo que quiero hacer ahora es Quiero obtener la cantidad pero a la cantidad está en products Acá tengo el precio o sea tengo El precio pero qué pasa Recuerden que las tablas están conectadas por el ID order details dice product ID y product ID hace referencia a este producto ahí O sea que
si logramos unir las tablas podríamos tener el precio de un producto ID por ejemplo tengo el producto ID el 31 que yo por ejemplo tuviera el 31 Yo podría decir Bueno mira a ver decime el nombre del producto ID 31 Este es el nombre decime el precio del producto id31 bueno el precio es 12.5 y después Hago más cálculos Entonces qué hago Acá tengo el producto ID tengo el total vendido y acá tengo el total recaudado o sea esta es la cantidad vendida pero Y cuánto es el total de dinero que me generó esa cantidad
vendida porque para tener ese dato tengo que tener el precio del producto pero el precio está en la otra tabla bueno tenemos que ver su consulta porque la subconsultas nos van a permitir unir tablas y obtener la información de una tabla a través de una Relación que esa relación sea por los identificadores Así que ahora vamos a ver y llevar a la práctica todo lo que Estuvimos viendo antes de las frame Kiss y las todo eso lo vamos a llevar a cabo ahora porque ahora sí llegó el momento de ver su consulta Así que dejo
de hablar y los felicito si llegaron a este apartado del curso porque ahora sí se vienen los fucking hermoso de esto que es unir tablas los dejo con el apartado de sus consultas vamos Acaban de pasar cuatro horas y Recién ahora vas a explicar el tema de sus consultas no te parece que este cursito va un poco lento a ver entiendo tu inquietud pero no te olvides que es un curso en donde vamos a las bases fundamentales explicamos muchas más cosas que nuestros cursos nos explican hablo mucho más rápido que el promedio Y encima edito
mucho o sea dentro de todo el tiempo se utilizan muy bien Incluso si eso es cierto en algunos otros cursos Enseña hasta joins antes de la segunda hora mira las estadísticas nos muestran que si se ven cursos como los que vos estás mostrando después las personas se traban no pueden seguir avanzando porque no saben moverse Más allá de lo que se les enseñó en este curso eso no pasa porque se enseñan las bases y Incluso si salen de acá Pueden seguir aprendiendo Ah Buen punto la verdad que eso sí que no lo había pensado como
creador de contenido responsable toca asegurarme Que las personas sepan todo y puedan entrar sin saber nada y saliendo saber cómo continuar cosa que todos los cursos que se hacen y que ves ahí disponibles no lo encontrás de una bueno explica tranquilo sus consultas Entonces porque yo ya me tengo que ir De hecho me voy a seguir preparando una sorpresita que hace rato vengo armándote Ah bueno una sorpresa qué bien Después de romperme los huevos todo el curso me das algo qué lindo Me muero por verlo espero lo mismo Le está dando un toque dramático de
más creo no te olvides que estamos en un curso de sql enseñando Ah la sorpresa de paso tiene que ver con el curso o tampoco viendo los comienzos de cada línea así pero la verdad no creo que te dé inteligencia incluso para esto lo vas a tener que usar y bastante aunque no sea la tuya no tiene sentido nada lo que me está diciendo Pero bueno evidentemente pasadas las 4 de la mañana te pones un poco raro no escúchame Déjame terminar de explicar esto de sus consultas y demás y después Si quieres me la mostrás
dale eso es lo que pensaba hacer por qué tenés que ser tan misterioso Qué es la sorpresa realmente no te puedo decir pero para que te des una idea es una forma de devolverte todo lo que hiciste por mí bueno Muchas gracias realmente no sé quién jugará casos Pero bueno nada termino el curso y seguimos Dale 10 puntos Bueno entonces me voy a tomar mi tiempo para comenzar Con este apartado avanzado Dale Ah sí Bueno tomaste el tiempo que quieras Aunque bueno cuando veas lo que te preparé te vas a dar cuenta que no te
queda mucho no te pusiste muy estúpido puedes dejar de intentar asustarme qué te pasa alto vas a tener que usar la inteligencia veamos de que sos capaz Quiero llamar a la policía porque me tenés [Música] bueno comenzamos con el apartado de su Consultas la verdad que no puede dormir porque anoche Tuve miedo un episodio extraño de hecho anoche vine a grabar y realmente no pude porque se hicieron las cuatro y pico de la mañana y sucedió algo muy extraño Me cansé mucho Y decidí volver a casa tanto pero acá estamos y ahora sí voy a
grabar de vuelta el apartado de su consultas bien para entender que usar su consulta tenemos que entender que ya estamos en el apartado de tablas relacionales es decir Estamos relacionando las tablas unas con las otras como vimos antes si yo por ejemplo quiero trabajar con los datos de ambas tablas a través de una relación tenemos que utilizar los identificadores que ya lo habíamos visto antes como lo vimos ya en este caso lo que teníamos que hacer antes que no logramos hacer es lograr relacionar dos tablas en este caso es la tabla de productos Y en
el otro caso es la tabla de detalles de órdenes Perdón los detalles de la orden Por qué porque nosotros lo que queríamos hacer era obtener la cantidad de productos que se vendieron por cada producto eso lo hicimos lo logramos hacer obtuvimos digamos los productos que se vendieron y obtuvimos product ID el producto ID de cada producto que se vendió hasta ahí todo bien ok pero también necesitamos acceder a más datos Porque por ejemplo no teníamos el precio Es decir no teníamos el precio del producto entonces por ahí podíamos decir Que el mejor producto era uno
que tuvo 400 ventas pero por ahí el de 400 ventas valía 2 dólares mientras que uno que se vendió 10 veces por ahí valía 200 dólares y no nos dimos cuenta y estamos hicimos una mala comparación porque no teníamos datos entonces Cómo podemos hacer para porque a ver el producto ID 1 es el mismo o sea este producto ID el 11 está haciendo referencia a este producto 11 que es queso cabrales pero qué pasa solamente tenemos el ID no tenemos ni el Nombre del producto ni la en el ni el precio esto lo podemos llegar
a relacionar y podemos llegar a unir Uy Y podemos llegar a unirlos con subconsultas Y esta es una de las formas en las que vamos a adentrarnos en el mundo De relacionar las tablas la subconsultas normalmente la subconsultas no son la mejor forma de relacionar tablas es decir algo que se llama Jones que lo vamos a ver más adelante pero primero Tenemos que pasar por su Consulta porque a veces es 100% necesario una subconsulta entonces la tenemos que entender pero después aparecieron los joins y los joints nos permitieron avanzar mucho más pero bueno vamos ahora
diciendo con el apartado de sus consultas porque no vamos a ver joins vamos a ver sus consultas o sea después de su consulta Sí vamos a ver joints pero primero tenemos que entender que son las subconsultas Cuáles son las distintos tipos de consultas poncer Ejemplos de su consulta si cuando terminemos de entender llevar a la práctica hacer ejercicios y demás vamos a encontrarnos con una problemática la subconsultas y es lo que viene a solucionar los joints Así que vamos en orden Okay bien una consulta en sql es algo completamente intuitivo por el nombre subconsulta subo
viene del latín dentro de o inferior a y hace referencia a una consulta que está dentro de otra consulta en este caso la palabra Subconsultas es una subconsulta es una consulta adentro de otra consulta es decir si esta es mi consulta sql y acá tengo todo el código todas las cláusulas y demás una subconsulta es una consulta que está adentro de otra consulta es importante Este término esta subconsultas nos permite realizar consultas más avanzadas porque qué es lo que hacen lo que hacen es Ejecutan una consulta mini chiquitita y con los resultados de esa consulta
Ejecutan otra Consulta que es la principal es decir primero se ejecuta la subconsulta y después esa subconsulta no genera resultados y después esos resultados son utilizados por la consulta principal que es como la que se va a ejecutar o sea nosotros por ejemplo cuando usamos una consulta decimos Select columna 1 columna 2 columna 3 Pero qué pasa si yo acá uso una subconsulta digo Bueno una subconsulta acá lo que va a hacer es devolverme por ejemplo una columna 1 y Automáticamente esto se va a ejecutar y que nos va a devolver una columna entonces estoy
utilizando el resultado de una subconsulta para una consulta principal ahora vamos a ver bien a fondo Ok pero tienen que entender que eso es una subconsulta es una consulta dentro de otra consulta que nos permite hacer cosas mucho más avanzadas y ser mejor filtrado nos permiten separar las consultas en partes más pequeñas son muy útiles Ok van a ver muchísima teoría Acerca de las consultas hay mucha teoría OK Pero básicamente el estándar de sql si no me equivoco habla de Solamente se puede meter 16 subconsultas adentro una consulta pero por ejemplo no me equivoco 61
y van variando según el gestor de bases de datos Okay pero no se preocupen que eso ya lo vamos a ir viendo con el tiempo una cosa que tienen que tener en cuenta es que la subconsulta solamente recuperan datos O sea no podemos hacer una consulta con un insert un update si Podemos decir update su consulta o sea podemos meter una subconsulta adentro de un update o adentro de un delate o adentro de algo más pero la subconsulta como tal no puede ser un update me explico tiene que ser sí o sí un Select porque
porque la subconsulta es lo que hacen es devolvernos información ok La subconsultas suelen ser selects porque no puede ser algo que modifique o agregue la información a la base de datos O sea la Sub consultas no alteran La base de datos solamente la consulta si bien tenemos muchas formas de clasificar a los subconsultas lo más común es clasificarlas por su ubicación podemos usar una subconsulta en un Select es decir Select su consulta y vamos a seleccionar lo que nos devuelves a su consulta también se puede usar en el Word es decir la usamos como condición
por ejemplo Hay una subconsulta que nos devuelve un valor ese valor que nos devuelve lo usamos Como parte de una comparación por ejemplo seleccionar donde el precio sea mayor al promedio y ese numerito del promedio lo obtuve de una subconsulta la consulta fue a llamar a otra base de datos perdón a otra tabla a preguntarle un dato y ese dato me lo trajo y lo uso entonces hice una comparación Entonces es una consulta en un Word después tenemos un Front que se utiliza normalmente para crear filas virtuales tablas virtuales que es como algo que Vamos
a utilizar o sea por ejemplo en vez de decir Select todo Front products decimos seccionarme todo from la tabla virtual que creamos una es como una subconsulta que llamamos y creamos una especie de tabla ya filtrada para operarla directamente y después tenemos en having si trabajamos con funciones de agrupación con grupos y demás después tenemos otra forma de clasificar la consulta por ejemplo de primer nivel segundo nivel tercer nivel esto simple Una una subconsulta de primer nivel es una subconsulta adentro de una consulta una subconsulta de segundo nivel es una subconsulta a una sub consulta
adentro de una consulta una subconsulta del Tercer nivel es una subconsulta adentro una subconsulta adentro una subconsulta adentro una consulta y así podemos seguir hasta donde se nos ocurra Ok también la podemos clasificar según sus resultados devueltos tenemos por ejemplo subconsultas de valor único subconsultas De filas subconsultas de tabla depende del valor que nos devuelvan la clasificamos también las podemos clasificar según su correlación con la tabla principal tenemos las correlacionales las relacionables pero no vamos a meter mucho de fondo en eso nosotros vamos a clasificarla según su ubicación Qué es lo más normal es una
subconsulta en una subconsulta De hecho cuando trabajamos técnicamente ni siquiera nos ponemos a preguntar Che Jorge a ver qué hiciste no porque apliqué una subconsulta correlacional es extraño manejarse normalmente dice No acá una subconsulta en el from y ya está pero no decimos no porque es un subconsulta tipo ubicación a su consulta en el Javi metieron su consulta en el en el Select o hice una selección y usé una subconsulta se habla así no no es como que se habla tan técnicamente solo que está bueno que la teoría la tengan Okay hasta acá tenemos Una
tablita que nos devuelve Uy qué gallo dos columnas una con el producto y otra con la cantidad esto es por orden OK cada orden vendió por ejemplo en una orden vendimos el producto número 11 vendimos 12 unidades en otra orden vendimos el producto número 42 vendimos 10 unidades son datos que una tablita con esos datos Pero qué pasa yo supongamos que tengo una banda de productos y no me voy a acordar Cuál es el producto 42 no me voy a acordar Cuál Es el producto 14 no me voy a acordar Cuál es el entonces Quiero
ver el nombre del producto pero qué pasa el nombre del producto no está en orden detales el nombre del producto está en la tabla products entonces toca utilizar este producto ID porque si yo le digo mira el producto es el producto 11 tengo que decirle a ver cuál es el nombre asociado a product ID 11 y que me lo devuelva como hago eso bueno acá viene la magia para empezar Vamos a darle botón derecho Acá y darle duplicated esto más que nada para tener otra pestaña para poder trabajar ok normalmente cómo haríamos para seleccionar el
nombre bueno vendríamos diríamos Select product name from products Ok y esto nos devuelve una columna con el nombre de cada producto bueno en la consulta principal si se fijan me devuelve un producto yo lo que voy a decir acá es que lo que quiero es que este producto ID lo compare con este producto si yo por ejemplo le digo Where Product ID igual 11 me va a decir que el nombre es queso cabrales Entonces cuando logres relacionar acá me va a decirodude 11 el nombre es queso cabrales Pero cómo hago Que este proceso sea automático
Cómo puedo combinar estas consultas bueno primero voy a copiar esto el Select name from products y vamos a seleccionarlo acá una subconsulta se pone entre paréntesis abrimos paréntesis cerramos paréntesis y acá la pego si yo acá le doy enter Ok me va a tirar un Error porque y porque no puse la coma esto coma cuenta como columna Ok Ahí va De hecho yo lo que voy a hacer es dejar abajo espacio espacio espacio abajo espacio espacio espacio esto básicamente es una separación que estoy haciendo para que podamos ver esto mejor no ahí está acá esto
se llama identitar que es como ordenarlo en este caso lo estoy tabulando es decir estoy como haciendo que el código Se separe por jerarquías para que entendamos lo que estamos Trabajando y demás ahí le doy enter y ahí funciona pero si lo pongo toda la misma línea también funciona ya eso ya lo saben okay Y ahí si se fijan me devolvió algo más me acaba de devolver un nuevo campo esto también le puedo a la subconsulta es decir al campo que me está devolviendo la subconsulta le puedo poner porque yo acá también podría poner eh
categoría ID por ejemplo Esto me devolvería un error Por qué Porque no se olviden que acaban columnas el Select Que selecciona selecciona columnas o sea que si Yo acá le paso esto Esto no me devuelve una columna esta consulta si yo la ejecuto acá en la segunda esto que me devuelve me devuelve una tabla esto es una tabla Pero si yo le digo esto solamente Esto me devuelve una columna Entonces como Select selecciona columnas no podemos decirle que me devuelva dos datos ahí deberíamos hacer dos subconsultas por ejemplo hacemos así pongo coma vengo abajo y
le pido que También me devuelva el categoría ID entonces ahí me devuelve ambas en este caso no hace falta poner la coma al final Ahí está y ahí me devuelve el pollo name y el categorey en este caso no hace falta el cántico de allí pero quiero que sepan que se puede agregar varios datos con varias subconsultas en este caso le vamos a asignar el nombre Vamos a ponerle as nombre entonces de esta forma ahora sí tenemos un nombre decente ID quantiti y nombre cuál es el Problema siempre nos va a devolver Chase Por qué
Porque lo que está seleccionando acá el primer valor de la columna para cada fila o sea básicamente esto es como si hiciéramos esto miren por ejemplo el producto ID puede ser el producto ID 112 por ejemplo no la cantidad de ventas fueron de 32 y acá me va a decir el nombre del producto es Chase chus y ahí todos los nombres Qué pasa esto es para cada fila o sea para el próximo registro Ok esto es Exactamente Igual o sea que para el próximo registro por ejemplo producto 42 se vendió 23 veces Esto es lo
mismo lo que va a devolver siempre es la primer fila todos los demás que nos devuelve esa columna no va a devolver así como vimos que viene funcionando todo hasta ahora qué significa eso que si nosotros queremos que el nombre del producto coincida con el product ID tenemos que hacer lo mismo que hicimos antes es lo que hicimos acá le dijimos Word product ID sea igual a 11 y ahí nos devolvió que esos cabrales entonces lo que tenemos que hacer es decirle que el producto ID de la tabla productos sea igual al product ID de
la tabla order details cómo hacemos eso acá tenemos que usar un Word entonces decimos War product ID de hecho acá le vamos a asignar un nombre asp ID le ponemos un nombre chiquito porque si no después esto se nos hace muy largo y no podemos seguirlo entonces pongo p ID igual producto ID ok En este caso le Estoy diciendo que paid que es esto que está acá está siendo referencia al producto ID de la tabla order details y acá este producto ID está siendo referencia al orden ID al product ID de esta consulta Por qué
Qué estamos seleccionando acá estamos seleccionando el de la tabla productos O sea que este producto ID está haciendo referencia a la tabla products mientras que p ID está haciendo referencia al producto ID de la tabla order details O sea que estamos Comparando el producto tales con el product ID de products Entonces cuando ejecutamos esta consulta me tira un error porque estamos utilizando un alias cuando deberíamos utilizar una referencia a esta tabla cómo hacemos esa referencia y acá tenemos que decir order details punto p ID y de esta forma estamos Llamando al campo product ID que
en este caso es este que está acá o que es el alias estamos Llamando al campo productivo de la tabla order details Porque si no yo estoy simplemente Llamando al alias pyd pero pyd adentro de esta subconsulta no existe existe afuera y como desconocemos la tabla que existe afuera tenemos que llamar a la tabla Entonces estamos Llamando a la tabla order details y accediendo a campo ID después acá no hace falta que digamos products.producto podríamos hacerlo porque de referencia esta tabla pero como en esta en esta tabla en esta subconsulta ya estamos haciendo Referencia a
productos con este from no hace falta agregarle el products y ya es suficiente entonces yo ejecuto Esto me voy a tirar un error Por qué Porque no podemos usar un alias dentro de una subconsulta tenemos que directamente sacarlo Yo acá les voy mostrando todas las probabilidades Para que vean Cómo funciona el máximo la subconsultas y ahora sí yo pongo details punto product si yo ejecuto esto Ahora sí tengo el resultado y ahora sí me devuelve el Producto la cantidad vendida y el nombre del producto es hora que está haciendo esto Bueno vamos a verlo de
vuelta de a poquito seleccioname el producto ID listo el producto lo seleccionó la cantidad listo también la seleccionó de order details ya está producto cantidad Pero además en el Select quiero que me selecciones el product name acá tenemos Cloud Time from products Ok de la tabla productos O sea ya no está más entails ahora está en productos donde order Details punto product ID o sea donde el product ID de la tabla en la que está por fuera de la subconsulta O sea la que es en un nivel superior la consulta común no la subconsciente de
la subconsulta es decir el producto ID de order details sea igual al producto ID que como no esté no estamos haciendo referencia a ninguna tabla automáticamente el sistema entiende que está haciendo referencia a la tabla productos Ok entonces repasando estamos Seleccionando el producto ID y la cantidad de order details pero estamos seleccionando el nombre ok de la tabla productos en donde el order ID de esta tabla es decir tales que es este que está acá coincida con el orden ID de la tabla products entonces lo que va a hacer Es OK esta tabla tiene un
producto ID 11 Bueno vamos a seleccionar el producto con ID 11 y devolvemos solamente el nombre queso cabrales y lo mostramos el siguiente 42 vamos a buscar El producto 42 y devolvemos solamente el nombre listo Cuál es el nombre y eso así es como funciona esto y ahí acaba utilizar una subconsulta De hecho voy a checar Como ya no me está entrando en la pantalla voy a achicar un poco la letra Así que ahora sí se empieza a complejizar y ya les molesta a ustedes un poco que achique la letra pero tengo que achicarla porque
si no realmente no se puede ver y así no se puede trabajar así que vamos a checarlo Un poquito nada Más voy a bajarlo a 21 y darle a 6 lo que sí puedo hacer es cambiar el nombre de la tabla order details para que esto sea más cortito Cómo puedo hacer eso bueno pongo as o de Entonces de esa forma acá pongo en vez de orden details o de y cuando actualizo ahí funciona igual porque porque estoy diciendo Che la tabla order details ponele el nombre de ode como ya sabemos le asignamos su nombre
sí las tablas también se les puede hacer asignar nombres entonces en Vez de decir order details punto ID le digo ode Y ahí sí me queda toda una soberbita ejecuto y me corre Exactamente igual de hecho nosotros podríamos hacer esto que está acá y esto que está acá sin el As funciona igual porque porque cuando trabajamos con tablas usar el As es igual que decir el nombre la tabla o sea ustedes pueden hacerlo como quieran con el As o con los corchetes a mí me gusta más los corchetes Me parece que representativo es decir yo
uso por Ejemplo para los campos el As mientras que para las tablas el corchete me parece que es mejor es como que más ordenado y esto es una tablet como que no se pierde sabes separarlo mejor y por lo menos en mi caso me gusta y es más legible Ok después en tema rendimiento Ustedes pueden ir probando tanteando pero si no me equivoco Debería ser más o menos lo mismo Bueno también podemos devolver el precio porque nosotros al final al cabo lo que queríamos hacer era Devolver el precio ni siquiera queríamos devolver el nombre queríamos
devolver el precio qué hacemos Bueno lo reemplazamos por price price Ahí está actualizamos y ahora tenemos el precio de hecho vamos a devolver los dos Campos vamos a devolver esto voy a poner una coma y abajo el precio precio Ahí va acá vamos a volver el product name y acá el price actualizo y ahí está tenemos el nombre y el precio bien me viene gustando lo que vamos haciendo vamos avanzando venimos bien la Verdad que me pone contento y estoy viendo avances la verdad antes de esto quiero que reconstruyamos el ejercicio para que nos volvamos
a situar en donde estábamos en el ejercicio anterior porque porque lo que vamos a hacer ahora va a solucionar el problema que teníamos antes de que teníamos en la cantidad total vendida pero no teníamos cuánto fue lo total recaudado es lo que hicimos antes en funciones de agregación vamos a cerrar todo y vamos a arrancar desde Cero bueno primero lo que hicimos fue Select product ID y el quantiti de hecho lo que hicimos fue seleccionar la suma de la cantidad quantiti Us cantidad total o cantidad sí cantidad vendida o total vendido mejor total vendido from
order details hasta acá estábamos situados antes Ok teníamos todo lo que se vendió y esto ahora lo que pasa es que nosotros lo habíamos separado por grupos Así que lo que hacemos Es darle un grow by product ID Entonces ahora sí Estamos agrupando por producto cada producto va a agrupar y sumar los valores es decir al agrupar por producto ID tenemos el 1 agrupado en uno solo y después Tenemos un montón de Campos bueno el campo cantidad se suma y eso que se suma lo pone en el campo que devolvió el mismo ejemplo que pusimos
acá Ok es si acá tuviéramos 10 20 30 40 nos va a devolver solamente el primero al poner el zoom es decir si yo acá le sacara el zoom esto repasando lo que Hicimos antes ok Ya lo sabemos pero lo repasamos Esto me obliga a 45 porque porque la primer tabla de venta o sea el primer producto o sea la primer transacción en donde se vendió el producto 1 se vendieron 45 unidades por qué Porque en una se vendieron Por qué Porque una se vendieron 45 en otras se vendieron 30 entonces se vendieron 40 Pero
cuál me va a mostrar y solamente me va a mostrar la primera que es 45 en cambio con la función zoom lo que hace Es sumarse todas y ponerse arriba Entonces va a mostrar el total sumado y así para cada fila eso es lo que hace la función esto ya lo sabemos Okay me suma por categoría y me dice lo que se vendió por cada producto o sea si tienes 303 transacciones y cada transacción tiene 50 en total del producto 1 vendiste 150 Esto es lo que está pasando acá Ok hasta ahora lo sabemos no
es nada nuevo lo que estamos viendo ya lo sabemos ahora lo que queremos hacer es obtener lo que Habíamos obtenido antes Ok además de obtener esto queremos obtener el así que bueno vamos a hacerlo además de obtener estos dos datos vamos a obtener el precio Select price from products es decir el precio está en la tabla productos pero el ID es decir product ID en este caso de la tabla productos tiene que ser igual a ode. product y ahora voy a agregarle ese nombre o de la tabla la cerramos Ahí está y acá ponemos ode
entonces de esta forma tiene que ser Igual el producto ID de la tabla productos a el orden de la tabla order detales actualizamos esto y Bueno hay un error que es que me olvide el paréntesis para cerrarla su consulta ahora si ejecutamos y ya está a esto le vamos a asignar un nombre que es price corremos y ahora sí tenemos el precio el producto ID 1 es el producto 1 vale 18 el producto 2 vale 19 el producto 3 vale 10 perfecto ahora lo que tendríamos que hacer es multiplicar el precio por el Total vendido
Entonces si quisiéramos tener el total recaudado que podríamos hacer fácil le ponemos una coma y ponemos par Esto no es como no es una subconsciente es una operación por eso pongo paréntesis pues una operación matemática no podemos hacer su consulta u operaciones Matemáticas en este caso voy a decir que el total vendido multiplicado por price Pero si yo ejecuto esto no me va a dejar porque porque esto se trabaja en el jardín se Acuerdan o sea las funciones de agrupación se trabajan en el jardín no podemos hacer referencia a un alias fruto de una función
de agrupación tenemos que directamente usar la función de agrupación en este caso sería zoom quantiti multiplicado por price actualizamos y tampoco nos deja tenemos que volver a copiar la consulta y es por y pegarla acá actualizamos y ahora sí por qué Porque recuerden que no podemos en el Select usar alias para hacer Operaciones Matemáticas Entonces en este caso estoy haciendo esta operación pero la voy a meter en paréntesis y asignarla a un valor le voy a asignar total recaudado entonces actualizo y ahora tengo el total recaudado entonces de esta forma usé dos subconsultas una sub
consulta simplemente seleccionar el precio y otra consulta para obtener esto que está acá arriba que es exactamente lo mismo que esto que está acá arriba y después lo que hace es multiplicarse por La suma Ok de quantiti es decir en este caso lo que hace es sumarme las cantidades es lo mismo estoy sumando todos los todas las ventas de cada producto en este caso el total vendido es 159 por ejemplo no Entonces esto se convertiría por ejemplo para el primer registro 159 para el segundo en 341 para el tercero en 80 y así para cada
registro porque porque es un quantiti es literalmente esta este campo de acá es decir se multiplica esto por esto y nos Da esto y le ponemos el nombre total recaudado para que podamos ver esto que está acá Entonces es exactamente lo mismo y ahí estamos utilizando nuevamente subconsultas en el Select de hecho quedó hermoso porque ahora sabemos que por ahí el producto que más se vendió no es el que más nos generó vamos a checarlo order by total vendido es decir si yo alquilo ordenarlo por el total vendido me va a decir que Bueno vamos
a ordenarlo de forma descendente Para que me muestre el que más se vendió en este caso da la casualidad que sí el producto 31 no solamente fue el que más se vendió sino que Aparentemente recaudó bastante bien porque recaudó 5.725 Dólares pero es el que más nos generó no es el que más se vendió Pero qué pasa si yo ahora le digo ordenámelo por el total recaudado ejecutó esto y me dice que ahora el producto que más recaudó de hecho Vamos a darle un round porque me está mostrando resultados muy feos De Hecho acá no
vamos a usar round Perdón vamos a usar el round en total recaudado acá round cerramos Y ahí sí me redondea perfecto ahora lo tenemos más lindo más más vistoso el producto que más recaudó fue el producto 38 que de hecho me gustaría ver los nombres ahora vamos a hacer lo mismo copiamos pegamos y usamos product name Ahí está y le ponemos nombre o name entonces sabemos que el producto que más recaudó fue el producto número 38 que vale 263 dólares se Vendieron 239 unidades y recaudó 62 mil dólares el segundo producto que más se vendió
es el 29 se llama Bueno este nombre extraño vale 123 vendió 168 unidades y recaudó 20 mil dólares vamos a ver cuál es el producto que menos vendió a ver o que digamos ya sabemos que el producto que más cantidad es vendió no es el que más recaudó pero el producto que menos vendió es el que menos recaudó Bueno vamos a verificarlo total vendido vamos a sacarle el desk Ahora y ahora me va a volver el que menos vendió Ok el producto 67 vendió solamente cinco unidades bueno quizás fue el que menos generó o por
ahí no vamos a verificarlo vamos a ordenarlo por total recaudado si ejecutamos esto sí efectivamente el producto que menos vendió y el que menos recaudó fue el producto 67 el lauting lamber Jack lager que recaudó solamente 70 dólares obviamente es el producto que tenemos que eliminar no solamente es el que Menos lo vendió sino que es el que menos recaudó ahora sí tenemos una estadística más detallada porque habríamos hecho una habíamos tomado una buena decisión en eliminar el producto 67 pero no habríamos estado en lo correcto si hubiéramos dicho que el producto que más se
vendió que era el 31 en su momento era el producto que más recaudamos porque no con el producto que más recaudamos fue el 38 que nos recaudó 12 veces más que el producto que nosotros Queríamos que era el más el que más recaudaba no el problema de la subconsultas es que son muy pesadas trabajar con muchas subconsultas hace que sea un programa muy pesado y existen una forma digamos mucho más óptimas para trabajar en la subconsultas que son los joints Pero bueno supongamos que ahora yo por ejemplo quiero trabajar con condiciones quiero hacer eso quiero
simplemente trabajar con una condición Cuál es la condición Bueno quiero decir Que por ejemplo esta su consulta que está acá haga una comparación por ejemplo Por qué no quiero hacer un filtro quiero usar un Word Por qué Porque quiero asegurarme que solamente nos devuelva los productos que valen más de 40 dólares por ejemplo esto ya lo vimos si tenemos acá y ponemos Where Es simplemente venir acá y poner entonces price mayor a 40 ejecutamos y si efectivamente nos devuelve los productos que valen más de 40 Pero qué pasa si yo No quisiera Mostrar el precio
Es decir no quisiera que el precio aparezca qué hago borro esta cláusula digo bueno a ver Esto lo voy a borrar el precio no lo quiero mostrar Ay se me fue el price qué hago Bueno lo que hago es voy a copiar esta subconsulta ok La copio Ahí va la copié esto que está acá lo borro y ahora no me muestra el nombre pero sigue tirandome errores qué hago uso la subconsulta ejecuto y ahí está funcionando de vuelta que acabo de hacer Acabo de decirle Che no me selecciones la tabla precio porque no quiero que
me devuelvas el precio ok No quiero que me devuelvas el precio solamente quiero que me lo uses para hacer una operación de comparación porque Recuerden que el Where técnicamente lo que hace es esto vamos a ver qué es lo que hace el Word el War literalmente hace esto hace agarra y lo compara con otro operador obviamente en el caso de los comparadores lógicos No si yo por Ejemplo tengo esto esto que hace literalmente esto que está acá compara este valor con este valor OK Pero esto puede ser una subconsulta también por qué Porque si la
subconsultas nos devuelven datos por ejemplo esta subconsulta que nos devuelve nos devuelve un solo dato que es el precio esta subconsulta para este registro product ID 9 que nos va a devolver el precio Cuál es el precio es 97 Entonces yo vengo acá para el registro 9 esto es Como decir 97 y si lo ejecuto me da el mismo resultado eh el mismo en este caso a ver me devuelve todos porque sí 97 siempre va a ser mayor que 40 entonces técnicamente siempre me devuelve pero lo que ves que decir esto o decir esto en
ese registro lo mismo entonces la subconsultas Recuerden que se Ejecutan primero O sea antes de ejecutarse esta consulta se ejecuta primero la subconsultas porque porque la sub nos devuelven datos por ejemplo se ejecuta Esto y el programa después se entiende esto nosotros estamos leyendo esto Eh Esto es lo que leemos nosotros pero cuando se ejecuta la consulta primero se ejecuta esta chiquitita y esto pasa a ser esto de forma interna y después ejecuta Esto entonces técnicamente la subconsulta nos va a devolver un valor es como si la subconsulta entera se transformara en algo más y
eso es lo que se transforma es lo que estamos utilizando para comparar entonces si yo Digo seleccionarme el precio donde el producto ID de productos sea igual al producto ID details me habla solamente un dato es un precio y ese precio es un número entonces este número lo compara con el 40 es así de fácil solamente que en vez de decirle mostramelo como si fuera una columna más le digo úsalo para la condición porque la verdad que no lo quiero ni ver acá también lo podemos hacer doble también podemos igual pegarlo y decirle que la
demás no lo Muestre es decir podemos venir acá y decirle también quiero que lo selecciones Solo que si le vamos a pedir que también lo seleccione es más fácil decirle as price y acá en vez de usar todo esto simplemente poner price y ahí queda muchísimo más fácil y ya está se ejecuta Perdón Ahí va y me olvidé acaba de cerrar el paréntesis Ahora sí ejecuto Y ahora me devuelve es decir es lo mismo tengo el precio por qué Porque ya que sql dice ok Ya está ya me lo Seleccionaste como me lo seleccionaste asignarle
un nombre ahora que tiene este nombre es más fácil yo estoy haciendo referencia a la columna que me devolvió estos resultados es decir lo que pasa con la subconsultas es que se transforman en un valor Entonces esto técnicamente es como si se transformara en 97 como vimos antes 97 entonces dice 97 ahora se va a llamar precio y venimos acá decimos precio Entonces técnicamente es como si dijéramos 97 así funciona de Forma interna solamente que si nosotros no quisiéramos Mostrar el precio lo sacamos y lo usamos acá de esta forma estamos devolviendo lo mismo Solo
que sin Mostrar el campo de precio y ahí estamos utilizando una subconsulta en un Word obviamente también podemos utilizarla en un from Cómo podemos usarla en el from simple Recuerden que order details Qué está haciendo Me está devolviendo una tabla entera es decir esta tabla OK Vamos a ir parte por parte Las subconsultas en el foam simplemente esta forma repito order details es por ejemplo esta tabla que está acá Ok esta tabla que está acá es hortales Pero si yo por ejemplo le dijera products me devolvería otra tabla Es decir me devolvería products okay Estamos
de acuerdo en eso bien pero qué pasaría si yo por ejemplo le dijera que me devuelva la tabla que me devuelve una consulta porque yo acá por ejemplo estoy haciendo una consulta re compleja tipo esto que Están viendo ahora es una consulta muy compleja Pero qué pasaría si yo ahora esta consulta yo esto lo voy a guardar no lo copio y lo meto dentro de un form por ejemplo Select price from Y en vez de poner products o en vez de poner algo más yo ahora digo seleccioname el precio de o más fácil seleccioname todo
from Y en vez de decirle productos le digo order details o no Mejor dicho vamos a crear una subconsulta para qué Para que nos Devuelva la consulta que acabamos de crear o sea fiesta y la pega acá Select todo from esta tabla porque porque esta subconsulta nos devuelve esta tabla Entonces técnicamente si estas subconsultas se Ejecutan primero entonces todo esto cuando se ejecute se va a convertir en una tabla y estoy seleccionando todos los campos o sea todo esto de la tabla que es la subconsulta Así que vamos a ver qué pasa ejecuto esto y
Wow me lo devuelve es una Subconsulta en la que use el from Por qué Porque dije seleccióname todo from esto ya yo podría decirle solamente el price precio y me selecciona sobre el precio no en este caso el campo price no está Recuerden que lo eliminé pero si tenemos por ejemplo el campo name Así que voy a darle name lo ejecutamos Y tenemos el nombre ya está tenemos el nombre esto nos permite trabajar con consultas más chiquitas porque Porque primero seleccionamos por ejemplo Bueno Vamos a crear una tabla con la que yo quiera trabajar listo
esta tabla es una tabla nueva que me sirve la tabla anterior no me servía Yo quiero esta que me devuelve los productos Y tratar recaudado y todo y además me hace una una condición que sí o sí el total recaudado perdón el precio tiene que ser mayor a 40 entonces tengo una tabla ya completamente filtrada y completamente diferente a cualquier tabla que tenga creada porque yo no esto no digamos yo Esta tabla no la puedo tener ni solo con orden details ni solo con producto que Mezclar un montón de cosas y hacer un montón de
cosas para tener este resultado ahora que ya tengo todo esto acá puedo jugar un poquito más Solamente Devuélveme el name O solamente devolverme el total vendido y ya está o Devuélveme el name y el total vendido y me devuelve ambas e incluso puedo jugar un poquito Ahora sí puedo decir devolverme el nombre y el total vendido De esta consulta Where o sea dónde el total vendido por ejemplo vendido sea mayor a 100 entonces solamente me devuelve productos en donde el total vendido es mayor a 100 y qué acabamos de hacer acabamos de utilizar una subconsulta
en un font porque es si creamos una especie de tabla creada artificialmente para jugar es una tabla virtual con la que después podemos operar Esto no sirve por ejemplo para dividir esto en problemas Más pequeñitos más chiquititos y y graficarlos no porque yo por ejemplo con esta tabla con esta consulta entera hice una nueva tabla o sea toda esta consulta me devuelve una tabla filtrada y con los datos que yo quiero que después esa tabla nueva la selecciono directamente como si fuera una subconsulta y la puedo operar aparte entonces estoy trabajando con una subconsulta que
incluso yo puedo hacer esto eh Para que no me quede tan pesado todo ni tan largo todo yo puedo Venir acá y poner esto y poner esto y esto entonces dejo todo en una sola línea para que no me ocupe lugar y acá está acá puedo poner un Word podría incluso agrupar los demás formas meter más filtros todavía o sea es como bastante complejo todo puedo ordenarlo de vuelta order by total vendido por ejemplo un par de líos pero nada como que es una forma repito de separar la consulta en problemas más pequeños Porque si
yo por Ejemplo primero tengo que agarrar una tabla filtrar completamente después con esa tabla tengo que llevarla a otro proceso de limpieza y con ese proceso final de limpieza puedo llevarla para hacer otra operación Esta es una forma de separarse esto en problemas más chiquititos que podemos ir resolviendo de a poquito para obtener después la tabla final que necesitamos que es por ejemplo una tabla que nos devuelve el nombre del producto que se vendió más de 100 veces y vale más de 40 dólares pudimos haber llegado a esta misma tabla de muchísimas formas cada una
va a rendir de formas diferentes pero lo importante es ir encontrando lo que más funcional no sea y lo más óptimo pero ahora vamos a ir con un ejemplo más más avanzado mucho más largo que esto Ok y que van a terminar de entender del todo porque es es completamente necesario aprender joints bien supongamos que vamos a borrar todo esto Que hay Porque se nos hizo un lío supongamos que nosotros queremos ver la cantidad de ventas que tiene un empleado OK Bueno cómo hacemos esto y tenemos el apartado de orders la orden OK tiene un
order ID y un empleo ID el empleo ID es el empleado que vendió este producto order details nos dice Qué producto y products nos dice el precio del producto entonces técnicamente si yo por ejemplo Quisiera ver cuáles son los empleados que vendieron más de No lo sé más del Más que el promedio no quiero agarrar los empleados que lograron destacar del promedio Cómo puedo hacer esto Esto es algo que va a ser largo OK Así que lo que Les propongo es vamos a hacer un ejercicio aparte de subconsulta porque repito los ejercicios los Vamos siempre
poniendo a mitad del curso vamos a ir metiéndolo o sea cada vez que explicamos algo usamos ejercicios para terminar de explicarlo mejor y terminar de rematar es lo que venimos haciendo pero como Este ejercicio es un poquito más largo Me gustaría darle un poco más de énfasis de ser un apartado especial para un ejercicio de subconsciente pero como es la introducción a los joints siento que se merece un apartado especial Así que vamos a hacer este ejercicio con sus consultas bueno gente en realidad lo que vamos a hacer ahora no va a ser un ejercicio
con Javi sino que más bien va a ser Mostrar un poquito y llevar a la práctica el Código para ver qué es lo que pasaría si nosotros venimos trabajando con sus consultas Si queremos hacer algo Bastante complejo Como por ejemplo intentar relacionar tres tablas Así que eso de eso va a tratar este ejercicio de intentar relacionar tres tablas y conseguirlo realmente no es necesario que veamos sus consultas de la cláusula Javi porque realmente es lo mismo es sigue siendo lo mismo sigue siendo una subconsulta y es una tontería porque Javin es digamos algo que nos
permite trabajar con condiciones como el Where O sea que funcionaría igual que en el Wars lo que podríamos trabajar con funciones de grupos de agregación es lo mismo realmente pueden probarlo y se los dejo como reto pruébenlo no es como que me lo estoy salteando porque ya lo vimos y de hecho vamos a hacer un súper ejercicio ahora Así que vamos de lleno con eso lo que quiero hacer en este ejercicio como ya les comentaba es obtener a los Empleados OK Que lograron vender más cantidad de unidades que el promedio no vamos a hablar de
precios ahora no vamos a ver precios podemos hacer otro ejercicio con precio pero en este caso Solamente vamos a ver los empleados que lograron vender más unidades que el promedio Así que vamos a ver cómo arrancamos bueno primero tenemos que seleccionar los datos de los empleados así que arrancamos seleccionamos bueno acá yo lo que hice fue seleccionar el Nombre y el apellido de los empleados hasta acá estamos bien ok Tengo estos dos datos Last name y First time de hecho vamos a solucionarlo al revés primero el nombre y después el apellido vamos a poner una
coma acá Tiene un error y ya está tenemos el nombre y el apellido de los empleados hasta acá está todo bien Bueno ahora tenemos que hacer lo que hacíamos antes vamos a realizar una subconsulta que lo que va a hacer es hacer lo que hacíamos antes seleccionar La cantidad vendida de cada uno o sea que primero tenemos que hacer grupos tenemos que ir a los productos vendidos a lo que es órdenes digamos y vieron que cada orden tiene un empleado Bueno lo que tenemos que hacer es hacer que cada orden los empleados se agrupen para
sumar las órdenes y las cantidades esto es medio complejo pero lo vamos a hacer bastante simple primero seleccionamos la suma del campo de la tabla order details ahora a la tabla le vamos a asignar este Nombre por eso pongo esto order details punto quantiti Recuerden que la tabla order tiene este campo from orders en este caso orders la vamos a llamar o coma order details order details y esta la vamos a llamar ode Ahí está ahora parece muy complicado pero este simple estamos sumando todo lo que es las cantidades estamos dando sumando todas las cantidades
del campo orders y del campo order detail De hecho yo puedo hacer esta consulta copiarla duplicar Tab y pegarla solamente acá y en este caso es or y es porque porque od es el nombre que le pusimos yo en vez de order details es ode o de order de The betage me confundí ejecutamos y ahí tenemos esto nos devuelve un solo dato Cuál es el dato la suma Bueno hasta acá estamos bien lo que tenemos que hacer ahora es que solamente sume los campos en donde el empleado haya creado la orden porque como saben acá
en orders cada orden tiene un Empleado lo que tenemos que Es que este empleado coincida con el empleado actual de la fila de empleados y que este orden ID coincida con el order de order details tenemos que crear dos coincidencias Entonces vamos a ponerlas en el Word vamos al anterior y vamos a decir abajo Ahí va de hecho vamos a separarla su consulta Ahí vamos a hacer una especie de hidentación Where o punto empleo es igual a e punto en play ID es decir en este caso Vamos a Ponerle a esto el nombre e para
que esta tabla se llame e Ahí va de employs y está la primer condición esto lo que va a hacer supongamos que tengamos el registro 4 no el empleado 4 el empleado 4 cuando esta su consulta se va a ejecutar para cada fila o sea cada fila va a ejecutar esta subconsulta Qué significa eso que en la fila número 4 por ejemplo el employ ID va a ser 4 o sea que 4 Ok esto sería 4 tiene que ser igual al empleo de La orden porque cada orden o sea por ahí un empleado siete órdenes
y otros empleados cada uno hicieron cuatro Entonces vas a tener como 50 órdenes lo que quiero hacer en vez de sumar la cantidad de las 50 órdenes solo quiero sumar la cantidad de las órdenes de este empleado porque si no me va a sumar las órdenes de todos los empleados de hecho fíjense que si yo ejecuto esto no me vuelve nada porque puse or y es od como habíamos visto Antes Ahí va en este caso fíjense un número altísimo pero son las cantidades de hecho acá vamos a poner as unidades totales vendidas pero no le
vamos a agregar son unidades totales Pero qué pasa esto es altísimo ningún empleado vendió esto Qué es lo que está pasando y lo que está pasando Es que todavía no comparamos que el orders el orden ID de esta tabla sea igual a el orden ID de esta tabla Entonces es como que medio que se está multiplicando está saliendo Una especie de producto cartesiano para eso tenemos que agregar Otra condición que es and y ponemos or punto order ID tiene que ser igual la o punto order ID y de esa forma cuando ejecutamos siempre errores o
de le puse no sé por qué pusiste O de redacto ahí va ejecutamos y ahora sí nos vuelve las unidades totales ahora sí tenemos a cuánto vendió cada empleado perfecto logramos relacionar tres tablas en plugins orders y order details la Relacionamos hasta acá está perfecto bien algo básico el problema realmente viene ahora porque hasta ahora no tenían problemas el problema no tener Ahora cuando tengamos que usar el Word esto lo voy a poner acá si yo dijera bueno Where o sea lo que quiero ahora es que las unidades totales sean mayores a 40 por ejemplo
Esto me lo va a permitir las unidades estatales mayores a 400 me lo va a permitir las unidades mayores a 1500 me lo va a permitir está todo bien Pero qué pasa si yo quisiera sacar un promedio qué hago a bg unidades totales Esto me saca el promedio no porque tampoco podemos usar funciones de agregación en un Word las tenemos que usar en un having bueno probemos crow by e punto empleo o sea agrupamos por ejemplo id para poder usar ejecutamos Y qué pasa nos devuelve algo extraño como que no está funcionando del todo entonces
Bueno vamos a probar primero cómo sería con un Word a ver si Lo podemos hacer primero vamos a borrar esto esto lo vamos a dejar así unidades totales tienen que ser mayor a algo que vamos a darle y unidades totales tiene que ser Mayor A El promedio de esto porque esto lo que nos devuelve si se fijan voy a darle 10 ahora para que puedan ver los resultados esto que está acá literalmente nos está seleccionando y nosotros queremos obtener el promedio de esto qué significa eso que tenemos que hacer alguna función que nos permita Seleccionar
algo así más o menos algo a una función que nos permite hacer esto cómo hacemos eso bueno una subconsulta dentro de la subconsulta yo lo que hago acá es creo una subconsulta que me seleccione Ok el promedio de unidades totales pero este unidad es totales no es este unidad Estatal es el unidad es total desde una nueva tabla que vamos a crear ahora recuerdan que el form nos permite crear tablas virtual bueno Yo acá le doy from vamos a crear la tabla Virtual Ok Ahí va from y lo que vamos a hacer en este programa
es lo siguiente vamos a seleccionar otra cosa a su vez porque vamos a seleccionar el promedio de unidades totales Qué significa eso si seleccionamos el promedio de unidades totales tenemos que volver a conseguir la la columna con todos los lo que vendió cada empleado Cómo podemos conseguirlo de vuelta porque no puedo seleccionar esto y mandarlo directamente no voy a seleccionar y ahora ahora viene La magia una subconsulta Esto va a seleccionarlos una subconsulta que vamos a llamarla unidades totales OK ahora vamos a crear esta su consulta pero esta subconsulta nos va a devolver las unidades
totales Ok una columna con todas las unidades totales nos va a devolver para que después podamos calcular el promedio o sea básicamente esto que está acá nos devuelve una columna con una una tabla o columna Recuerden que el form puede seleccionar Columnas o tablas es lo mismo en este caso nos devuelve una columna y igual la columna bueno va a ser igual a unidades totales me explico from Ok from employs que en este caso le vamos a poner E2 porque e1 es como este que está acá ok No queremos alterarlo y las vamos a agrupar
Group by E2 punto employ ID ahora qué va a tener la su consulta bueno la subconsulta Ahora sí va a incluir esto que está acá que es lo que antes habíamos guardado como unidades Totales Así que simplemente copiamos pegamos acá adentro en este espacio y ahora simplemente reemplazo E2 y enter y ya está ya tenemos el promedio si yo le digo ahora quiero que me devuelvas los empleados que tienen por debajo del promedio estos que están acá Bueno o sea que los empleados que tienen más que el promedio son estos y los que tienen menos
que el promedio son estos y de esta forma pude trabajar con un Weber con un grow y de una forma bastante Interesante que es muy larga y es digamos es bastante fea no es bastante fea esta forma si realmente ven lo que estamos haciendo es un montón pero vamos a explicar paso a paso qué paso acá estamos seleccionando el nombre y el apellido de los empleados además estamos seleccionando el promedio de unidades vendidas hasta ahí está bien seleccionamos nombre apellido y unidades y unidades totales que tiene Okay el nombre el apellido y lo que vendió
esto Lo entendimos después esto lo seleccionamos de empleados Ok que le asignamos un nombre llamado e hasta acá estamos muy bien el problema viene acá que se les complica un poco y es donde unidades totales o sea donde este campo para cada registro sea mayor al promedio de unidades totales ahora como no podemos poner esto lo que tuvimos que hacer fue seleccionar el promedio de un campo que acá le estamos pasando el campo va a seleccionar la suma de todas Las cantidades lo mismo acá vieron lo mismo que hicimos acá para obtener esta columna lo
mismo eh es lo mismo y le pasamos acá dentro o sea así como de esta forma obtuvimos esto lo volvemos a obtener para crear una tabla virtual que es como algo imaginario para que el from pueda agarrar esa tabla virtual y seleccionar ese campo para sacar el promedio que a su vez ese promedio es seleccionado por esta subconsulta que va a devolver un solo número que es el Promedio si el promedio es 30 lo va a devolver si el promedio de 50 lo va a devolver y esto se va a convertir en el promedio el
promedio no sé cuánto es pero supongamos que por lo menos 500 esto se va a convertir en el promedio y para cada registro va a verificarlo si las unidades totales de Jaimito fueron 600 lo devuelvo Si fueron 1000 las devuelvo Si fueron 10.000 las devuelvo Si fueron 300 no porque ya no cumple la condición Entonces eso es básicamente lo Que hacemos con todo este código bueno acá vamos a terminar este ejercicio lo logramos Bueno no es rapidísimo técnicamente porque con Jones lo podríamos mejorar mil puntos pero vean así como estaban al principio del curso y
después de ver esto O sea realmente avanzaron un montón pero Todavía faltan un montón de cosas porque Ustedes se creen que saben hacer todavía y que saben hacer muchas cosas y que ya tienen un montón de cosas que antes aprendieron Y que la gente que incluso trabajó con sql va a decir o sea Guau Yo trabajé con sql pero nunca vi estas cosas Bueno todavía falta más y yo te lo voy a enseñar porque ese es mi trabajo así que vamos con el siguiente apartado porque estoy emocionadísimo por continuar con este curso que está llegando
a su fin así que bueno continuamos con lo siguiente que creo que les va a servir mucho y van a entender el por qué les decía del tema de optimizaciones de su Consulta porque esto es un código que si bien no solamente no es legible no es eficiente tenemos que ver cuando usar sus consultas porque no sirven por ejemplo para separar el problema en partes más pequeñas para digamos crear una especie de solución intermedia en una consulta para por ejemplo realizar cálculos u operaciones extra también como etapa intermedio antes de ejecutar una consulta o sea
de ambas formas también pero el tema es que a veces los Joins ocupan más código pero son mucho más eficientes porque los joints usan índices o sea acá es como ejecutar dos consultas Ok esto que están viendo ahora es como ejecutar dos consultas mientras que un join internamente funciona como si fuera una sola consulta con índices Entonces es todo mucho óptimo y se vuelve todo mucho más rápido porque los motores de bases de datos tienen esta funcionalidad incluida para poder hacer que todo sea más rápido y esto Cuando Hacemos muchísimas consultas cuando son cosas mucho
más largas y demás puede ser digamos bastante pesado entonces podríamos intentar resumir esto o el tiempo que tarda en cargar esto con los joints y de hecho tenemos que aprenderlos porque si no saben Jones no pueden digamos postularse un trabajo de sql en el que optimizar cosas sea un requisito porque los joints son la clave básicamente para meterse a ese mundo Entonces no nos queda otra que Entenderlos así que vamos de lleno con los joints bueno hace rato venimos hablando de los joints sin darnos cuenta en el curso hemos trabajado con uno que otro join
de forma implícita pero esta es la clase donde vamos a ver todo sobre los joints quiero que sepan que es imposible abarcar todo lo de los shoins en un solo curso porque podemos hacer joins de la magnitud que se imaginen o sea los joins es para rato podemos hacer un curso de 10 horas 20 horas de Jones lo que vamos a ver ahora es la forma básica de los Jones como utilizarlos Cómo es lo más común y los funcional para que si están en un trabajo puedan manejarlos correctamente bueno para arrancar vamos con la definición
técnica los joints son la presión que nosotros solemos utilizar en las bases de datos para poder combinar la información de dos o más tablas en una base de datos pero que esa información se devuelva en una sola Tabla o sea básicamente es agarrar dos o más tablas unirlas y obtener una tabla nueva existen varias formas de unir imaginemos que tenemos un listado de personas que son estudiantes por ejemplo y otro listado de personas que trabajan no tenemos un listado con personas que trabajan y otro listado con personas que estudian cabe Resaltar que la lista de
personas que estudian demuestran qué es lo que estudian y la lista de personas que trabajan muestran De qué trabajan Entonces cuando unimos las tablas podemos obtener diferentes tipos de resultados con los joints por ejemplo un listado de personas que estudian y que al ladito nos muestre si trabajan de qué trabajan también podríamos devolver una tabla que solamente muestra las personas que trabajan pero si estudian que muestre su información también podríamos devolver un listado de personas que estudian y trabajan al mismo tiempo o sea que no Nos devuelvan las personas que solo hacen una cosa que
nos devuelvan solamente las personas que trabajan y estudian al mismo tiempo o sea como la la unión de esas dos estas cosas y más podemos hacer con los joints Ok tenemos varios tipos de joints pero lo más común es clasificarlos en cuatro tipos de joint los Inner join que son los shoin comunes de toda la vida Los left join los write joints los full joints y esos son los cuatro más comunes pero también Tenemos el Cross join vamos a arrancar Obviamente con el más fácil de todos y el más usado del mundo que es el
Inner join que nos devuelve la coincidencia entre ambos Por ejemplo si tenemos una lista de colores rojo verde azul y otra lista de colores que sea amarillo Violeta verde nos devuelve la coincidencia Cuál es el campo que coincide verde Entonces lo devuelve a veces las personas utilizan la forma antigua que teníamos de hacer inners Join que no usaban la palabra clave Inner Jones sino que lo hacían de forma implícita tenemos dos formas de hacerla la implícita y la explícita la implícita es cuando lo hacemos sin usar la palabra join sino que lo hacemos de esta
forma Select employs vamos a esta tabla asignarle from orders coma orders o entonces de esta forma estamos seleccionando todos los datos de empleados y de órdenes Ok y acá usamos un Word y decimos que Solamente queremos unir los datos de empleados y de órdenes solamente cuando coincidan Entonces lo decimos e punto ID igual o punto empleo edit porque porque qué es lo que nos está devolviendo esto de forma interna si yo ejecuto esto nos devuelve un producto cartesiano como todos los Jones la mayoría en productos cartesianos OK Pero qué es lo que está haciendo acá
y cómo está funcionando esto de forma internamente esto lo haciendo es ejecutar para cada columna Ok un valor si yo esto Lo sacara que me devolvería fíjense que ahora me está devolviendo un asiento 196 filas pero yo no le pusiera la condición me devolvería 1960 filas o sea 10 veces más por qué es eso bueno porque si se fijan la tabla employs tiene 10 empleados y la tabla orders tiene 196 órdenes y el número de antes eran 1960 O sea que es como si agarramos la cantidad de órdenes y la cantidad de empleados y las
multiplicamos bueno exactamente Por qué Porque si por ejemplo supónganse que ahí vamos a ir la tabla empleados hay 160 órdenes cuando unimos los campos lo que va a suceder es que se va a mostrar Una para cada una Esto es lo que se llama como Cross join es el cruzado Ok vieron que hable del Cross joint Bueno Este es el join cruzado decir esto es exactamente lo mismo que si dijéramos Cross join orders O solamente que la única diferencia de hecho podemos ver acá abajo que hay ciento la misma Cantidad de filas la única diferencia
que estamos usando el Cross join estamos usando un tipo de join para hacer esto pero es lo mismo que si dijéramos esto la verdad Cómo funciona esto bueno Esto funciona de forma Cruzada vamos a verlo en Paint supongamos que tenemos estas dos tablas no una tabla que tiene solamente una columna y una tabla que tiene solamente otra columna la primer tabla tiene la columna colores con tres datos rojo Verde y azul y la segunda tabla tiene solamente una columna con otros tres datos chico mediano y grande lo representé como con tamaños y con colores para
que sea más gráfico supongan sé que yo quiero usar un Cross join acá no Bueno listo usamos un crochet unimos estas tablas con un hacemos exactamente esto ponemos seleccionar from colores Cross joint tamaños que nos va a devolver bueno básicamente lo que va a suceder acá es Que se van a reculear entre todos o sea se van a dar todas las posibilidades una fila va a devolver rojo y chico otra fila va a devolver rojo y mediano otra fila va a devolver rojo y grande por otro lado la cuarta fila va a devolver verde y
chico la quinta fila va a devolver verde y mediano la sexta fila va a devolver verde y grande como la deja la fila 7 para devolver azul y chico la fila 8 va a volver azul y mediano y la fila 9 va a devolver azul y Grande estamos multiplicando la cantidad de filas que hay en una columna por la cantidad de filas que hay en otra columna eso es lo que hace el Cross join esas posibilidades y básicamente si nos tuviera que devolver filas nos devolvería algo como esto Esto es lo que me devolvería esta
este Cross join no me devolvería una nueva tabla con color y tamaño en donde en una fila tenemos rojo chico otra rojo Mediano otra rojo grande después verde chico verde mediano verde grande después azul chico azul mediano azul Ese es el producto se une todo y se junta todo lo que hacemos con esta condición que estábamos usando con esta forma de hacer un cluin porque esto hasta ahora como es ahora es un Cross joint es un sin condición esto que está acá es un join implícito de los Inner joint Por qué Porque nos devuelven solamente
las que coincidan es decir Recuerden que como Vimos el producto cartesiano lo que está devolviéndonos acá si no ponemos la condición es si hay 10 empleados me devuelve cómo sería si mezcláramos la primer fila de empleados con la 160 filas de órdenes después de eso me pone cómo sería el segundo empleado mezclada con cada una de las 160 órdenes de la tabla órdenes después va por el tercero y así va siendo 160 320 580 Y así va sumando hasta que cuando se ejecutaron las 190 filas y se mezclaron con los 10 Empleados quedaron 196 filas
por 10 o sea se multiplica se pusieron las 196 para cada una de las 10 y ahí es como nos quedó el resultado que es el Cross join Pero de esta forma hacemos un Inner join Ok el crossong ni lo vamos a ver porque casi que no lo usamos realmente el crossong casi ni se usa ni siquiera se tiene en cuenta O sea ni siquiera se tiene en cuenta nada pero está bueno que reconozcan y sepan Cómo es el Cross join para que cuando alguien diga no hizo un Cross join sepa que no estamos refiriendo
Pero esto que está acá es un Inner join pero la forma correcta de hacer Inner joint Es simplemente sacar esto que está acá y poner Inner join y acá ponemos el Inner join es decir con qué tabla lo queremos instalar y con órdenes orders o o sea en vez de poner una coma y pegarlo acá simplemente ponemos el Inner joint y le decimos a Liner Cuál es la tabla que queremos unir o sea vamos a unir esta tabla con esta Tabla de acá y después en vez de un ware tenemos que usar algo elon es
la condición o sea cuál va a ser la condición de Unión Cuál es la condición que me va a permitir unir las tablas y simple Solamente vamos a devolver las tablas en las que el empleo ID y el empleo ID de la otra tabla se se sean el mismo por qué Porque si por ejemplo hay 160 órdenes cada orden pertenece a solamente un empleado pero se está ejecutando y cada orden se Devuelve para 10 empleados diferentes entonces lo que hacemos con esto decirle no Devuélveme solamente las órdenes en la que el empleo ID de esa
orden en específico en este caso si tenemos por ejemplo esta orden supongamos que se ejecuta la primera orden solamente va a devolver la primera orden si el empleo ID es 5 y al lado va a mostrar los datos del empleo ID 5 solamente va a devolver la segunda orden si la empleo hay 10 6 y al lado va a mostrar los datos del Empleo de 16 Esto es así entonces si subimos vemos que dice empleady 5 los datos la orden de vuelta se muestra el empleo ID porque básicamente lo que hacemos acá es seleccionar uno
de los campos que lo vamos a eliminar ahora vamos a seleccionar simplemente otro nombre que va a ser Last name coma First name order ID y ahí con esto ya está ahora sí tenemos digamos la esta tabla y ahí tenemos un join un Inner Joint que el Inner joint es como decir join de hecho si le sacáramos el Inner esto funcionaría Exactamente igual porque Perdón le saqué es solamente si le sacamos el Inner funcionará igual porque en sql Inner joint es lo mismo que un join es como decirlo no es lo mismo decir un yonkee
pero cuando nos referimos a un joint índice hizo un join es que hizo join Ok de hecho hasta dentro de esta Norma está especificado la mayoría de bases de datos soportan Esto pero mi recomendación es use Nino join no pierden nada en vez de usar solamente un joint está viendo sobre poner adelante para mí aumenta la legibilidad del código mejora la legibilidad del código para poder entender mejor cómo funcionan los choins se me ocurrió armar una nueva tabla por qué Porque como los iner unen Campos Ok como en campos es decir dicen bueno a ver
cuáles son los campos que están en esta tabla y en esta tabla o por ahí te Dicen Cuáles son los campos que están en esta tabla y que no están en esta tabla Entonces como básicamente lo que hacemos Es unir a través de diferentes relaciones y demás y en esta base de datos todos tienen todo o sea por ejemplo no hay ningún faltante y no hay datos que no se relacionen Por qué Porque por ejemplo todas las filas de todos los productos tienen una categoría y un proveedor todos todas las todos los empleados tienen órdenes
todas las Órdenes tienen detalles Entonces no hay ningún dato faltante siempre va a estar todo muy bien encasillado para explicar mejor los joins lo ideal es que tengamos algunos datos faltantes y que podamos tener diferencias y tengamos diferentes tipos de tablas para combinar y que entendamos mejor así que vamos a crear una nueva tabla para poder explicarlo mejor que de hecho es un pedazo de ejercicio porque crear una tabla de hecho no lo hicimos hasta ahora o sea lo Hicimos Sí con Bruce Data podemos venir acá darle click Table y lo podemos hacer desde cero
pero no lo quiero hacer de gestor quiero hacerlo en código para que sepan Cómo podrían crear una tabla en código primero se utiliza el comando create Table acá lo que decimos es bueno qué tabla quieres crear Bueno voy a crear una tabla llamada rewards lo que se me ocurrió a mí es por ejemplo la recompensa del empleado no hay empleados que van a Tener recompensas y otros empleados Puede que no ganen ninguna Ok entonces rewards ahí está mejor Porque algunos un empleado puede tener una recompensa dos recompensas o ninguna entonces Está bueno que lo podamos
ver así después abrimos paréntesis Porque porque los paréntesis adentro de los paréntesis vamos a pasarle toda la información de la tabla Entonces es queríate una tabla en la llamada rewards que tenga los siguientes datos primero vas a tener un Campo llamado reward ID que va a ser tu clave primaria y este va a ser un interés los integras son ints enteros lo que ya vimos antes vas a tener otro que va a ser el empleo ID que va a ser el empleado que recibe la recompensa integer y después vas a tener otro que se llame
reward que va a ser que joraca ganaste que también va a ser íntegra porque esto va a ser una cantidad en dólares las recompensas son dólares es como Bueno te ganaste el premio del mes De cuánto fue el premio bueno eso lo va a decir este campo y después va a ser el mes montt significa mes en inglés y esto vamos a ponerlo con text para que sea texto y ahora sí tenemos esta tabla lo único que nos falta acá es decirle Cuál va a ser la clave primaria porque acá nos estamos diciéndole que ninguna
es la clave primaria Entonces vamos a poner una coma acá y de hecho vamos a separar todo el barrio con coma porque siempre se tienen que separar con coma excepto Al final acá no habría que poner una coma si no hubiera nada más Pero como vamos a seguir agregando una cosa más se pone una coma y bajamos tenemos que decirle que hay una primariquí Ok hay una clave primaria acá es importante que dejen el espacio Ok porque por un lado la palabra primary es para una cosa y es para otra ki es para decirle que
va a ser una clave mientras que primary decirle que va a ser una clave primaria ya saben de esto que estuvimos hablando El key se va a llamar reward ID es decir esto que está acá hace referencia a esta tabla y estamos convirtiendo a esta Perdón esta tabla no esta columna estamos haciendo referencia esta columna y estamos diciéndole que esta columna va a ser una y primaria que además es autoincrementable Ya está si ahora ejecutamos Esto me va a tirar un error porque alguna lo mandé Le pifie con la coma acá no lleva una coma
es reward dv espacio Autoincremento Ahora sí ejecutamos Y acá se acaba de crear la tabla si venimos a acá podemos ir a reward y acá tenemos nuestra tablita creada todavía no tiene datos Porque no lo pusimos pero acá ya podemos ver que en vez de tener nueve tablas tenemos 10 y acá está nuestro otra tabla ahora vamos a insertar datos porque tenemos que insertar varios datos a mí se me ocurrió insertar seis datos cinco datos que sean acerca de empleados diferentes pero en vez de que hacer que Sean seis empleados diferentes vamos a hacer solamente
cinco cinco van a recibir premios y hay un mes en el que ningún empleado reciba premios vamos a hacer eso para que podamos después ver cómo funciona ese campo ese esa fila Mejor dicho así que para eso vamos a darle insert into rewards qué querés insertar Bueno quiero insertar tres Campos porque el primero no hace falta porque es autoincrementable o sea mientras vamos registrando eso va auto Incrementándose Entonces vamos a registrar el empleo ID vamos a registrar la recompensa y vamos a registrar Por último el mes Ahí va y qué es lo que vamos a
registrar Bueno vamos a registrar los valores y acá vamos a poner los valores y los vamos a separar con coma se abren valores Ok valor valor coma valor coma valor coma valor coma acá tenemos los cinco registros que vamos a registrar una cosa es que si realmente no les entran acá pueden Cerrar esto yo por ahí no les dije eso vieron que yo encogí la letra en vez de cerrar esto se preguntarán de alto Por qué no cerrás estas pestañas y tenés todo largo bueno porque como yo pongo la cámara en este espacio que está
acá yo me acostumbré a que si pongo la cámara lo ideal es siempre dejar un pequeño espacio para que si yo no me doy cuenta y el código No se ve no cargarles a ustedes el aprendizaje Porque si yo esto lo borrara y Acá hay código Puede que no Se vea el código por mi cara y no quedaría andar cambiando la cámara y demás mejor este espacio de salvarlo para la cabeza y Listo Ya está bueno ahora sí acá vamos a entrar cinco registros ya sabemos que esto es una tupla que nos pide información bueno
el primer dato que nos pide es el empleo bueno el empleo va a ser tres al de empleado 3 le vamos a dar 200 dólares y va a ser el mes de ya no hay esto es enero el segundo mes va a ser el Empleado 2 que le vamos a dar 180 dólares extra y va a ser el mes de febrero y febrero el tercero va a haber ganado empleado 5 ganó 250 dólares en el mes de Marge marzo Repito está en inglés yo Lo pondré en español pero como la base de datos norwing que
nos descargamos está en inglés para mantener la relación y mantener una un sentido de hecho lo hacemos en inglés y no solamente eso sino que fíjense que yo en la vida real pondría ID empleado Ok con Un guión bajo pero acá ponen en play la primer palabra con mayúscula y después el ID lo ponen todo con mayúsculas la y con mayúscula y la d con mayúscula Entonces yo para respetar eso puse también reward ID así lo puse tal cual para respetar esa forma de escribir que ellos mantienen Entonces nada que tengan sentido que yo también
se suele hacer mucho cuando van a trabajar otra base de datos lo que hacen es respetar el estilo de escritura y no lo cambian a su forma Porque tienen 30 bases de datos con un estilo no van a llegar ustedes y decir bueno Quiero agregar esta tabla chiquitita no no no lo hacen Como lo hicieron los demás desarrolladores y demás Aunque la mayoría de veces son todos explotados ya cualquier cosa pero bueno una base de datos bien hecha esto se se hace bien no normalmente Bueno voy a seguir insertando Vamos a darle al primero 280
dólares en el mes de abril el Empleado 4 no el empleado Sí el empleado 7 ganó el empleado 8 Mejor dicho ganó el mes siguiente con 160 dólares extra y Esto fue en el mes de mayo en cambio en el mes de junio ningún empleado ganó Así que vamos a poner null y la cantidad es nada porque sin ningún empleado ganó no hay recompensas Esto fue en el mes de junio entonces en de enero a mayo todos ganaron Pero el mes de junio fueron unos vagos no ganó nadie ninguno se esforzó De más esto lo
voy a sacar Ahí va ejecuto este código y ahora sí dice que se ejecutó correctamente sin errores Entonces yo vengo acá Bruce Data y veo la información que hay en rewards me aparece estos datos Qué significa que hicimos un correcto registro de esta información ahora vamos a intentar operarla y jugar un poquito para ver qué es lo que nos va a devolver Bueno voy a borrar esta consulta y vamos a comenzar vamos a arrancar con un simple ejercicio Que es el Inner join que ya lo vimos pero vamos a volverlo primero vamos a seleccionar todo
from en ploise Ok employs acá nos devuelven todos los datos de los empleados esto lo hicimos mil veces y ya está ya lo sabemos ahora le vamos a asignar un nombre a esta tabla para que después cuando hagamos un Inner joint podamos unirlo con la tabla rewards que vamos a llamar r en la condición que o sea siempre y cuando vamos a unirlos cuando se cumpla la Condición de que el e punto empleo sea igual a r punto ID y de esta forma nos devuelve toda la información de los empleados que tienen recompensas acá vamos
a especificar Qué información queremos devolver porque acá está devolviendo información que realmente no nos interesa vamos a devolver el First name el reward y la recompen en este caso el mes perdón O sea el nombre lo que ganó y en qué mes lo ganó ejecutamos y ahí nos devuelve las Coincidencias en el mes de enero ganó 200 dólares Janet en el mes de febrero ganó 180 dólares Andrew en el mes de marzo ganó 250 dólares Steven en abril Nancy 28 mayo 160 Laura y bueno en el mes de junio no ganó nadie Entonces no lo
muestra o sea existe un registro del mes de junio pero no está también existen registros con otros empleados pero no ganaron Estos son solamente los campos en los que coincide esta condición de Unión Entonces de esa forma Podemos obtener solamente los empleados que han ganado una recompensa en algún mes normalmente hay algo que se llama cardinalidad y si ustedes saben de bases de datos de cero o uno a cero o uno es decir un empleado puede o no puede haber ganado una recompensa pero solamente una como máximo y hay recompensas que pueden tener empleados o
pueden no tener empleados pero pueden tener solamente uno como máximo ya vamos a verlo cuando veamos cardinalidad Ok que de hecho es El siguiente punto que tenemos que ver después de joins esto si lo hiciéramos con su consultas lo que haríamos sería ejecutar el yo incrustado solamente que a pesar de que nos dé este mismo resultado o sea con sus consultas podríamos tener esto pero Cuál es la diferencia Recuerden que una subconsulta nos trae todos los resultados y con esa nueva tabla la está filtrando entonces absolutamente si tuviéramos mil órdenes y 10 empleados para cada
empleado se van A traer las mil órdenes y después se va a filtrar mientras que de esta forma o sea digamos sería en total 10.000 10.000 filas que se trajeron para después filtrarse versus esta forma que se abrían directamente trabajado con solamente las filas que coincidan por eso los joins son más rápidos porque utilizan índices para poder trabajar de forma interna mucho más rápida porque cuando trabajamos con índice más rápidos y está optimizados para eso normalmente El gestor de base de datos siempre optimiza lo que más puede el manejo de los índices para que podamos
Navegar más rápido y cuando trabajamos con Jones y con índices la velocidad sea mayor bueno así de fácil son los Inner joint después tenemos otro tipo de join que son los left joint que es lo único que tenemos que hacer es simplemente poner Ah bueno otra cosa que no les dije Es que para representarlos Inner joint Ok los Inner join lo que hacen básicamente si tenemos Una tabla a y una tabla B lo que hacen los Inner join es básicamente solamente mostrarnos las coincidencias Ahí va O sea si yo por ejemplo digo Select todo from
tabla me devuelve toda la tabla si yo digo Select todo from tabla B me devuelve todo lo que es la tabla B Pero si yo digo Select todo from tabla Inner join tabla B me devuelve todo y ahí tenemos un shoin cruzado por más que diga tenemos un cruzado después usamos la usamos on para establecer la Condición y ahí es cuando especificamos la condición de unión para que solamente se relacionen por el ki y hay automáticamente nos devuelve solamente la intersección o sea de una forma nos devuelve solo una tabla después nos devuelve Solo otra
tabla y después nos devuelve la intersección entre esas dos tablas en cambio el left joint lo que nos devuelve es una tabla y parte de la información de la otra tabla me explico es decir nos devuelve por ejemplo toda La tabla de empleados completa y además si ese empleado tiene una recompensa que en este caso se representan con la tabla B me la muestra porque fíjense que me está agarrando un poquito de la tabla B porque muestra toda la tabla a y los datos ve que coincidan con a Entonces todos los empleados me los muestran
pero si tienen recompensas se la ponen al lado si no lo rellenan con Campos nulos Por qué Porque estamos pidiendo que hagan una Unión con la tabla b y que me Muestre toda la app pero si hay algo de la tabla que pueda rellenarse con b se rellena eso es lo que hace un left entonces lo que tenemos que hacer es simplemente reemplazarle Inner por left y así de fácil si yo ejecuto Esto me devuelve esto fíjense que me devuelve null null null null y los demás Campos o sea lo mismo que antes solamente que
ahora me devuelve nombres de más empleados por qué porque esto lo que me devuelve es la tabla con los 10 Empleados solo que en vez de devolver todos los datos me devuelve el name porque yo le estoy diciendo que solamente me devuelva el First name si no me volvería a todos qué es lo que hace esto como les dije y la tabla a me la devuelve completa ahora yo le estoy pidiendo el name por eso Solamente me devuelve el name y de la tabla B me devuelve la recompensa y el mes pero ahora me va
a devolver la coincidencia es decir si hay Campos que no coinciden Ahora no me los muestra me como null pero los campos que sí coinciden me los ponen por ejemplo Nancy ganó una recompensa Andrew también Janet también margaret no por eso me pone null Steven ganó una recompensa y en el mes de marzo Michael y Robert no Laura ganó una recompensa en el mes de mayo Annie y Adam No eso es lo que significa esto y después podemos hacer un proceso inverso es decir tenemos otro tipo de join que es el wright join es decir
en vez de Devolver los datos de la tabla y rellenar con los campos correspondientes de la tabla B lo hacemos al revés devolvemos toda la tabla B en este caso devolvemos todas las recompensas y llega un empleado asociado devolvemos esos datos del empleado asociado Lamentablemente en la base de datos es no se puede hacer un left join Por ende si no podemos hacer left join lo que hacemos Es simplemente usar una técnica inteligente e invertir las tablas si Esta es la tabla a Y esta es la tabla B el right joint funciona así tablada tabla
B pero right join funciona así tabla B tabla B pero la estructura es O sea que si lo que tenemos que hacer que es esta que es la tabla B tenemos que unirla con esta que es la tabla pero tenemos que hacer un right joint De hecho si se fijan yo pongo right y no funciona porque no funciona la forma correcta es hacer un left joint es simularlo que lo estamos simulando Cómo Cambiamos el nombre de las tablas esto que está acá lo ponemos acá y esto que está acá lo ponemos acá y ahí básicamente
lo que hicimos fue invertir las tablas ahora técnicamente la que era la tabla B pasa a ser la tabla a entonces sin darnos cuenta lo que estamos haciendo estamos haciendo una especie de right joint porque Recuerden que el write join hace que la tabla a no se muestre completa pero si se muestre completa la tabla B solamente que como Pusimos primero la tabla B tenemos un solamente que esto no es teóricamente correcto porque a ver lo que estamos haciendo ahora es de repente estas son es más la tabla B si la tabla está acá ahora
es la tabla a solamente que decimos que hicimos una simulación de un raid joint esto a los desarrolladores se lo tenemos que especificar porque cuando un programador venga esto y diga Ah pero qué hizo acá no sé qué es lo que hizo Bueno le dejamos un comentario simulando Un wright join invirtiendo las tablas rewards y employs simulando un write invirtiendo las tablas rewards y empleos Entonces de esa forma el programador que lea Esto va a decir Ah ok Qué está haciendo Acá está simulando un rack joint O sea que esta sería la tabla b y
esta sería la tabla porque por estamos dejando al programador que sepa que estamos simulando en Ok entonces cuando lea el código un programador vea este código de La base de datos que nosotros le dejamos va a decir ah Listo o sea esto no es un left O sea si es un let's pero el objetivo este es simular un raid join O sea que si yo este código lo llevara a otra base de datos simplemente intercambio esto por esto y acá le pongo write porque en otras bases de datos como maisín o el sql server y
demás funciona con right No hace falta que demos vuelta a los nombres pero en esquite no en sqlite funciona de esta Forma y es igual de efectivo eh créanme que la efectividad es la misma o sea el único que sí varía un poquito si no me equivoco es el full joint que tampoco lo acepta sqlite pero vamos a ver cómo simularlo Entonces de forma hacemos un write join Y si quisiéramos hacer un left join Ok simplemente hacemos lo otro que es poner a la tabla a primero la tabla ejemplois la tabla B Es rewards como
ahora estamos poniendo la tabla B en el lugar de la tabla estamos Invirtiéndolo y estamos simulando un wright join es técnicamente eso es bastante simple ahora se preguntarán Cómo puedo yo trabajar con un full join primero Qué es un full joint bueno el full join es el último tipo de join Ya vimos Cross join y no joint left joint Ahora nos falta el full joint el full join es lo que vimos al principio Devuélveme todo esto se llama full outer join la diferencia es que esto No necesariamente nos devuelve un producto Cartesiano cruzado es decir
no nos devuelve lo mismo que un Cross join Ya que en realidad un Cross joint nos viene a devolver como esto pero multiplicado o si es como una multiplicación en lugar de sumarse están como que multiplicandose mientras que el full join nos devuelve todo ahora vamos a ver cómo funciona el full join pero básicamente el full join funciona Unión y acá tenemos el full join me devuelve todos los datos de recompensas aunque no Tengan empleados y todos los datos de empleados aunque no tengan recompensas estamos mostrando la tabla completa en su totalidad a pesar de
que bueno No necesariamente coincidan pero que joraca es Unión y cómo funciona y Qué pasa si pongo Unión all Unión all me devuelve más datos Porque Unión olme devuelve más datos tengo Unión alt y Union entonces tengo en tengo Nancy repetido tengo Andrew repetido tengo Janet repetido a o casualidad los datos que se repiten son Los mismos datos que coinciden no entiendo nada Y si yo pongo así sin el all me devuelve los datos completos qué es esto de Junior bueno gente esto que está acá fue un full joint Así se hace un fuchón Union
es una cláusula que no sirve para unir los datos de una tabla con otra tabla en una sola pero teóricamente tienen que entender que lo que está pasando acá es eso se están uniendo las tablas y haciendo de esta forma una simulación de full join Entonces en este caso estamos simulando un full join uniendo un left join con con una simulación de wright esto es técnicamente lo que estamos haciendo en esta consulta sql estamos uniendo dos consultas en la que una tiene un raid joint y nota tiene un left joint para obtener el full join
que es la unión completa de las dos filas Y en vez de ponerle unional le estamos poniendo solamente Union Por qué Porque los campos que están duplicados queremos Que los elimine completamente pero para explicar esto tenemos que entender que es Unión y que es Union al Bueno vamos a ver cómo funciona Union voy a crear una nueva pestaña duplicate Tab y voy a eliminar esto más que nada para que esto no se nos vaya de memoria que podamos después entender cómo sucede acá me encanta como siempre aprovechamos cosas para explicar todo o sea Ah ok
No funciona el full join ni el right joint Bueno vamos a explicar Union y Explicamos Union que es algo que nos sirve que nos suma y que igual lo tenemos que saber aprovechamos todas las posibilidades me encanta bueno es una cláusula que se utiliza en sql para combinar dos o más tablas pueden ser la misma tabla por ahí combinamos la misma tabla porque no combinamos tablas combinamos consultas es decir las consultas nos devuelven tablas normalmente entonces lo que hacemos Es simplemente combinar esas Tablas que nos devuelven las consultas y lo bueno de solamente de la
cláusula Union es que si la fila se muestra varias veces solo se muestra una vez O sea si se repite en filas y uno las agrupa y las hace una sola Por ejemplo si hay tres filas que nos devuelvan verde mediano verde mediano verde mediano solamente nos va a devolver una fila que es verde mediano porque a veces al combinar consultas yo por ejemplo hago una consulta que sea Devuélveme el Listado de nombres de primero puede ser Lucas Jaimito y Pedro y ahora Devuélveme el listado de gente de segundo Mateo Juan y Lucas bueno acá
tenemos personas diferentes Pero cuál es la diferencia que hay uno que coincide Y si usáramos un Union nos devolvería dos filas pero como Union devuelve solamente los campos que no están repetidos esas dos filas se agruparían y ahora desapareció y se convirtió en una fila por eso acá cuando usábamos unional nos devolvía todas las Filas porque la unión de estas consultas nos devuelve eso ya que esta consulta nos devuelve seis filas y esta consulta nos devuelve 10 Entonces al unirlas tenemos 16 filas con él y unión al pero con el Union las filas duplicadas se
eliminan y ahí nos quedan las 11 filas que son las 10 filas de los empleados al lado de la información de recompensa y arriba de todo tenemos la única fila de rewards que no está asociada a ningún empleado que es esta que está acá pero Vamos a expandir un poquito más en el uso ya que estamos con algún ejemplo supongamos que tenemos dos tablas una para referirnos a los alumnos con alto y q y uno para referirnos a los alumnos especiales que pueden ser personas con síndrome de down personas con que van en silla de
ruedas sé que el término correcto es persona con discapacidad pero la verdad que no me entraba acá y me queda muy largo Así que nada igual se entiende No En definitiva acá tenemos Por ejemplo alumnos con alto iq pero qué pasa las personas con los alumnos especiales también pueden tener un alto iq Entonces si nosotros por ejemplo usáramos un Union para unir estas tablas si yo básicamente con un Unión al uniera la consulta que me devuelve esta tabla y la consulta que me devuelve esta tabla lo que obtendría con un Unión al sería Juan 2
Jaime entre Juan dos Jaime 3 Lucas 4 Pedro 2 porque porque me está devolviendo todo Lo que me devuelve esta fila y después aparte me devolvería Mateo J Lucas 1 y hendi 2 estos serían todos los datos que me devolvía el Junior al porque porque me devuelve la suma de las dos consultas como tenemos la misma columna simplemente se suman Ok si no aparecen como nombres acá al costado y sale Cualquier cosa una cosa que tienen que tener en cuenta es que tienen que entender que las uniones con Unión puede ser Unión o Unión al
tienen que tener la Misma cantidad de columnas con el mismo tipo de dato o sea una columna alumnos otro otro grado Bueno entonces la columna la consulta perdón con la que la unas tiene que también devolverte alumno y grado porque si no pueden pasar cosas raras y resultados inesperados Entonces si van a usar Union las consultas que unan tienen que devolverles la misma cantidad de columnas con el mismo tipo de dato O sea no nos sirve que una columna sea color y tamaño y otra Columna sea curso y nombre no porque están durmiendo tipos de
datos diferentes entonces con una devolvemos al alumno y grado y con otra devolvemos alumno irá tiene que ser iguales y el unional nos devuelve todo como ya lo vimos pero acá como vimos hay una columna repetida que es la de Lucas Lucas se repite acá es Lucas 4 y Lucas 1 bueno acá Me confundí en realidad no nos devuelve el 4 porque nos devuelve Lucas 1 Porque algunos habrán notado el error Pero yo no lo noté pido disculpas Ahí está porque claro acá dice Lucas uno de acá Lucas uno al cuatro le saqué del cuatro
de cualquier lado en cambio el Union lo que hace es Ah ok Acá hay dos filas que tienen la misma información o sea alumno Lucas alumno Lucas grado 1 grado 1 aquí tenemos la misma Data vamos a eliminarlo chavón que hace esto Bueno lo elimina Entonces si el Union all nos devuelve estas ocho columnas cambie de lugar esto para que quede Mejor así puedo graficarlo de una forma más apta Ahora sí mientras que Union all nos devuelve 8 resultados y unión nos devuelve 7 resultados Porque porque unional nos devuelve todas ahí ya vimos cómo funciona
nos devuelve 1 2 3 4 5 6 7 8 mientras que junior dice Ah OK Pero hay una repetida es Lucas bueno sácala y ahora lo que nos devuelve Union sin el all es lo mismo solamente que las columnas que están repetidas no las Devuelve Entonces es una verdadera Unión que elimina datos redundantes pero cuando trabajamos con datos y no nos sirve que la misma tabla esté dos veces ya está porque si estamos uniendo listas de empleados o de alumnos a ver tráeme la lista de los mejores alumnos y la lista de las personas con
más iq no quiero que me traigas dos veces a la misma persona si la misma persona tiene el mejor haiku y está entre los mejores alumnos mostrarmela una vez no me la Muestres dos veces porque no son dos personas diferentes Es solamente una hoy cuando diga y cuántos alumnos hay Cuántos alumnos hay en total hay ocho no pero hay siete no hay ocho Entonces el Junior es correcto para este caso por eso en este caso estamos usando el Union porque porque esta fila vamos a venir aquí la vamos a ejecutar si esta consulta nos devuelve
10 filas y al lado nos devuelve la información de las recompensas y esta consulta de abajo nos Devuelve 6 filas que lo hacen al revés y al lado me devuelve el nombre del empleado qué está pasando y está haciendo Exactamente eso cuando ejecutamos la unión nos devuelve primero las filas que nos devolvían acá es decir vamos a ejecutar esta Ahí va si se fijan los primeros resultados coinciden los primeros 10 resultados son en este orden 3 1 1 2 1 2 venimos acá ejecutamos si yo le doy all acá y actualizo tenemos Exactamente eso fíjense
lo mismo que acá Tres uno uno dos uno dos o sea básicamente son tres datos rellenos uno nulo tres datos rellenos uno da igual de asiento era más fácil hacer esto lo pueden ver ahí va entienden que literalmente nos pone la respuesta de la primer consulta y abajo si nosotros hiciéramos la otra esta tenemos abajo Lo que falta que es esta Data que está acá si yo lo hiciera así voy a cerrarlo para que ustedes lo puedan ver mejor ahí ven que la misma información o sea Union lo Que hace es literalmente unirnos las Union
al Perdón nos unen las consultas Pero y unión lo que hace es dice Bueno para qué voy a mostrarte los resultados no los que son duplicados te muestro Solamente los que no están duplicados y ahí tenés las 11 filas completamente limpitas con sus resultados correctos para hacer un full join lo que hacemos es utilizar un Union no un Unión all algunos utilizan un Where y agregan la cláusula de que no tienen que ser nulo Usan un is null Pero la realidad es que esa es una mala forma si ustedes ven que simulan un full join
con un Union all y utilizan otros Campos no va porque es como que es lo mismo en realidad pero es una forma más limpia muchas veces si ustedes de hecho le preguntan en chat gpt vamos a preguntar a la versión 4 vamos a poner la mejor versión de le vamos a preguntar simula un full joint en sqlite van a ver qué es lo que nos tira lo ejecutamos y nos dice un soporte Nativo para full join Pero puede simular junto con ride join que también se simula hasta ahí está correcto es lo que nosotros hicimos
simulando un full join en stulite me encanta porque es lo que nosotros hicimos es lo mismo bueno Esto de whit recurso que no voy a ponerme a explicar Pero esto repito no es la forma correcta porque porque esto lo que hace es guardar una especie de balón entonces después guarda esta consulta como una sub consulta sin ejecutarla o sea es Como no está ejecutando esta consulta simplemente está guardando acá y después acá si le está ejecutando pero como digo Ven a causa un is null que si de hecho nosotros lo probamos vamos a probar este
código Uy se nos ejecutó sin querer bueno Vamos a darle control H para que nos permita reemplazar voy a reemplazar tabla uno por employs ahí va y acá le damos en reemplace Y de esa forma reemplazamos todo y voy a reemplazar tabla 2 por rewards en este caso es Table 2 No creo que era Table Ah No tablados perfecto y le damos en reemplace o le hice reemplazó ya está voy a buscar ID y lo voy a reemplazar por bloy ID reemplazar todos se metido Qué onda no pude la base de datos no me la
conté que no puedo guardar la base de datos no me la conté que se me cerró Pero cómo se me va a cerrar si el programa ya está cerrado Ah la tabla está acá la tabla 10 Ah se nos borraron todos los datos de la tabla 10 se nos Borró todo bueno igual ya está Solamente la estábamos usando para explicar Jones Así que no importa no me la puedo creer se me borró todo se me borró todo Bueno nada gente no hace falta que hagan este código este código es otra cosa es una forma similar
De hecho si vamos a copiar este código y le decimos pero no es mejor usar un Union y un y acá le pego el código que usamos antes acá le dije pero no es mejor usar un Union y un la consulta del write join y Después hacer un Union invirtiendo valor de empleo y reward para simular un full join o a ver qué nos dice sí tienes razón me disculpa por mi respuesta anterior la forma simple eficiente de simular un es usar un left join con un Union Aquí tienes un ejemplo de cómo hacerlo Ya
está ya está nos dio la razón gpt le ganamos a gpt en eficiencia igual muchachos a muchas gpt No dejen de Probar con chat gpt en lugar de probar googleando pasa que son herramientas Diferentes no porque es una herramienta de una ia en cambio Google es respuesta de gente no Entonces es distinto porque la opción de plataformas como Google no se va a eliminar nunca no porque uno no es lo mismo que te responda una Inteligencia artificial que no sabes si es real o no No necesita Fuentes y demás versus una persona es como distinto
creo que en el futuro vamos a tener esas dos posibilidades que nos responda la guía y que nos responda a Google solamente que Hoy la gente no está acostumbrada a que te responda a una Inteligencia artificial solo que en un futuro va a ser muy común en un futuro va a ser muy común que todos interactuemos con la Inteligencia artificial yo le dije hace un montón la gente no va a interactuar más estamos en plena Revolución hay que porque se piensa que va a ser un curso de Inteligencia artificial y que lo voy a lanzar
porque la guía está haciendo una locura Recuerden que si quieren Comprar estas remeras Ah otra cosa no lo anuncié todavía estoy re contento pero yo tengo una remera de team javascript una remera de team python una remera de código y la remera de gpt son los cuatro modelos que lancé todavía voy a mejorarlos un montón con el tiempo pero nada si ustedes quieren Apoyar el canal y no hace falta que donen porque a mí no me gusta mucho que donen la verdad es que me da cosita si estás en Argentina hay una forma de apoyar
es comprando en Tienda de alto sobre todo si estás en Buenos Aires bueno ya veo que estuvieron yendo como que estuvieron yendo a tienda de alto y yo ni me enteré veo que aumentó un poco de Seguidores pero nada básicamente Acá tengo esta remera que es la que tengo acá y cuando ustedes entren a esta tienda ya van a estar los productos publicados los primeros cuatro por lo menos hay más ese signo que está ahí atrás que es el signo del programador es un punto y coma por eso Este signo del programador es un literalmente
es un punto y coma también lo voy a vender pero tienen que esperarme que lo produzca en cantidad y que cueste más barato porque a mí me rompió el culo así ustedes también lo pueden comprar de una forma de apoyar el canal además estético el cartel el objetivo del día de mañana es hacer una tienda posta y que vendan Los mejores productos o sea como que productos para programadores en serio tengo pensado Crear teclados personalizados para programadores una silla que les pueda vibrar y que no les deje la espalda tan dura que puedan cambiar de
pose escritores que sean regulables alta altura cosas postas que nos sirvan a los programadores y que sean interesantes por ejemplo para comer en la mesa algo que nos permita agarrar algo que no que no nos que no toquemos los dedos entonces podemos comer okay sin los dedos y no ensuciamos el teclado Tengo Pensado hacer una taza fotoluminiscente o termocrómica que son materiales que según la temperatura cambia el color o según la luz puede brillarse en la oscuridad porque nosotros los programadores somos muy de trabajar en la oscuridad entonces podemos agarrar la tasa y que se
nos vea igual a pesar de que no lo estamos viendo también el teclado por ejemplo anti café no va a ser un teclado prueba de agua un teclado a prueba de café que es más fuerte y Nosotros se nos suele volcar no Entonces nada tengo pesa un montón de cosas pero quiero que esto crezca y la única forma que crezca ustedes me ayuden Así que nada perdón por el spam sí que está no debería hacer esto en un curso bueno gente ahora sí ya que explicamos lo que es unional ya que explicamos lo que son
los choins y demás estoy súper contento porque ahora pasamos otro apartado súper importante que es el de cardinalidad se acuerdan que al principio del curso Estuvimos viendo algo que yo los diagramas entidad relación si se acuerdan nosotros entramos a este enlace al de wikiver City entramos a este diagrama entidad relación OK perdón abrir imagen una nueva pestaña Ahí va y este fue el diagrama que nosotros analizamos de esto se acuerdan no pero no quiero poner me gusta poner la pantalla así este fue el diagrama que nosotros analizamos hasta que está todo bien pero si se
fijan acá tenemos algo Que dice uno n uno n uno n uno n1 n1 n1 Qué jora qué es esto de n11 n y demás bueno Esto se llama cardinalidad que básicamente nos nos determina cómo va a ser la relación entre tablas porque ya sabemos que las tablas se relacionan por ID entonces son diferentes tipos de relaciones y todo esto lo contempla la cardinalidad que Dependiendo el tipo de coordinalidad tenemos que hacer código diferente porque no es lo mismo hacer un código para una cardinalidad por ejemplo 1n que hacer un código para nn por ejemplo
así que bueno vamos diciendo con cardinalidad que estuvimos llenado por explicar Bueno ahora nos toca hablar de cardinalidad la cardinalidad Ok en el contexto de bases de datos se utiliza para especificar Cuál es la relación que hay entre dos entidades vuelvo a mencionar la palabra entidad pero sepamos que entidad hace referencia a las tablas una tabla Ok es una la Representación de una entidad sabemos que las tablas en bases de datos tienen datos organizados en filas y columnas ya lo vimos está todo excelente por ahora también sabemos que las tablas se relacionan por un foreig
normalmente no se pueden resolver las demás formas Pero la forma más común de una tabla es a través de identificadores y la cardinalidad de lo que nos describe es Cómo se relacionan estas claves Así que vamos a ver todos ejemplos gráficos y Con animaciones súper hermosas para que lo entendamos de la mejor forma posible imagina que estás trabajando con una base de datos de una librería cada libro tiene un autor y un autor puede escribir varios libros la cardinalidad nos ayuda a entender esta relación existen cuatro tipos de relaciones o cardinalidades tenemos la 1 a
1 en la que básicamente un registro en una tabla se relaciona con exactamente un registro en otra tabla ejemplo una persona y su documento De identificación cada persona tiene un único documento y cada documento pertenece a una única persona esta relación se llama uno a uno después tenemos otro tipo de relación que es uno a muchos o muchos a uno y es cuando un registro en una tabla se relaciona con varios registros en otra tabla hoy viceversa por ejemplo supongamos que tenemos una tabla autores y una tabla libros un autor puede escribir varios libros pero
cada libro tiene un único Autor acá básicamente uno a muchos y muchos a uno Son dos perspectivas diferentes de la misma relación Es decir si lo vemos desde la perspectiva de autores y libros es uno n pero si lo vemos desde la perspectiva del libro y autores es n1 ya básicamente es cambiar de lugar las tablas y obtenemos el resultado pero la relación Es es la misma simplemente cambia la perspectiva hasta ahí tenemos tres tipos de relaciones uno a uno uno a muchos muchos A uno falta la última muchos a muchos o n am y
esta relación ocurre cuando un registro en una tabla se relaciona con varios registros en la otra tabla y viceversa un ejemplo puede ser el de una tabla de estudiantes y otra tabla de cursos en una universidad un estudiante puede tomar varios cursos y un curso puede por varios estudiantes como esta relación es complicada de manejar cuando la llevamos a código para manejarla se crea una tabla intermedia llamada Inscripciones que vincula las claves primarias de ambas tablas es decir la tabla de inscripciones tiene una relación n1 con estudiantes y una relación 1n con cursos porque una
inscripción pertenece solo a un estudiante pero los estudiantes pueden inscribirse a varios cursos es decir pueden tener varias inscripciones por otro lado puede haber varios cursos en una inscripción Pero a cada curso nos podemos escribir solamente una vez Entonces la relación directa de estudiantes con cursos es muchos a muchos pero teóricamente necesitamos poder manejarla Bueno cuando trabajen con bases de datos se van a dar cuenta que manejar relaciones de esta forma nos generan conflictos Así que para eso no nos queda otra que crear una tabla intermedia en este caso se llame inscripciones la tabla intermedia
tiene que tener una relación n1 con la primera tabla que en este caso es estudiantes y 1n con la segunda tabla o la tabla B que en este caso es cursos si se preguntan por qué jugar creamos esta tabla es por necesidad ya que para poder manejarla La necesitamos crear de hecho muy probablemente entiendan un poquito más de esto cuando vayamos al apartado de formas es justamente lo que viene a continuación de este apartado en resumen la cardinalidad nos sirve para entender Cómo se relacionan las tablas en una base de datos y que nos permita
hacer Consultas más eficientes y tiene una base de datos mejor es decir la base de datos es más eficiente y las consultas son más efectivas a mí también al principio me costó muchísimo todo esto pero cuando fui trabajando con bases de datos más grandes cuando me fui metiendo en el mundo cuando empecé a meterme un poquito más dije Ah con razón era complicadísimo trabajar con estas tablas si tiene una relación muchos a muchos y cuando tienen esta relación tenemos que Crear una tabla intermedia que pueda unirlas entonces solito se van dando cuenta de los problemas
que les van surgiendo a veces uno no lo ve hasta que le sucede Entonces nada que lo sepan Es normal que no lo entienda la primera de hecho mi mayor consejo a la hora de recursos es hagan pruebenla es la única forma de aprender en serio Bueno vamos a hacer un ejercicio muy rapidito en el que tengo varias tablas que son todas las tablas Que tiene nuestra base de datos Ahora tiene una nueva pero hagamos de cuenta que esa tabla nueva no aparece Estas son las tablas acá abajo me puse una de las formas de
representar la cardinalidad primero vamos a representar la cardinalidad simplemente uniéndolas con una nn1 m am y para que entendamos bien cómo funciona esto primero sabemos que Houston ID se une con orders por el ID es decir tenemos está con esta columna de acá que se une con esta columna de Acá después tenemos en ploise que también se une por ejemplo de ID y tenemos shipera ID que se une por shipera ID ahí tenemos las relaciones ahora si tuviéramos que definirlas cómo las definiríamos bueno Esto es una relación uno a n Por qué bueno tendríamos que
ponernos a pensar Cuántos customera ID puede tener una orden y solamente uno entonces dejamos uno es decir cuántos clientes puede tener una orden solamente uno o sea cada orden Puede haber sido hecha por un cliente entonces la relación Es uno ahora un cliente puede hacer muchas órdenes Entonces es mucho uno a muchos vamos con employs cuántos empleados pueden vender un producto uno uno ahora Cuántos productos puede vender un empleado varios es decir una orden puede tener un solo vendedor pero un vendedor puede hacer varias órdenes Entonces es uno a muchos voy a ponerlo arriba en
este caso para que se entienda mejor y ahora vamos Con la última shippers el shipper es la empresa que se encarga del envío Cuántas empresas se pueden cargar del envío de un producto una De cuántos productos se pueden cargar una empresa de envío muchos y ahí como estamos viendo esta es la forma más normal de una tabla 1 n es la más común uno n es la forma más común y cómo la escribimos es uno dos puntos n y significa uno a muchos uno dos puntos n esto que está acá es uno a muchos y
es la más común de todas y acabamos de Relacionar las primeras columnas voy a hacer un zoom para que podamos relacionar las siguientes ahora tenemos que unir orders con order details vamos a unirla acá la unimos y vamos a preguntarnos el orden details a Cuántas órdenes puede pertenecer o sea los detalles de una orden a Cuántas órdenes pertenecen Y si yo tengo una lista con los detalles de una orden pertenece a una orden Entonces los detalles el order details tiene que hacer referencia a una Orden o que no podemos detallar muchas órdenes en una misma
tabla cada detalle de orden es de una orden pero una orden puede tener varios detalles por ejemplo una si venimos a la base de datos norwin vemos Que si vamos a brows Data y vamos a order detales una orden puede tener el mismo orden ID Por qué Porque vende diferentes productos si yo vendo el producto 11 el producto 42 y el producto 72 yo voy y los compro todos juntos la orden Es solamente una pero hay un Detalle y estamos detallando cada producto Cuántos productos diferentes se vendieron en esta red como yo voy a un
súper y compro es como yo veo el supermercado y compro leche y huevo tengo dos detalles tengo el detalle del producto del huevo y cuánto se vendió o cuántos huevos se vendieron y de la leche y Cuánta leche se vendió la orden Es solamente una Es solamente una la orden Pero el detalle es de dos Entonces el detalle hace referencia a una orden Pero una orden puede tener varios detalles ahora vamos con esta un order details o sea cuando hablamos del detalle de un producto Solamente está detallando order details es una tabla que detalla un
producto específico que se haya vendido en una orden entonces order details solamente puede tener un producto Así que acá tenemos que poner uno porque porque order detales hace referencia solamente a un producto Ok hace referencia a un producto ID pero un Producto ID puede tener varias órdenes es decir si yo vengo acá por ejemplo acá tenemos el producto ID 11 Pero si yo bajo Acá hay otra otro detalle que tiene el product ID 11 y si sigo bajando puedo ver que de vuelta aparece otra orden con el producto ID 11 Por qué Porque el producto
se puede vender varias veces entonces técnicamente order details solamente puede hacer referencia a un producto pero puede haber varios productos que tengan un order details Entonces es una relación invertida no es de uno a muchos sino que es de muchos a uno y después tenemos que relacionar por último estas dos tablas que están acá proveedores teorías si se dan cuenta un producto puede tener solamente un supply ID Así que ponemos uno pero puede haber varios productos con el mismo supply o sea el producto tiene un proveedor hay una persona que provee el producto No puede
haber dos proveedores el mismo producto Solamente un proveedor de Producto pero un proveedor te puede proveer varios productos entonces ponemos la n y acá ponemos sublite y de esta forma se relacionan estos Campos y nos falta el último que es categorías acá lo mismo un producto puede solamente tener una categoría yo tengo teclado entra dentro de electrónica Ok entonces solamente puede haber una categoría en el producto pero puede haber varios productos con la misma categoría puedo tener dentro de electrónica teclado Auriculares y más entonces una relación muchos a uno y ahí nos quedó el diagrama
que si se fijan y entramos a la imagen oficial es exactamente la misma uno a n 1 n 1 n lo mismo que hicimos nosotros uno en uno en una n uno n otro más uno n después n a 1 o sea product n a1 Y estos dos también son n a1 y lo mismo que nos quedó acá en el pay nos quedó igual n1 y estos dos n a1 y ya tenemos lista hecha la relación y la cardinalidad esto es uno a muchos Y esto es muchos a uno si Tuviéramos que decir uno a
uno es uno a uno y si tuviéramos que decir muchos a muchos es muchos a muchos la diferencia es que la m se pone para no repetirla en realidad ni idea para que se pone la m pero es mucho a muchos pero hay otra forma de representar esto porque se acuerdan que teníamos un diagrama que nos unía atributos entidades podíamos usar un sistema de relaciones quiero que sepan algo rápido que si vamos a un diagrama entidad relación esto lo tiene Que saber pero se lo voy a explicar muy rapidito esto que está acá se acuerdan
que yo lo explicamos lo explicamos antes lo único que no explicamos es el tema de ven que arriba dice 1 n Ahí está está descrita la relación y acá dice nm también está descrita la relación Bueno este tipo de diagrama si se preguntan y Pero qué es este rectángulo Bueno este rectángulo es un rectángulo que representa una relación es decir el cliente realiza un pedido la palabra que Tiene que estar la relación es un verbo en este caso es Cliente realiza pedido el pedido se compone de cantidad y artículo el artículo a su vez se
compone de un número de serie o sea estamos relacionando un cliente con un pedido porque el cliente hace pedidos realiza pedidos y estamos relacionando pedido con artículo porque el pedido se compone de artículos y a su vez de cantidad que es una relación indirecta de artículo por qué porque acá la cantidad no Depende del artículo ni del pedido la cantidad depende del artículo y del pedido es un poco jugar un poco en esto yo los invito a que investiguen un poquito más la verdad que no voy a poner explicar esto en profundidad porque podemos hablar
también de relaciones débiles y más cosas pero no es el curso Ok Este es un curso ya ya estamos explicando cosas que nadie más explica con hablar digamos con normalización de bases de datos con lo que estamos viendo Y ejemplos más complejos de cardinalidad que es lo que quería explicarles ahora acá falta algo importantísimo además de explicar la relación porque acá por ejemplo podemos decir cómo usaríamos esto con relaciones cómo lo uniríamos con relaciones Bueno vamos a sacar todo de vuelta y podríamos decir un cliente realiza una orden una orden tiene detalles los productos tienen
categorías un empleado vendió una orden un shippers envió una tesis de esa forma está la Relación si esto lo tuviéramos que representar lo haríamos con ronquitos Okay este rectángulo que está acá que no sirve para especificar relaciones un cliente realiza pedidos pero lo que quiero que veamos es esto que está abajo que por qué me anotes esto que está acá si venimos y buscamos bbd modelo relacional bebedd significa bases de datos esto que estamos viendo Es el modelo relacional Lo acabamos de hacer Lo acabamos de escribir ya está es el Modelo relacional si buscamos cardinalidad
vamos a ver que la cardinalidad en este modelo la representamos como ya hasta ahora la vimos 1 n 1 n 1 n no hay problema pero si vamos a los diagramas de este tipo cuando queremos representarlos gráficamente que es no aparece uno a n no aparece nau no aparece nada La diferencia es que lo que vimos antes era la relación en la anotación de Chen pero esta es la anotación de Martín se llama Así es morontial a la acción Pero hay diferentes tipos de notación tenemos el modelo antiallaccion con la notación de Chen que ya
lo vimos El Moro entidad de relación con la notación de Martín que es esta que está acá estos son los extremos Okay son los extremos yo por ejemplo voy a usar estos para unirlos Cómo podríamos unirlos acá bueno Esto significa uno esto significa uno esto significa muchos esto significa uno y solamente uno la diferencia entre uno Igual es básicamente un tema de un tema de cantidades uno dice que hay una cantidad de algo y yo y otro habla de un tema de instancia de que hay uno y ninguno más por ejemplo yo puedo decir No
sé tengo un celular en uno por qué Porque yo por ahí puedo tener varios celulares o sea una persona puede tener varios celulares incluso lo podemos llevar al caso del lápiz puedo decir Tengo un lápiz Okay y me refiero a que en este momento Tengo un lápiz Pero Puede haber más una persona puede varios lápices pero en este caso es Tengo un lápiz el otro caso la de una instancia es decir solamente puede haber un único lápiz en general entonces esa es la diferencia después está cero o uno o sea puede haber cero o puede
haber uno como por ejemplo en el tema de recompensa vieron que en el ejercicio anterior creamos una tabla llamada recompensas un empleado podía tener una recompensa o podía tener ninguna recompensa pero no Puede tener muchas Es solamente una o ninguna de hecho había empleados que no habían ganado ninguna recompensa del mes entonces en este caso es eso después está una o muchas por ejemplo la tabla órdenes tiene este tipo de relación por qué Porque una orden por ejemplo por ejemplo la tabla order details tiene esto por qué Porque puede haber un orden details de una
orden o puede haber muchos order details de una orden Pero mínimamente hay uno es como es el mínimo Y el máximo el mínimo que puede haber es uno y el máximo que pueda ver es muchos y después está Ciro en este caso por ejemplo son las órdenes mismas no es el order detales es el order Por qué Porque un producto puede tener muchas órdenes como máximo o como mínimo ninguna o sea puede que no se haya vendido nunca ahora cómo lo representamos en esta gráfica que tenemos acá Bueno simple si yo les pregunto por ejemplo
houstomers a orders una orden Por cuántos clientes puede ser Pedida por uno entonces agarro esto y uno uno por qué Porque Lo acabamos de decir solamente puede un cliente hacer órdenes hay un cliente que puede hacer órdenes no puede una orden no puede tener más de un cliente solamente una orden porque un cliente por orden Perdón ahora por otro lado un cliente puede hacer una orden o ninguna de hecho puede hacer cuatro órdenes o ninguna Entonces esto se representa con cero o muchos porque porque puede haber cero órdenes o Muchas órdenes entonces usamos el cero
o muchos y hasta acá lo que estamos diciendo es que un solo empleado puede hacer cero o muchas órdenes esto es correcto lo mismo con los empleados es decir un empleado puede hacer una dos tres ventas o ninguna entonces la relación para el empleados es la misma a esta la relación de empleados es una a ninguna o muchos después lo mismo con el envío una empresa puede hacer un envío o puede no hacer ningún envío Ahí está así Lo representamos bueno vamos a ir con la siguiente relación vamos a ir con order details una orden
puede tener uno o muchos detalles pero como mínimo va a tener uno entonces voy a pegar este que significa uno o muchos por qué lo mismo porque una orden tiene al menos un detalle o varios si se vendieron varios productos va a haber varios detalles pero como mínimo va a tener uno y esta es la forma de representar el uno el palito con los tres palitos a su vez Esto va a ser solamente referencia a uno entonces palito Ahí está palito Por qué Porque el palito significa uno Y esto es solamente uno esto es uno
o muchos acá con producto vamos a hacer lo mismo producto ID y product ID Ahí estamos o sea los detalles de una orden solamente hacen referencia a un producto un solo producto pero un producto puede tener muchas órdenes o ninguna entonces copio el uno o ninguno Lo invierto y ahí estamos porque un producto se puede Vender ninguna vez o muchas veces pero la short el order details puede contener como máximo solo un producto esto siempre hace referencia a los mínimos y los máximos que pueden contenerse entre sí no se olviden de eso una order details
puede como máximo un producto y un producto puede como máximo estar asociada a ninguna o a muchas y acá las relaciones exactamente la misma cada producto lo da como máximo un proveedor pero un proveedor puede darte ningún Producto o muchos pero no los proveedores te dan al menos un producto porque si no ya no son proveedores entonces acá la relación cambia y la relación Es uno o muchos porque porque un proveedor si no te da productos no es proveedor Entonces lo mínimo que te da el proveedor es un producto pero cada producto puede estar asociado
como máximo un proveedor está lloviéndose largo a llover fascinante se escucha lluvia Qué lindo bueno y acá lo mismo porque un producto puede tener solamente una categoría Pero puede haber varios productos con una misma categoría Pero al menos una O sea no puede haber productos que no estén dentro de una categoría entonces O sea al menos en una categoría tiene que haber un producto y así nos quedó este diagrama los clientes pueden pedir o pueden realizar una orden o ninguna un cliente puede realizar como mínimo ninguna orden como máximo muchas Como máximo un vendedor puede
vender ningún producto o uno como máximo una empresa de envío puede realizar ningún envío o muchos todo depende de las órdenes si no hay órdenes no hay ninguno de estos fíjense que la relación Es la misma cuando se trata de tablas que se relacionan con una misma lo mismo pasa al final a su vez una orden puede tener muchos muchos detalles pero tiene al menos un detalle que hace referencia al producto que se vendió pero cada order Details puede hacer referencia como máximo a una orden los detalles de una orden sólo hacen referencia a un
producto pero podría haber varios productos o ninguno con order details es decir como máximo Cuántos productos puede tener ultrails solamente uno como máximo Cuántas horas de titáis puede tener un producto y puede no tener ninguno o puede haber uno y lo mismo con productos un producto tiene solo un proveedor pero un Proveedor puede proveer varios productos un producto tiene solamente una categoría Pero puede haber varios productos con la misma categoría un producto tiene solamente un proveedor Pero puede haber un proveedor que provea varios productos lo mismo con la categoría puede haber un producto puede tener
como máximo una categoría Pero puede haber varias categorías con el mismo producto y así es como terminamos este hermoso diagrama con la anotación De Martín que es otro tipo diferente de notación que es muy utilizada y es muy común acá justamente está el gráfico que nos muestra cómo relacionarlas pero básicamente tenemos que unir con estas seis formas al principio y al final y si se fijan nos da lo mismo o sea es un mínimo y un máximo solamente que de la otra forma esto era 1 n 1 n 1 n esto es uno a ninguno
o muchos uno a ninguno o muchos uno a ninguno muchos acá lo mismo acá Era uno a n y esto pasó de ser uno a Uno o muchos y esto pasó de ser n a1 hacer muchos o ninguno a uno lo mismo con esto Esto es muchos o uno a uno y muchos o uno a uno y así cerramos este apartado todo teórico y demás vamos con otro apartado que es hermoso que es con el de normalización de bases de datos así que bueno gente lo dejo acá me despido y vamos con el siguiente apartado
que estoy orgasmeándome vamos con el siguiente Bueno ahora estamos en el apartado de Normalización de base de datos Qué es la normalización la normalización es un proceso dentro de lo que es diseñar una base de datos que nos sirve para poder eliminar anomalías en los datos hacer que la base de datos sea más eficiente y poder hacer consultas más efectivas para tener un sistema que sea digamos más escalable que podamos trabajar y que sea sostenible a lo largo del tiempo la forma más de común de poder dividirlos es en cinco niveles cada uno de esos
Niveles los llamamos forma normal tenemos desde la primera forma normal hasta la quinta forma normal Así que vamos a arrancar a explicar las diferentes formas normales como sirven para qué se usan y cómo aplicarlas para tener una base de datos normalizada la primera forma normal o también le decimos First normal form o 1 NF consiste en garantizar que cada atributo Recuerden que un atributo es una columna consiste en garantizar que cada tributo En una tabla contenga un valor único atómico lo que significa que los valores en una columna no tienen que ser conjuntos listas o
cualquier tipo de conjunto de Estructura de datos compleja la primera forma normal también parece que no debería haber valores repetidos en una fila para una clave primaria es decir cada tributo debe tener un valor único para cada registro por ejemplo una tabla de empleados debería tener una columna para el nombre una para el Apellido y otra para el número de teléfono Si nosotros pusiéramos una sola columna que contenga todos los datos en una cadena separada por comas estaríamos incumpliendo la primera Norma lo correcto es separarlos y que cada columna tenga su propio dato como podemos
ver en la imagen después tenemos la segunda forma normal esta forma Establece que cada atributo que no sea una clave o sacar atributo que no sea un key debe depender completamente de toda La clave primaria o sea no puede depender un poquito de la clave primaria y un poquito de otra cosa tiene que depender al 100% de la clave primaria si un atributo depende solamente un poquito de una clave primaria eso se tiene que dividir y armar una tabla secundaria o sea busca de eliminar algo que llamamos dependencias parciales una dependencia parcial Se los voy
a resumir muy rápidamente es donde básicamente un atributo depende de un atributo que la Clave primaria pero no depende del todo de ese atributo Y si esto sucede está mal porque hay una dependencia parcial y no debería suceder Debería ser una dependencia completa no parcial vamos a ver un ejemplo en el caso de la segunda forma normal la información adicional que podría estar mal y no depender completamente de la clave primaria podría ser información de productos asociada a un pedido en la misma tabla de pedidos por ejemplo si tienes una Tabla de pedidos con los
siguientes atributos que son ID del pedido ID del cliente fecha de pedido país del producto nombre del producto precio del producto y cantidad del producto esto cumple la primer forma normal pero no la segunda en este caso el nombre del producto el precio del producto y la cantidad del producto no dependen completamente de la clave primaria Es decir de pedido ID sino que también dependen del atributo producto id para Cumplir con la segunda forma normal se debería crear una tabla separada de productos con los siguientes atributos que son producto ID o sea ID de producto
nombre del producto y precio del producto la tabla de pedidos se mantendría con los siguientes atributos aire del pedido hay del cliente fecha del pedido ahí del producto y cantidad de esta manera cada columna en la tabla de pedidos depende completamente de la clave primaria y se evita la redundancia De información además la información de los productos se puede relacionar con la tabla de pedidos mediante la clave foránea producto ID como ya vimos a lo largo del curso en otras palabras la primera forma normal garantiza que la digamos la cada celda tenga un solo valor
mientras que la segunda asegura que cada columna de una tabla no tiene que depender parcialmente de su clave primaria sino que tiene que depender completamente Es decir 100% de la clave Primaria y no de los atributos después tenemos la tercera forma normal Establece que cada tributo debe depender directamente de la clave primaria y no de atributos que no son claves primarias de hecho y no de otros atributos que no son claves En otras palabras no debe haber algo que llamamos dependencias transitivas una dependencia transitiva ocurre cuando un atributo que vamos a llamar a depende de
otro atributo que vamos a llamar b y el atributo B depende De la clave primaria que vamos a llamar C para cumplir con la tercera forma normal habría que Eliminar esta dependencia transitiva como dividiendo los atributos en varias tablas Por ejemplo si tienes una tabla de clientes con información de la ciudad el estado y el código postal esta información tiene que estar en una tabla separada para evitar la repetición de información por ejemplo acá tenemos una tabla de clientes en este ejemplo la ciudad y el Estado están relacionados lo que significa que la ciudad depende
funcionalmente del Estado esto debería resolverse dividiendo la tabla de clientes en dos tablas separadas una para clientes y otra para las ciudades estados de modo que la ciudad y el estado se almacenan como una sola entrada en una tabla separada entiendo que puede ser confuso incluso aparece que la segunda forma normal y la tercera forma normal son similares pero la Diferencia está en el tipo de dependencias que intentan eliminar en cada caso ambas intentan eliminar una dependencia Ok pero en un caso intentamos eliminar que un atributo no dependa completamente de otro atributo o sea si
no depende completamente está mal eso se llama queremos eliminar la dependencia parcial y en la tercera forma normal queremos eliminar otro tipo de dependencia que es la dependencia transitiva que es que dependa de un Atributo que ese atributo dependa del principal ambas formas son importantes para garantizar digamos Un diseño de base de datos eficiente y intentar evitar abundancia y la anomalía de datos después tenemos la cuarta forma normal qué se refiere a una forma en la que intentamos evitar la redundancia de datos y las anomalías de actualización la cuarta forma normal que establece bien Establece
que cada tabla debe tener una clave primaria compuesta que consta De múltiples columnas en lugar de una sola el objetivo es eliminar las dependencias multivaluadas que bueno a veces provocan redundancia Y ahí aparece las anomalías no Qué Qué Qué es una dependencia multivaluada Bueno en realidad una dependencia multivaluada cuándo ocurre ocurre cuando una tabla tiene múltiples valores para una columna pero no solamente eso sino que esos valores están relacionados con múltiples valores de otra columna de la misma Tabla O sea que puede ser un poco complejo pero vamos a verlo con un ejemplo supongamos que
tenemos la siguiente tabla de productos en esta tabla la categoría y la subcategoría están relacionadas lo que significa que una subcategoría pertenece a solo a una categoría sin embargo un producto puede tener varias subcategorías lo que crea una dependencia multivaluada para aplicar la cuarta forma normal en este caso tenemos que dividir la tabla en dos Tablas separadas una tabla de productos y una tabla de subcategorías y establecer una relación entre ellas mediante la clave foránea compuesta de esta manera se eliminan las dependencias multivaluadas y se evita la redundancia de datos en esta tabla la columna
ID subcategoría es una clave foránea compuesta que hace referencia a la tabla de su categorías a su vez la tabla de subcategorías almacenan la subcategorías y su correspondiente categoría de esta Manera se evita la redundancia de datos y se elimina las dependencias multivaluadas la tabla de productos ahora contiene solo la información específica del producto y la tabla de su categorías almacena información sobre la subcategorías y sus correspondiente categoría ven hay con ejemplos suele ser un poco más llevadero y tenemos la última de todas que es la quinta forma normal en esta forma normal se asegura
que no haya dependencias de unión entre Los atributos o sea básicamente si un atributo depende de que se unan atributos de varias tablas entonces tiene que ser movido a otra tabla Me podría incluso explicarlo con detalles pero deberíamos ver más cosas y la realidad es que normalmente con normalizar hasta la tercera forma normal ya estamos bien o sea en una base de datos común casi nadie normaliza hasta la quinta forma normal porque porque las Quintas formas normales son para muy Grandes normalmente con digamos normalizar hasta la tercera forma normal ya estamos más que bien para
bases de datos que manejan conjuntos altísimos de datos y bases de datos enormes ahí sí está bien aplicar la cuarta forma normal y la quinta forma normal pero en la vida real y la vida cotidiana uno suele aplicar hasta la digamos tercera forma normal normalmente esto pasa que en bases de datos que tienen poca información y demás puede que haga que Tengamos muchísimas bases tablas Perdón muchísimas tablas chiquititas y no nos sirve de nada eso la clave es encontrar el equilibrio entre la normalización y la practicidad para la aplicación en cuestión es decir tenemos que
ver cuál es Nuestro objetivo y encontrar un equilibrio entre la normalización y lo práctico o sea cómo va a ser de práctico esto no ahora bien cómo normalizamos una base de datos Porque ya lo respondimos pero vamos a ver un poco de forma más Más precisa ahora Cómo aplicar cada Norma formal cada forma normal hijo de ya vimos más o menos De qué trata la formas normales pero ahora vamos a ver cómo aplicarlas primero hay que identificar las tablas y atributos para esto de que bueno analizarles La Estructura de datos que ya existe y ver
cuál es una tabla y cuál es un atributo Qué tipo de atributos son tipo de tabla son y así Qué tipo de entidades son etcétera después hay que identificar las Claves primarias que como ya sabemos son los campos únicos que identifican cada fila después identificar las dependencias funcionales es decir tenemos que analizar la relación entre todos los atributos de las tablas y ver si hay alguna dependencia funcional pero tranqui que esto de las dependencias funcionales es algo que vamos a ver en un video aparte Okay hay videos enteros de dependencias pero la gente que ya
sabe base de datos sepa que es el Término técnico y después ir en orden primero se normaliza la primera forma normal después a la segunda después a la tercera después a la cuarta y se termina con la quinta pero basta de bla bla bla y vamos a ver algún ejemplo de cómo hacerlo o que no nos sirve de nada de escuchar bla bla y no hacerlo así que vamos a hacerlo en el primer ejemplo tenemos una tabla de clientes supongamos que tenemos una tabla de clientes con los siguientes atributos el ID de Cliente nombre dirección
teléfono correo electrónico ciudad y estado para normalizar la tabla vamos a hacer lo que dije antes primero identificamos las claves primarias en este caso la clave primaria sería el atributo ID de cliente después identificamos las dependencias funcionales en este caso todos los atributos dependen completamente de la clave primaria por lo que no hay dependencia funcionales pero en este caso la tabla ya cumple con las Condiciones de la primera Norma formal porque cada atributo contiene un solo valor Así que ahora vamos intentar normalizar a la segunda forma normal que en este caso también cumple con las
condiciones de la segunda forma normal porque cada tributo depende completamente de la clave primaria Y por último normalizamos En tercer lugar a la tercera forma normal y en este caso también la tabla ya cumple con las condiciones de la tercera forma normal Porque no hay dependencia transitivas entre los atributos por lo tanto esta tabla ya está normalizada así de datos es chequear a ver si está todo bien en una base de datos normalizada a ver si una base está normalizada y queremos chequearlo Ese es el proceso porque podemos pasar podríamos ir por la cuarta quinta
pero repito no hace falta con normalizar la tercera está bien De hecho los desafío a hacerlo analizando la base de datos que vimos en el curso hasta Ahora la de Norma Rain entran a su gestor de base de datos O mejor dicho van al diagrama o que iban al diagrama de de base de datos norwing y ven y lo intentan analizar para que entiendan mejor pero suponiendo que es alguna tabla que no esté normalizada tendríamos que saber cómo normalizarla porque hasta ahora vimos todos ejemplos con tablas normalizadas o El antes y el después pero vamos
a dar un ejemplo práctico de cómo normalizar una tabla el segundo Ejemplo consiste en una tabla de ventas supongamos que tenemos una tabla de ventas con los siguientes atributos fecha hay del cliente nombre del cliente dirección del cliente ciudad del cliente está el cliente ID del producto En nombre del producto precio del producto y cantidad para normalizar esta tabla puedes realizar los siguientes pasos primero identificamos las claves primarias como ya sabemos en este caso la clave primaria es el atributo venta ID o sea hay de venta después identificamos las dependencias funcionales en este caso el
atributo cliente ID es decir ID de cliente determina el nombre la dirección la ciudad y el estado del cliente Mientras que el atributo producto ID o sea ID del producto determina el nombre y el precio del producto por lo tanto ahí dependencias funcionales parciales en esta tabla así que bueno vamos a intentar normalizar en primer lugar a la Primera forma normal en este caso la tabla ya cumple con las condiciones de la primer forma normal porque cada tributo contiene un solo valor Así que vamos a normalizar ahora a la segunda forma normal en este caso
es necesario dividir la tabla en dos tablas una tabla de ventas y una tabla de clientes la tabla de ventas tendrían los siguientes atributos ID de ventas fecha hay de cliente y de producto precio del producto cantidad y ahí quedó mientras Que la tabla de clientes tendría los siguientes atributos aire del cliente nombre dirección ciudad y estado Y por último normalizar En tercer lugar a la tercera forma normal en este caso no hay dependencias transitivas entre los atributos en ninguna de las dos tablas por lo tanto esta tabla ya está normalizada después de la división
en dos tablas y hasta ahí el último ejemplo como ya dije no hace falta ir hasta la última forma normal para que una base de Datos esté bien normalizada pero más allá de eso ya lo logramos ya lo entendimos hay mucha teoría al respecto la verdad que hay muchísima gente que dice incluso que ni siquiera hace falta usar forense porque hacen que un sistema sea lento hay gente que digamos opta por manejar completamente estos diagramas otros estilos de de relación o sea es muy complejo el mundo de bases de datos el mundo del modelado de
datos del diseño es un mundo gigantesco créanme o Sea realmente si tuviéramos que ponernos a explicar todo lo que es teoría de bases de datos No termina nunca más el curso y este no es un curso de bases de datos Este es un curso de sql solamente que quiero que salgan preparados quiero que salgan Sabiendo quiero que salgan con un conocimiento técnico que puedan aplicar en un trabajo ya que técnicamente esto es importante porque si vamos a crear digamos bases de datos con sql lo que tenemos que hacer a la Hora de crear tablas crear
bases de datos y demás es tener en cuenta estas cosas ok entender las lesiones lo que hacemos Yo sé que ahora está mucho más listos que Hace media hora atrás en el curso si tuvieran una base de datos Porque entendieron estas cosas si era un cliente les pide que quieran una base de datos de su empresa lo podrían hacer Y podrían hacer un diagrama que explique cómo lo hicieron y pueden hacer un diagrama que explique el flujo entonces Creo que esto es lo que nos termina de de permitir el hecho de poder saber de teoría
porque la parte práctica es muy importante pero la teoría también porque eso no nos permite estar más metidos y entender bien a fondo todas las cosas Porque de nada sirve saber sql y entender al máximo todas las propiedades y comprender cómo funciona y saber todo lo que es código si no sabemos cómo armar la estructura correctamente de una base de datos a qué te sirve si las Consultas van a tardar más tiempo no vas a saber dónde encontrar los datos los joints van a tardar muchísimo más en ejecutarse parece un desastre para qué te sirve
ahora para qué te sirve saber sql saber todo todo todo de estructuras y demás si cuando vas a una empresa te muestran un diagrama no lo sabes leer por tampoco hasta la bosta es fácil simplemente Les explico Cómo leer un diagrama que ya ahora saben leer un diagrama y Les explico Cómo armar una Base de datos que ya saben porque entiende de normalización Todavía falta muchísimas cosas más pero más o menos ya tienen con que arranca dice tienen Con qué salir armar sus propias bases de datos Y eso me pone muy contento la verdad Así
que cerramos este apartado del curso teórico cerramos este apartado de modelado de bases de datos Y ahora sí Estoy ansioso porque vamos de lleno al siguiente apartado en el siguiente apartado vamos a ver todo lo que tiene Que ver con bloqueos y transacciones es algo muy importante para mantener digamos la integridad de la información en una base de datos porque Qué pasaría si por ejemplo dos personas intentarán modificar la base de datos exactamente al mismo tiempo esto Podría tener un problema Si una persona quiere Modificar un campo de una fila y otra persona quiere modificar
otro campo de la misma fila al mismo tiempo lo que pasa es que puede haber consecuencias puede que un Campo se modifique y el otro no O puede que los dos se modifiquen y estén mal para eso usamos bloqueos y transacciones y hay mucho más problemas que por los que lo usamos pero creo que entiendan Hacia dónde vamos Así que ahora vamos a ver otro apartado más para aprender Cómo solucionar estos problemas que nos surgen cuando trabajamos con varias consultas Porque si es simplemente algo para ustedes y es un sistema suyo que no lo Van
a sacar que no va a ser para ninguna empresa hasta este curso están excelentes pero si van a trabajar con buenos sistemas con sistemas escalables si quieren venderle productos a la gente si quieren tener su propia página web si quieren tener sistemas reales y funcionales que son los que se trabajan en la vida real tienen que saber esto de las transacciones y de los bloques Así que vamos con la siguiente sección que es la de bloques y transacciones Bueno pensando un poquito acerca de lo que más nos convenía continuar aprendiendo decidí que lo que mejor
nos convenía digamos aprender ahora en esta instancia del curso debido a todo lo que ya vimos y lo que creo que puede ser más eficiente en este momento es el tema de los índices porque se me ocurrió conectar las transacciones y los bloqueos para un momento más adelante en el que podamos conectarlo directamente con el código en python ya que es el pie A trabajar directamente con un lenguaje de programación que no sea sql no como para enlazarlos un índice básicamente tiene el objetivo de mejorar la el rendimiento de las consultas en una base de
datos organizandolos correctamente o sea se encarga de realizar una organización mucho más efectiva porque cuando hagamos consultas sea más rápidas más más óptimas No la referencia que pueden tener en cuenta es la de un libro O sea así como nosotros por ejemplo Usamos un libro para Buscar páginas más rápido y saber de qué tema están hablando la base de datos funciona igual entonces con los índices lo que hace es no tener que andar analizando toda la tabla entera y recorrer todas las filas sino que va a ir directamente a las filas que ya que están
indexadas para poder buscar específicamente en esos Campos normalmente esto a nivel interno funciona con árboles tantas cosas más que bueno mapean los Valores de las columnas o la la o las columnas indexadas en la tabla no hay que olvidarse que indexar una columna es decir asignarle digamos un índice a una columna básicamente es una estructura de datos se convierte digamos una estructura de datos que nos permite realizar búsquedas inserciones de datos y que hagamos todo más eficientemente algunos de los casos con los que podemos optimizar nuestras consultas o el rendimiento de las consultas pueden ser
Por ejemplo con cláusulas War si por ejemplo utilizamos una condición en el Word en el que hace referencia una columna que ya está indexada el gestor de bases de datos puede realizar una una digamos función de búsqueda mucho más eficiente ya que al estar indexada el proceso es mucho más rápido para las consultas con join también si estamos uniendo tablas en lugar de andar recorriendo todas las tablas para después hacer la unión básicamente Busca En los campos indexados y lo hace todo mucho más rápido tenemos mucho más casos OK Pero obviamente esto tiene sus ventajas
sus desventajas Y eso es lo que vamos a ver a lo largo de este este capítulo no de los índices Pero hay diferentes tipos de índices tenemos los índices únicos y los índices no únicos uno de los índices únicos Ya lo hemos visto y es el índice primario o el primariquí los primariquí como ya sabemos no puede tener valores nulos es El único tipo de índice que no permite tener valores nulos y como ya sabemos cuando nosotros creamos una tabla de hecho si se acuerdan lo que hicimos en el ejercicio en el que creamos la
tabla rewards lo que hicimos acá si se fijan le damos en modify Table es crear un primer equipo reward si yo esto lo saco Ok y lo vuelvo es decir yo acá por ejemplo hago que esta clave no sea autoincrementable Ok yo puedo sacarlo y ahora tengo un campo que no tiene un ID Autoincrementable primario es decir ahora reward ID ya no es un primary key simplemente es un campo más porque porque ya no tiene asociado ninguna clave primaria ahora lo que puedo hacer es bueno volverla a agregar y acá tengo digamos de vuelta el
campo primario y agregado hasta acá No hay ningún tipo de duda que ataca todo bien Todo bonito excelente De hecho voy a guardarlo y ahí quedó de vuelta todo como antes puedo correr todo esto sin problema Pero Además de estos tenemos otro tipo de índice ya sabemos que los índices primarios justamente son estos índices que nos permiten identificar la fila o sea esa es su finalidad nos permiten hacer búsquedas más rápidas Porque si son más eficientes O sea si Buscamos por el índice va a ser mucho más rápido Pero además las búsquedas o sea el
índice nos permite diferenciar cada fila la vuelve única no importa digamos En qué registro estemos ese Registro sabemos que va a ser único porque vuelve la fila completa única y nos permite identificarla Pero hay índices que No necesariamente tienen la la finalidad de simplemente identificar una fila como única Ese es el objetivo del primario después yo por ejemplo puedo crear un índice único de hecho la creación de un índice único es muy común yo voy a venir acá y voy a decir Bueno vamos a hacer una búsqueda nosotros normalmente podríamos venir acá y Seleccionar por
nombre no yo voy a venir acá y decir vamos a seleccionar productos no vamos a seleccionar todo from productos hasta acá ejecutó esto y me da un solo resultado una sola fila como ven ahí me dice que tarda más o menos 5 milisegundos siempre que el ejecuto tarda 5 milisegundos 555 Cómo podemos hacer para volver a un name una un índice bueno por qué y usamos siempre esta fila para las condiciones O sea si Básicamente Siempre vamos a hacer un filtrado por block name y es una forma en la que vamos a utilizar una condición
Bueno vamos a crear un índice para ver su cambio en el rendimiento para eso ponemos ctate Index nombre ok vamos a decir Index nombre o nombre sí product name Ahí va creating o name o si name vamos a poner índice nombre on products que es el nombre de la tabla y después nos pide el campo En este caso vamos a crear un índice llamado nombre en la Tabla products pero lo vamos a crear en el campo product name de esta forma si yo actualizo esto esto acaba de hacer algo que acaba de hacer Bueno voy
a actualizar esto para que la letra sea más grande Ahí está esta era la consulta anterior ahora cada vez que yo la ejecute vieron que antes tardaba 5 milisegundos en ejecutarse Bueno ahora tarda 4 a veces me retorna Así que a veces 6 pero ahora pasó de tardar siempre 5 milisegundos a tardar 4 Qué Significa esto imagínense consultas que son larguísimas gigantes pesadas con este tipo de estrategias podemos aliviar un montón el costo Porque que una consulta tarde más en procesarse normalmente implica que utiliza más recursos porque para encontrarlo tienen que hacer más procesamiento y
ahí es cuando terminamos teniendo más consumo del debido bueno los índices no están en esta solución Cuál es la diferencia bueno que lo que hicimos antes Index Nombre del índice on products product name nosotros ahora podríamos decir Bueno vamos a crear un índice en product name Y por qué no lo hacemos en todos los productos o sea por qué no creamos un índice en todos los productos bueno Esto no siempre es bueno pero vamos de A poco no vamos a llegar a ese punto ahora vamos a ver cómo seguir creando otros tipos de índices Además
yo podría decir bueno Mira la verdad es que yo vamos a vamos a crear vamos a venir a darle Empleados Acá está en la tabla empleados tenemos un nombre y un apellido ya está tenemos un nombre y un apellido Cómo podríamos hacer si yo quisiera que tenga un nombre y un apellido pero que no se repitan o sea pueden tener el mismo nombre pueden tener el mismo apellido pero no pueden tener el mismo nombre y el mismo o sea básicamente es como hacer una tabla prima pero no es primaria es única o sea hacer que
cada registro sea único pero no Quiero que sea primario porque porque el ki primario va a ser empleo y ID si yo por ejemplo tengo una lista de usuarios el kit primario va a ser el user ID pero si cada uso lo tiene un correo electrónico cada correo electrónico tiene que ser único entonces necesito crear otros Kiss únicos además de El del principal bueno para eso se utiliza el Index su pan sé que yo voy a crear un índice acá en Last Night bueno venimos acá y simplemente cambiamos el nombre Por ejemplo vamos a decir
fullne no on name más fácil name y acá dice products vamos a poner en Plays y el índice que vamos a crear lo vamos a crear en name Qué pasa el tema es que esto crea índices que se pueden duplicar o sea el índice común así como lo estamos creando esto se llama índice ordinario no único porque porque esto permite Campos nulos o sea ahora que la tabla esta tabla por ejemplo fitnite se va a convertir en un índice esto nos permite Campos nulos no solamente nos permite Campos nulos sino que nos permite Campos duplicados
es decir si cada campo se duplica no habría problema porque es un índice que no le interesa identificar cada fila como no le interesa identificar cada fila no importa Yo solamente utilizo el índice para buscar más rápido o sea le digo a la base de datos que esta es un campo que tengo como referencia para índice Simplemente porque quiero que tenga más Rendimiento y funcione Bueno pero el problema es que nosotros queremos que cada usuario tenga un nombre único por ejemplo bueno eso lo puede hacer con Unique y Unique Index esto nos va a crear
un índice único si yo ahora le doy ejecutar la consulta que todavía no se la voy a dar Esto me crearía un índice único para el nombre Entonces no se podría registrar el mismo campo o sea el mismo valor para este campo si tenemos una tabla con mil nombres de usuario Vamos a tener el primario que es autoincrementable que es 1 2 3 4 5 6 7 auto incrementar hasta el infinito Pero tenemos Fish name que no va a ser lo que incrementable vamos a poder poner los valores que queramos pero cuando un valor se
repita la consulta no nos va a insertar el registro porque es un valor repetido o duplicado y el Unique no permite duplicados si lo pusiéramos sin así sí pero como estamos diciendo que es único ahora ya se parece Más al primer Equipo no es una clave primaria porque la clave primaria que es diferente la clave tiene el objetivo de identificar filas enteras Pero esto simplemente tiene el objetivo hacer que es una consulta más eficiente que tenga mejor rendimiento y además hacer que cada campo se duplique esto lo podríamos aplicar por ejemplo a un campo de
mail si tuviéramos un usuario esto lo podríamos aplicar al mail en una fila para que para que el Main no se repita Pero si yo voy a decir bueno Mira la verdad que quiero que un usuario tenga un nombre y apellido No tengo mis empleados cada empleado tiene un nombre y apellido Yo sé que pueden tener varias personas el mismo nombre y que también varias personas pueden tener el mismo apellido pero no pueden tener el mismo nombre de apellido o sea puede haber dos Lucas puede haber dos de alto pero no puede haber dos Lucas
de alto me explico yo quiero que lo único que no se puede Hacer es registrar la combinación de dos filas yo quiero que se pueda registrar Lucas o que se pueda registrar de alto pero que no se puede registrar juntos Lucas dalto eso lo podemos hacer a nivel de capa de aplicación cuando hagamos aplicaciones o páginas web y demás lo podemos hacer en backen o puede ser un primer equipo primario para que la clave primaria sea doble puede ser un kit normal una un índice único para que cada índice único sea el resultado de una
Combinación o puede ser en este caso el compuesto que es el que vamos a ver ahora que simplemente le agrega una coma y le pongo el otro campo por ejemplo Last name Qué hace esto esto lo que está haciendo es creando un campo único que va Index que va a ser compuesto cuando yo lo ejecuto ya se ejecutó sin errores ahora veo que si yo entro a la tablets estos dos Campos Last name y First name van a ser Campos únicos Qué significa esto ahora viene la magia si yo le doy En inserte New record
yo acá voy a poder poner por ejemplo West ya está puedo poner West pero no voy a poner poner Adam si pongo Adam Esto me va a tirar error porque porque me está diciendo Che flaco hay una constante única que está fallando First name y Last name son y son índices únicos está compuesto O sea que no puedes tener la misma combinación de nombres y apellidos que en otras filas más arriba tenés West Adam O sea que no puedes poner West Adam vos puedes Poner West Dalton o Dalton más fácil y acá puedes poner si
querés cualquier otra cosa Lucas acá también puedo poner Adam Ahí va puedo poner Adam lo que no puedo poner es West dos veces porque me tiro un error Esto es lo que me permite es acabamos de crear una una un índice compuesto ahora con puedo hacer una búsqueda con estos Campos va a ser mucho más óptima la consulta va a ser mucho más eficiente porque me va a tomar menos tiempo cada cosa que quiera hacer con Estos índices y encima cada vez que se haga un registro ese registro puede ser mismo nombre que otras tablas
mismo apellido que otras tablas pero no la misma combinación no puede tener mismo nombre y mismo apellido Ese es el objetivo de los índices compuestos Entonces ya sabemos que los primeriki no pueden tener Campos nulos y normalmente son auto incrementables y no sirven para identificar una fila son índices únicos después tenemos otros índices únicos que Son los ordinarios que es esto básicamente pero sin el Index asesina el Unique Perdón que puede tener Campos duplicados digamos puede tener valores nulos pero digamos no sirve para optimizar que sea más rápidas las consultas y después tenemos el único
el único es como un primary solo que no sirve para identificar una fila sino que para que no tenga valores duplicados un campo y además de eso nos permite hacer más rápidas las consultas más eficientes Es igual que un índice ordinario el que se puede duplicar que solamente la diferencia que ahora podemos asegurarnos de que no va a haber Campos duplicados y después tenemos el compuesto que puede ser prima compuesta puede ser un campo único compuesto o puede ser un ordinario normal que no sea único compuesto no importa Qué tipo de equidad puede ser compuesto
esto lo usamos para evitar que se crucen combinaciones si yo por ejemplo quiero hacer que cada nombre y Apellido sea único y Nosotros igual bueno Esta es la forma es como para encontrar combinaciones únicas que en una fila no se puedan repetir y además no sirve para también hacer que sea más rápidas las consultas Recuerden que esto que está acá que dice Tok 0 MS esto significa que la consulta tomó 0 milisegundos en traernos un resultado por eso antes cuando ejecutábamos cosas como por ejemplo estas Select products esto ven que dice que tomó 11 Milisegundos
bueno toma ahora toma cuatro porque la segunda toma menos toma 4 milisegundos porque está diciendo que en 4 milisegundos nos dieron 81 filas Antes nos tomaba 5 milisegundos o sea que siempre nos tomaba 5 segundos Ahora nos toma cuatro siendo nos tomaba 50 segundos Ahora nos toman 40 solamente con algo tan simple como eso optimizamos un 20% el rendimiento del sistema si esto hiciéramos muchas más optimizaciones podríamos tener una Consulta que se Ejecutan menos tiempo en definitiva un índice primario eh se utiliza para digamos establecer la unicidad de las filas O sea que no haya
iguales y además mejora el rendimiento de la consulta los índices únicos son como los primarios solamente que No necesariamente quieran hacer que cada fila sea única sino que cada campo tenga valores únicos Y además que sea más rápidas las consultas y después tenemos a los índices ordinarios que solamente Quieran hacer que la consulta sea más eficientes y más rápidas Y por último los compuestos que es para evitar combinaciones con las características anteriores Bueno pero que no se produzcan combinaciones o sea cada combinación sea única ahora por qué nos llenamos las tablas de índices y porque
aunque los índices puedan traer ventajas y demás también tienen sus desventajas Okay primero el espacio en disco los índices consumen Muchos pacientes discos Si creas índices en muchas columnas Campos y demás el espacio en disco puede volverse bastante significativo incluso atrasar el rendimiento por el siguiente motivo que es el del rendimiento de escritura qué pasa acá cuando se elimina se inserta o se modifica una nueva tabla o una tabla en general también hay que actualizar todos los índices asociados O sea si hacemos una modificación en una tabla con la tabla se utilizan todos los Índices
no la información solamente los índices O sea que tener índices básicamente puede disminuir el rendimiento de las operaciones de escritura y bueno en algunos casos digamos a veces el impacto negativo que tiene en ralentizar las operaciones de escritura puede ser mayor que el beneficio que nos trae optimizar las consultas hay que hacer un equilibrio no otro tema es el mantenimiento Mientras más índices más complejos mantenerlas Sobre toda la parte de determinar Cuáles son los índices que son útiles y cuáles son los índices que no son útiles por eso tienen que tener en cuenta que solamente
habría que usar índices en columnas que realmente los necesiten Okay ahora cómo identificamos esos Campos Cómo sabemos Cuáles son las columnas a las que deberíamos aplicarle un índice para que sea más efectivo más rápido y que tenga un mejor rendimiento la consulta bueno normalmente lo Deberíamos aplicar a Campos que usamos normalmente para condiciones de búsqueda o de filtrado Por ejemplo si lo usamos mucho por ejemplo si usamos el product name muchísimo en la cláusula Where o en un join y demás Esos Campos que lo utilizamos con eso Esas digamos cláusulas de filtrado de condiciones y
demás a esa columna le podemos aplicar un índice porque por estar usándose constantemente puede que tenga un impacto significativo en el rendimiento Volverlo un índice también cuando tienen una alta cardinalidad o sea como una cantidad de valores únicos alta es decir si por ejemplo sabemos que hay muchísimos Campos que tienen que ser únicos ahí tiene una alta cardinalidad Por qué Y porque si trabajamos con tablas que tienen muchos índices y ahí ya nos queda otra o sea Ese es normal no O sea si tenemos una una tabla que tiene 35.000 índices por ejemplo tenemos una
tabla que tiene product Y mil cosas que son ID esos ID deberíamos crear un Index porque porque el ID es un foreing key y Recuerden que los forenses deberíamos hacer que sean tablas Perdón índices porque porque son lo que usamos para unir tablas y demás Así que sí en los por ejemplo se tiene que aplicar este tipo de cosas Si yo vengo acá y por ejemplo le doy a la tabla orders yo voy a darle en modify Table acá puedo ver que está como forense porque no se ve nada ahí va Porque están establecidas como
forense ves acá le estamos pasando la información de que son forense que es otro tipo de cuando un índice se pone como clave foránea en este caso es foreim key Esto va a funcionar más rápido digamos que que un en campo normal porque es un tipo de índice Entonces esta clave foránea nos permite acelerar este proceso el de empleo ID que usted ID y demás en la tabla orders nuevamente voy a hacer botón derecho Modify Table y va a venir acá al costadito de todo vamos a ver nuevamente las claves primarias porque abajo de la
columna tenemos creado esto que dice for en King lo estamos agregando como clave foránea esto nos permite que las búsquedas sea más eficientes y más rápidas Así que nada es mi consejo creen índices estratégicamente al crear índices estratégicamente pueden aumentar las ventajas y el rendimiento de las consultas y pueden minimizar la Desventaja de tener que hablar ligando con el rendimiento que muchos índices No ese es mi consejo siempre como digo siempre lo ideal es encontrar un equilibrio para finalizar esta este específico esta sección que me gusta bastante a mí vamos a hacer un ejercicio rápido
para Mostrar cómo haríamos este proceso bueno para hacer un ejercicio de índices yo primero lo que tengo que hacer es identificar la tabla en este caso vamos a identificar por ejemplo la Tabla products como no hay tanta diferencia vamos a ir por otra acá otra tabla la mejor que va a ser order details este es creo que la que más registros tiene Así que si le damos en orden retails esto que está acá se va a ejecutar completo Si ahora por ejemplo uso un Where quantiti sea mayor a 10 lo mismo esto se va a
ejecutar join orders o en este caso vamos a poner ode punto quantiti para hacer referencia correctamente la tabla es les aviso por Las dudas es una buena referencia hacer referencias a las tablas Ok entonces para hacer referencia a una mejor forma siempre la asigna un nombre no es de Pesado sino que es correcto asignarle un nombre a una tabla Porque después es correcto hacer referencias a tablas correctamente para evitar conflictos no order date OK Vamos a poner Under date sea mayor a en este caso vamos a decir vamos a copiar sea mayor que esto porque
porque quiero que me da igual los Productos que se vendieron después de esta fecha ejecuto y acá me devuelve todos los productos que se han vendido después en todos los Pero esto que te una fila básicamente sin fin porque nos devuelve básicamente un cruzado no nos devuelve al no aplicar la no nos devuelve correctamente lo que queremos Así que vamos a crear más condiciones o punto order ID es igual a o de punto order ID ahora ejecutamos esto y técnicamente ahí debería funcionar qué Pasa y tarda 24 milisegundos en ejecutarse ahora tarda 5 ahora 4
ahora 5 ahora 8 horas 5 más o menos tarde en promedio 5 segundos en ejecutarse no es mucho 5 7 5 7 9 bueno como podemos hacer esto más rápido y estamos usando dos Campos order date y quantiti acabamos de identificar que como los usamos mucho estos Campos si estos Campos usáramos para muchas más consultas para muchas más cosas y demás ahí podemos ver los índices OK Así que vamos a crearlos Vamos a cortar esta consulta la no vamos a duplicar esto más fácil y vamos a hacer un create Index cantidad on order details quantiti
y ahí acabamos de crear este índice y además vamos a por un punto y coma y crear create Index precio on orders presionó Perdón no es precio me confundí es date order date Ahí va order date en este caso es fecha fecha Recuerden que lo ideal es ponerlo en inglés pero solamente para mostrarles un ejemplo on orders order Date la forma Correcta de hacer esto les cuento como es hay diferentes tipos de metodologías la que yo uso mucho es poner si voy a crear un índice pongo y NX o idx que significa índice el nombre
de la tabla order details y acá pongo el campo quantiti entonces de esta forma yo cuando lo voy a leer Ok O cuando quiero hacer referencia a un índice no toca andar diciendo A ver cuál es el nombre que le puse Cómo llame a este índice te vas a acordar por qué porque sabes que Siempre pones índice el nombre la tabla y el campo si yo sé que está aplicado acá el campo Yo sé que está la tabla de retales entonces digo Index quantities lo mismo con esto acá sería Index order date orders order date
y ahí está y ahí lo dejamos order date y ahora sí tenemos índices correctos Entonces yo ejecuto esto un vale acabamos de crear los índices bien venimos acá ejecutamos esto y en este caso por ejemplo vimos que aplicar índices realmente no nos Cambió nada Qué significa que el epifiamos creímos que agregar índices servirnos en este caso y agregar índices no nos sirvió pavosta No siempre agregar índices es bueno a veces realmente no nos mejora de hecho fíjense cómo pasó de 5 milisegundos 8 5 8 a 595 o sea podemos decir que esta no se pierda
no lo sabemos Pero puede ser que empeorado no debería pero bueno puede pasar ahora de hecho tenemos los índices acá los podemos ver así que tranquilamente los Podríamos eliminar vamos a hacer una prueba más vamos a dejarlo así y darle un Word a ver esto Cómo funciona esto tarda 25 milisegundos 25 27 fíjense el promedio es 25 25 26 25 26 26 nos quedamos 25 vamos a eliminar los índices que de hecho vamos a eliminarlos directamente desde acá vamos a en vez de eliminarlos ahora si queremos eliminarlos simplemente ponemos Drop Drop Uy Menos mal que
se ejecutó sin querer la consulta Bueno nada acá Básicamente hay que borrar todo esto porque no hace falta decirle En dónde se va a ejecutar Así que ahí estamos correctamente ejecutamos esto Perdón un punto y coma Ahí va y ahora sí se eliminaron correctamente los índices ahora que no tenemos índice vamos a ver Cuánto tarda la consulta antes tardaba 25 en promedio bueno ejecutamos y tarda más 37 36 77 Qué significa fíjense Cómo aumentó el tiempo eliminamos los índices y el tiempo la consulta tardaba tardó un 30% más treinta y pico por ciento más en
ejecutarse Qué significa que para específicamente esta consulta el rendimiento fue significativo en los índices sin índices tardamos 36 milisegundos en promedio en obtener un resultado de la consulta mientras que con índices tardábamos 25 o 26 o sea 10 milisegundos menos cosa que es una barbaridad más o menos como dije un 30%. Por eso siempre está bueno probar para qué casos Está bueno usarlos Porque si Por ejemplo ahora me ahorro 36 milisegundos pero esta consulta No la vamos a usar y vamos a usar la consulta anterior para que gastar recursos de disco y demás para agregar
dos índices que no van a cambiarnos nada y el tiempo de ejecución es exactamente el mismo no hace falta pero ahora como el tiempo vemos Que efectivamente sí mejoró cuando hacemos esto en muchas consultas de muchas formas y lo optimizamos correctamente que lo pueden ver ustedes Y enseñárselas para lograrlo como acabamos de hacer recién pueden obtener resultados magníficos porque esta es la forma correcta Ok de trabajar con el tema de los índices para ver cómo optimizar las consultas bueno y hasta acá llegó este apartado índice los investigo que exploren los investigadores que aprendan más cosas
Repito no podemos abarcar todo índices en este curso porque se nos acaba el tiempo y de hecho nos estamos yendo de Las manos con las cosas que estamos explicando porque estamos detallando todo mucho así que creo que si no se acostumbran a que explique todo tan rápido y que lo entiendan y demás es porque ya llegando al cierre del curso quiero resumir para que ustedes puedan entender todo y darle un mejor cierre así que bueno hasta acá llegó este apartado de índices vamos a ir con el siguiente tema que es un apartado rápido que es
el de las vistas es rápido lo Liquidamos en un ratito y creo que va a ser eh lo mejor que podemos hacer así que vamos con las vistas bueno se acuerdan de las tablas virtuales que vimos cuando hicimos sus consultas Bueno cuando hicimos sus consultas vimos lo que era una tabla virtual no va muy por arriba lo mismo vimos con una consulta Nos podía devolver una tabla que iba a ser utilizada por una consulta principal Bueno yo era una especie de tabla Virtual Ok las vistas son algo parecidos son tablas virtuales una vista se crea
sobre una consulta Select que se ejecute sobre una o varias tablas puede ser las vistas Ok como tal No necesariamente almacenan datos en sí mismos O sea no es como que la cada vista que creamos almacena un dato sino que como una referencia a una consulta que nos devuelve una vista esto nos puede servir cuando por ejemplo queremos tener trabajar sobre digamos consultas más Complejas si una consulta es muy grande muy gorda y la queremos simplificar decimos bueno utilizamos una vista le asignamos a toda esta consulta larga esta vista y con la tabla que nos
devuelve en base a eso podemos comenzar a trabajarla también podemos restringir digamos datos a usuarios que queremos mostrarles vistas y más cosas crear una vista es lo más sencillo que hay Creo que este va a ser el vídeo Más corto del curso literalmente es el apartado más Cortito del curso es fácil yo por ejemplo digo bueno Mira vamos a hacer Esto bueno acá ejecuté una consulta muy rápida nos trae los productos con un producto ID mayor a 50 que de hecho vamos a ser proteína mayor a 20 porque no queremos los primeros 20 productos y
nos devuelve de forma descendente del último que se registró hasta el primero que se registró bueno Esta es una vista Pero simplemente decimos Bueno la verdad que no nos interesa ni la unidad ni el No nos interesa solamente el producto ID nos interesa el product name y el price nada más que eso nos interesa solamente estos tres Campos Bueno qué pasa cada lo que querramos trabajar sobre esta tabla o hacer cosas sobre esto vamos a tener que directamente hacerle modificaciones a esto yo por ejemplo podría decir from products y empezar a hacer un montón de
cosas por sobre encima aplicarle su consulta joints Bueno qué puedo hacer hago lo siguiente tengo acá arriba y Digo GTA View productos simplificados as y esta Va a ser la consulta Entonces ejecuto esto y ahora productos simplificados fíjense como cambio de color está almacenado como vista de hecho si venimos a databasture podemos ver que acá dice views producto significados acá me sobró un índice en un products le podemos dar botón derecho y delate ahí no me había dado cuenta perfecto tenemos views con views lo que podemos hacer es tener esta Vista y también la podemos
eliminar desde acá si queremos la podemos eliminar y Chau pero Ya la voy a volver a ejecutar para tenerla de vuelta ahora productos simplificados es una vista qué podemos hacer con esto simple yo puedo venir y decir Select productos simplificados de hecho ya está me la va a ofrecer como opción el bms ejecuto De hecho no ejecuto voy a poner todo from por tu significado y la puede usar como si fuera una tabla ejecuto y ahora tengo La misma tabla Okay ya está espectacular Bueno ahora están pensando la podemos usar todo el tiempo no se
olviden que aunque pueden ser muy efectivas También tienen un impacto en el rendimiento de las tablas porque no están almacenando como trae una nueva tabla sino que están haciendo una referencia cada vez que ejecutamos esto técnicamente estamos ejecutando la consulta como tal entonces no es como que sea lo mejor no en cuanto a términos de rendimiento por eso es Importante considerar como siempre les digo el equilibrio entre la facilidad el rendimiento y demás otra cosa es que cuando tienen que saber Es que cuando es culite encuentra o la mayoría de las bases de datos encuentra
n el nombre de un producto Ok que se parece a una tabla porque Qué pasa si yo por ejemplo a esta vía a esta vista la hubiera nombrado No lo sé por ejemplo employs Qué pasa si yo hubiera nombrado a la vista en plugins Bueno lo que pasaría es Que generaríamos un conflicto y no sabría qué elegir Porque si la vista se llama employs y la tabla también Bueno aunque no lo crean le da prioridad a la vista O sea que si tuviéramos una tabla llamada productos simplificados y ejecutáramos esta consulta cuando ejecutáramos esta consulta
vas a llamar a la vista y no va a llamar a la tabla es importante que lo sepan Cómo podemos eliminar una vista simplemente usamos Drop y acá yo Les recomiendo usar la Cláusula If exists productos simplificados porque el IFE existe bueno tenemos dos posibilidades ponemos Drop View productos simplificados y esta forma forzamos a que se elimine la vista Pero qué pasa si nosotros no tenemos la vista O sea si ya la vista se eliminó nos va a devolver un error Entonces yo ejecuto esto y Pumba se eliminó Ya está no es más una vista
fíjense que se le fue el color verdecito la ejecuto de vuelta y me tira un error pero si yo acá Le pusiera Pero yo acá le pusiera If exist y ejecutará esto Ahora no me va a tirar errores porque porque está verificando que exista antes de eliminarla para que no nos tira un error si una consulta la que queremos verificar que exista o que no antes era un error usamos esta cláusula Y dalto entonces por qué no usamos siempre ifex en vez de usar solamente Esto bueno porque iffect tiene temas de rendimiento Por qué Porque
primero verifica que Exista y después la elimina mientras que si no lo usáramos directamente la elimina O sea que en vez de hace dos pasos hace uno Por ende es más rápido pero igual la diferencia no deja de ser mínima OK Pero sí saben que van a si están 100% seguros que van a crear una vista y que la vista está creada y que después van a borrar esta es la forma que se usa normalmente Okay dropview Espero que sepan que el IFE existe también está bueno y yo estaba el tema Vistas ya terminamos realmente
no había mucho más que ver era muy cordial y quiero hacer el vídeo más cortito del apartado Así que ahora tenemos que ir con lo siguiente es el tema de los bloqueos y las transacciones que es bastante rápido bastante simple y creo que también este ahorita no va a ser muy muy largo va a ser bastante cortito no tanto como las vistas pero es un tema que está bueno que lo veamos Porque después lo vamos a llevar a código o sea El tema de las transacciones los bloqueos y demás son cosas que tenemos que llevar
código de hecho por ejemplo lo que es comote no lo soporta Pero porque no necesita soportar pero si el tema de las transacciones begging y demás Porque después cuando uno lo lleva a código internamente así funciona el sistema que uno crea con split o con la base de datos en general entonces Está bueno que veamos cómo cómo funciona internamente en sql el tema de las Transacciones y demás para que después de eso directamente podamos ir de lleno a python Antes tenemos que pasar por una explicación que es la explicación de Procedimientos almacenados pero como lo
soporta vamos a ver el concepto vamos a ver muy por arriba como son y cuál es la forma de reemplazarlo entre comillas que nos trae la forma de crear funciones directamente en un lenguaje nativo y ahí vamos a agarrar python después de eso vamos a hacer un ejercicio final y Termina completamente el curso y ahí mamita mía arrancamos a explicar las diferencias de los lenguajes Perdón las diferencias de las diferentes bases de datos como migrar de una base de datos a otra y cerramos este cursito hermoso Así que basta de hablar vamos directamente con el
tema de bloqueos y transacciones bien bueno básicamente vamos a arrancar con la definición de bloqueos los bloqueos son una una especie de mecanismo que tiene la bases de datos Para poder manejar mejor los accesos concurrentes a la base de datos es decir cuando muchos usuarios quieren hacer el mismo tiempo hacer diferentes operaciones esto se maneja con bloqueos Porque si un usuario quiere acceder y Modificar un dato y otro quiere Modificar el mismo dato Pero decirle que tenga otro valor si por ejemplo hay dos Campos que quieren Modificar el nombre de la misma cuenta o el
por ejemplo un grupo de WhatsApp supongamos que esto no WhatsApp no tiene este tipo de bloqueos no y ambas personas quisiera Modificar el nombre del grupo de WhatsApp con cuál se quedaría con la primera o con la última eso generaría un problema Entonces Tengo que aprender a manejarlo Ok lo mismo con saldo de la cuenta si yo por ejemplo le pago a una persona algo Yo tengo una cuenta bancaria y la usamos 10 personas a la cuenta bancaria tiene $100 no entonces cada uno manda 100 dólares al mismo tiempo qué pasa la Cuenta la va
a tener menos 100 menos 100 y eso no debería poder pasar Bueno lo manejamos con bloqueo en sqlite por suerte el bloqueo es completo es decir es un sistema de gestión de base de datos que tiene un bloqueo completo O sea que cuando una conexión se encarga de escribir en la base de datos realiza un completo para que ninguna otra conexión pueda escribir en la base de datos pero a su vez es lo que permite es lecturas concurrentes o sea mientras Alguien escribe la base de datos otros pueden leer los que quieran pueden leer vamos
a ver los tipos de bloqueo hay dos tipos de bloqueo el lock o el bloqueo compartido en el que básicamente Nadie puede escribir OK Pero pueden leer es decir este bloqueo se aplica cuando alguien está leyendo una base de datos y lo que prohíbe es Evitar que las personas puedan escribir pero pueden leer es decir todos pueden leer incluyéndome a mí Pero nadie puede Escribir después tenemos el lock o el bloqueo reservado Esto es lo mismo que el anterior o sea básicamente es un bloque que se aplica Cuando alguien más quiere leer o alguien más
quiere escribir es decir lo mismo que antes Cuál es la diferencia La diferencia es que este bloqueo a diferencia del anterior no tenemos que aplicarlo cuando estamos leyendo la base de datos se aplica sino al escribir en la base de datos o sea el otro bloque básicamente Es cuando nosotros estamos leyendo la base de datos y queremos que todas las demás conexiones puedan leerlo también pero no escribirlo mientras que este se aplica cuando estamos escribiendo en la base de datos y queremos que otros puedan leer pero no escribir y después les voy a mentir hay
un tercer tipo de bases de datos que es el bloqueo exclusivo que es Cuando una base de datos cuando cuando estamos escribiendo en una base de datos y no queremos que La persona pueda ni leer ni escribir o sea En definitiva con el primer bloqueo que es el bloqueo compartido solamente estamos leyendo y no queremos que los demás puedan escribir pero sin leer con el bloqueo reservado estamos escribiendo y no queremos que los demás puedan escribir pero si leer con el bloqueo exclusivo que es el último estamos escribiendo Pero no queremos que los demás ni
lean ni escriban por suerte maneja los bloqueos bien en la mayoría De los casos pero si quieres optimizar cierto aspecto puedes optimizar el rendimiento de la es decir los puedes modificar y y manipular como quieras en sqlite lo que se utiliza para encontrar los bloqueos y las transacciones Ok que este nuevo término que aparece es estos tres estas tres cláusulas que son begging rollback y cómic necesitamos un comité acá a base de datos Bueno ahora vamos a abrir lo que son estos términos al fin Si yo Esto lo que hace es Iniciar una nueva transacción
nosotros podemos poner begging transaction o podemos poner nada puede ser bien transacción o no nada así así está perfecto y acá yo puedo decir por ejemplo delate from products Ok Where 0 porque si no hago esto Esto me tira un error el delate tenemos que dar una condición Que es una consulta que esto es para evitar esto normalmente antes no estaba pero es para evitar que la base de datos tengan pérdidas de Datos bestiales ahora qué pasaría si yo quisiera hacer un break por ejemplo voy a hacer un update products set product name igual pezón
whereum name igual Chase cuando el producto llame Chase vamos a cambiarlo por peso Ok si ejecutamos esto y le damos commit que es la otra posibilidad del cómic lo que haces es asentar el cambio rollback no siente el cambio cómic asienta el cambio Si le daremos commit Cuando ejecutamos esto vamos a poner un punto y coma qué va a pasar bueno venimos acá y me dice que se ejecutó sin errores ahora vamos a chequearlo mostramos productos y el primer registro tiene pezón pero qué pasa si hubiera dado ahora que tenga un tazón lo ejecutamos y
cuando venimos al código ejecutamos de vuelta me dice que son Por qué en vez de decir pezón ya no se ejecuta bueno esto ya es un tema de condiciones Ahora tiene que decir peso o Que le pusimos peso antes ejecutamos esta consulta y si la ejecutamos se cambia No ejecutamos actualizamos si se cambia Bueno vamos a hacer una cosa vamos a decirle ahora que se cambie a dalto Qué pasa si yo acá le doy rollback le doy rollback y cuando ejecuto esto Esto va a cerrarse o sea cuando venimos acá estas son no cambió O
sea si ejecutamos esto estas son vamos a ejecutar la vuelta a ver qué pasa sigue siendo tazón porque porque con el Rollback lo que hacemos Es OK Te equivocaste con alguna de estas cosas volvé para atrás esto más que servimos en sql porque repito en sql esto no nos sirve mucho es raro que hagamos consultas sql acá las hacemos en un programa las hacemos en python las hacemos en otro lenguaje Y eso es lo que vamos a ver pero tienen que entender que así funciona el rollback y el cómic si yo esto Lo sacara de
hecho la consulta fuera esta Ok y ahora ejecuto esto Esto Me devuelve de alto porque porque se hizo el cambio Ok me está eliminando me está eliminando el dalto O sea me lo estaba modificando De hecho si yo además de esto le pusieron punto y como le agregara vamos vamos una cosa Vamos a darle rollback a esto y esto que estaba vamos a cortar Ahí va ahora volvió a cuando ejecutamos esto vuelve a su antiguo valor Bueno ahora Acabo de cambiar todo le acabo de sacar el Where y acabo de decir que todos los productos
Se van a llamar de alto ejecuto esto y si venimos a ejecutar esta consulta hollyet acabo de perder la base de datos la acabo de perder Ah no pará inicié una transacción o sea que la consulta todavía no se asentó Qué significa que entonces podría volver para atrás Bueno si damos un rollback y ejecutamos esto hermoso vemos acá actualizamos la consulta y a todos los datos volvieron a la normalidad las 11 ya casi hasta son si lo voy a cambiar Por Chase Así que atención vamos a venir a decirle bueno product name igual Chase Where
product name tazón porque no quiero que llame tazón que se llame chiles Porque al principio ese nombre que tenía antes tenía el nombre Chase yo voy a copiar esto si yo acá lo ejecuto va a quedar abierta la transacción acá puede hacer todo lo que puedo hacer ahora después si quiero lo puedo volver para atrás entonces si yo pongo rollback vuelvo para atrás y se deshace el cambio O sea que ya no se va a llamar tazón se va a llamar de vuelta como le dije volvemos de vuelta ejecutamos esto actualizamos se llama Chase como
antes vuelvo para atrás porque iniciaron transacción ejecuto se vuelve a llamar tazón ahora como sería el contrario ya lo vimos cómic ejecuto esto Ok cerramos ejecuto se llama Chase Ahora quiero centrar el cambio bueno cómic con un commit asentamos el cambio decimos Che cómic tiene que estar Sí o sí porque con Cómic le decimos a la base de datos modifícame la estructura interna y guarda la información en el disco actualizamos vamos a ejecutar la consulta de vuelta y nos sigue diciendo por qué porque era la información Se asentó y ahora sí esto se llama chaiz
Qué pasaría si nos hubiéramos mandado una y si hubiéramos Si nos hubiéramos mandado una y todos los productos hubieran llamado alto si hubiéramos dado commit ya no hay vuelta Atrás todos los productos llaman de alto y ya está perdimos la base de datos todo lo que eran nombres lo perdimos por eso es importante saber almacenar bien la información no perderla y demás Ese es el poder del de Iniciar una transacción no que si iniciamos una transacción esto que acabo de hacer solamente con ejecutar esto Ahora puedo salir y hacer lo que quiera todo lo que
quiera lo puedo hacer si el cambio lo voy a guardar simplemente le doy cómic y se Guarda si sé que me manda acá y quiero volver para atrás hago rollback y deshago todo lo que hice desde que comenzó la transacción esto en programas es muy eficiente Porque si yo por ejemplo tengo un programa en python en el que hago varias cosas saco saldo de una cuenta pongo saldo en otra cuenta hay un error ahí Qué pasa si sacas al de una cuenta pero de otra cuenta no pudiste darle el saldo se devuelve el saldo a
la cuenta anterior Ok y no se Ejecuta nada porque porque se Ejecutan las dos o nada Y eso es lo que nos permite Ok verificamos que lo que suceda sea como nosotros queremos por qué porque esto puede hacer Yo abro un begging actualizo el producto y puedo verificar Ok si vengo acá si aún sigue from products puedo verificar que la información se haya modificado O sea que si yo hago esto desde python puedo decir Che a ver modificame este número me lo modificaste correctamente sí Ah OK Entonces hace lo siguiente esto salió correctamente si aunque
Entonces ahora sí ejecuta todo completo con un commit y asentar información en la base de datos ahora yo le digo Che me modificaste el nombre correctamente Uy no le puse Z Ok hacer un rollback volver para atrás y vuelve a intentarlo Porque nada no quiero guardar un cambio que no me sirve no Para eso sirve ahora cómo lo aplicamos en python cómo lo aplicamos en general a otra a otras otros programas Bueno para esto tenemos que ver algo que es las funciones definidas por el usuario o las y usar defined functions como su nombre lo
dice funciones definidas por el usuario Pero antes tenemos que ver lo que son los procedimientos almacenados vamos con un concepto rápido de almacenados y como eso puede ser la intro a las funciones almacenadas para el usuario funciones definidas por el usuario Perdón Recuerden que esto de las transacciones Y los bloqueos solamente lo estamos viendo muy por arriba porque le vamos a dar un poco más de profundidad cuando trabajemos en ahora que lo veamos con python Ok simplemente una introducción porque nadie hace transacciones cuando hace consultas desde una base de datos O sea si lo hacen
y a veces es común pero no es tan común es más común trabajarlo desde el backend en un lenguaje de programación que no es sql como python el lenguaje anfitrión se le dice antes Que hacerlo acá Porque estamos como para pruebas para ver y para aprender incluso para boludear o para otras cosas no pero no es tanto como para llevar a la práctica real utilizar un acá solamente quería que entiendan el concepto y cuando iniciamos una transacción todo lo que hacemos ahí se tiene que ejecutar al mismo tiempo y si algo falla podemos observar la
transacción o continuarla pero eso es lo que nos da la posibilidad de las transacciones es como abrimos un Contexto nuevo en el que todo lo que hacemos si algo sale mal podemos decir y no importa déjamelo igual Aunque haya salido mal o podemos decir no volver para atrás tenemos la posibilidad de decidir eso es lo que nos permite Ahora si ejecutáramos la consulta sin transacciones que hagamos de hecho es que light como digo por defecto ya viene con estos bloqueos y la mayoría de gestores también Cosa que cuando los llamamos desde cualquier Gestor no nos
vamos a mandar estas cagadas y podemos actuar en consecuencia con los bloqueos y demás pero que sepan que existen y que en sql se pueden hacer para que nada cuando tengamos que verlo en python entiendan a qué me refiero con un cómic entiendan a que me refiero con un rollback y no andamos haciendo boludeces no Así que ahora sí vamos con el siguiente tema que es el de Procedimientos almacenados vamos a ver rápido el tema de los conceptos que es y Creo que no sé si el de procedimiento va a ser almacenado va a ser
más más corto que el de vistas que de hecho creo que sí pero tenemos que entender lo que es para pasar a las funciones definidas por el usuario Así que vamos a ver el siguiente apartado del curso es uno de los últimos que vamos a ver bueno a ver qué es un procedimiento almacenado un procedimiento almacenado es como un conjunto de de instrucciones de normas y cositas A ver técnicamente Vamos a decirlo bien es un conjunto de instrucciones o comandos que se guardan en la base de datos Ok y podemos ejecutar en cualquier momento es
como una especie de recetario no de en una base de datos a ver básicamente Imagínate que vos tenés una consulta y cada vez que tienes que hacer un cálculo o algo lo que sea tenés que hacer mil cosas vieron lo que hicimos al principio con las vistas que las vistas lo que hacían era almacenaban una tabla que Después podíamos utilizar como especie de representación gráfica para trabajar sobre esa tabla que en realidad Repito no Simplemente una referencia bueno los procedimientos almacenados son algo parecido si tenemos que por ejemplo siempre hacer un cambio en una base
de datos extraer información hacer tenemos que hacer varios pasos no vamos a cansar de hacer todo el tiempo el mismo código repetido una y otra y otra y otra vez qué hacemos Bueno almacenamos un Procedimiento es decir almacenamos varias consultas Las guardamos bajo un nombre y cada vez que llamemos a ese nombre ya sabemos que básicamente podemos ejecutar acciones esto puede trabajar con parámetros puede funcionar parecido a una función en programación pero con la estructura de sql esto es bueno porque reduce la repetición de código facilita la organización y el mantenimiento del código también mejora
la seguridad porque está limitando el Acceso directo a base de datos Porque no es como que ejecuta directamente algo en la base de datos sino que estás digamos accediendo a la base de datos una forma en la que ya sabemos que vamos a interactuar correctamente y además aumenta el rendimiento porque lo que hacemos Es ejecutar las las operaciones en el servidor de la base de datos en resumen un procedimiento almacenado es una serie de instrucciones Ok que puede almacenarse en el servidor de la base de Datos y que las podemos utilizar cuando queramos para ahorrar
código y que sea todo más eficiente sqlite por otro lado es una base de datos en bebida y es bastante ligera el tema que se ejecuta como si fuera una biblioteca en Windows digamos esto se ve por ejemplo como si fuera un dll es decir es como una biblioteca de la aplicación esto significa que no es como que hay un proceso separado de la base de datos que funcione paralelamente al gestor sino Que es light como tal es parte del proceso de la aplicación sqlite no soporta procedimientos almacenados porque tampoco necesita hacerlo por sus características
de hecho es muy criticada por eso pero sí lo soportan por ejemplo bases de datos como igual pobre y demás en por ejemplo lo que hacemos para trabajar con procedimientos almacenados es no lo hacemos directamente desde sqlite sino que lo hacemos desde el backen O sea desde el Lenguaje anfitrión desde cualquier lenguaje hacemos digamos esta estos estos procedimientos almacenados directamente en el backen o sea básicamente lo hacemos a nivel de aplicación no en código sql sino que con el lenguaje con el que trabajamos con sql y Bueno ahí lo que hacemos Es básicamente nos comunicamos
usando sql y funciones funciones del lenguaje puede ser bueno puede ser malo No lo sé simplemente es así en resumen debido a La naturaleza ok No soporta procedimientos almacenados pero como les digo el hecho de que básicamente sea como parte de la aplicación es como que no necesitamos utilizar productos almacenados a diferencia de otros gestores de bases de datos los como los que ya mencioné cuando trabajamos con light lo más correcto es trabajar la lógica de este lado directamente en el lenguaje de programación así que hasta acá llegó el curso en el que vamos a
ver Es kyubite puro es decir es light se terminó por lo menos nativo no vamos a entrar más a un browser de decir Vamos a entrar pero no vamos a entrar de la forma en la que ahora vamos a ir a la parte execute y vamos a ejecutar código sino que ahora vamos a trabajar con python sí muchachos metemos decirles que llegó al momento de trabajar con python porque las funciones definidas por el usuario no son iguales a los procedimientos almacenados ya que no se Almacenan como tal de la misma forma que podemos almacenar una
un procedimiento almacenado que se almacena como tal en el servidor pero es la solución a esto okay Así que vamos con una práctica real es lo que normalmente hacemos cuando queremos crear una conexión y vamos a unir python con skylight llegó el momento llegó el momento señores y señoras de unir sql con python una vez que logremos hacer esta conexión y pueda explicarles Cómo es el tema de las usos De final functions y hayamos entendido Cómo conectar python con light y hacer operaciones básicas después de eso vamos a hacer una práctica laboral real vamos a
hacer una práctica con python y x esta práctica laboral real se puede hacer en cualquier otro trabajo en cualquier otro lugar y es muy necesario para cualquiera viene de madre ya vamos a llegar ahí Así que ahora vamos con el siguiente apartado que es el de user de Five Nights o funciones definidas por el Usuario que justamente es la solución a lo que venimos a explicar de esto de los procedimientos almacenados y la falta de posibilidad de hacerlos Así que dicho esto vamos Bueno ahora nos toca ver el siguiente tema que es funciones definidas por
el usuario como verán cambie el fondo tengo otra remerita nueva que también la van a encontrar en tienda de alto es blanco porque estamos llegando a una sección en la que tenemos que combinar lenguajes Hasta ahora en todo el curso de python Nunca tuvimos que combinarlo con ningún otro lenguaje en todo el curso sql tampoco pero ahora Estamos en una etapa blanca Es decir estamos trabajando con grises entonces decidí que el color de fondo sea blanco además para diferenciarlo un poco de lo que venimos haciendo no así que bueno para arrancar vamos a hablar un
poquito del concepto una función definida por el usuario o defined functions en la Podemos agregar Con el udf básicamente es una función que puede ser utilizada por h que está creada para poder recibir esa información que puede ser ejecutada en una consulta por ejemplo es decir yo una a una consulta esa consulta me devuelve valores bueno la función lo que hace es tomar esos valores procesarlos y volvernos una salida OK Pero además tiene que cumplir un requisito tiene que estar registrada en esta función no va a estar creada en sqlite sino que va a Estar
creada en un lenguaje anfitrión en este caso vamos a usar python el lenguaje aficiones cualquier lenguaje con el que podamos digamos Llamar a la base de datos y a través de sql modificada al consultar o hacer lo que querramos con una base de datos entonces básicamente lo que podemos hacer es agarrar una función en python crearla registrarla en United y ya podemos decir que es una función definida por el usuario para eso lo que se me ocurrió es Que utilicen visual Studio code Recuerden que de ahora es más mi consejo es que vayan a ver
el curso de python porque van a necesitar python ya que si no entienden python no pueden avanzar con esto y mi consejo es véanlo Ok si llegaron hasta este punto del curso Lite perdón de sql con sqlite vayan al curso de python aprendan lo que incluso Creo que creo si no me equivoco que es el mejor curso de todos lo que tiene canal el de payton sin duda Lástima que este Lo supera en producción audiovisual por un poquito pero lo supera pero necesito que lo vean para poder continuar con este apartado Así que si ya
lo vieron y ya vieron parte Ya llevaron el team python podemos avanzar bueno para arrancar le damos en New file la visual Studio code que también básicamente si no quieren ver el curso de Peyton no importa véanse por lo menos la primera hora que explicamos los conceptos muy básicos de python cómo instalar un solo Estudio code las características y demás Ok entonces vamos a visual Studio code vamos a python file y voy a crear un archivo que lo voy a guardar como vamos a guardarlo en el mismo lugar donde tenemos la base de datos para
poder tener todo más fácil acá en reservado para el sistema tenemos guardado en la base de datos de norwin ustedes tienen que bordar donde sea así no tenemos problemas después cuando llamemos archivos de python voy a ponerle Udf.i Por qué udf Porque significa Us de final functions que es el tema que estamos viendo ahora bueno para arrancar simplemente importamos la librería es 3 Ahí va y vamos a crear una variable que lo que va a ser va a llamar a Esta esta este módulo y decirle que se conecte Ok con la base de datos acá
lo que tenemos que poner básicamente es simplemente el nombre de la de la base de datos en este caso es northwin punto db que es el nombre del archivo si yo vengo reservado Para el sistema y acá tengo norwing Ok como el archivo está acá y mi archivo de python está en la misma carpeta simplemente pongo el nombre del archivo y ya estamos ahora ya está ya estoy conectado a la base de datos pero primero lo que tengo que hacer es crear la función la función normalmente antes de cualquier otra operación dentro de un programa
Entonces vamos a definir la función Así que ponemos Square vamos a crear una función que lo que haga sea Bueno a potenciar un número al cubo por ejemplo un número al cubo Square va a ser igual a lambda n dos puntos n por n por n que es hora que hace esto bueno primero una función lambda que es el equivalente a funciones flecha en Java Bueno solo que bueno es diferente la estructura pero es como la forma de simplificar funciones Okay vamos a decir que va a ser igual a una función que va a tomar
como parámetro n y lo que va a hacer después es devolvernos n por n por N O sea n al cubo en este caso lo que está haciendo es repito supongamos que le pasamos a la función Square un número como 10 qué va a ser y va a ser 10 por 10 por 10 de hecho en este caso Vamos como es cuadrado y no es cubo vamos a simplemente dejar n por n para que combinarla tanto es un ejemplo simplemente el concepto tenemos que comprender Así que esto si quisiéramos ejecutarlo y probarlo vamos a decirle
print Square Y acaba de decirle a ver pásame el cuadrado de 10 vamos a ver cómo funciona esto si esto funciona Vamos a darle python file yo con f5 ejecuto me debería devolver 100 perfecto si le pongo 12 me debería de haber 144 me devuelve 144 perfecto la función funciona correctamente Bueno ahora lo que tenemos que hacer es registrarla en light para registrar el en lo que hacemos Es Llamar al método kedate funtion y lo que hace este método Es decir noche a ver en esquí Lite Cómo querés Llamar a la función porque o sea
acá en python la decidí Llamar Square pero yo la podría llamar en esquilate cuadrado o potencia o como se me dé la gana pero como soy un buen tipo le voy a poner Square para hacer de cuenta que es el mismo nombre después le vamos a decir cuántos parámetros va a tener y va a tener un solo parámetro es decir vamos a pedirle al usuario un solo parámetro Y por último me va a decir y bueno flaco Ahora quiero que me pases lo último lo último que es cuál va a ser la función de python
que vas a usar para crear esta función bueno Suárez en este caso es esta función entonces primer es el nombre de la función que vamos a crear segundo parámetro es Cuántos parámetros No pide la función y tercer parámetro es la función que vamos a crear en este caso es jugar Bueno ahora lo que tenemos que crear es algo que nos permita hacer una consulta una base de datos y después Obtener una respuesta Pero qué pasa si yo una consulta la base de datos eso para que pueda obtener una respuesta tiene que recibir los datos procesarlos
bueno en python tenemos algo que son los cursores que los cursores son objetos que lo que nos permiten hacer es decir Bueno mira voy a hacer una consulta a la base de datos La que quieras y la voy a devolver la voy a procesar y con una función puedo devolverte Esa esa información Formateada ya eso se llama cursor cómo creamos un cursor bueno decimos cursor va a ser igual a con punto cursor es una método de la conexión de hecho podemos crearlo simplemente con como si fuera un método y ahora tenemos el curso lo que
vamos a hacer es decirle cursor punto execute esta función execute me está diciendo Che a ver ejecutame una consulta ok Bueno lo que voy a hacer es poner dos puntos Perdón dos triple de comillas porque ahora voy a poder hacer Una consulta de sql vamos a hacerla más prolija ahí está y acá dentro puede escribir el código sql que se va a ejecutar si yo le digo por ejemplo Select todo from products esto debería funcionar vamos a checarlo pero como lo checamos fácil le decimos a cursor Mejor dicho creamos una variable llamado resaltes que es
resultados que va a ser igual a cursor punto fecha fecha al va a decir Bueno mira execute va a ejecutar esta consulta y la va a almacenar en Cursor Ok Ahora cursor tiene esa información bueno con fecha a la obtenemos Entonces ahora el cursor punto fecha all no va a devolver resultados qué es lo que vamos a mostrar en pantalla le damos print y ahí si le damos pintern resorts en realidad ejecutamos y esto nos debería de volver acá tenemos todos los datos de la base de datos Pero esto no tiene ningún tipo de formato
para poder que tenga algún tipo de formato deberíamos Ver bien porque esto es extraño que nos devuelve Esto bueno este método lo que nos devuelve es un una lista de tuplas con cada uno de los valores nosotros creemos bien la información Qué vamos a hacer Bueno tenemos dos opciones una importamos pd es decir hacemos un import de la librería pandas que la utilizamos en el curso de python para trabajar con datos y vamos a crear un Data frame entonces decimos que el Data frame resolves o más Fácil resolve Data frame va a ser igual a
bandas punto Data frame resource Entonces ahora sí mostramos el Data frame lo que nos debería devolver es algo mucho más ordenado tenemos el precio tenemos la unidad acá tenemos el precio tenemos la categoría el supply ID tenemos la información que queríamos OK ahora que tenemos esto ya acabamos de ver bien Cómo es el tema de trabajar directamente con python no pero acá tienen acá tenemos que tener en cuenta Algo esto lo que hace el cursor es abrir un objeto y básicamente nos permite leer y a hacer consultas Pero cuál es el problema queridos amiguitos míos
bueno tenemos que cerrarlos una vez que ya hicimos la consulta ya obtuvimos los resultados y todo lo que es correcto hacer es hacer un cursor punto Close Por qué Porque estamos cerrando al cursor lo mismo con la consulta con punto Close perdón con la conexión a la base de datos que hace esto bueno Esto que está Acá primero y principal libera el recurso del cursor y después el de la conexión Entonces de esa forma los recursos que el computador está utilizando para asociando en realidad a estos objetos estas conexiones las libera Entonces tenemos más para
utilizar Y esto es más óptima permite tener un sistema que no consuma tantos recursos ni que necesite tanto para funcionar porque ya está liberemos los recursos porque no vamos a usar más la Conexión ya la cerramos Ya hicimos lo que queríamos ya está en caso de que hayamos hecho un update un insert o algo que modifique la base de datos necesitamos guardar el cambio recuerdan Cómo guardamos el cambio Exacto con un commit Por qué Porque un Select solamente selecciona Pero cuando trabajamos con python esto lo que hace es Iniciar una transacción Ok la transacción se
inicia por el lenguaje anfitrión Entonces ahora sin darnos Cuenta estamos iniciando una transacción que no se va a cerrar A menos que nosotros se lo indiquemos el begin lo hace automático una vez que iniciamos la conexión y hacemos todo aparece el begging ahora tenemos que darle un cómic Porque si yo hago un cambio en la base de datos y borro todo Front products cuando quiero ir a la base de datos y lo veo no pasó nada Por qué no pasó nada y porque realmente no se guardaron los cambios para guardar los cambios hay que Hacer
lo que les comentaba que es hacer un con punto commit de esta forma lo que estamos haciendo es asegurando perdón y dando como un cómic a la base de datos guardando La información entonces si actualizamos esto cuando actualizamos Ahora sí lo que tenemos es un sistema que abrió una conexión hizo una consulta guardó todos los datos cerró el cursor cerró la consulta la conexión perdón y libro los recursos y ya tenemos esto óptimo pero Todavía hay algo más óptimo que podemos hacer y es trabajar con administrador de contexto with que también lo hemos visto en
el curso de python para los que no recuerden with lo que hace es trabajar directamente con contextos en este caso fíjense que tenemos que abrir un cursor y cerrarlo Bueno les voy a brindar una solución Yo podría venir acá y en vez de crear esta esta variable que es con que vas a almacenar la conexión de esta forma podría ser lo Siguiente yo esto podría borrarlo todo vamos a hacerlo todo desde cero para que tengamos el ejercicio mejor hecho with y acá vamos a decir es punto Connect y acá lo mismo North wind.dv esto que
hace bueno se conecta con la base de datos Esto va a ser igual a con entonces básicamente creamos la variable regional con y va a existir en el contexto entonces lo que hacemos en el contexto es crear la función con punto create función creamos la función quare un Parámetro quarter y esto ya era lo que hicimos antes después lo mismo creamos el cursor en otros lenguajes de en bases de datos podríamos directamente usar un with para manejar el cursor pero es que lamentablemente no lo permite pero que sepan que en otro se puede entonces damos
el cursor como un con punto cursor cursor.exe execute y acá lo mismo de hecho lo que vamos a hacer para tener esto más ordenado es usar un QR en este caso vamos a decir que el cuery Ok es Igual a y acá le pasamos la consulta es eso no vamos a hacerlo mejor en el ejercicio final de python para que lo vean Esta es otra forma de hacerlo entonces acá la consulta es Select todo from products ahora le decimos que el resultado resolves va a ser igual a cursor.fetch old el problema como ya sabemos de
esto es que nos devuelve todos los datos casi que en datos primitivos con listas y tuplas bueno vamos a convertir la Data frame Resourdes DF igual resolved Perdón punto Data frame resourdes Entonces ahora sí si mostramos acá abajo print resolts DF cuando actualizamos si venimos y vemos qué onda Con la s Perdón ahora sí ejecutamos de vuelta y a ver que nos salta Perfecto ahí tenemos lo mismo pero más barato pero mi consejo es usen un try Catch el try Catch ya saben que es para manejar excepciones y lo que deberíamos hacer es supongan que
hacemos el sistema que les Comentaba antes no de hacer un intercambio de saldo qué hacemos extraemos saldo de una base de una de una tabla no de un usuario y se lo damos a otro entonces son dos consultas una consulta para sacar el saldo de un usuario verificamos si es suficiente o no y lo extraemos y otra consulta para insertar no el nuevo saldo Qué pasa si las dos consultas se Ejecutan hacemos un cómic para guardar la información sino volvemos para atrás con un rollback Porque porque si yo registro salto le saco saldo a un
usuario pero cuando se lo quiero dar a otro no puedo y Ya saqué saldo de uno ya no se lo puedo volver porque lo saqué Entonces tenemos un error hay menos saldo y desapareció bueno no se va a guardar la primer consulta hasta que la segunda tampoco está ejecutada ahora si la segunda no tiene un error hacemos un rollback y volvemos para atrás por eso está bueno trabajar no porque automáticamente se Trabaja con excepciones y las podríamos manejar no nos vamos a complicar tanto pero que sepan que esa sería la lógica no y otra cosa
que hace también que de hecho por eso usamos el White en realidad es para no cerrar la conexión porque porque la conexión se cierra automáticamente Ok en el with la conexión se cierra automáticamente no tenemos que andar cerrando la al igual que con los archivos como manejamos archivos se cierra automáticamente bueno Con las conexiones es igual bueno a ver cabe Resaltar que las funciones definidas por el usuario no son procedimientos almacenados Okay y ahora vamos a ver cómo funcionan ahora hicimos todo pero nos falta utilizar la función Bueno si queremos usar la función simplemente la
usamos acá como parte del selecto de lo que queramos cómo hacemos bueno la usamos en la consulta decimos Square por ejemplo y acá ponemos price entonces de esta forma yo traigo todo y Además el precio al cuadrado y lo vamos a poner a precio al cuadrado si yo ejecuto esto vamos a ver qué nos devuelve y acá nos devuelve todo nos devuelve esto y bueno en este caso le está asignando un valor pero si lo hiciéramos en sql o en cualquier otro lugar y quisiéramos obtener el nombre de la columna devolvería el nombre de la
columna en este caso no hace falta ponerle un as porque no lo necesitamos Ok actualizamos y ahí lo tenemos el Primer valor es el precio el segundo es el precio al cuadrado como verán los últimos valores que nos devuelven son nulos y como no queremos nulos vamos a decirle World price is not null de hecho price Nunca es null en realidad price tiene que ser mayor a cero porque price no es nulo sino que nulo son los demás Campos Ahí va ahora sí todos los productos con un price mayor a cero nos va a devolver
Ok y bueno muchachos ahora sí acabamos de trabajar con funciones Acá podríamos hacer lo que querramos eh si quisiéramos que sea una función que lo hace al cubo fíjense lo hacemos al cubo en vez del cuadrado Uy perdón se me fue Ahí va y cuando actualizamos los datos en vez de devolvernos al cuadrado lo hace al cubo ven 15 al cubo 3.375 si ponemos de vuelta al cuadrado me dice 15 y 225 que básicamente es 15 al cuadrado no entonces esa es la la función de las funciones definidas por el usuario El objetivo es ese
no es poder digamos trabajar directamente con Campos y con funciones integradas porque no es como que automáticamente ya las tienes sino que las integramos nosotros desde nuestro lenguaje anfitrión en este caso es python acá podríamos devolver una función que por ejemplo nos devuelva el valor del precio lo le haga descuentos por ejemplo una función que Calcula impuestos no entonces Agarra lo que cobra el empleado bruto y le hace todos Los descuentos Y te deja el neto Bueno podemos hacer una función que haga eso Por ejemplo Entonces nada es interesante trabajar con funciones definidas por el
usuario y la van a usar mucho probablemente Ahora sí vamos a pasar al apartado final del curso que es el ejercicio final con python en el que vamos a hacer cositas y es una práctica laboral real lo que vamos a hacer en el siguiente apartado es una práctica laboral real con python sql bases de Datos y un poco de lógica porque vamos a trabajar con pandas y con Mad Blood para mostrar Cuál es el producto más rentable el empleado más rentable y Cuál es el cuál es la una comparación de productos para ver las diferencias
que hay entre entre cada uno no en cuanto a precios y esto lo vamos a utilizar trabajando con gráficos de barras son dos gráficos de barras y por otro lado una simplemente una un Perdón un print del empleado más rentable o incluso También podemos comparar los 10 empleados más rentables y ver cuál rinde más y cómo se comparan entre ellos mismos Entonces ahora sí vamos a jugar un poco con el ejercicio final y hacer una práctica real verdadera con sql y python vamos Bueno vamos a crear Ok un archivo extra en python Vamos a darle
New file lo mismo en python y vamos a ponerle rentabilidad punto país es un ejercicio de cálculo de rentabilidad tenemos Varios parámetros tenemos valores tenemos gráficas tenemos python y bases de datos Así que vamos a trabajar para empezar importamos las librerías con las que vamos a trabajar que en este caso son ex-lite 3 pandas que a pandas las llamamos pd y Matt plot Live que puntualmente el Pipe plot y la llamamos plt como hacemos siempre no es una práctica estandarizada esta después lo que hacemos Es establecer directamente una conexión con la base de datos con
Igual excute 3 punto Connect y acá le pasamos North wind.dv Bueno ahora vamos a crear una variable llamada kyori y esta Va a ser la primera que vamos a hacer tres consultas diferentes de hecho vamos a hacer dos consultas diferentes una consulta en la que calculamos la rentabilidad del usuario y otra consulta en la que calculamos la rentabilidad Perdón una consultabilidad del empleado Cuál es empleado más rentable y otra en el producto arrancamos con la del Producto que es la menos jodida bueno ahora sí abrimos tres comillas y pasamos para abajo y ahora hacemos la
consulta en este apartado vamos a hacer un Select product name primero seleccionamos el nombre del producto después la suma Okay del precio por la cantidad vendida quantiti por qué porque vamos a trabajar con dos tablas con productos que tiene price y product name y con order details porque order details tiene la cantidad Entonces si tenemos el de productos el Precio y de order details la cantidad podemos multiplicarlos y ya directamente con esto ya podemos obtener el total no porque después lo vamos a agrupar con de hecho vamos a poner un nombre Ash revenue Esto va
a ser el review y esto lo vamos a traer de order details y vamos a llamarla ode acá vamos a hacer un joint join products podríamos poner un Inner join pero ya estamos en prácticas reales normalmente no se usa el Inner join on Products que vamos a llamar p on ok En este caso la condición va a ser que p punto tiene que ser igual a o de punto product ID de esta forma los campos que coincidan los machea y nos devuelve la Inner join OK Bueno y ahora vamos a hacer un Road by vamos
a hacer un agrupamiento que va a llamar a el producto ID vamos a ordenarlos por el product ID para qué Y para que el zoom price se acumule según producto o sea Cada producto que tenga una suma de lo que vendió la cantidad que vendió por su precio si vendió 10 unidades y el precio es 30 va a ser 300 el revenue total si vendió 200 y el precio es 100 va a ser 2000 el revenge total Ese es el cálculo que no que va a ser esto porque va a sumar el precio por la
cantidad de todas las filas y los va a agrupar según producto después vamos a hacer un order by Raven New esto para ordenarlo Según esto Mientras más vamos a hacer del que Más recaudó al que menos recaudó y vamos a poner order Byron desk para que desde aparezca del mayor al menor de forma descendente y esto nos va a devolver como un montón de productos Entonces vamos a poner mejor dicho un 10 y de esta forma solamente nos devuelve los 10 productos más rentables bueno acá vamos a poner top products básicamente es una variable que
va a almacenar el top de los 10 productos y acá vamos a hacer la consulta vamos a Utilizar una nueva función OK Porque Incluso en el ejercicio anterior les quería enseñar eso pero preferí dejarlo para esta práctica laboral real no vamos a crear ni un cursor ni nada vamos a usar una función de pandas que lo que nos permite es leer directamente la consulta y darnos una respuesta esta función automáticamente crea internamente el cursor las conexiones las abre las Sierra no hay que preocuparse por esto entonces este Método hace todo por nosotros no hace falta
hacer nada entonces lo que hacemos ahora es pasarle la consulta la consulta el primer parámetro dice Che Cuál es la consulta que quieres hacer pueri Che y la conexión esta entonces con el primer parámetro decimos Che la consulta va a ser esta y con la segunda le decimos Mira quiero que la conexión sea esta Entonces ahora lo que vamos a hacer es podemos Mostrar el producto más rentable en la consola poniendo un límite 1 Podemos hacer así Si el producto más rentable es este si yo lo muestro print top products Ya casi lo ejecuto me
debería devolver hay un error acá en matlook Ah puse pero puse Pay Ahora sí Ahora yo con razón no aparecía actualizamos y a ver si no funciona no Search retails with puse northwin uno se da cuenta de los errores cuando tira cuando escribe mucho código y le das el primer la primera ejecución arrancan todos los errores a Ver ahora que otro rombo salta ninguno perfecto acá nos devuelve el producto más rentable el revenue es de 62.976,5 dólares de este producto que escote perfecto ahora vamos a mostrar los 10 productos más rentables pero si yo muestro
los 10 productos más rentables Qué pasa acá y me saltan así perfecto yo sé cuáles son los 10 pero yo quiero verlo con gráficas no me sirve verlo así quiero tener gráficas para que sea más lindo más estético y que pueda Ser comparaciones más visuales bueno para algo importamos Matt Así que vamos a venir acá y vamos a poner top products Ok punto plot vamos a crear un plot que primero va a tener un x que va a ser igual a product name Ok el nombre del producto va a tener un y que va a
ser igual la revenue en este caso es esto yo le puedo poner Cualquier nombre pero le voy a poner revenido y después va a tener otra otros tantos parámetros el primer parámetros Time que es el tipo de Que el tipo que queremos Yo quiero que sea de barras signd bar quiero que sea gráfico de barras después nos va a decir el pickside que es el tamaño y va a ser 15 por 5 10 por 5 además y después en Legend Falls Ahí va Bueno ahora lo que tenemos que hacer es configurar el gráfico Vamos a
darle plt punto title y el title va a ser igual a 10 productos más rentables vamos a poner el plt punto x Live que esto es la el X que va a ser productos y vamos a tener el plt punto y Label que va a ser el revenue en español en inglés mío que lo decimos igual no sé cuál sería el revenue en español no sé cómo sería de ganancias totales el total recaudado Pero bueno nada y después vamos a hacer otra cosa extra que es x tics Qué hace esto bueno rotate 90 grados Perdón
rotate igual 90 Qué hace esto Bueno si se fijan lo muestra así O sea si yo te digo vamos a ir a Paint esto es un gráfico cartesiano el texto en x me lo muestra así Qué pasa si yo Tengo varios Campos y están todos juntos me va a mostrar un campo encima del otro literal que me va a mostrar los campos así entonces para que no me las muestre Así le voy a decir Che rotalos Ok rotalos para que pueda leerlos de costado Esto es lo que hace básicamente rotarlo Entonces eso es lo que
estoy haciendo estoy diciendo que los rote 90 grados si yo ejecuto esto lo tengo que Mostrar tengo que decirle plt punto show ejecuto y a ver qué pasa esto tiene un Problema que es rotate y es rotation creo ejecutamos y ahora sí debería devolvernos el gráfico vamos a ver que nos muestra Acá está 10 productos más rentables vamos a abrirlo en pantalla completa voy a darle en configuración y darle en Top para que lo tire Ahora sí para que lo pueda ver mejor buenísimo Acá tengo el nombre corte con toda esta cantidad este review y
acá tenemos un gráfico que se revenido otro gráfico que dice Products productos era pero me equivoqué pero no importa es producto ya se entiende y acá tenemos la diferencia o sea acá podemos entender la bestialidad de rentabilidad este producto es el top 1 62 mil dólares no dio el segundo producto más rentable es un tercio de rentable de lo que es el primero una locura Y esta forma es mucho más gráfico ya tuvimos la primera gráfica con los productos rentables ahora Necesitamos obtener el empleado más rentable Vamos a Ver cuál es el empleado más rentable
obteniendo el producto o los productos los 10 productos más rentables y ahora los obtenemos y ahora vamos a copiar y pegar y acá abajo vamos a obtener ahora obteniendo los 10 empleados más efectivos para un empleado no es rentable comprar sino que es efectivo una variable 2 y vamos a hacer una consulta okay vamos a poner un Select First vamos a decir algo que se llama concatenación la Concatenación es básicamente una especie de Unión si tenemos un texto que es Hola y otro que es Cómo estás Cuando los concatenamos nos devuelve un solo texto con
Hola cómo estás si tenemos una variable que por ejemplo es bienvenido usuario si el usuario es Lucas va a ser bienvenido Lucas sin usuarios Pedro va a ser bienvenido Pedro Por qué Porque estamos concatenando no un solo texto combinando otros dos se puede concatenar de todo en este caso vamos a llamar a la Variable First name vamos a concatenarla con un espacio en blanco y la concatenamos después con el apellido Last name Por qué bueno me va a ver si el nombre es Lucas nos va a volver Lucas te puedo dejar un espacio y si
el apellido de alto nos va a volver de alto entonces va a ser una sola columna que nos devuelve Lucas espacio dalto Lucas dalto nombre y apellido en los demás gestores se puede hacer con concad por ejemplo pero es que no lo soporta Soporta este operador que para mí es más cómodo mucho más cómodo que andar usando con Cat y Esto va a ser en play name Ok O sea el nombre del empleado después vamos a usar la función de agregación count que lo que hace es contar la cantidad de órdenes Recuerden que count cuenta
las filas si le pedimos que cuente Cuántos valores hay la fila precio nos cuenta los valores si por ejemplo precio tiene 10 filas Esto va a ser 10 sí precio tiene 30 va a ser 30 le Damos en todo para que nos incluya todos los campos todas las filas Y eso y ahí nos cuenta completamente todas las filas entonces de esta forma aseguramos que esté con filas vamos a hacer un count y ya está de esa forma si hay 30 filas devolvemos 30 y esto lo vamos a devolver from orders y lo vamos a llamar
o después vamos a hacer un joint en plugins Perdón en ploise cuando si al final y vamos a llamar la e y la condición va a ser on e punto en play ID Igual o punto en Floyd de esta forma vamos a hacer un match y ahí tenemos el Inner joint perfecto ahora tenemos que agruparlos grow Bye O punto en play ID de esa forma vamos a agruparlo porque si no nos va a volver un solo número que es el total y vamos a ordenarlo order by vamos a ordenarlo por esto así que vamos a
darle a total y acá vamos a decirle order by total desk para que nos vuelva del primero al último y ahora vamos a ejecutarla vamos a hacer lo mismo vamos A decir que top employs o sea el top de empleados es igual a pd punto read sql y acá vamos a hacer la consulta primero le pasamos la 2 y después le pasamos la conexión entonces después creamos el gráfico tenemos que hacer lo mismo que está acá yo lo voy a copiar y pegar no saben qué nunca les hice esto siempre los Acompañé si ustedes se
descargaron un programa yo me descarga del programa Así que no voy a copiar y pegar voy a hacerlo y quiero que ustedes Van conmigo Vamos a hacer todo al principio vamos a venir acá top en ploise punto plot para crear un gráfico ponemos x y le pasamos que va a ser en play o sea el nombre del empleado y va a ser igual a la cantidad de ventas o sea el total la cantidad de ventas que hizo después vamos a Perdón esto es el y no el X el y ahí va después viene el próximo
parámetro que es kine es un parámetro que nos dice Qué tipo de gráfico queremos crear un gráfico de Barras y después un parámetro más que es 6 que nos dice Che Cuál es el tamaño de la Gráfica Bueno 10,5 o sea 10 en X5 en y después le vamos a pasar un último valor que es algo así es Legend que va a ser falso Ahí va y después le vamos a empezar a configurar el gráfico en este caso explote punto title para el título y acá le vamos a poner por ejemplo empleados más efectivos vamos
a poner un acento a la porque somos buena gente y vamos a poner 10 empleados más efectivos Y abajo vamos a poner plot punto x Label y x Level va a ser igual a empleados plot punto y Label que va a ser igual a total vendido y después tenemos plot punto x tics que va a hacer una rotación en este caso rotación pero vamos a rotar lo mejor unos 45 grados porque 45 grados también lo podemos voltear Entonces si ahora hacemos un plot punto Show en este caso un explote es plt plt porque estamos haciendo
referencia a otra cosa pélate punto show ahí se debería Mostrar Si ejecutamos esto vamos a ver qué es lo que pasa seguramente Hay algún error siempre Ah no no hay errores mira y productos más rentables listo hasta acá está todo bien primero y sabía que viene en este caso acá le vamos a poner un as en play además y ahora sí ya nos va a quedar bien no porque tenemos que decirle Cuál va a ser el campo o sea en este caso Recuerden que esto es el valor o sea en Play almacenar los datos de
este campo y Total va a almacenar los datos de este campo actualizamos y ahora sí debería funcionar todo correctamente bien El primero lo devuelve ya lo sabemos y el segundo lo devuelvo ahora tenemos los 10 empleados más efectivos un pelín para poder ver los nombres margaret es la más rentable la empleada más efectiva que vende 40 que vendió 40 hizo 40 ventas Janet hizo unas treinta y pico de ventas Nancy hizo casi 30 ventas y acá tenemos los desempleados más efectivos ahora Vamos a despedir tres empleados Porque algunos que son muy malos De hecho acá
nos faltó el limite 10 limite 10 actualizamos y ahora nos debería saltar bien Vamos a verificarlo Ahora sí saltan los 10 pero yo quiero despedir porque debe haber algunos que son los menos efectivos Así que vamos a despedir a tres empleados Vamos a darle ask acá para que sea ascendente y nos muestre desde el que menos vendió los tres que menos vendieron Entonces ahora Actualizamos y estos son los tres que me lo vendieron en los que menos vendieron fueron Annie Steven y Robert King Bueno vamos a despedir a estos tres bueno muchachos despedidos y así
finalizó este hermoso ejercicio en python bueno muchachos hasta acá dejamos este ejercicio acabamos de finalizar la práctica laboral los desafío Ahora sí a mejorar y optimizar este código Quiero ver cómo se las ingenian para optimizar este código igual Recuerden que este es El empleado que más vende no el que más recauda los desafíos hacer dos cosas primero a usar with para esto para ver cómo lo harían con el administrador de contexto with y esta función es bastante interesante ver cómo lo harían y después otra otra cosa que los desafío hacer es que tienen una tercera
consulta para encontrar el empleado más que más recaudó porque una cosa es el que más vende por qué porque acá estamos consiguiendo el que más vendió o sea Estamos multiplicando en este caso en la segunda consulta la cantidad de órdenes que hizo a un empleado porque porque tenemos en play ID y orders si una order tiene el empleo ID uno al empleo al empleado 1 le llamamos una orden si tiene 10 le sumamos 10 entonces la cantidad de órdenes que haya hecho están registradas acá pero Puede que haya no haya hecho 40 ventas de 10
100 dólares otro puede que uno haya hecho 10 ventas de mil dólares entonces me sirve más el Que hizo 10 venta de mil que hizo 40 de 100 no Entonces eso es lo que los desafíos hacer ahora tenemos a quien más vende Ahora quiero que tengamos al que más haya recaudado los desafíos de hacer eso es una buena práctica porque Recuerden que el aprendizaje es un proceso activo se aprende haciendo No viendo así que bueno gente los despidos estoy completamente orgulloso de todo lo que venimos logrando de todo lo que venimos aprendiendo y de que
cada vez Avancemos más Recuerden que el próximo curso es el curso de Inteligencia artificial ok que es el que tengo mi objetivo es poder lanzarles antes el curso de git el curso de programación orienta objetos en python y un cursito rápido de matemáticas para que se introduzca sé que no tiene que ver con programación matemáticas pero más que nada para que se introduzcan en lo que es matemáticas que son necesarias para Inteligencia Artificial No lo sé Lo estoy pensando por ahí lo que están asegurados son el git y el de pronuncia orientados Así que espero
que los vean el de Inteligencia artificial lo apunto sacar a final de este año pero les aseguro que va a ser el curso más épico que van a ver en su vida ahora sí gente vamos al último apartado final del curso que es el cierre total que es en el que vemos las diferencias con las diferentes bases de datos Porque recuerden es bastante Diferente a los demás gestores pero nos sirvió para aprender sql que es lo importante lo importante que aprendemos sql después aprender pobre y demás es cuestión de sentarse una tarde y entender bien
las diferencias Ok Obviamente el profesional profesional se sienta bastante más tiempo pero el objetivo es que entiendan la herramienta principal que es sql que es con quien le con quién nos comunicamos con una base de datos después el gestor puede ser Cualquiera puede ser pobre María debe maicico lo que quieran Pero lo importante es que sepan sq L y ya lo aprendieron y de la forma más fácil y con skylight Así que vamos a ver la diferencia que tiene trabajar con diferente base de datos para que sepan adaptar sus proyectos a las bases de datos
más famosas del mundo que son my sickwell pobre y sql server Así que vamos a las relaciones Así que vamos con esa sección Bueno gente como ya sabrán es chulate es un sistema de gestión de bases de datos bastante diferente a los demás Esto no es ninguna novedad es decir my sick o el pobre sql server y demás como que se parecen bastante entre sí pero es que no porque es diferente porque lo que tienes que United es que es una especie de base de datos en bebida es decir se interpreta como si fuera una
aplicación o parte de la aplicación y no como algo entero como tal pero ahora lo vamos a Ver bien Vamos a ver primero las diferencias en características primero vamos a ver diferencias en características vamos a ver diferencia en código vamos a ver diferencia en costos vamos a ver diferencia en boludeces como mayúsculas y minúsculas para que para que entendamos Cuáles son todas las cosas que vimos en este curso que cambian según la base de datos Así que vamos a arrancar de a poco primero arrancamos con lo que es más teórico que Son las características para
arrancar esquilate es una base de datos de motor ligero y del archivo único un único archivo como estoy moviendo norwin.d es un único archivo es bastante sencillo no utiliza un proceso de servidor dedicado simple es ideal para aplicaciones que son incrustadas y también de prototipos no es apropiado para aplicaciones de Gran escala Ok O rendimiento después tenemos un gestor de bases de datos basado en servidor lo que tiene es que Sqlite por ejemplo soportaba un solo conjunto de escuela y de sql mientras que mysql soporta varios y es ideal para aplicaciones de Gran escala o
sea es excelente para esto ogre también es un gestor de base de datos basado en en servidor soporta también un conjunto completo de características de sql y también tiene sus propias extensiones y también es ideal para aplicaciones web para proyectos empresariales y para escalar y después sql server Ok también Basado en servidor obviamente es de Microsoft de pago también soporte un conjunto completo de características de sql y También incluye como pobre extensiones propias es ideal para aplicaciones de Gran escala bien esto en cuanto a características vamos a arrancar ahora con el apartado de código Quiero
ver cómo se diferencia el código en cada gestor Bueno vamos a arrancar con lo más básico crear una tabla cuando creamos una tabla en todas lo hacemos de La misma forma Ok lo único que cambia es en My sickwell tenemos que agregar el motor Ok de almacenamiento nada más cabe Resaltar que cuando trabajamos con claves primarias también hay una diferencia porque cuando nosotros creamos tabla agregamos una clave primaria bueno Esto se hace diferente en cada gestor en ese like como ya vimos lo hacemos con el auto increment en también solamente que hay un guión medio
entre medio de auto incremento o sea es auto y Guión bajo Perdón no guion bajo auto guión bajo incremento pobre usa serial o Big serial y después tenemos sql server que en sql server tenemos a identity Okay después vamos ahora con los iner arrancamos el más fácil el Inner join el Lino join o el join es igual en todos los gestores el left joint es también igual en todos los gestores el wright joint Ok el right join es en todos los gestores igual excepto en esquí Lite en light Ya vimos cómo lo hicimos parece un
Right join tenemos que usar un left joint solamente que invirtiendo el orden de las tablas es lo mismo solamente que cambia la palabra después el full join o el full outer joint en pobre y en sql server es igual Ok simplemente ponemos el full join full outer join también puede ser pero en cual tenemos que utilizar la unión entre un left join tenemos que utilizar la unión entre un left join y otro left join con las tablas invertidas o sea tenemos que usar Un Live joint y un Live join que simula ser un raid joint
Entonces es como que hiciéramos lo mismo que unimos un led con un right solamente que en sqlite está simulado no es un electrón entonces tendríamos para conseguir un full joint dos led joint simulándose O sea hay una invitación bastante loco pero sí ya lo hemos visto ya lo entendimos pero nada en inglés y en coso ya se usa el full después tenemos las funciones de agregación en todos los gestores mi Max Avg count y zoom son exactamente iguales son las más comunes así que no se preocupen son iguales el having en todos los gestores también
es igual el grow by también en todos los gestores es igual después vamos con los índices Cómo mejorar que se crean índices bueno en todos los gestores creamos un índice único igual ya sea común o único O sea no únicos o únicos transacciones como se hace las transacciones bien en todas es igual begging Comic rollback van a ver Que a veces usan begging transaction pero ya solamente y en My súcure por ejemplo antes usaba mucho el Start transaction Así que si ven algún código viejo pueden ver el transaction o el Start en Star transaction que
es común pero hoy en día se usa más comúnmente el beck-in después tenemos el Now Now es una función que tampoco le expliqué pero nos devuelve una fecha que dice nos devuelve la fecha actual con formato año mes día Horas minutos segundos milisegundos básicamente nos devuelve un té que un formato fecha Ok si quieren pruébenla entren ahora la base de datos pongan Select Now y ahora que les va a seleccionar la hora en todas es igual solamente que en sql server usamos get date todos juntos get date hay otras pero es la más parecida a
nau bueno funciones matemáticas qué pasa con las funciones matemáticas round que es para redondear todos los gestores funciona Exactamente igual es un round después tenemos el cell y selling que es una función que lo que hace es redondear hacia arriba Ok Digamos si tiene un número 4.7 y usamos el link se redondea a 5 si tiene Punto 2 se redondea hacia 5 siempre se va a redondear hacia arriba si es el número punto algo o sea si es un número flotante lo redonde hacia arriba en sqlite y en pobre se utiliza igual es la usamos
así con el parámetro el valor Del argumento que le pasamos es el número que queremos que redondee y en My Secret y en sql server es selling completo 6ling no es link después tenemos fluor yo siempre le dije flor Pero bueno se dice flúor que hace lo mismo que sailing solamente que lo hace al revés en vez de redondear para arriba redondear para abajo si es 4.9 se quedan 4 4.7 se quedan cuatro es como si le sacara la coma y a la bosta la diferencia es que sailing redondea Siempre hacia arriba fluor redondea siempre
hacia abajo y round redondea depende Si es más de 0 si es el punto 5 para arriba redondeado para arriba si es menos de punto cinco redonda para abajo por ejemplo 4.7 lo redondea 5 pero 4.2 lo redondea 4 entonces esa es la diferencia que round redondea depende pero hacia arriba y hacia después tenemos límite y offset lo vimos pero offset no Bueno limit ya sabemos una función que nos permite limitar la Cantidad de resultados esto es paginación OK limitamos la cantidad de resultados en todos los gestores excepto en sql server nos funciona perfectamente limit
pero en sql tenemos que usar la cláusula top con la cantidad de número Entonces de esa forma limitamos en vez de usar límites usamos top no sé y el número y después tenemos soft set lo que hace es decir Che Cuántos querés que me salte O sea hay 20 registros Bueno creo que me devuelva solamente de esos 20 Quiero que me devuelvas 10 registros Ahora often nos dice a partir de cuál quieres que te empieza a devolver 10 registros desde el quinto desde el sexto desde El séptimo bueno Devuélveme 10 registros desde el 5 para
arriba Entonces me empieza a devolver 5 5 6 7 8 9 11 hasta el 15 me dolió del 5 al 15 porque me dolió arranco en el 5 y desde el 5 empezó a contar 10 y me lo fue doliendo uno por uno Eso es el offset se saltea la cantidad que le pedimos que se Salte no la cantidad de resultados que le pedimos que salte de hecho si no usáramos offset podríamos usar limit y darle dos parámetros el primer parámetro es el offset y el segundo parámetro es el límite es extraño que primero sea
así Debería ser primero límites Pero no importa también que sepan que podemos usar limit con doble parámetro y el primero sería el offset y el segundo el límite Bueno cuando usamos los dos los dos límites y el offset en todos los Gestores excepto en sql lo podemos usar pero en sql pero en sql server tenemos que hacer todo este choclo para para hacerlas usar las dos juntas Bueno después los operadores de comparación son todos iguales básicamente mayor que es menor que mayor o igual que menor o igual que in eh Les recomiendo que investiguen y
también es una buena en y también está bastante bueno en fin todos son iguales los Comodines en like también son son dos los comodines en like también son iguales la diferencia es que tenemos en pobre un operador específico que se llama y Like O sí y Like como like pero con la guía delante que esto lo que hace es distinguir mayúsculas y minúsculas minúscula bueno like no distingue Pero y like distingue entonces Si queremos que distinga es y Like si no queremos es like bueno gente y hasta acá llegamos lo que les recomendaría hacer es
que si Quieren mirarte una base de datos a otra base de datos por ejemplo mysical Qué tienen que hacer Bueno agarran la base de datos la O sea exportan la base de datos como formato sql laven y cambian los datos Por ejemplo si tiene una base de toma yqel que hace Man y la modifican las cosas para que se adapte le cambien el auto incremento por el auto guion bajo incremento como que la adaptan no a la al gestor que le van a migrar después lo que hacen cuando tienen ese código Sql crean toda lectura
de la base de datos ya siempre Todas las bases los gestores tienen como una función para entender todo el código de sql y crearla automáticamente como para poder importar una base de datos nueva y después para importar los datos Porque también tenemos datos no sirve solamente tener la estructura si no tenemos los datos Bueno cómo exportamos los datos con csv con más valuelos creo que significa valor separados por comas es un formato De intercambio común mundial o sea todas las bases de datos tienen una función para los datos exportar Entonces vamos a todas las tablas
una por una todas las tablas una por una exportamos a csb y después lo que hacemos Es cuando tenemos la base de datos nueva que ya creamos en otra versión por ejemplo en vamos a importamos todos los datos de anti ya tenemos la estructura por un lado y le importamos los datos Y esa forma migramos Ahora sí gente me despido de Este curso la verdad que estoy re contento ya saben que sigue el curso de Inteligencia artificial que va a ser una locura vayan a seguir mains y todavía no lo hicieron para hacer cualquier pregunta
o cualquier duda que tengan si no estás suscrito este canal Dale suscríbete que estás esperando de hecho más que suscribirte te diría activar la campanita para que te llegue Cuando suba algo nuevo además como ya sabes tenemos cursos de todo en el canal puedes entrar Vamos a ir subiendo cursos constantemente con el tiempo vamos a actualizar los que ya están Así que siempre vas a tener contenido para poder aprender para mantenerte vigente Y sobre todo para volverte programador y no te olvides de lo más importante de todo que yo siempre lo digo y está para
pensar no porque es una frase que te deja pensando a veces y es que no tenés que programar para solucionar problemas sino que tienes que programar para crear Soluciones yo soy dalto y nos vemos en la próxima [Aplausos] [Música] [Música] seguir preparando la sorpresita que hace rato [Música] la sorpresa de paso tiene que ver con el curso o tampoco viendo los comienzos de cada línea Sí pero la verdad no creo que te dé inteligencia incluso para esto lo Vas a tener que usar y bastante que no sea la tuya para un poco flaco otra vez
vas a arrancar así nomás con el curso sí [Música] y que no es una introducción para que más o menos se claro y el minuto van a ver el mejor la dejó por Dios pero tenés que motivar bastante buena podrías comenzar el tiempo que quieras Aunque Bueno Cuando veas lo que te preparé vas a dar cuenta que no te queda mucho tanto vas a tener que usar la inteligencia [Música] [Música] dónde estoy [Música]