Вы находитесь на странице: 1из 60

Gslunac-3Sección: 1

Introducción - Acerca de este Curso


Hola, bienvenidos a este curso completo de base de datos, Mi nombre es Pablo Tilotta,
Soy un profesional de hace más de 30 años en el mundo de los sistemas, soy
programador profesional, He trabajado muchísimos años con bases de datos, con las
dos bases de datos que más he trabajado son SQL Server y con MySQL, estas son dos
bases relacionales, son de las más famosas que existen; hay otras bases también
famosas como Oracle PostgreSQL.

Pero en este curso nos vamos a enfocar en quizás la más exitosa de todas y la más
popular que es MySQL, desde 1996 que fue creada hasta el día de hoy es la base de
datos que sin dudas ha tenido más usuarios en la comunidad de desarrolladores.
Nosotros vamos a ver en este curso, no solo sobre MySQL sino que también vamos a
aprender todo el lenguaje completo de bases de datos y vamos a aprender buenas
prácticas, a normalizar nuestras bases de datos y a generar bases de datos
profesionales y versátiles en cuestión de minutos.
Les quiero hablar brevemente acerca de mi carrera, de lo que son mis credenciales
para estar hoy en día frente a ustedes enseñándoles, hace 30 años que trabajo para
empresas grandes, para grandes cadenas de sucursales y actualmente me encuentro
trabajando en una de las empresas de software más importantes de Argentina.
Me refiero a la firma AXOFT, los creadores de El famoso software TANGO (Tango
Gestión) es el equipo en el que estoy trabajando y estamos haciendo un trabajo muy
profesional así que bueno los invito a este curso completo, No los voy a defraudar y se
van a sentir muy a gusto con todo lo que vamos a aprender a lo largo de estas 60 clases.
Sin más, Los invito a que sigamos y a que comencemos de una vez el curso.

Sección 2, Clase 2
¿Que son las Bases de Datos?
Hola bienvenidos al capítulo número 2 de este curso completo de base de datos.

En este capítulo responderemos la pregunta, qué es una Base de Datos, una base de
datos no es más que una gran colección de datos ordenados y organizados de tal
manera que nos permita luego acceder rápidamente y fácilmente a ellos, El ejemplo
más común y previo a las computadoras que hemos conocido de base de datos es la
guía telefónica, en ella están ordenados y organizados los datos siguiendo una
estructura prefijada y clara que nos permite acceder en sólo segundos a la información
que estamos necesitando por sobre miles o millones de resultados
En el desarrollo de software, Los programadores se dieron cuenta que con solo grabar
datos en archivos no bastaba porque luego cuando querían acceder a la información
precisa de una manera rápida se les dificultaba.
Es ahí donde nacieron las bases de datos y se fueron perfeccionando de tal manera
que hoy es imposible imaginar un desarrollo de software sin interactuar con alguna de
ellas, A lo largo de este curso vamos a profundizar al máximo cada concepto y
conocimiento acerca de ellas.
Te invito a continuar con el curso y seguir nuestro capítulo número 3, estaremos
hablando de los motores de base de datos.

Sección 2, Clase 3
Conceptos de Motores de Bases de Datos
Bienvenidos al capítulo número 3 de este curso completo de base de datos.
En este capítulo responderemos la pregunta. Qué son los motores de Bases de Datos,
sabemos que las bases de datos son grandes colecciones de datos ordenadas y
organizadas de una manera inteligente.
Los motores de bases de datos son herramientas de software o sistemas que nos
ayudarán en la búsqueda, la organización y la creación de esos datos.
Cada motor organiza los datos de una manera diferente y transparente al usuario.
Cada motor nos regala un set de utilitarios adicionales que para realizar todo tipo de
operaciones tanto de mantenimiento de nuestros datos como de Backup y los motores
más grandes y potentes nos permiten generar reportes y también tienen su propio
lenguaje de programación. Le dan al desarrollador profesional un inmenso set de
opciones.
Los motores más conocidos en el mercado son MySQL, Microsoft SQL Server,
Microsoft Access, Oracle, DB2 de IBM. PostgreSQL, MaríaDB y los nuevos MongoDB,
hay otros.
En esta oportunidad nos vamos a enfocar en el más popular e imbatible MySQL. Te
invito a nuestro siguiente capítulo, luego de estos conceptos teóricos que hemos tenido
donde ya comenzaremos a trabajar puntualmente todo sobre bases de datos.

Sección 2, Clase 4
Conceptos de Tablas
Hola bienvenidos a este nuevo capítulo del curso completo de base de datos.
Ahora nos vamos a meter de lleno con los ejemplos, con las ejercitación es más que
con las teorías.
En esta oportunidad vamos a saber todo sobre tablas, Las tablas son colecciones de
datos unidos para un fin común, Son parte de las bases de datos.
Si tuviéramos que desglosar una base de datos diríamos que el primer elemento por
el cual podemos desglosarlas son las tablas, para que se den un ejemplo.
Si pensamos en una tabla llamada clientes encontraremos campos o columnas
relacionados a esa ficha de clientes.
Vamos a ver un ejemplo si aquí tengo un ejemplo vamos a hacer de cuenta que
tenemos una base de datos llamada El veloz S.R.L que es nuestra empresa, nuestro
negocio y que está dividida en tablas.
Vamos a ver por ejemplo una tabla, clientes que sería como la sección dedicada a los
clientes, Las tablas son precisamente colecciones de datos que le vamos a poner un
nombre sin datos específicos, los datos que vamos a recoger para clientes no van a
ser los mismos que los datos que vamos a recoger para productos,por ejemplo les
ponemos un nombre en la tabla clientes y luego tenemos otro desglose, Las tablas
pueden desglozarse y separarse en campos.
Vamos a hablar sobre los campos en el capítulo 5 o sea en el siguiente capítulo,
Ahora vamos simplemente enfocarnos en lo que tienen que ver las tablas y los
campos de esta tabla.
Los campos de esta tabla dijimos por ejemplo son diferentes a los datos que vamos a
guardar en la Tabla Productos, podríamos tener una tabla proveedores una tabla
facturas y así conformar nuestra base de datos.
Estos campos que serían como las columnas de una planilla Excel pueden ser el ID
del cliente, El nombre del cliente el domicilio el teléfono y cada uno de estos datos
vamos a saber en profundidad en el capítulo que habla de los campos, El tipo de
datos y qué posibilidades tenemos de acuerdo al motor que vamos a estudiar en este
curso, a cada uno de estos datos se le llama campos o columna todos ellos juntos
conforman un registro.
Si ustedes abren un Excel en una fila, esa fila sería un registro en una base de datos
Ocurre lo mismo una sucesión de campos y datos provenientes de un solo cliente o
de un solo producto conforma un registro.
Entonces los datos de un cliente se alojarán en un registro conformado por todos sus
datos, Si miramos esto en un formato de grilla Excel diríamos que la tabla es toda la
hoja cuyo nombre figura en la solapa inferior.
Cada fila es un registro, cada columna corresponde a un campo diferente entonces
cada tabla constituye una entidad determinada con sus características y se Teos
independientes de otros estados.
Nuestra base de datos entonces es una colección de tabla, Cuando pensemos en una
base de datos tenemos que pensar que es una colección de distintas tablas.
Las tablas son colecciones de registros definidos por campos índices y Seteos
independientes.
Todo esto lo vamos a ver con mayor profundidad a lo largo de este curso.
No deben preocuparse, ahora por los registros son formados por campos o columnas
determinadas y en cada campo finalmente se alojará un valor propio de ese registro.
Por ejemplo para el registro cliente número dos en el campo nombre se alojará el dato
de Marcos Medina
y en su campo teléfono se alojará el dato correspondiente al teléfono de Marcos
Medina para registro
número tres del cliente.
Vamos a grabar el campo nombre y se va a alojar el dato de otro cliente y así
sucesivamente.
Es responsabilidad luego de los programadores el generar las herramientas u
opciones necesarias para
adicionar actualizar borrar o consultar los datos de estos registros en el próximo
vídeo.
Te voy a explicar todo sobre los campos y sus características.

Clientes Productos
ID ID
Nombre Descripción
Domicilio Color
Teléfono Medida
Email Stock

Dijimos que los datos de clientes iban a ser diferente a los datos que íbamos a guardar
en la tabla productos, podríamos tener otras tabla como proveedores, una tabla facturas
y así conformar nuestra Base de Datos.

A cada uno de estos datos se les llama campos o columna y todos ellos juntos
conforman un registro, si abrimos Excel y vemos una fila, esa fila sería un registro en
bases de datos ocurre lo mismo.

Una sucesión de campos y datos provenientes de un solo cliente o de un solo producto,


