SQL - Nociones básicas.

José Ignacio Cabanes, Junio 2000

Versión de este documento: 1.0
Última versión disponible en: www.nachocabanes.com



0.- Introducción.

SQL es la abreviatura de Structured Query Language (lenguaje de consulta estructurado).  Se trata de un lenguaje estándar para acceder a los datos almacenados en una base de datos.  Su utilidad radica en que casi todas las bases de datos se manejan de forma más o menos distinta, pero la mayoría de los gestores de bases de datos más potentes permiten que se les hagan consultas en este lenguaje.

Parece razonable suponer que quien quiere aprender SQL es porque ya tiene unos conocimientos elementales de bases de datos, y que entiende conceptos como tabla, campo, registro, etc. Aun así, las ideas básicas, prescindiendo de todo tipo de formalismos (incluso demasiado) son:


La forma habitual de representar una tabla es esta:
 


Nombre
Domicilio
Teléfono
Fecha nacimiento
Juan Pérez
C/ La Pera, 1
111-11-11
1/1/1950
José López
C/ La Manzana, 2
222-22-22
20/10/1965
Andrés Martínez
C/ La Naranja, 3
333-33-33
15/8/1980

En esta representación:

Daré sólo unas nociones básicas de SQL, dejando de lado muchos aspectos más avanzados como la creación de bases de datos y de tablas, las consultas agrupadas y los sub-queries.
 

1.- Consultar datos de una tabla.

La orden básica para crear una consulta en lenguaje SQL es la orden SELECT.  Esta se emplea así:
 
SELECT campo1, campo2, ... campoN FROM tabla


Un primer ejemplo que mostrase ciertos campos de una tabla de clientes podría ser:
 

SELECT nombre, apellidos, domicilio, localidad, provincia FROM clientes


Tanto las órdenes como los nombre de los campos y/o las tablas se pueden escribir en mayúsculas o minúsculas, pero en este manual se empleará mayúsculas para las órdenes de SQL y minúsculas para los nombres de campos y/o tablas, a fin de que se pueden distinguir con mayor facilidad.

Para mostrar todos los campos de una tabla, no hace falta enumerarlos uno a uno, sino que se puede emplear el asterisco (*):
 

SELECT * FROM clientes

2.- Consultar datos que cumplan ciertas condiciones.

Si se quiere visualizar los datos que cumplan una cierta condición, se emplea la sentencia WHERE:
 
SELECT campo1, campo2, ... campoN FROM tabla WHERE condición


Un ejemplo que mostrase datos de clientes de Madrid podría ser:
 

SELECT nombre, apellidos, domicilio, localidad, provincia FROM clientes WHERE localidad="Madrid"


Los operadores de comparación son los habituales en informática: =, <, >, <= (menor o igual), >= (mayor o igual), <> (distinto de, que se indica con un símbolo de "menor que" y otro de "mayor que").

Se pueden encadenar varias condiciones con AND (y), OR (ó), NOT (no):
 

SELECT nombre, apellidos, FROM clientes WHERE localidad="Madrid" AND totalCompras > 500000


Para saber si un campo se ha dejado en blanco, no se deberá mirar si es = 0, sino usar la condición IS NULL.  Por ejemplo, para saber de qué clientes no tenemos el teléfono haríamos:
 

SELECT nombre FROM clientes WHERE telefono IS NULL


Si se quieren los datos ordenados según algún campo, se usa la cláusula ORDER BY:
 

SELECT nombre, apellidos, totalCompras FROM clientes ORDER BY totalCompras


En caso de que se quieran ordenar de mayor a menor, se añade DESC después de ORDER BY:
 

SELECT nombre, apellidos, totalCompras FROM clientes ORDER BY totalCompras DESC

 

3.- Mostrar datos de varias tablas.

En el caso más sencillo, basta con indicar los nombres de las tablas después de FROM:
 
SELECT campo1, campo2, ... campoN FROM tabla1, tabla2, ... tablaN


Si coinciden nombres de campo en varias tablas, se escribe el nombre de la tabla y un punto antes del nombre de la tabla, para evitar la ambigüedad:
 

SELECT cliente.nombre, vendedores.nombre FROM clientes, agentes


Es muy frecuente que se tomen datos de varias tablas relacionadas, y esto en muchas bases puede obligarnos a indicar también una condición que refleje esa relación:
 

SELECT cliente.nombre, vendedores.nombre FROM clientes, agentes WHERE agentes.codigo = clientes.codigoVendedor


