Docstoc

Ejemplos_teoricos-SQL

Document Sample
Ejemplos_teoricos-SQL Powered By Docstoc
					CREAR UNA CONSULTA
Antes de pasar a estudiar la sintaxis de las sentencias SQL es preciso ver cómo se
puede crear una consulta con Access.

Paso 1: Ventana principal de la aplicación
En el menú de la izquierda hay que seleccionar el botón “Consultas” y hacer clic en la opción
“Crear una consulta en vista Diseño”.

Paso 2: Selección de las tablas implicadas
La aplicación Access cuenta con un asistente para realizar consultas. Aunque puede ser muy
práctico nuestro objetivo es aprender a desarrollar estas consultas utilizando el lenguaje
SQL.
Por este motivo, antes de llegar a la pantalla donde se pueden introducir directamente
sentencias SQL es preciso pasar por algunas otras ventanas como la que detalla en la
cabecera del artículo, en la que se definen las tablas implicadas en la consulta. En principio
da lo mismo las tablas que se seleccionen ya que la consulta será reescrita “a mano” más
tarde.

Paso 3: Vista SQL
Para llegar a la ventana de edición de sentencias SQL es necesario seleccionar la opción
“Vista SQL” que aparece en el desplegable anexo al botón principal.

Paso 4: Ventana de edición
La ventana de edición es un simple editor de texto donde se escriben las sentencias SQL.
Una vez que se ha terminado se debe pulsar el botón principal para que la consulta se
ejecute.

Paso 5: Resultado de la ejecución
El resultado de la ejecución de la consulta queda recogido en una ventana similar a la que
se muestra cuando se introducen datos.



CONSULTAS SIMPLES
Probablemente consultar los datos es una de las tareas que se llevan a cabo con
mayor frecuencia. Cuando existen varias tablas y las relaciones entre ellas son
complejas, las consultas puede llegar a ser francamente complicadas tardando en
ejecutarse una cantidad de tiempo nada despreciable.

Ésta es precisamente otra de las cuestiones que deben afrontarse, ya que no se trata
únicamente de obtener los datos deseados, sino de hacerlo además en un tiempo razonable.
El lenguaje SQL es muy flexible y permite realizar una misma consulta de muy diversas
formas. Puede llegar a ser difícil determinar cuál es la más eficiente de entre todas ellas,
pero lo que sí resulta más fácil es detectar aquellas soluciones que son especialmente
perjudiciales para el rendimiento de la base de datos, y que, por lo tanto, hay que evitar.


La sentencia SELECT

La sentencia SELECT se utiliza para obtener un conjunto de registros que puede proceder de
una o más tablas. El siguiente ejemplo ilustra la sintaxis más elemental:

SELECT NOMBRE, APELLIDO
FROM CONTACTOS
En primer lugar aparece la palabra „SELECT‟ seguida de los nombres, separados por comas,
de los campos que se quieren extraer. La palabra reservada „FROM‟, que sucede a los
nombres de los campos, se utiliza para indicar la tabla o tablas de donde va a extraerse la
información.
El resultado de la consulta anterior da lugar a una tabla de datos como la que se muestra a
continuación:

                                 NOMBRE        APELLIDO
                                 K.D.          Lang
                                 Madonna       Ciccone
                                 Sheryl        Crow

La cláusula WHERE
Con frecuencia suele ser necesario aplicar algún tipo de condición que restringa el número
de registros devuelto por una consulta. Por ejemplo:

SELECT NOMBRE, APELLIDO
FROM CONTACTOS
WHERE ID=1

La sentencia anterior sirve para obtener el nombre y los apellidos de aquel contacto cuyo
identificador único –el campo ID de la tabla– es igual a 1.

Cuando existen varias condiciones, éstas pueden agruparse utilizando operadores AND/OR:

SELECT NOMBRE, APELLIDO
FROM CONTACTOS
WHERE ID=1 OR
ID=2

El resultado de la consulta anterior da lugar a una tabla de datos como la que se muestra a
continuación:

                                 NOMBRE        APELLIDO
                                 Madonna       Ciccone
                                 Sheryl        Crow


La cláusula ORDER BY
Otra de las características más útiles que proporciona el lenguaje SQL es la facilidad para
ordenar los resultados. Por ejemplo:

SELECT NOMBRE, APELLIDO
FROM CONTACTOS
WHERE ID=1 OR ID=2
ORDER BY APELLIDO DESC

La cláusula ORDER BY indica la lista de campos, separados por comas si hay más de uno,
que debe utilizarse como criterio para ordenar los registros que conforman el resultado. La
palabra reservada DESC indica que el orden debe invertirse. Así, por ejemplo, si tratamos
con valores numéricos el orden por defecto que se aplica es de menor a mayor; si se utiliza
la palabra reservada DESC entonces se invierte dicho orden, colocándose los registros de
mayor a menor.