conforman un registro, entonces los datos de un cliente se alojaran en un registro
conformado por todos sus datos.

Si miramos esto en un formato de grilla de Excel diríamos que la tabla es toda la hoja,
cuyo nombre figura en la solapa inferior; cada fila es un registro y cada columna
corresponde a un campo diferente.

Cada tabla entonces constituye una entidad determinada con sus características se
theos independientes de otras tablas.

Nuestra Base de Datos es entonces una colección de tablas.

Cuando pensemos en una base de datos tenemos que pensar que es una colección de
distintas tablas.
Las tablas son colecciones de registros, definidos por campos, índices y se theos
independientes.

Los registros son formados por campos o columnas determinadas y en cada campo
finalmente se alojara un valor propio de este registro. (Ejemplo en el campo nombre se
alojara el nombre del cliente, y en el campo teléfono, se alojara el teléfono respectivo
de ese cliente).

Es responsabilidad luego de todos los programadores el generar las herramientas u


opciones necesarias para adicionar, actualizar, borrar o consultar los datos de estos
registros y tablas.

Sección 2, Clase 5
Concepto de Campos.
Las bases de datos se desglosan en tablas y las tablas se desglosan en
campos.
Los campos conforman nuestro registro de datos y como vimos en el ejemplo
anterior en nuestra agenda telefónica o nuestra planilla Excel que mostraba cada
columna un dato diferente, podemos decir que los campos son esas columnas de
la planilla Excel.
Como ya sabemos, las tablas son colecciones de registros.
En un principio podríamos tener tablas vacías, es decir sin datos aun grabados en
ellas, pero lo que si ya tienen nuestra tablas es la definición de como estarán
conformados esos registros, es decir, cuando creamos nuestras tablas, el segundo
paso es diseñar su registro o colecciones de campos; estos campos son datos
individuales donde en su interior solo puede haber un valor alojado.
En comparación con una planilla Excel, podríamos asemejar a un campo a una
columna determinada.
En la siguiente imagen podemos ver una definición de los campos de una tabla en
Mysql.
Veremos en secciones siguientes sobre la importancia de prestar cuidado y detalle
a la creación de nuestros campos, para que nuestros datos se encuentren
optimizados o como se dice en base de datos NORMALIZADOS.
Pero siguiendo con el ejemplo de nuestra tabla llamada clientes, podríamos listar
los campos que vemos en la imagen como indispensables.
Si prestamos atención, ya se están aplicando algunas reglas de Normalización que
veremos más adelante y refiere que debemos en lo posible nombrar nuestros
campos de manera organizada, legible y siguiendo alguna norma, en este caso y
teniendo en cuenta que una base de datos poseerá seguramente numerosas tablas
y miles de campos, es conveniente que el mismo nombre del campo nos dé una
idea de que se trata.
Si en lugar de Cli_nombre, lo llamáramos simplemente nombre deberíamos ver a
que tabla se refiere el campo para darnos cuenta de que es el nombre del cliente y
no un proveedor.
De esta forma el nombre podría darnos rápidamente noción de su origen,
seguramente con solo leer el nombre de estos campos se dará una idea de que
valor contienen y a que se refiere dicho valor.
El nombre que les demos a nuestros campos es fundamental para una correcta
interpretación de nuestras tablas, campos y valores almacenados.

Debe ser costumbre que el campo comience con 4 caracteres o quizás algunos más
que denoten de que tabla proviene dicho campo.

Los prefijos:
Cli_ Provienen de clientes.
Pro_ provienen de proveedores.
Art_ provienen de artículos o productos.
Venta_ proviene de la tabla maestra ventas.

Son algunos ejemplos de posibles tablas de nuestra base de datos pero que nos
dan una idea acerca de que tabla provienen y se una Guion Bajo ( _ ) para separar
el prefijo del nombre.

El otro aspecto que debemos atender, es el tipo de datos de cada campo, no es lo


mismo una descripción que debe ser de tipo char o Vachar.

Un campo fecha, un campo numérico cada uno debe ser configurado de forma
correcta y teniendo en cuenta que para cada valor mínimo y máximo encontraremos
el tipo de dato correcto.

EJ: si nuestro campo es número de sucursal, sabemos que a lo sumo la empresa


tendrá un máximo de 100 sucursales.

No usaremos para ese campo un dato de tipo entero (INT) que ocupa 4 bytes y cuyo
valor máximo es 4294967295 millones de valore posibles, sería un derroche de
espacio en la tablas, sino que usaremos un campo TINYINT que es el dato entero
más pequeño posible que ocupa solo 1 bytes y cuyo valor máximo es de 255.
Es indispensable saber que ante la posibilidad de que algún día nuestro campo se
quede corto, es decir que algún valor alojado exceda el máximo permitido para el
tipo de dato, podremos sin perjuicio de la información grabada hasta ese momento
ampliar o cambiar el tipo de datos, no nos debemos preocupar en este momento de
lo que va a pasar dentro de años porque siempre vamos a podemos modificar el
tipo de datos y vamos a seguir manteniendo los datos en nuestra base de datos.

Ejemplo:
Hemos usado para un campo de número de sucursal el campo TINYINT cuyo valor
máximo es 255 y por una expansión global, mundial de nuestra compañía, adquiere
300 sucursales de golpe, nos ha quedado chico, hay mismo podemos cambiar el
campo por un tipo de dato SMALLINT que ocupa 2 bytes en lugar de 1, y tiene un
valor máximo de 65535, y solucionamos el inconveniente, nuestro campo columna
ahora soporta números más grandes.

No hizo falta hacer nada en el sistema, ni modificar programas, salvo que


internamente tuvieran validaciones que limitaran el tamaño del campo, ni hacer
Backups adicionales a la base de datos, con solo un segundo y grabando los
cambios en la tabla seguimos nuestro camino.

Siempre habrá la posibilidad de ampliar y mejorar la tabla, pero que en un comienzo


usen datos concretos que manejen límites normales y coherentes, porque esto va
a depender del tamaño que va a tomar nuestra tabla, el espacio que va a ocupar el
disco, el tiempo que va a insumir las búsquedas puede ser que sea medido en
milisegundos, pero si tuviéramos que buscar millones de registros, cuanto creen
que vamos a tardar teniendo un campo que ocupas 2 bytes contra 1 que ocupa 1
bytes.
A nadie se le ocurriría por ejemplo, crear un campo Cli_nombre, indicar al motor que
dicho campo tendrá un largo de 300 caracteres, no existe ninguna persona cuyo
nombre y apellido tenga 300 caracteres, imagínese nuestra tabla con 1000 de
clientes y por cada uno de ellos reservando e espacio de 300 caracteres, serían
unos 300000 bytes para alojar 1000 nombres.

Sería mejor sestearlo de 60 caracteres, cada campo puede ser inicializado con un
valor por default, es decir que si uno no le mueve explícitamente un valor, el campo
será inicializado con un valor en concreto.
Puedo crear un campo Estado, que tiene el estado 0 o 1, y puede indicar que ante
nuevos registros todos los nuevos registros le fuercen un 0 al campo estado, en los
del campo numéricos ese valor Default generalmente 0 o espacios cuando es de
tipos carácter o string y vamos a ver mucho más sobre los campos conforme
vayamos avanzando en este curso, no deben preocuparse ahora.

Sección 2, Clase 6
Conceptos de índices

Cuando pensamos en la palabra índice, se nos viene a la mente los índices de los
libros que no son más que un listado de temas apuntados a un número de páginas
determinado, esto fue creado y pensado para que los para que los lectores que
deseen solo abordar rápidamente el tema no tengan que leerse todo el libro
completo para encontrarlo; entonces, si tengo en mis manos un libro completo sobre
programación Java pero quiero ver solamente el tema que habla de tipos de datos
en java voy ir al índice y en pocos segundos encontrar el tema que necesito.

En una base de datos, los índices funcionan de manera muy similar y nos permiten
determinar qué campo serán índices, también solemos llamarlos clave.
Por ejemplo: la clave principal de la tabla clientes debe ser si o si el ID cliente, como
vemos en el siguiente ejemplo, al definirlo como índice.

Cuando le pidamos a la base de datos que nos ubique el cliente N. 2, que creen que
hará el motor de bases de datos, recorrer toda la tabla clientes, hasta encontrarlo o
ir a la ubicación del disco rígido donde se encuentra el registro correspondiente al
cliente N. 2.

Lo bueno es que podemos tener tantos índices en cada tabla como deseemos,
aunque luego veamos en la sección de Normalización de bases de datos aspectos
importantes a tener en cuenta a la hora de determinar un índice.
Hay principalmente 3 tipos de índices importantes:
1. El Primary Key o Clave Principal
2. Unique Key o Clave Única sin repetición.
3. Key solamente que es la clave, una clave cualquiera que puede estar
duplicada.
Vamos a ver cómo funcionan estos 3 amigos de la optimización:

