0% encontró este documento útil (0 votos)
9 vistas

SQL

Apuntes de SQL

Cargado por

5531276172brc
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
9 vistas

SQL

Apuntes de SQL

Cargado por

5531276172brc
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 65

SQL Structured Query Language

Lenguaje para base de datos relaciones. Es un lenguaje estandarizado. Es


basado en el algebra relacional.
Permite crear y administrar bases de datos. Del mismo modo permite la
consulta, modificación, eliminación, crear restricciones, crear análisis de datos,
informes, puede analizar usuarios, limpieza de datos, normalización de datos y
optimización de rendimientos.

Fundamentos.
Diagrama Er (Chen)
Entidad: es una representación de algo. Usa la notación de Chen que es una
forma de representación de entidades y relaciones entre sí.
Ejemplos de entidades en un base de datos: clientes, proveedores, órdenes de
compra.
Atributos de una entidad: es la información que compone a la entidad,
suponiendo que nuestra entidad sea “Casa” pues “Casa” debe tener: dueño,
precio de compra, tamaño de la construcción, entre otras.
Existen atributos simples y compuestos.
Atributos simples: son atributos de datos únicos, ejemplo el precio de una casa,
que puede ser cien mil dólares.
Atributo compuesto: puede ser el ambiente de la casa, ejemplo el comedor, un
recibidor.
Atributos multivalor: ejemplo los ambientes, por hay varios objetos, ventanas.
Atributos derivados: son atributos que se pueden obtener como cualquier otra
información. Ejemplo en un casa: la antigüedad sería un atributo derivado
porque se puede obtener con la fecha de una casa.
Representación de entidades:

Atributos simples: representados con un círculo simple.


Atributos compuestos: representados por círculos simples, sacas una línea de
un simple, conectados entre sí.
Atributo multivalor: representados doble circulo.
Atributos derivados: representados por una línea punteada.

Clave o key: es una forma única de identificar algo, se representan con un


subrayado con la notación de Chem.
Primeros pasos SQLite. (lenguaje dinámico)
Tabla: una tabla es una estructura de datos que se organiza en filas y
columnas.
Campo: es el nombre de la columna, el encabezado de la columna.
Registro: es una fila entera.
Valor de campo: la información de que converge del campo y el registro se le
conoce como valor de campo.
Consulta:
Identifiers:

Anexo 1: tipo de dato.

Tipo de dato

Integer: es el equivalente a un dato entero.


Text: texto, almacena todo lo que tiene que ver con texto.
Blob: almacena datos binarios, archivos, imágenes, etc.
Real: almaceno número flotantes. (8 bytes, es más rápido, pero con poca
precisión matemática)
Numeric: almacena números con precisión matemática muy alta. (Sin límite de
bytes, pero es lento)
Anexo 2: valor.
Modifica el
campo

Es por si queremos que todos los datos que se vayan a registrar, se registren
con un nombre específico cada que se inscriba un dato

SELECT.
Es la sentencia para hacer consulta o búsqueda almacenada en una base de
datos.

La siguiente
sintaxis significa
seleccionar todos
los de datos de la
tabla users. El
asterisco se ocupa
para denotar la
consulta de todos
los datos.

INSERT INTO.
Insertar información en la tabla.

La sintaxis para poder hacer una inscripción de datos se encuentra en la


imagen.
La terminal muestra que se ejecutó una query con éxito, lo que se pensaría es
el porqué de ese mensaje si se supone que se realizó una inserción, pero
resulta en SQL todo es una consulta.

Ejemplo 2:

Tabla del ejemplo 2:


Esta es la tabla que devuelve
nuestro código escrito
anteriormente. Es correcta,
pero ejecuté dos veces la
tabla y la información se
registró dos veces.

¿Como puedo ver mi tabla generada? Se hace uso del siguiente comando.

Hacer uso de un select se puede obtener información de los usuarios de


manera total o parcial:
SELECT name, age FROM users
Donde name y age son la información que queremos filtrar.

Las tablas son entidades que almacenan información


Identificadores (llaves primarias).

Primarios.

¿Cómo hago
para identificar
que son
registros
distintos?

Un identificador primario tiene como función agregar un registro directo en la


tabla para así poder diferenciar entre registros.
¿Cómo se hace una Primary Key?
1) Dirígete a la parte de Data Structure
2) Entrar a la tabla disponible
3) Modificar la tabla disponible
4) Agregar un nuevo record en la tabla y pulsar la opción de move top.
5) Una vez esté en el top hay que presionar la opción para que ésta se
convierta en Primary Key y se pueda activar la opción Auto Incremente,
del mismo modo podemos mencionar que una Primary Key no
necesariamente debe ser auto incrementable.

