Está en la página 1de 6

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 urado). Se trata de un lenguaje estndar para acceder a los una base de datos. Su utilidad radica en que casi todas las anejan de forma ms o menos distinta, pero la mayora de los tos ms potentes permiten que se les hagan consultas en este

de consulta estruct datos almacenados en bases de datos se m gestores de bases de da lenguaje.

Parece razonable suponer que quien quiere aprender SQL es porque ya tiene unos c onocimientos elementales de bases de datos, y que entiende conceptos como tabla, campo, registro, etc. Aun as, las ideas bsicas, prescindiendo de todo tipo de for malismos (incluso demasiado) son: Una tabla es un conjunto de datos con una cierta homogeneidad, por ejemplo u n fichero que contenga todos los datos de nuestros amigos (nombre, domicilio, te lfono, fecha de nacimiento, etc). Un registro sera cada uno de los bloques de datos que hemos guardado: la fich a 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 Domicilio Telfono Fecha nacimiento Juan Prez C/ La Pera, 1 111-11-11 1/1/1950 Jos Lpez C/ La Manzana, 2 222-22-22 20/10/1965 Andrs Martnez C/ La Naranja, 3

333-33-33 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 co mo la creacin de bases de datos y de tablas, las consultas agrupadas y los sub-qu eries. 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 di stinguir 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 s entencia 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 WHER E 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 "me nor 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 totalCompra s > 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 te lfono 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 B Y: SELECT nombre, apellidos, totalCompras FROM clientes ORDER BY totalCompras D ESC

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 muc has bases puede obligarnos a indicar tambin una condicin que refleje esa relacin: SELECT cliente.nombre, vendedores.nombre FROM clientes, agentes WHERE agente s.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.cod igo (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 t ablas). 4.- Operaciones elementales. Tambin se pueden realizar operaciones elementales como la suma (SUM), promedio (A VERAGE), 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 mis ma consulta: la siguiente consulta no sera vlida en muchos sistemas de bases de da tos, y en otros mostrara el nombre de cada cliente seguido del total de compras d e 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 ca so, 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 quere mos 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 modif icar 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 s er: UPDATE clientes SET iva=0.16 Si queremos que se modifiquen slo los que cumplen cierta condicin, emplearemos WHE

RE. Por ejemplo, para que aquellos clientes cuya localidad sea Alicante pasen a t ener 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 tot alCompras >= 500000 Nombre y domicilio de los clientes que se apellidan Lpez (suponiendo que el apell ido 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 = MA X(totalcompras) Mayor importe de compras, menor y promedio de todos ellos: SELECT MAX(totalcompras), MIN(totalcompras), AVERAGE(totalcompras) FROM clie ntes

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 t ecleado: 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