1. El Primary Key: es la Clave Principal de cada tabla, es una muy buena


práctica que cada tabla tenga su Primary Key, por cuestiones de performance
y tiene la restricción de que no puede duplicarse, es decir por ejemplo:
En el ejemplo que vimos no podemos tener 2 registros con el Cli_ID igual a 2, se
supone que es la clave irrepetible con la que identificadores inequívocamente a
nuestro cliente. Esto mismo aplica a proveedores, artículos, cualquier entidad que
tengamos usuarios, cualquier entidad que tengamos grabada en la base de datos;
la Primary Key tiene la posibilidad de autogenerarse con una propiedad llamada
Autoincremento, cuando indicamos a nuestra tabla que nuestra Primary Key usara
un autoincremento significa que su valor se ira autoincrementado conforme creemos
nuevos registros.

En estos casos, no tenemos que mover ningún valor a ese campo, cuando creemos
nuevos registros.
El motor asignara a la Primary Key el próximo valor automáticamente, entonces
podemos crear el cliente Juan y el motor e pondrá el número 1, luego creamos el
cliente pedro y el motor le asignara el número 2.

Esta funcionalidad no viene por default (Defecto), uno tiene que tildar la casilla que
diga auto-increment, en la Primary Key para que tenga este comportamiento.
2. Unique Key o Clave Única sin repetición: Comparte al igual que las Primary
Key el hecho de que no pueden haber valores duplicados en el campo o en
el conjunto de datos señalados.

Cabe destacar que una clave no necesariamente debe estar formada por un solo
campo, quizás queremos crear una clave única uniendo para ello los campos de por
ejemplo Numero de factura más código de producto y evitar que un mismo producto
se duplique en una factura.

A diferencia de las Primary Key, las Unique Key no tiene la propiedad Auto-
incremento habilitada.

3. Key: Son Claves simples que admiten valores duplicados.


Ejemplo: Para una tabla Producto para el Campo Art_proID, si quisiéramos listar
todos los productos del proveedor 52, el motor solo debe consultar el índice y ver
en qué registro poner el foco.
Si en este ejemplo, Art_proID no fuera una clave, el motor no tendría otro remedio
que leer los miles y miles de registros de todos los productos que comercializamos
para separar los que correspondan al proveedor número 52 ocasionando un
problema de performance considerable.
Entonces vemos que los índices fueron creados para lograr buenas performance
accediendo a datos más representativos.

El Consejo es que si en total hay campos que son referencias a otros maestros, los
conviertas en índices sí o sí.

Ejemplo: durante una venta tenemos que alimentar 2 tablas, la tabla de cabecera,
de facturas y la tabla de detalle de facturas.
Este modelo lo vamos a ver bien cuando veamos sobre las tres formas normales de
optimización de bases de datos.
En la tabla de cabecera seguramente tengamos algunos de estos datos que vemos
ahora en pantalla:
FacM_Id
FacM_Fecha
FacM_Prefijo
FacM_NroFac
Terminando con FacM_CliID
Que son estos campos:
FacM_Id  Primary Key y Auto-Incremental.
FacM_Fecha  Fecha de la Factura.
FacM_Prefijo  es el prefijo de la factura, son 4 o 5 dígitos dependiendo del país
que representan al punto de venta de la factura.
FacM_NroFac  Numero de factura, son 8 dígitos del número de factura.
FacM_CliID  ID de cliente, aquí no voy a grabar el nombre del cliente, sería una
práctica horrible muy poco profesional grabar en una cabecera de factura el nombre
del cliente y ocupar todo el espacio que ocupa un nombre, cuando puedo tener el
ID que es un número que me va a llevar a la tabla maestra de clientes y hay voy a
tener todos los datos que necesite como Nombre. Email, dirección, y eso tiene que
ver con las buenas prácticas y con las optimizaciones de tablas; es bueno aprender
las optimizaciones que necesitan las tablas
En la tabla detalles de facturas que vemos a continuación, tenemos solamente 3
campos porque esto es un ejemplo:
FacD_Id  ID tabla de detalles, Primary Key y Auto-Incremental
FacD_FacMID  ID que me lleva hacia mi tabla maestra.
Esto es fundamental, a que llamamos detalle de una factura, a cada uno de los
ítems, a cada uno de los productos que vendí.
Entonces en mi tabla detalle tengo que tener un ID que me apunte a mi tabla
maestra.
Este producto que se vendió en la tabla de ventas se factura, a que factura
corresponde, aquí no voy a repetir en la tabla de detalles, no voy a repetir la fecha,
el número de clientes, el número de factura, no puedo repetir los datos, no puedo
duplicar la información, es una práctica totalmente condenable y propia de amateur
de bases de datos repetir información.
Y por último tenemos:
FacD_ArtID  ID de mi tabla de productos.
Nuevamente en la tabla de detalles de facturas, no voy a poner la descripción del
producto con el código, con la descripción, color, la medida, no voy a duplicar
información.
Si yo quiero saber que producto es, en base al ID que fue grabado aquí, me voy a
la tabla de productos y traigo toda la información.
Esto es básicamente un ejemplo de cómo usar ID y como optimizar bases de datos
con un breve ejemplo.
Es importante entender que aparte de la Primary Key, la fecha del campo cabecera
también conviene asignarle propiedades de índice, de clave porque es común
buscar las facturas que van de tal fecha a tal fecha, en un rango de fecha.
El Prefijo no sería importante, el número de factura habría que estudiarlo y si el ID
de cliente va a tener que ser claro, yo quiero todas las facturas del cliente número
2 y me va a ir exclusivamente a esos registros.
Imaginemos que el campo cliente no es clave, quiero todas las facturas del cliente2
del año pasado, al motor no le va a quedar otra que recorrer cada una de las facturas
del año pasado sean del cliente 2 o no, esto va a causar muchos segundos de
demora, a veces hasta minutos.
Para eso se crearon los índice, para bajar consultas que nos tomaría minutos sin
obtener una respuesta en solo milisegundos.
Estas consultas van a demorar milisegundos aun si la tabla tuviera millones de
registros, así que es muy importante el tema.
Ahora nos vamos a enfocar a partir de esta clase en lo que es optimización de
tablas.
Sección 3, Clase 7
¿Qué es MySQL?
Es un gestor de bases de datos y fue creado en el año de 1995 para ser más
exactos en el mes de mayo y a partir de ahí fue creciendo y creciendo en la
comunidad de Web máster, siendo utilizados en servidores Web y prácticamente se
hizo el más importante y famoso de los Gestores, porque tiene una versatilidad que
no tienen otros gestores gratuitos.
El hecho de que los motores gestores de contenido más importantes como
Worpress, Sunga y tantos otros lo hayan adoptado como la base principal, ha hecho
que los Web masters y luego las empresas adopten este motor de base de datos
que es increíble, puede soportar millones y millones de registros y aun así trabaja
con una versatilidad y con un tiempo de respuesta y fiabilidad enormes.
Oracle compro en el año 2010 a MySQL, hay una versión gratuita y una versión de
pago, con la versión gratuita van a poder trabajar tranquilamente incluso desarrollar
software sin ningún tipo de limitante.
Vamos a la página de Oracle y descargamos MySQL e instalamos en nuestro
equipo para empezar a trabajar.

Sección 3, Clase 8
Instalación MySQL en mi PC.
Lo que vamos a hacer en este momento es instalar MySQL., es muy simple, vamos
a abrir el navegador, abrimos la página www.mysql.com y nos va a llevar a la página
de Oracle, lo que tenemos que hacer es ir a la opción Dowloads (Descargas)
hacemos click y vamos a ver que las primeras versiones son las comerciales,
obviamente van a querer vender primero antes que regalar, así que vamos a
desplazarnos hacia abajo con el Mouse y vamos a ir al último Link Community (GPL)
Downloads », le hacemos click, vamos a ir nuevamente para abajo y vamos a ir hasta
MySQL on Windows (Installer & Tools) , si ustedes tienen repositorios de Linux, vana a
elegir la opción que ustedes necesitan inclusive en algún lugar que no hayan visto
por aquí pero se ha visto por otro lado, está el instalador de Mac, pero nosotros nos
estamos apoyando en la versión de Windows, hacemos click y vamos a hacer
nuevamente click en MySQL Installer.
Cuando quieren regalar algo la hacer difícil, por eso yo quiero mostrarles el paso a
paso. Porque si no pueden ser que terminen mareándose.
Bajamos un poquito, nos detecta que tenemos Windows, a pesar de que si tenemos
un y procesador de 64 bits, solo nos permite descargar la versión de 32 bits,
hacemos click en Downloads, nos oculta, fíjense que interesante, parece que si uno
no se loguea y no se registra no lo puede descargar, nos desplazamos un poquito
y le decimos
No thanks, just start my download. (Que no gracias, que solo queremos descargar
el MySQL), en breve segundos se descarga, estamos descargando la versión
completa de 200 Mb, si no el instalador simplemente de 16 Mb.
Abrimos nuestra descarga, confirmamos, les aclaro que durante la instalación les
pueden aparecer mensajes de error, vuelvan a intentarlo hasta que le permita la
instalación sin ningún problemas, tenemos que darle los permisos de administrador,
y el instalador va a aparecer

