Sei sulla pagina 1di 8

SELECT ciudad, regin, (ventas-

Lista la ciudad, regin y el superavit de cada


objetivo) AS superavit
oficina.
FROM oficinas

SELECT idfab, idproducto, descripcion, De cada producto obtiene su


(existencias * precio) AS valoracion fabricante, idproducto, su descripcin y
FROM productos el valor del inventario

Lista el nombre, mes y ao del contrato de


cada vendedor.
SELECT nombre, MONTH(contrato),
La funcin MONTH() devuelve el mes de
YEAR(contrato)
una fecha
FROM repventas
La funcin YEAR() devuelve el ao de una
fecha

SELECT oficina, 'tiene


Listar las ventas en cada oficina con el formato: 22
ventas de ', ventas
tiene ventas de 186,042.00 ptas
FROM oficinas

SELECT nombre,
SELECT nombre, oficina, contrato
es equivalente oficina, contrato
FROM empleados
a FROM empleados
ORDER BY oficina
ORDER BY 2

SELECT nombre, numemp,


oficinarep
Obtiene un listado alfabtico de los empleados.
FROM empleados
ORDER BY nombre

SELECT nombre, numemp,


Obtiene un listado de los empleados por orden de
contrato
antiguedad en la empresa (los de ms antiguedad
FROM empleados
aparecen primero).
ORDER BY contrato

SELECT nombre,
Obtiene un listado de los empleados ordenados por
numemp,ventas
volmen de ventas sacndo los de menores ventas
FROM empleados
primero.
ORDER BY ventas

Si queremos podemos alterar ese orden utilizando la clusula DESC (DESCendente), en este
caso el orden ser el inverso al ASC.

Ejemplos:

SELECT nombre, numemp, Obtiene un listado de los empleados por orden de


contrato antiguedad en la empresa empezando por los ms

1
FROM empleados recientemente incorporados.
ORDER BY contrato DESC

SELECT nombre,
Obtiene un listado de los empleados ordenados por
numemp,ventas
volmen de ventas sacando primero los de mayores
FROM empleados
ventas.
ORDER BY ventas DESC

Tambin podemos ordenar por varias columnas, en este caso se indican las columnas
separadas por comas.
Se ordenan las filas por la primera columna de ordenacin, para un mismo valor de la primera
columna, se ordenan por la segunda columna, y as sucesivamente.

La clusula DESC o ASC se puede indicar para cada columna y as utilizar una ordenacin
distinta para cada columna. Por ejemplo ascendente por la primera columna y dentro de la primera
columna, descendente por la segunda columna.

Ejemplos:

SELECT region, ciudad, ventas Muestra las ventas de cada oficina , ordenadas por
FROM oficinas orden alfabtico de regin y dentro de cada regin por
ORDER BY region, ciudad ciudad.

SELECT region, ciudad,


Lista las oficinas clasificadas por regin y dentro de
(ventas - objetivo) AS superavit
cada regin por superavit de modo que las de mayor
FROM oficinas
superavit aparezcan las primeras.
ORDER BY region, 3 DESC

Lista los cdigos de los directores de las


SELECT dir FROM oficinas oficinas. El director 108 aparece en cuatro
SELECT ALL dir FROM oficinas oficinas, por lo tanto aparecer cuatro veces en
el resultado de la consulta.

En este caso el valor 108 aparecer una sola


SELECT DISTINCT dir FROM
vez ya que le decimos que liste los distintos
oficinas
valores de directores.

Lista el cdigo y nombre de los empleados


SELECT TOP 2 numemp, nombre
ordenndolos por fecha de contrato, sacando
FROM empleado
unicamente los dos primeros (sern los dos
ORDER BY contrato
ms antiguos).

SELECT TOP 3 numemp, nombre En este caso tiene que sacar los tres
FROM empleado primeros, pero si nos fijamos en las fechas de
ORDER BY contrato contrato tenemos 20/10/86, 10/12/86, 01/03/87,
01/03/87, la tercera fecha es igual que la

2
cuarta, en este caso sacar estas cuatro filas
en vez de tres, y sacara todas las filas que
tuviesen el mismo valor que la tercera fecha de
contrato.

El nmero de filas que queremos visualizar se puede expresar con un nmero entero o
como un porcentaje sobre el nmero total de filas que se recuperaran sin la clusula
TOP. En este ltimo caso utilizaremos la clusula TOP n PERCENT (porcentaje en
ingls).