O en un caso que emplee 3 tablas
 

SELECT artículos.titulo, revistas.título, nombre FROM artículos, revistas, autores WHERE artículos.codigoRev = revistas.codigo AND artículos.codigoAutor = autores.codigo


(en la última consulta no se ha indicado la tabla de la que procede el campo "nombre" suponiendo que no hay ningún otro campo llamado "nombre" en ninguna de las otras dos tablas).
 

4.- Operaciones elementales.

También se pueden realizar operaciones elementales como la suma (SUM), promedio (AVERAGE), máximo (MAX) y mínimo (MIN) de datos numéricos:
 
SELECT SUM(totalCompras) FROM clientes


Se puede realizar más de una operación en la misma consulta:
 

SELECT MAX(importe), SUM(importe), AVERAGE(importe) FROM clientes


No tiene sentido combinar datos resumidos como éstos y datos detallados en una misma consulta: la siguiente consulta no sería válida en muchos sistemas de bases de datos, y en otros mostraría el nombre de cada cliente seguido del total de compras de todos ellos, que se repetiría en cada ficha:
 

SELECT NOMBRE, SUM (totalCompras) FROM clientes

5.- Buscar un cierto texto.

Es muy frecuente buscar los registros que contengan un cierto texto.  En este caso, se debe usar LIKE en vez de "=" y emplear el carácter de tanto por ciento (%) como comodín:
 
SELECT nombre, apellidos FROM clientes WHERE apellidos LIKE "Fer%"


La consulta anterior mostraría los cliente cuyo apellido comience por "Fer".  Si queremos buscar aquellos en cuya dirección aparece la palabra "Madrid", usaríamos:
 

SELECT nombre, apellidos FROM clientes WHERE localidad LIKE "%Madrid%"


En algunos sistemas de gestión de bases de datos, puede emplearse el asterisco (*) en vez del símbolo de tanto por ciento (%).
 

6.- Modificaciones repetitivas.

Existen otras órdenes distintas de SELECT.  Una muy útil es la que nos permite modificar valores de la base de datos: UPDATE, que se utiliza así:
 
UPDATE tabla SET campo=valor


Por ejemplo, para que el campo "Iva" de todos los clientes tenga el valor 16% podría ser:
 

UPDATE clientes SET iva=0.16


Si queremos que se modifiquen sólo los que cumplen cierta condición, emplearemos WHERE.  Por ejemplo, para que aquellos clientes cuya localidad sea "Alicante" pasen a tener como localidad "Alicante (España)" haríamos:
 

UPDATE clientes SET localidad="Alicante (España)" WHERE localidad="Alicante"

7.- Ejemplos.

Mostrar todos los datos de los clientes:
 
SELECT * FROM clientes


Nombre y domicilio de todos los clientes:
 

SELECT nombre, domicilio FROM clientes


Nombre y domicilio de los clientes de Alicante:
 

SELECT nombre, domicilio FROM clientes WHERE localidad = "Alicante"


Nombre y domicilio de los clientes que no sean de Alicante y que hayan comprado productos por un importe total superior o igual a 500.000 pesetas:
 

SELECT nombre, domicilio FROM clientes WHERE localidad <> "Alicante" AND totalCompras >= 500000


Nombre y domicilio de los clientes que se apellidan López (suponiendo que el apellido se haya guardado también dentro del campo nombre):
 

SELECT nombre, domicilio FROM clientes WHERE nombre LIKE "%López%"


Nombre de los clientes de Madrid, ordenados de mayor a menor volumen de compras:
 

SELECT nombre FROM clientes WHERE localidad = "Madrid" ORDER BY totalCompras DESC


Nombre del cliente de Madrid que mayor volumen de compras ha realizado:
 

SELECT nombre FROM clientes WHERE localidad = "Madrid" AND totalCompras = MAX(totalcompras)


Mayor importe de compras, menor y promedio de todos ellos:
 

SELECT MAX(totalcompras), MIN(totalcompras), AVERAGE(totalcompras) FROM clientes


Clientes para los que no se ha anotado el vendedor:
 

SELECT nombre FROM clientes WHERE codVendedor IS NULL


Escribir "(No indicado)" como número de Fax de aquellos clientes cuyo Fax no se haya tecleado:
 

UPDATE clientes SET fax="(No indicado)" WHERE fax IS NULL


Multiplicar por 0.8 el valor actual de todos los productos
 

UPDATE productos SET valorActual = valorActual * 0.8