Sección 3, Clase 10
Instalando Heidi SQL en mi PC
Lo que vamos hacer ahora es descargar nuestro gestor de bases de datos, el
software que nos va a permitir manejar la base de datos, crear tablas, crear campos
hacer nuestras consultas SQL. Y vamos a aprender todo el lenguaje SQL utilizando
esta herramienta (Heidi SQL).

Lo único que tenemos que hacer es ir a la página de Heidi SQL (heidisql.com), y


vamos a la solapa Downloads hacemos click y vamos a bajar nuestro instalador,
tenemos 2 opciones vamos a elegir Installer, 32/64 bit combined, esto significa que
independientemente de cual sea nuestro sistema operativo, nuestro procesador se va a
adaptar perfectamente, hacemos click y comienza la descarga, son un poquito más de 15
Mb, esto demora un poco, ya podemos abrir nuestro instalador. Que buenos que es te
software, a todo le damos siguiente, instalar y rápidamente vamos a ver que tenemos
instalado en nuestro Heidi SQL.

Sección 3, Clase 11
Conectando al servidor de Bases de Datos con Heidi SQL
Como quedamos en el capítulo anterior, vamos a ya a ponernos a trabajar, se acabó
tanta teoría en el aire, vamos a empezar a volcar todos los conocimientos y vamos
a aprender muchísimo a partir de ahora, como les dije vamos a ir de menor a mayor
Lo primero que vamos a hacer con nuestro Heidi SQL abierto, es conectarnos a
nuestra base de datos, la que hemos instalado, vamos a ir a donde dice nueva,
vamos a llamarlo local, ustedes pueden ponerle el nombre que quieran.
De por sí, pode default el Heidi SQL me traen esta dirección IP de Local Host, esto
significa que cuando ustedes vean esta dirección, esta está apuntando hasta
nuestra propia PC, colocar esta IP es lo mismo que colocar la palabra Local Host y
el usuario por default que trae mi base de datos siempre es root, este usuario es el
que crea automáticamente cuando ustedes instalan el MySQL, y si recuerdan en el
instalador le ha pedido la contraseña para que ustedes definan una contraseña,
ustedes van a colocar la contraseña que ya han definido y vamos a darle el botón
abrir, previamente ustedes pueden guardarlo para que ya quede guardado, ya se
ha quitad la marca de conexión nueva, esta conexión queda guardada en nuestro
software para que nosotros podamos conectarnos en todo momento, ya tiene
guardado nuestras credenciales para no volver a pedirla,
Si por un tema de seguridad, ustedes tuvieran que compartir la maquina con otras
personas y no quieren y no quieren que estas personas ingresen en su Base de
datos, pueden dar donde dice pedir credenciales y esto haría que ante cada nuevo
intento de conexión a la base de datos les va a pedir por pantalla el nombre de
usuario y contraseña, es una medida de seguridad, por supuesto si ustedes están
en una PC, en donde ustedes no comparten con nadie las conexiones y demás lo
más fácil, lo más fácil y lo más cómodo es que no pidan las credenciales y estén
grabadas, así entran directamente a la bases de Datos.
Vamos a dar abrir, y vamos a ver que nos aparece ya nuestra conexión local y todo
esto que ven ustedes con este icono son bases de Datos, hay bases de datos que
son del sistema, que son propias del motor como information_schema, son propias
del sistema y tienen toda la información de la Base de Datos que ustedes crean.
Information_schema.. Esta base de datos es muy usada en programación, cuando
desde programación queremos sondear cuantas tablas hay creadas, como son los
campos, que nombres de campos, es para lo único que se usa esta base de datos.
Luego tiene una base de datos (MySQL) por default creada, que tiene una serie de
seteos propios de MySQL.
Perfomance_schema- después tiene otra tabla también perfomance que más
tiene que ver con una serie de tablas que nos sirven para reportes del uso de la
base de datos, generalmente todo esto que se está mencionando no van a tener
que usarse, si simplemente lo que quieren hacer es crear una base de datos, grabar
información y luego recuperarla, esto es algo ya más avanzado para gente de
sistemas que quieren hacer un desarrollo especial que tenga que ver con
desconocerla base de datos en a que me estoy conectando y poder desde
programación capturar la información de las tablas, los campos y demás. No vamos
a hacer uso de esto día a día.
Sys- Luego hay una base también adicional que es sys de sistemas y tampoco la
vamos a usar.
Y últimamente en las nuevas instalación tanto de Heidi sql como de MySQL, están
viniendo 2 bases de datos de ejemplo esto es algo muy nuevo, les diría que hasta
hace unos meses atrás no estaba, es una base de datos llamada:
Shakila - es una base de datos que tiene que ver con entretenimiento y mucha
información, son base de datos de muestra que vienen para que ustedes las
recorran.
Las base de datos llamada:
World  que es una base de datos con nombres de países y ciudades y cierta
información, son base de datos que les van a servir para hacer prácticas, para
insertar registros, para realizar consultas SQL, pero nosotros en el curso vamos a
tener nuestra propia base de datos.
Ya nos hemos conectado a nuestra base de datos local, ustedes lo deben estar
viendo por sus propios medios también, me gustaría que a medida que yo vaya
haciendo cosas, ustedes las puedan replicar en sus PC.
Sección 3, Clase 12
Creando nuestra primera Base de Datos

Sección 3, Clase 13

Sección 3, Clase 14

Sección 3, Clase 15

Sección 3, Clase 16

Sección 3, Clase 17

Sección 4
NORMALIZACION DE BASE DE DATOS
Sección 4, Clase 20
Empezaremos a ver el tema de:
OPTIMIZACION DE BASES DE DATOS
Vamos a hablar de:
 Como deberíamos crear nuestras tablas.
 Nuestros campos.
 Que reglas respetar para ganar en optimización y en performance.
 Cuáles son las malas prácticas y errores.
 Cuáles son las buenas prácticas, han creadas luego de décadas de trabajo
con bases de datos por miles de expertos.
Existe algo llamado las 3 formas normales, es como el ABC, lo primero que tendría
que aprender todo estudiante de bases de datos para no cometer errores.
Y da cuenta de una serie de reglas extremadamente importantes que se debe
cumplir al diseñar nuestras bases de datos y nuestras tablas y sus campos.
La primera forma Normal
 Primer Forma Normal: Dice  “No se deben repetir datos en una tabla”,
Nos referimos al famoso Maestro y detalle (Tabla Maestra, tabla de detalle)
Ejemplo, vamos a empezar con una tabla que está muy mal hecha, fijémonos en
esta tabla, se le ha puesto el nombre de ventas mal para que nos demos cuenta.

Tenemos una tabla de ventas, esta tabla de ventas me está mezclando cabecera
con detalle, tiene muchos errores, y si hablamos de la primera forma normal vemos
que estamos repitiendo información para una misma venta:
1. El número de factura lo estoy repitiendo Muchas veces.
2. El nombre del cliente lo estoy repitiendo muchas veces.
3. Y como lo verán está muy mal incluir en una tabla de ventas el nombre del
cliente ya habíamos hablado esto, el nombre del producto.
4. Y estamos repitiendo datos, la fecha de la factura va a ser la misma para
todos sus ítems, si tengo una factura donde vendí 10 productos diferentes,
no puedo repetir 10 veces la fecha.
Para eso se ha separado de acuerdo a la primera forma normal la factura de la
cabecera y el detalle de factura, así que vamos a ver por ejemplo como se puede
mejorar esta tabla, vamos a hacer una mejora pero no quiero extenderme mucho
porque estaría pisando la segunda forma normal, lo vamos a ver y lo vamos a
continuar la siguiente clase.

Tenemos una tabla llamada ventasmasomenos que mostramos a continuación:


