Actividad 4
Conceptos SQL

1. Lenguaje para almacenar y recuperar información en bases de datos.
2. Lenguaje de estructurado que permite consultar, manipular y transformar datos de una base de datos.
3. Las bases de datos SQL brindan almacenamiento seguro y escalable para millones de sitios web y aplicaciones móviles.
4. Existen muchas bases de datos SQL populares, incluidas SQLite, MySQL, Postgres, Oracle y Microsoft SQL Server.

Sentencias Básicas

DDL - Lenguaje de Definición: Sentencias que nos permiten definir, alterar, modificar objetos dentro de una base de datos.

CREATE: Permite crear objetos dentro de la base de datos, como por ejemplo:
-Procedimientos almacenados
-Tablas
-Bases de datos
-Funciones
- Vistas, índices entre otros.
ALTER:
Modifica la estructura de una tabla y otro objeto.
DROP:
Elimina una tabla, vista u otro objeto de la base de datos.

DML - Lenguaje de Manipulación de datos: Permiten consultar, actualizar, insertar o eliminar los datos o registros de las tablas.

SELECT: Recupera datos de una tabla de base de datos.
- Vistas, índices entre otros.
INSERT: Inserta un tipo de dato en el atributo de una entidad o tabla de la base de datos.
UPDATE: Modifica registros existentes en una tabla.
UPDATE: Elimina registros de una tabla.

DCL - Lenguaje de Control de Datos: Permite otorgar permisos a uno o más roles para determinadas tareas, así como el control de accesos a la base de datos.

GRANT: Usado para otorgar privilegios de acceso de usuario a la base de datos.
REVOKE: Utilizado para retirar privilegios de acceso otorgados con el comando GRANT.

Otras Sentencias Básicas:

TRUNCATE: Elimina todos los registros de una tabla.

Eliminar todos los registros de la tabla "clientes"
TRUNCATE TABLE:
Clientes;

Funciones

Funciones de Agregación:
Dentro del lenguaje SQL existen muchas funciones que permiten obtener diferentes resultados en base a las necesidades que tengamos, una de esas son las funciones de agregación SQL, estas funciones permiten realizar cálculos y operaciones sobre los registros de una tabla y sobre una o varias columnas.

- COUNT( ): Cuenta el número de registros o valores no nulos de una columna.
SELECT COUNT(*) AS TotalRegistros FROM tabla;

- MIN( ): Esta función permite obtener el mínimo valor de una expresión a evaluar
SELECT MIN (precio) AS PrecioMinimo FROM productos;

-MAX ( ): Esta función me permite obtener el máximos valor de una expresión a evaluar
SELECT MAX (precio) AS PrecioMaximo FROM productos;

- AVG ( ): Esta función devuelve el valor promedio de la expresión a evaluar, hay que tener en cuenta que dicha expresión debe ser numérica, en caso contrario la consulta me devolverá un mensaje de erros.
SELECT AVG (edad) AS EdadPromedio FROM usuarios;

- SUM( ): Esta función devuelve la suma de todos los valores especificados en la expresión, así mismo solo debe usarse con expresiones numéricas, caso contrario nos retornará un mensaje de error en la consulta.
SELECT SUM (ventas) AS TotalVentas FROM productos;

- GROUP BY( ): Cuando hacemos una consulta con varias columnas y usamos funciones de agregación SQL, usamos la sentencia GROUP BY para poder recuperar el resultado de la consulta. Dentro de la sintaxis GROUP BY van a ir todas la columnas que no sean funciones de agregación SQL.
SELECT categoria, COUNT(*) AS TotalProductos FROM productos GROUP BY catergoria;

Operaciones Sobre Conjuntos

Estas consultas utilizan al menos dos SELECT cuyos resultados que se pueden combinar para formar una única consulta. Se basan en los operadores matemáticos de conjuntos (unión, intersección diferencia).

- UNION: Combina los resultados de dos consultas en un solo conjunto, eliminando las filas duplicadas. Las columnas devueltas en ambas consultas deben coincidir en número y tipo de columnas.

EJEMPLO 1.
SELECT nombre FROM provincias UNION
SELECT nombre FROM comunidades

El operador UNION une los resultados de varios SELECT. Pero si hay datos duplicados en ellos, elimina los mismos.

- INTERSECT: De la misma forma, la palabra INTERSECT permite unir dos consultas SELECT de modo que el resultado serán las filas que estén presentes en ambas consultas.

EJEMPLO :
SELECT tipo,modelo FROM existencias WHERE n_almacen=1
INTERSECT
SELECT tipo,modelo FROM existencias WHERE n_almacen=2

- EXCEPT (o MINUS): Con MINUS también se combinan dos consultas SELECT de forma que aparecerán los registros del primer SELECT que no estén presentes en el segundo.

EJEMPLO:
Tipos y modelos de piezas que se encuentren en el almacén 1 y no en el 2.

SELECT tipo,modelo FROM existencias WHERE n_almacen=1
MINUS
SELECT tipo,modelo FROM existencias WHERE n_almacen=2

Operadores

OPERADORES ARITMETICOS SQL:
Operador Descripción
+ Añadir
- Restar
* Multiplicar
/ Dividir
% Modulo