Id_user es
cnuestra
primary key

Registro para nueva tabla, a partir de una nueva tabla.


Se crea una nueva estructura para una tabla en la que se crea un registro
médico y se crean los siguientes registros

Ahora cuando se ejecuta el SQL se nos muestra en terminal lo siguiente.

Esto es un
ejemplo
de
consulta
Se muestran los datos de la tabla anterior, porque lo que se está realizando a
la hora de las consultas es una sobre escritura de datos. En la primera consulta
se llama a la tabla de rondas médicas y después se hace una consulta a los
usuarios.
Esto ocasiona que se nos muestre la tabla en la que se está haciendo la
inscripción del medical round y después en esa tabla de inscriban los datos de
la tabla usuarios.

La superposición se evita colocando una coma entre consultas, solamente que


ahora superpone las tablas.
Clave foreign.
Campo que hace referencia una primary key de otra tabla.

Interrupción para no olvidar como realizar inserts en una table. Recuerda


mantener una sintaxis correcta.

Creación de nueva tabla


CREATE TABLE "med_liners" (
"id_round" INTEGER,
"professional" TEXT,
"id_user" INTEGER,
"reasons" TEXT,
"time_round" TEXT,
PRIMARY KEY("id_round" AUTOINCREMENT)
);
Respecto a claves foráneas: ¿por qué el identificador de usuario es posible que
se repita, si no debería? Porque la consulta se realizó 2 veces.

En la tabla anterior podemos encontrar el campo id_user, sabemos que en


nuestra tabla principal tenemos una Primary Key que lo que hace es crear un
identificador para cada dato insertado.
Cuando instanciamos nuestro identificador de la tabla principal en una tabla
secundaria éste pasa a convertirse en una Foreing Key, la cual permite hacer
una referencia a una clave primaria de otra tabla. Aunque las FK no son
sostenibles a gran escala, de vez en cuando son necesarias. Una buena
práctica es que si sabemos que vamos a hacer una relación entre tablas lo que
debemos hacer es nombrar nuestra Foreing Key de relación o sea que debe ser
nombrada igual que la Primary Key.
Elaboración de diagramas.
Bases de datos de prueba. Base de datos Northwind.

Renombre temporal de variables.


Esto es con fin de comodidad para el administrador de la base datos, si la
persona encargada lo decide puede mandar una solicitud y con la palabra
reservada AS puede colocar el nombre que la persona decida.
Ejemplo:

La flecha roja está


indicando que se
está haciendo una
consulta a
LastName, la flecha
azul indica un
renombre de la
columna LastName

Manera de ordenar, usando ORDER BY.


Se mostró que es posible ordenar una tabla de manera de manera, ascendente,
descente.
El orden prioritario de los ordenamientos, de menor valor a mayor valor de
jerarquía: null, numérico, caracteres especiales, letra.

De acuerdo con la forma ascendente NULL es el dato que menos valor tiene en
la jerarquía. Si deseamos que nuestra jerarquía mantenga el mismo orden pero
no queremos que los NULL estén representados en la parte de arriba, podemos
hacer lo siguiente.
En la siguiente imagen se hace referencia a lo mencionado
anteriormente.
Eliminar los duplicados de NULL de una tabla.
Para poder ver solo los datos originales de una tabla, sin incluir los duplicados
de los datos. Usamos la siguiente palabra: DISTINCT, que lo que indica es que
solo se muestren los datos que no han sido duplicados. En el caso que nuestra
tabla se encuentre con múltiples valores NULL cuando se ejecute el comando lo
que hará será borrar los N valores NULL solo dejando uno ya que ese uno que
se quedé es lo que DISTINC tomará como único.

Ahora, también es posible combinar métodos de ordenamiento, el siguiente


representa una forma de generar un ordenamiento aleatoria a partir de la
anulación de los valores repetidos NULL.