Significa que yo ya algo he mejorado, si ustedes nos en ventasmal:

 Solamente tengo la Primary Key, no tengo ningún campo indexado.


 Tengo mi producto que es un Varchar de 60 o un texto.
 Mi cliente que es Varchar de 60, que es otro texto.
En la tabla masomenos,

 Ya se ha modificado el producto, ya se puso como numérico y se ha


cambiado el nombre por productoID.
 Y se ha hecho lo mismo con clientes y ahora es un dato numérico.
 Además los he convertido en índices para poder buscarlos rápidamente en
mi tabla de facturas.
Pero esto sigue estando mal, porque estoy repitiendo información en el campo de
número de factura, vamos a ver cómo quedaría bien.
Estas mismas tablas se van a mostrar en la segunda forma normal, no es una
incoherencia pero quiero que ustedes vean esto mismo, me voy a explicar en la
segunda forma normal que se extiende un poquito más y que me da más
información de cómo optimizar las tablas.
Ahora, cuál sería el resultado de ver nuestras tablas correctamente:
Yo tengo que dividir estos 4 registros en facturas de cabecera y en factura de detalle,
vamos a ver cómo quedaría:
Si vamos a la tabla de ventasCab (de cabecera):

Vemos que tenemos menos campos, porque son los campos que se van a repetir y
yo no tengo que repetir, aquí en definitiva tengo 2 facturas: la factura 150 y la factura
152, como son 2 facturas diferentes puede ser que la fecha coincida, no hay ningún
problema, puede ser que la fecha se repita y puede ser que yo tenga una factura
hecha como al cliente número 15 y que tenga una próxima factura con el cliente
número 15, no hay nada de malo que aquí la información se repita porque está
apuntando a 2 operaciones diferentes.
Ahora vamos a ver nuestra tabla de ventasdet (De detalle):

Nuestra tabla de ventas de detalle tiene:


 Por supuesto una Primary Key, que es auto numérico.
 Tiene una columna (ventasD_ventasM) que no hemos incluido en nuestras
columnas de ventasmal y vetasmasomenos, que tiene que ver con apuntar
al registro de cabecera de la tabla de cabecera.
Fíjense:
Tengo una Primary Key número 1, cuando yo tenga que exponer los ítems vendidos
en la factura 150, voy a tener que decirles que esos ítems pertenecen a la factura
con el ID 1, no puse el número de factura, siempre conviene apuntar al Primary Key
es una manera de unir tablas.
Entonces volvemos a la tabla de detalles:
Yo tengo que la factura con el Primary Key número 1, tuvo 3 productos. Si hubiera
vendido 15 productos en una sola factura habría 15 registros con el Primary Key de
las facturas VentasM con el número 1.
 Luego tenemos nuestros 3 ID de productos, hacemos de cuenta que hemos
facturado nuestros 3 primeros productos con sus cantidades y con sus
precios. Está bien que la cantidad y el precio unitario del producto pertenezca
al detalle y no pertenezca a la cabecera.
A lo sumo en la cabecera voy a tener un campo total, con el total de la factura, no
tenemos que unir esos 2 mundos, la cabecera con sus datos de cabecera,
recuerden que estos son ejemplos, en una cabecera de factura generalmente hay
20 o 30 columnas con impuestos, con la fecha, la hora, quien fue el usuario que hizo
la venta, quien fue el vendedor, muchísima información, muchas claves y muchos
ID apuntando a tablas maestras.
Vamos a ir al diseño de la tabla ventasdet:
Tenemos todos los campos que apuntan a un maestro, los tenemos como índices
tanto de la tabla maestra de cabecera (ventas_id), como la del producto
(ProductoID).

Y a su vez en cabecera:

Tenemos la fecha como índice, no porque apunte a ninguna tabla, sino porque lo
quiero poner como índice porque cuando quiera atraerme en una consulta todas las
facturas que el mes de enero me va a dejar el índice hacerlo rápidamente sin tener
en cuenta millones de registros que no tienen que ver con el mes de enero, por eso
fueron creados los índices.
Y también tengo el ID de mi cliente para que vaya a la tabla maestra de cliente, para
unir la cabecera de factura con la tabla clientes, el día que yo quiera hacer una
consulta de mi venta pero que quiero que me traiga el nombre del cliente, voy a unir
ambas tablas y voy a decirle, bueno, vamos a unir la tabla cabecera con la tabla
clientes y el punto de unión es el campo CliID, las va a unir perfectamente, las va a
machar y me va a traer todas las columnas y los campos que yo necesite tanto de
la tabla de cabecera como de la tabla cliente.
Esto es la primera forma Normal
Sección 4, Clase 21
La segunda forma Normal
Segunda Forma Normal: Dice  “Cada campo, cada columna de la tabla debe
depender de la clave principal”.
Esto significa que nuestra tabla cabecera debe tener campos que solamente tengan
que ver con la cabecera, esos campos tienen que depender de la clave principal,
del ID autoincremental de la cabecera, no tenemos que poner ahí cantidades de
productos, no tenemos que poner productos, porque estamos hablando de la
cabecera de una factura.
Del mismo modo y esto está más orientado al Detalle que a la cabecera o al
maestro, del mismo modo en el detalle no tengo que repetir, ni incluir ningún dato,
ningún campo, ninguna columna que tenga que ver con otra cosa que no sea el
detalle de producto.
Del mismo modo no vamos a incluir en la tabla clientes registros o campos que
tengan que ver con otra tabla, solamente vamos a incluir campos específicos,
optimizados en cuanto a su tipo de dato que tengan que ver con el ID de la tabla
principal.
Esto es muy importante, este es el famoso fecha de factura en el detalle, el famoso
número de factura, eso es lo que estaba mal, eso fue lo que se le cambio en el
ejemplo y esos es lo que se ve a continuación en la tabla de cabecera.
Así que lo que se ha hecho en el ejemplo anterior es optimizar la tabla de acuerdo
a la primera y a la segunda forma Normal de bases de satos

Sección 4, Clase 22
La tercera forma Normal
 Tercera Forma Normal: Dice  “No puede haber datos derivados”.
¿Que son los datos derivados?
Cuando nosotros tenemos en una tabla un campo identity, un campo ID, que apunta
hacia otra tabla,

Sección 4, Clase 23
Buenas practicas – más tablas – menos columnas
Sección 4, Clase 24
Buenas practicas – más registros – menos columnas

Sección 4, Clase 25
Buenas practicas – usar valores Default

Sección 4, Clase 26
Usar campos de estado

Sección 4, Clase 27
Buenas Prácticas - Use Índices para cada campo Significativo

Sección 4, Clase 28
Buenas prácticas - Tablas Resumen
Sección: 5
Lenguaje SQL
Sección 5, Clase 29
Introducción al Lenguaje de Bases de Datos
Hola qué tal, bienvenidos a esta nueva sección del curso completo de base de
datos, y llegamos finalmente a la sección del lenguaje SQL, el lenguaje de base de
datos, un lenguaje que va a permitir que ustedes logren cualquier tipo de consulta,
cualquier tipo de operación sobre su base de datos y fue creado precisamente para
poder interactuar con las bases de datos de manera ágil, versátil, y muy muy
velozmente.

SQL significa Structured Query Language o sea lenguaje estructurado de consultas,


es un lenguaje que fue creado inicialmente teniendo una visión y luego fue tan
popular y tan exitoso que fue adoptado por todos los motores de bases de datos
relacionales, hicieron con esto algo que no lograron quizás con lenguajes de
programación, lograron que todas las empresas y todos los motores comerciales
adoptaran como un estándar este lenguaje.
Es por eso que es tan necesario aprenderlo y por eso que es tan potente y que les
va a venir muy bien a ustedes aprenderlo de manera profesional y es lo que vamos
a hacer a lo largo de este curso.
Así que sin más, bienvenidos a esta nueva sección y vamos a comenzar con todo
con el lenguaje estructurado de consultas de base de datos.
Nos vemos en la siguiente clase.

Sección 5, Clase 30
Consultar nuestras tablas (Sentencia SELECT)
Hola, bienvenidos a este nuevo capítulo del curso completo de base de datos y
vamos a comenzar a partir de ahora a conocer el lenguaje SQL.
Vamos a comenzar con la instrucción madre del lenguaje SQL, la más importante
quizás, la que hace que tenga sentido el lenguaje SQL qué es nuestra instrucción
SELECT.
La instrucción SELECT es la instrucción que se usa para consultar la base de
datos y si nos guiamos por el inglés, ya que todo el mundo dice que el lenguaje SQL
es como hablar en inglés, el lenguaje nos dice que esta instrucción lo que hace es
seleccionar los datos que vamos a obtener en pantalla o en archivos o en lo que
nosotros necesitemos.
Vamos a ver un poquito de su sintaxis:
Vamos a tomar nuestra primer tabla que es la tabla clientes que es la más sencilla,
tenemos un ID de cliente, y un nombre:

