# MySQL/Gestión/Lenguajes de consulta y extracción de datos
### Definición

Se conoce Lenguaje de consulta o interrogación a aquel lenguaje informático que utiliza el usuario para recuperación o extracción de datos. Están dentro de la capa superior de lenguajes de programación.

### Tipos

Pueden clasificarse en dos grandes grupos:
* Lenguajes no procedurales: El usuario describe la información que quiere recuperar sin determinar el tipo de órdenes que serán pertinentes para si extracción en la base de datos.
* Lenguajes procedurales o procedimentales: El usuario da órdenes para que se realicen las tareas pertinentes con el objetivo de recuperar los datos requeridos. Es la base del lenguaje de consulta SQL.

### Explicación

Los lenguajes de consulta están incluidos en los SGBD. Estos lenguajes permiten interrogar la base de datos. Un SGBD tiene varios componentes entre los que encontramos los de manipulación de datos. Para la comunicación entre el SGBD$^1$ y el lenguaje de manipulación de datos necesitamos un interface adecuado que procese las expresiones del lenguaje, como pueden ser SQL, OQL, HTSQL, entre otros...

## SQL

SQL quiere decir Lenguaje Estructurado de Consulta. Es muy popular hoy en día dado que la mayoría de páginas web las usan como bases de datos. Fue desarrollado a mitades de los años 70 por IBM para el prototipo de modelo relacional conocido como DBMS en las instalaciones de San José, en Estados Unidos. Más tarde, en los años 80, pasó a ser conocido como SEQUEL y finalmente acabaría llamándose SQL.

### Tipos de Datos

| Nombre | Descripción |
| CHAR(n) | Indica el número total de espacios o caracteres que ocupa la información. En el caso de que el usuario introduzca menos caracteres del número total, automáticamente serán rellenados con espacios. |
| VARCHAR(n) | Similar al CHAR. La diferencia está en que este tipo de datos, no rellena con espacios, de forma que se ahorra espacio. |
| DATE | Incluye los datos de Fecha. En SQL se escribe dentro de la opción DATE-TIME. |
| DECIMAL(p,q) | El sistema guardará un número decimal de "p" dígitos de longitud, mientras que "q" será el número de decimales que tendrá ese valor. |
| INT | Valores números que se usan para poder hacer cálculos. Si posee el atributo AUTO_INCREMENT crearemos una columna que generará un nuevo número en orden secuencial en cada nueva fila de la nueva columna. |
| SMALLINT | Similar a INT, pero es recomendable usarlo cuando tenemos la certeza que no necesitaremos almacenar más de 33.000 apróximadamente*. |
| VALORES NULO | SQL genera un valor especial para aquellos casos en los que un dato va asociado a otro desconocido en un momento determinado, o que nunca existirá. |

### Comandos para las tablas.

A continuación, vamos a exponer los siguientes comandos para operar con tablas:
Crear una tabla:
Borrar una tabla:
Insertar una Tabla:
Ver datos en una tabla:
Corregir errores en una tabla:
Eliminar una fila de una tabla:
Ver columnas de una tabla:
Para poder ver las columnas de una tabla en SQL, usaremos los siguientes comandos:
* sp_columns: Para listar todas las columnas de una tabla.
* Exec sp_columns "nombredetabla"·: Para listar todos los datos de la columna "nombredetabla"

### Generar Informes

Podemos generar informes tanto con el documentador, como con los resultados de las consulltas. Podemos diseñar el informe de tal manera, que sea
de agradable vista para la posterior presentación. Todas las modificaciones disponibles que podemos realizar se dividen por parámetros y comandos:

#### Parámetros:

* SET LINESIZE: Número máximo de caracteres por línea.
* SET PAGESIZE: Numero de filas de la salida antes de empezar una nueva página.
* SET HEADING [ON|OFF]: Activa o desactiva la utilización de encabezados de columnas. Por defecto estará activado.
* SET NULL texto: Indica la cadena de caracteres que hay que colocar en sustitución de los valores NULL. Por defecto es "".
* SET ECHO[ON|OFF] Activa o desactiva la visualización de los comandos que SQL ejecuta según van siendo tratados. Por defecto estará desactivada.
* SET FEEDBACK [n|ON|OFF]: Muestra el número de registros recuperados en cada consulta cuando se recuperan "n" o más registros.
* SET VERIFY [ON|OFF]: Controla la salida de confirmación para los valores de las variables de sustitución.