Para confirmar que la opción de volver aleatorias las cosas está funcionando
correctamente, hacemos una segunda consulta para poder confirmar que la
proyección de la tabla nuevamente es distinta.
Del mismo modo también podemos hacer un ordenamiento mediante jerarquía
alfabética. A pesar de que de nosotros instanciemos una jerarquía alfabética, si
llega a ver un valor NULL inscrito en la tabla; éste se va mostrar en la parte
superior o inferior de la tabla, dependiendo que tipo de jerarquía se le haya
indicado, si una descendente o una ascendente. Suponiendo que nosotros
hemos hecho una consulta con el orden ascendente, el dato de jerarquía
mostrará el valor de menor importancia en la punta.
Ejemplo: la consulta en la tabla fue realizada de manera ascendente, como
podemos observar es posible la visualización de los datos ordenados de
manera alfabética y además confirmamos la teoría de que NULL es un tipo de
débil.
Condiciones.
Nos ayuda a filtrar datos específicos.

Cláusula WHERE.
Es una manera de filtrar datos, ejemplo.

O bien de la siguiente forma, en la que se puede ubicar

La salida para ambos casos será:

Para eliminar un dato:


Consulta para hacer actualizaciones en una tabla.
Para actualizar algún dato de nuestra tabla es necesario hacer uso de la
palabra UPDATE de posteriormente debemos indicar la tabla a la que le
queremos hacer una actualización.
UPDATE tabla_a_actulizar
SET columna_a_actualizar = ‘dato_que_sustituyes’
WHERE usar_id_de_identificación = id  con fin de especificar el renglón
donde se quiere realizar la actualización de información

Si deseamos ver la información actualizada podemos hacer una consulta


SELECT a la base datos.
Uso de operadores and, or not.

Operador AND
Operador OR

Mezcla de AND y OR en una sola consulta.


El uso de OR en una consulta sentencia la posibilidad de que algo o algo sea
verdadero, es decir una de las opciones puede retornar falso.
Cuando se sentencia los operadores AND y OR en una consulta, está indicando
que existe una consulta que puede ser verdadera o no y una que debe ser
obligatoria.

En la consulta se solicita que se muestre la información de la tabla de


productos. Posteriormente se hace la consulta con ayuda del WHERE para
especificar tabla en la que se va a realizar la consulta. En seguida se sentencia
para que busque en la categoría de un precio mayor a 20 dólares o que busque
en la categoría de ID 6, cualquiera de esas dos sentencia s indica que puede
ser verdadera, sin embargo, después se especifica que sí o sí deben pertenecer
al proveedor con ID 7.

Sintaxis de ejemplo
WHERE (FALSO o VERDADERO) y OBLIGATORIO

Uso del operador NOT


Se ocupa para negar una condición, podemos seleccionar una condición
verdadera, pero usando el NOT se niega la condición.
Es decir, que si hacemos una solicitud para que se muestren los productos que
cuestan mas de 40 USD, usando el NOT se va a negar esa condición solo nos
va a mostrar los productos que cuestan menos de 40 USD.

Ejemplo de uso individual de NOT en la consulta


Aquí podemos analizar como que nuestras dos sentencias verdaderas son que
country sea usa y france pero la negamos usando NOT, lo que significa que al
hacer la consulta solo mostrará datos que no provengan de USA ni de France

Uso de límites en consultas.


Suponiendo que necesitamos realizar una consulta en la que queremos que se
despliegue cierto número de datos a partir de cierto índice (identificador)
podemos usar la siguiente sintaxis.

Consulta de muestra
WHERE lugar_de_consulta SENTENCIA (si es que la hay)
AND NOT Country = ‘Germany’  ejemplo de discrimación de datos usando
NOT
AND
LIMIT 5  Indica que no debe desplegar mas de 5 elementos a partir de la
sentencia indicada.

Ejemplo de uso de la cláusula LIMIT:


Operadores lógicos de comparación.
Funciona como un “distinto de” en cualquier lenguaje de programación.

Recordando el funcionamiento de los operadores NOT sirve para cuando


quieras hacer discriminación de información. O sea que si nosotros queremos
hacer una consulta donde queramos visualizar ciertos datos excepto una
información en específico podemos usar NOT
Ahora que si se incluye, un operador lógico, como ‘!=’ (el cual funciona como
una negación) antes de dato que se quiere discriminar, se anularía la doble
negación para así mostrar los datos que en un principio se deseaban
discriminar.
Operadores LIGHT, BETWEEN

El operador Between sirve como un limitante de búsqueda entre un conjunto


de campos de una columna.

Ejemplo de consulta:

La siguiente consulta sentencia una búsqueda en la tabla Productos donde


solicita una información en un rango de precio específico. En el ejemplo
anterior de sentencia la consulta de productos que estén en el rango de precios
de 20 a 40 USD en la tabla de Productos.
Between incluye los valores límites. Por obvias razones el primer valor no
puede ser mayor al segundo valor, del mismo modo tampoco podemos buscar
en datos que no sean compatibles.
Salida de ejemplo:

También se pueden incluir operadores lógicos en la consulta, como lo podemos


visualizar en la consulta comentada.
Consulta con datos booleanos.
SQL Funciona con datos booleanos por lo que podemos hacer una consulta de
la siguiente manera:

La primera consulta describe una solicitud para que se muestre todos los
campos de la tabla de empleados y está sentenciando un WHERE NOT 0. El
NOT es una negación y el 0 también representa una doble negación por lo
tanto se anulan entré sí lo que conlleva a que la tabla sea mostrada. En
resumen, la expresión NOT 0 se evalúa como verdadera.
La segunda consulta es en la tabla Productos donde WHERE 1 AND 1 se
evalúan como verdaderos, 1 = TRUE, por lo tanto; TRUE and TRUE = TRUE. El
resultado para ambos casos es la impresión de sus respectivos campos.
Operador Like
Es un operador de comparación que se utiliza para buscar y filtrar en función
de patrones de cadenas de texto.
Utiliza comodines (hace búsquedas de texto parcil) Like es parecido a usar un
igual.

Ejemplo:

Ahora procedemos a hacer uso del operador like.

Uso de comodines.

Uso de ‘%’ significa que no hace falta que arranque con la palabra de
búsqueda, es decir que puede haber algo antes de la palabra de búsqueda.
El operador puede funcionar para hacer una búsqueda parcial de un conjunto
de caracteres especificados al inicio o al final del parámetro de búsqueda.
Ejemplo de uso:

En la primera línea se sentencia la búsqueda de un apellido que contenga un


‘F’ al principio de la cadena caracteres, posterior a eso pueden existir
caracteres distintos, pero necesariamente de haber una letra ‘F’ al principio de
la cadena.
En la segunda línea sucede lo mismo que en la primera, solamente que en la
cadena de caracteres se sentencia que puede existir cualquier tipo de carácter
distinto de la letra ‘F’ solo que la letra ‘F’ debe existir necesariamente al final
de la cadena.

Uso de comodín ‘_’


Sirve para usarse como sustituto para cualquier tipo de caracteres. Sirve para
asegurar que una cadena contenga un número específico de caracteres.
Ejemplo de uso:

Uso del operador IS NULL e IS NOT NULL


El operador NULL es un operador que se puede utilizar para devolver todos los
datos NULL presentes en la tabla a la que estamos haciendo la consulta. Del
modo contrario, el operador IS NOT NULL sirve para devolver todos los datos
que no estés vacíos, obviando; sabemos que, si hacemos uso del operador, la
salida de información será la tabla sin datos vacíos.

Operador IN y NOT IN
Opera sobre un conjunto de datos, opera sobre una tupla.
Supongamos que tenemos que seleccionar los productos de los proveedores 3,
4, 5 y 6

La salida serán los productos de los proveedores con ID 3, 4, 5 o 6

De esta forma podemos simplificar el uso de la sentencia OR para ID que


queramos consultar.
Uso de operador IN y NOT IN en cadenas de caracteres.
Ejemplo, línea 1:

En la línea 1 se especifica la búsqueda para Fuller o King, la salida de la


consulta es la siguiente:

Ahora que, si deseamos hacer solo una consulta específica, solamente


obtendremos un resultado (línea 2):
Si así lo queremos podemos hacer uso del operador lógico NOT. Al usarlo
nuestra salida serán todos los campos no negados en la consulta.

Funciones de agregación.
Permite agrupar datos, resumirlos e incluso trabajar con estadísticas.
SELECT

Suponiendo que queremos contar cuantas filas tiene una tabla o el número de
valores en una columna.

GROUP BY y HAVING
GROUP BY: Su función es para agrupar uno o varios registros según uno o
varios valores de las columnas.

¿Cómo funciona GROUP BY?


Suponiendo que existe una tabla en la que se encuentran el producto
manzana, el producto ciruela y el producto pera. Y un cliente hizo un pedido en
desorden, pero repitió la solicitud del producto. En el primer pedido solicitó 5
manzanas, después 5 ciruelas, después 5 peras, luego volvió a pedir
manzanas, pero en este caso fueron 3, luego continuó con 7 ciruelas y
finalmente concluyó su pedido con 4 peras. Resulta complicado saber el
número total de cada producto. Aquí es donde interviene GROUP BY. GROUP BY
permite ordenar un producto con base en otros valores.
GROUP BY en nuestro ejercicio nos serviría para saber el numero exacto de
cada producto vendido sin tener que ir ordenando uno por uno. Lo que
obtendríamos sería algo como:
Cantidad de manzanas vendidas totales: 8 y así sucesivamente con los demás
productos.