Lista el nombre de los empleados


ordenndolos por fecha de contrato, sacando
SELECT TOP 20 PERCENT nombre
unicamente un 20% del total de empleados.
FROM empleado
Como tenemos 10 empleados, sacar los dos
ORDER BY contrato
primeros, si tuviesemos 100 empleados sacara
los 20 primeros.

La clusula WHERE

La clusula WHERE selecciona unicamente las filas que cumplan la condicin de


seleccin especificada.

En la consulta slo aparecern las filas para las cuales la condicin es verdadera (TRUE),
los valores nulos (NULL) no se incluyen por lo tanto en las filas del resultado.
La condicin de seleccin puede ser cualquiercondicin vlida o combinacin de
condiciones utilizando los operadores NOT (no) AND (y) y OR ().

Para empezar veamos un ejemplo sencillo:

SELECT nombre
FROM empleados Lista el nombre de los empleados de la
WHERE oficina = 12 oficina 12.

SELECT nombre Lista el nombre de los empleados de la


FROM empleados oficina 12 que tengan ms de 30 aos. (oficina
WHERE oficina = 12 AND edad > 30 igual a 12 y edad mayor que 30)

SELECT numemp, nombre Lista los empleados cuyas ventas superan su


FROM empleados cuota
WHERE ventas > cuota