#### Comandos:

* TTITLE: Formación del encabezado de página.
* BTITLE: Formación del pie de página.
* COLUMN: Formatear cada columna.
* BREAK: Puntos de ruptura en los listados.
* COMPUTE: Realizar cálculos con columnas.
Para sustituir una variable usaremos el comando "define".

### Cláusula SELECT

Es la función más importante de un SGBD$^1$. Su sintaxis de forma general es la siguiente:
Si introducimos SELECT * "*" quiere decir que seleccionaremos todo.
"WHERE" dispone de los siguientes operadores :
| OPERADOR DE CADENA DE CARACTERES | OPERACIÓN |
| || | Concatenación |
| OPERADORES ARITMÉTICOS | OPERACIÓN |
| + | Suma |
| - | Resta |
| * | Producto |
| / | División |
| OPERADORES DE COMPARACIÓN | OPERACIÓN |
| = | Igualdad |
| < | Menor que |
| > | Mayor que |
| <= | Menor o igual que |
| >= | Mayor o igual que |
| in | Igual a cualquiera de los miembros del paréntesis |
| not in | Distinto a cualquiera de los miembros del paréntesis |
| between | Contenido en el rango |
| not between | Fuera del rango |
| like '_abc%' | Contiene la cadena indicada "abc" a partir del segundo carácter y luego cualquier cadena de caracteres |
| != | Distinto a |
| months between (d1,d2) | Devuelve la diferencia en meses entre 2 fechas |
| OPERADORES BOOLEANOS | OPERACIÓN |
| AND | Intersección |
| OR | Unión |
| NOT | No |

### Operador Like

Este operador ayuda a la recuperación de información compleja. Sirve para condiciones donde el resultado a recuperar no sea exacto.
Usando este operador, buscaremos coincidencias( no necesariamente exactas) por aproximación.
La forma de representarlo sería la siguiente:

### Cláusula Order by

Esta cláusula ordena los datos de forma previa a la visualización por usuarios o de su impresión.
Nuestro sistema ordenará los valores por defecto, pero si los queremos ordenar de alguna forma expresa usaremos Order by.
El modo de empleo de esta cláusula será la siguiente:

### Funciones de Agregación

Son usadas por SQL. Se usan para hallar valores máximos, mínimos, calcular datos,etc...
Se aplican a grupos de filas llegándose a aplicar a todas las filas de una tabla si es necesario.
Las funciones serán las siguientes:
* COUNT: Cuenta el número de filas de una tabla
* SUM: Suma la cantidad de las filas que le concretemos.
* AVG: Obtiene el valor medio en un rango.
* Max: Obtiene el valor máximo de un rango.
* Min: Obtiene el valor mínimo de un rango.

### Cláusulas Group by, Order by y Where/Having

Crean un conjunto de filas que comparten una misma característica:
* Group by: Para agrupar un número de filas y sobre este conjunto realizar una operación.
* Order by: Para ordenar un número de filas, y sobre estos poder realizar operaciones.
* Where/Having: Si Where limita las características, Having limita los grupos.

### Consulta a múltiples tablas

Para poder realizar consultas en varias tablas, SQL cuenta con los operadores algebraicos avanzados:
* INTERSECT: Reúne varios conjuntos en uno solo.
* MINUS: Realiza una división entre los conjuntos.
* AND: Realiza una intersección entre los conjuntos.
* ALL & ANY: extraen datos de una subconsulta tras unir 2 tablas y crean una sola columna numérica.

## Referencias

* ↑ «SGBD:Sistema Gestor de Base de Datos».
* ↑ «SEQUEL: Conocido hoy en día como SQL».