Y vamos a hacer una simple instrucción SELECT, la más fácil de todas:


SELECT * FROM Clientes
SELECT  Siempre empieza con esta palabra.
*  Significa traerme todos los campos de la tabla.
FROM  Me indica de qué tabla debe tomar la información.
Clientes  De la tabla clientes.

Y lo voy a ejecutar recuerden que para ejecutar o dar F 9 o hacen clic en el botoncito
de reproducir, automáticamente me trae todos los registros de la tabla clientes.

Eso es lo que hace esta sintaxis, la sintaxis del SELECT es:

SELECT qué campos quiero tomar, Luego viene la cláusula FROM de donde los
quiero tomar y luego vamos a ver la clase que viene como empieza a tomar forma
nuestra sentencia SELECT para hacer cosas más complejas porque es muy
probable que ustedes no quieran obtener todos los campos o todos los registros de
nuestra tabla.
Con respecto a los campos, es una mala práctica, es algo no aconsejable el uso del
asterisco (*) porque si ustedes tuvieran una tabla con 30 campos y solamente lo
que quieren consultar es el número de CUIT, o el número de teléfono, o el email de
un cliente no tiene sentido forzar al motor para que nos traiga todos los campos,
todas las columnas porque están digamos, generando un un Izu de performance le
dice así en sistemas porque están haciendo que el procesador trabaje más de lo
que debe trabajar, están generando más tráfico en la red, Imaginen que pueden
tener un servidor en un servidor web, en un recurso compartido en la web y en la
web Todo lo que tiene que ver con transferencia de archivos o de datos tiene su
costo en tiempo y en procesador, entonces no tiene sentido pedirle que me traiga
todos los campos; es lo más fácil es lo más cómodo sí, pero no es lo que debe hacer
un profesional.
Entonces si yo solamente quiero la razón social coloco, que me traiga solamente la
razón social:
SELECT Cli_RazonSocial FROM Clientes

y si solamente quisiera el Id:

SELECT Cli_Id FROM Clientes

Ejecuto y solamente me trae la columna Id, no sólo es más rápido el motor no se


esfuerza tanto recolectando todos los campos y todas las columnas de mi registro,
por cada uno de los registros; imagínense que esta es una tabla de prueba donde
tenemos poquitos registros 2400 filas, Pero imagínense que tuviéramos tablas con
millones de registros, sería forzar demasiado, esperar unos segundos para que
venga la información y realmente no tiene sentido.
Entonces la sintaxis, Como les dije SELECT, el campo o campos, de que tabla o
tablas, y luego continúa con una serie de cláusulas que tiene la sentencia SELECT
que las vamos a aprender a partir de ahora.
Bueno este es el comienzo de la cláusula SELECT, la cláusula más importante y
vamos ahora a nuestro próximo capítulo donde vamos a empezar a hacerla cada
vez más versátil y completa.
Los espero.

Sección 5, Clase 31
Clausula WHERE
Hola bienvenidos a este nuevo capítulo del curso completo de base de datos y
seguimos con el lenguaje SQL, seguimos con nuestra instrucción SELECT y vamos
a ver a la madre de todas las cláusulas, una cláusula de la sentencia SELECT, que
si no existiera no tendría sentido nada del lenguaje de base de datos, nos referimos
a la cláusula WHERE, la cláusula WHERE es la que nos va a permitir filtrar
nuestros datos de consulta.
Vamos a ver cómo funciona:
SELECT Cli_Id FROM Clientes

A la sintaxis de la Sentencia SELECT, le vamos a agregarle una nueva cláusula, a


continuación (el orden siempre tiene que ser respetado, siempre comienza con
SELECT), el nombre de los campos, La cláusula FROM, de donde provienen los
campos y luego a continuación viene la cláusula WHERE.
Por ejemplo:
SELECT Cli_Id FROM Clientes WHERE Cli_Id>10