El resultado de la consulta anterior da lugar a una tabla de datos como la que se muestra a
continuación:

                                 NOMBRE        APELLIDO
                                 Sheryl        Crow
                                 Madonna       Ciccone
La cláusula GROUP BY
En algunas ocasiones resulta imprescindible agrupar todos los elementos devueltos
utilizando como criterio la repetición del valor de alguno de los campos. Así por ejemplo,
dada la tabla DISCO definida de por los campos TITULO y ARTISTA, se pueden obtener la
lista de cuantos discos hay de cada artista simplemente con la siguiente consulta:

SELECT ARTISTA, COUNT(*)
FROM DISCO
GROUP BY ARTISTA

La palabra reservada COUNT se utiliza como función de agregado permitiendo calcular para
cada artista la cuenta de todos los registros encontrados.


CONSULTAS COMPLEJAS
En la mayor parte de los casos es necesario usar en una consulta varias tablas
para llegar a obtener la información deseada.

Por lo general se suelen combinar registros procedentes de dos o más tablas a partir de
valores coincidentes en un campo común. Otras veces es preciso hacer subconsultas, o lo
que es lo mismo, crear mediante sentencias SELECT tablas temporales de datos que forman
parte a su vez de la cláusula FROM de otra sentencia SELECT. En todos estos casos, donde
las posibles combinaciones de elementos pueden ser muchas, no hay que olvidar el factor
eficiencia.

Combinación de tablas
Para este ejemplo se va a añadir una nueva tabla a la base de datos de contactos. Se trata
de la tabla DIRECCION y cuenta con los siguientes campos: ID (identificador único de los
contactos), DIRECCION (dirección completa del contacto). Como se puede observar se trata
de una tabla muy sencilla. Cada contacto de la tabla CONTACTO puede tener una o más
direcciones, lo que significa varios registros de la tabla DIRECCION.

La siguiente consulta muestra cómo se puede obtener una lista con los nombres de los
contactos y las posibles direcciones:

SELECT NOMBRE, DIRECCION
FROM CONTACTOS, DIRECCION
WHERE CONTACTOS.ID = DIRECCION.ID

Los nombres de las tablas aparecen en la cláusula FROM separados por comas. El campo
que guardan en común, en este caso el campo ID, es el nexo que permite relacionar la
información de ambas tablas. Como el nombre de dicho campo es igual en las dos, es
necesario calificarlo para que la base de datos sea capaz de saber a qué tabla corresponde
la referencia. Esto se lleva a cabo poniendo delante del nombre del campo el nombre de
tabla seguido de un punto.

Al principio puede resultar bastante confuso llegar a entender de qué forma se producen las
combinaciones de la tablas en este tipo de sentencias SQL. El siguiente ejemplo utiliza unas
tablas muy sencillas para ilustrar de qué modo se tratan las combinaciones de tablas.

                                TABLA 1
                                ID             VALOR
                                1              A
                                2              B
                                3              C
                                TABLA 2
                                ID               VALOR
                                1                D
                                2                E
                                3                F

Una consulta como la que sigue:
SELECT TABLA1.ID, TABLA1.VALOR, TABLA2.ID, TABLA2.VALOR
FROM TABLA1, TABLA2;

daría lugar al producto cartesiano de ambas tablas:

                        Tabla1.I   Table1.valo   Tabla2.I   Tabla2.Valo
                        D          r             D          r
                        1          A             1          D
                        2          B             1          D
                        3          C             1          D
                        1          A             2          E
                        2          B             2          E
                        3          C             2          E
                        1          A             3          F
                        2          B             3          F
                        3          C             3          F

Lo anterior significa que por cada registro de la tabla TABLA1 se obtienen tantas
combinaciones como registros hay en la tabla TABLA2. En el momento que se introduce en
la cláusula WHERE la condición que relaciona los campos comunes, el número de registros
del resultado se restringe como se puede contemplar a continuación:

SELECT TABLA1.ID, TABLA1.VALOR, TABLA2.ID, TABLA2.VALOR
FROM TABLA1, TABLA2
WHERE TABLA1.ID = TABLA2.ID


                        Tabla1.I   Table1.valo   Tabla2.I   Tabla2.Valo
                        D          r             D          r
                        1          A             1          D
                        2          B             2          E
                        3          C             3          F


Subconsultas
Hasta el momento todas las condiciones que se han aplicado en la cláusula WHERE han
consistido en comparar el valor de un campo con un literal –es decir, con una constante, ya
sea una cadena de texto, un número, etc.– o bien en relacionar dos campos que pertenecen
a tablas distintas. Existe una posibilidad más y es la que proporcionan las subconsultas. De
manera informal se puede decir que una subconsulta no es más que una consulta dentro de
otra consulta, o lo que es lo mismo, una sentencia SELECT que forma parte de otra
sentencia SELECT. La siguiente consulta muestra un ejemplo:

SELECT COUNT(*)
FROM CONTACTOS
WHERE ID NOT IN (SELECT DISTINCT ID FROM DIRECCION)
De lo anterior se deduce que, a la hora de calcular cuántos elementos hay en la tabla
CONTACTOS, solamente se van a tener en cuenta aquellos cuyo ID no aparece en la tabla
DIRECCION. En otras palabras, la consulta anterior determina el número total de contactos
para los que no se ha registrado una dirección.

Las subconsultas también pueden aparecer en la cláusula FROM de las sentencias SELECT.
La siguiente muestra un ejemplo típico:
SELECT NOMBRE, CUENTA
FROM CONTACTOS, (SELECT ID, COUNT(*) AS CUENTA FROM DIRECCION
GROUP BY ID) TMP
WHERE CONTACTOS.ID = TMP.ID

La subconsulta interna utiliza la cláusula GROUP BY para obtener una tabla de datos
formada por dos campos: el primero es el ID (identificador único de un contacto) y el
segundo es la cuenta de las veces que aparece ese ID en la tabla DIRECCION, o lo que es lo
mismo, el número de direcciones que hay para ese contacto. Rodear con paréntesis la
consulta y poner a continuación el nombre TMP es equivalente a indicar a la base de datos
que los resultados producidos por esa consulta van a constituir una tabla temporal llamada
TMP.

La consulta exterior combina las tablas CONTACTOS y TMP utilizando el campo que guardan
en común, el campo ID. El resultado que se obtiene es una lista de los nombres de los
contactos y el número de direcciones que hay para cada uno de ellos. La utilizados en
subconsultas y combinación de tablas pueden llegar a complicarse todo lo que se desee. Así
por ejemplo, se podría obtener el número total de contactos para los que no se ha
registrado una dirección partiendo de la consulta anterior, es decir, por una vía distinta a la
utilizada al comienzo de este apartado:

SELECT COUNT(*)
FROM (
SELECT NOMBRE, CUENTA
FROM CONTACTOS, (SELECT ID, COUNT(*) AS CUENTA FROM DIRECCION
GROUP BY ID) TMP
WHERE CONTACTOS.ID = TMP.ID
)
WHERE CUENTA = 0


INSERCIONES, MODIFICACIONES Y BORRADOS
Insertar o modificar datos es otra de las tareas comunes que hay que realizar
cuando se trabaja con base de datos. Si bien en general la complejidad de este
tipo de sentencias SQL es mucho menor, especialmente en lo que refiere a las
inserciones, también pueden producirse casos complicados.


La sentencia INSERT

La sintaxis de la sentencia INSERT es muy sencilla, tal y como se ilustra a continuación:

INSERT INTO CONTACTOS (ID, NOMBRE, APELLIDO)
VALUES (13, 'Dita', 'Parlo')

Después de la palabra reservada INTO aparece el nombre de la tabla seguido de los campos
separados por comas y entre paréntesis. No es necesario que se indiquen los nombres de
todos los campos de la tabla, pero tampoco hay que olvidar que alguno de ellos puede ser
obligatorio y de no aparecer se produciría un error. La palabra reservada VALUES indica que
a continuación aparecen los valores de esa inserción. Las cadenas de caracteres deben ir
separadas por comillas simples.
La sentencia UPDATE

La sentencia UPDATE se utiliza para modificar los registros de una tabla la base de datos. El
siguiente ejemplo muestra su sintaxis:

UPDATE CONTACTOS
SET NOMBRE = 'Dita',
APELLIDO = 'Parlo'
WHERE ID = 13

En este caso se establece el valor de los campos NOMBRE y APELLIDO para aquel registro
de tabla CONTACTOS cuyo ID sea igual a 13.

La cláusula WHERE de las sentencias UPDATE puede llegar a ser tan compleja como las
equivalentes de las sentencias SELECT. Así, por ejemplo, se puede crear un nuevo campo
en la tabla CONTACTOS para optimizar el cálculo de cuáles son aquellos contactos para los
cuales existe una dirección. La actualización de ese campo podría llevarse a cabo con la
sentencia SQL que se detalla a continuación:

UPDATE CONTACTOS
SET HAYDIRECCION = 1
WHERE ID IN (SELECT DISTINCT ID FROM DIRECCION)


La sentencia DELETE

La sentencia DELETE comparte muchas similitudes con la sentencia UPDATE. Por ejemplo:

DELETE CONTACTOS
WHERE ID = 13

La sentencia anterior borraría de la tabla CONTACTOS aquel registro cuyo ID es igual a 13.
Al igual que ocurre con la sentencia UPDATE, la cláusula WHERE puede ser tan sofisticada
como sea necesario, pudiéndose determinar el conjunto de registros a borrar mediante una
serie de condiciones complejas.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:10
posted:9/24/2011
language:Spanish
pages:6