Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
openwebinars.net/academia/curso/linux-lpi-102/340
Comprendiendo SQL
El Lenguaje de Consultas Estructurado (Structured Query Language - SQL) como su
nombre indica, es un lenguaje usado para recuperar datos de una base de datos (BBDD).
Se trata de una herramienta para acceder a bases de datos y más específicamente, bases
de datos relacionales. El siguiente ejemplo ilustra la relación entre los datos en una base
de datos relacional:
Atributos (columnas)
Cada fila representa un objeto simple y cada columna representa una característica
específica, por lo que la combinación de filas y columnas es conocida como tabla.
Cada base de datos puede contener múltiples tablas, y SQL soporta múltiples bases de
datos. Para acceder a los datos, primero se debe seleccionar una base de datos y una
tabla. Los datos en una tabla están desordenados, al menos conceptualmente, aunque en
la práctica están almacenados en un orden en el disco y dicho orden es arbitrario. Se
puede imponer un orden en los resultados de una consulta; por ejemplo se podrían
recuperar datos de la BBDD representada en el anterior ejemplo ordenando los resultados
en base al coste (última columna).
Una BBDD permite la recuperación de información que coincida con criterios específicos.
En el ejemplo anterior se podrían buscar todos los objetos verdes. También se puede
insertar, borrar, y actualizar información de una tabla.
SQL soporta múltiples tablas, de forma que se pueden tener por ejemplo diferentes tablas
para pertenencias de una oficina y para empleados que trabajen en dicha oficina.
Las restricciones impuestas en cada columna concreta son conocidas como dominio o tipo
de datos, de forma que el dominio para la segunda columna es una colección de nombres
1/9
de colores, mientras que el dominio para la última columna es un valor numérico
expresado en euros.
Existen más tipos de datos y aquí se han resumido los tipos que son más comunes. Cada
uno de estos tipos de datos tienen sus propias características, por ejemplo los datos
numéricos (INTEGER, DECIMAL, etc ...) pueden ser manipulados por operadores
matemáticos.
Almacenamiento de Datos
Para aprender SQL se debe acceder a una BBDD SQL. Para ilustrar este apartado se
utilizará MySQL como referencia. Otras implementaciones SQL son similares a ella aunque
se puede diferenciar en algunos detalles. Uno de ellos es la forma de iniciar la BBDD ya
que en el caso de MySQL la distribución debería incluir un script de inicio para el servidor
SQL.
Este servidor debería necesitar también ser configurado con su propio password de root.
Debian y otras distribuciones relacionadas lo solicitarán cuando se instale el paquete así
que es posible que se necesite configurar manualmente en otras distribuciones.
Consideramos que existe la BBDD "test", que consta de la tabla objetos y a su vez
contiene 5 campos diferentes: nombre (varchar (30)), color (varchar (20)), tamaño (float),
tipo (enum) y valor (decimal) .
Cada uno de esos campos es del tipo que se corresponde con el tipo de datos que se van
a almacenar. A continuación se muestra la secuencia de creación de esta BBDD y su
tabla:
2/9
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE TABLE objetos (nombre VARCHAR(30), color VARCHAR(20), tamaño FLOAT,
tipo ENUM('blando','medio','duro'),valor DECIMAL(10,2));
Ahora se puede comenzar a almacenar datos en la BBDD y para ello se usa el comando
INSERT INTO :
3/9
Este ejemplo crea los registros mostrados en la tabla inicial del tema. Para verificar que la
BBDD almacena esta información:
El resultado es una lista con todos los datos de la tabla objetos, que en este caso deberían
ser una sola entrada. El ejemplo anterior introdujo datos incorrectos en uno de los campos:
El registro 'lagarto' ha sido introducido en la tabla con un tamaño de 6 centímetros, en
lugar de 5. Esto se puede corregir utilizando UPDATE :
Este ejemplo comienza con la sentencia UPDATE y el nombre de tabla (objetos) como en
el ejemplo anterior. La sentencia indica a MySQL que actualice el campo "tamaño" a 5. La
clave WHERE especifica la fila o registro a ser modificado. En este caso, al existir solo un
registro se puede usar cualquier dato o incluso omitir la clave WHERE .
En la mayoría de los casos se puede indicar el dato que sea suficiente para identificar de
forma única el registro que se desea modificar. Aunque en el ejemplo se ha usado el
campo nombre, cualquier otro campo que identificara inequívocamente el registro 'lagarto'
hubiera sido válido.
Extracción de Datos
El punto fuerte de tener una BBDD es poder recuperar datos de ella. El comando principal
para realizar esta tarea es SELECT .
Se pueden usar variedad de claves para seleccionar datos que coincidan con distintos
criterios, así como coincidencias exactas o basadas en un rango de valores.
Por ejemplo, imaginemos que solo se está interesado en los colores y valores de objetos.
Para obtener esta información y que solo se muestre esta colección de atributos de la
tabla objetos se utiliza SELECT de la forma siguiente:
4/9
mysql> SELECT valor,color FROM objetos;
+-------+-------+
| valor | color |
+-------+-------+
| 10.00 | verde |
+-------+-------+
1 row in set (0.00 sec)
Los criterios que se muestran aparecen como una lista separada por comas consistente
en distintas columnas de la tabla. En este ejemplo, los criterios son listados en el orden
inverso al que tienen en la BBDD.
Una forma más interesante de extraer datos es usar la condición WHERE . Se pueden usar
condiciones de extracción de datos específicos de distintas formas:
Tests numéricos: Se pueden extraer datos que coincidan con ciertos criterios
numéricos.
Por ejemplo, para extraer datos de todos los objetos mayores de 10 centímetros:
Tests alfabéticos: Los operadores "mayor que" (>) y "menor que" (<) funcionan
tanto para letras como para números. Este hecho puede ser usado para extraer
datos basándose en la primera letra de una cadena.
Por ejemplo para extraer registros cuyo nombre comience con la letra "b" o letras
posteriores en el alfabeto:
5/9
mysql> SELECT * FROM objetos WHERE nombre>'b';
+----------+----------+---------+--------+-------+
| nombre | color | tamaño | tipo | valor |
+----------+----------+---------+--------+-------+
| lagarto | verde | 5 | blando | 10.00 |
| ladrillo | rojo | 8 | duro | 1.00 |
| plátano | amarillo | 10 | blando | 0.25 |
+----------+----------+---------+--------+-------+
3 rows in set (0.00 sec)
Por ejemplo, se pueden extraer datos de objetos blandos valorados en más de 7.50€:
También se pueden extraer datos SQL ordenándolos por algún criterio, especificando el
nombre del campo por el que se desea ordenar tras la clave ORDER BY :
En los ejemplos anteriores se ha representado una BBDD de objetos y una tabla con las
características de cada uno. Se podría también tener una tabla conteniendo las
localizaciones y condiciones (en una escala de 10 puntos) de diferentes objetos, como se
muestra más adelante.
Se podrían combinar dos tablas para crear una tabla "master" en la que se puedan realizar
consultas y para ello ambas tablas deben tener un campo coincidente que servirá para
unirlas y un campo cuyo valor identifique únicamente cada fila. Este campo identificador
único es conocido como clave primaria .
6/9
mysql> CREATE TABLE localizaciones (id INTEGER, nombre VARCHAR(30), localizacion
VARCHAR(30), condicion INTEGER);
Query OK, 0 rows affected (0.11 sec)
En este punto, se puede usar el operador SELECT para seleccionar datos basados en
campos de ambas tablas.
Por ejemplo, si se desea conocer dónde están todos los objetos verdes y sus
localizaciones. La primera tabla (objetos) contiene los datos del color pero no las
localizaciones, mientras que la segunda tabla (localizaciones) almacena la localización
pero no los colores. Se pueden combinar ambas tablas de la siguiente forma:
En el caso del ejemplo de la tabla "objetos" la primera columna (nombre) puede servir
como clave primaria.
Mysql combina automáticamente las dos tablas y produce la salida basada en los criterios
especificados. El resultado final en este ejemplo incluye el nombre, color y localización de
los objetos, incluso aunque cada tabla tenga solo dos de estos tres valores.
Otra forma de combinar datos entre múltiples tablas es usar JOIN . Esta utilidad es muy
similar a la anterior pero se puede especificar una tabla usando FROM y la otra usando
JOIN :
7/9
mysql> SELECT objetos.nombre, objetos.color, localizaciones.localizacion FROM
objetos JOIN localizaciones WHERE objetos.nombre=localizaciones.nombre AND
objetos.color=’verde’;
Los datos en la tabla de objetos describen objetos generales mientras que los datos de la
tabla de ubicaciones describen objetos específicos.
Una orden de recuperación que requiere una mención especial es GROUP BY. Este
comando se utiliza junto con los operadores matemáticos, tales como SUM (), para
restringir el funcionamiento del operador a las columnas especificadas. Si quiere conocer
por ejemplo el valor total de todos los objetos de la base de datos, agrupados por tipo de
objeto se puede hacer combinando los datos de las dos tablas:
->WHERE localizaciones.nombre=objetos.nombre
Borrando Datos
Si se necesita borrar registros de una tabla de una base de datos se debe utilizar el
comando DELETE, que tiene la siguiente sintaxis:
En la siguiente tabla:
Si se pretende borrar todos los datos sobre Los Ángeles se utiliza la siguiente sentencia:
9/9