Ejemplo de uso de GROUP BY

La primera parte ‘select category id’ es donde se va a sacar la información, en


seguida se indica un redondeo y se solicita el promedio de la columna Price de
la tabla productos.
¿Pero que pasaría si no instanciamos la parte ‘category id’ en la consulta? Lo
que va a suceder es que va a hacer una selección total de los precios del
campo antes mencionado y va a sacar el promedio.
¿Qué quiere decir lo anterior? La salida de nuestra consulta nos está indicando
que el precio de los productos de la tabla ronda los 29 dólares en promedio, lo
cual, para este ejercicio, no nos útil porque hay varios productos que
comparten el mismo ID, pero nosotros queremos saber el precio de promedio
de los productos que comparte un mismo ID, es por eso por lo que debemos
hacer la instancia del campo específico después de meter el comando para
hacer la consulta.

Haciendo lo anterior obtenemos el resultado de 27 (imagen anterior). Seguimos


teniendo un inconveniente, porque ahora nos arroja el resultado promedio,
pero además la CATEGORY ID del primer registro, que en realidad no es lo que
se espera. Es aquí donde entra GROUP ID para ahora si agrupar los ID de los
productos y promediar individualmente.
Antes de hacer la agrupación es conveniente realizar un filtrado de datos NULL
Después de lo anterior el código esperado es el siguiente:
Si se quiere obtener productos mayores a 40. Por proveedor.
Having filtra grupos, es como un where

Si deseo ver los productos que se vendieron menos de 50 unidades


El producto que mas se vendió se hace de la siguiente manera.

Jerarquía de operaciones.
Select… from…
Where…
Group by…
Having…  no se puede meter funciones de agrupación, ni alías.
Order by…
Limit…

Uniendo tablas, tipo: usar el producto id para saber el precio. O sea que si
queremos saber el dinero generado por producto ID.
Subconsultas (subquerys)  tablas relacionales.
 16 subconsultas dentro de una consulta varían según el gestor de base
de datos.
 Las subconsultas recuperan datos.
 Las consultas dependen de una subconsulta.
 Deben ser sí o sí un select, no puede modificar la base de datos
 Sirven para relacionar tablas
 Crea una especie de tabla virtual

¿Cómo se establece una subconsulta?

Principal 1

Principal 2

Cierre de query,
búsqueda en
OrderDetails

Apartado de las subconsultas.

1st
subquery
2nd
subquery
Explicación la primer subquery.
Necesidad: Saber la cantidad de productos vendidos, incluyendo el nombre del
producto y precio del producto.
Problema: El nombre de los productos y la cantidad de productos vendidos,
están en tablas distintas.

1) La primera subconsulta selecciona la columna ProductName de la tabla


Products.
1.1) Redundando: tabla Products, contiene la columna que almacena
los nombres de los productos y los precios del producto. La tabla
incluye identificador para productos.

1.2)

1.3) La tabla OrderDetails es la que contiene la cantidad de veces que


se vendió un producto
1.4)

2. Para hacer la primera subconsulta debemos unir los ID que se relacionan


entre la tablas Product y OrderDetails
3.

4.

Tabla Products  ProductID


Tabla OrderDetails  ProductID

sí Mostrar consulta: P_ID + ProductName +


Si comparten ProductID
Quantity
no No muestra
consulta

La subconsulta se hizo en la tabla de OrderDetails porque en un principio la


idea fue querer añadir el ProductName en la selección de esas columnas de
OrdersDetails, sin embargo, las subconsultas se pueden instanciar en cualquier
tabla.
Ahora queremos saber el total recaudado. Para esto necesitamos saber el total
vendido por producto, por lo que necesitamos hacer una multiplicación de la
cantidad vendida por el precio individual de cada producto.

No se pueden usar alias para hacer operaciones matemáticas.

Explicación: se acaba de hacer una consulta a la tabla de order details que es


donde se encuentra la quantity de los productos vendidos, posteriormente se
realiza una subconsulta la tabla products y si la ID de order details coincide con
la ID de la tabla productos, se muestra la información de la consulta.

Como podemos observar la consulta muestra el producto ID la quantity


vendida y el precio por producto.

Si se hace una operación usando un alias nos mostrara un error.