3
SELECT numemp, nombre Lista los empleados contratados antes del ao 88
FROM empleados (cuya fecha de contrato sea anterior al 1 de
WHERE contrato < #01/01/1988# enero de 1988).
Ojo!!, las fechas entre almohadillas # # deben
estar con el formato mes,dia,ao aunque
tengamos definido otro formato para nuestras
fechas.

SELECT numemp, nombre Este ejemplo obtiene lo mismo que el anterior


FROM empleados pero utiliza la funcin year(). Obtiene los
WHERE YEAR(contrato) < 1988 empleados cuyo ao de la fecha de contrato sea
menor que 1988.

SELECT oficina Lista las oficinas cuyas ventas estn por debajo
FROM oficinas del 80% de su objetivo.
WHERE ventas < objetivo * 0.8 Hay que utilizar siempre el punto decimal aunque
tengamos definida la coma como separador de
decimales.

SELECT oficina Lista las oficinas dirigidas por el empleado 108.


FROM oficinas
WHERE dir = 108

Test de rango (BETWEEN).


Examina si el valor de la expresin est comprendido entre los dos valores definidos
por exp1 y exp2.
Tiene la siguiente sintaxis:

SELECT numemp, nombre Lista los empleados cuyas ventas estn


FROM empleados comprendidas entre 100.000 y 500.00
WHERE ventas BETWEEN 100000
AND 500000

SELECT numemp, nombre Obtenemos lo mismo que en el ejemplo anterior.


FROM empleados Los parntesis son opcionales.
WHERE (ventas >= 100000) AND
(ventas <= 500000)

Test de pertenencia a conjunto (IN)


Examina si el valor de la expresin es uno de los valores incluidos en la lista de valores.
Tiene la siguiente sintaxis:

4
SELECT numemp, nombre, oficina Lista los empleados de las oficinas 12, 14 y 16
FROM empleados
WHERE oficina IN (12,14,16)

SELECT numemp, nombre Obtenemos lo mismo que en el ejemplo anterior.


FROM empleados Los parntesis son opcionales.
WHERE (oficina = 12) OR (oficina =
14) OR (oficina = 16)

Test de valor nulo (IS NULL)

Una condicin de seleccin puede dar como resultado el valor verdadero TRUE, falso
FALSE o nulo NULL.

Cuando una columna que interviene en una condicin de seleccin contiene el valor
nulo, el resultado de la condicin no es verdadero ni falso, sino nulo, sea cual sea el
test que se haya utilizado. Por eso si queremos listar las filas que tienen valor en una
determinada columna, no podemos utilizar el test de comparacin, la condicin oficina =
null devuelve el valor nulo sea cual sea el valor contenido en oficina. Si queremos
preguntar si una columna contiene el valor nulo debemos utilizar un test especial, el test
de valor nulo.
Tiene la siguiente sintaxis:

Ejemplos:

SELECT oficina, ciudad Lista las oficinas que no tienen director.


FROM oficinas
WHERE dir IS NULL

SELECT numemp, nombre Lista los empleados asignados a alguna oficina


FROM empleados (los que tienen un valor en la columna oficina).
WHERE oficina IS NOT NULL

Test de correspondencia con patrn (LIKE)

Se utiliza cuando queremos utilizar caracteres comodines para formar el valor con el
comparar.
Tiene la siguiente sintaxis:

Los comodines ms usados son los siguientes:


? representa un carcter cualquiera
* representa cero o ms caracteres
# representa un dgito cualquiera (0-9)

5
Ejemplos:

SELECT numemp, nombre Lista los empleados cuyo nombre empiece por
FROM empleados Luis (Luis seguido de cero o ms caracteres).
WHERE nombre LIKE 'Luis*'

SELECT numemp, nombre Lista los empleados cuyo nombre contiene Luis,
FROM empleados en este caso tambin saldra los empleados
WHERE nombre LIKE '*Luis*' Jos Luis (cero o ms caracteres seguidos de
LUIS y seguido de cero o ms caracteres).

SELECT numemp, nombre Lista los empleados cuyo nombre contenga una
FROM empleados a como tercera letra (dos caracteres, la letra a, y
WHERE nombre LIKE '??a*' cero o ms caracteres.

En este tema vamos a estudiar


las consultas
multitabla llamadas as porque
estn basadas en ms de una
tabla.

El SQL de Microsoft Jet 4.x


soporta dos grupos de consultas
multitabla:

- la unin de tablas

- la composicin de tablas

La unin de tablas

Esta operacin se utiliza cuando tenemos dos tablas con las mismas columnas y
queremos obtener una nueva tabla con las filas de la primera y las filas de la segunda. En
este caso la tabla resultante tiene las mismas columnas que la primera tabla (que son las
mismas que las de la segunda tabla).

Por ejemplo tenemos una tabla de libros nuevos y una tabla de libros antiguos y queremos
una lista con todos los libros que tenemos. En este caso las dos tablas tienen las mismas
columnas, lo nico que vara son las filas, adems queremos obtener una lista de libros (las
columnas de una de las tablas) con las filas que estn tanto en libros nuevos como las que
estn en libros antiguos, en este caso utilizaremos este tipo de operacin.

Cuando hablamos de tablas pueden ser tablas reales almacenadas en la base de

6
datos o tablas lgicas (resultados de una consulta), esto nos permite utilizar la operacin con
ms frecuencia ya que pocas veces tenemos en una base de datos tablas idnticas en cuanto
a columnas. El resultado es siempre una tabla lgica.

Por ejemplo queremos en un slo listado los productos cuyas existencias sean iguales a
cero y tambin los productos que aparecen en pedidos del ao 90. En este caso tenemos unos
productos en la tabla de productos y los otros en la tabla de pedidos, las tablas no tienen las
mismas columnas no se puede hacer una union de ellas pero lo que interesa realmente es el
identificador del producto (idfab,idproducto), luego por una parte sacamos los cdigos de los
productos con existencias cero (con una consulta), por otra parte los cdigos de los productos
que aparecen en pedidos del ao 90 (con otra consulta), y luego unimos estas dos tablas
lgicas.

El operador que permite realizar esta operacin es el operador UNION.

La composicin de tablas

La composicin de tablas consiste en concatenar filas de una tabla con filas de otra. En
este caso obtenemos una tabla con las columnas de la primera tabla unidas a
las columnas de la segunda tabla, y las filas de la tabla resultante
son concatenaciones de filas de la primera tabla con filas de la segunda tabla.

El ejemplo anterior quedara de la siguiente forma con la composicin:

7
A diferencia de la unin la composicin permite obtener una fila con datos de las dos tablas,
esto es muy til cuando queremos visualizar filas cuyos datos se encuentran en dos tablas.

Por ejemplo queremos listar los pedidos con el nombre del representante que ha hecho el
pedido, pues los datos del pedido los tenemos en la tabla de pedidos pero el nombre del
representante est en la tabla de empleados y adems queremos que aparezcan en la misma
lnea; en este caso necesitamos componer las dos tablas (Nota: en el ejemplo expuesto a
continuacin, hemos seleccionado las filas que nos interesan).

Existen distintos tipos de composicin, aprenderemos a utilizarlos todos y a elegir el tipo


ms apropiado a cada caso.

Los tipos de composicin de tablas son:

. El producto cartesiano

. El INNER JOIN

. El LEFT / RIGHT JOIN

Potrebbero piacerti anche