You are on page 1of 4

Tutorial SQL Parte I

SQL
SQL (Structured Query Language, lenguaje estructurado de consultas) es el lenguaje estndar
de bases de datos relacionales, se implement en su comienzo como parte del proyecto
System R, a principios de los 70. En 1986, ANSI (American National Standards Institute) e ISO
(International Standards Organization) publicaron una norma SQL, llamada SQL-86, siendo
extendida en 1989 por la norma SQL-89, teniendo desde entonces unas cuentas versiones
posteriores del estndar incorporando mejoras en el lenguaje. Actualmente el estndar ISO y
ANSI es el SQL:2008. Aunque el lenguaje en s mismo se ha mantenido bastante estable desde
la versin de 1992 por lo que en este pequeo manual nos vamos a mantener en l.
Podemos dividir el lenguaje SQL en dos componentes bsicos (hay otros componentes
menores) el DDL (Lenguaje de definicin de datos) y el MDL (lenguaje de manipulacin de
datos.
El DDL nos va a proporcionar los comandos para la definicin de esquemas de relacin,
borrado de relaciones, creacin de ndices y modificacin de los esquemas de relacin (en el
caso de Access la mayora de estas tareas las haremos va el propio sistema que nos brinda la
aplicacin, de forma que solo usaremos estas sentencias en caso de querer usarlas en la
programacin de nuestra aplicacin por que nos hagan falta, por ejemplo la creacin de una
tabla temporal para almacenar algo que despus queremos eliminar).
El MDL incluye un lenguaje de consultas basado tanto en el lgebra relacional como en el
clculo relacional de tuplas (lenguajes tericos de las bases de datos relacionales). Incluye
tambin comandos para insertar, borrar y modificar tuplas de la base de datos.

Estructura bsica
Una base de datos relacional consiste en un conjunto de relaciones, cada una de las cuales
tiene un nombre nico.
La estructura bsica de una expresin SQL consiste en tres clausulas: select, from y where.

Select se usa para listar los atributos deseados del resultado de una consulta
From lista las relaciones que deben ser analizadas en la evaluacin de la expresin
Where es un predicado que engloba a los atributos de las relaciones que aparecen en
el from.

Por ejemplo:
Select A1, A2, An
From r1,r2, .,rn
Where P

Donde Ai representa un atributo, cada r una relacin y P es el predicado.


Iremos explicando cada parte detenidamente.

Microsoft Access 2010. Curso Avanzado

Tutor: Antonio Snchez de la Fuente

Tutorial SQL Parte I

Clusula select
Una cosa que hay que tener claro es que el resultado de una consulta es, por supuesto, una
relacin. Por ejemplo si hacemos la consulta del idCliente de una tabla de pedidos con muchos
ms campos tendremos:
Select idCliente
From pedidos

El resultado ser una relacin consistente en el atributo idCliente. Aunque los lenguajes
formales de consulta se basan en la nocin matemtica de que una relacin es un conjunto y
por lo tanto no debera haber duplicados en las relaciones, en la prctica en SQL las relaciones
permiten duplicados, pudindose repetir. Si queremos forzar la eliminacin de duplicados en la
relacin resultante de una consulta, hay que introducir detrs de la sentencia select la palabra
clave distinct, por tanto si escribimos:
Select dictinct idCliente
From pedidos

Forzaremos la eliminacin de duplicados quedndonos en lugar de varios registros con el


idCliente 1, nos dejar slo un registro con este valor. En Access y otros lenguajes a parte de
esta palabra clave distinct hay otra bastante importante que es distinctrow, mientras que
distinct mira la unicidad en los campos que se seleccionan en la select, el distinctrow mira la
unicidad en todos los campos de las tablas consultadas, basndose en todo el registro y no
slo en la proyeccin realizada por la consulta. Estos dos valores los podemos poner en la
consulta con el generador yendo a las propiedades de la consulta Unique values y Unique
records.
Si usamos el smbolo * en la consulta select estaremos diciendo que queremos recuperar
todos los registros, por ejemplo:
Select *
From clientes

Devolver todos los campos de la relacin clientes.

Clusula where
En esta clusula es donde vamos a incluir las condiciones que queremos que se cumpla en
nuestra sentencia sql. Podemos usar las conectivas lgicas and, or y not para separar los
distintos predicados, y los operandos de cada predicado pueden ser expresiones que
contengan los operadores de comparacin <, <=, >, >=, = y <>. Tambin podemos usar
operadores como el between para comparar entre dos valores (no podemos usar la palabra
entre), adems podremos usar cualquiera de las funciones accesibles en Access como por
ejemplo la funcin Left (para hacer substring por la izquierda). De este modo podramos hacer
la sentencia:
SELECT *
FROM Pedidos
where left([nombre de envo],3)=Ann
order by [id de cliente]

Microsoft Access 2010. Curso Avanzado

Tutor: Antonio Snchez de la Fuente

Tutorial SQL Parte I

que nos devolvera todos los campos de la relacin pedidos que cumple que los 3 primeros
caracteres del campo nombre de envo es Ann. Observar como si el campo tiene espacios
el SQL de Access nos obliga a poner el nombre del campo entre corchetes, lo mismo pasa en el
nombre de las tablas (por esto es lo que conviene para facilitar el uso intentar no poner
nombres de tablas ni de columnas con espacios ni acentos). Otro ejemplo de uso sera:
select apellidos & , & nombre
from clientes
where (provincia=28 and localidad=Madrid) or pas=Francia

Con una sentencia de este tipo estaramos hallando un campo que por defecto Access
renombrara con algo del tipo Expr1000 con un contenido de apellidos y nombre
concatenado por una coma de la relacin clientes donde se cumple que la provincia tiene un
cdigo 28 y adems el campo localidad es Madrid o bien que el campo pas es Francia.
Adems de las funciones propias de Access en el caso de los atributos de texto podemos usar
una palabra clave like que es muy til en las bsquedas textuales y sirve para realizar
bsquedas por patrones. En SQL ANSI los patrones a usar con el like son % para encajar con
cualquier cadena y _ para sustituir cualquier carcter, en Access esto no es as y para
asemejarlo a los patrones de los sistemas Windows, se utiliza el * para cualquier cadena y ?
para un carcter, de forma que:
select *
from pedidos
where [nombre de envo] like Ann? B*

nos devolvera todos los campos de aquellos registros de la relacin pedidos donde el nombre
de envo comience por Ann, en el cuarto carcter tenga cualquier cosa, luego tenga un espacio
y una B y termine en lo que sea (de la longitud que sea).

Clusula from
La clusula from define por s misma un producto cartesiano de las relaciones que aparecen en
la clusula. Hay que tener en cuenta que el producto cartesiano de dos relaciones sera la
unin semntica de cada fila de la primera relacin con todas las tuplas de la segunda relacin,
por eso hay que poner las condiciones de unin (join) entre las tablas explcitamente bien a
nivel de from (ms adelante se ver como) o a nivel de where. En Access se puede hacer esto
de las dos maneras (en la parte del from nos lo va a hacer el directamente si tenemos las
tablas relacionadas en el apartado de relaciones o bien si pintamos las relaciones directamente
en el apartado de consulta arrastrando los campos correspondientes. En la parte del where las
deberamos escribir manualmente en la sentencia where. Por ejemplo y basndonos en las
relaciones del ejercicio 2 del curso, tendremos que si hacemos la siguiente consulta:
Select *
From clientes, pedidos

Nos dar la friolera de 1392 filas, es decir las 29 filas de clientes por las 48 filas de pedidos, y
en cada una de las tuplas estarn todos los campos de la tabla clientes y de la tabla pedidos,
est claro que no es esto lo que esperbamos. Si en cambio unimos en el where las dos tablas
por sus campos de relacin tendremos:

Microsoft Access 2010. Curso Avanzado

Tutor: Antonio Snchez de la Fuente

Tutorial SQL Parte I

select compaa, apellidos, nombre


from clientes, pedidos
where clientes.id=pedidos.[id de cliente]

Vemos como hemos unido las tablas clientes con pedidos mediante el id de cliente en ambas
tablas que es el nexo comn que tenemos, de esta forma estamos obteniendo 48 registros en
una relacin con los campos compaa, apellidos y nombre. Pero vemos que muchos de
nuestros registros estn duplicados, por lo que podemos afinar todava ms:
select distinct compaa, apellidos, nombre
from clientes, pedidos
where clientes.id=pedidos.[id de cliente]

De esta manera se reduce la proyeccin a 15 registros siendo registros nicos gracias al


distinct.

Operacin renombramiento
SQL proporciona un mecanismo para renombrar tanto atributos como relaciones, para ello
utilizaremos la clusula as de forma que podemos tener:
select distinct compaa, apellidos & , & nombre as cliente
from clientes as c, pedidos as p
where c.id=p.[id de cliente]

Vemos que en esta sentencia hemos concatenado apellidos con nombre mediante una coma y
al resultado le hemos puesto el alias de cliente (en el resultado aparecen dos campos o
atributos llamados compaa y cliente. Adems para simplificar hemos puesto alias a las tablas
por lo que en la parte del where podemos poner c.id para referirnos a clientes.id y p. para
referirnos a la relacin pedidos.

Orden en la presentacin de las tuplas


La clusula order by tras el where hace que las tuplas resultantes de una consulta se presenten
en un cierto orden. De forma predeterminada la clusula order by lista los elementos de forma
ascendente si queremos cambiar este comportamiento aadiremos la palabra clave desc..
Adems de pueden ordenar en base a ms de un criterio, pudiendo separar estos criterios por
comas, yendo el orden de izquierda a derecha. Por ejemplo
select *
from pedidos
order by [id de cliente] desc, [fecha de pedido] asc

Listara una relacin con todos los campos de la relacin pedidos ordenada por id de cliente de
forma descendente y para cada uno de los id de cliente ordenar en base a la fecha de pedido
en forma ascendente. Hay que fijarse que si quitamos el asc se comporta de la misma manera.

Microsoft Access 2010. Curso Avanzado

Tutor: Antonio Snchez de la Fuente

You might also like