Lo que se puede arreglar de la siguiente manera cambiando la sintaxis de la
operación matemática.
Tenemos que sentenciar el código con la consulta textual. Recordar que es
importante no hacer el uso de alias.

También podemos incluir otra subconsulta que incluya los nombres de los
productos en la tabla muestra.
Revisar el group by, usando el group by nos puede proporcionar el producto
que menos recaudó dinero. Lo podemos visualizar de la siguiente manera.

Pero trabajar con subconsultas es muy pesado. Existe una manera de optimizar
ese proceso que es haciendo el uso de JOINS.
Ahora queremos trabajar con condiciones.
En el efecto de que queramos realizar una consulta y no deseamos que se
muestren los campos de la columna precio, es posible. Podemos ocultar
campos para realizar filtrado de datos y que no aparezcan en la consulta,
haciendo lo siguiente.
Proceso de creación de una tabla virtual.
Una tabla virtual nos permite mostrar los campos de la subconsulta que
nosotros deseemos. Es decir, podemos crear nuestra propia tabla, esto es a lo
que se le denomina: tabla virtual.
Podemos hacerlo de la siguiente manera.
1) Creamos otra hoja SQL
2) Hacemos un SELECT – FROM
3) Posterior al FROM, pegaremos nuestro código de la página principal.
4) Una vez copiado solo habrá que ser específicos en la parte de la consulta
para así poder acceder y mostrar los datos deseados.

Apertura de tabla virtual


Ejemplo:

Subconsulta

En la tabla solo se logra ver producto_name y total_sold en dado caso de que


nosotros quisiéramos mostrar otra consulta es necesario realizar otra
subconsulta en el código principal.
Uso de Joins.
Usan índices, esto optimiza el rendimiento del código.
Sirve para combinar tablas y convertirla en una tabla nueva.

Inner join: devuelve coincidencia entre ambos. Existe la manera ímplicita sin
usar join y la manera explícita en la que sí se tiene que instanciar la palabra
join.

Cross join: es un tipo de join que lo que hace es crear una combinación de
todos los campos disponible respecto de las tablas que se quiera relacionar. En
otras palabras un Join crea todos las combinaciones posibles entre campos.
Ejemplo: hay dos tablas cada tabla contiene 4 campos, al hacer un cross join se
haría una combinación de las posibilidades, el campo 1 de la tabla 1, puede
relacionarse con el campo 1, 2, 3 y 4 de la tabla 2, lo que significa que al
ejecutar la consulta veríamos 16 datos, lo cual no resulta útil.
En la ventana de ejecución se vería de la siguiente manera:
Como podemos ver al hacer el cross join con la tabla “Employees” y la tabla
“Orders” se muestran en terminal 1960 datos. Pero ¿por qué pasa esto?
Veamos la estructura de ambas tablas y sigamos la lógica anterior.

Tabla “Employees”
Tabla “Orders”

Podemos observar que la tabla de “Employees” tiene 10 campos, la


tabla “Orders” tiene 196 campos, por lo tanto, a la hora de hacer el Cross
Join la consulta actúa como una multiplicación.
196 x 10 = 1,960, esa es la razón de porque en terminal se nos arrojan 1,960
datos. Siguiendo la lógica anterior podemos concluir que cada dato de
la tabla “Employees” se multiplicó con cada campo de la tabla
“Orders”

¿Cómo usar el Inner Join de manera correcta?


Recordar el que el Inner Join nos ayuda a encontrar coincidencias entre tablas.
Si nosotros hacemos una consulta Inner Join (que en realidad estamos haciendo
el uso de un Join regular, pero nunca está de más especificar que es un Inner,
esto con la intención de facilitar la legibilidad del código) podremos obtener
únicamente la primera coincidencia, es decir, si en alguna de nuestras tablas
hay uno o más registros que compartan información entre sí; el uso de un Inner
Join mostrará el primer resultado en el que encuentre una coincidencia a pesar
de existir más con las mismas características.

Ejemplo:
Tabla 1:
EmployeeID = 1, DataSales = $ 3,500.00 USD, Month = January
EmployeeID = 1, DataSales = $ 500.00 USD, Month = February
EmployeeID = 2, DataSales = $ 7,500.00 USD, Month = January

Tabla 2
EmployeeID = 1, LastName = Malan, FirstName = David
Employee ID = 3, LastName = Reyna, FirstName = Braulio

Suponiendo que la información que deseamos relacionar es cuando los