CLI aided sea mayor a 20 a 10 perdón fíjense cómo ahora sólo me ha traído los
Eiriz mayores
a 10.
No es condición necesaria que la cláusula Wear haga mención a un campo que
nosotros tenemos en la lista
de valores podríamos vamos a verlo en otra tabla o en esta misma.
Vamos a ver cómo nosotros podemos usar aquí un campo en nuestra cláusula
Wear que no ha sido incluido
en nuestra lista de campos por ejemplo que razón social sea mayor a la letra no
tiene mucho sentido
esto pero es para mostrar nos trae todos porque porque todos tienen al menos un
texto más complejo que
una simple letra.
Esto es para simplemente no tiene sentido la consulta pero es para que ustedes
vean como yo tengo independencia
en mi cláusula wear con respecto a mi lista de campos a mostrar no hace falta
incluirlo yo puedo aquí
vamos a tomar otra tabla la tabla productos por ejemplo vamos a borrar nuestra
consulta y vamos a decirle
que traiga
la columna descripción creo que se llamaba así.
Vamos a ver si Prot descripción que me traiga todas las descripciones de
productos de la Tabla Productos
donde por ejemplo nuestro precio sea mayor a cero y me trae todos los productos.
Todas las descripciones de los productos vamos a ver los datos.
Fíjense que hay una columna de.
No todos tienen precio.
Solo algunos tienen precio.
Por ejemplo este Energizer a 27.
Vamos a buscarlo para ver que es cierto
vamos a ordenarme permite hacer esto el G10 se huele.
Hago click en la columna y me ordenan los datos.
Vamos rápidamente a buscar Energizer a 27.
Se dan cuenta.
Esto es muy potente y vamos a ver que no queda ahí la cosa porque qué pasa si
vamos a agregar un par
de campos más pero Deivid
precio vamos a ejecutarlo.
Aquí tenemos para que ustedes puedan ver que el precio no he mentido.
Solamente me trae los productos que tienen precio mayor a cero.
Ahora supongamos que nosotros queremos hacer una consulta compuesta no
solo por una condición si no
que tenemos varias condiciones.
Entonces nosotros queremos vamos a la vez sólo para este caso voy a poner un
asterisco.
Vamos a ver todos los campos
ok.
Vamos a hacer así el G10 se cuela me permite no hace falta que esté todo en una
sola línea en el Jaydy
ese vuelo lo va a interpretar bien y lo va a ejecutar sin problemas.
Ahora yo quiero algo más complejo quiero que me traiga todos los productos cuyo
precio sea mayor a cero
que tengan estátus cero
y cómo uno de esos dos.
Esas dos condiciones.
Nosotros vamos a usar los operadores lógicos and y or si nosotros tenemos que la
condición es que tiene
que ser mayor a cero y además tiene que tener un estatus de cero.
Vamos a tener que usare Landa
esto sería traeme todos los campos de quién.
De productos Werdum donde donde el precio sea mayor a cero y el campo
produce Status
Estatus sea igual a cero.
Lo ejecutamos y fíjense en milisegundos como me trajo sin que sean estamos ojo
que estamos haciendo
consultas de dos campos que no tienen nada que ver con los índices no son
índices y me los ha traído
sin ningún problema y no es que tenemos dos registros tenemos 7200 registros.
Fíjense lo veloz que opera este motor de base de datos.
Bueno aquí tenemos ya nuestros productos filtrados con estátus cero y el precio
pero vamos a hacerlo
más complejo todavía y para eso vamos a tener que usar los paréntesis porque
recuérdense en las ecuaciones
matemáticas cuando nosotros creemos que primero evalué una condición la
metemos entre paréntesis y le
va a dar prioridad.
Yo quiero que me traiga los productos que tengan precio mayor a cero y que me
traigan los productos
cuyo estatus sea igual a cero o los productos cuyo estatus sea igual a uno y el
proveedor
sea igual.
Me la voy a jugar diciendo No sé si esto va a qué es lo que va a hacer esto eso la
consulta quiere que
traigamos sí o sí los precios que sean mayor a cero eso no se negocia y además
que lo filtre por los
productos cuyo estatus sea igual a cero o que no sea igual a cero que sea igual a
uno pero que pertenezcan
al proveedor 97 una cosa o la otra.
Vamos a ejecutar nos perdones Prov hoy día no es Prov tiene razón me
equivoqué.
Ahí está bueno.
Fíjense cumplió las dos condiciones solamente cuando encontró que el estatus
era uno se aseguró que
el proveedor sea 97.
No me trajo el estatus el estatus uno de otro proveedor no me trajo el estatus uno
del proveedor 41
o del 110 solamente incluyo los productos de estratos 1 cuando el proveedor era
97 para el resto solamente
me trajo de cualquier proveedor pero el estatus tiene que ser cero.
Se entiende esto.
Esto no tiene límites.
Podrían escribir una cláusula Wer del tamaño de un libro agregándole condiciones
parentesis y que cuál
es la idea.
Cuál es la idea del lenguaje se cuelen si la idea del lenguaje se cuele es que
ustedes con una sola
escritura de una sentencia sea simple o compleja puedan obtener el cien por cien
de la información que
necesitan.
No tengan que sobre esa información volver a filtrar nuevamente.
La idea es que con un solo disparo ya tengan todo lo que necesiten les envían
todo esto al motor el
motor lo resuelve a un muy bajo nivel.
Estamos hablando de código máquina y les devuelven los registros que ustedes
necesitan sea cual sea
la unión de tablas las condiciones lo quiero ordenado los quiero agrupados vamos
todo eso lo vamos a
ir aprendiendo a lo largo de estas clases.
Pero fíjense qué potente que es la cláusula Wear no sólo funciona con datos
numéricos.
Vamos a ver luego todos los todos los chiches que nos da el lenguaje SQL para
trabajar con descripciones
con nombres con fechas y a ver si tenemos alguna con fecha.
Quiero que ustedes vean bueno aquí tenemos vamos a colocar todas las
columnas tenemos una tabla que
nuestra tabla ventas donde manejamos fechas.
Vamos a hacer un pequeño ejercicio vamos a vamos a traer de nuestra tabla
ventas por ejemplo nos interesa
la fecha no sé si está así escrito sin ventas y bajo fecha ventas el número de
cliente y vamos a colocar
un campo más que es el total
from Verduga vamos a probar que esto funciona funciona perfecto me traen mis
tres campos.
Todavía no tengo claúsula Wear y ahora vamos a colocar una cláusula Wear
donde yo quiero
los registros de venta de la fecha que sea superior.
Vamos a ver qué fechas tenemos al 3 de enero ok y vamos a poner ventas fecha
cuando sea mayor las fechas
van con comilla simple siempre en mi ciclo las fechas van con comilla simple y van
con el año Hyon el
mes y en el día siempre Este es el formato de fecha de mi ciclo lo tienen que
aprender porque no va
ni él ni el día barra al mes barre el año no se los va a rebotar.
Este es el único formato posible de fecha cuando el ejecuto fijense me filtró a partir
del 4 en adelante
y yo podría hacerlo más compuesta yo puedo decirle que la fecha sea mayor a
tres y la ventas fecha.
Vuelvo a repetir el campo no hay problema sea menor a pero al día 10
fíjense día 4 5 6 8 9 y se terminó la historia.
Y a esto que me trae le podría agregar otras cosas.
Por ejemplo y además de eso que el cliente
sea distinto de uno el mayor y el menor es lo que usamos para indicar que un
valor sea diferente.
Nuestro cliente 1 es consumidor final ya lo conocemos no necesitamos las ventas
de los consumidores
finales queremos las ventas de los clientes que tienen un Eiriz registrado y una
ficha de cliente para
poder cobrarles para poder llamarlos para poder hacer lo que nosotros queramos
lo ejecutamos y fíjense
que mi campo ventas Clea y Dib ya no es uno me ha filtrado y me sigue filtrando y
yo ahora quiero además
de esto y le doy Enter.
Que me traiga no solo las ventas entre el día 4 y 9 de enero y de mis clientes que
no sean consumidor
final sino que también quiero saber solamente las ventas que superen los 1000
pesos o mil dólares o
en qué esté expresado la moneda de acuerdo a cómo Uds. la han interpretado
simplemente mayor a mil
fijense es un pestañear es algo que no es algo buenísimo es algo con lo que van a
trabajar y se van
a encantar y tengo 54 registros Fíjense aquí me dice tres columnas 54 registros y
yo lo podría ir todavía
complejizando más pero esto jueguen ustedes.
Les pido que empiecen a usar CL fueron Wer con los con los operadores aun y
con las tablas que tienen
empiecen a practicar porque esto se va a ir a complejizando y tenemos que ir
afianzando conocimientos.
Por supuesto también pueden preguntarme sin ningún problema fíjense estos 54
registros ahora y cuántos
registros tenemos una ventas Thaçi 7200 registros de ventas 7200 registros de
venta.
Vamos a limpiar nuestro filtro.
Fíjense la rapidez de esto con la rapidez con la que ha hecho esto 7200 registros
de ventas y es un
pestañear y ya la consulta cuando lo hago por segunda vez como ya lo había
hecho me demora nada.
Vamos a ver cuánto demoró la anterior.
Vamos a agrandará un poquito esto.
La anterior de 54 registros me tardó 15 milisegundos pero no tardó 15
milisegundos en mostrarme 54 registros
tardó 15 milisegundos en recorrer 7200 registros y filtrar solamente por los que yo
necesitaba.
Fíjense lo potente que es esto así que vamos a continuar en la clase que viene
mucho más metiéndonos
en el mundo de la sentencia C.L y vamos a ver cómo se va enriqueciendo con
operadores con cláusulas
y con condiciones que vamos a ir metiendo en nuestra gran estrella sentencia del
lenguaje se cuele nos
vemos en la clase que viene.

Sección 5, Clase 32
Unión de Tablas con la cláusula WHERE

Sección 5, Clase 33
Clausula Order By

Sección 5, Clase 34
Funciones Sum() Count() Max() AVG() min()

Sección 5, Clase 35
Clausula Group By
Me permite segmentar la información y en base a cada segmento voy a poder sumar
Sección 5, Clase 36
Clausula IN / NOT IN

En este capítulo vamos a aprender 2 cosas:

1. Obtener valores únicos en nuestras tablas.


2. Subconsultas (Instrucciones Select metidas en otras instrucciones Select).

Para que una consulta Select, se convierta en Subconsultas deben pasar 3 cosas:

1. Figurar entre paréntesis dentro de otra sentencia Select, además si o si debe


de haber un solo campo en el área de datos.
8.
}SELECT Prod_Id AS Codigo, Prod_Descripcion AS
Nombre_Producto_que_Nunca_he_vendido
FROM productos
WHERE Prod_Id NOT IN(select DISTINCT(VD_ProdId) FROM Ventas_detalle)
9.

SELECT Prod_Id AS Codigo, Prod_Descripcion AS


Nombre_Producto_que_no_me_han_vendido_a_prtir_del_2018
FROM productos
WHERE Prod_Id NOT IN(select DISTINCT(VD_ProdId) FROM Ventas_detalle,
ventas
WHERE VD_VentasId=ventas_Id AND Ventas_Fecha > '2018-01-01')

Sección 5, Clase 37
Clausula BETWEEN
Nos va a dar valores entre un rango de fechas, de valores, de números de string de lo
que ustedes quieran.
SELECT Ventas_Fecha, Ventas_CliId, Ventas_total
FROM ventas
WHERE Ventas_CliId BETWEEN 2 AND 100

Sección 5, Clase 38
Clausula LIKE

Nos permite buscar en campos string, un texto


SELECT Prod_Id, Prod_Descripcion, Prod_color
FROM Productos
WHERE CONCAT(Prod_Descripcion, Prod_Color) LIKE '%AD%'

Sección 5, Clase 39
Clausula INNER JOIN (Unión de Tablas)

SELECT Ventas_Fecha, Ventas_NroFactura, Ventas_CliId, Cli_RazonSocial,


VD_ProdId, Prod_Descripcion, Prod_ProvId,
Prov_nombre, VD_cantidad, VD_precio, (VD_cantidad * VD_Precio) AS parcial
FROM ventas
JOIN Ventas_Detalle ON VD_VentasId = ventas_Id
JOIN productos ON VD_ProdId=Prod_Id
JOIN Proveedores ON Prod_ProvId=Prov_Id
JOIN Clientes ON Ventas_CliId=Cli_Id
Sección 5, Clase 40
Clausula LEFT, RIGHT y FULL JOIN (Union de Tablas)

Sección 5, Clase 41
Funciones básicas en MySQL

Sección 5, Clase 42
Instrucción INSERT (adicionando datos a nuestras tablas)

Hola qué tal.


Bienvenidos a este nuevo capítulo del curso completo de base de datos.

Y llegó el momento de salir de nuestra sentencia SELECT y meternos en la


ejecución de comandos en nuestra base de datos.

Nos espera tres comandos, tres instrucciones que tienen una misión muy definida
cada uno.

El primero y el que vamos a ver en este capítulo es la sentencia INSERT, para


insertar datos en nuestra base de datos.

Si no existiera esta sentencia no tendría sentido La base de datos, es la sentencia


