SQL
SQL
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:
Tipo de dato
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.
Ejemplo 2:
¿Como puedo ver mi tabla generada? Se hace uso del siguiente comando.
Primarios.
¿Cómo hago
para identificar
que son
registros
distintos?
Id_user es
cnuestra
primary key
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.
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.
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.
Operador AND
Operador OR
Sintaxis de ejemplo
WHERE (FALSO o VERDADERO) y OBLIGATORIO
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 consulta:
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:
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:
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
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.
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
Principal 1
Principal 2
Cierre de query,
búsqueda en
OrderDetails
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.2)
4.
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.
Subconsulta
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”
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
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.
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.
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.
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:
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.
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