EmployeeID coincidan, veríamos lo siguiente:
Haciendo uso de Inner Join

Tabla virtual (salida en terminal)


LastName = Malan, FirstName = David - DataSales = $ 3,500.00 USD,
Month = January

Ahora, para obtener lo anterior es necesario hacer uso de un inner


join, lo que se puede hacer solo añadiendo una línea extra a nuestro código.
Lo que añadiremos será un where que servirá para condicionar la consulta.

El where (que sirve como filtro) indica que el campo solo deberá ser mostrado
si y solo sí los EmployeeID coinciden entre sí.
Si nos desplazamos en la tabla podemos observar que ahora solo nos devuelve
196 datos. Solo se devuelven 196 datos porque ese es el número de registros
que hay en Orders.

Como se mencionó anteriormente, la manera en la que se ejecutó la


consulta pasada fue usando un Inner Join “implícito”, la manera
optima de hacerlo es la siguiente:
La diferencia aquí es que estamos usando explícitamente el comando “Inner
Join” que como su nombre lo expresa nos ayudará a poder unir las tablas, sin
embargo no es la única diferencia que podemos notar, también encontramos el
comando “ON” que funciona de manera parecía a un “where”, es decir: actúa
como un filtro o condición de unión.

Creación de tabla en código.


Ultimo respawn 4:52:00
Se nos dirigimos a la parte “Database Structure” podemos encontrar que
ya existe una décima tabla.

Uso de Inner Join

