Sei sulla pagina 1di 7

SQL Nociones bsicas.

Jos Ignacio Cabanes, Junio 2000 Versin de este documento: 1.0 ltima versin disponible en: www.nachocabanes.com

0.- Introduccin.
SQL es la abreviatura de Structured Query Language (lenguaje de consulta estructurado). Se trata de un lenguaje estndar 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 ms o menos distinta, pero la mayora de los gestores de bases de datos ms 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 bsicas, prescindiendo de todo tipo de formalismos (incluso demasiado) son:

Una tabla es un conjunto de datos con una cierta homogeneidad, por ejemplo un fichero que contenga todos los datos de nuestros amigos (nombre, domicilio, telfono, fecha de nacimiento, etc). Un registro sera cada uno de los bloques de datos que hemos guardado: la ficha de uno de nuestros amigos (con su nombre, su domicilio, etc). Un campo es cada uno de los datos que componen un registro: el nombre sera un campo, el domicilio sera otro campo, la fecha de nacimiento sera otro campo, y as sucesivamente.

La forma habitual de representar una tabla es esta:

Nombre Juan Prez Jos Lpez Andrs Martnez

Domicilio C/ La Pera, 1 C/ La Manzana, 2 C/ La Naranja, 3

Telfono 111-11-11 222-22-22 333-33-33

Fecha nacimiento 1/1/1950 20/10/1965 15/8/1980

En esta representacin:

El conjunto de todos los datos es la tabla. Cada fila representa un registro de la tabla (una ficha). Cada columna son los distintos valores que ha tomado cada uno de los campos.

Dar slo unas nociones bsicas de SQL, dejando de lado muchos aspectos ms avanzados como la creacin de bases de datos y de tablas, las consultas agrupadas y los sub-queries.

1.- Consultar datos de una tabla.


La orden bsica 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 podra 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 maysculas o minsculas, pero en este manual se emplear maysculas para las rdenes de SQL y minsculas 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 condicin, se emplea la sentencia WHERE:
SELECT campo1, campo2, ... campoN FROM tabla WHERE condicin

Un ejemplo que mostrase datos de clientes de Madrid podra ser:


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

Los operadores de comparacin son los habituales en informtica: =, <, >, <= (menor o igual), >= (mayor o igual), <> (distinto de, que se indica con un smbolo 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 condicin IS NULL. Por ejemplo, para saber de qu clientes no tenemos el telfono haramos:
SELECT nombre FROM clientes WHERE telefono IS NULL

Si se quieren los datos ordenados segn algn campo, se usa la clusula ORDER BY:
SELECT nombre, apellidos, totalCompras FROM clientes ORDER BY totalCompras

En caso de que se quieran ordenar de mayor a menor, se aade DESC despus de ORDER BY:
SELECT nombre, apellidos, totalCompras FROM clientes ORDER BY totalCompras DESC

3.- Mostrar datos de varias tablas.

En el caso ms sencillo, basta con indicar los nombres de las tablas despus 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 ambigedad:
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 tambin una condicin que refleje esa relacin:
SELECT cliente.nombre, vendedores.nombre FROM clientes, agentes WHERE agentes.codigo = clientes.codigoVendedor

O en un caso que emplee 3 tablas


SELECT artculos.titulo, revistas.ttulo, nombre FROM artculos, revistas, autores WHERE artculos.codigoRev = revistas.codigo AND artculos.codigoAutor = autores.codigo

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

4.- Operaciones elementales.


Tambin se pueden realizar operaciones elementales como la suma (SUM), promedio (AVERAGE), mximo (MAX) y mnimo (MIN) de datos numricos:
SELECT SUM(totalCompras) FROM clientes

Se puede realizar ms de una operacin 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 sera vlida en muchos sistemas de bases de datos, y en otros mostrara el nombre de cada cliente seguido del total de compras de todos ellos, que se repetira 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 carcter de tanto por ciento (%) como comodn:
SELECT nombre, apellidos FROM clientes WHERE apellidos LIKE "Fer%"

La consulta anterior mostrara los cliente cuyo apellido comience por Fer. Si queremos buscar aquellos en cuya direccin aparece la palabra Madrid, usaramos:
SELECT nombre, apellidos FROM clientes WHERE localidad LIKE "%Madrid%"

En algunos sistemas de gestin de bases de datos, puede emplearse el asterisco (*) en vez del smbolo 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% podra ser:
UPDATE clientes SET iva=0.16

Si queremos que se modifiquen slo los que cumplen cierta condicin,

emplearemos WHERE. Por ejemplo, para que aquellos clientes cuya localidad sea Alicante pasen a tener como localidad Alicante (Espaa) haramos:
UPDATE clientes SET localidad="Alicante (Espaa)" 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 Lpez (suponiendo que el apellido se haya guardado tambin dentro del campo nombre):
SELECT nombre, domicilio FROM clientes WHERE nombre LIKE "%Lpez%"

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 nmero 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

Potrebbero piacerti anche