con la que vamos a alimentar las tablas y vamos a crear registros en nuestra base
de datos y vamos a verlo lo más completo posible con todos los condimentos que
tiene esta instrucción INSERT, La sintaxis es muy simple, se le dice insertar en
donde, en una tabla.
Vamos a hacer un ejemplo con la tabla alumnos vamos a ver aquí nuestra tabla de
alumnos vamos a tener que saber los campos a ver si tienen algún valor
predeterminado.

Vamos a achicar esto un poquito el único dato que vamos a ingresar es nombre por
qué.

Porque sabemos que nuestro Id es un campo que lo va a llenar automáticamente el


motor.

Nosotros no tenemos que moverle ningún valor así que vamos a empezar de lo más
sencillo a lo más complejo:

INSERT INTO alumnos (alumno_nombre)

y lo que va después del paréntesis es la lista de los campos en los que vamos a
insertar valores.

En este caso, vamos alumno, nombre Cierro paréntesis.

Por qué.

Por qué no tengo más campos.

Si tuviera más campos para insertar los separo por comas dentro del paréntesis.

Pero ya lo vamos a ver en otro ejemplo luego va una cláusula llamada VALUES
inmediatamente abro otro paréntesis para indicar los valores ok.

En el primer conjunto de paréntesis tenemos los campos en el segundo conjunto a


la derecha de válidos tenemos los valores tan simple como eso y como el nombre
es un campo de tipo string el valor tiene que estar encerrado entre comillas simple
no comilla doble.

Un ejemplo ejecutamos perfecto no nos dio ningún error aquí abajo no nos dice que
hay una fila afectada y que duró.

Fíjense que las inserciones duran más tardan más en hacerse que los.
La sentencia C.L.

Esto es porque al haber índices tiene que armar la tabla de índices y tiene que armar
la tabla de datos.
Vamos a nuestros datos y tenemos ya nuestro quinto registro que es Pedro Narvaja.
Fíjense qué fácil.

Ustedes sólo tienen que aprenderse esta estructura INSERT INTO la tabla.

Los campos encerrados entre paréntesis valioso y los datos vamos a ver ahora algo
más complejo pero no complejo porque cambie sino porque va a hacer más campos
porque van a ver que es muy fácil.

Tenemos la Tabla Productos ahora todos mis todos mis campos de la tabla
productos tienen un valor predeterminado.

Esto significa que yo podría obviar todos y hacer simplemente un insert de la Tabla
Productos pero le vamos a colocar al menos una descripción para que vean el
registro si no no van a ver nada.

Vamos a cambiar aquí y aquí le vamos a poner una descripción no sé mesa y cuatro
sillas insertamos.

Y fíjense cuál es cuál es la diferencia de alumnos a productos alumnos.

Yo tenía solo un campo para ingresar valores en productos tengo muchos campos
pero sin embargo aproveché los logos los datos predeterminados y lo que hice fue
alivianar mi sentencia y solamente ingresar la descripción.

Aquí está mi mesa y cuatro sillas.

Fíjense que ya me dio un número de producto una idea de producto una descripción
en color tiene un valor por defecto de nada de un espacio me puso un estatus 1
porque es mi valor por defecto.

Aquí lo tenemos.

Me puso un precio en cero seguramente muy bien tengo el Heydi de proveedor mi


valor por defecto es un Nul o sea no va a tener forma de enlazar este registro con
una tabla proveedores y el resto de mis campos con valor por defecto.

Fíjense lo que yo les comentaba en mi consejo de optimización de base de datos


de lo rápido que puede resultar en tablas que tienen muchísimos campos cuando
ustedes tengan que hacer operaciones sobre ella cuando solamente tengan que
incluir o mencionar los campos que no tengan valores por defecto y yo podría hacer
una inserción tranquilamente de un registro más obviando la descripción pero hacer
un registro sin sentido porque también la descripción tiene un valor por defecto y
me va a crear un registro con una idea nada más sin ningún tipo de valor sustancial.
Esto es todo lo que ustedes tienen que saber de insert vamos a hacer algo más
completo para que ustedes vean vamos a agregar a nuestra descripción además el
color y esto es igual separo por comas abro comillas blancos de color blanco para
mi mesa y cuatro sillas y aquí podemos poner la mesa sola para no repetir lo voy a
poner aquí puedo usar funciones obviamente no puedo poner un cais y me va a
convertir en mayúscula el dato que yo le ponga.

Imagínense que esto viene de va a venir y se va a ejecutar desde aplicaciones


ustedes no van a ir a insertar sus registros a mano van a tener aplicaciones donde
el usuario rellena unos unos campos unos textbook van a apretar el botón Grabar
van a hacer clic en grabar y todo esto se va a armar una sentencia INSERT en
memoria y se va a enviar a la base de datos para alimentar sus bases de datos.

Vamos a darle ejecutar aquí nuevamente fíjense que ahora tardó unas décimas
unas centésimas de segundo o más.

Tenemos dos campos y ahora si bajamos tenemos vamos a refrescar a recargar y


aquí tenemos nuestra mesa en mayúscula color blanco y el resto de nuestros
campos totalmente autocompletado.

Si tuviéramos que ingresar algún algún dato de tipo numérico el orden en que yo
ponga los campos no importa no interfiere.

No importa que si en la tabla la descripción está antes del color yo puedo cambiar
aquí y poner el orden que a mí me guste y le voy a poner un precio de 100 komas
7.50.

Obviamente al usar la coma como separador de campos no puedo usar la coma


como decimal.

Además en mi ciclo el decimal es el punto y no la coma.

Este dato también es importante.

Lo voy a ejecutar vamos a ir a nuestra tabla voy a recargar y voy a tener otra mesa
de color blanco por 100 con 50 y aquí me lo muestra con comas.

Pero no importa no importa con qué me lo muestra me lo muestra con Koma porque
para mi Windows el separador decimales la coma pero para cuando ustedes tengan
que grabar instrucciones o hacer una actualización de tablas van a tener que usar
el punto decimal.
Bueno esto es esto es todo el misterio de la sentencia.

Como verán tiene mucho más complejidad la sentencia Cele porque es mucho más
completa tiene muchas cláusulas tiene mucha mucha vuelta y recuerden que con
una sola sentencia INSERT ustedes podrían traer un conjunto de datos y con
funciones en el medio bastante grande.

Pero la sentencia INSERT es tan simple como esto ustedes van a ver quizás en
algunos ejemplos en Internet van a ver cosas así sin los campos en este caso si yo
ejecutara esto ahora daría un error porque para obviar la lista de campos es
necesario que los valores sí estén ordenados y no me salté ningún campo si estén
ordenados de acuerdo a cómo fueron creados en la tabla en este caso yo voy a
tener que incluye primero la descripción después el color después el estatus.

Aquí no cuenta y esto es muy importante aquí no cuenta los valores por defecto si
yo no coloco la lista de campos estoy obligado a insertar la totalidad de los campos
de la tabla.

Nadie usa esto.

Realmente no sé ni por qué ponen el ejemplo en internet quizás para tablas que
tengan dos campos para no tener que mencionarlos y yo ya sé que en un campo va
un dato numérico y en el otro una string y se hace mucho más rápido pero en tablas
maestras de cierta importancia.

Es necesario que ustedes coloquen antes del valioso la lista de los campos así que
bueno esto ha sido todo honesta en este capítulo en la clase insert hagan prácticas
practiquen insertar registros en cada una de las tablas en cada una de las tablas
que tienen en el curso vayan a la solapa de datos refresquen y vean qué fue lo que
hizo.

Jueguen con funciones y realmente cuando estén preparados pasen a la clase


siguiente que la clase del aplique donde vamos a aprender a actualizar datos.
Esa es un poco más completa tiene un poco más de variantes así que bueno sin
más.
Los veo en la próxima clase.
Sección 5, Clase 43
Instrucción UPDATE (Actualizando datos de nuestras tablas)

UPDATE productos SET prod_status = 0


UPDATE productos SET prod_status = 1 WHERE prod_precio > 0
UPDATE productos SET prod_status = 1, Prod_VentasSuspendidas=1
WHERE prod_precio > 0

UPDATE productos SET prod_precio = 0, Prod_CompraSuspendida=1


WHERE prod_provId= 0

UPDATE productos SET prod_precio = 100


WHERE prod_provId IN
(SELECT Prov_Id FROM Proveedores WHERE Prov_CompraSuspendida=0)

Sección 5, Clase 44
Instrucción DELETE (Borrando registros en la Base de Datos)

Cuestionario 4: Examen para la sección de Lenguaje SQL


Sección 6
Ejercicios puntuales de la instrucción SELECT

Sección 6, Clase 45
Ejercicios SELECT para una sola Tabla

Вам также может понравиться