Hola qué tal bienvenidos a este nuevo capítulo del curso completo de base de datos.
Este capítulo va a ser un capítulo compuesto vamos a aprender básicamente dos cosas primero a obtener
valores únicos de nuestras tablas.
Ahora lo vamos a ver bien y van a comprenderlo y en base a esos valores únicos vamos a meternos en el
mundo de las sub consultas que son sus consultas son instrucciones Selleck metidas dentro de otras instrucciones
Selleck.
Vamos primero a nuestra primera parte vamos a aprender una función en el área de campos donde vamos
a poder obtener el valor único de un campo de una tabla por ejemplo nosotros tenemos una tabla ventas
que tiene muchos registros y tiene un campo llamado CLI aided donde tiene distintos valores como habrán
visto nosotros tenemos para los clientes algunas repeticiones tenemos el registro de consumidor final.
Nuestro cliente uno repetido muchas veces y también tenemos otros clientes que como han comprado varias
veces ese dato se repite qué tengo que hacer yo si lo que quisiera obtener es la lista de todos los
clientes que me han comprado.
Si yo ahora pidiera por ejemplo
el campo Clea líder de ventas lo que haría el motor perdón
lo que haría el motor es traerme todos los registros y solamente mostrarme en la columna ventas CLI
pero no me sirve esto me está repitiendo siempre la misma información me lo está ordenando porque Clickair
es una clave.
Recuerden que Sunil dice el motor al detectar que estoy pidiéndoles información sobre un índice me lo
da de manera ordenada.
Ahora esta información no me sirve de nada.
Yo no quiero que me diga 600 veces que el cliente 1 me ha comprado.
Si yo quisiera la lista limpia con un registro único por cada cliente de mi tabla ventas tengo que usar
una función esta función si varía de acuerdo al motor en algunos motores se llama de otra manera pero
mi ciclo se llama distinguí
esto significa que me va a mostrar los valores siempre diferentes nunca va a repetir un valor.
Le puedo poner así y lo puedo ejecutar fíjense el resultado es una lista limpia de todos los valores
ordenados de mis clientes.
Estos clientes son los clientes que me han comprado ahora si ustedes se fijan entre número y número.
A veces hay saltos significa que el cliente 900 10 11 12 hasta el 17 no me han comprado.
Vamos a ver ahora esto recuérdenlo lo vamos a ver en otros ejercicios.
La función distinct vamos a ver ahora en el mundo de las sub consultas para qué podría servirnos esta
información.
Hasta ahora vimos que podemos unir la tabla de ventas con la tabla a clientes si queremos saber los
nombres de los clientes que nos han comprado pero yo les hago una pregunta Cómo podría yo obtener la
lista de los clientes que no me han comprado.
No puedo hacerlo porque hasta ahora lo que yo sé es unir ambas tablas y si las Zuno es porque estoy
uniendo en la tabla a clientes con un registro homónimo del mismo cliente en la venta.
Ahora si yo tengo una tabla clientes con registros de clientes que no me han comprado ese registro no
está en mi tabla ventas.
Vamos a ver ahora y vamos a introducir al curso en el mundo de las consultas.
Vamos a dejar por ahora esta instrucción Select más abajo porque la vamos a utilizar vamos a escribir
que me traiga el aire de cliente por ejemplo
número de cliente el Claudi el CLI razón social
de donde de la tabla clientes esto si yo lo ejecuto me va a dar error porque encuentra dos Selleck sin
ningún tipo de unión ni nada y no va a saber cuál ejecutar pero me traería la lista de los clientes
no me sirve.
Yo quiero los clientes que no han comprado ahora para eso vamos a tener que usar en la cláusula Wear
una nueva unción una nueva cláusula llamada In o Not in significa que en mi campo por ejemplo CLI aided
no se encuentre no se encuentre dónde.
Y bueno coloco paréntesis traigo revivo mi sentencia C.L
y la Cierro cierro paréntesis y esto es lo que va a hacer antes de ejecutarlo quiero que analicemos
esto me va a traer dos columnas nombre y razón el aided y la razón social de mi tabla clientes de todos
los clientes que tengo la tabla no va a ser un Wever cuando encuentre que la Iribe cliente no se encuentra
donde y para eso va a ejecutar esta su consulta.
Esta consulta tras esto esta lista que vemos aquí entonces va a caer en el registro del cliente 1 en
mi tabla cliente va a decir él es el cliente número 1 no se encuentra en esta lista.
Falso si se encuentra a comprado entonces no me lo va a tomar en cuenta el cliente 2 no se encuentra
en esta lista no no la verdad que no se encuentra okey ese registro me lo va a incluir en mis datos
de salida y así sucesivamente con cada cliente que yo tenga grabado en mi tabla clientes.
Vamos a verlo en acción vamos a ejecutarlo fíjense es fabuloso es rápido estos.
Esto es una información estadística muy importante el día que ustedes tengan un desarrollo comercial
y quieran generar un módulo una opción para que el usuario pueda listar en base a condiciones porque
todo esto a su vez puede estar potenciado por la cláusula Wear donde le puedo poner más condiciones
todavía ustedes pueden hacer que aparezca una lista de todos los clientes que no nos han comprado para
qué.
Para llamarlos para fidelizarlos para hacerles un regalo para enviarles un mail de promoción.
Y ustedes por supuesto van a poder combinar todo esto con más condiciones yo aquí puse Frome ventas
puedo unir tablas puedo meterle una cláusula Wear Wear por ejemplo ventas fecha sea mayor igual a él
vamos a pedir las ventas de el mes de febrero y
qué engorro esto de poner mayor y menores pero no se preocupen que en el capítulo que sigue les voy
a enseñar una cláusula donde no vamos a usar mayor y menor sino que vamos a usar.
Bueno lo van a ver en el próximo capítulo y van a poder buscar entre rangos.
Vamos a poner que sea menorah el primero de marzo.
Ok esto va a ser que me traiga todos los clientes que no han comprado en febrero fíjense la potencia
de esto y lo pueden lo pueden llevar al nivel de la locura pueden pedir los clientes que no me compraron
hoy por ejemplo les va a traer una lista enorme o al revés.
Vamos a ser así vamos a quitar el Noth.
Yo quiero la lista con nombre de los clientes que me han comprado en febrero Fíjense aquí no me lo ha
ordenado pero me trae todos los clientes con un registro único y qué podría hacer yo aquí y bueno puedo
hacer un orden voy afuera de la sub consulta
Order voy a ir fíjense ahora me ordenó por el Heydi de cliente nuestra lista flamante de los clientes
que sí han comprado durante el mes de febrero.
Un tema muy importante un dato muy importante para que una sentencia Cele se convierta en su consulta
tiene que pasar tres cosas figurar entre paréntesis dentro de otra sentencia Cele estar dentro de otra
sentencia Cele.
Y además sí o sí tiene que haber un solo campo en el área de datos.
No puedo aquí poner por ejemplo que aparte de fijarse en el cliente me traiga el total me va a dar un
error ahora me dice que el operando porque esto es una comparación que está haciendo mi Clea y aquí
en la sentencia Uehara mi operando solo debe contener una columna.
Este es un error.
Las consultas solo aceptan una columna porque tiene lógica lo que estoy tratando de traer en una consulta.
Es una lista de valores es una lista de valores entonces en base a esa lista de valores yo voy a tratar
de trabajar voy a comparar un valor de si se encuentra en esa lista de valores o no y la sentencia la
cláusula in.
No sólo funciona con sus consultas yo podría tener aquí uno coma cinco coma cero coma diez.
Le voy a preguntar que le voy a decir que me traiga a mis clientes cuando el cliente se encuentra entre
esa lista de cuatro valores posibles me va a traer el cliente 1 el 5 el 6 y el 10 en caso de que existan
si no existe no me va a traer nada.
Fíjense me trae el cliente 1 el cliente 5 el 6 y el 10 ahora tiene mucho sentido.
Esto la verdad que no generalmente en el mundo profesional se usa con sus consultas pero podría pasar
podría pasar.
Vamos a ir a otra tabla.
Vamos a ver valores que sí podrían tener
productos que ceso estatus Supongamos que nuestro campo estátus tuviera 3 5 6 valores posibles y yo
quiero que
que me traiga el Estado vamos a hacerlo bien.
El problema aided
mi estado no hace falta no hace falta nada de hockey yo quiero la lista de mis productos aunque sea
el aire y la descripción de la tabla productos
donde protestado el estatus.
Recuerden que lo que coloquen la cláusula Wear puede estar incluido o no en mi lista de productos por
ahí no me interesa.
Y aquí puedo decirle que mis estados son uno o cero suponiendo que hay más de uno y cero en este caso
no. Nosotros tenemos solamente dos ubíquese pero además hay y me trae todos nuestros productos.
Supongamos que ustedes tienen un campo ENUM que tengo un set de valores posibles con distinto sello
suspendido o o textos textos pueden colocar aquí.
Supongamos que tengo un campo y tengo un texto que es abecé.
Otro es DSG y colocan una lista de valores y cuando ese campo se encuentra con alguno de esos valores
de la lista lo va a mostrar si no lo encuentra no lo muestra.
Esa es la fortaleza de nuestra cláusula I'm not in.
Pero como les digo se usa muchísimo con sus consultas.
Tengo una tabla de ventas tengo una tabla de detalle yo podría hacer lo mismo ahora pero estaría escribiendo
mucho y haciéndoles perder el tiempo.
Los invito a que lo hagan yo quiero hacer la lista de los productos que nunca fueron vendidos les vamos
a hacer una cosa coloque en pausa el video escríbalo y cuando terminen de escribir eso quiero la lista
de los productos que no se encuentran en mi tabla ventas detalle o sea que no las he vendido nunca.
Póngale pausa.
Hagan el ejercicio y cuando lo hicieron reanuden el video y vamos a hacerlo juntos a ver cómo les salió.
Pongan pausa ahora
bueno cómo anduvieron cómo anduvo ese ejercicio.
Vamos a ver cómo se hace.
Primero obviamente vamos a hacer nuestra sele.
De pronto aided voy a mostrar por pantalla todo descripción no nos vamos a detener en los nombres de
los campos.
Ustedes saben que lo pueden poner más bonito todavía y vamos a a decir de dónde de nuestra tabla productos
Ok qué es lo que vamos a comparar.
Cuál es el campo de productos que está en nuestra tabla detalles es aided.
Recuerden que no podemos grabar descripciones ni nada porque sería una mala práctica así que vamos a
usar una comparación cuando tenemos Prot a Ibid le vamos a pedir que nos Liste los productos que no
están donde en una Sub consulta y esa sub consulta vamos a ponerla aquí.
Es que me traiga qué me va a traer.
Quiero aclararles salvo en este caso yo podría usar distinct o no.
Si yo pusiera solamente
Eurail funcionaría también.
Pero qué pasa.
Estaría haciendo que el motor de base de datos lea cada uno de los registros Lea recorra cada uno de
los registros y por cada uno diga.
El problema es que leí antes en cuenta.
Coincide con este Prodeni de ventas no y por ahí estoy repitiendo el mismo Broda y de muchas ventas
el mismo producto y no tiene sentido.
No es lo mismo comparar contra una lista de 50 mil registros que comparar con una lista de 3000.
Entonces por ese motivo se aconseja usar el distinct no porque no funciona porque alguien decida si
sino usas listing funciona igual sí pero no es el hecho de donde mi de la tabla ventas detalle lo que
va a hacer la consulta es traerme todos los pro Dairy diferentes de la tabla detalle y los va a comparar
con mi tabla de productos y eso es todo yo ahora puedo ejecutar y me va a traer todos los productos
que nunca he vendido los productos que nunca he vendido y tengo salto fijense del 95 al 99 ahí ya tuve
productos.
El 92 tampoco está todos los productos que nunca he vendido y por supuesto por supuesto adentro de la
sub consulta puedo meter las cláusulas Goear filtrando por fecha de venta.
Para eso tendría que unir aquí la tabla de detalle
la tabla ventas ponerle un wears donde donde Bede
vamos a ver si es así porque me parece que me puedo llegar a equivocar ventas ahí dice ventas Saidi.
Es igual a ventas del A Illa unanimista hablas o que hay un Emmys tabla y puedo pedirle los registros
que solamente hayan sido de una fecha determinada.
Por qué tuve que unir las tablas porque mi tabla de detalle no tengo la fecha de la factura.
No voy a repetir información.
Se acuerdan de las tres formas normales ok.
Entonces uní mis tablas porque ahora necesito información a nivel de cabecera y no de detalle de producto
y voy a decirle and ventas fecha mayor a el año Pablo el año
nadie va a comprar el primero de enero porque feriado en todo el mundo así y yo ya sé que mi tabla arranca
del 2 de enero y esto lo puedo ejecutar y me va a traer todos los productos que se han vendido que no
se han vendido a partir del 2018 porque quizás se vendieron en el 2017 y aquí le puedo meter más condiciones
más cláusula wear and or Parente si esto que me una con otra tabla pero siempre el campo que yo voy
a estar devolviendo tiene que ser único tiene que ser un solo campo esto es cada vez más potencia ustedes
tienen cada vez más potencia en sus manos para realizar la consulta se dice se dice que el lenguaje
SQL actual está tan pero tan tuneado tan modificado tan perfeccionado que no habría ningún tipo de consulta
que ustedes no puedan realizar.
Que ustedes no puedan realizar con una sola sentencia doy fe.
La empresa de software en la que estoy trabajando hay consultas que podrían llenar dos páginas de lo
complejas que son inclusive manejando condiciones comparando si está el valor hace tal cosa si está
el otro tal otra manejando una complejidad tan enorme que a veces a uno que tiene muchos y muchos años
en esto tiene que tomarse el tiempo para analizar cada parte de la consulta para saber bien qué es lo
que hace lo que estamos viendo son ejemplos simples pero que son el punto de partida para que ustedes
luego empiecen a jugar con tablas reales.
Inclusive si les ha pasado de instalar ahora con el curso el ciclo recuerden que tienen tablas de ejemplo
que tienen muchísimos campos muchísimos registros y pueden unir y hacerlas los ejercicios con esas tablas.
El único motivo por el cual yo no uses las tablas es porque no todos los que están viendo este curso
han instalado el Maisí desde cero ahora entonces no van a tener esas tablas.
Hay muchos de ustedes como me pasa a mí que tenemos motores y servidores de bases de datos en servidores
remotos en otros países en datacenter y donde esas tablas no están esas tablas fueron agregadas ahora
así que yo no voy a mencionarlas ni las voy a incluir en los ejercicios.
Si ustedes quieren y tienen estas tablas si quieren practicar con ellas es lo mismo.
El objetivo del curso es que ustedes aprendan sea con la tabla que sea y ahí van a tener datos reales
igual que estos que están viendo ahora estas tablas que yo incluí en el curso SQL son tablas que están
muy acotadas por la Tabla Productos en mi desarrollo tenía unos 30 o 40 campos más o menos y por supuesto
la base de datos tiene 232 tablas.
No estamos hablando de cinco tablas como tienen ahora.
Mi desarrollo tiene más de El último desarrollo dice.
No es el único.
Vengo programando desde que tengo 18 años.
Mi último desarrollo tiene es un desarrollo en Visual Basic que tiene más de 230 formularios 230 ventanas.
Imagínense lo monstruoso que es es un Arpi completo y tienen más de 250 tablas entonces.
Por eso le dije que la base pesa varios Shiga y que hay que mantenerla constantemente y hay que revisarla
y bueno con todo lo que tiene que ver con el manejo de desarrollo y administración de una base de datos
entonces ustedes ahora están aprendiendo lo necesario para arrancar con todo y no están aprendiendo
cosas Junior ni cosas básicas sino que están aprendiendo cosas muy potentes que usan los profesionales.
Así que los invito ahora a mi próxima mi próximo capítulo donde van a aprender esta cláusula tan buena
que me permite comparar por rango de valores hasta ahora vimos in y Not in que me permite comparar con
una lista de datos pero no es un rango.
Yo puedo tener números totalmente disociados uno del otro.
Ahora van a aprender a comparar con un rango de valores los espero en el siguiente capítulo.