Resumen del Curso de SQL: Desde Fundamentos hasta Avanzados
Introducción
Este curso de SQL ofrece una guía completa desde los fundamentos básicos hasta conceptos avanzados como subconsultas, joins y transacciones. Aprenderás a manejar bases de datos, optimizar consultas y aplicar técnicas de normalización, todo mientras trabajas con ejemplos prácticos y ejercicios.
Contenido del Curso
-
Fundamentos de SQL
- Introducción a SQL y su importancia en la gestión de bases de datos. Para aquellos que deseen profundizar en la creación de bases de datos, se recomienda el resumen de Aprende MySQL: Introducción y Primeros Pasos para Crear Bases de Datos.
- Estructura básica de una consulta SQL.
-
Consultas Básicas
- Uso de SELECT, WHERE, y operadores de comparación.
- Filtrado de datos y uso de funciones de agregación como COUNT, SUM, AVG.
-
Joins y Relaciones entre Tablas
- Inner Join, Left Join, Right Join y Full Join.
- Cómo unir tablas y trabajar con relaciones. Para una comprensión más profunda de las bases de datos relacionales, consulta A Comprehensive Guide to PostgreSQL: Basics, Features, and Advanced Concepts.
-
Subconsultas
- Definición y uso de subconsultas en SQL.
- Ejemplos prácticos de subconsultas en SELECT y WHERE.
-
Transacciones y Bloqueos
- Concepto de transacciones y su importancia en la integridad de los datos.
- Uso de COMMIT y ROLLBACK para manejar cambios en la base de datos.
-
Índices
- Creación y uso de índices para optimizar consultas.
- Ventajas y desventajas de los índices en bases de datos.
-
Vistas
- Creación y uso de vistas para simplificar consultas complejas.
- Cómo las vistas pueden mejorar la legibilidad y organización del código.
-
Normalización de Bases de Datos
- Primeras, segundas y terceras formas normales.
- Cómo aplicar la normalización para evitar redundancias y mejorar la estructura de la base de datos. Para más información sobre la normalización y su aplicación, revisa Understanding the ALTER Command in SQL: A Comprehensive Guide.
Conclusión
Este curso proporciona una base sólida en SQL, permitiendo a los estudiantes manejar bases de datos de manera efectiva y eficiente. Con ejercicios prácticos y ejemplos del mundo real, los participantes estarán preparados para aplicar sus conocimientos en entornos laborales. Si estás interesado en el desarrollo web, también puedes explorar Desarrollo Frontend desde Cero: Creando Tu Primer Sitio Web para complementar tus habilidades.
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 para un poco flaco
Eh ya ya tenía que aparecer Qué pasa Qué pasa Por qué me interrumpí en medio de la introducción del curso otra vez vas a
arrancar así no más con el curso y Sí obvio es lo que estoy haciendo No sé qué esperá que haga y nos des una
introducción para que más o menos sepamos esperé 42 días para esto vos sabes que la gente Solamente entra para
aprender sql No claro y minutos van a ver el mejor curso de sql pero no estoy hablando de eso Okay está bien Y
entonces de qué hablas Jo por Dios pero tenés que motivarlos un poquito avivam Elo Dales un poco de motivación contá un
poquito por qué haces este curso así me lo mantenés ahí más pilas Dale es bastante necesario el comentario igual
pero bueno está bien lo voy a intentar en este canal ya hemos hecho varios cursos como el de html El de css El de
javascript El de python y en algún punto todos estos cursos han sido los mejor posicion de la plataforma es decir
buscabas html y saltaba buscabas css y saltaba buscabas javascript y saltaba buscabas python y saltaba de hecho
pueden corroborarlo vayan y búsquenlo 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
agigantados también vamos a hacer un curso de Inteligencia artificial en este canal Así que anda 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 ser el curso que ustedes más me piden es el curso que ustedes más buscan Así que no busquen más acá está F
bastante buena la intro un poco extensa 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 Dale sí sí iba a arrancar con eso y bueno qué s yo te lo digo por las dudas Sí ya está ya entendí ya está te
espero Dale ese qu significa structur query Dale dale explica No queres venir el curso eh No bueno así no se puede yo
me retiro así sí sí retírate por favor vaya vaya Bueno me retiro y encima voy a comprarme esa misma remera que tenés vos
Dale dale buenísimo así así ya puedo comenzar de una vez por todas con el curso Oh y es de la tienda ad alto no
está buenísima andate de una vez yo me voy calmate a quién te comiste Ah qué denso este tipo bueno bueno gente ahora
sí 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 está abalado por empresas que utilizan sql en sus sistemas de hecho muchas de estas empresas son sponsor 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 [Música]
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 entender los 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 skill laboral es completamente necesaria
la parte teórica si realmente queres 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 reg 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 ponemos a
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 el concepto de record 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 vinieron
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 metidito 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 qué joraca es sql bien sql son las siglas de structured quy Language 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 que nos permite trabajar con bases 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 sql no es un lenguaje de programación es
lenguaje de consultas estructuradas no sql 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 es repito 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ío entonces una vez que aprendas sql vas a poder entender todos los demás gestores vas a
saber pogre my siquel la de Oracle to toda la la mayoría de los gestores de bases de datos se manejan 100% por el
estándar entonces ese c lo aprendé Solamente una vez y puedes manejar cualquier gestor de base de datos con
sql server con mysql con po sql con María db 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 la 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 qu lo aprendemos una sola vez y nos sirve para todo o sea no es como que tenés que aprender pogre
y después tenés que aprender my sequel y después tenés 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 Sí fue recibiendo mejoras es lo mismo o sea no es como que no porque me vi un curso de sql ya pasaron 3 años y
me tengo que actualizar No si vos estás viendo este curso dentro de 3 años dentro de 4 años no te vas a tener que
actualizar porque ese ql es el mismo Okay 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 almacenamos en algo llamado bases de datos basadas en archivos donde
agarrábamos un texto plano y separamos los valores que queríamos almacenar con comas con signos y todas técnicas que
nos hacía que sea superfá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 cod 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 ahí aparece sql
que es el lenguaje utilizado para trabajar con ellas sql internamente es meramente álgebra
relacional antes guardábamos 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 a ver la verdad es que si tenemos que guardarla
de forma muy fácil pero es complicada acceder la 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 álgebra relacional no es lo mismo álgebra relacional que relaciones de tablas y demás son cosas diferentes no
lo confundan Pero sí va de la mano esto nos sirve a la hora de escribir código y casi nunca en realidad A menos que
querramos hacer cosas muy específicas de bajo nivel pero está bueno que lo sepamos no que sepamos que sql está
compuesto por álgebra relacional Perdón álgebra 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 hac otras 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 me decí Para qué
sirve me decí y no me decí 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 termino el curso y más o menos qué es lo que voy a poder hacer y esql 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 eh 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 querés hacer un sistema de
gestión no usas solamente sql usas sql y algún lenguaje de programación por ejemplo entonces tenes que aprender sql
y un lenguaje de programación Pero eso eso es obvio en el canal como ya saben tenemos un 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 eh es muy
probable que al final de este curso hagamos un ejercicio mezclando python con 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 las 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 un precio específico también podemos modificar los datos o sea eseq 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 estas 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 digamos 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 pueden realizar transacciones se pueden realizar 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 realización
de cálculos avanzados para combinación de datos múltiples Fuentes para optimización de rendimiento y para para
muchas cosas más Pero normalmente en un programa común lo usamos 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 podés avanzar en el mundo de la programación
informática sin saber sql O sea no podés tenés que aprender sql y lo tenés que aprender Ahora sql tiene conceptos como
por ejemplo variable funciones triers índices entidades atributos Y muchísimas más que bueno lo vamos a ver en este
curso obviamente Así que Esto va a ser así Primero 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 llevándolo a la práctica y después ya
ahí se vienen un par de ejercicios Okay quiero que lo veamos bien porque a veces estuve viendo tantos cursos de esuela y
en todos los cursos es como que uno no termina de entender no por dónde arrancar por Cómo comenzar como que son
intermedio avanzado no hay nada desde cero por eso quiero que arranquemos bien desde cero Okay que 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 okay
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 lo 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 Okay 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 Okay una entidad Es una
representación de algo me explico o sea así como si nosotros dibujá 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 si yo digo entidad persona una entidad persona
no es la persona es una representación de la persona lo que hacemos con las entidades es almacenar información sobre
las entidades en bases 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 de 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 llam notación de Chen y básicamente es una forma de poder representar entidades y sus relaciones
Bueno ahora qué jora que 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 Okay cuando ponemos una palabra y la encerramos en un un cuadrado estamos
diciendo esto es una entidad a ver si estamos fuera de la anotación de Chen es simplemente un dibujo de una palabra
encerrado en un cuadrado medio rancio no pero dentro de la anotació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 esas bien Ahora ya está tenemos a nuestra casa encerrada en un cuadrado Okay pero si yo me pregunto
esto no a ver a qué 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 ambientes 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 con puestos 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 $1,000 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 ambiente a su vez tiene un tamaño y un tipo de ambiente porque un ambiente
puede ser un comedor una habitación no deja ha ser un ambiente puede ser un living y también tiene un tamaño por
ejemplo 50 m cu o unos 40 m cu la forma de representar a los atributos compuestos Es simplemente sacando una
linita 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 Okay 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 de una
casa fácil los ambientes Por qué Porque hay más de uno también las ventanas y también las puertas porque hay más de
una puerta y hay má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 estamos 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 es
simplemente un ejemplo para para que lo puedan entender mejor los atributos derivados los identificamos con un borde
punteado o sea básicamente si saben ccs es literalmente como un Border daset es lo mismo es como es un óvalo con Border
dget es un bordeado punteado bien hasta acá todo bien Okay pero después tenemos algo llamado clave o k en inglés kei no
se lo digo así pues es clave o K Pero hay gente que no entiende que es kei K e i griega y esto básicamente es una forma
única de identificar algo las casas por ejemplo se identifican con el ID de vivienda ya que cuando las registramos
en el Registro de Propiedad tenemos un ID que hace que la casa sea única eso puede ser por ejemplo un atributo las
casas tienen todas una ID 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 ID de vivienda no importa Por más que tengan todo igual eso es
diferente el ID de vivienda si tenemos por ejemplo una entidad personas Okay 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 kei 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ó
eh que se me relaje porque lo cacheteo al micrófono qué mirao un I básicamente es un atributo que le agregamos a una
entidad para identificar que sea único es irrepetible pero como les dije no dejan de ser atributos Okay no dejan de
ser atributos así que tenemos que ar también en un noval por ser un key o una clave la forma de representarlas en la
notació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 anotación de Chen base digamos relaciones y demás incluso también las podemos representar
ya que de hecho la anotación de Chen 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 les podría explicar ahora para
escribir código no es necesario así que por ahora no lo vamos a ver okay 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 viéndolo desde el celular agarrá WhatsApp sacar una foto y andar la parte para editar la
foto para que puedas pintar Okay algo para pintar y vas a poner un cronómetro de 5 minutos Okay te voy a dar un
ejercicio para que puedas hacer te voy dar 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 Ke los otros
tres pueden ser los que quieras y los representamos con la anotación de Chen Okay para arrancar vamos a hacer eso así
que les doy 5 minutos pausen el video y continúen lo una vez que lo tengan listo Dale y va Bueno listo ya está fue
bastante rápido la verdad que para mí duro 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
hobis es un atributo multivalor y el documento de identidad en este caso es el dni es el key ya está 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 y intentad 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 Okay
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 anotació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 multivalor porque tiene más de
una después tenemos la edad okay Y la edad es lo mismo es un atributo derivado Por qué Porque con la fecha de
nacimiento ya podemos saber la edad entonces es un atributo derivado bueno En definitiva nos quedó así pero esto es
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 es decir esto es Interesante como les expliqué por qué más que nada
porque podemos jugar con esto decir Bueno entonces pará Porque si yo me pongo en la fecha de nacimiento tengo
otros tres atributos que son Día mes y año pero no lo importante es ser concisos ser simples y con el tiempo y
cuando lo vayan haciendo le van a agarrar práctica no van a decir ah pero pará para qué voy a poner una fecha de
nacimiento y una edad si puedo poner una de las dos y con lo otro bueno Es depende de lo que quieran hay diferentes
metodologías diferentes necesidades de los diferentes proyectos Pero lo importante es que sepan para Qué usar
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 uno solo y 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 es interesante Cómo 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 anotación y cuando veamos un diagrama de estos y digamos a la O sea qué es esto
podamos entenderlo que cuando estemos trabajando para una empresa o querramos hacer proyectos y armemos el nuestro
propio podamos verlo y digamos Ah okay Ahora entiendo okay esto tiene que estar acá Ah esto es una tabla Ah esto es un
atributo Ah esto y eso es lo ideal así como un programador sabe leer código un desarrollador web sabe leer código html
y css un adores 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 y decimos Ah
entiendo esto y ahora sé cómo llevarlo a código ustedes no saben cómo llevarlo a 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 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é en
nuestro cerebro cuando tengamos que hacer algo y lo podamos entender vamos a encontrar y vamos a saber la forma de
buscarlo Okay Por cierto esta remeras si las quieren las pueden comprar en tienda de alto Okay que les dejo en instagram
eh o sea están bastante buenas así que vayan al Instagram compren lasas y también sígame en instagram soy alto Así
que nada es interesante si me quieren hacer cualquier pregunta cualquier duda y como reconocimiento alto voy te sigo
en 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 antes que antes que se venda así que así 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 Así que ahora sí de una vez por todas arranquemos con el código en este curso
hermoso que Ah me encanta me encanta vamos con el famoso Select me pone super 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 que 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 de interfaz gráfica para que podamos
operar y que se no sea más senillo todo los gestores de bases de datos vienen digamos eh 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 no tenemos
un lugar donde guardar información donde operar la información y con qué información trabajar porque como ya
sabemos sql es un 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 eh 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 qu s 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 mil miles de años y desde anes de la prehistoria que se inventó la escritura que fue la forma en la que
dijimos Che Mira no podemos guardar todo en la memoria inventemos 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
Dónde se guarda la información que vamos a 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 mysql tenemos pogre tenemos
Oracle tenemos sql server en cuál Bueno básicamente a mí se me ocurrió usar sqlite 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 eslite es el sistema de
gestión de bases de datos más común del mundo se utiliza en todos los sistemas operativos populares como Mac os como
Linux como Windows como Android etcétera es compatible con muchísimos lenguajes de programación como python Java c+ má
Ruby javascript y 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 eh digamos sqlite 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 neces
necesitamos instalar nada aparte Esto hace que cuando lo tengamos que usar lo podamos usar de una forma muy fácil sin
necesidad incluso de andar haciendo configuraciones adicionales en el servidor ni nada No eso nos olvidamos y
otra cosa es que incluso Si queremos trabajar con la consola de skite es más poderosa que Excel Y es más simple que
pandas en algunos aspectos no pero es importantísimo esto porque para el análisis de datos es poderosísimo y
Recuerden que en este curso vamos a hacer un curso de justamente Inteligencia artificial entonces me digo
que nos va a servir Y por último porque es simplemente una forma de aprender es decir ahora lo aprendemos con sqlite
pero lo que aprendamos con sqlite lo podemos aplicar a cualquier otro gestor es decir podemos hacer pogre podemos
trabajar con sql server podemos trabajar con con todas las que venimos misionando siempre o sea no es como que aprendemos
solamente skl aprendemos skl y después con lo que aprendemos acá lo podemos usar para todas las demás Esta es
simplemente una de tantas una vez que instalemos site ya vamos a estar listos para bueno empezar a escribir código Así
que ahora sí ya estamos dentro del apartado de código Pero tenía 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á ha quiero hacer un
énfasis porque en Max instala de una forma en Linux se instala de otra forma y en Windows se instala de otra forma yo
les voy a mostrar Cómo se instala en Linux y en Windows bueno en Windows buscamos sqlite 3 literal Vamos a Google
y buscamos sqlite 3 no nos confundamos con los anuncios acá dice anuncio acá dice sqlite.org la página oficial Okay
sqlite.org fácil y acá Okay podemos darle en Download cuando le damos en Download se nos va a abrir esto que está
acá tenemos que ir a donde dice precompiled binaries for Windows por qué porque tenemos una para Mac una para
Linux una para Android en este caso tenemos que instalar las Tools okay 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 en carpeta tengo Esto del curso de python que lo hicimos que si quieren
ir a verlo 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 okay simplemente
copiarlo venir a la base del disco acá y crear una nueva carpeta yo le 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 van a sqlite 3 y en acá no más tipo le dan botón
derecho vieron que le da 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 powershell Okay 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 sql 3
y ya estoy en esta carpeta literalmente estoy en la carpeta de acá Okay pero nada en algunos Windows si ustedes
vienen acá y le dan botón derecho automáticamente dice abrir en terminal o correr con powershell entonces en vez de
hacer todo lo que acabo de hacer recién se les Abre directamente pero nada esta es una forma muy común sirve con cmd sí
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 esq ya lo podemos hacer podemos venir y poner punto barra sqlite 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 es.exe o sea si yo quiero abrir 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 create
database dalto y se crea la base de datos dalto 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 es 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á Okay si se fíjense si están en Windows cuando ustedes apretan 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 a Windows
Che Mira Quiero poder acceder a esta consola de cualquier lugar o sea sin importar En dónde 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 de 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 boludes si entran acá y buscan variables le va a saltar esto editar variables
dentro el sistema lo abren okay 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 pat doble clic y se nos va esto que está acá otra vez los mosquitos otra vez
arrancan los mosquitos lo voy a matar esto que está acá justamente son eh rutas locales a
las que podemos acceder desde cualquier carpeta entonces lo que vamos a hacer a hacer darle nuevo y darle control B
corta para pegar la ruta le damos aceptar aceptar y aceptar ya está ahora podemos acceder a estos archivos de
cualquier lugar esto ya es espectacular hac 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 skite browser buscan esto que es
como el navegador de sqlite y está acá lo mismo sqlitebrowser.org en Download van a descargarse Okay el standard
Installer como yo ya me lo descargué no me lo voy a descargar nada un chiste yo saben que siempre me descargo las cosas
con ustedes Así que vamos y nos lo descargamos juntos Okay yo no los 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á abrimos con
mci se va a abrir Esperamos que se abra ve que tarde Un poco quiere que lo cacheteo el sistema ahí se abrió le
damos en next aceptamos next yo quiero que se ponga en el escritorio Así que le voy a dar clic acá y next next instal y
se está instalando Sí claro que quiero que genere cambios si estoy haciendo un curso de sql maestro cómo me va 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 arar en el escritorio lo tenemos en el escritorio Okay 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 en Linux bueno yao AC estoy usando una distribución de ubuntu Okay pero
básicamente usamos lo de siempre el sudo apt instal en este caso ponemos sqlite 3 y ahora bueno se va a instalar todo
Bueno hasta acá ya estamos bien ahora tenemos que instalar el browser okay Así que vamos a instalarlo es muy simple
instalarlo lo mismo sudo apt install sqlite browser bueno Ah si termina de instalar este error puede saltar es
común pero la solución a este error es esto que está acá es poner esto y ya estamos listo ahora sí ya tenemos div
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 Okay
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 ese proceso más fácil así que cada vez que se traben con
un punto que digan Uy la verdad que Uy se me complica esto no puedo avanzar búsquenlo en otro lado porque es muy
común cuando uno toma cursos trabarse y sería una pena que no puedan adquirir todos los conocimientos que se brindan
en los cursos por no hacer proceso de instalación pasa mucho eh pasan muchos cursos que 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 a veces 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 eh aprender que 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 Ah
dato de interés si alguien dice sql se refiere a sql okay Pero simplemente hay gente que le cuesta un poco hablar
entonces dicen medio que sí Bueno en realidad lo que pasa es que antes la primera versión de sql era sequel
structured english query Language 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ó structur Language y ahí quedó sql
así que sql squel o sql son los términos para los que uno sefa sql bueno dije con el código y me puse a explicar más cosas
Bueno no importa vamos a abrir primero y principal el D browser de sql bueno para arrancar vamos a poner en edit
preference y vamos a 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 la 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 javascript y
nos lo muestran de forma gráfica Esto es lo mismo esto interpreta lo que la base de datos sqlite almacena la estructura y
toda la información para abin darnos esta interfaz además de otras cosas que les agreg para poder operarla no para
arrancar tenemos que crear una base de datos normalmente para crear una base de datos utilizamos la consulta voy ir al
bloc de notas sí soy medio enfermo pero no importa create database usuarios o la base de datos dalto 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 db porque
la extensión pun db le da entender a este browser que estamos trabajando con bases de datos no no me dejó guardarla
acá Así que lo voy a tener 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 Qué 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 les expliquemos una tabla es una estructura de datos que se
organiza en filas y columnas es de es decir un tablero de ajedrez podría ser una tabla porque tiene filas y columnas
las filas están enumeradas como 8 7 6 y las columnas como a b c d una tabla periódica es una tabla porque tiene
filas y tiene columnas eso básicamente son las tablas Son estructuras de 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ías y
dirí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 Esas filas y columnas almacenan información almacenan algo
llamado Campos el campo es el nombre de la columna me explico es como en Excel vieron que en Excel arriba de todo
ponemos el primer campo bueno eso sería como el el el nombre entero de la columna acá encontré un pedazo de
ejemplo para trabajarla si se fijan arriba hay 1 2 3 4 5 6 esto sería el campo el campo acá es uno y uno tiene
estos datos el campo dos tiene todos estos datos Estos son columnas solamente que en en sql las columnas las llamamos
en pases de datos en realidad las bas las columnas las llamamos Campos en este caso si yo te digo por ejemplo eh
mostrame el tercer registro y decme lo que tiene el campo dos y me va a mostrar esto que está acá que dice -7x - 4 = 17
Entonces ya entendimos lo que es un campo un campo es eso un campo es una columna básicamente pero a su vez hablé
del registro Qué es un registro Bueno un registro es una fila así como esto es un campo okay 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 dos Qué es el registro dos y el registro dos contiene la información del
campo uno del campo dos del campo 3es del campo cuatro del campo 5co y del campo seis 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
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 campo ahí tenemos otro concepto esto que está acá viene siendo el valor del campo o sea cada celda
individual cada cuadradito de 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 record esto que está acá
básicamente es como se dice en inglés lo que está al lado y y valor de campo Entonces ya sabemos que una tabla es una
estructura de datos que se organiza en 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 a cualquier cosa Esto es lo
mismo el campo usuario puede ser igual a soy dalto igual a patrix igual a lo que sea entonces está el campo y el valor
del campo cada uno de los cuadritos que tenemos acá es el valor del campo Cuál es el campo y cinco 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árselo
pero lo de consulta lo vamos a ver ahora en breve ahora tenemos que crear cada uno de los campos Bueno vamos a crearlos
el primero se va a llamar nombre Okay Uy acá tenemos otro problema integrer qué es esto Qué opciones me está tirando PK
a la u default check nn A qué significa to esto ya ya estoy colapsando Okay despreocúpese 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 textoo si yo
tengo un campo edad nos va a pedir un número entonces son datos diferentes que tenemos que almacenar si yo tengo un
campo fecha va a almacenar algo 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 Okay
tenemos integer que es como entero text que es texto blob que es como una especie de archivo que almacena imágenes
fotos videos etcétera real que es para matemáticas y numeric que es para matemáticas precisas ahora vamos a ver
bien cada uno integrer esto es como si quisiéramos almacenar un número cualquiera Okay 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 integr es 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
estamos los otros tres que son importantes uno es blob blob almacena datos binarios Okay es decir trabajamos
con blob cuando queremos guardar archivos imágenes fotos videos y todo lo que sea binario después real es como
para almacenar float real es como si fuera float o datos flotantes qué jorak es esto los valores con coma si yo tengo
que 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 eh 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 ya almacena números con coma eh 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 eh 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 Okay 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 con numeric 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 guardá pi en
numeric con Real vamos a tener mucha menos precisión que con numeric esa es la idea Pero esto es un dato de valor
que les puedo decir es que sqlite trabaja con eh 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 texto en números eh archivos binarios en donde sea por qué Porque es de tipo Dinámico o sea lo
que insertemos hace que la columna se transforme en eso o por lo menos ese ese ese valor de campo específico si 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 por qué
es esto porque skite es uno de los pocos que lo 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 skite lo permite hay una forma de sacar esto en esq light pero no lo vamos a ver porque
ya es complejizar 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 del 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 eh 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
Mohamed 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 Ke que es para clave primaria tenemos ahí que es autoincrement eh este que está acá es
not nul pero lo vamos a explicar a medida que vayamos avanzando el curso porque no quiero cargarlos con tanta
información Okay por ahora nos quedamos con esto vamos aer 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 un número entonces lo dejamos en integr y por
ahora estos son los datos con los que vamos a trabajar okay nombre apellido edad 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 segir haciendo acá si
se fijan va modificándolo si yo toco esto acá me lo cambia si yo le cambio el nombre de la columna me la cambia
apellido ooh me la cambia por qué 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 edad con los
campos de eh tipo de dato texto texto e int Bueno te creo un código para que vos lo puedas ejecutar y ejecutes lo que vos
querés es como una especie de gestor que nos permite que nosotros en vez de escribir el código lo hagamos de una
forma más 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 okay Y ahí ya se acaba de
crear la tabla no parece Pero tenemos una tabla acá la podemos ver que dice users users tiene nombre apellido y edad
hasta acá 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 primer consulta de todas las que vamos a hacer vamos a 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 query o una consulta es lo mismo query
es consulta inglés es hacer una consulta a una base de datos es decir es preguntarle o pedir la información a una
base de datos dec una búsqueda en una base de datos sirven para eso justamente sirven para obtener información que está
almacenada en 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 caracter universal para hacer referencia a 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 selecci me todo selecci me todo
from Okay from 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 iba a volver un poco loco le di acá en edit preferences y básicamente
esto lo cambié a 10 esto que está acá lo puse como 14 que es esto que están viendo ahora el Data browser lo dejé en
12 esto lo cambié 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 escriba acá ustedes 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 users Okay la
estructura de esto es lo siguiente Select es justamente la sentencia que nos permite seleccionar algo okay el
asterisco es el El selectur 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 nos dice ejecución finalizada sin errores perfecto tardo 5 mil segundos y
nos resultó o sea nos retornó 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 realizarlo cómo se hace en
insert bueno en insert básicamente se pone insert into okay insert into acá va 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 tupla 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 en
español entonces hay una falta de congruencia lo correcto es sería modificar tabla y poner usuarios
usuarios Entonces ahí sí tenemos esto correcto ahora Yo acá le voy a dar insert into usuarios okay Y acá tenemos
Ahora sí usuarios por qué porque esto es una falta de congruencia porque tengo un nombre en inglés y todo lo demás en
español e todo en inglés o todo en español mi recomendaciones hacerlo en inglés pero nada Ahora como es un
tutorial y quiero que ustedes lo entiendan bien Vamos a trabajarlo en español okay 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 escribirlo en chino ni yo sé escribir chino Bueno entonces lo que hacemos acá
decir le Che mira insertamos en la tabla usuarios Okay 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 tupla 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 es como si tuviera 21 cumplo en realidad en en dos
meses pero pongo 21 Entonces si esto lo ejecutada exitosamente acá me dice que la consulta se 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 consulta es una consulta porque cualquier operación que realicemos con sql como un insert Okay
es una consulta Si queremos modificar la información de la base de datos es una consulta esto es un concepto que al
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 query el query es justamente como una especie de 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 laz normalmente las consultas se utilizan para algo llamado crud que es create read update delate 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 la información update o sea actualizarla modificarla y delete la d te eliminarla entonces todas esas cosas
se consideran consultas Bueno ahora ya 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 Ah
ahora me acaba de devolver 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 para vamos a hacer de
vuelta vamos a registrar más datos voy a poner Pedro jorgelin 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
entado identar 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 y Álvarez y le voy a dar 16 acá voy a
poner 52 este se va a llamar Roberto Tito Roberto ya sabemos la historia de los robertos en este canal y le saco la
coma qué es lo que estoy haciendo acá estoy diciendo Che Mira fíjate insert Me Okay 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 eh varios insert en realidad es 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 no me di cuenta
les 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 sí 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 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 el número de Registro registro uno registro 2 registro 3 registro cuatro y no se
acaban de dar cuenta pero hasta esta altura acabamos de crear una base de datos crear una tabla de usuario 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 campo valor de campo registro y consulta que lo vamos a
marcar ahora nos falta identifiers 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 ahí más o menos aumentó un poco la letra de todo eh Para que más o menos lo puedan ver bien eh pero nada por las
dudas No a mí no me han dicho varias veces en los cursos que algunos tienen comp chiquititas y demás Así que nada
por eso por las dudas lo aument 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 acá por ahora bien no está de más Resaltar que cada consulta okay
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 Por qué Porque si yo le digo acá selecci me el nombre Esto me va a
seleccionar solamente el nombre Entonces esto es simplemente una tabla nueva no es una tabla original yo digo seleccion
el nombre y la edad Esto me selecciona el nombre y la edad yo que me seleccion el nombre el apellido y la edad esto
solamente estos datos apellido y edad me selecciona el apellido y la edad apa esta no la tenían Eh sí si se
emocionaron y dijeron Ah dale un like a este video si no lo hiciste Dáselo también de esta forma estamos
seleccionando algunos Campos Entonces si queremos seleccionar un campo lo seleccionamos así Si queremos
seleccionar dos Campos lo 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 Por qué 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 como solamente como que vamos uniendo Los Cabos Y a lo largo del curso
van a ir uniendo un montón más de Cabos ya que de esto se trata el mundo de los datos y de las bases de datos y de todo
este mundo que es hermoso ahora vamos a ver bien este concepto de identifiers identificadores en este caso llaves
primarias específicamente porque tenemos las llaves eh foráneas Y las llaves primarias que son diferentes tipos de
formas de identificar algo Hay mucha teoría al respecto Okay yo 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 no vamos a ver bien eso de foren Kiss pero sí vamos a entender Cómo funcionan los identificadores okay
Así que vamos con 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 vienen 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 voan a solucionar pero ahora les voy a plantear un problema mucho más gráfico
para que lo entiendan mejor supongamos que yo vengo acá Okay a brose Data Yo acá tranquilamente podría darle en donde
dice insert a New record in current Table y yo le doy acá y acá por defecto los valores se me ponen nulos Okay pero
yo acá puedo escribir y poner por ejemplo Lucas dalto y acá pongo 21 entonces de esta forma yo acabo de
registrar un dato un 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 si yo esto lo registro listo dice que se registró correctamente y el dato se insertó el registro se insertó vengo a
la estructura y si vengo a brows 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 Pero en cuanto al metadatos ese numerito que está acá no existe esto es
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 primary Keys o los foring Keys los foring Keys son las
claves que hacen referencia a una primaria de otra tabla pero no no vamos aar 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 database structure usuarios Ahora sí botón derecho y modify Table vamos a venir acá
y acá tenemos la tabla como antes okay lo que tenemos que hacer acá vamos a darle add de vuelta vamos a venir un
poquito más para abajo para que puedan ver esto que estamos haciendo completamente y voy a cliquear acá y voy
a darle move 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 este
identificador si se fijan cuando yo le doy en auto increment 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 Okay okay Y voy a venir acá y simplemente
fíjense que está en nul Así que lo que vamos a hacer es venir a execute sql y Eliminar todos los registros cómo los
eliminamos bueno delete todo from usuarios de esta forma eliminamos todos los registros 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
autoincrement por qué Porque si le pongo Auto vamos a entender qué es lo que acaba de
pasar recién el auto increment es una propiedad de las claves primarias en este caso fíjense que se marcó
automáticamente la opción de primary key Por qué Porque es una 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 primar ki 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 eh poner la opción de autoincrement porque para que sea autoincrementable debe ser
primary Ke De hecho si yo la saco no me lo deja tiene que ser auto increment y primary Ke juntas de hecho le puedo
sacar el auto increment puedo sacarle el autoincrement a la primary Key pero no puedo sacarle el primary key al
autoincrement eso es bastante loco Esto es para que cada registro sea único O sea no voy a a poder registrar esto de
forma duplicada el ID va a ser único y cada registro va a tener un ID diferente entonces cada registro va a poder
identificarse de alguna forma además sql 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 primary Ke 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 si yo ahora le doy en Okay okay Y modifico
esta tabla fíjense Qué pasa si yo ahora de repente si yo le doy en add New record ya el primer registro Aunque
todos los demás Campos estén nul este ya agregó con un uno le doy otro registro ahora Este es un dos le doy otro y este
es un tres le doy otro y este es un cuatro por qué porque tiene el la propiedad de autoincrement para que cada
valor sea autoincrementable 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 C values Lucas dalto 21 voy a copiar esta consulta okay 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 esta 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 Entonces le damos insertar y ahí nos muestra Primero insertamos este dato y
yo voy a intentar hacerlo de vuelta Ah 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 un ID de usuario 5 otro tiene un 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 ID de
usuario puede ser como el username vieron que en instagram solamente pueden poner un username si ustedes buscan
soyto en instagram voy a saltar Solamente yo y nadie más porque soy de alto solamente hay uno no hay más soy de
alto todos los demás son falsos va no es que son falsos sino que tienen otro username por qué Porque el username es
de uno único y no puede haber otro igual sí 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 un ID que nos identifica a cada usuario esto
es excelente esto 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áneas ahora por qué
estoy mencionando tanto esta palabra foránea clave foreing Qué es foreing 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 identifier o un ID Perfecto es lo que es como un campo específico o sea un identifier un
identifier 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 Okay es un campo especial
que nos 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 metern 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 nul por
eso eh No me dejaba poner las esta columna como auto incrementable por qué 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 los valores nulos para cada registro es un valor nulo cuando lo queremos hacer
autoincrementable no vamos a poder auto incrementarlo por qué Porque si lo hacemos autoincrementable 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 Espero que ahora más o menos vayamos uniendo Cabos y entendiendo Esto bueno ahora sí voy a
hacer eh algo que es Eliminar todo todos los 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 remove Ahí va y le doy acá y voy a rellenar estos Campos para que
hagamos otro ejercicio a continuación Así que Aguánteme un segundo que reeno los campos y
[Música] continuamos Bueno ahí los modifiqué y ahí tenemos una base de datos con Bueno
un una tabla de usuarios que tiene nombre apellido edad y un identificador para C usuario perfecto hasta ahí
estamos bien esta tabla que está acá eh olvídense se creó automáticamente pero es como que no no la podemos eliminar
Así que des preocúpense eh vamos a crear otra tabla Okay Vamos a darle create Table y esta 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 no 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 ID diferente si yo por ejemplo te digo sí
Mira vine 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 diagnosticas 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 decme el ID del turno así yo busco el
numerito del turno y puedo entender todo lo que vimos y todo lo que su só en esa consulta Entonces el ID de turno nos va
a identificar específicamente este turno Y va a ser un in va a ser autoincrementable 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 eh 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
usuari 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
Ahí va Vamos a estirar un poquito para que se vea más Ahí va bueno Y por último voy a agregar un campo que va a ser
motivo motivo va a ser texto y vamos a agregar uno más que va a ser horario por ejemplo y va a ser también texto ahí
tenemos una tabla Okay con cinco Campos ID de turno profesional ID 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 brow Data vamos a venir a execute acá
Bueno y 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 voy a tirar para un costado para que no nos moleste acá 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 el a ver mi
ID de usuario era el 6 si no me equivoco Así que voy a ponerme se el motivo va a ser dolor de panza por ejemplo y el
horario va ser a las a las 12:30 del mediodía técnicamente registro esto okay vamos a seleccionar esto ejecuto y ahí
me acaba de decir listo hay un registro Okay 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 1 2 3 cu 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 TR por dolor de cabeza por ejemplo a las 11:30
Entonces ejecuto esto y ahí me muestra todos los regitros Ah perdón me olvidé el punto y coma Ahí va Ahora sí lo
ejecutamos y acá tenemos Esto bueno qué está 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 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 está mostrando las 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án mostrando acá es son cosas que básicamente no podemos unir para esto se
tiene que utilizar un join que después vamos a sa ver bien qu es un join Y estos son los tipos de problemas que
surgen Por qué por qué yo querría Mostrar las dos tablas Y fácil si yo muestro turnos médicos tengo tres turnos
que se registraron Okay tengo tres turnos registrados uno tiene el ID de usuario 6is si yo quiero saber quién
es mi cliente mi paciente tengo que hacer esto tengo que venir y poner usuarios Buscar a ver cuál es el seis Ah
Acá está el seis Okay Lucas dalto fue atendido bueno a ver vamos a ver quién más fue atendido turno médico ejecutamos
el siguiente fue el id3 Bueno vamos a usuarios de vuelta a ver a quién ha Atendió después el id3 Martina Okay
atendió a Martina Acosta porque el ID de usuario 3 es el de Martina Acosta turno médicos ejecutamos Ah la Atendió de
vuelta a Martina 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 a qué hace referencia este ID 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á Okay esta que está acá es la PK Porque así es como
esul light abrevia las claves primarias de hecho así se abrevia las claves primarias con PK PK significa 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 Cómo hace la tabla usuarios para identificar a cada usuario y por el ID de usuario perfecto
estamos todo bien Ahora esto que está acá está esta este campo de Acá no está haciendo referencia a ninguna clave
primaria ni identificar porque las claves primarias no se pueden repetir y acá Se repitió Por qué 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 un 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 clave secundaria de esto entonces
técnicamente ID de usuario es una clave foránea o sea un forin key en este caso se escribe así for
key en este caso es una clave foránea por qué Porque este ID Okay este ID está haciendo referencia a estos Campos El
Seis hace referencia al seis y el tres hace referencia al tres 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 un paciente
que vino por dolor de panza y que estuvo a las 12:30 Quién es este paciente bueno el ID de usuario 6 Okay acá lo buscamos
el ID de usuario 6 es Lucas de alto y tiene 21 años Este es el poder de las cl foráneas El problema es que rinden menos
O sea no son siempre muy eficientes pero en algunos casos son necesarias porque si no hay otra forma de hacer referencia
esto se puede validar en la en la aplicación o se puede validar directamente en la tabla como tal pero
eso ya no nos vamos a meter porque son otro tipo de temas eh 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 podría ser una clave foránea si no estuvieras haciendo
referencia a una clave primaria de otra tabla Esa es la definición Entonces vamos a poner acá las definiciones con
la primary Ke identificamos un registro entero para que cada registro se vuelva único y con las foring Keys o las claves
foráneas lo que hacemos Es hacer referencia a una primar Ke o sea una clave primaria de otra tabla en este
caso a qué está haciendo referencia eh ID de usuario y a ID de 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 eh 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 al ID 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 a algún tutorial y búsquenla porque Obviamente no voy a ponerme a explicar 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 Okay la gente no es perfecta y no
siempre entiende la primera vez aunque intente 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
Busca algún otro video que te explique específicamente esto no te vayas otro curso eh eso no no no seas p no No seas
hijo de no no Quédate perdiendo en este curso pero específicamente esto si te llega a costar o lo que te haya
costado buscalo en algún otro lugar tenés chat gpt también para sacarte las dudas De hecho acá la no probaste
con chat gpt 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 Okay 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 Okay una tabla llamada turnos médicos que tiene un 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 lo vamos a aggar 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 ID usuario
tiene un nombre tiene un apellido y tiene una edad estos Campos pertenecen a estas tablas si yo quisiera
relacionarlas Cómo haríamos bueno las tablas se relacionan por las foreign Keys o sea por las claves foráneas si yo
quisiera relacionar estas tablas simplemente hago esto el ID de usuario pasa a ser la foreign Key de turnos
médicos porque hace referencia a la primary Key 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
Dr Ramírez el ID de usuario es se el motivo es dolor dolor de panza por ejemplo o dolor y el horario es
1230 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 seis 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 el id6 se llama Lucas tiene
apellido de alto y tiene 21 años Esos son los datos del usuario con el d6 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 seis vamos a chequearlo
cuando vamos al ID 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 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 toqué el micrófono perdón pero En
definitiva van a ver su importancia cuando la 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 y 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 northwind si venimos acá y
buscamos base de datos northwind vamos 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 okay 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 ser 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 es una forma en la que relacionamos bueno no es el modelo relacionar como tal pero es una una forma de en diagrama
utilizando el modelo relacionar relacionar bases de datos esto que AC 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 un lo que pasa es que sí desde el curso de python ustedes vieron que no paré de
sufrir por el calor y cómo chorreaba y ahora no estoy sufriendo porque tengo un a acondicionado de 6,000 frigorías
enfrente y básic mente 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 eh estos últimos 20 minutos habrán sido quizás un poco menos no no sé no lo edité todavía
el video lo van a ver ustedes editado pero yo 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 yo me voy a encargar de 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 deje de estar
disponible Yo mismo me 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 norwin sqlite y nos va a saltar todo esto que está acá qué joraca es esto bueno Esto que está acá es un
código la í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 sí lo interpreta pero lo ignora Así
que vamos a copiar desde acá vamos a bajar 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 nth Wind db
Me faltó una H acá Ahí va y la guardamos esta que ya tenemos ahora de usuario pun db la vamos a guardar para que nos quede
recuerdo y acá nos pide que creemos algo Yo acá como me salta esto voy a cerrarlo no quiero ninguna tabla lo que voy a
hacer Ya estoy en norwind db Por más que me salte esto que está acá estoy en norwind deb lo podemos verificar con el
archivo que tengo acá arriba voy a darle cont control V corta 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 Esperamos que se termine de
ejecutar Ah bueno tarda listo acá me dice que la ejecución finalizó sin errores y ya estamos listos De hecho si
ahora vamos a brow 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 Okay no encontró ninguna amenaza fantástico
Windows defender me pone rec contento la verdad y bueno tenemos esite sequence que esto no es nuestro ya es algo
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 es algo que es un diagrama y ese diagrama nos permite entender cómo se
relaciona una tabla con la otra Y como por ejemplo este employee ID este category ID este product ID eh 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 northwind nos va a llevar a esto que
está acá que es el diagrama lo que yo voy a hacer es abrir esta imagen Mejor dicho en una nueva pestaña y acá tengo
la imagen okay 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 Okay las relaciones y cómo
estos datos se relacionan entre sí bueno para empezar tenemos la tabla principal que es customers okay Y acá básicamente
tenemos algo que se llama un 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 país 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 es su ciudad postal code que es su código postal y el comp o 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 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 de 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 employe ID que en este caso 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 employe ID Por qué Porque es una forma es es
otra foreign key que hace referencia a esta tabla nueva que es employees 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 o sea el envío el ID
de envío en este caso Qué sería shipper bueno shiper 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 quién 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 customer ID 5 Ah okay A ver quién es el C id5 y tengo todos los
datos del customer a su vez Quién es el el que vendió esto y lo vendió Y tenemos el nombre de la persona que lo vendió el
apell todos 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 shipper ID el shipper 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 con otra tabla que es los
detalles de la orden el primer campo es una clave primaria que nos indica bueno el orden detail ID perfecto listo es el
detalle de la orden nos pide el order ID que hace referencia a la clave primaria order ID En definitiva es una clave
foránea o sea order ID es una clave foránea de order details que hace referencia a la clave primaria order ID
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ó siete listo siete y el product ID que en este caso es Qué
producto compró bueno el product ID es siete Okay a ver el id7 listo el producto con el id7 tiene un nombre un
proveedor quién nos provee ese producto una categoría unit que es la cantidad de unidades que tiene y price que es el
precio a su vez después tenemos su Play ID ya tenemos proveedores supónganse que este este product ID tiene un supplier 7
por ejemplo listo a ver quién es el supplier 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 category ID 3 a ver cuál es el categoría id3 y el categoría id3 tiene un nombre y una descripción puede
ser por ejemplo no sé que yo 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
almacenan 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 necesiten 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 busco en 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 la asigno a una empresa que se encarga de repartir ese envío y tengo todos los
datos de esa 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 es solamente código porque técnicamente sí sql Si queremos lo vamos hacer solamente
código Pero de nada nos sirve si la teoría no está bien aplicada porque si esto fuera un desastre no podríamos
acceder bien a los datos No tendríamos un orden no entenderíamos nada de lo que estamos leyendo y trabajar con sql Sería
mucho más complicado por eso esta parte teórica es super 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 mirate algún video que lo explique Okay pero no sigas después mirando este video si no entendiste esto
mírate otro video que te explique lo mismo pero volvé al principio del video donde te arranco a explicar lo que son
los identificadores volví hast ese punto del video te aseguro te aseguro que si esta parte la ves dos veces la vas a
entender O sea si no entendiste mucho hasta este punto del video 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 ahora las volvés a ver vas a decir ah te lo aseguro Así que si no retroceda el apartado de
identificadores y volví a ver el video 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
dalto 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ás 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 esto voy a borrar esta consulta que había hecho antes y voy a hacer un
Select un Select simple con Select from employees 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 Por qué 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 por qué 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 eh dalto 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 al programa le digo la imagen
es y le paso 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 backend eso nada esto ya es término para cuando
trabajemos con lenguaje de programación y con sql Lo mezclemos eh 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 emploe 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 que en español se traduce como apellido pero a veces me confunde
no a veces veo Last name y me confunde si es el caso te recomendaría ir a un psicólogo no y después a la escuela para
aprender inglés básico no se ofenden Es un chiste que te cacheteo si te me ofendes pero la segunda opción que no
pueda cambiarlo y seas un tipo sin como como iglesia abandonada no no no tiene cura merezco me merezco lo peor Bueno
cómo hacemos para darle otro nombre a las columnas y fácil podemos venir acá a la estructura de la base de datos acá
tenemos las tablas vengo a employees 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 Cómo hago eso con la cláusula as si yo
selecciono el Last name si yo acá lo ejecuto me va a ver ver solamente el Last name pero ahora yo le voy a dar
Last name as apellido entonces 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 employees es Last name Acá está 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 1 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 Entonces 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 devuelva el nombre y después el apellido pongo primero esto y después
Esto entonces lo ejecuto y ahí va me devuelve primero el nombre y después el apellido entonces Está bueno viste
porque podemos jugar un poco con esto y ese cuel Entiende 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 supónganse
que tenemos una tabla llamada no sé jdc 532 eso no debería pasar Okay no debería pasar pero a veces en sistemas
automáticos y existen casos en los que a veces sí tenemos nombres que son muy poco intuitivos y y complicados de leer
Entonces si hay un campo llamado nj4 y hace referencia al nombre de una tabla de no sé qué le ponemos
nj4 a nombre Entonces yo 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 sql 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 product product Ahí va y lo ejecutamos fíjense que product tiene un precio Okay 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 dos lo ejecuto y me devuelve lo mismo fíjese que en vez de 18 me
devuelve 36 antes me devolvía 18 y ahora me devuelve 36 si se preguntan Cómo hago para ir para atrás y para delante es
aprieto 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 renombrar 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 coma price por 2 a precio doble lo ejecuto y me devuelve el precio original y ahora me devuelve el precio
doble Por qué Porque primero le digo Che seleccion me el precio y después seleccion el precio multiplicalo por dos
y cambiar el nombre a precio doble esto en la tabla products entonces Prim devuel primero el precio que está acá y
después el precio doble que es igual a esta operación esto es bastante loco de hecho podemos solamente decirle price y
se ejecuta también pero es raro normalment 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 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 la utilidad de as con el tiempo solamente quiero que sepan que
pueden usar as para hacer referencia a una columna con otro nombre es decir le cambiamos el nombre a la columna En
otras palabras bien ahora tenemos un problema mayor Select from products Okay 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 autoincrementable entonces cada registro
va a tener un 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 seleccion ionar 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 precio arranquen desde el que menos precio 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
byy vamos a venir abajo y usar order byy order by es una cláusula que nos permite utilizar diferentes filtros para ordenar
en este caso quiero ordenarlo por price Okay por price Pero si 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 J toost que no sé queé 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 estos pró
vale 2,5 es el producto que menos vale Y solamente de 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 en el rendimiento es de un 1% y ese 1% representa $1 en ahorro de recursos no vamos a pagar un
desarrollador para que me haga el mejor sistema del mundo que mejora Un 3% y que ese 3% sea $3 por mes estamos gastando
3000 por mes para mejorar un sistema que me genera $3 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 sí hay cosas que que consume muchos recursos qu podemos evitar no te estoy hablando de
hacer un porcentaje de mejora del 2% Aunque suma Porque si hacemos 10 mejoras del 2% terminamos mejorando un 20 pico
por 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 nada es 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 okay 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 me los está ordenando de forma descendente o sea el más alto al principio y el más bajo al final ahora
dice que el ahora fíjense que el primer resultado que me tira es coché de bl que no sé qué jora casera Pero vale 263 Y
tiene el product ID 38 Ahora qué pasa si yo por ejemplo en vez de ordenar por precio quiero ordenar por product name
si lo ejecuto cómo 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 okay Y
esto funciona así vamos a ir a Paint nuevamente primero okay Lo que menos valor tiene son los nul Esto es lo que
menos vale cuando usamos order by algo de forma ascendente el valor más bajo es nul O sea que ahora nos muestra la a
pero si no nos mostraría un nul después le siguen los números o sea que si no hay nulos después vienen los números o
sea se ordena por los números de mayor a menor del 0 al 9 cuando termina el nu 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 nul 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 ordenándolos 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 los caracteres especiales
después los números y por último los nulos los nuls al final nada tienen que ir probando y con el tiempo van ir
agarrando la cancha 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 agregar nosotros estábamos en productos Vamos a
darle en insert a New record y se acaba de insertar este dato y me tiró datos nulos así que bueno vamos a chequearlo
venimos acá lo ejecutamos y primero se muestra nulo Por qué Porque está de forma ascendente lo que menos vale Hasta
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 con descendente con el desk nos lo muestra al final hasta acá ya
está pero qué pasa si yo quiero que igual en as me muestre los nuls 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 si agrega
el nuls Last esto le está diciendo a la a la es 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 nuls
First lo tenemos que utilizar con desk Por qué Porque desk si le sacáramos el null First no nos mostraría los nulos
primero nos lo mostraría al final pero si se lo pusiéramos aparecen primero O sea nuls First básicamente es como para
usarlo con desk y nuls 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 1000 cosas pueden ordenarse de 1000 formas diferentes pero
los números los ponemos al principio O los ponemos al final esto no sirve incluso sin ordenarlo 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 el resultado 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 cambia el orden de vuelta
actualizo me cambio el orden de vuelta y cada vez que actualice me lo va a cambiar por qué porque esto es
completamente aleatorio entonces me lo ordena como quiere est está bueno cuando queremos obtener eh datos que están
desordenados para después 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 Okay es una buena función es interesante repito si hay una forma de usar nulls y
manejar los nuls con Random pero no quiero mezclarlos tanto es una boludez así que entiendan que está buena est
esta función Random que nos permite ordenar de forma aleatoria de hecho podemos ordenar por dos Campos esa es
otra función interesante yo puedo decir Bueno vamos a ordenarlo por product name acá lo ordeno y además por product o por
supplier ID Ahí va supplier ID Entonces yo lo actualizo y fíjense que me lo está ordenando por product name De hecho yo
AC voy a poner des descendiente pero yo voy a venir a brow Data y agregar algunos récord más 1 2s 3 acá a su
Player ID le voy a poner ocho a este le voy a poner un nueve un cu y a 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 todos nulos no sabemos cuál poner primero y del mayor al menor porque le dijimos des si
yo le pasara ascendente me lo sí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 ordenalos por este campo okay del menor al mayor también lo
podríamos ordenar por ejemplo por product ID entonces acá están los ordené y ahora va por producto ID 78 79 80 81
también puede ser de forma descendente 81 80 79 78 17 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 filtram elos por
otra cosa y es como podemos jugar un poco en esto los recomiendo que prueben que jueguen que ahora se pongan a hacer
consultas con la base de datos no actualicen datos no los modifiquen ni los eliminen porque vamos a trabajar
entonces Si ustedes lo hacen Eh después como que les va a afectar un poquito lo que hagan cuando están trabajando con
con este curso eh pero pueden jugar un poco hagan consultas Select y prueben seleccionar cosas eh ver qué es lo que
salta Los invito okay Los invito eh Porque es lo lo lo más práctico y lo más lindo así que vayan a hacerlo no es tan
lindo como tu hermana pero bueno tampoco se puede pedir mucho No tranqui ya sé que no tenés hermana pero des preocupate
no pasa nada si quieres te puedo hacer una mañana no hay problema después también podemos borrar eh la filas eh
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 se saben los últimos registros están nulos Pero si yo
le dijera distinct product name esta cláusula distinct se selecciona se escribe Perdón después del Select Por
qué Porque Che Mira seleccion 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 Quiero un product name de cada cosa si
hay más de un product name resumil porque De qué me sirve saber que tengo un Alice muton un Alice muton un alis
muton no el producto es Alice muton 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 es esta
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 order utilizando la
cláusula order by y así a su vez estamos mezclando distinct con order by Así que está bueno porque de esta forma estamos
como mezclando de a poquito todo lo que venimos aprendiendo ya supimos selec ionar una columna eliminando datos
duplicados Y encima ordenándoles de diferentes formas así que me pone contento esto la verdad que viene
avanzando bastante bien porque a ver sí 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
offset y fetch para paginar 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 condicion no el Case condiciones porque en sql obviamente al ser un lenguaje de
programación tenemos condiciones Si yo por ejemplo quisiera seleccionar vengo acá br Data 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 viendolo sé que
es tofu pero si lo quisiera hacer automáticamente por exq Porque si yo acá tuviera un millón de registros no quiero
ir hasta Buscar el número un millón y bajar No no quiero buscar buscame el nombre del producto con ID
15,58 325 y que me lo muestra automáticamente cómo hacemos o para filtrar por nombre esto lo Puos 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á el hay un famoso meme de que si usamos el delate que es lo que
usamos antes delate from products si nosotros ejecutamos esto se borra todo todo y si no ponemos las condiciones que
la condición es el famoso we Okay se nos borra toda la base de datos completa La T 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 Por qué Porque si 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 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é 2500,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 cambié el
color de fondo porque yo normalmente lo que hago en mis cursos es quiero ambientar losos no el azul siempre es un
color básico con el que arrancamos después continúan los colores más eh 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 tranky 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 eh pensé que
te habías dado cuenta cuando entré pero bueno evidentemente no creo que me voy a quedar un rato mientras das esta clase
no por favor después de que termines esta clase me voy tranqui o sea es solamente porque me interesa esta clase
es mi apartado preferido del curso hasta ahora por favor no me lo arruines es que 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 okay Bueno pero solamente te pido un solo favor un solo favor no interrumpas A menos que tengas
una duda o algún comentario que aporte al curso Okay me quedo callado ni me vas a anotar bien bueno comienzo Entonces
espero que no me interrumpas obviamente yo me quedo callado Okay 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 ese
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 prnos 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 Lucas te devuelve ese resultado como dije antes en ese HL manejar condiciones es algo
increíblemente fundamental Por qué bueno si yo por ejemplo te digo Mira Quiero que me devuelvas el nombre del usuario
que tiene el ID 7 por ejemplo lo que hace esta consulta es decir bueno a ver vamos a buscar el usuario con el id7
listo este usuario tiene un id7 Okay listo a ver el registro completo el nombre cómo se llama Lucas Ah okay listo
Entonces el usuario con id7 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 bajar 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 Fu a una charla hace poquito y
esta remera que ya saben que es la primera remera que lancé en la tienda de alto ya saben la tienda de alto es este
digamos esta tienda de de ropa de programador pero básicamente la voy a mejorar con el tiempo estoy invirtiendo
mucho y quiero que las cosas se 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 okay Y observen esto porque esto es muy gracioso subí esta foto acá
donde estoy bueno Nada hablando parte de la charla todo est es la gente que vino al show todo y observen esto que lo
tengo mejor en mi historia que lo tiré miren [Música]
esto se desconocieron completamente o sea tiré una remera que es esta remera que está acá la tiré y se desconocieron
completamente sigen mirando mir se van a agarar las piñas observa como se van a agarrar las
piñas se agarraban a las piñas Pero saben queé es lo más groso ustedes pueden decir terminó retar Esto bueno si
vienen acá y observamos esto acá lo publiqué en mi Porque se ve más completa es sacaron una
fotito sea no les importó nada y agarraron y dijeron Bueno me saco se estaban a trompada hace un
ratito y después van y se sacar una foto son impr no puedo creer a propósito me dieron un premio Okay que no sé por qué
no lo traje y me olvidé de traerlo pero 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 Eh Así que lo
voy a poner pero es hermoso el premio es píso 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 lo 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 medo 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 okay Lo
que teníamos hace un tiempito vamos a borrarlo completamente la primer consulta es la famosa cláusula we 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 No yo decía 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
devolver los nombres solo el nombre de los productos ya saben estamos seleccionando solamente el campo nombre
de producto de la tabla 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 Word y acá digo bueno a ver vamos a
obtener el campo product name es decir selecci solamente este campo de la tabla productos acá lo hizo pero ahora tenés
que seleccionar solamente los registros donde el product ID Okay sea igual a 14 Entonces ejecutamos esto y me dice apa
ya me devolvió el tofu Por qué Porque lo que le estoy pidiendo me lo está cumpliendo me está devolviendo el
product name que es el único campo que le pedí solamente le pedí el product name y me lo devolvió del registro en
donde el ID sea 14 y recuerden que no hay no puede haber dos registros con 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 devuelvemelo 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 supplier ID es el 6 o sea vaya a saber
quién es el 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 por 40 a 100 gr 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 ID y no me voy a poner a buscar uno por uno porque yo puedo venir acá y 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 decimos Word product name sea igual a
tofu Entonces 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 product name sea igual a tofu ahora supongamos que yo tengo Mira la
verdad que quiero comprar algo para comer pero no sé qué okay pero tengo unos 0 bueno mostrame todas las opciones
que valgan menos de 40 Y si 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 es 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 valgan más de 40 bueno tienen que valer más que 40 por qué Porque el precio
tiene que ser mayor que 40 ejecutamos y bueno ahora me está tirando esto todos los productos Okay 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 seleccion me Campos
qué Campos me queres seleccionar Bueno te quiero seleccionar el prod name el supplier ID Bueno ahora le digo selecci
todos todos los campos seleccion amelos todos quiero que quiero tener todos los campos con el Word le decimos Okay ahora
seleccionar 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 Por qué Porque comparan valores por eso se
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 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 Okay a ver
cuánto vale 97 Entonces no lo devuelvo vamos con el siguiente cuánto vale 62 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
llegue el product 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 y no me lo devuelve
62.5 no me lo devuelve 81 no me lo 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 90 y pico no lo devolvía Por qué Porque lo que hace es comprueba que cada
registro cumpla la condición el registro que coincida con eso lo devuelve 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 database usuarios
Acá está brow 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 que este registro es falso Por qué Y porque no puede haber eh dos
registros Que tengan un horario a las 11:30 por la misma persona es solamente un turno Porque si yo Después te digo te
tengo que cobrar te tengo que cobrar dos turnos porque AC 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 eliminemos el registro Cómo podemos eliminar específicamente
este registro bueno sabemos que es el id3 que qué hacemos entonces venimos y decimos Bueno delete okay from no hace
falta poner el asterisco porque el delete elimina todo delete from turnos médicos Okay Where ID en este caso comoo
era ID turno Okay ID turno sea igual a 3 Entonces si el ID turno es Exactamente igual a tres 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ó Okay acá est y ahora tengo la consulta anterior que la pego y acá lo lo ejecuto Entonces esto lo que
va a hacer es nos elimina el registro en el que esta condición sea verdadera Okay esta cumple no tiene ID un Entonces lo
va a saltar no va a hacer nada esta lo cumple no porque el ID turno es dos lo va a saltar no va a hacer nada esta lo
cumple sí porque la ID turno es tres 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 registré mal okay puse que el horario de este turno era las 11:30 pero en realidad no era las
11:30 me confundí era las 1030 o sea el doctor va a llegar a las 11 porque tiene que atenderlo 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 crud create read update delete bueno la Us de update
update esta no la vimos antes pero básicamente con update hicimos Bueno vamos a actualizar un una información
Okay qué tabla vamos a actualizar bueno actualizame la tabla turnos médicos quiero que me actualices la tabla turnos
médicos el campo horario set horario Y por qué lo querés modificar horario Bueno quiero hacer que el horario ahora
sea el eh las 10:30 okay Porque dice que son las 11:30 pero las 10 pero qué pasa si yo ejecuto Esto me va a cambiar todos
los horarios por qué Porque está cambiando el horario de todos los turnos porque está seleccionando todos qué toca
hacer entonces bueno tenemos que usar un Word 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
eh 10:30 ejecuto y cambio de vuelta ahí volvió a ser 10 y Med además de cambiarle Okay 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 por qué sé yo no sé dolor de muela Entonces el tipo va a
venir con todos los 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 qué 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í actualizame la tabla turnos médicos los campos que me vas a
actualizar son horario que va a ser 10 y3 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 dos Cuál es el registro que cumple con esa condición el segundo entonces
actualizamos y Okay 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 esta 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 modificamos todos los registros Entonces ahora que ya aprendimos el Word quería mostrarles Cómo cómo funcionaba
con el update y el Direct Así que volvemos a la base de datos de antes acá me la guardé acá norwind db Ahora sí
Bueno ahora sí hagan una pausa en el curso vayan ustedes a probar un poquito jueguen un poco con el Word a ver si
aprenden a seleccionar por varias formas jueguen con el we utilicen el we y muévanse 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 sí 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 con gas soy friky tranqui tranqui queres un cachetazo se ponía rev 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 from products ejecutar y ahí tenemos esto para no quedarnos con la imagen de antes y ahora vamos a
arrancar a trabajar con otros datos Okay vamos a hacer otra cosa que es bonita A mí me gusta mucho vamos a poner un Where
y vamos a hacer una condición and and your nos sirve para aplicar varias condiciones O sea si ya entienden de
lógica sabrán que el and y el or sirven para decir que se cumpla este y este o sea cheis and cheis o para que se cumpla
este o este o sea t or t es decir condición un and condición dos condición un es la que pusimos antes que antes
poníamos por ejemplo product ID = 2 y acá puede ser condición dos por ejemplo qué s yo product name es igual a otra
cosa tienen que cumplirse dos condiciones Esa es la la la estructura del and no podemos poner varios s De
hecho podríamos poner tres pero vamos a ir de poquito okay vamos a arrancar con este básico Okay 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 Bueno 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 work 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 customer 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á abriendo un montón más yo tengo que decirles que tiene que
ser mayor a 50 mayor o igual a 50 pero menor que 5 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 el condición uno ya la aplicamos y ahora
vamos a aplicar la segunda condición customer ID tiene que ser menor que 55 ejecutamos y ahí nos devolvió los
registros que queríamos acabamos de utilizar la cláusula and para poner dos condiciones a a esta consulta y que nos
devuelva un Rango de registros esto es una forma muy útil y muy práctica para utilizar and después tenemos el operador
or el operador or lo que hace es toma una o toma otra si yo ejecuto esto or me va a tirar Cualquier cosa ahí la acabo
de ejecutar de vuelta no tiene sentido porque esto me va a devolver todo Okay primero fíjense Esto me devuelve primero
del registro 50 hasta el 91 y después del 1 hasta el 49 Por qué 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 Okay todos estos cumplen Esa condición hasta este y
si no la cumplen también lo vamos a mostrar pero tienen que ser menores a 55 y acá me muestra todos estos estos hasta
el 49 o sea es la cláusula más estúpida que podemos poner el or en Casos como estos Pero dónde nos puede servir bueno
supongamos que yo quiero seleccionar a dos empleadas no está la empleada eh Ann y la empleada Nancy por ejemplo no vamos
a ir a a empleados vamos a ir a cláusula empleadas employees y vamos a ver quiénes están acá Bueno yo sé que hay
dos empleadas que ganaron un premio no por ejemplo Ani 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 an entonces las quiero seleccionar digo
bueno a ver normalmente la seleccionaríamos por el employe 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 Buscar a nany y podemos Buscar a an entonces decimos bueno a ver Where First name sea igual a Nancy 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 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 fir 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 si 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 Ann
cumplió la Otra condición también me devolvió an si hubiera más registros que tenga alguna de estas dos condiciones me
devolverían más registros pero este es un caso como Okay no es como que seleccionemos así a los empleados de
nuestra compañía pero nada como que entiendan el uso aprendes un montón si pertas atención eh y justamente es lea
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 [Música]
no sea se acuerdan que antes yo vimos la la función and 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á products no vamos a ir a productos selecciono los productos Tengo
estos Bueno vamos a hacer lo mismo que hicimos antes Where donde el price sea mayor a 20 Perdón menor a 20 vamos a
poner menor a 20 supongamos que queremos productos que valgan menos de $ Porque no tenemos $ para gastar en comida hoy
no tenemos Entonces vamos a decir que valga menos 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 qué Yo no sé es vamos a ver de qué es la
categoría 8 la categoría 8o 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 mira a ver puede ser menor a $ pero si vale más de $ solamente que sea carne de ave
entonces decimos or categoría ID es igual a 6 Porque la que nos gusta es la carne DEA 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 estos se pasó Ah
no pará Acá hay uno $39 vale Ah pero tiene categoría id6 o sea es de carne de ave Sí está bien lo pago Ah Acá hay otro
de $13 no cumplió la condición Ah pero sí cumplió la otra que tieneen que ser de categoría id6 Ah entonces Está bien
entonces los únicos productos que valen más de 20 que me van a devolver son los que tengan la categoría id6 y si no
tiene la categorí id6 tiene que sí o sí valer menos de $20 y ahí con eso acabamos de verlo pero supongamos que
ahora decimos Bueno pero para a 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 su Player ID sea siete porque yo solamente Confío en el proveedor siete
no porque tengo 15 proveedores por ejemplo pero solamente sé que el siete me trae la mejor comida entonces yo te
compro 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 supplier ID sea siete Porque el único proveedor tuyo que confío es en el
siete ejecutamos esto Qué pasó ahí acá el supply 10 es un 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 seis y
además el supplyer id7 es o esto o todo esto junto me explico es se tiene que cumplir esta condición y si esta no se
cumple puede cumplirse estas juntas O sea que tenga el categoría id6 y que además sea su Player id7 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 y6 o sea puede ser o esta o esta pero lo que tiene que
ser obligatorio el and es que sea del proveedor 7 sí o sí sin importar la comida que me des que sea del proveedor
7 ejecutamos y ahora solamente me 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 sí tiene categoria id3 pero la que me cumple sí o sí es la del suppli ID 7 y
vale menos de 20 20 no me cumplió esta pero me cumplió esta yo le puse unor así que no hace falta que sean de categoría
166 mientras valga menos de 20 Ah pero esta vale 39 bueno no hace falta que valga menos de 20 mientras tenga
categoría id6 ven tiene categoría ID 6 y esta es 15 no tiene categoría ID 6 Pero vale menos de 20 entonces Está bien 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 or incluso háblenle
a chat gpt Díganle 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 llevé a la
práctica No lo entendí así que ustedes tienen que llevarlo a la práctica para entenderlo es como es humano el
aprendizaje es un proceso activo no pasivo ustedes no aprenden viendo aprenden haciendo así que todo lo que
vamos viendo hagan Okay hagan vamos a hacer algo más fácil okay supongamos Que yo tengo acá productos y ahora le voy a
decir Che Mira la verdad que quiero que me selecciones productos Don donde el precio sea mayor a 40 Esto me está
devolviendo todos los productos que el precio es mayor a 40 o sea tiene que valer más de 40 Sí o sí Si no no me lo
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 si es mayor a 40 no me lo devuelvas Cómo hago Bueno le ponemos not not lo niega o sea hace
todo lo contrario lo ejecutamos y ahora nos devuelve los productos solamente que no cumple en esta condición o sea es
como un Contrera che No hagas esto lo hace el precio tiene que ser mayor a 40 okay not Cuánto tiene que valer algo más
que 40 not Che pero por favor mostrame los productos que valgan más de 40 not te muestra los que valen menos para eso
sirve la clusula not te niega una condición sea es como que te la está negando vos le decís esto no hace lo
contrario lo ideal es utilizarla para cosas útiles Porque si yo por ejemplo acá te digo esto esto que está acá es lo
mismo que decir fíjense eh esto y poner invertir esta condición para invertirla Recuerden que para invertir un mayor que
se utiliza un menor o igual a Entonces yo 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 es 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 hackeo Okay vamos a ir a a customers Okay acá está seleccionamos todos los clientes acá nos aparece el
país qué pasa el cliente que nos hackeo provienen de Estados Unidos no sabemos que alguien de Estados Unidos nos hackeo
Entonces vamos a mandarle un mensaje a todos los clientes que no sean de Estados Unidos por qué Porque si de
Estados Unidos nos hacko Así que vamos a hacer un filtro por qué porque como no queremos que le llegue a nadie de
Estados Unidos vamos a sacarlos normalmente tendríamos que decir vamos a adonar los clientes donde country sea
igual a France or country sea igual a denmark or y así tuvieran tendríamos que poner todos los países que no son est
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 que el country puede ser Brasil y así con todo se nos haría una condición relar una consulta rel larga
con muchas condiciones para eso simplemente usamos not not country igual usa entonces ejecutamos y fíjense en que
ahora nos devuelve todo menos usa vamos a chequearlo si antes ejecutamos 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 útil de una manera útil Por qué Porque no estamos haciendo algo irrelevante y que lo
podemos hacer de 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 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 de Estados Unidos ni tampoco queremos que le llegue a la gente de Francia Entonces vamos a decir
and not country igual France Qué estamos diciendo con esto bueno Mira la verdad que si el país es susa no me devuelvas
el registro Y si el país es Francia tampoco me devuelvo a haer 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 Por qué 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 dira
un or qué pasaría y Francia está igual y usa también por qué ah no puede ser de USA Ah o sea que puede ser de Francia
para que el not funcione correctamente porque esto es una negación si no es de Estados Unidos lo devolvemos Ah o sea
que si me devolviste un registro que no es de Estados Unidos Ya pues pasar o sea que Francia acá cumple esta condición
Por qué 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 un andt okay 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 por qué 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 la está cumpliendo porque sí es Francia Yo le pedí que no no sea Francia Bueno pero
or devuelve si se cumple una u otra esta no la cumple pero acá sí porque Francia no es Estados Unidos entonces me la
devuelve y me la deja pasar y es estúpida esta con una condición estúpida o es obsoleta Entonces le damos en and Y
ahí sí me devuelve resultados que no son ni de USA ni de Francia y así es como podemos utilizar el not y el and
combinados Incluso si se se les cuesta un poco pueden poner así y así incluso también Así es válido entonces
ejecutamos Y es lo mismo V no hay problema con esto mientras ustedes se sientan cómodos y a veces cuando tenemos
códigos muy largos es una buena forma legible no de ponerlo eh pero nada como ustedes mejor les parezca tengan en
cuenta que si nosotros hacemos dejamos un espacio y ejecutamos Okay tampoco pasa nadaa que ustedes lo pueden
inventar Pero esto no en todos los gestores es así hay gestores de base de datos que esto sí les tira error
Entonces nada entiendan que esto es simplemente para ustedes y en este caso para skite 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 sqlite con otros gestores para que
cuando ustedes salgan del curso puedan trabajar con pogre con my sequel y demás Al mismo nivel que con sqlite 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 des
preocú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 eh Así es como mezclamos not y andt además podemos usarlo de una forma muy
ingeniosa se acuerdan que antes queríamos seleccionar al cliente que tenga el product ID el perdón el custom
ID mayor a mayor o igual a 50 and customer ID menor que 55 y eso lo que nos devolvía si se fijan era estos cinco
registros que eran los ganadores de la Prim estos registros ganaron un premio qué premio y ganaron un 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 Germany es Alemania Lamentablemente llegamos a Bélgica a United Kingdom a Argentina a Canadá pero
no llegamos a Germany O sea a Alemania tenemos que excluirlo cómo usamos y un not ponemos así y abajo pongo and not
country ig 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 a 50 Pero además tienen que ser menores a 55 sí son
menores a 55 y además el país No tiene que ser Germany y ahora sí no es Germany 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 a cinco
ganadores solamente cinco pero no tienen que serber 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 Andá haciendo esto Porque si de repente el cliente número 55 no es de Estados Unidos y también es
de Germany nosotros no lo sabemos tiene que sea automático no tenemos que andar cambiando 57 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á 1
2 3 4 5 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 Germany 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 c ejecutamos y ahí nos devuelve cinco registros y ya está esta es la forma
óptima de hacerlo Incluso si le decimos que además por ejemplo and not country es igual a UK porque tampoco permite
premios de United Kingdom entonces ahí está Ah pero escucha me olvidé perdoname tampoco puedes ser de Argentina okay
Bueno tampoco puede ser de Argentina no importa esto se adapta y siempre nos va tirando Ah Tampoco puede ser de México
bueno tampoco es de México y esto siempre se va a adaptar y siempre nos va a tirar los primeros cinco resultados
que cumplan estas condiciones Ah queres más condiciones no puede ser tampoco ni de USA ni de Francia por ejemplo France
listo siguen saliendo cinco registros y acá tenemos a los ganadores de los premios excluyendo todos estos países no
participan ni Alemania ni Reino Unido ni Argentina ni México ni Estados Unidos ni Francia y aún así tenemos cinco
ganadores porque acabamos de excluir 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 mostrame las primeras cinco
publicaciones de esto de 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 limit decimos bueno a ver no quiero que me devuelva 50.000 resultados devuelveme los primeros cinco
los primeros 10 y yo con eso me conformo ya está así podemos aplicar and y not y encima la cláusula para limitar la
cantidad de resultados que queremos recibir ahora vamos a hacer otra cosa más piola supongamos que un cliente
viene a preguntarnos 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 Okay Bueno we not category
ID = 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 menú que le ofrecemos a los usuario
y ahora nos dice a ver quiero que me muestres los productos de mayor calidad que tengas los que son de mala calidad
sácamelo y yo dalto sé que el proveedor uno que es exotic liquid lo tenemos por acá es este exotic liquid tiene el
supplier ID 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 excluirlo and not supplier 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 uno ya está pero ahora el cliente se pone medio pesado y nos dice y además tengo
Solamente $0 para gastar Okay and price tiene que ser mayor a Perdón menor a 30 menor o igual a 30 porque tiene $3 si
algo está de 30 puede gastarlos Ahí va Nos devuelve solo los productos que valen menos de $30 listo estás conforme
cliente y de repente la basura nos dice Ah bueno pero son muchas opciones mostrame tres opciones a ver si si elijo
más rápido bueno le mostré amos tres opciones limit 3 Ahí está estás feliz maestro estas tres opciones y las ve
dice no me gusta ninguna actualizame Ah pero son las mismas opciones actualizame Ah pero qué pasa son siempre las mismas
tres entonces la basura de nuestro cliente quiere que le salgan tres resultados aleatorios okay Para que él
pueda elegir más rápido No porque conocen la ley la ley de hic dice que mientras más opciones tenemos para
decidir menos tardamos eso lo expliqué en un video de uxu que dice de leyes de diseño de interfaces y experiencia de
usuario si vamos a un kosco Y tenemos muchas eh cosas para elegir nos cuesta elegir pero si tenemos un chocolate y un
caramelo elegimos o el chocolate o es más rápido es más fácil elegir pero si tenemos 20 chocolates diferentes
tardamos más en elegir Esto 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 las mismas tres 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 liquid que es una bosta que no son carne de ave y que
vale menos de $ 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 ven siempre resultados diferentes para que el cliente pueda ver
y elegir te gusta esto o esto esto Ah Dame este Listo Ya está te fue le vendimos se fue a la bosta no lo vimos
nunca más ese cliente que insoportable objetivo cumplido No sé si se dan cuenta pero vieron que yo les
dije que durante el curso íbamos estar haciendo ejercicios bueno los ejercicios en sql son tan fáciles como ir
haciéndolos 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 que acabaron
de ver les abrió también la cabeza y dijeron Ah y se sienten que saben no mean que no es una sensación linda saber
que aprendemos saber que sabemos algo y me pone contento que sientan ese 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 obs leto si no y siento que aprender cosas nuevas es tan lindo y estos ejercicios er una
forma que vengo haciendo durante todo el curso que venimos haciendo ejercicio tras ejercicios ejercicio que nos 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 Okay antes de avanzar quiero decirles que esto les puede
fallar en algunos casos el primer caso en el que esto les puede 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 dan un resultado
que no es el que ustedes están esperando es porque no hay nada incorrecto O sea la sintaxis es correcta pero est
utilizando mal las herramientas hay un operador que no está donde debería estar o la lógica le están manejando mal si
ustedes hay algo que no coincide no pero cómo cómo me 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ás haciendo mal otro
error muy común es confundir el or con el and fíjense bien Cuándo utilizar el or y cuandoo el and 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 es el or si es el and 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 Okay 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 okay Porque nos falta mucho por aprender Así que vamos con esos operadores que la verdad que
estoy emocionadísimo y estoy básicamente orgasme para que podamos ir con eso porque yo quiero que avancemos porque
hasta ahora aprendimos un montón fíjense si les hubiéramos al principio del curso no sé si lo hubieran entendido pero
ahora no solamente que lo entiendan 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 sé que vamos bastante en el
curso o sea sí 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 hacer 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 and potenciamos todo lo anterior
aprendimos el not mezclar las cláusulas y el limit y potenciamos todo lo anterior nos falta mucho todavía nos
falta mucho así que sigamos aprendiendo que estoy emocionado por seguir con qué vamos Bueno vamos con la siguiente
cláusula para seguir trabajando con condiciones te faltó algo mi querido adto hay un
operador que funciona Exactamente igual que not Y es más común que not no existe un operador que sea Exactamente igual a
not estás muy seguro de lo que estás diciendo s a qué 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 al 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 d y
no se usa para Exactamente lo mismo que di una tontería no lo insin dijiste una boluda y si me lo permitiste lo explico
ahora genial Bueno me quedo acá 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 un poco Ju 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 infumable podemos realizar cualquier consulta Como por ejemplo Select from
customers Y si yo selecciono not country usa esto claramente acá Me faltó el we Word 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 d
básicamente un signito 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 and not es un operador
lógico mientras que distinto d quiero aclarar que cuando digo distinto d me refiero a este operador Okay entonces
como not es un operador lógico igual que or y and 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 video porque yo lo que hago es grabo edito 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 anotació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 okay solo que no
estamos utilizando la 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ómo me
me mostraste el diagrama pero son diferentes formas Aunque hablas de lo mismo y bueno porque uno usa la
anotación de Chen y otro usa un enfoque un poco más moderno que es el que Bueno estamos viendo y que vimos hasta ahí No
Entonces nada para aclararlo por las dudas porque nunca lo mencioné y no está demás mencionarlo Por qué entro a 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 de 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 boano pero es bulano pero nada soy medio medio analfabeto para el
inglés Así que ignórenme pero se dice bulano la diferencia entre un un operador bullano y un operador de
comparación es la siguiente primero operador booleano es el operador lógico Okay a los operadores lógicos también se
les dice operador bullano de hecho a los operadores booleanos se les dice operadores lógicos porque el nombre más
que operador Lógico es operador boano porque operan valores booleanos los valores booleanos pueden tomar solamente
dos valores en este caso es true o false eso es programación básica lo sabemos siempre true es verdadero false 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 uno y con un operador lo comparan con el valor dos es decir la estructura es
valor uno operador valor dos por ejemplo Select from products Where y acá viene la el 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 uno con valor dos y esto nos puede devolver dos cosas o true o false nunca se preguntaron por qué las
condiciones funcionan bueno el Word 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 Okay para verificar que todos los registros cumplan esta
condición porque digamos we funciona así si yo le digo devuelveme los productos que valen más de $ para que solo me
devuelva productos con más de $ tiene que pasar por todos los registros y va descartando los que se dan cuenta que
vale más de $ 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 registros y los descarta Pero cómo 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 Por qué 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 esto es verdadero nos lo devuelve y ahí estamos trabajando con valores anos Entonces cuando usamos un
operador de comparación lo que nos devuelve es o true o false si el resultado es true el Word nos devuelve
el registro si el resultado es false el Word no nos devuelve el registro si vieron el curso de python que ojalá que
vengan del curso de python esto está muy claro o sea en el curso de python esto lo explicamos muy claro pasa con las
condiciones Si ustedes llegaron hastar el apartado de condicionales esto que está acá funciona Exactamente igual es
así es muy simple esta explicació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 es false y si es
false no devuelve el registro si precio es 30 30 Es mayor que 10 Entonces si se cumple el regist la condición entonces
devuelve el registro ya está O sea que si es true lo devuelve si es false 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 bolean o sea un los operadores de comparación nos
dan valores booleanos y los operadores lógicos operan directamente con valores banos es decir el and funciona con valor
uno and valor dos es decir se tiene que cumplir la condición 1 y se tiene que cumplir la condición dos o sea si valor
uno es true 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 false porque eso sean dice Che A ver es rubia y es mayor a 18 Okay la dejo pasar a bolich así piensan algunos
patoa si cumple las dos condiciones va si es rubia es mayor a 18 la dejo pasar a bolich sin pagar ahora es mayor a 18
sí es rubia no no la dejó pasar a bolich porque para pasar a bolich tiene que ser rubia y mayor a 18 tiene que cumplir las
dos condiciones Si no es rubia ni es mayor a 18 ni hablar así funciona ya ya lo vimos ya lo entendimos eso Entonces
esto tiene que ser true porque la comparación de después se convierte en boano como ya les dije internamente
cuando nosotros ejecutamos un operador de comparación es como si todo el Tex toda la todo el código después se
convirtiera en true o false 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 4atro
y en el registro cuatro price es 5 este price va a ser cinco Si estamos en el registro si y price es 30 este price va
a ser 30 y cuando se haga la comparación esto se va a convertir en true o en false y esos valores son los que
operamos acá por eso nosotros decimos cuando operamos con and por ejemplo Select from usuarios or price mayor a 10
and supplier o sea proveedores es igual a dos Entonces esta consulta dice el precio es mayor a 10 y el proveedor es
dos si estas dos condiciones se cumplen nos devuelve el registro porque estamos operando con valor boano y valor boano
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 false Y si las dos son true te devolvemos true acá tenemos un ejemplo
de consulta seleccionar todo de la tabla usuarios donde valor boano 1 or valor boano 2 y acá está not not funciona así
not funciona con valores banos en este caso es not true nos devuelve false not false nos devuelve true quiero
mostrarles algo si venimos acá y yo acá pongo were not true esto nos devuelve false y Yo acá pongo not false 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 false nos va a devolver todo vamos a checarlo 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 or true nos lo devuelve para que or no nos devuelva ningún registro tiene que ser false y
false ambas falsas entonces not es lo mismo si yo le doy not false significa que es true porque no es falso o sea
está negando que es falso y si estamos negando que es falso es verdadero y si esto es así esto funciona true nos
devuelve todos los registros false no nos devuelve ninguno s que esto es mucho para procesar Pero esto es un curso sql
en donde yo quiero que entiendan todo porque si no entienden estas cosas después realmente eso esto no lo 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 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 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án manejando entonces repasen este apartado porque sí que es complicado repasen 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 los felicito porque son parte del grupo de personas
que lo entendió a la primera felicidades ahora sí avanzamos como les comentaba los operadores de comparación comparan
cualquier valor puede ser un bolean un número un texto con cualquier otro valor un número un blean o un texto Si
nosotros hacemos como hicimos antes y es seleccionamos por ejemplo from customers Where country diferente de USA esto nos
va a devolver lo mismo todo donde el país no sea 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 devolver los registros Entonces cuando vaya y diga a
ver el registro uno country va a ser igual a Germany Entonces esto es así esto es Germany Germany es diferente de
USA sí Entonces lo devuelve después va a ser México México México es diferente de USA sí Entonces lo devuelve Y esto es
igual con not si yo digo not country ig usa esto es como si yo dijera not Germany igual usa esto es verdad sí por
qué Porque not 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 buano es decir era la misma si decí 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 dec algo interno y casi sin porque cuando los
utilizamos ambos nos dan el mismo resultado no déjame explicarlo mejor ahora sí explicada la diferencia entre
estos operadores que si bien es mínima yo digo no es Exactamente igual Es decir sí es muy parecido el uso pero no es
Exactamente igual porque a pesar de que nos den resultados exactamente iguales el funcionamiento es distinto 2 * 2 es 4
y 2 + 2 También es 4 pero no podemos decir que 2 * 2 funciona Exactamente igual a 2 + 2 porque aunque tengamos el
mismo resultado el funcionamiento es diferente multiplicar no es sumar Aunque en este caso sea el mismo resultado es
una comparación medio tonta teniendo en cuenta que la multiplicación sí 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 not y después Este operador para que primero entiendan el not 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 per Bueno lo dejo acá donde estaba ahí va Perfecto Bueno gente Ahora sí vamos con el siguiente operador que
es el operador bwin 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 apares 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 ese ql y lo mejor de este curso es que si algo no se entiende o algo no se termina no les termina de
cerrar terminan entendiendo lo que antes no entendían por ejercicio que hacemos en un futuro eso es magnífico porque
siempre se repasan cosas de temas anteriores para temas nuevos Entonces es como es muy bueno así que bueno paro de
hablar vamos de lleno con el siguiente operador que es bwin bien Ahora nos toca trabajar con el
siguiente operador que es el operador bwin 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 hardcord okay 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 Okay hay que concentrarse
enfocarse y si lo de antes les pareció suave ahora arranca un poquito más heavy no por bwin como tal porque bwin 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 Okay
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
potenciación si no sé sumar pero una vez que sabemos sumar y multiplicar potenciar es bastante simple una vez que
sabemos todo lo que ya vimos en sql bwin es bastante simple porque tenemos la bases sólidas y tenemos las bases
fuertes y si lo que vamos a hacer a no les cuesta es porque simplemente tienen unas buenas bases ya que este curso está
hecho para eso así que siéntanse contentos Pero eso no significa que no estemos cerca de la parte más Hardcore
que es el apartado de los joins las subconsultas y todo ese mundillo así que bueno ahora sí de una vez por todas
vamos con otro operador que nos va a hacer la vida más fácil que es el operador bwin 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 todo de la
tabla productos dónde 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 si ven más de 40 No si valen menos de 20 tampoco es un
Rango bueno normalmente lo que habríamos hecho una otra situación habría sido World 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 and Bueno hay una forma mejor que es
between en este caso es price lo mantenemos y decimos between 20 and 40 es decir 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 Bin tiene muchos más usos no solamente es entre rangos numéricos de
hecho casi el consumo Es el mismo con and que con bwin Así que tiene otros usos que son mejores incluso de hecho lo
podemos usar también con and si yo acá por ejemplo digo and category ID igual se 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 ID 6 es decir tiene que
ser de carne de ave o sea esto corre por un lado y esto okay corre por el otro lo mismo con unor puede ser o una o la otra
con que cumpla cualquiera de los dos ya está bien entonces si vemos productos que por ejemplo valen 123 decimos cómo
puede ser si le dijimos que esté entre 20 y 40 y porque usamos un 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 not si yo acá pongo not between 20 an 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 between es igual que el operador por defecto si yo hago esto esto funciona igual okay Porque la gracia de not es
que not puede negar esto que está acá que se va a convertir en un valor boano 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
false 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 Okay es decir para cada registro depende de 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 between y el operador not between pero es lo mismo o sea es
exactamente lo mismo que poner esto acá solamente que esto se llama operador not betn y esto simplemente es un bwin
acompañado con un not si yo le digo a alguien haceme un not betn técnicamente me hace esto okay esto sin este not pero
técnicamente yo le digo haceme una negación del bwin 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 not between es lo mismo en realidad pero que sepan que están las dos posibilidades between solamente no
sirve para seleccionar Rango de de números porque si no sería muy estúpido también nos sirve para seleccionar
fechas si yo por ejemplo vengo a brow Data vamos a buscar algún campo en el que haya fechas acá tenemos Okay bir
date es un digamos campo que tiene formato fecha año mes día si nosotros quisiéramos buscar entre nuestros
empleados employees yo esto lo saco y ejecuto acá vemos que nos devuelve esto el bir date es 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 beard date between 1960 en este caso vamos a ponerlo así
1960 gu 0-1 and 1960 Perdón 1970 gu 0-1 y ahí tenemos la
consulta yo esto lo ejecuto y me devuelve las fechas por qué porque esto entiende el formato este tipo de formato
es un formato que aunque sea texto porque sí no deja de ser texto eh o sea es un texto sql lo interpreta como si
fueran fechas dice Ah okay 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 el 50 y el 70 porque bwin 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 Word bir
date sea mayor a esto and bir date 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
es se suele no se olviden que se suele utilizar el operador correcto para cada caso como en toda herramienta de
programación Entonces si tenemos bwin y nos genera casi un resultado como and pero bwin es un operador específico para
manejar rangos entonces trabajemos con bwin Porque además mejora la elegibilidad del código y recuerden 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 la dije muchas veces pero se les 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 ahora 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 bwin
incluso y es el famoso operador Quizá lo han escuchado ya like Sí el operador like antes de pasar a like una cosa que
quiero Resaltar es que bwin incluye los valores límite esto y esto también están incluidos es decir si yo le digo que me
pase por ejemplo rangos entre el employe ID 2 y 4 los límites están incluidos es decir el dos se incluye y el cuatro
también between incluye los límites y otra cosa que casi me olvido el valor uno no puede ser mayor al valor 2s es
decir si yo acá pusiera entre 6 y 3 Esto me va a devolver cualquier cosa okay 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 3 y TR es como si 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á
devolviendo alguien que nació el 28 los que nacieron el 5 8 y realmente no está funcionando Entonces técnicamente se
comporta como nosotros no queremos si yo acá le dijera 1950 fíjense que tampoco me devuelve nada Por qué Porque genera
un comportamiento inesperado entonces manejen tipos de datos compatibles y es una técnica muy usada para trabajar con
números banos es decir si nosotros tuviéramos una columna boleana hay algo que no les dije de los booleanos 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 false 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 cer0 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 cer0 es no paso de corriente y uno es paso de
corriente Esto es lo mismo c es false uno es true Entonces esto también lo podemos eh hacer funcionar con esto Si
yo hago por ejemplo c and c Esto me devuelve nada un and 1 Esto me devuelve todo lo mismo con el or esto funciona y
ahora que le doy los dos ceros Ninguno me corre y si le doy not cero me devuelve todo porque está negando al
falso o sea que es true Y si le doy not 1 está negando al verdadero entonces me devuelve false Entonces bwin se puede
utilizar para por ejemplo manejar valores banos si tuviéramos una columna boleana boleana Perdón ya sé que digo
bano y bull Bull no B Bull es decir buano si tuvieramos una columna boleana podemos decir que between en este caso
es columna boleana between 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 facts fact por todos lados fact fact fact fact bueno 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 de
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 otras bases de datos tenemos muchísimos es decir en en pogre
y demás tenemos much muchísimos comodines pero en skite tenemos dos algunas bases de datos los agregan se
acuerdan que les dije que algunas bases de datos 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 adaptarse y no vayan en bolas por defecto utilizar un like Es Exactamente
igual que utilizar un igual Last name like fuller Okay esto que está acá si lo ejecutamos nos va a devolver fuller Pero
si yo pongo un espacio ya no nos va a devolver fuller Okay es Exactamente igual que un igual es como si pusiéramos
esto like funciona así okay es como un igual es parecido Okay 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 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 por 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 si 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 decir 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 skite no es
Case sensitive 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 ent Yo acá debería poner la F con mayúscula porque en en algunos gestores de base de datos
Y cuando trabajamos con algunas integraciones con programas en la vida real lo normal es si una es mayúscula
una letra es mayúscula la ponemos mayúscula si una letra es 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 usáramos 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 que tenga
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 Dover solamente dos
registros Por qué Porque los únicos que tienen la e y la r son full r y lev Air ling 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 puede venir lo que sea antes también pero tiene que estar Esto entonces
técnicamente entendimos que uno de los comodines es el porcentaje y 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 es que
empiece con f listo cumple la condición si yo quisiera verificar que termine con eh 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 o lo que querramos doble porcentaje No pasa nada lo volvemos a ejecutar Ah va a es es un
error de like que que lanza sin sentido y de esta forma chequeamos que el registro en la columna Last name
contenga una una r si quisiera verificar que tengo una u pongo la u y ahí me salta todos los que tienen u si quiero
verifica 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 gu bajo Cómo funciona el guion 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 f cuatro caracteres después 1 2 3 4 y termina con la r ejecutamos esto y nos devuelve fuller porque esto
que está acá significa cualquier cosa no importa lo que ve 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 lo devuelve más por qué 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 fi fulanito full Shake puede haber un montón de full Pero si yo 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 no me lo
devuelve por qué 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 uller supongamos que yo sé que se llama que en el medio tiene una u Okay tiene
una u ahí está la f u l l e r actualizo y me lo devuelve por qué me devolvió también el sujama y bueno porque cumple
la la condición Cuál es la condición tiene que haber solo un caracter adelante de la u solo uno no puede haber
Ni más ni menos uno tiene la s listo es un caracter y después de la u tiene que haber 1 2 3 cuatro caracteres y a m
cuatro caracteres también cumple la condición acá tenemos dos registros que cumplen 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 menos 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 dos 1 dos y después lo que sea perfecto
cumple con la condición entonces también lo devuelve De hecho si acá acá Le hubiéramos pasado un carácter extra en
vez de devolvernos estos dos Perdón Es uno más no se habría devuelto este porque es el único registro que tiene
algo seguido de una u seguido de siete letras si bajamos a cinco después nos devuelve los de antes así es como
funciona este comodín que es el segundo comodin estándar del operador like ven como estamos aprendiendo un montón Ya
vimos en un saque el operador bwin 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 es solamente poniendo exactamente el
campo pero no sabía cómo hacer para verificar bueno Esta es la forma Okay con Bin buscamos entre rangos y con like
podemos hacer una especie de 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 Por qué Porque arranca con la F y termina con lo que
sea como les dije también se puede mezclar Pero bueno esto ya es tema para que prueben ustedes repito Yo siempre
digo 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 asimilen mucho mejor después de que ustedes hagan sus propios ejercicios
entonces pongan pausa a este video vayan a ejercitarse un poco no hacerse la Manuela sino que a jugar un poco con la
manito para hacer que esto sea realidad después si les sale bueno jueguen con la Manuela 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 not like not Last
name like and y poner Otra condición Okay 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 ble y los valores banos 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 nul o is not null son dos operadores que es muy sencillo la verdad
eh o sea si yo por ejemplo devuelvo acá la ta habla 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 ask Y en este caso es solamente por product 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 nulos primero por la regla de jerarquía que vimos al principio ahí tenemos los
nulos Okay hay una diferencia entre lo que acabo de hacer recién y lo que mostré antes no nada pero solamente
quería que se cumpla la regla para recordemos un poquito que lo cuando usamos la forma ascendente por defecto
los nuls se muestran primero pero supongamos que esto tenga que cumplir condiciones okay 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 Where
product name is null Entonces en este caso me va a devolver solamente los valores en los que product name sea
nulo y así como le decimos is null le podemos decir is not nul y ahí nos devuelve solo los que no son nulos no
hay valores nulos Pero nada no 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 prod name is nul o sea
es como podemos jugar un poco con el not todo el tiempo de hecho podríamos poner un not acá y un not acá y esto que está
acá es como en matemáticas literal negativo menos negativo es positivo ven me devuelve los dos si saco el negativo
y saco el negativo es decir Tacho los mismos signos por los que multiplico me devuelve lo mismo e matemáticamente
funciona igual pero se entiende no que quise referirme a que es matemático que si lo vimos en la escuela acá también
funciona Ah seguro ni se acuerden de lo que estoy diciendo pero no importa lo dejamos pasar porque llegaron a este
punto del curso de hecho para limpieza de datos es muy usado porque le decimos Che la verdad que Devuélveme 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 en medio que vimos bastantes operadores que vamos adquiriendo un poco de experiencia y que ya estamos
aprendiendo cosas nuevas rápido así así como si nada cosas que deberían tardar más tiempo en aprender las aprendemos
más 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 porque lo entendemos y lo entendemos rápido y eso me pone contento pero todavía falta lo más complejo de
sql que es el apartado de las subconsultas pero para entender las subconsultas 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 eh 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 de no sé cuánto tiempo entendiendo Cómo funcionaba este
diagrama bueno se acuerdan que explicamos lo que era las llaves foráneas las llaves primarias es decir
las foreign Keys y las primary kys 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 Okay el operador in 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ógicos vimos tres and or y not ahora vamos por un cuarto entonces creo que se
merece una pequeña sección y sobre todo cuando es la introducción a las 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 product Where
supplier ID = 3 and supplier ID = 4 y lanzamos así eh 5 6 todo este código para una consulta lo ejecutamos y bueno
evidente Ah porque no es and es or Perdón perdón perdón el boludo quiere enseñar algo y explico cualquier tonter
Bueno ahí va es algo básico Okay decimos bueno a ver puede ser o del proveedor tres o del proveedor cuatro 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 y acá 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 hor todos estén correct sería un
lío bueno el operador in medio que viene a solucionar esto no porque es como una abreviación al operador or que a su vez
es un operador Lógico es decir ambos son operadores lógicos pero opera 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 Word supplier ID in 3 4 5 6
actualizo y esto me devuelve exactamente el mismo resultado pero de una forma más abreviada por qué porque le estoy
diciendo el supplier 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 vernos 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 de 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á Okay supp Player ID va registro por registro y toma el supplier ID de cada registro si el el
supplier ID es TR se fija a ver tres está en estos valores puede ser o este o este o este o este y como TR está lo
devuelve si el supplier ID es s dice a ver siete hagamos de cuenta siete está en 3 4 5 o 6 no en este conjunto de
datos en este esta especie de tupla Okay no está no se encuentra Entonces no devuelve el registro y así funciona esta
cláusula in se puede utilizar en la cláusula Select en update y en delete voy a seleccionar a los empleados
employees Yo quiero seleccionar a fuller y a King Okay digo Where Last name ig fuller or Last name = King esto lo
ejecuto y me da esto pero yo tranquilamente podría hacer 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 dos va a ser
igual a fuller estamos en el registo 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 abreviar Okay 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 el nota ahí está medio entiendo presión con un not Recuerden que puede ser no norment los operadores
los ponemos con mayúscula not in Ahí va y ahí sí no funciona por qué 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 not adelante es decir con una negación funcionan Exactamente igual pero es más común usar
not in Okay Recuerden que el not siempre se utiliza al lado del operador es not between not like no y así es más común
no pero no es no no está t mal utilizar acá adelante el not es lo mismo o sea realmente no hay diferencia solamente
que para mí es más legible por lo menos hasta por los colorcitos que nos ponen que son azulcito como verlo juntos para
mí es mejor pero bueno cada uno eligirá como lo pone no y este es el uso del not in pero el in 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
joins ya que con in podemos hacer una subconsulta que es una consulta adentro de otra consulta es decir puedo al el
fin mezclar una foreign key con una key y encontrar relaciones Sí y eso nos lo permite in vamos a ver más adelante que
in no es la mejor forma de hacer esta operación okay es decir De relacionar tablas existen otra cosa llamado joins
incluso existen mejores cosas que esas vamos a ir viendo con el tiempo porque lo ideal es que empecemos a
introducirnos pero si queremos entender los joints y demás es la mejor cosa que podemos hacer entender in y el tema de
las subconsultas Así que ahora sí arrancamos con mi apartado preferido del curso de sql que es todo el tema de las
subconsultas y de los joints 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 hasta
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 datos
estadísticos como les dije como por ejemplo la mediana la deviació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 employe ahí va más rápido y estoy
obteniendo esto Esto es el el selector de todo Es decir me selecciona todo de la tabla employ 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 sé 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 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 que nos muestra el resultado de esa función lo que nos retorna a 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 Okay 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 actualizo 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 Okay 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 O sea si yo vendiera
uno de cada precio Esto me pagaría porque este es el valor de todos los precios sumados después tengo abg abg
significa promedio abg 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 el el promedio tampoco hay mucha ciencia muchachos el promedio suma todos los
números y los divide por la misma cantidad de valores es una boluda es un promedio Entonces yo ejecuto esto y me
devuelve el promedio O sea que en promedio los productos cuestan 27 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.44 08 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é queres redondear Okay Quiero redondear el promedio Okay
que esto es algo aparte esto que está acá es algo aparte quiero redondear el promedio de Price Entonces de esa forma
ahí sí estoy redond y como tengo un nombre acá todo refeo lo puedo asignar como promedio entonces ahí lo ejecuto y
ahí tengo promedio si se fijan es un promedio de hecho supongamos que eh 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 n2 es decir el
número uno y el número dos el número uno es el valor que queremos redondear en este caso es abg price Porque queremos
redondear el promedio del precio y después tenemos n2 n2 es el valor con la cantidad de decimales si yo 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 quiero que tenga un decimal me da un decimal si yo quiero que tenga cero decimales me da cero 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 es lo que recomiendo para entender el curso de sql y sacarle el máximo jugo a todo es
que va en el curso de python porque no me voy a explicar ahora por ejemplo a a explicar lo que es un parámetro porque
realmente el curso de sql haría muy largo ya bastante que lo estoy 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 a explicar 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 mi recomendación más fiel es vayan a ver el curso de python además python es uno de
los lenguajes más poderosos 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 que hace algo en
este caso Okay 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á Okay 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 dos esto es la cantidad de
decimales Okay repito véanlo con python para que entiendan mejor pero si no nada es una abur estoy redondeando el
promedio del precio bueno vamos a segir 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 es una función para redondear
después tenemos min si yo quiero decir Che a ver Quiero encontrar el precio mínimo Okay Quiero encontrar el precio
mínimo Cómo hago pongo min y min lo que me devuelve es el producto que menos vale min price Esto me está devolviendo
cero por qué Porque si yo vengo acá a brow Data y vengo a products y los ordeno por price si apreto 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 estos Campos nulos el valor mínimo de Price es cer0 O sea hay productos que valen cero
porque son nulos y son errores que después vamos a ver cómo los limpiamos De hecho acá yo puedo decir Where
product name por ejemplo is not null entonces de 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é Devuélveme el nombre del producto y el
precio mínimo de la tabla productos pero el product name no tiene que ser nul porque si no si yo esta condición no la
pusiera de hecho vamos a anularla esto que está acá es un comentario Okay 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á lo mismo guion guion no no pasa nada Por qué Porque es como si sql no lo
interpretar 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 okay 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 dejar y lo ejecuto esto nos devolver el mismo resultado si yo esto lo descom el
resultado lo tenemos igual porque esto no lo interpreta es como si no existiera Okay en este caso lo descomentar 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 es esta vamos a
ejecutarlo y ahí nos devuelve el nul Por qué Porque el valor más chico es cer0 pero el nombre de todos los productos
que tienen el valor cero es nul Entonces si usamos la condición de que los campos no tiene que haber datos nulos o sea el
produ name no puede ser nul 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 coté de bl
263.5 acá no hace falta ponerle esto porque los campos nulos no no afectan nada lo ejecuto y es lo mismo ven pero
quería llegar a que entiendan que así como ahora estamos con estas funciones de variación que ya vimos recién que son
muy básicas tenemos muchísimas pero muchísimas funciones deción tenemos funciones de variación que hacen de todo
lo que se imagin 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 a hablar de optimización en este curso también pero que sepan que hay muchísimas funciones de grup Okay pero
no nos vamos a trabar 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 las subconsultas es ver grow by y having que es lo último que vamos a ver antes de
trabajar con sub consultas porque literalmente ya habríamos hecho y terminado todo para poder estar de lleno
en lo que vienen siendo las subconsultas sin distraernos y teniendo los conocimientos no porque para meterse en
subconsultas hay que tener un conocimiento previo hay que entender ciertas cosas y ya con aprender grow by
y hing que es lo que vamos a ver ahora a continuación Ya podía decir que estamos listos para trabajar de lleno con sub
consultas Así que basta de hablar y vamos de lleno con grow by y jain bien la cláusula grow by se utiliza
para agrupar uno o varios registros Okay Según uno o varios valores de las columnas otra vez acá me hice una
pequeña tablita en Paint porque 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 Toc no me permite avanzar si no está todo bien puesto si vas a usar pine
por lo 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 grou by producto 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 le pido 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
des preocúpense lo vamos a ver ahora con una función de agregación que es con zoom se acuerdan que zoom me sumaba
todos los valores de una columna Bueno si yo esto le dir a zoom me sumaría todos los valores Pero si yo antes le
doy un grow byy lo que va a ser el grow byy es en 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 por qué porque tenemos manzana 3es manzana cu tres má 4 7 manzana 2 nu bueno medio que no sé
sumar Y en vez de poner nueve puse 10 pero bueno podríamos hacer de cuenta que en vez de ser nueve son 10 manzas que se
vendieron y después ciruela acá ciruela dice 5 y 3 5 + 3 son 8 Entonces se vendieron ocho celas 10 manzanas y 13
bananas esto lo podemos hacer con grou by Porque si Ah basta vamos a verlo en código por ejemplo supongamos que lo que
queremos hacer es obtener el promedio de precios de un producto venimos acá y ponemos abg price hasta acá está todo
bien ya está esto nos devuelve el promedio que ya lo hicimos antes de eh 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 grou by supplier ID esto 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 r para que se redonde los números y no tengamos que hacer tanta vuelta va y el grow by lo 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 supplier ID coma round el supplier ID Recuerden que es el proveedor cada proveedor tiene un Player
ID es decir el proveedor uno es decir ele el promedio de los de lo que cuestan los productos del proveedor un es de 166
el promedio de lo que cuestan los productos del proveedor dos es de $ el promedio del tercero es de $30 El del
cuarto 35 el del quinto 30 el del sexto 15 yo digo bueno a ver ahora de repente Quiero ver eh quiero verlos en orden
Quiero ver cuál es el que más vale bueno order by round Ah cierto tengo que hacer todo esto de vuelta bueno mejor en ve de
hacer esto y le voy a asignar un valor as promedio Ahí va promedio entonces de esta forma le digo order by promedio y
se actualizo ahora me los ordena por el promedio y esta columna tiene un valor el supply 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 supply 18 es de 141
o sea el predor con los productos más caros en promedio es el proveedor 18 con un promedio de 1411 por producto pero el
problema de esto el problema de de agruparlo por por este valor es que lo que estamos haciendo es que como les
dije estás separando los y agrupándolos o sea todos los que tengan el supp Play ID 188 los agrupa por esta función de
agregación Por ejemplo si hay siete registros con el supplier ID 18 suma 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 supplier ID o sea si yo vengo a brow Data en products y los ordeno por el supply ID Okay vamos al 18 el primero
que tiene el 18 es coté de Blade hay más eh tenemos este que está acá abajo pero el que el primero que tiene el ID 18 es
este Entonces lo muestra el primer producto con el suppli ID 4 es mishi no sé qué cómo lo sé y si venimos acá al
cuatro hay varios hay tres productos con el supply cu pero el primero es mishi O sea que grow Buy lo que hace es
agruparlo y nos devuelve el primer valor de cada uno o sea que si yo acá no usara el abg price lo que obtendría Qué sería
el precio más bajo esto no sería un promedio esto lo que nos devolvería sería el precio más bajo si yo acá le
doy no le doy un order si yo acá le doy De hecho un as me devolvería el precio más alto entonces volvemos a lo que
teníamos antes supplier ID Ahí va lo dejamos acá y ahí tenemos el supplier ID y el promedio estamos haciendo que nos
devuelve incluso lo puedos hacer por categoría category ID y lo lo agrupamos por category ID de esta forma hay uno
para cada categoría está la categoría nula Así que vamos a usar una condición Word category ID y is not null Ahí está
entonces la ignoramos al al valor nulo cuál es el problema acá Ah El problema es que el Word va
adelante del grow by esto es bastante loco pero sí el we va adelante del grow by entonces ahí 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 los registros Por qué Porque Cómo 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
por qué Porque el Word sirve para usar condiciones y filtrar los resultados O sea si me vas a bajar ocho resultados
ahora bájame cuatro porque con la condición que te di me bajas cuatro y esos cuatro después los a grupo Entonces
primero va la condición el Word y después va el gry Y ahí sí acá me está devolviendo el categorí ID con el
promedio de cada categoría ID en este caso vemos más o menos Cuál es el promedio del costo de cada categoría
vemos que la categoría que más cuesta es la seis 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 $4 Recuerden que si venimos acá y le damos en en categories vemos que la seis es
meat p que significa carne de ave y nos da la casualidad que en prom Med es lo que más cuesta no se olviden que si a
esto le sacamos el grow Buy y le sacamos todo esto Simplemente nos devuelve un valor por qué Porque lo que hace es no
suma todo okay Nos 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 todo todos los precios pero como les dije si le pasáramos un nombre si le pidiéramos cualquier cosa siempre nos va
a devolver el valor más bajito si Yo acá le paso product name esto que está acá me va a volver el chice Por qué Porque
chice es el primero de todos los productos Yo vengo acá products y el primero es chice si el primero fuera
chang me devolvería chang pero el primero es chice si yo le digo supp Player ID que también me devuelve su
Player ID me va a devolver uno por qué Porque el primer producto tiene uno como su Player ID 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 Buy sirve para
decir Che 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 de la categoría 2 es de $ el
promedio de la categoría 3 es de $ Bueno entonces ahí es cuando usamos el grou 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 eh más o
menos por proveedores y 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 Word si pongo acá un Word en este caso promedio promedio sea mayor a 40 si el promedio es más de
40 entonces devuélvemelo Ah pero no me deja puedo intentar de vuelta no no fue un error realmente no me deja para esto
hay una cláusula extra que es el having con el Word Necesito que entiendan esto con el Word no podemos hacer referencia
la función de agrupación Por qué Porque Recuerden que con hayo que se llaman grupos en ese cu llama grupos Okay grow
by nos permite crear grupos las funciones de agregación también nos permiten trabajar con grupos y hay una
clave ula llamada having que nos sirve para ser filtrado de grupos así como el Word filtra registros el having filtra
grupos O sea que se usa después del grou by si yo vengo acá y le digo having el having no es joda es como un Word pero
en vez de filtra registro filtra grupo como les dije Ahora sí puedo decirle promedio Okay 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 hing 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 eh A veces no sé por qué se me mezcla y
digo función de agrupación pero es función de agregación Entonces como les decía no se puede trabajar en un Word
con funciones de agregació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 we pero que en vez de usar un we en vez de
filtrar filas filtra grupos having O sea si queremos trabajar con condiciones en funciones de agregación tenemos que usar
hing en este caso la función de agregación está almacenada en este alias promedio si lo queremos filtrar tenemos
que usar el hing acá decimos 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 filtrem acá no se van a tener en cuenta para calcular el
promedio supongamos que yo ahora voy a decir Where product name is not null entonces actualizo y ahora vale más esto
Ahora hay más valor por qué Porque los campos nulos se estaban teniendo en cuenta O sea estos Campos que están
nulos ven que dice nul 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 we lo que hicimos es sacar esto y después se agrupa como les dije esto funciona así supongamos
que tenemos todos estos registros Por qué está tan abajo del micrófono boludo qué increíble supongamos que tenemos
todos estos registros Okay hasta acá está todo bien listo todos los registros todo lo que quieran esto primero pasa
por el we 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 Word 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 agrupam Elo por su Player ID acá le estoy diciendo devolveme 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 5 + 8 + 3 tengo tres valores lo divido por 3 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 nuls estos estos precios cero que no existen entonces para sacar esos precios uso
Esta cláusula que está acá y lo filtro y después de que me devuelva los productos filtrados ahora sí me los separa en
grupos por el supp Player ID y después los 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 a entrar a esta tabla para que la observemos mejor tenemos el producto de las orden el los
datos de las órdenes tenemos el producto que se ve 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 grow Buy 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 rel largas o sea esto hace un tiempito ni lo habrían entendido Y ahora están entendiendo cosa
que es magnífico pu seleccionar order Select todo from order details ejecuto y tengo todos los datos a mí solamente me
interesa el product ID y el quantity hasta acá estamos bien Esto es lo único que me interesa el producto y la
cantidad es decir qué producto 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 dos una vez se vendió 20 20 unidades del producto dos y acá se
vendió 50 unidades del producto 2s o sea que tenemos que encontrar una forma de agruparlos bueno con gr primero sumamos
las cantidades en este caso es zoom quantity 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 product ID Así que lo
vamos a ignorar y abajo le damos grou by product ID es decir vamos a hacer que se agrupen todos los products ID y que se
sumen las cantidades O sea si hubo tres ventas del producto cuatro quiero que me sumes todas las cantidades de las tres
ventas entonces ahí tenemos el producto uno se vendió 159 veces el producto 2s se vendió 341 ahí tenemos Cuántas veces
se vendió cada producto en total porque por ahí el producto dos como Vimos una vez se vendió 20 unidades otra vez se
vendió 30 otra vez se vendió 40 Pero de esta forma estamos agrupando todas las ventas del producto dos como de esta
forma ahora después de esto tenemos que ordenarlo vamos a darle order by en este caso Vamos a darle total as total Ahí
está poro como que queda feo esto acá el zoom quantity Así que vamos a darle order by total Ah actualizamos y ahora
sí tenemos la columna con el nombre total y estamos ordenándoles 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 deir bueno Qué puedo usar un Word si yo pongo un Word y pongo donde el total es mayor así 50 esto no
me funciona porque tenemos que usar un having el having viene antes del order Buy pero después del Group Buy having
total mayor a 50 de esta forma solo me devuelve los productos que son mayores a 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 sql y 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 des ahora me va 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 me devuelva un solo
dato con el más vendido Cómo hago eso Bueno vamos de vuelta con el jaby no no no no no La respuesta es simple limit un
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 menos se vendió acá simplemente poner ask y de 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á having Max product ID por ejemplo okay 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 quiero
que me devuelva el valor máximo de total hago esto no esto no se puede por qué porque total es el resultado de una
función de agrupación que es esta porque total es el resultado de 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 aplicarle 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 límit uno 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 problemita cerp el próximo video ya va a estar más
arreglado esto pero nada no me quiero hacer tanto lío lo voy a sacar de acá y lo voy a agarrar con la mano porque la
tengo reg grande Qué es eso anda teniendo un soporte para micrófono Yo soy el soporte bueno En definitiva
Mientras que el we filtra registros el having 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 todo hacemos en todo en el Select hacemos la selección completa Los segundo es
filtrar registros es decir usamos el we si hubiera un we 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 grow by y hacemos las
agrupaciones después hiciéramos algo más podemos hacer por ejemplo un hing es importante que sepan que el hing no se
puede usar sin el grow Buy porque el grow Buy agrupa registros y el hing trabaja con grupos o sea el hing no
trabaja con filas si intentamos usar un hing sin el grow by no sirve porque el hing solamente trabaja con grupos el
hing es una cláusula que usamos para a los grupos O sea que si la usamos sin el grow by la estamos aplicando sobre filas
y nos va a tirar un error porque no se usa sobre filas se usa sobre grupos entonces grow by y después el having y
después usamos el order by y hacemos la ordenación el ordenamiento la ordenación qué hijo de hacemos el ordenamiento
y en caso de que querramos 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 querramos ese es como el orden en el que deberíamos hacer las cosas porque si no
puede que nos tire un error en el having 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 ad dentro de otra función de agregación O
sea no podemos combinar funciones de agregación ni tampoco podemos meter un 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 suom total podemos
usar quantity 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 subconsultas pero todavía no es 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 Entonces hubo cinco
ventas de un producto de $300 O sea que generamos $1500 pero por ahí el producto que más se vendió que tuvo $450 ventas
más o menos valía $2 entonces por ahí el producto que menos se vendió nos generó más que este producto que se vendió más
entonces lo que quiero hacer ahora es algo loco por qué 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 qué pasa
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 ID o sea que si logramos
unir las tablas podríamos tener el precio de un product ID si yo por ejemplo tengo el product ID el 31 que
está si yo por ejemplo tuviera el product ID 31 Yo podría decir Bueno mira a ver decime el nombre del product ID 31
Este es el nombre decime el precio del producto ID 31 bueno el precio es 12.5 y después hago más cálculos Entonces qué
hago Acá tengo el product 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 consultas porque las
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 se da por los identificadores Así que ahora vamos a ver y llevar a la práctica todo lo que Estuvimos viendo
antes de las foring Keys y Prim todo eso lo vamos a llevar a cabo ahora porque ahora sí llegó el fucking momento de ver
su consultas Así que dejo de hablar y los felicito si llegaron este apartado del curso porque ahora sí se viene los
fucking hermoso de esto que es unir tablas los dejo con el apartado de subconsultas vamos
chavón acaban de pasar 4 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 donde vamos a las bases
fundamentales explicamos muchas más cosas que en otros cursos no se explican hablo mucho más rápido que el promedio Y
encima dito mucho o sea dentro de todo el tiempo se optimiza 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 ya 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 Toa asegurarme que las
personas sepan todo y puedan entrar sin saber nada y saliendo saber cómo continuar cosa que en todos los cursos
que se hacen y que ves ahí disponibles no lo encontrás de una bueno explicar 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ándose 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 demá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 Sí pero la verdad no creo que te
de inteligencia incluso para esto la vas a tener que usar y bastante aunque no sea la tuya no tiene sentido nada de lo
que me estás 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 su consultas y demás y después Si quieres me la mostrás Dale eso es lo que pensaba
hacer por por qué tenes 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 joraca sos
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 Bueno te pusiste muy estúpido puedes dejar de intentar
asustarme qué te pasa salto vas a tener que usar la inteligencia veamos de qué soaz Ah bueno ya me cansaste sabes que
voy a llamar a la policía porque me [Música] tenes bueno comenzamos con el apartado
de subconsultas la verdad que no puede dormir porque anoche tuve Med un episodio extraño de hecho anoche vine a
grabar y realmente no pude porque se giró las 4 y pico de la mañana y sucedió algo medo extraño Me cansé mucho Y
decidí volver a casa salto pero acá estamos y ahora sí voy a grabar de vuelta el apartado de subconsultas bien
para entender lo que son las subconsultas 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
el 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 el product ID el product ID de cada producto que se vendió hasta ahí todo bien Okay 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
mientras que uno que se vendió 10 veces por ahí valía $200 y no nos dimos cuenta y estos hicimos una mala comparación
porque no teníamos datos entonces Cómo podemos hacer para porque a ver el product id1 es el mismo o sea este
product ID el 11 está haciendo referencia a este product ID 11 que es que es cabrales Pero qué pasa solamente
tenemos el produ ID no tenemos ni el nombre del producto ni la el ni el precio esto lo podemos llegar a
relacionar y podemos llegar a unir Uy tuo 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 las subconsultas normalmente las
subconsultas no son la mejor forma de relacionar tablas es decir algo que se llama joints que lo vamos a ver más
adelante pero primero Tenemos que pasar por subconsultas porque a veces es 100% necesario una subconsulta entonces la
tenemos que entender pero después aparecieron los joints y los joints nos permitieron avanzar mucho más pero bueno
vamos ahora ADO con la apado subconsultas porque todavía no vamos a ver joins vamos a ver subconsultas o sea
después de Sub consultas Sí vamos a ver joints pero primero tenemos que entender Qué son las subconsultas Cuáles son las
distintos tipos de subconsultas vamos a hacer ejemplos de subconsultas y cuando terminemos de entender llevar a la
práctica hacer ejercicios y demás vamos a encontrarnos con una problemática de las subconsultas y es lo que viene a
solucionar los joints Así que vamos en orden Okay bien una subconsulta en sql es algo completamente intuitivo por el
nombre subconsulta sub viene del latín dentro de o inferior a y hace referencia a una consulta que está dentro de otra
consulta en este caso Okay la palabra subconsulta significa que 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 estas subconsultas nos
permiten 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 nos 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 un columna dos columna 3es 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 uno y automáticamente esto se va a ejecutar Y
qué nos va a devolver una columna entonces estoy utilizando el resultado de una subconsulta para una consulta
principal ahora ahora lo vamos a ver bien eh a fondo Okay pero tienen que entender que eso es una subconsulta es
una consulta dentro de otra consulta que nos permiten hacer cosas mucho más avanzadas hacer mejor filtrado nos
permiten separar las consultas en partes más pequeñas son muy útiles Okay van a haber muchísima teoría acerca de las
subconsultas hay mucha teoría Okay pero básicamente el estándar de sql si no me equivoco eh habla de que solamente se
pueden meter 16 subconsultas adentro de una consulta pero por ejemplo my squel son si no me equivoco 61 y van variando
según el gestor de bases de datos Okay pero no se preocupe que eso ya lo vamos a ir viendo con el tiempo una cosa que
tienen que tener en cuenta es que las subconsultas solamente recuperan datos O sea no podemos hacer una subconsulta con
un insert un update sí podemos decir update subconsulta 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 por qué porque las subconsultas lo que hacen es devolvernos información Okay las subconsultas suelen
ser selects porque no puede ser algo que modifique o agregue la información a la base de datos o sea las subconsultas no
alteran la base de datos solamente la consultan 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 subconsulta y vamos a seleccionar lo que nos devuelve esa subconsulta también la podemos 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 usó entonces hiz una comparación Entonces es
una subconsulta en un Word después tenemos un from 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 from products
decimos selecci todo from la tabla virtual que creamos es como una sub ult ta que llamamos y creamos una especie de
tabla ya filtrada para operarla directamente y después tenemos en hing 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 es simple una una subconsulta de primer nivel es una subconsulta ad dentro de
una consulta una subconsulta de segundo nivel es una subconsulta adentro de una subconsulta adentro de una consulta una
subconsulta del Tercer nivel es una subconsulta adentro de una subconsulta adentro de una subconsulta adentro de
una consulta y así podemos seguir hasta donde se nos ocurra Okay también la podemos clasificar según sus resultados
devueltos tenemos por ejemplo subconsultas de valor único subconsultas de fila 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 no correlacionales pero no vamos a meter mucho de fondo en
eso nosotros vamos a clasificarla según su ubicación es lo más normal es una subconsulta weare una sub consultant
form De hecho cuando trabajamos técnicamente ni siquiera nos ponemos a preguntar eh Che Jorge a ver qué hiciste
no porque apliqué una subconsulta corr racional es extraño manejarse así normalmente dic No acá metí una
subconsulta en el form y ya está pero no decimos no porque es un subconsulta tipo ubicación no no decimos metí una
subconsulta en from metí una subconsulta en el having metí una subconsulta 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 Okay 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 order details el nombre del producto está en la tabla products entonces t que
utilizar este product 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 Cómo hago eso bueno acá viene la magia para empezar Vamos a
darle botón derecho acá y darle en duplicate tab esto más que nada para tener otra pestaña para poder trabajar
okay normalmente cómo haríamos para seleccionar el nombre bueno vendríamos acá y diríamos Select product name from
products okay 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 product ID lo compare con este
product ID y me lo de si yo por ejemplo le digo Word product ID = 11 me va a decir que el nombre es queso cabrales
Entonces cuando lo logre relacionar acá me va a decir product 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 product 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 Okay me va a tirar un error Por qué Y porque no puse la coma esto
cuenta como columna okay 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 eh esto mejor no ahí y esto
acá esto se llama identar el código 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í funciona ya eso ya lo saben okay Y ahí si se fijan me devolvió algo
más me acaba de devolver un nuevo campo a esto también le puedo a la subconsulta es decir a la al campo que me está
devolviendo la subconsulta le puedo poner porque yo acá también podría poner eh category ID por ejemplo Esto me
devolvería un error Por qué Porque no se olviden que acá van columnas el Select qué 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 qué me
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 category ID
entonces ahí me devuelve ambas en este caso no hace falta poner la coma Ahí va al final Ahí está y ahí me devuelve el
product name y el categorí ID en este caso no hace falta el categor ID pero quiero que sepan que se puede agregar
varios datos con varias su consultas en este caso le vamos a asignar el nombre Vamos a ponerle as nombre entonces de
esta forma ahora sí tenemos un nombre decente product ID quantity y nombre cuál es el problema siempre nos va a
devolver chiz 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 product ID puede ser el product ID 112 por ejemplo no eh la
cantidad de venta fueron de 32 y acá me va a decir el nombre del producto es chice eh Cheese chos chus y ahí todos
los nombres Qué pasa esto es para cada fila o sea para el próximo registro Okay 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 todo lo demás que nos devuelva esa columna no lo va a devolver Así es 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 hacer lo mismo que hicimos antes qué es lo que hicimos acá le dijimos Word product ID sea igual a
11 y ahí nos devolvió quees son cabrales entonces lo que tenemos que hacer es decirle que el product 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 Word product ID de hecho acá le vamos a asignar un nombre as p ID le ponemos un nombre chiquitito porque si
no después esto se nos hace muy largo y no podemos eh seguirlo entonces pongo p ID igual product ID Okay en este caso le
estoy diciendo que pid que es esto que está acá está haciendo referencia al product ID de la tabla order details y
acá Este product ID está haciendo referencia al order ID al product ID de esta consulta Por qué Qué estamos
seleccionando acá estamos seleccionando el product name de la tabla productos O sea que este product ID está haciendo
referencia a la tabla products mientras que pid está haciendo referencia al product ID de la tabla order details O
sea que estamos comparando el product ID de order details con el 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 pid y de esta forma estamos
Llamando al campo product ID que en este caso es este que está acá o que dice el alias estamos Llamando al campo product
ID de la tabla order details porque si no yo estoy simplemente Llamando al alias pid pero pid 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 la tabla order details y accediendo al campo pid después acá no hace falta que digamos
product product ID podríamos hacerlo porque estamos haciendo referencia a esta tabla pero como en esta en esta
tabla en esta subconsulta ya estamos haciendo referencia a product con este from no hace falta agregarle el product
y ya es suficiente entonces yo ju Esto me va a tirado 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 al máximo las subconsultas y ahora sí yo pongo details punto product ID si yo ejecuto esto Ahora sí tengo el
resultado y ahora sí me devuelve el producto la cantidad vendida y el nombre del producto qué jor que está haciendo
esto Bueno vamos a verlo de vuelta de a poquito seleccion el product ID listo el product ID 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 product name from products Okay de la tabla productos o ya no está más en
order details ahora está en productos donde order details product ID o sea donde el
product ID de la tabla que está por fuera de la subconsulta O sea la que es en un nivel la consulta común no la
subconsulta sino que de la subconsulta es decir el product ID de order details sea igual al product ID que como no este
no estamos haciendo referencia a ninguna tabla automáticamente el sistema entiende que está haciendo referencia a
la tabla products Okay entonces repasando estamos seleccionando el product ID y la cantidad de order
details pero estamos seleccionando el nombre Okay de la tabla productos en donde el order ID de esta tabla es decir
order details que es este que está acá coincida con el order ID de la tabla products entonces lo que va a hacer Es
okay esta tabla tiene un producto ID 11 Bueno vamos a seleccionar el producto con ID 11 y devolvemos solamente el
nombre que son cabrales y lo mostramos el siguiente 42 vamos a buscar el producto 42 y devolvemos solamente el
nombre listo Cuál es el nombre singapore hogy freed y eso así es como funciona esto y ahí acabamos de utilizar una
subconsulta De hecho voy a checar Como ya no me está entrando en la pantalla voy a achicar un poco la letra sé que
ahora sí se empieza a complejizar quizás les moleste 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 checarla un poquito nada más
voy a bajarlo a 21 y darle a save 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 d Entonces de esa forma acá pongo en vez de order details od y
cuando actualizo ahí funciona igual por qué porque le estoy diciendo Che la tabla order details poner el nombre de
od como ya sabemos les asignamos un nombre sí las tablas también se les puede asignar nombres entonces en vez de
decir order details punto ID le digo od Y ahí sí me queda todo en una sola linita 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 por qué Porque
cuando trabajamos con tablas usar el As es igual que decir el nombre de la tabla o sea ustedes pueden hacerlo como
quieran con el As o con los corchetes a mí me gustan más los corchetes me parece que es más 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 es
más ordenado porque di esto es una tabla y como que no se pierde sabe separarlo mejor y por lo menos en mi caso eh Me
gusta y es más legible Okay 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 fin y 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 y acá vamos a
devolver 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 eh 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 a situar en donde estábamos en el
ejercicio anterior Por qué Porque lo que vamos a hacer ahora va a solucionar el problema que teníamos antes de que
teníamos la cantidad total vendida pero no teníamos cuánto fue lo total recaudado es lo que hicimos antes en en
funciones de agregación vamos a cerrar todo y vamos a arrancar ar desde cero bueno primero lo que hicimos fue Select
product ID y el quantity de hecho lo que hicimos fue seleccionar la suma de la cantidad quantity as cantidad total o
cantidad sí cantidad vendida o total vendido mejor total vendido from order details hasta acá estábamos situados
antes okay 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 Group by product ID Entonces ahora sí estamos agrupando por producto cada producto va
a agrupar y sumar los valores es decir al agrupar por product ID tenemos el uno 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á Okay es como 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 es repasando lo que hicimos antes okay Ya lo sabemos pero lo
repasamos Esto me dobla 45 Por qué Porque la primer tabla de venta o sea el primer producto o sea la primer
transacción en donde se vendió el producto uno se vendieron 45 unidades por qué Porque en una se vendieron Por
qué Porque en una se vendieron 45 en otra se vendieron 30 en otas 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 zom esto ya lo sabemos Okay me
suma por categoría y me dice lo que se vendió por cada producto o sea si tenés tres transacciones y cada transacción
tiene 50 en total del producto uno vendiste 150 Esto es lo que está pasando acá Okay 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
okay además de obtener esto queremos obtener el precio 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 od product ID y ahora voy a agregarle
ese nombre od la tabla la cerramos Ahí está y acá ponemos od entonces de esta forma tiene que ser igual el product ID
de la tabla productos a el order ID de la tabla order details actualizamos esto y Bueno hay un error que es que me
olvidé el paréntesis para cerrar la subconsulta Ah ahora sí ejecutamos y ya está a esto le vamos a asignar un nombre
que es Price corremos y ahora sí tenemos el precio el product ID un o sea el producto Uno Vale 18 el producto 2s 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 qué podríamos hacer fácil le ponemos una coma y ponemos
paréntesis Esto no es como no es una subconsulta es una operación por eso pongo paréntesis porque es una operación
matemática no podemos hacer sub consultas u operaciones Matemáticas en este caso voy a decir el total vendido
multiplicado por price Pero si yo ejecuto esto no me va a dejar por qué porque esto se trabaja en el hing se
acuerdan o sea las funciones de agrupación se trabajan en el having 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
quantity multiplicado por price actualizamos y tampoco nos deja tenemos que volver a copiar la consulta y 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 subconsulta para 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 quantity 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 en 159 para el segundo en
341 para el tercero en 80 y así para cada registro Por qué Porque Z quantity 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 chequearlo order by total vendido es decir si yo ahora quiero 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ó
5725 pero es el que más nos generó no es el que más se vendió Pero qué pasa si yo ahora le digo ordenam Elo por el total
recaudado ejecuto esto y me dice que ahora el producto que más recaudó de hecho Vamos a darle un round round
porque me está mostrando resultados muy feos De hecho acá no vamos a usar el round Perdón vamos a usar el round en
total recaudado acá round ah cerr amos 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 se vendieron 239 unidades y recaudó
$2,000 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,000 vamos a ver cuál es el producto que menos vendió a ver o que digamos ya sabemos que el
producto que más cantidades 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ó Okay 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 lating lumberjack lager que recaudó solamente 0 obviamente es el producto que tenemos
que eliminar no solamente es el que menos 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 el producto que nosotros queríamos que era el más el que más recaudaba no el problema de las
subconsultas es que son muy pesadas trabajar con muchas subconsultas hace que sea un programa muy pesado y existen
un formas digamos mucho más óptimas para trabajar en las subconsultas que son los joints Pero bueno supongamos que ahora
yo por ejemplo quiero trabajar con condiciones quiero hacer eso quiero simplemente trabajar con con una
condición Cuál es la condición Bueno quiero decir que por ejemplo Esta subconsulta 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 por ejemplo esto ya lo vimos si venimos acá y ponemos Where
Es simplemente venir acá y poner entonces price mayor a 40 ejecutamos y sí 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 Okay la copio Ahí va la copié esto que está acá
lo borro y ahora no me muestra el nombre pero sigue tirándome errores qué hago uso la subconsulta ejecuto y ahí está
funcionando de vuelta qué acabo de hacer acabo de decirle Che no me selecciones la tabla precio porque no quiero que me
devuelvas el precio Okay no quiero que me devuelvas el precio solamente quiero que me lo uses para hacer una eh
operación de comparación porque Recuerden que el Word técnicamente lo que hace es esto vamos a ver qué es lo
que hace el Word el Word literalmente hace esto hace Agarra un operador y lo compara con otro operador obviamente en
el caso de los comparadores lógicos No si yo por ejemplo tengo esto esto Qué hace literalmente esto que está acá
compara este valor con este valor Okay pero esto puede ser una subconsulta también por qué Porque si las
subconsultas nos devuelven datos por ejemplo esta subconsulta qué nos devuelve nos devuelve un solo dato que
es el precio esta subconsulta para este registro product ID 9 qué 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 eh me devuelve todos porque sí 97 siempre va a ser mayor que 40 entonces
técnicamente siempre me devuelve pero lo que voy es que decir esto o decir esto en ese registro es lo mismo entonces las
subconsultas Recuerden que se Ejecutan primero O sea antes de ejecutarse esta consulta se ejecuta primero las
subconsultas por qué porque las subconsultas nos devuelven datos por ejemplo se ejecuta esto y el programa
después 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 se 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 es lo que estamos utilizando para comparar entonces si yo digo seleccionar
el precio donde el product ID de productos sea igual al product ID de order details me va a ha ver 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 de decirle mostrámelo 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 ademá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 toda esta su consulta simplemente poner
price y ahí queda muchísimo más fácil y ya está se ejecuta acá me olvidé una coma Perdón Ahí va y me olvidé acá 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 Okay Ya está ya me lo seleccionaste como me lo seleccionaste asignale 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á y 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 form Cómo podemos
usarla en el form simple Recuerden que order details Qué está haciendo Me está devolviendo una tabla entera es decir
esta tabla Okay vamos a ir parte por parte las subconsultas en el form simpl de esta forma repito order details es
por ejemplo esta tabla que está acá Okay esta tabla que está acá es es order details 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 rec 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 selecciona el precio de o más fácil seleccion me
todo from Y en vez de decirle products 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 copié esta y la pegué acá Select todo from esta tabla
por qué 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 Estoy Wow me lo
devuelve es una subconsulta en la que usé el from Por qué Porque dije seleccion me todo from esto y Ah yo
podía decirle solamente el price precio y me selecciona solo el precio no en este caso el campo price no está
recuerda en 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 Por qué 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 tabla que me devuelve los productos y el
total recaudado y todo y además me hace una un 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 order details ni solo
con prod tengo 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 devolverme el name O solamente devolverme el total vendido y ya está o
devolverme el name y el total vendido y me devuelve ambas e incluso puedo jugar un poquito Ahora sí puedo decir
Devuélveme el nombre y el total vendido de esta consulta Where o sea dónde el total vendido por ejemplo vendido sea
mayor a eh 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 form porque es como si creá una especie de tabla creada
artificialmente para jugar es una tabla virtual con la que después podemos operar esto nos sirve por ejemplo para
dividir esto 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 un me ocupe lugar y acá está acá puedo poner un Word podría incluso agrupar los de má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 bueno lo de como estaba antes porque si no me que me trar un par de líos eh 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 filtrarla 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 separar esto en problemas más
chiquititos que ir 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 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 okay Y que que van a terminar de entender del todo porque es
completamente necesario aprender joins bien supongamos que vamos a borrar todo esto okay Porque se nos hizo oblo
supongamos que nosotros queremos ver la cantidad de ventas que tiene un empleado okay Bueno cómo hacemos esto y tenemos
el apartado de orders la orden OK tiene un order ID y un employee ID el employe 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 a los empleados que lograron destacar del promedio Cómo puedo hacer esto Esto es algo que va a ser largo
okay Así que lo que Les propongo es vamos a hacer un ejercicio ap parteo de subconsulta porque repito los ejercicios
los Vamos siempre poniendo a mitad del curso 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 y hacer un apartado especial para un ejercicio de subconsulta pero
como es la introducción a los joints siento que se merece un apartado especial Así que vamos a hacer este
ejercicio con subconsultas bueno gente en realidad lo que vamos a hacer ahora no va a ser un
ejercicio con having sino que más bien va a ser Mostrar un poquito y llevar a la práctica eh el código eh para ver qué
es lo que pasaría si nosotros venimos trabajando con eh sub 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 que veamos sus consultas de la cláusula jain porque
realmente es lo mismo sigue siendo lo mismo sigue siendo una subconsulta y es una tontería porque hing es eh digamos
algo que nos permite trabajar con condiciones como el weare O sea que funcionaría igual que en el we Solo que
podríamos trabajar con funciones de grup 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 super 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
okay Que lograron vender más cantidad de unidades que el promedio no vamos a hablar de precios ahora no vamos a ver
precio después podemos hacer otro ejercicio con precio pero en este caso Solamente vamos a ver los empleados que
lo 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 okay Tengo estos dos datos Last name y First name de hecho vamos a
seleccionarlo al revés primero el nombre y después el apellido vamos a poner una coma acá porque no va a tirar 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 eh 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 a a la tabla order details le
vamos a asignar este nombre por eso pongo esto order details punto quantity Recuerden que la tabla order details
tiene este campo from orders en este caso orders la vamos a llamar o coma order details order details Y a esta la
vamos a llamar od Ahí está ahora parece muy complicado pero esto es simple estamos sumando eh todo lo que es las
cantidades estamos sumamos todas las cantidades del campo orders y del campo order details De hecho yo puedo hacer
esta consulta copiarla eh duplicar Tab y pegarla solamente acá y en este caso es or y es od por qué Porque od es el
nombre que le pusimos yo en vez de order details es od o de order de details me confundí ejecutamos y ahí tenemos
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 hacer es que este empleado coincida con el empleado actual de de la
fila de empleados y que este order ID coincida con el order de order details tenemos que crear dos coincidencias
Entonces vamos a ponerlas en el Word vamos a la anterior y vamos a decir abajo Ahí va de hecho vamos a separar la
su consulta Ahí vamos a hacer una especie de entación ahí va Word o pun employe ID es igual a
e. employe ID es decir en este caso Vamos a ponerle a esto el nombre e para que esta tabla se llame e a va de
employe Y esta es la primer condición Esto es lo que va a serc supongamos que tengamos el registro cuatro no el
empleado cuatro el empleado cuatro cuando esta subconsulta se va a ejecutar para cada fila sépanlo o sea cada fila
va a ejecutar esta subconsulta Qué significa eso que la fila número cuatro por ejemplo el employ ID va a ser cuatro
o sea que cuatro Okay esto sería cuatro tiene que ser igual al employ ID de la orden porque cada orden o sea por ahí un
empleado hizo 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 buen en
este caso no me devuelve nada porque puse or y es o d como habíamos visto antes Ah va en este caso fíjense que me
devuelve un número altísimo pero son las cantidades de hecho acá vamos a poner as unidades totales vendidas pero no le
vamos a crear V son unidades totales Pero qué pasa esto es altíssimo ningún empleado vendió esto Qué es lo que está
pasando y lo lo que está pasando Es que todavía no comparamos que el ord el order ID de esta tabla sea igual a el
order ID de esta tabla Entonces es como que medio que se está multiplicando está saliendo una especie de producto
cartesiano para eso tenemos que Otra condición que es and y ponemos or order ID tiene que ser igual a o. order ID y
de esa forma cuando ejecutamos up Qué pasa siempre errores siempre errores o no or od le puse od no sé por qué
pusiste or de alto Ahí va ejecutamos y ahora sí nos vuelve totales ahora sí tenemos a cuánto vendió cada empleado
perfecto logramos relacionar tres tablas employees orders y order details las relacionamos hasta acá está perfecto
bien algo básico el problema realmente viene ahora porque hasta ahora no tenían problemas el problema vamos a tener
Ahora cuando tengamos que usar el Word esto lo voy a poner acá si yo dijera bueno Word 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 totales mayores a 4
me lo va a permitir las unidades mayores a 100 me lo va a permitir está todo bien pero qué pasa si yo quisiera sacar un
promedio qué hago abg 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 hing bueno probemos grou by e employ o sea
agrupamos por employ id para poder usar el habin porque el habin solo lo podos usar con un gr no se olviden ejecutamos
Y qué pasa nos 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 tien que ser mayor a algo Okay Vamos a darle un Word 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 alguna función que nos permita 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
Okay el promedio de unidades totales pero este unidades totales no es este unidades totales es el unidades totales
de una nueva tabla que vamos a crear ahora recuerdan que el form nos permite crear tablas virtuales bueno Yo acá le
doy from vamos a crear la tabla virtual okay Ahí va from y lo que vamos a hacer en este from 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 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 seleccionar una subconsulta que vamos a
llamarla unidades totales Okay ahora vamos a crear esta subconsulta pero esta subconsulta nos va a devolver las
unidades totales Okay 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 a qué va
a ser igual la columna bueno va a ser igual a unidades totales me explico from Okay from employees que en este caso le
vamos a poner E2 porque e1 es como este que está acá Okay no queremos alterarlo y las vamos a agrupar Group by E2
employe ID ahora qué va a tener la subconsulta 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á dentro en este
espacio y ahora vente 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 work
con un grow by y de una forma bastante interesante que es muy larga y es muy crota digamos es bastante fea no no
bastante fea est forma si realmente ven lo que estamos haciendo es un montón pero vamos a explicar paso a paso Qué
pasó 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 Okay 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 que hicimos acá vieron lo mismo que hicimos acá para
obtener esta columna lo mismo eh es lo mismo que 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 es
50 lo va a devolver y esto se va a convertir en el promedio el promedio no sé cuánto es pero supongamos que el
promedio es 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 Acabamos de terminar este
ejercicio lo logramos Eh bueno no es rapidísimo técnicamente porque con joins lo podríamos mejorar 1000 puntos pero
véanse 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 no aprendieron y que la gente que incluso trabajó con sql va a decir o sea Wow 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 de del tema de optimizaciones de la Sub consultas 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 nos 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 eh 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 joins usan índices o sea acá es como ejecutar dos consultas Okay esto que están viendo
ahora es como ejecutar dos consultas mientras que un joint internamente funciona como si fuera una sola consulta
con índices Entonces es todo mucho más óptimo y se vuelve todo mucho más rápido porque los motores de bases de datos
tienen esta fun 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 o el tiempo que tarda en cargar esto con los joins y de hecho tenemos que aprenderlo porque si
no saben joins 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 otros 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 joins 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 joints lo que vamos
a ver ahora es la forma básica de los joints Cómo utilizarlos cómo es lo más común y lo 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
una operació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 tablas 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 trabaj trabajan y otro listado con personas que estudian cabe Resaltar que la lista de personas que
estudian muestran 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 joins 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 a las personas que trabajan pero si estudian que muestre su información también podríamos devolver
un listado de personas que estudien y trabajan al mismo tiempo o sea que no nos devuelva 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 sin más podemos hacer con los joins Okay tenemos varios tipos de joins pero lo más común es
clasificarlos en cuatro tipos de join los Inner join que son los join comunes de toda la vida Los left join los right
joins los full joins y esos son los cuatro más comunes pero también tenemos el Cross joint 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 Inner join que no usaban la palabra clave Inner
join 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 from employees vamos a a esta
tabla asignarle e from orders coma orders o entonces de esta forma estamos seleccionando todos los datos de
empleados y de órdenes okay 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 employe ID = o pun employee ID Por qué Por qué qué es lo que nos está
devolviendo esto de forma interna si yo ejecuto esto nos devuelve un producto cartesiano como todos los joins la
mayoría de los joints nos devuelven productos cartesianos Okay pero Qué es lo que está haciendo acá y cómo está
funcionando esto de forma interna internamente esto lo que está haciendo es ejecutar para cada columna Okay un
valor si yo esto Lo sacara qué me devolvería fíjense que ahora me está devolviendo un 196 filas Pero si 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
employes tiene 10 empleados y la tabla orders tiene 196 órdenes y el número de antes era 1960 O sea que es como si
agarrá la cantidad de órdenes y la cantidad de empleados si las que la única diferencia de hecho podemos
ver acá abajo que hay 100 la misma cantidad de filas la única diferencia es que estamos usando el Cross joint
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 taa 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
supónganse que yo quiero usar un Cross joint acá no Bueno listo usamos un Cross joint unimos estas tablas con un Cross
joint hacemos exactamente esto ponemos seleccionar from colores Cross joint tamaños qué nos va a devolver bueno
básicamente lo que va a suceder acá es que se van a recuar entre todos o sea se van a dar todas las posibilidades una
fila va a devolver rojo y chico otra fila va volver 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 de HK la fila siete va a devolver azul y chico la fila ocho va a volver azul y mediano y
la fila nueve 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 joint 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 joint 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 grande eso
es el producto cón se une todo y se junta todo lo que hacemos con esta condición que estábamos usando con esta
forma de hacer un Cross joint porque esto hasta ahora como es ahora es un Cross joint es un joint crusado es un
joint sin condición esto que está acá es un joint implícito eh de los Inner joint Por qué Porque 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 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 multi 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 Okay el Cross join ni lo vamos a ver porque casi que no lo usamos realmente el Cross join Casi ni se usa
ni siquiera se tiene en cuenta O sea ni siquiera se tienen cuenta nada pero está bueno que reconozcan y sepan Cómo es el
Cross joint para que cuando alguien diga no es un Cross joint sepan a queé nos estamos refiriendo Endo Pero esto que
está acá es un Inner joint 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 join y le decimos al Inner 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 Word tenemos que usar algo
llamado on el on es la condición o sea cuál va a ser la condición de Unión Cuál va a ser la condición que me va a
permitir unir las tablas y simple Solamente vamos a devolver las tablas en las que el employee ID y el employee 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 es decirle no solamente las órdenes en la que el employe 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 employe
ID es 5 y al lado va a mostrar los datos del emploe ID 5 solamente va a devolver la segunda orden si el emplo ID es 6 y
al lado va a mostrar los datos del emploe id6 Esto es así entonces si subimos vemos que dice employe ID 5 los
datos la orden de vuelta se muestra el employe ID porque básicamente lo que hacemos acá es seleccionar uno de los
campos que lo vamos a eliminar ahora vamos a seleccionar simplemente otros nombres 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 eh join un Inner
join que el Inner join Es como decir join de hecho si le sacáramos el Inner esto funcionaría Exactamente igual
porque perdón el Inner le saqué el Inner join es solamente si le sacamos el Inner funcionaría igual porque en sql eh Inner
join es lo mismo que un join es como decirlo no es lo mismo decir un join que Inner join pero cuando nos referimos a
un join si alguien dice hice un join es que hizo un Inner joint Okay de hecho hasta dentro de esta Norma está
especificado la mayoría de gestores de bases de datos soportan esto pero mi recomendación es usen Inner join no
pierden nada en vez de usar solamente un join está bien poner el Inner adelante para mí aumenta la elegibilidad del
código mejora la elegibilidad del código para poder entender mejor cómo funcionan los joints se me ocurrió armar una nueva
tabla por qué Porque como los Inner unen Campos okay como los cner unen 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 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 joints 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 br Data podemos venir acá darle en create
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 di El Comando create Table acá lo que decimos es bueno qué tabla querés
crear Bueno voy a crear una tabla llamada rewards lo que se me ocurrió a mí es por ejemplo la recompensa de del
empleado no hay empleados que van a tener recompensas y otros empleados Puede que no ganen ninguna Okay entonces
rewards ahí está mejor porque alunos un empleado puede tener una recompensa dos recompensas o ninguna entonces Está
bueno que lo podamos ver así después abrimos paréntesis Por qué Porque los paréntesis adentro de los paréntesis
vamos a pasarle toda la información de la tabla Entonces es créate un una tabla 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 integer los
integer son inss enteros lo que ya vimos antes vas a tener otro que va a ser el employe 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 qué joraca ganaste que también
va a ser integer 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 fue el premio bueno eso lo va a decir este campo y después va a ser el mes month
month significa mes en inglés y esto vamos a 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á no estamos diciéndole que ninguna es la
clave primaria Entonces vamos a poner una coma acá y de hecho vamos a separar todos los valores 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 primary key Okay
hay una clave primaria acá es que dejen el espacio okay Porque por un lado la palabra primary es para una cosa y Ke es
para otra key es para decirle que va a ser una clave mientras que primary es decir que va a ser una clave primaria ya
saben de esto que estuvimos hablando el K 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 a esta
columna y estamos diciéndole que esta columna va a ser una K primaria que además es autoincrementable Ya está si
ahora ejecutamos esto Ah me va a tirar un error porque alguna me mandé Le pfi con la coma acá no llevo una coma
es reward ID espacio autoincrement Ahora sí ejecutamos Y acá se acaba de crear la tabla si venimos a brows Data acá
podemos ir a rewards 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á nuestra 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 recib premios vamos a hacer eso para que podamos después ver
cómo funciona ese campo es esa fila Mejor dicho así que para eso vamos a darle insert into rewards qué queres
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 employ ID vamos a registrar
la recompensa y vamos a registrar Por último el es ahí va y qué es lo que vamos a registrar Bueno vamos a
registrar los values y acá vamos a poner los valores y los vamos a separar con coma se abren valores Okay valor coma
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á eh pueden cerrar esto yo por ahí no les dije eso vieron que yo encogí la letra en vez de
cerrar esto si me preguntaran 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 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 les 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 queda lindo andar cambiando la cámara y demás
mejor este espacio reservarlo para la cabeza y Listo Ya está bueno ahora sí acá vamos a inar cinco registros ya
sabemos que esto es una tupla que nos pide información bueno el primer dato que nos pide es el employ id bueno el
employ ID va a ser tres al de empleado tres le vamos a dar $200 y va a ser el mes de januari Esto va esto es enero el
segundo mes va a ser el empleado dos que le vamos a dar 0 extra y va a ser el mes de februari febrero el tercero va a
haber ganado el empleado cco eh ganó $50 en el mes de march marzo Repito está en inglés yo lo pondría en español pero
como la base de datos norwin que nos descargamos está en inglés para mantener la relación y mantener una un sentido de
hecho eh lo hacemos en inglés y no solamente eso sino que fíjense que yo en en la vida real pondría ID empleado Okay
con un guion bajo pero acá ponen employ la primer palabra con mayúscula y después el ID lo ponen todo con
mayúscula la i 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 esa forma de escribir que ellos mantienen Entonces nada que tengan
sentido que eso 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 si tienen 30 bases de datos con un estilo no van a llegar usted y decir
bueno Quiero agregar esta tbl la chiquitita no no no lo hacen Como lo hicieron los demás desarrolladores y
demás Aunque la mayoría de veces son todos despotado y cualquier cosa pero bueno una base de datos bien hecha Eh
Esto se se hace bien no se suele hacer normalmente Bueno voy a seguir insertando Vamos a darle al primero
eh 80 en el mes de april El empleado cuatro no el empleado Sí el empleado s ganó el el empleado 8o Mejor dicho ganó
el mes siguiente con 1610 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 nul y la cantidad es nada porque si 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á br Data y veo la información que hay en rewards me aparece estos datos que 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 joint que ya lo vimos pero vamos a volverlo a ver primero vamos a seleccionar todo from employees
Okay employees acá nos devuelven todos los datos de los empleados esto lo hicimos 1 veces Ya está ya lo sabemos
ahora le vamos a asignar un nombre a esta tabla para que después cuando hagamos un Inner join 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 la condición
de que el e. employ ID sea igual a r. employ 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 recompensa 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ó 00 Janet en el mes de febrero ganó 0 Andrew en el mes de marzo ganó 250 Steven en abril Nancy 280 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 cardinal idad Y si ustedes saben de bases de datos de cer o
un a c o un 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 vos cardinalidad Okay que de hecho es el siguiente punto que tenemos que ver después de joins esto si
lo hiciéramos con subconsultas lo que haríamos sería ejecutar el join cruzado solamente que a pesar de que nos dé este
mismo resultado o sea con sus consultas pod podí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 técnicamente si tuviéramos 1000 órdenes
y 10 empleados para cada empleado se van a traer las 1000 órdenes y después se va a filtrar mientras que de esta forma o
sea digamos sería en total 100000 10.000 filas que se trajeron para después filtrarse versus esta forma que se
habrí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 índices más
rápidos si los join están 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 joints y con índices la
velocidad sea mayor bueno así de fácil son los Inner join 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 representar los
Inner join Okay los Inner join lo que hac básicamente si tenemos una tabla a y una tabla B lo que hacen los Inner joint
es básicamente solamente mostrarnos las coincidencias Ahí va O sea si yo por ejemplo digo Select todo from tabla a 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 a Inner join tabla B me devuelve todo y ahí tenemos un join cruzado por más que diga iner join
tenemos un join cruzado después usamos la 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 key y ahí 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 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 lado 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 de B 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 a
pero si algo de la tabla que pueda rellenarse con b se rellena eso es lo que hace un left joint entonces lo que
tenemos que hacer es simplemente reemplazar Inner por left y así de fácil si yo ejecuto Esto me devuelve esto
fíjense que me devuelve nul nul nul nul nul y los demás Campos me lo devuelve O sea me da 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 devuel todos los datos me devuelve el First name porque yo le estoy diciendo que
solamente me devuelva el First name si no me devolverí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 First name por eso Solamente me devuelve el First 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 los pone como nul pero los campos que sí coinciden me los pone por ejemplo Nancy
ganó una recompensa Andrew también Janet también margaret no por eso me pone nul Steven ganó una recompensa y y en el mes
de marzo Michael y Robert no Laura ganó una recompensa en el mes de mayo Ani 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 wr join es decir en vez de
devolver los datos de la tabla a 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 si hay un empleado asociado devolvemos esos
datos del empleado asociado Lamentablemente en la base de datos sqlite 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í tabla a tabla B el right joint funciona
así tabla B tabla a pero la estructura es la misma O sea que si lo que tenemos que hacer que esta que es la tabla B
tenemos que unirla con esta que es la tabla a 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 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 es estamos haciendo una especie de right joint porque Recuerden
que el right joint 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 right joint solamente que esto no es teóricamente correcto porque
a ver lo que estamos haciendo ahora es de repente esta ya no 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 right joint esto a los desarrolladores se lo tenemos que
especificar porque cuando un programador venga esto y diga Ah pero qué hizo acá un left joint no sé qué es lo que hizo
Bueno le dejamos un comentario simulando un wr join invirtiendo las tablas rewards y
employees simulando un right joint invirtiendo las tablas rewards y employees Entonces de esa forma el
programador que lea Esto va a decir Ah Okay qué está haciendo Acá está simulando un r joint o sea que esta
sería la tabla b y esta sería Habla por qué Porque le estamos dejando al programador que sepa que estamos
simulando un r joint okay Entonces cuando lea el código un programador vea y lea este código de la base de datos
que nosotros le dejamos a decir ah Listo o sea esto no es un left joint O sea si es un left joint pero el objetivo de
este left joint es simular un right joint O sea que si yo este código lo llevara a otra base de datos simplemente
intercambio esto por esto y acá le pongo right porque en otras bases de datos como mysql sql server y demás funciona
con right No hace falta que demos vuelta los nombres pero en sqlite no en sql funciona de esta forma y es igual
efectivo 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
join que tampoco lo acepta skill light pero vamos a ver cómo simularlo Entonces de esta forma hacemos un right join Y si
quisiéramos hacer un left join Okay simplemente hacemos lo otro que es poner a la tabla a primero la tabla a es
employes la tabla B Es rewards como ahora estamos poniendo la tabla B en el lugar de la tabla a estamos invirtiendo
y estamos simulando un right joint es técnicamente eso es bastante simple ahora se preguntarán Cómo puedo yo eh
trabajar con un full joint primero Qué es un full joint bueno el full joint es el último tipo de joint Ya vimos Cross
joint Inner join left join right join ahora no falta el full join el full join es lo que vimos al principio el full
join es devolveme 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 joint Ya que en realidad un Cross joint nos
viene a devolver como esto pero multiplicado o sea es como una multiplicación en lugar de sumarse están
como que multiplicándose mientras que el full join nos devuelve todo ahora vamos vamos a ver cómo funciona el full join
pero básicamente el full join funciona así Union 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 qué joraca es Union y cómo funciona y
Qué pasa si pongo Union all Union all me devuelve más datos por qué Union all me devuelve más datos tengo Union all y
Union entonces tengo ein tengo Nancy repetido tengo Andrew repetido tengo Janet repetido Ah 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 qué
es esto de junion bueno gente esto que está acá fue un full join Así se hace un full join Union es una cláusula que nos
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 estamos 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
right joint Esto es técnicamente lo que estamos haciendo en esta consulta sql estamos uniendo dos consultas en la que
una tiene un right joint y una otra tiene un left joint para obtener el full joint que es la unión completa de las
dos filas Y en vez de ponerle unal 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 Union y que es Union all
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 y que podamos después entender cómo sucede acá me encanta como siempre
aprovechamos cosas para explicar todo o sea Ah okay No funciona el joint 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 teníamos que saber aprovechamos todas
las posibilidades me encanta bueno Union es una cláusula que se utiliza en en sql para combinar dos o más tablas pueden
ser la misma tabla eh 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 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 fila y Union 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 si yo por ejemplo hago una consulta que sea devolveme 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ía y ahora
desapareció y se convirtió en una fila por eso acá cuando usábamos Union al 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 el Union 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
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 de Union ya que estamos con algún ejemplo supongamos que tenemos dos
tablas una para referirnos a los alumnos con alto yq y uno para referirnos a los alumnos especiales que pueden ser
personas con síndrome de down eh 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 quedaba muy largo Así que nada igual se entiende No En
definitiva a 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 Union al uniera la consulta que me devuelve esta tabla y la consulta que me devuelve esta
tabla lo que obtendría con un Union al sería Juan 2 Jaime esperen que voy agrandar un poquito la letra para que me
entre Juan 2 Jaime 3 Lucas 4 Pedro 2 por qué porque me está devolviendo todo lo que me devuelve esta fila y después
aparte me devolvería Mateo J Lucas 1 y hendy 2 estos serían todos los datos que me devolvería el Union al Por qué Porque
me devuelve la suma de las dos consultas como tenemos la misma columna simplemente se suman Okay 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 Union puede ser Union o Union all tienen que tener la 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 pueden tener 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 que otra columna sea curso y
nombre no porque están devolviendo tipos de datos diferentes entonces con una devolvemos alumno y grado y con otra
devolvemos alumno y grado tienen que ser iguales y el unal 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 cuatro porque nos devuelve el Lucas 1 creo que algunos habrá notado el error pero yo no lo noté pido
disculpas Ahí está porque claro acá dice Lucas 1 y acá Lucas un no el cuatro lo saqué del cuatro de cualquier lado en
cambio el Union lo que hace es Ah okay Acá hay dos filas que tienen la misma información o sea alumno Lucas alumno
Lucas grado uno grado uno a tenemos la misma Data vamos a eliminarlo chavón qué hace esto Bueno lo elimina Entonces si
el Union all nos devuelve estas ocho columnas cambié de lugar esto para que quede mejor así puedo graficarlo de una
forma más apta Ahora sí mientras que Union all nos devuelve ocho resultados Union nos
devuelve siete resultados Por qué Porque unal nos devuelve todas ahí ya ahí ya vimos cómo funciona unal nos devuelve
una 2 3 cu 5 6 7 8 mientras que Union dice Ah Okay 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 eh las personas con más iq no quiero que me traigas dos veces a la misma persona si la misma
persona tiene el mejor iq y está entre los mejores alumnos mostramela una vez no me la muestres dos veces porque no
son dos personas diferentes Es solamente una porque cuando diga y cuántos alumnos hay Cuántos alumnos hay en total hay
ocho no pero hay siete no hay ocho Entonces el Union es correcto para este caso por eso en este caso estamos usando
el Union Por qué Porque si esta fila vamos a venir acá y la vamos a ejecutar si esta consulta nos devuelve 10 filas y
al lado nos devuelve la información de la recompensas y esta consulta de abajo nos devuelve seis filas que lo hacen al
revés y al lado Me devuelven 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á 3 1 1 2 1 2 o sea básicamente son tres
datos rellenos uno nulo tres datos rellenos da igual de 100 creo que ahí está era más fácil de 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 es la misma información o sea Union lo que hace es literalmente unirnos las
Union al Perdón nos une las consultas Pero Union 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
limpitos con sus resultados correctos para hacer un full join lo que hacemos es utilizar un Union no un Union all
algunos utilizan un Word y agregan la cláusula de que no tiene que ser nulo usan un is null o is not null eh pero la
realidad es que esa es una mala forma si ustedes ven que simulan un full joint con un Union all y utilizan otros Campos
no va porque es como que es lo mismo en realidad pero esta es una forma más limpia muchas veces si ustedes de hecho
le preguntan a chat gpt vamos a preguntar a chat gpt a la versión cuatro vamos a preguntar a la mejor versión de
chat gpt le vamos a preguntar simula un full join en sq van a ver qué es lo que nos tira lo ejecutamos y nos dice esq no
tiene soporte nativo para full joint Pero puede simular usando left joint y Union junto con right joint que también
se simula con left joint hasta ahí está correcto es lo que nosotros hicimos simulando un full joint en sql me
encanta porque es lo que nosotros hicimos es lo mismo bueno est de with recursive es algo que no voy a ponerme a
explicar Pero esto repito no es la forma correcta por qué porque esto lo que hace es
guardar una especie de valor entonces después guarda esta consulta como una subconsulta sin ejecutarla o sea es como
no está ejecutando esta consulta simplemente la está guardando acá y después acá sí la está ejecutando pero
como digo ven acá usa un is null que si de hecho nosotros lo probamos vamos a probar este código Uy se me ejecutó sin
querer bueno Vamos a darle control H para que nos permita reemplazar voy a reemplazar tabla un por employees ahí va
y acá le damos enlace Y de esa forma reemp aamos todo y voy a reemplazar tabla dos por rewards en este caso es
Table 2 No creo que era Table Ah no tabla dos perfecto y le damos en remplace all y ahí se reemplazó ya está
voy a buscar ID y lo voy a reemplazar por employ ID reemplazar todos se meó Qué onda no pude guardar 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 así el programa ya está cerralo 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 joints 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 right
joint y después hacer un Union invirtiendo el valor de employe ID y rew para simular un full join vamos a ver
qué nos dice sí tienes raz son me disculpo por mi respuesta anterior la forma más simple y eficiente de simular
un full joint en sql es es usar un left joint con un Union Aquí tienes un ejemplo de cómo hacerlo Ya está ya está
nos dio la razón chat gpt le ganamos a chat gpt en eficiencia igual muchachos amo chat gpt No dejen de Probar con chat
gpt en lugar de probar googleando pasa que son herramientas diferentes no porque chat gpt Es una herramienta de
una ia en cambio Google es respuesta de gente no Entonces es distinto creo que la opción de de plataforma como Google
no se va a eliminar nunca no porque uno no es lo mismo que te responda a 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 ia y que nos responda Google solamente que hoy la gente no está acostumbrada a que
te responda 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 lo dije hace un montón la gente no va a interactuar más estamos en
plena Revolución hay que adaptarse muchachos Por qué se piensan que voy a ser un curso de Inteligencia artificial
y que lo voy a lanzar porque la ía está haciendo una locura Recuerden que si quieren comprar esteas remeras Ah otra
cosa no lo anuncié todavía estoy rec contento pero y tengo una remera de team javascript una remera de team python una
remera de código y la remera de chat 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 que 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 eh 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 programa programador es un punto y coma por eso es el signo del programador
es un literalmente es un punto y coma también lo voy a vender pero tienen que esperarme a 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 al
Canal además Rest 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
escritorios que sean regulables al ta altura cosas posta que no 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ómico materiales que según la temperatura cambia el color o según la luz puede brillar en la oscuridad porque
nosotros los programadores somos muy de trabajar en la oscuridad entonces podemos agarrar la taza y que se nos vea
igual a pesar de que no lo estamos viendo también el teclado por ejemplo anticafé no va a ser un teclado a prueba
de agua un teclado prueba de café que es más fuerte y nosotros se nos suele volcar no Entonces nada tengo pensar un
montón de cosas pero quiero que esto crezca y la única forma de que crezca Ed me ayuden Así que nada perdón por el
spam s que est no debería serc esto en un curso bueno gente ahora sí ya que explicamos lo que es Union Union al ya
que explicamos lo que son los joins y demás estoy super contento porque ahora pasamos a otro apartado super importante
que es el de cardinalidad se acuerdan que al principio del curso Estuvimos viendo algo que son los diagramas
entidad relación si se acuerdan nosotros entramos a este enlace al de wikiversity entramos a este diagrama entidad
relación okay Perdón abrir imagen en 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
acá está todo bien pero si se fijan acá tenemos algo que dice 1 n 1 n 1 n 1 n n1 n1 n1 qué jorak es esto de n1 1 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 cardinalidad tenemos que hacer códigos diferentes 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 de lleno
con cardinalidad que estoy emocionado por explicar bien Bueno ahora nos toca
hablar de cardinalidad la cardinalidad Okay 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 Okay es una la representación de una entidad sabemos que las tablas en bases de datos tienen
datos organizados en Fil y columnas ya lo vimos está todo excelente por ahora también sabemos que las tablas se
relacionan por un foreign key normalmente no se pueden relacionar de más formas Pero la forma más común De
relacionar 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 super 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 u un a uno 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 o 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 1 n pero si lo vemos desde la perspectiva de libros y autores es n1 o sea básicamente es cambiar de
lugar las tablas y obtenemos el resultado pero la relaciónes 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 a m 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 ser tomado 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 a las claves
primarias de ambas tablas es decir la tabla 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 inscribir Solamente una vez Entonces la relación directa de estudiantes con cursos es
muchos a muchos pero teóricamente necesitamos poder manejarla y bueno cuando trabajen con bases de datos se
van a dar cuenta que manejar relaciones de esta forma no generan conflictos Así que para eso no nos queda otra que crear
una tabla intermedia que en este caso se llame inscripciones la tabla intermedia tiene que tener una relación n1 con la
primer tabla que en este caso es estudiantes y 1 n con la segunda tabla o la tabla B que en este caso es cursos si
se preguntan por qué es jora que 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 normales que 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 permite hacer consultas más eficientes y tener 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 solitos se van a ir 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 entiendan a la primera de hecho mi mayor consejo a la
hora de dar cursos es hagan prueben y cgu enla 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 la una de
las formas de representar la cardinalidad primero vamos a representar la cardinalidad simplemente uniéndolas
con una n n1 m y para que entendamos bien cómo funciona esto primero sabemos que customer ID se une con orders por el
customer ID es decir tenemos esta esta columna de acá que se une con esta columna de acá después tenemos employes
que también se une por employee ID y tenemos shiper ID que se une por shiper ID ahí tenemos las relaciones ahora si
tuviéramos que definirlas cómo las definiríamos bueno Esto es una relación 1 a n Por qué bueno tendríamos que
ponernos a pensar Cuántos customer 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 employees 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 empresa se puede encargar del envío de un producto una De cuántos productos se puede
encargar una empresa de envío muchos n y ahí como estamos viendo esta es la forma más normal De relacionar una tabla 1 a n
es la más común 1 a n es la forma más común y como la escribimos es 1 dos punos n y significa uno a muchos 1 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 order details A cuántas ordenes pueden pertenecer o sea
los detalles de una orden A cuántas ordenes pertenecen Y si yo tengo una lista con los detalles de una orden
pertenece a una orden Entonces los detalles los el order details tiene que hacer referencia a una orden porque 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 brow Data y vamos a order
details una orden puede tener el mismo order ID 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 como yo voy a un super y compro Es
como si yo voy al supermercado y compro leche y huevo tengo dos detalles tengo el detalle del producto del huevo y
cuánto eh se vendió Cuántos juevos 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 por qué Porque
order details hace referencia solamente a un producto Okay hace referencia a un producto ID pero un product ID puede
tener varias órdenes es decir si yo vengo acá por ejemplo acá tenemos el product 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 product
id11 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 un
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 y categorías si se dan cuenta un producto puede tener solamente
un supplier ID Así que ponemos uno pero puede haber varios productos con el mismo supplier ID o sea el producto
tiene un proveedor hay una persona que provee el producto No puede haber dos proveedores del mismo producto ha
solamente un proveedor de producto pero un proveedor te puede proveer varios productos entonces p tenemos la n acá
ponemos suli ID 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 Okay 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 es una relación muchos a uno y ahí nos quedó el diagrama que si se
fijan y entramos a a la a la imagen oficial es exactamente la misma 1 a n 1 a n 1 a n lo mismo que hicimos nosotros
1 a n 1 n 1 n 1 a n otro más 1 a n después n a un o sea orden ti a producto es n a 1 y estos dos también son n a 1 y
lo mismo que nos quedó acá en el p nos quedó igual na a1 Y estos dos na 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 repetir la n En realidad ni idea
para qué se pone la m pero es muchos 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 es que si vamos a un diagrama entidad relación esto lo tienen que saber pero se voy a explicar muy
rápido esto que está acá se acuerdan que ya lo explicamos lo explicamos antes lo único que no explicamos es el tema de
ven que arriba dice 1 n Ahí está eh está descripta 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 en 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 la cantidad depende del artículo y del pedido es un poco jugar un poco con esto yo los invito a que
investiguen un poquito más la verdad que no me voy a poner a explicar esto en profundidad porque podemos hablar
también de relaciones débiles y más cosas pero no es el curso okay Este es un curso ya ya estamos explicando cosas
que nadie más explica con hablar eh digamos con normalización de bases de datos con lo que estamos viendo y y
ejemplos más complejos de cardinalidad qué 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ían 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 Entonces de esa forma está las
relaciones si esto lo tuviéramos que representar lo haríamos con rombito Okay este rectángulo que está acá que nos
sirve para especificar relaciones un cliente realiza pedidos pero lo que quiero que veamos es esto que está abajo
que por qué me anoté esto que está acá si venimos y buscamos bbdd modelo relacional bbdd 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 Este modelo la
representamos como ya hasta ahora la vimos 1 n 1n 1n no hay problema pero si vamos a los diagramas de este tipo
cuando queremos representarlos gráficamente que es lo que vimos no aparece 1 a n no aparece n a 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 Martin
se llama así es modelo entidad relación pero hay diferentes tipos de notación tenemos el modelo entidad de relación
con la anotación de Chen que ya lo vimos el mod entidad de relación con la anotación de Martin 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 y One es básicamente un tema de un tema de cantidades uno dice que hay una cantidad de algo y 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 cular o sea una persona puede tener varios celulares Incluso le podemos
llevar al caso del lápiz puedo decir Tengo un lápiz Okay y me refiero que en este momento Tengo un lápiz Pero puede
haber más una persona puede tener varios lápices pero en este caso es Tengo un lápiz el otro caso habla de una
instancia es decir solamente puede haber un único lápiz en general entendés 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 emple ADO 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 eh 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 order 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 puede haber es muchos y después está
Zero o manyi en este caso por ejemplo son las órdenes mismas no es el order details 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 customers 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 Es solamente una orden por 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 Por
qué 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 ya está 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
ahí está 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 representa estamos 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 Ahí va acá con
producto vamos hacer lo mismo product 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 las 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 order details y acá la relación es
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 Por qué 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 a como máximo un proveedor está
lloviendo se largo a llover fascinante se escucha lluvia Qué lindo bueno Y acá es 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 mucho 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 solo hacen referencia a un producto pero puede haber varios
productos o ninguno con order details es decir como máximo Cuántos productos puede tener order details solamente uno
como máximo Cuántas order details puede tener un producto y puede no tener ninguno o puede haber uno y lo mismo con
products 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 Martin que es otro tipo diferente de anotació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 eh 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 a uno a
ser 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 me 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 es un proceso dentro de de 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 Cómo 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 atributo 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 Establece que no debería haber valores
repetidos en una fila para una clave primaria es decir cada atributo 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 primer 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 sea cada atributo que no sea un kei 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 es 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 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 del pedido ID 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 pedido se mantendría con los siguientes atributos ID del pedido ID del cliente fecha del
pedido ID del producto y cantidad del producto 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 de su clave primaria
sino que tiene que depender completamente Es decir 100% de la clave primaria y no de os atributos después
tenemos la tercera forma normal Establece que cada atributo 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 cómo
dividiendo los atributos en varias tablas Por ejemplo si ties 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 Parece que
la segunda forma normal y la tercer forma normal son similares pero la diferencia está en el tipo de
dependencias que intentan eliminar en cada caso ambas intent inan eliminar una dependencia Okay 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 la redundancia y la anomalía de datos después tenemos la cuarta forma normal que 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 Qué 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 que 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 otra columna de la misma tabla sé 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 forania compuesta de
esta manera se eliminan las dependencias multivaluadas y se evita a 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 subcategorías a su vez la
tabla de subcategorías adaman las subcategorías y su correspondiente categoría de esta manera se evita la
redundancia de datos y se eliminan las dependencias multivaluadas la tabla de productos ahora contiene solo la
información específica del producto y la tabla de subcategorías almacena información sobre las subcategorías y su
correspondiente categoría ven ahí con ejemplo 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 pondría incluso a 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 por qué porque las Quintas formas normales son para base de datos muy grandes
normalmente con digamos normalizar hasta la tercer 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 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 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é tratan las formas
normales pero ahora vamos a ver cómo aplicarlas primero hay que identificar las tablas y atributos para esto hay que
bueno analizar 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 Qué 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 la 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 está la segunda después
está la tercera después está 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 porque 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 dependencias 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 a intentar
normalizar a la segunda forma normal que en este caso también cumple con las condiciones de la segunda forma normal
porque cada atributo 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 dependencias 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 de datos Está normalizada y
queremos chequearlo Ese es el proceso por el que podemos pasar podríamos seguir por la cuarta quinta pero repito
no hace falta con normalizara la tercera está bien De hecho los desafío a hacerlo analizando la base de datos que vimos en
el curso hasta ahora de norwind entran a su gestor de base de datos o mejor dicho van al diagrama Okay van al diagrama de
de base de datos norwind y ven y lo intentan analizar para que entiendan mejor pero suponiendo que haya alguna
tabla que no esté normalizada tendríamos que saber cómo normalizar la porque hasta ahora vimos todos ejemplos con
tablas normalizadas o El antes y el después pero vamos a ver 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
ID de venta fecha ID del cliente nombre del cliente dirección del cliente ciudad del cliente estado del cliente ID del
producto nombre del producto precio del producto y cantidad para normalizar esta tabla podes realizar los siguientes
pasos primero identificamos las claves primarias como ya sabemos en este caso la clave primaria sería el atributo
venta ID o sea ID 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 hay
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
atributo 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á los siguientes
atributos ID de ventas fecha ID de cliente ID de producto precio del producto cantidad y ahí quedó mientras
que la tabla de clientes tendría los siguientes atributos ID del cliente nombre dirección ciudad y estado Y por
último nos queda 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 eh normalizada pero más allá de eso ya lo logramos ya lo entendimos hay mucha
teoría al respecto la verdad que hay muchísimo hay gente que dice incluso que ni siquiera hace falta usar foreign key
porque hacen que un sistema sea lento hay gente que digamos opta por manejar completamente otros diagramas otros
estilos de 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 eh 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 okay
entender las relaciones entender lo que hacemos Yo sé que ahora están mucho más listos que Hace media hora atrás en el
curso si tuvieran que crear una base de datos Porque entendieron estas cosas Si ahora un cliente les pide que crean una
base de datos de su empresa lo podrían hacer Y podrían hacer un diagrama que explique cómo lo hicieron y podan 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 y entender bien a fondo todas las cosas Porque de nada sir 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 para qué te sirve si las consultas van a tardar más tiempo no vas a saber dónde encontrar los datos los
shins van a tardar muchísimo más en ejecutarse va ser un desastre para qué te sirve ahora para qué te sirve saber
sql saber todo todo todo estructuras y demás si cuando vas a una empresa te muestran un diagrama no lo sabes leer
por eso este curso no es como que nos vamos 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
entienden de normalización Todavía faltan muchísimas cosas más pero más o menos ya tienen con que arrancar y ya
tienen con que salir a 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 intentaran modificar la base de 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 y estén mal para eso usamos bloqueos y transacciones Y hay
muchos más problemas que por los que lo usamos pero quiero 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 sus propi páginas 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 organizándolos correctamente o sea se encarga de realizar una
organización mucho más efectiva para que cuando hagamos consultas sean 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 sabe que están indexadas para poder buscar específicamente en esos Campos
normalmente esto a nivel interno funciona con árboles B tablas Hash y otras tantas cosas más que bueno mapean
los valores de las columnas o la la o las columnas indexadas en la en la tabla no hay que olvidarse que indexar una
columna es decir asignarle eh digamos un índice a una columna básicamente es una estructura de datos se convierte digamos
en una estructura de datos que nos permite realizar búsquedas inserciones de datos y que hagamos todo más
eficientemente alguno de los casos con los que podemos optimizar nuestras consultas o el rendimiento de las
consultas pueden ser por ejemplo con cláusulas Word si por ejemplo utilizamos una condición en el we 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 toda to 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 muchos más casos okay
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 primary key los primary key 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 modifiable es crear un primary key reward si yo esto lo saco Okay y lo vuelvo es decir
si yo acá por ejemplo hago que esta clave no sea autoincrementable okay Yo puedo sacarlo y ahora tengo un campo que
no tiene un ID eh autoincrementable primario es decir ahora rwar ID ya no es un primary key simplemente es un campo
más por qué Porque ya no tiene asociado ni ninguna clave primaria ahora lo que puedo hacer es bueno volverla a agregar
y acá tengo digamos de vuelta el campo primar key agregado hasta acá No hay ningún tipo de dudas AC Acá está 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 índices ya sabemos que los índices primarios justamente son estos
índices que solamente nos permiten identificar el el la fila o sea ese 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 eh 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 a la fila completa única y nos permite
identificarlo Pero hay índices que No necesariamente tienen la 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 en 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 yo voy a venir acá y decir vamos a seleccionar products no vamos a
seleccionar todo from products Where product name Igual chice hasta acá ejecuto 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 la ejecuto tarda 5 milisegundos 5 5
c Cómo podemos hacer para volver a product name una un índice bueno Por qué Y porque si usamos siempre esta fila
para las condiciones Si O sea si básicamente Siempre vamos a hacer un filtrado por product name y es un 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 create Index nombre Okay vamos a decir cre Index nombre o nombre sí product name Ahí va create
Index product name o e name O sí 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 qué 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 cuatro a veces me retorna cinco a
veces seis pero ahora pasó de tardar siempre 5 milisegundos a tardar cuatro Qué significa esto imagínense consultas
que son larguísimas gigantes pesadas con este tipo de de de estrategias podemos alivianar un montón el costo Porque que
una consulta tarde más en procesarse normalmente implica que utiliza más recursos porque para encontrarlo tiene
que hacer más procesamiento y ahí es cuando terminamos teniendo más consumo del debido bueno los índices nos traen
esta solución Cuál es la diferencia bueno que lo que hicimos antes create Index nombre del índice on product
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 eh la verdad es que yo vamos a vamos a crear vamos a venir a tabla 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 eh 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 apellido o sea básicamente es como hacer
una tabla primaria eh pero no es primaria es única o sea hacer que cada registro sea único pero
no quiero que sea un K primario Por qué Porque el ky primario va a ser employ ID si yo por ejemplo tengo una lista de
usuarios el key primario va a ser el user ID pero si cada usuario tiene un correo electrónico cada correo
electrónico tiene que ser único entonces necesito crear otros kys únicos además de El del del principal bueno para eso
se utiliza el Index supónganse que yo voy a crear un índice acá en Last name bueno venimos acá y simplemente
cambiamos el nombre por ejemplo vamos a decir full name no O name más fácil name y acá dice products vamos a poner
employees y el índice que vamos a crear lo vamos a crear en First 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 por qué
porque esto permite Campos nulos o sea ahora que la tabla eh esta tabla por ejemplo F name 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 una un campo que tengo como referencia para índices 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 puedo hacer con unic unic 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
No se podría registrar el mismo campo o sea el mismo valor para este campo si tenemos una tabla con 1000 nombres de
usuarios vamos a tener el primario que es autoincrementable que es 1 2 3 4 5 6 7 Se va a auto incrementar hasta el
infinito Pero tenemos F name que no va a ser autoincrementable vamos a poder poner los valores que querramos pero
cuando un valor se repita la consulta no nos va a insertar el registro porque es un valor repetido o duplicado y el unic
no permite duplicados si lo pusiéramos sin así sí pero como estamos diciendo que es único ahora ya se parece Más al
primary key no es una clave primaria porque la clave per yaos que es diferente la cl pera tiene el objetivo
de identificar filas enteras Pero esto simplemente tiene el objetivo de hacer que es una consulta más eficiente que
tenga mejor rendimiento y además hacer que cada campo no 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 qué para que el mail no se repita
Pero si yo quiero 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 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 dalto pero que no
se pueda registrar juntos Lucas dalto eso lo podemos hacer a nivel de capa de aplicación cuando hagamos aplicaciones o
o páginas web y demás lo podemos hacer en backend o puede ser un primary key primario para que la clave primaria sea
doble puede ser un key 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 agrego 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 a ser Index que va a ser compuesto cuando yo lo ejecuto ya se ejecutó sin errores ahora veo que si yo entro a la
tabla employs 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 insert 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 Por qué Porque me está diciendo Che flaco hay una constante
única que está fallando First name y Last name Son 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 dalto 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 tira un error esto lo que me
permite es acabamos de crear una una un índice compuesto ahora con puedo hacer una búsqueda con estos dos 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 primar ki no 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 o sea sin el unic perdón que puede
tener Campos duplicados eh digamos puede tener valores nulos pero digamos no sirve para optimizar que sean más
rápidas las consultas y después tenemos el único el único es como un primari 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 la consulta más
eficientes es igual que un índice ordinario el que se puede duplicar el que solamente la diferencia es que ahora
podemos asegurarnos de que no va a haber Campos duplicados y después tenemos el compuesto que puede ser primar K
compuesta puede ser un campo único compuesto o puede ser un ordinario normal eh que no sea único eh compuesto
eh No importa Qué tipo de K sea 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 no es otro 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 sean más
rápidas las consultas Recuerden que esto que está acá que dice Talk 0 MS esto significa que la consulta tomó 0
milisegundos en entrarnos un resultado por eso antes cuando ejecutamos cosas como por ejemplo estas Select from
products esto ven que dice que tomó 11 milisegundos bueno toma ahora toma cuatro porque la segunda normalmente
toma menos toma 4 milisegundos porque está diciendo que en 4 milisegundos nos dieron 81 filas Antes nos tomaba 5
milisegundos o sea que si antes nos tomaba 5 segundos Ahora nos toma cuatro si nos tomaba 50 segundos Ahora nos toma
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 ejecuta en 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 sean más rápidas las consultas y de después
tenemos a los índices ordinarios que solamente quieren hacer que las consultas sean más eficientes y más
rápidas Y por último los compuestos que es para evitar combinaciones con las características de los 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 mucho espacio en disco 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 con la tabla se actualizan todos los índices no la información solamente los índices O sea que tener índices
básicamente puede disminuir el rendimiento de 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 complejo dej Es mantenerla sobre todo 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 lo 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 efectiva más rápida y que tenga un mejor rendimiento
la consulta bueno normalmente eh 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 en la cláusula Word
o en un joint y demás es esos Campos que lo utilizamos con esa esas digamos cláusulas de filtrado de condiciones y
demás a esa columna le podemos aplicar un índice Por qué Porque 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í tienen una alta cardinalidad Por qué Y porque si trabajamos con tablas que tienen muchos índices y ahí
ya no nos queda otra o sea es normal no O sea si tenemos una una tabla que tiene 35,000 í es por ejemplo tenemos una
tabla que tiene product ID employ ID categor ID suppli ID y 1000 cosas que son ID esos ID deberíamos crear un Index
Por qué Porque el ID es un foreign key y Recuerden que los foreign Keys deberíamos hacer que sean eh tablas
Perdón índices Por qué Porque a los foreign keyan índices porque son lo que usamos para unir tablas y demás Así que
sí en los foreign key 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 como foreign key vamos a agrandar esto porque
no se ve nada ahí va porque están establecidas como foreign Keys ves acá le estamos pasando la información de que
son foreign Keys que es otro tipo de índices cuando un índice se pone como clave forania en este caso es foreign
key Esto va a funcionar más rápido digamos que que un campo normal porque es un tipo de índice Entonces esta clave
forania nos permite acelerar este proceso el de employe ID customer ID y demás en la tabla orders nuevamente voy
a hacer botón derecho modify Table y voy a venir acá al costadito de todo vamos a ver nuevamente las claves primarias
porque abajo de la columna tenemos creado esto que dice foren key lo estamos agregando como clave foránea y
esto nos permite que las búsquedas sean más eficientes y más rápidas Así que nada ese 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 el la desventaja de tener que andar lidando con el rendimiento de quear 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 otra
tabla mejor que va a ser order details Esta es creo que la que más registros tiene Así que si le damos en order
details esto que está acá se va a ejecutar completo Si ahora por ejemplo uso un we we quantity sea mayor a 10 lo
mismo esto se va a ejecutar join orders o en este caso vamos a poner od quantity para hacer referencia correctamente a la
tabla es les aviso por las dudas es una buena referencia hacer referencias a las tablas Okay entonces para hacer
referencia de una mejor forma siempre le asigno un nombre no es de Pesado sino que es correcto asignarle un nombre a
una tabla Porque después es correcto hacer referenci a tablas correctamente para evitar conflictos no Word order
date Okay vamos a poner un order date sea mayora en este caso vamos a decir vamos a copiar sea mayor que esto por
qué porque quiero que me devuel los productos que se vendieron después de esta fecha ejecuto y acá me devuelve
todo todos los productos que se han vendido después ven todos los Pero esto que te aces nos devuelve una fila
básicamente sin fin porque nos devuelve básicamente un cruzado no nos devuelve un al no aplicar la condición no nos
devuelve correctamente lo que queremos Así que vamos a crear más condiciones o pun order ID es igual a
od order ID ahora ejecutamos esto y técnicamente ahí debería funcionar qué pasa y tarda 24 milisegundos en
ejecutarse ahora tarda c ahora cuat ahora c ahora och ahora cin más o menos tarda en promedio 5 segundos en
ejecutarse no es mucho 5 S 5 7 nu bueno Cómo podemos hacer que sea esto más rápido y estamos usando dos Campos order
date y quantity acabamos de identificar que como los usamos mucho estos Campos si estos Campos los usáramos para muchas
más consultas para muchas más cosas y demás ahí podemos volar los índices okay 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 quantity
y ahí acabamos de crear este índice y además vamos vamos a poner un punto y coma y crear create Index precio
orders precio no perdón no es precio me confundí es date order date Ah order date en este caso es fecha fecha
Recuerden que lo ide 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 in x o idx que significa índice el nombre de la tabla order details y acá pongo el campo
quantity entonces de esta forma yo cuando lo voy a leer o cuando quiero hacer referencia a un índice no toca
andar diciendo A ver cuál es el nombre que le puse Cómo llamé a este índice te vas a acordar por qué porque sabes que
siempre pones índice el nombre de la tabla y el campo si yo sé que está aplicado acá el campo Yo sé que está la
tabla order details entonces digo Index order details quantity 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 si yo ejecuto esto
pum 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 le pfos creímos que agregar índices podía servirnos en este
caso y agregar índices no nos sirvió p vosta no siempre agregar índices es bueno a veces realmente no nos mejora de
hecho fíjense como pasó de 5 milisegundos 8 5 88 a 59 5 o sea podemos decir que hasta no se empeoró no lo
sabemos Pero puede ser que es no se 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 con 25 vamos a eliminar los índices que de hecho vamos a eliminarlos directamente desde acá
vamos a en vez de eliminarlos ahora si queremos eliminarlo 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 índices vamos a ver Cuánto tarda la consulta antes tardaba
25 en promedio bueno ejecutamos y tarda más 37 36 37 Qué significa fíjense Cómo aumentó el tiempo eliminamos los índices
y el tiempo de la consulta tardaba tardó un 30% más 30% 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
eh obtener un resultado de la consulta mientras que con índices tardamos 25 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 ahorró 36 milisegundos pero esta consulta No la vamos a usar y vamos a usar la consulta
anterior para qué 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 ingeniárselas para lograrlo como acabamos de hacer recién pueden obtener resultados magníficos porque esta es la
forma correcta Okay 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 investigo 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 cier del curso quiero resumir para
que usted pueden entender todo y darle un mejor cierre así que bueno hasta acá llegó este apartado de índices vamos a
ir con el siguiente tema 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 su consultas Bueno cuando hicimos sus consultas vimos lo que era una tabla
virtual no eh va muy por arriba lo vimos vimos que una subconsulta Nos podía devolver una tabla que iba a ser
utilizada por una consulta principal bueno eso una especie de tabla virtual okay las vistas son algo parecido son
tablas virtuales una vista se crea sobre una consulta Select que se ejecuta sobre una o o varias tablas puede ser las
vistas Okay como tal no neamente almacenan datos en sí mismos O sea no es como que la cada vista que creamos
almacena un dato sino que es 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 video más corto del curso literal va a ser 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 que nos trae los productos con un
producto ID mayor a 50 que de hecho vamos a hacer producto ID 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 un
ni el nos interesa solamente el product ID nos interesa el product name y el price nada más que eso nos interesa
solamente estos tres Campos Bueno qué pasa cada vez 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 sus consultas joints Bueno qué puedo hacer hago lo
siguiente vengo acá arriba y digo create View productos simplificados as y esta hacer la consulta Entonces ejecuto esto
y ahora producto simplificado fíjense como cambio de color está almacenado como vista de hecho si venimos a
database structure podemos ver que acá dice views views productos signific eh simplificados acá me sobró un índice en
nombre o products le podemos dar botón derecho y delete ahí va 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 chao
pero yo la voy a volver a ejecutar para tenerla de vuelta ahora productos simplificados es una vista qué podemos
hacer con esto simple Ahora yo puedo venir y decir Select productos simplificados de hecho ya hasta me la va
a ofrecer como opción el dbms ejecuto De hecho no ejecuto voy a poner todo from productos simplificados y la puedo 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 tal una nueva tabla sino que están haciendo una
referencia o sea 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 que tienen que saber Es que
cuando sqlite encuentra eh o la mayoría de las bases de datos encuentran el nombre de un producto Okay que se parece
a una tabla porque Qué pasa si yo por ejemplo a estaa a esta vista la hubiera nombrado eh No lo sé por ejemplo employ
no Qué pasa si yo hubiera nombrado a la vista employs Bueno lo que pasaría es que generarías un conflicto y no sabría
A qué elegir Porque si la vista se llama emploe 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 ejecutar esta consulta cuando ejecutamos esta consulta
va 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 View y acá yo Les recomiendo usar la cláusula If exists productos simplificados por qué
el If exist bueno tenemos dos posibilidades ponemos Drop View productos simplificado y de 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 si yo acá le pusiera If
exist y ejecutara esto Ahora no me va a tirar errores Por qué Porque está verificando que exista antes de
eliminarla para que no nos tiene un error si estamos haciendo una consulta la que queremos verificar que exista o
que no antes tia un error usamos esta cláusula Y dalto entonces por qué no usamos siempre ifex sist en vez de usar
solamente Esto bueno porque If exist 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 hac dos pasos hace uno Por
ende es más rápido pero igual la diferencia no deja de ser mínima Okay pero si saben que van a crear si están
100% seguros que van a crear una vista y que la vista está creada y que después la van a borrar esta es la forma que se
usa normalmente Okay Drop View pero que sepan que If exis también está bueno y ya está el tema vistas ya terminamos
realmente no había mucho más que ver era muy le dije que iba a ser el video más cortito del apartado Así que ahora
tenemos que ir con lo siguiente es el tema de los bloqueos y las transacciones qu es bastante rápido bastante simple y
creo que también este teorita no va a ser muy muy largo va a ser bastante cortito eh No tanto como las vistas pero
es un tema que eh 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 a código de hecho por ejemplo bloqueos como el for
update sqlite no lo soporta Pero porque no necesita soportarlos en realidad pero si el tema de las transacciones vin y
demás Porque después cuando uno lo lleva a código internamente ente así funciona el sistema que uno crea con skite o con
las bases de datos en general entonces Está bueno que veamos cómo cómo funciona internamente en sql el tema de 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 tampoco lo soporta vamos a ver el
concepto vamos a ver muy por arriba cómo son y cuál es la forma de reemplazarlos 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 Cómo 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 las bases de datos para poder manejar mejor el los accesos concurrentes a la base de datos
es decir cuando muchos usos quieren hacer al 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 tuviera este tipo de bloqueos no y ambas personas quisieran
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 tengos que aprender a manejarlo Okay lo mismo con saldo de la cuenta si yo por ejemplo le pago a una
persona algo yo yo tengo una cuenta bancaria y la usamos 10 personas la cuenta bancaria tiene $100 no entonces
cada uno manda $100 al mismo tiempo qué pasa la cuenta la va a tener en -1 - 100 y eso no debería poder pasar Bueno lo
manejamos con bloqueos en eslite 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 bloqueo completo para que ninguna otra conexión pueda escribir en la base de datos pero a su vez sqlite 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 en skite shared lock o el bloqueo
compartido en el que básicamente Nadie puede escribir Okay 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 reserved
lock o el bloqueo reservado Esto es lo mismo que lo anterior o sea básicamente es un bloqueo 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 bloqueo 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 base de datos que es el bloqueo exclusivo que es Cuando una
base de datos perdón cuando estamos escribiendo 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 el bloqueo compartido solamente estamos leyendo y
no queremos que los demás puedan escribir pero sí leer con el bloqueo reservado estamos escribiendo y no
queremos que los demás puedan escribir pero sí leer con el bloqueo exclusivo que es el último estamos escribiendo
Pero no queremos que los demás ni lean ni escriban es por suerte maneja los bloqueos bien en la mayoría de los casos
pero si quieres optimizar cierto aspecto podés optimizar el rendimiento de losos es decir los puedes modificar y y
manipular como quieras en sqlite lo que se utiliza para contrar los bloqueos y las transacciones Ok que es este nuevo
término que aparece es estos tres estas tres cláusulas que son Bin rollback y commit no sé si alguna vez escucharon
Che haces un Me tias haces un comit acá la base de datos Bueno ahora vamos a verir lo que son estos términos al fin
Si yo pongo Bin Okay vin esto lo que hace es Iniciar una nueva transacción nosotros podemos poner vin transaction o
podemos poner nada puede ser vin transaction o nada así así está perfecto y acá yo puedo decir por ejemplo delete
from products okay wor cero porque si no hago esto Esto me va a tiar un error el delate tenemos que Agar una condición
Que es una consulta que esto es para evitar esto normalmente antes no estaba pero es para evitar que las bases de
datos tengan pérdidas de datos bestiales ahora qué pasaría si yo quisiera hacer un upgrade por ejemplo voy a hacer un
update product set product name ig Peón Word product name ig ch cuando el product name llame ch vamos a cambiarlo
por Peón Okay si ejecutamos esto y le damos comit que es la otra posibilidad el comit lo que hace es asentar el
cambio rollback no asienta el cambio comit asienta el cambio Si leos comit 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 pón Pero qué pasa si yo lo hubiera dado ahora que tenga un tason lo
ejecutamos y cuando venimos al código ejecutamos de vuelta me dice pes son Por qué en vez de decir Peón ya no se
ejecuta bueno esto ya es una un tema de condiciones Ahora tiene que decir peson porque le pusimos Peón antes e amos esta
consulta y si la ejecutamos se cambia No ejecutamos actualizamos sí 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á tazon no cambió O sea si ejecutamos esto est taz son vamos a ejecutarlo de vuelta a
ver qué pasa sigue siendo tazon Por qué Porque con el rollback lo que hacemos Es okay Te equivocaste con alguna de estas
cosas volvé para atrás esto más que servirnos 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 comit si yo esto Lo sacara de hecho la consulta
fuera esta okay Y ahora ejecuto esto Esto me devuelve dalto por qué Porque se hizo el cambio Okay me está eliminando
me está eliminando el dalto O sea me lo esta modificando De hecho si yo además de a esto le pusiera un punto y coma y
le agregara vamos vamos aer una cosa Vamos a darle rollback a esto y esto que está 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 Word y
acabo de decir que todos los productos se van a llamar de alto ejecuto esto y si venimos a ejecutar esta consulta Holy
shit acabo de perder la base de datos la acabo de perder Ah no para 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 tazón
sigue acá Así que a tazón sí lo voy a cambiar por chis Así que a tazón vamos a venir acá y decirle bueno product name
igual ch Word product name tazón porque no quiero que se llame tazón quiero que se
llame ch Porque al principio ese nombre es que tenía antes tenía el nombre chis yo voy a copiar esto si yo acá lo
ejecuto va a quedar abierta la transacción acá puedo hacer todo lo que puedo hacer ahora después si quiero lo
puedo vol para atrás entonces si yo pongo roll Back 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
chice como antes pongo rollback vuelvo para atrás porque inicié una transacción ejecuto se vuelve a llamar tazón ahora
cómo sería el contrario ya lo vimos comit ejecuto esto okay cerramos ejecuto se llama chice Ahora quiero a centrar el
cambio bueno comit con un comit asentamos el cambio y decimos Che comit tiene que estar Sí o sí porque con comit
le le decimos a la base de datos modificame la estructura interna y guardar la información en el disco
actualizamos vamos a ejecutar la consulta de vuelta y nos sigue diciendo ch Por qué Porque ahora la información
Se asentó y ahora sí esto se llama ch 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 dalto si hubiéramos dado commit ya no hay vuelta
atrás todos los productos llaman dalto 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 perd darla y demás Ese es el poder del de Iniciar una transacción
no que si iniciamos una transacción Yo vengo AC hago vin 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 commit y se guarda si sé que me mandó una caga 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 y hay un
error ahí Qué pasa si sacá saldo 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 Por qué 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 Bin actualizo el
producto y puedo verificar Okay si vengo acá si hago un s 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 okay Entonces hac lo siguiente esto salió correctamente sí Okay Entonces ahora sí ejecuta todo
completo con un comit y acentar la información a la base de datos ahora yo le digo Che me modificaste el nombre
correctamente Uy no le puse Z Okay hacer un rollback volver para atrás y volver 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 las funciones definidas por el usuario o las
user 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 los procedimientos almacenados y cómo eso puede ser la
intro a las funciones almacenadas por 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 Okay es simplemente una introducción porque
nadie hace transacciones cuando hace consultas desde una base de datos O sea sí 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 esto es más 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 vin acá
solamente quería que entiendan el concepto de cuando iniciamos una transacción todo lo que hacemos ahí se
tiene que ejecutar al mismo tiempo y si algo falla podemos o cerrar la transacción o continuarla pero eso es lo
que nos da la posibilidad las transacciones es como abrimos un contexto nuevo en el que todo lo que
hacemos si algo sale mal podemos decir y no importa dejamelo igual Aunque haya salido mal o podemos decir no no si algo
estaría mal volve para atrás tenemos la posibilidad de decidir eso es lo que nos permite ahora si
c hagamos de hecho sqlite 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 comit 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 hablar
rápido el tema de los conceptos que es y creo que no sé si el de procedimiento 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 que es uno de los últimos que vamos a
ver bueno a ver qué es un procedimiento almacenado un procedimiento almacenado es como un 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 Okay y que podemos ejecutar en cualquier momento es como una especie de recetario
no en una base de datos a ver básicamente Imagínate que vos tenés una consulta y cada vez que tenés 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 era 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 la base de datos Porque no es como que ejecutas directamente
algo en la base de datos sino que estás Eh digamos accediendo a la base de datos de 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
Okay que puede almacenarse en el servidor de la base de datos y que las podemos utilizar cuando querramos para
ahorrar código y que sea todo más eficiente eslite por otro lado es una base de datos en bebida y es bastante
ligera el tema es 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 del 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 skite como tal es parte del proceso de la aplicación skite no
soporta procedimientos almacenados porque tampoco necesita hacerlo por por sus características de hecho es muy
criticada por eso pero sí lo soportan por ejemplo bases de datos como My squel pogre y demás en sql por ejemplo lo que
hacemos para trabajar con procedimientos almacenados es no lo lo hacemos directamente desde sqlite sino que lo
hacemos desde el backend O sea desde el lenguaje anfión desde python cualquier lenguaje hacemos digamos esta estos
estos procedimientos almacenados loscos directamente en el backend o sea básicamente lo hacemos a nivel
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 de skite okay 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 procesos
almacenados A diferencia de nuestros gestores de bases de datos como los que ya mencioné cuando trabajamos con skite
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 sqlite puro es decir sqlite se terminó site por lo menos nativo no vamos a entrar más a un
browser de sqlite es decir sqlite browsers y vamos a entrar pero no vamos a entrar de la forma en la que venimos
entrando ahora no vamos a ir a la parte execute sql y vamos a ejecutar código sino que ahora vamos a trabajar con
python sí muchachos me temo decirles que llegó el 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 eh de la misma forma
que podemos almacenar una 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 que es lo que normalmente hacemos cuando queremos
crear una conexión y vamos a unir python con skite 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 user defined functions
y hayamos entendido Cómo conectar python con sqlite 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 esite esta práctica laboral real se puede hacer en
cualquier otro trabajo en cualquier otro lugar y es muy necesario y para cualquier app viene de madre ya
vamos a llegar ahí Así que ahora vamos con el siguiente apartado que es el de user defined functions 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 cambié 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 user defined functions en la
podemos abrigar con el udf básicamente es una función que puede ser utilizada por sqlite 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 devolvernos una salida
okay Pero además tiene que cumplir un requisito tiene que estar registrada en sqlite 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 anfitrión es
cualquier lenguaje con el que podamos eh digamos Llamar a la base de datos y a través de sql modificar 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 sqlite 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éanse lo Okay si llegaron hasta este punto del curso de sqlite 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 los que hice en el canal el de
python sin duda ltima 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 p ya Se volvieron del Team python podemos
avanzar bueno para arrancar le damos en New file a visual Studio code que también básicamente si no quieren ver el
curso de python no importa véanse por lo menos la primera hora que explicamos los conceptos muy básicos de python cómo
instalar visual Studio code y las características y demás okay Entonces vamos a visual Studio code vamos a
python file y voy a crear un archivo que lo voy a guardar cóm eh 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 la base
de datos de norwind ustedes tienen que guardar donde sea así no tenemos problemas después cuando llamemos al
archivos desde python voy a ponerle udf punp Por qué udf Porque significa user defined functions que es el tema que
estamos viendo ahora bueno para arrancar simplemente importamos la librería sql 3 Ahí va y vamos a crear una variable que
lo que va a hacer va a llamar a Esta esta este módulo y decirle que se conecte Okay 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
northwind db que es el nombre del archivo si yo vengo reservado para el sistema y acá tengo norwin Okay 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 las
funciones Normalmente se crean 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 2 pun N * N * N Qué joraca hace esto bueno primero una
función lambda que es el equivalente a funciones flecha en javascript Bueno solo que bueno es diferente la
estructura pero es como la forma de simplificar funciones Okay vamos a decir que Square 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 * n por N O sea n cbo 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 * 10
* 10 eh De hecho en este caso Vamos como Square es cuadrado y no es cubo vamos a simplemente dejar n por n para qué
complicarla 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 acab voy decirle a ver pasame 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 devolver 144 me devuelve 144 perfecto la función funciona correctamente Bueno ahora lo
que tenemos que hacer es registrarla en sq L para registrarla en sql lo que hacemos Es Llamar al método create
function y lo que hace este método es decirnos Che a ver en sk Cómo quereres llamar a la función porque o sea acá en
python la deí llamar esquare pero yo la podría llamar en sq cuadrado o potencia o como se me 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 pedir al usuario un solo parámetro Y por último
me va a decir y buo 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 Square en este caso es esta función entonces primer parámetro 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 qué vamos a crear en este caso esquare 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 hago una consulta a la base de datos
eso para que pueda obtener una respuesta tiene que recibir los datos procesarlos bueno en python tenemos algo que es son
los cursores que los cursores son objetos que lo que nos permiten hacer es decir Bueno mira eh 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 es esa información formateada ya eso se llama cursor cómo creamos un cursor bueno decimos cursor
va a ser igual a con. cursor es una un método de la conexión de hecho podemos crearlo simplemente con como si fuera un
método y ahora tenemos el cursor lo que vamos a hacer es decirle cursor execute esta función execute me está diciendo
Che a ver ejecut me una consulta okay Bueno lo que voy a hacer es poner dos puntos perdón eh dos triple 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 chequearlo Pero cómo lo chequeamos fácil le decimos a cursor Mejor dicho creamos una variable llamado
results que es resultados que va a ser igual a cursor pun fetch all fch all va a decir Bueno mira execute va a ejecutar
esta consulta y la va a almacenar en cursor okay Ahora cursor tiene esa información bueno fetch all la obtenemos
Entonces ahora el cursor pun fetch all nos va a devolver resultados qué es lo que vamos a mostrar en pantalla le damos
print result y ahí si le damos print en results es results en realidad ejecutamos y esto nos debería devolver
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 verlo bien porque esto es extraño qué nos devuelve Esto bueno este método lo que nos
devuelve es un una lista eh de tuplas con cada uno de de los valores nosotros creemos bien la información Qué vamos a
hacer Bueno tenemos dos opciones una importamos import pandas as 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 dataframe entonces decimos que el
dataframe results o más fácil results dataframe va a ser igual a pandas datata frame results Entonces ahora si
mostramos el dataframe lo que nos debería ver es algo mucho más ordenado tenemos el el precio tenemos la unidad
acá tenemos el precio tenemos la categoría el supplier ID tenemos la información que queríamos Okay ahora que
tenemos esto ya acabamos de ver bien Cómo es el tema de trabajar directamente con python no pero acá acá Tenemos que
tener en cuenta algo esto lo que hace el cursor es abrir un objeto y básicamente nos permite leer y eh 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 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 Qué 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 óptimo nos 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 eh la conexión ya la cerramos Ya hicimos lo que queríamos ya está en caso de que hayamos hecho un update un
eh insert o algo que modifica la base de datos necesitamos guardar el cambio recuerdan Cómo guardamos el cambio
Exacto con un comit Por qué Porque un Select solamente selecciona Pero cuando trabajamos con python esto lo que hace
es Iniciar una transacción Okay 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 vin lo hace
automático una vez que iniciamos la conexión y y hacemos todo aparece el bein ahora tenemos que darle un commit
Porque si yo hago un cambio en la base de datos y borro todo from 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 comit de esta forma lo que estamos haciendo es asegurando perdón eh
y dando como un comit 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 liberó los recursos y ya tenemos esto óptimo pero todavía hay algo más óptimo
que podemos hacer y es trabajar con el administrador de contexto Wi que también lo hemos visto en el curso de python
para los que no recuerden Wi lo que hace es trabajar directamente con contextos en este caso 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 eh
variable que es con que va almacenar la conexión de esta forma podría hac lo siguiente yo esto podría borrarlo todo
vamos a hacerlo todo desde cero para que tengamos el ejercicio mejor hecho Wi y acá vamos a decir sq 3. Connect y acá lo
mismo northwind db esto Qué 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 create function creamos la función quare un parámetro Square y esto ya era lo que hicimos antes después lo
mismo creamos el cursor en otros lenguajes de en otras eh bases de datos podríamos directamente usar un Wi para
manejar el cursor pero es lamentablemente no lo permite pero que sepan que en otros se puede entonces el
cursor como un con. cursor cursor execute y acá lo mismo de hecho lo que vamos a hacer para tener esto más
ordenado es usar un query en este caso vamos a decir que el query Okay es igual a y acá le pasamos la consulta 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 results va a ser igual a cursor fetch
all 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 convertirlo a dataframe results DF = results pd Perdón punto dataframe results Entonces ahora
sí si mostramos acá abajo print results DF cuando actualizamos si venimos y vemos qué onda dice result a 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
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 eh El nuevo
saldo Qué pasa si las dos consultas se Ejecutan hacemos un commit para guardar la información si no volvemos para atrás
con un rollback Por qué Porque si yo registro saldo 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 nos tiene un error hacemos un rollback y volvemos para atrás por eso está bueno eh trabajar con esto no
porque automáticamente se trabaja con eh excepciones y las podríamos manejar no nos vamos a complicar tanto pero que
sepan que esa ser la lógica no y otra cosa que hace también que de hecho por eso usamos el Wi en realidad es para no
cerrar la conexión Por qué Porque la conexión se cierra automáticamente Okay en el Wi la conexión se cierra
automáticamente no tenemos que andar cerrándola al igual que con los archivos cuando 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 faltó utilizar la
función Bueno si queremos usar la función simplemente la usamos acá como parte del Select o de lo que querramos
Cómo hacíamos 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 le vamos a poner as precio al cuadrado si yo ejecuto esto vamos a ver
que nos devuelve y acá nos devuelve todo nos devuelve Esto 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 nos devolvería el nombre de
la columna en este caso no hace falta ponerle un as porque no lo necesitamos Okay actualizamos y ahí lo tenemos el
primer Val 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 Where price is not nul 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 quisieramos que sea una función que lo hace al cubo fíjense lo hacemos al
cubo en vez de al cuadrado Uy perdón se me fue ah Ahí va y cuando actualizamos los datos en vez de devolvernos al
cuadrado lo hace al cubo ven 15 al cubo 3375 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 eh digamos trabajar directamente con Campos y con funciones integradas porque no es como que automáticamente Ya
las tiene 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 calcule 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 las 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 sql bases de datos y un poco de lógica
porque vamos a trabajar con pandas y con mat plot le para mostrar Cuál es el producto más rentable el empleado más
rentable y Cuál es el cuál es 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 eh una simplemente una un prompt 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 Okay un archivo extra en python Vamos a darle
New file lo mismo en python y vamos a ponerle eh rentabilidad punp 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
sql 3 pandas que a pandas la llamamos pd y mat plot le que eh puntualmente el pip 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 sqlite 3. Connect y acá le pasamos northwind db Bueno ahora vamos a crear una variable
llamada query y esta Va a ser la primer query 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 consulta en la que calculamos la rentabilidad 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
quantity por qué porque vamos a trabajar bajar con dos tablas con products que tiene price y product name y con order
details porque order details tiene la 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 Group by de hecho vamos a poner un nombre as revenue Esto va a ser el revenue y esto lo vamos a traer de
order details y vamos a llamarla od acá vamos a hacer un join join eh product podríamos poner un Inner joint pero ya
estamos en prácticas reales normalmente no se usa el Inner joint on products que vamos a llamar p on Okay en este caso la
condición va a ser que p. product ID tiene que ser igual a od product ID de esta forma los campos que coincidan los
machea y nos devuelve la la el Inner joint okay Bueno y ahora vamos a hacer un gr by vamos a hacer un agrupamiento
que va a llamar a el product ID vamos a ordenarlos por el product id para qué Y para que el zoom Price se acumule según
producto ID 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 revenido total si vendió 200 y el precio es 100 va a ser 2,000 el
revenido total Ese es el cálculo que no que va a hacer esto porque va a sumar el precio por la cantidad de todas las
filas y lo va a agrupar según producto después vamos a hacer un order by revenue esto para ordenarlo según Eh
Esto Mientras más vamos a hacer del que más recaudó al que menos recaudó y vamos a poner order by revenue 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 eh limit 10 y de esta forma solamente nos devuelve los 10 productos más rentables
bueno acá vamos a poner top products eh 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 okay 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 el la consulta y darnos una respuesta esta
función automáticamente crea internamente el cursor las conexiones las abre las cierra 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 es query el primer parámetro dice Che Cuál es la consulta que quieres hacer
query 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 limit un podemos hacir así si el producto más rentable es este si yo lo muestro print
top products esto que está acá si lo ejecuto me debería devolver hay un error acá enot Ah puse py p plot dije p plot
pero puse ahora s y con razón me aparecía actualizamos y a ver si no funciona no Table order details Ah North
puse North uno se da cuenta de los errores cuando tira cuando escrib mucho código y le das primera la primera
ejecución eh arrancan todos los errores a ver ahora que otro error no salta ninguno perfecto acá nos devuelve el
producto más rentable eh el revenu es de 62,97 6,5 de este producto que es cote de blag
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 ya 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 hacer comparaciones más visuales bueno para
algo importamos mat Blood lim no 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 Okay el nombre del producto va a tener un I que
va a ser igual a revenue en este caso es esto yo le puedo poner Cualquier nombre pero le voy a poner revenue y después va
a tener ot otros tantos parámetros el primer parámetro es kind que es el tipo de el tipo que queremos Yo quiero que
sea de barras kind bar quiero que sea gráfico de barras después nos va a decir el fix size que es el tamaño y va a ser
15 10 por 5 10 por 5 Ahí va y después en Legend false Ahí va Bueno ahora lo que tenemos que hacer es configurar el
gráfico Vamos a darle plt Tile y el title va a ser igual a 10 productos más rentables Ahí va eh vamos a poner el plt
xlabel que esto es la el X que va a ser productos y vamos a tener el plt Label que va a ser el revenue en español en
inglés medo que lo decimos igual no sé cuál sería el revenue en español no sé cómo sería el revenue ganancias totales
el total recaudado pero Pero bueno nada y después vamos a hacer otra cosa extra que es x tix Qué hace esto bueno rotate
90 gr Perdón rotate ig 90 Qué hace esto Bueno si se fijan x 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 los muestre
Así le voy a decir Che rotal Okay rotal 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 gr si yo ejecuto esto lo tengo que Mostrar tengo
que decirle plts 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 qué 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 cote de bl con toda esta cantidad este reveno eh Y acá tenemos un gráfico que dice rv
otro gráfico que dice eh produc bu productos era pero me equivoqué pero no importa es prod prod ya se entiende y
acá tenemos la diferencia o sea acá podemos entender la bestialidad de rentabilidad que tiene este producto
este producto es el top uno 62000 nos dio el segundo producto más rentable es un tercio de rentable de lo que es el
primero una locura Y de esta forma es mucho más gráfico y 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 Ah 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 Ah porque un
empleado no es rentable comoo que es efectivo una variable que a llamar query 2 y vamos a hacer una consulta okay
vamos a poner un Select First name vamos a hacir 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 lo
con Hola cómo estás si tenemos una variable que por ejemplo es eh bienvenido usuario si el usuario es
Lucas va a ser bienvenido Lucas si el usuario es Pedro va ser bienvenido Pedro Por qué Porque estamos concatenando no
va a devolver un solo texto combinando otros dos se puede concatenar de todo en este caso vamos a llamar a la variable
First name vamos a concatenar la con un espacio en blanco y la concatenar después con el apellido Last name Por
qué bueno me va a volver si el nombre es Lucas no va a devolver Lucas después va a dejar un espacio y si el apellido es
dalto nos va a devolver dalto entonces va a ser una sola columna que nos devuelve Lucas espacio dalto Lucas dalto
nombre y apellido en los demás eh gestores se puede hacer con concat 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 concat y Esto va a ser employe name Okay
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 Eh Esto va a ser 10 si 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é contando las 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 join
employees perdón employees cuando se al final y vamos a llamar la e y la condición va a ser on e employee ID
igual o pun employe ID de esta forma vamos a hacer un match y ahí tenemos el Inner join perfecto ahora tenemos que
agruparlos Group by o employee 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 as total y acá vamos a decirle
order by total desk para que nos devuelva del primero al al último y ahora vamos a ejecutarlo vamos a hacer
lo mismo vamos a decir que top employe o sea el top de empleados es igual a pdre sqlquery y acá vamos a hacer la
consulta primero le pasamos la query 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 descargado el programa Así que no voy a copiar y pegar voy a hacerlo y quiero
que ustedes lo hagan conmigo Vamos a hacer todo del principio vamos a venir acá top employ plot para crear un
gráfico ponemos x y le pasamos que va a ser employ 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 I no el X el I Ahí va después viene el
próximo parámetro que es kind kind 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 fig size que nos dice Che Cuál es el tamaño de la Gráfica Bueno 10,5 o sea 10
en x 5 en I y después le vamos a pasar un último valor que es Ah ah va sí es Legend que va a ser falso Ahí va y
después vamos a empezar a configurar el gráfico en este caso es plot pun title para el título y acá le vamos a poner
por ejemplo empleados más efectivos vamos a poner un acento al a porque somos buena gente y vamos a poner 10
empleados más efectivos y abajo vamos a poner plot xlabel y xlabel va a ser igual a empleados plot I Label que va a
ser igual a eh total vendido y después tenemos plot XX que va a hacer una rotación en este caso rotation pero
vamos a rotarlo mejor unos 45 gr porque 45 gr también lo podemos voltear e Entonces si ahora hacemos un plot pun
show en este caso no es plot es plt plt porque estamos haciendo referencia a otra cosa
plts 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 Ah sabía que en
este caso acá le vamos a poner un un as employe Ahí va 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 el valor o sea employ va a 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 los devuelve ya lo sabemos y el segundo lo devuelve ahora tenemos los 10
empleados más efectivos voy a subirle un pelín para poder ver los nombres margaret peacock es la más rentable la
empleada más efectiva que vende 40 que vendió 40 hizo 40 ventas Janet hizo unas 30 y pico
de ventas Nancy hizo casi 30 ventas y acá tenemos los 10 empleados más efectivos ahora vamos a despedir tres
empleados Porque algunos que son muy malos De hecho acá nos faltó el limit 10 limit 10 Ah 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
Mens vendieron los que menos vendieron fueron Annie Steven y Robert King e 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ío hacer dos cosas primero a usar wh para esto para ver cómo lo harían con el administrador de
contexto Wi 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 creer una tercera consulta para encontrarle el empleado más eh 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 un empleado por qué porque tenemos employee ID y orders si una
order tiene el emploe ID uno al emp al empleado uno le sumamos una orden si tiene 10 le sumamos 10 entonces la
cantidad de órdenes que haya hecho están registradas acá pero Puede que haya uno haya hecho 40 ventas de $100 otro puede
que uno haya hecho 10 ventas de $1,000 entonces me sirve más el que hizo 10 venta de 1000 que hizo 40 de 100 no
Entonces eso es lo que los desafío 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 bien así que bueno gente los despido 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 Okay Ah qué s que tengo mi objetivo es poder lanzarles antes el curso de git el curso
de programación orientada 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 Lo estoy pensando por ahí los que están asegurados son el
de git y el de progamación estetos con python 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 ha 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 que skite es bastante diferente a los demás gestores pero no sirvió para aprender sql que es
lo importante Lo importante es que aprendemos sql después aprender pogre y demás es cuestión de sentarse una tarde
y entender bien las diferencias Okay 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 qui con quien nos comunicamos con una base de
datos después el gestor puede ser cual sera pued ser pobre María de B my squel lo que quieran Pero lo importante es que
sepan sql y ya lo aprendieron y de la forma más fácil y con skite Así que Ah vamos a ver la diferencia que tiene
trabajar en site con diferentes bases de datos para que sepan adaptar sus proyectos a las bases de datos más
famosas del mundo que son my sequel pogre y sql server Así que vamos a las relacionales e porque también tenemos
deb y un par más así que vamos con esa sección bueno gente como ya sabrán esite es un
sistema de gestión de bases de datos bastante diferente a los demás Esto no es ninguna novedad es decir my squel
pogre sql server y demás como que se parecen bastante entre sí pero sq no porque es diferente porque lo que tiene
qite 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 difer dicia en código vamos a ver
diferencia en costos vamos a ver diferencia en boludeces como mayúsculas y minúsculas para qué 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 poco primero arrancamos con lo que es más teórico que son las características para arrancar sqlite es
una base de datos de motor ligero y de archivo único un único archivo como Estuvimos viendo norwin db 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 tipos no es apropiado para aplicaciones de Gran escala Okay o de alto rendimiento
después tenemos my sequel que es un gestor de bases de datos basado en servidor lo que tiene es que sqlite por
ejemplo soportaba un solo conjunto de de sql mientras que mysql soporta varios y es ideal para aplicaciones de Gran
escala o sea es excelente para esto pogre también es un gestor de base de datos basado en 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 y para escalar y después sql server Okay también basado
en servidor obviamente es de Microsoft es pago también soporta un conjunto completo de características de sql y
También incluye como pogre 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 okay Lo único que cambia es en My sequel tenemos que agregar el el motor Okay de de almacenamiento nada más
cabe Resaltar que cuando trabajamos con claves primarias también hay una diferencia porque cuando nosotros
creamos una tabla agregamos una clave primaria bueno Esto se hace diferente en cada gestor en sq en sql como ya vimos
lo hacemos con el auto increment en My sequel también solamente que hay un guion medio entre medio de auto
increment o sea es auto gu guion bajo Perdón no gu medio guion bajo auto guion bajo increment pogre usa serial o Big
serial y después tenemos sql server que en ese cu server tenemos identity Okay después vamos ahora con los Inner
arrancamos con más fácil el Inner join el el Jo el linear joint o el join es igual en todos los gestores el left join
es también igual en todos los gestores el right join Okay el right joint es en todos los gestores igual excepto en
skite en sk light Ya vimos cómo lo hicimos para hacer un right joint tenemos que usar un left joint solamente
que invirtiendo el orden de las tablas que es lo mismo solamente que cambia la palabra después el full join o el full
outer join eh en pogre y en sql server es igual Okay simplemente ponemos el el full joint full outer joint también
puede ser en My squel tenemos que utilizar la unión entre un left joint y un right joint y en skite tenemos que
utilizar la unión entre un left joint y otro left joint con las tablas invertidas o sea tenemos que usar un
left joint y un left joint que simule ser un right joint Entonces es como que hiciéramos lo mismo que my squel unimos
un left con un right solamente que en esq el right está simulado no es un right Jo es un left joint entonces
tendríamos para conseguir un full joint dos left joint simulá o sea uno es bastante loco pero sí ya lo hemos visto
en ya lo entendimos pero nada en mysql es unir un left con un right y en Post y coso ya se usa el full después tenemos
las funciones de agregación en todos los gestores min Max abg count y zoom son exactamente iguales son las más comunes
así que no se preocupen son iguales el hing en todos los gestores también es igual el grou by también en todos los
gestores es igual después vamos con los índices Cómo jar 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 Cómo se hacen las transacciones bien en
todas es igual in comit roll van a ver que a veces usan vin transaction pero ya todos soportan el vin solamente y en My
por ejemplo antes usaba mucho el Start transaction Así que si ven algún código viejo pueden ver el vin transaction o el
Start en My squel Start transaction que es común pero hoy en día se usa más comúnmente el vin vin transact
transaction el vin después tenemos el Now Now es una función que tampoco le expliqué pero nos devuelve una fecha nos
devuelve la fecha actual con formato año mes día horas minutos segundos 10 segundos básicamente nos devuelve un te
un formato fecha Okay si quieren pruébenla entren ahora a la base de datos pongan Select Now y ahora que les
va a seleccionar la ahora en todas es igual solamente que en sql server utilizamos get date todo junto get date
Eh hay otra pero es la más parecida a Now bueno funciones matemáticas qué pasa con las funciones matemáticas round que
es para redondear todos los gestores funcionan Exactamente igual es un round después tenemos el celli o selling que
es una función que lo que hace es redondear hacia arriba Okay Eh Digamos si tiene un número 4.7 y usamos selling
se redondea a cco si tiene 4.2 se redondea hacia 5co siempre se va a redondear hacia arriba si es el número
punto algo o sea si es un número flotante lo redondea hacia arriba en skite y en pogre se utiliza igual es
celi y lo usamos así con el parámetro el valor del el argumento que le pasamos es el número que queremos que redondee y en
My squel y en esql server es selling completo sailing no es s es sailing después tenemos flur siempre le dije
flor Pero bueno se dice flor que hace lo mismo que sailing solamente que lo hace al revés en vez de redondear para arriba
redondea para abajo si es 4.9 se quedan cuatro 4.7 se quedan cuatro es como si le sacara la coma y la a la bosta la
diferencia es que eh sailing redondea siempre hacia arriba flur redondea siempre hacia abajo y round redondea
depende Si es más de cero si es el punto C para arriba redondea para arriba si es menos de punto C redondea para abajo por
ejemplo 4.7 lo redondea cco pero 4.2 lo redondea cuatro entonces esa la diferencia que round redondea depende
pero sailing redondea hacia arriba y Flow redondea hacia abajo después tenemos limit y offset limit lo vimos
pero offset no Bueno limit ya sabemos es una función que nos permite limitar la cantidad de resultados esto es
paginación Okay limitamos la cantidad de resultados en todos los gestores excepto en sql server nos funciona perfectamente
limit pero en sql server tenemos que usar la cláusula top con la cantidad de número Entonces de esa forma limitamos
en vez de usar limit 10 usamos top no sé y el número y después tenemos offset que offset lo que hace es decir Che Cuántos
queres que me salte T O sea hay 20 registros Bueno quiero que me devuelvas solamente de esos 20 quiero que me
devuelvas 10 registros Ahora offset nos dice a partir de cuál queres que te empiece a devolver 10 registros desde el
quinto desde el sexto desde El séptimo bueno Devuélveme 10 registros desde el cinco para arriba Entonces me empieza a
devolver cinco 5 6 7 8 9 11 hasta el 15 me devolvió del cinco al 15 porque me devolvió arranco en el cinco y desde el
cinco empezó a contar 10 y me lo fue devolviendo uno por uno Eso es el offset eh se saltea la cantidad que le pedimos
que se saltee no la cantidad de resultados que le pedimos que se 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 limit es extraño
que primero sea así Debería ser primero limit después offset pero no importa también que sepan que podos usar límit
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ímit y el
offset en todos los gestores excepto en sql lo podemos usar pero en sql server eh excepto en sql server quise decir
pero en sql server tenemos hacer todo este choclo para para hacer las usar las dos juntas Bueno después los operadores
de comparación son todos iguales básicamente mayor que menor que mayor igual que menor o igual que in eh all
Any Les recomiendo que investiguen Any también es una buena en también está bastante bueno en fin todo 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
pogre un operador específico que se llama e O sí y Like como like pero con la ía delante que esto lo que hace es
distinguir mayúsculas y minúsculas vieron que antes mayúscula minúscula bueno like no distingue pero ilike sí
distingue entonces Si queremos que distinga es ilike si no queremos es like bueno gente y hasta acá llegamos lo que
les recomendaría hacer es que si quieren migrar de una base de datos a otra base de datos por ejemplo my sequel Qué
tienen que hacer Bueno agarran la base de datos la eh o sea exportan la base de datos como formato sql la abren y
cambian los datos Por ejemplo si tienen una base de datos my sql qué hac Man la modifican las cosas para que se adapte
eh le cambian el auto increment por el auto guion increment como que la adaptan no a a al gestor que le van a migrar
después lo que hacen cuando tienen ese código sql es crean toda la estructura de la base de datos ya con siempre Todas
las bases de datos los gestores tienen como una función para entender todo el código de sql y crearlo 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 sino tenemos los datos Bueno cómo exportamos los datos con csb eh coma separate
values creo que significa valores separados por comas es un formato de intercambio común o sea todas las bases
de datos tienen una función para los datos exportarlo 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 eh Cuando tenemos la base de datos nueva que ya creamos en
otra versión por ejemplo en My squel vamos a importamos todos los datos de de and ya tenemos la estructura por un lado
y le importamos los datos Y de esa forma migramos Ahora sí gente me despido de este curso la verdad que estoy rec
contento ya saben que sigue el curso de Inteligencia artificial que va a ser una locura vayan a seguirme a Instagram si
todavía no lo hicieron para hacer cualquier pregunta o cualquier duda que tengan si no estás suscrito a este canal
Dale suscribite qué 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 tenés 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 da inteligencia incluso para esto lo vas a tener que usar y bastante aunque no sea la
tuya un poco flaco otra vez vas a arrancar Asís con el curso
[Música] y que no una introducción para que más meno minut
mejor por Dios pero queando [Música] [Música]
dónde estoy [Música]
Heads up!
This summary and transcript were automatically generated using AI with the Free YouTube Transcript Summary Tool by LunaNotes.
Generate a summary for freeRelated Summaries