La salida es la siguiente:
Explicación del código:
Se hace un select de los campos FirstName, reward, month de la tabla
employees que usa el alias “e”. Posteriormente usamos un Inner Join para
cruzarlo con la tabla rewards (rewards usa el alias “r”, se usa el filtro on para
encontrar coincidencias en la tabla empleados y recompensas con el ID
del empleado.

Left Join
Es un tipo de consulta que nos permite mostrar las coincidencias y las no
coincidencias.
Devuelve todas las filas de la tabla de la izquierda y las filas coincidentes de la
tabla de la derecha.
Si no hay coincidencias, las filas de la tabla de la izquierda se incluyen con
valores nulos en las columnas de la tabla de la derecha.

Ejemplo de uso de un Left Join:


Del mismo modo existe Right Join, que es el proceso inverso.
Para poder simular un Right Join lo único que se tiene que hacer es cambiar el
orden de la consulta de la siguiente manera:

Nombre, recompensa y mes se sacaran de la tabla Rewards en lugar de


Employees, con fin de que los datos de employees sean lanzados al lado
izquierdo.
Uso de Union All.
El propósito de ese join es poder hacer una “sumatoria” de todos los datos de
tablas proporcionadas, es decir, si ejecutamos una consulta de tipo unión all
obtendremos una tabla que incluye todos los datos de las consultas
realizadas.

Podemos encontrar valores nulos porque esos son los empleados que
no tienen recompensas generadas durante el mes de ventas.
Uso de un full join
Permite la fusión de tablas eliminando los datos repetidos tipo fila.

Sin embargo el uso del uso del full join es considerado una mala práctica
debido a su coste de rendimiento en el gestor.

Cardinalidad
Determina como va a ser la relación entre tablas.
Tipos de cardinalidad  1:1, 1:n, n:1, n:m
Uno a uno: un registro se relaciona con otro registro.
Uno a muchos: un registro se puede relacionar con un número n de registros
en otra tabla y viceversa.
Muchos a muchos: n número de datos se relaciona con otra tabla que tiene
m número de datos.

El tipo de relación m: n es difícil de manejar por ello en el proceso se crea la


tabla intermedia llamada que se encarga de manejar relaciones 1:n y n:1 y se
encarga de vincular claves primarias de ambas tablas

Normalización.
First Normal Form: cada atributo debe tener un valor único para cada
registro.
Ejemplo 1NF: existe una tabla donde se almacenan datos atómicos, cada dato
debe estar almacenado en una columna específica, no se permite almacenar
más de un dato en una columna.

La Segunda Forma Normal (2NF) establece que una relación está en 2NF si
está en Primera Forma Normal (1NF) y todos los atributos no clave dependen
completamente de toda la clave primaria. Esto significa que no debe haber
dependencias parciales de atributos no clave en parte de una clave compuesta.

El error en esta tabla es que el identificador del curso es una clave primaria,
esta clave es asignada al nombre del curso, el identificador del estudiante es
una clave primaria y depende del nombre del estudiante. Pero el dato
“Nota” depende del nombre del estudiante y del nombre del curso,
indica una dependencia parcial de las últimas dos columnas. Esto se
puede solucionar seccionando la información en diferentes tablas.
La Tercera Forma Normal (3NF) establece que cada atributo no clave en
una tabla debe depender directamente de la clave primaria y no debe haber
dependencias transitivas. En otras palabras, ningún atributo no clave debe
depender de otro atributo no clave; todos los atributos no clave deben
depender únicamente de la clave primaria.
La dependencia entre atributos no clave, como lo es nombre y nombre del
departamento, existe dependencia porque, aunque no comparten
identificadores, se encuentran en la misma tabla.
La tabla anterior lleva por nombre “Empleados”. La tabla anterior es un
ejemplo claro donde la 3NF falla ya que “EmpleadoID” y “DepartamentoID” son
claves de acceso primarias. Por lo que podemos observar que
“DepartamentoID” depende de manera transitiva de de “EmpleadoID”

Para eliminar la falla y llevar la tabla a 3NF debemos hacer una separación de
información, de la siguiente manera:

Aquí podemos relacionar a los empleados con un identificador de


departamento, sin que el identificador dependa directamente del identificador
de empleado.
Cuarta Forma Normal 4NF
Se refiere a una forma en la que buscamos eliminar la redundancia, queriendo
eliminar dependencia multivaluadas, que ocurre cuando una tabla tiene
muchos valores para una columna y esos valores se relacionan con otros
múltiples valores de otra columna de la misma tabla.

Uso correcto del 4NF

¿Cómo hacer uso correcto del 4NF?


Se debe hacer que la mayoría de la información de las tablas dependan de una
clave primaria y no de otra información.
Uso incorrecto del 4NF
Sucede cuando toda la información se almacena en una tabla.

Este modelo de tabla muestra la información del profesor en cada consulta, del
mismo modo es poco escalable ya que si un profesor enseña mas de un curso y
otro no la tabla se tendrá que llenar con valores NULL lo que afecta en el
rendimiento.
Quinta Forma Normal 5NF
Que no haya dependencias de unión entre atributos, si un atributo depende de
que se unan atributos de varias tablas, entonces debe ser movido a otra tabla.

Bloques y transacciones.
Un índice se encarga de mejorar el rendimiento de una base de datos. Existe
índices únicos y no únicos, un índice único es un índice primario, que es aquel
que no permite tener valores nulos.

Transformando un campo en un índice:

Sirve para optimizar el proceso de consultas.


Lo anterior es un índice ordinario no único, ya que permite campos nulos y
duplicados

Demostración de optimización de búsqueda de producto en el campo


ProductName.
La optimización la podemos observar en el tiempo que tarda en realizar la
consulta.
Cada correo electrónico debe ser único por lo que se deben crear mas claves
primarias además de la clave primaria principal y para eso se usa el índice,
pero si quiero que cada campo sea único podemos usar la palabra UNIQUE y
crearía un índice único, pero si un valor se repite no se va a generar el registro
porque tampoco permite duplicados.
En resumen, UNIQUE no permite el registro de datos duplicados, la restricción
se puede aplicar por columna o de manera simultanea a las columnas de la
tabla seleccionada.
Se realiza de la siguiente manera:

En la imagen anterior se están unificando dos columnas para que no se pueda


repetir información.
Entonces, lo esperado es lo siguiente:
Los índices consumen mucho espacio en disco y puede dañar el rendimiento,
por ello no podemos llenar las tablas de índices.
 La clave foránea es una pieza indispensable en el rendimiento
Vistas:
Son tablas virtuales que no almacenan datos, es una referencia a una consulta
que nos devuelve una vista.

¿Cómo eliminar una vista?


Procedimientos almacenados.
Bloqueos y transacciones.
Los bloqueos sirven para bloquear accesos concurrentes a una base datos.
SQLite permite lecturas concurrentes.
Shared Lock: nadie puede escribir, pero pueden leer.
Reserved Lock: se aplica al escribir en la base datos.
Exclusive Lock: nadie escribe ni lee.
 Begin transaction:
Si cometes un error y quieres tener de vuelta los valores anteriores se tiene
que hacer un rollback.

La idea de hacer rollback es regresar a los datos iniciales, pero como buen
tonto que soy hice el commit al hacer la consulta y ahora ya no se puede
volver a los cambios iniciales. Ahora bien, que si hice el rollback y quiero
guardar la información lo único que hay que hacer es mandar a commit.

Procedimientos almacenados.
6:31:20

También podría gustarte