OPERADORES SQL BIT A BIT:
Operador Descripción
& Bitwise AND
| Bitwise OR
^ Bitwise exclusive OR

OPERADORES COMPUESTOS SQL:
Operador Descripción
+- And equals
-- Subtract equals
*- Multiply equals
/- Divide equals
%- Modulo equals
&- Bitwise AND equals
^-- Bitwise exclusive equals
|*- Bitwise OR equals

OPERADORES DE COMPARACIÓN:
Operador Descripción
- Equal to
> Greater than
< Less than
>- Greater than or equal to
>- Less than or equal to
<> Not equal to

OPERADORES LOGICOS SQL:
Operador Descripción
ALL TRUE if all of the subquery values meet the condition
AND TRUE if all the conditions separated by AND is TRUE
ANY TRUE if any of the subquery values meet the condition
BETWEEN TRUE if the operand is within the range of comparisons
EXISTS TRUE if the subquery returns one or more records
IN TRUE if the operand is equal to one of a list of expressions
LIKE TRUE if the operand matches a pattern
NOT Displays a record if the condition(s) is NOT TRUE
OR TRUE ir any of the conditions separated by OR is TRUE
SOME TRUE if any of the subquery values meeet the condition

Subconsultas

Una subconsulta es una consulta anidada dentro de otra consulta principal. La subconsulta se ejecuta primero y su resultado se utiliza en la consulta principal para obtener un resultado más específico.

EJEMPLO 1: Seleccionar el trabajo (JOB) y los salarios máximo y mínimo (SALARY) de cada grupo de filas con el mismo código de trabajo en la tabla EMPLOYEE

SELECT JOB MAX (SALARY)
FROM EMPLOYEE
GROUP BY JOB;

El operador UNION une los resultados de varios SELECT. Pero si hay datos duplicados en ellos, elimina los mismos.

EJEMPLO 2: Una las tablas EMP_ACT y EMPLOYEE, seleccione todas las columnas de la tablas EMP_ACT y añada el apellido del empleado (LASTNAME) de la tabla EMPLOYEE a cada fila del resultado.

SELECT EMP_ACT. *, LASTNAME
FROM EMP_ACT, EMPLOYEE
WHERE EMP_ACT:EMPNO = EMPLOYEE.EMPNO

Consultas a múltiples tablas

Las consultas a múltiples tablas se utilizan para combinar información de dos o más tablas relacionadas en una sola consulta.

Ejemplo:
De los CLIENTES debemos registrar:

Nombres y Apellidos
Documento de identidad
Correo

De los PRODUCTOS tenemos que registrar:

Código
Nombre
Descripción
Valor de descuentos

De las VENTAS debemos registrar:

Al cliente que se le ha hecho la venta
Fecha de la venta
Cuantas unidades y cuales productos hemos vendido

Paso 1: Análisis
Se identifican cuatro tablas

CLIENTES
PRODUCTOS
VENTAS
VENTAS_DETALLE

Paso 2:
¿Cómo podemos identificar las 4 tablas?
En primero lugar en el ejercicio se está pidiendo registrar las ventas, así que para poder guardar las ventas necesitamos crear nuestra primera tabla (VENTAS).

Adicional a eso nos piden registrar el detalle de cada una de las ventas, muy bien, para registrar el detalle de las ventas debemos crear nuestra segunda tabla (VENTAS_DETALLE), además tenemos que identificar que debemos crear nuestra primera relación entre la tabla VENTAS y VENTAS_DETALLE a través del uso de la clave primaria y foránea.

Paso 3:
En el segundo lugar nos piden cuantos y que productos fueron registrados en cada ventas, si bien es cierto que podríamos registrar los productos con sus características en la tabla (VENTAS_DETALLE) no sería lo más óptimo, lo ideal es separar cada objeto y relacionarlo a través de un campo. Así que tenemos que crear nuestra tercera tabla (PRODUCTOS).

Paso 4: Resolver mediante consultas

Total de las ventas diarias por cliente que está generando.
Ordenadas por fecha.
Mostrar (nombres, DNI, corre) del cliente.

SELECT
VEN. FECHA AS FECHA,
CLI. NOMBRE AS NOMBRE_CLIENTE,
CLI.APELLIDO AS APELLIDO_CLIENTE,
CLI.DNI AS DNI_CLIENTE,
CLI.CORREO AS CORREO_CLIENTE,
SUM(VEN.TOTAL) AS TOTAL_VENTAS
FROM VENTAS VEN INNER JOIN CLIENTES CLI
ON (VEN. ClienteID = CLI.ClienteID)
GROUP BY VEN.Fecha, CLI.NOMBRE, CLI.APELLLIDO, CLI.DNI, CLI.CORREO
ORDER BY VEN.Fecha

INNER JOIN
Establece la unión entre 2 tablas o conjunto de resultados, donde los valores sean exactos en ambas tablas.

Subconsultas correlacionales

Una subconsulta correlacionada es una subconsulta que depende de la consulta principal para obtener su resultado. La subconsulta se ejecuta una vez por cada fila de la consulta principal.

EJEMPLO: Mostrar el nombre de los empleados donde la comisión sea mayor a la mitad del sueldo

SELECT NOMBRE
FROM EMPLEADO
WHERE COMISIÓN >
SUELDO / 2;