Aprende MySQL: Introducción y Primeros Pasos para Crear Bases de Datos
Descubre cómo construir y gestionar bases de datos efectivamente en MySQL.

A Comprehensive Guide to PostgreSQL: Basics, Features, and Advanced Concepts
Learn PostgreSQL fundamentals, features, and advanced techniques to enhance your database management skills.

Desarrollo Frontend desde Cero: Creando Tu Primer Sitio Web
Aprende a desarrollar tu primer sitio web desde cero con HTML y CSS en este curso de frontend.

Aprendiendo AWS Step Functions en Español: Un Taller Completo
Descubre cómo utilizar AWS Step Functions para crear flujos de trabajo eficaces y escalables. ¡Aprende ahora!

Introduction to Linux: A Comprehensive Guide for Beginners
Learn essential Linux skills for system administration and more with this comprehensive course guide.
Most Viewed Summaries

Mastering Inpainting with Stable Diffusion: Fix Mistakes and Enhance Your Images
Learn to fix mistakes and enhance images with Stable Diffusion's inpainting features effectively.

A Comprehensive Guide to Using Stable Diffusion Forge UI
Explore the Stable Diffusion Forge UI, customizable settings, models, and more to enhance your image generation experience.

How to Use ChatGPT to Summarize YouTube Videos Efficiently
Learn how to summarize YouTube videos with ChatGPT in just a few simple steps.

Pamaraan at Patakarang Kolonyal ng mga Espanyol sa Pilipinas
Tuklasin ang mga pamamaraan at patakarang kolonyal ng mga Espanyol sa Pilipinas at ang mga epekto nito sa mga Pilipino.

Pamamaraan at Patakarang Kolonyal ng mga Espanyol sa Pilipinas
Tuklasin ang mga pamamaraan at patakaran ng mga Espanyol sa Pilipinas, at ang epekto nito sa mga Pilipino.