Está en la página 1de 41

TEMA 6-2

Consultas
Si pl
Simples
Objetivo
j
•Empezaremos por estudiar la sentencia SELECT,
que permite recuperar datos de una o varias
tablas. La sentencia SELECT es con mucho la
más compleja y potente de las sentencias SQL.
Empezaremos por ver las consultas más
simples, basadas en una sola tabla.
•Esta
Esta sentencia forma parte del DML (lenguaje de
manipulación de datos), en este tema veremos
cómo seleccionar columnas de una tabla, cómo
seleccionar filas y cómo obtener las filas
ordenadas por el criterio que queramos.
•El resultado de la consulta es una tabla lógica
lógica,
porque no se guarda en el disco sino que está en
memoria y cada vez que ejecutamos la consulta
se vuelve
l a calcular.
l l
Sintaxis de la sentencia
SELECT (consultas simples)
La tabla origen
g - FROM -
• Con la cláusula FROM indicamos en qué tabla
tiene q
que buscar la información. En este
capítulo de consultas simples el resultado se
obtiene de una única tabla. La sintaxis de la
cláusula
lá l es:

FROM especificación de tabla


• Una especificación de tabla puede ser el
nombre de una consulta guardada (las que
aparecen en la ventana de base de datos), o el
nombre de una tabla que a su vez puede tener
el siguiente formato:
Cláusula FROM
Aliastabla es un nombre de alias, es como un segundo
nombre que asignamos a la tabla, si en una consulta
definimos un alias para la tabla, esta se deberá nombrar
utilizando ese nombre y no su nombre real, además ese
nombre sólo es válido en la consulta donde se define
define. El
alias se suele emplear en consultas basadas en más de una
tabla que veremos en el tema siguiente. La palabra AS que
se puede poner delante del nombre de alias es opcional y
es el valor por defecto por lo que no tienen ningún efecto.

Ejemplo: SELECT ......FROM oficinas ofi ; equivalente a


SELECT ......FROM
FROM oficinas AS ofi esta sentencia me
indica que se van a buscar los datos en la tabla oficinas que
queda renombrada en esta consulta con ofi.
Cláusula FROM
En una SELECT podemos utilizar tablas que no están
definidas en la base de datos (siempre que tengamos los
permisos
i adecuados
d d claro),
l ) sii lla ttabla
bl no está
tá en lla b
base
de datos activa, debemos indicar en qué base de datos se
encuentra con la cláusula IN.
En la cláusula IN el nombre de la base de datos debe
incluir el camino completo, la extensión (.mdb), y estar
entre comillas simples
simples.
Supongamos que la tabla empleados estuviese en otra
base de datos llamada otra en la carpeta c:\mis
documentos\ habría que indicarlo así:
documentos\,
SELECT *
FROM empleados IN 'c:\mis
c:\mis documentos\otra
documentos\otra.mdb
mdb'
Generalmente tenemos las tablas en la misma base de
datos y no hay que utilizar la cláusula IN.
IN
Selección de columnas

La lista
L li t de
d columnas
l que queremos que
aparezcan en el resultado es lo que
llamamos lista de selección y se
especifica
espec ca delante
de a te de la
accláusula
áusu a FROM.
O
Selección de columnas.
Utilización del *
Se utiliza el asterisco * en la lista de selección para indicar
'todas las columnas de la tabla'.

Ti
Tiene dos
d ventajas:
t j

• Evitar nombrar las columnas una a una ((es más corto).


)

• Si añadimos una columna nueva en la tabla, esta nueva


columna saldrá sin tener que modificar la consulta
consulta.

Se puede combinar el * con el nombre de una tabla (ej.


oficinas.*),
fi i *) pero esto
t se utiliza
tili más
á cuando
d ell origen
i d
de lla
consulta son dos tablas.
Selección de columnas.
Utilización del *
SELECT * FROM oficinas;
fi i

o bien

SELECT oficinas.* FROM oficinas;

Resultado: Lista todos los datos de las


oficinas
Selección de columnas.
columnas de la tabla origen
Las columnas
L l se puedend especificar
ifi
mediante su nombre simple (nbcol) o su
nombre cualificado (nbtabla.nbcol, el
o b e de la
nombre a cocolumna
u a p precedido
eced do de del
nombre de la tabla que contiene la columna
y separados por un punto).
punto)
Cuando el nombre de la columna o de la tabla contiene espacios en
blanco, hay que poner el nombre entre corchetes [ ] y además el
número de espacios en blanco debe coincidir. Por ejemplo [codigo de
cliente] no es lo mismo que [ codigo de cliente] (el segundo lleva un
espacio en blanco delante de código)
Selección de columnas.
Ejemplos
SELECT nombre, b oficina,
fi i f
fcontrato
t t
FROM empleados;
Lista el nombre, oficina, y fecha de contrato
de todos los empleados.
empleados
SELECT idfab, idproducto, descripcion,
precio
FROM productos;
p ;
Lista una tarifa de productos
Selección de columnas.
Alias de columna.
columna
Cuando se visualiza el resultado de la
consulta,, normalmente las columnas toman
el nombre que tiene la columna en la tabla,
si queremos cambiar ese nombre lo
podemos hacer definiendo un alias de
columna mediante la cláusula AS será el
nombre que aparecerá como título de la
columna.
Selección de columnas.
Alias de columna.
columna Ejemplo
SELECT idfab AS fabricante, idproducto,
p
descripcion
FROM productos;

Como título de la primera columna


aparecerá fabricante en vez de idfab
Selección de columnas.
C l
Columnas calculadas.
l l d
Además
Ad á d
de l
las columnas
l que provienen
i
directamente de la tabla origen, una consulta SQL
puede incluir columnas calculadas cuyos valores
se calculan a partir de los valores de los datos
almacenados.
almacenados

Para solicitar una columna calculada,


calculada se especifica
en la lista de selección una expresión en vez de un
nombre de columna. La expresión
p puede contener
p
sumas, restas, multiplicaciones y divisiones,
concatenación & , paréntesis y también funciones
predefinidas).
Selección de columnas.
Columnas calculadas. Ejemplos
SELECT localidad, zona, (ventas-objetivo)
p
AS superavit
FROM oficinas;
Lista la ciudad,
ciudad región y el superavit de cada oficina.
oficina
SELECT idfab, idproducto, descripcion,
(stock * precio) AS valoracion
FROM productos;
p ;
De cada producto obtiene su fabricante, idproducto, su
p
descripción y el valor del inventario
Selección de columnas.
Columnas calculadas.
calculadas Ejemplos
SELECT nombre, MONTH(fcontrato) as mes, YEAR(fcontrato) as año

FROM empleados;
Lista el nombre,
nombre mes y año del contrato de cada
vendedor.
La función MONTH() devuelve el mes de una fecha
La función YEAR() devuelve el año de una fecha
SELECT numoficina, 'tiene ventas de ', ventas
FROM oficinas;
Listar las ventas en cada oficina con el formato:
22 tiene ventas de 186
186,042.00
042 00 €
Ordenación de las filas - ORDER BY -
Para ordenar las filas del resultado de la
consulta tenemos la cláusula ORDER BY
consulta, BY.
Con esta cláusula se altera el orden de
visualización de las filas de la tabla pero en
ningún caso se modifica el orden de las filas
dentro de la tabla. La tabla no se modifica.
Ordenación de las filas - ORDER BY -
Podemos indicar la columna por la que
queremos ordenar utilizando su nombre de
columna (nbcolumna) o utilizando su
número de orden que ocupa en la lista de
selección (Nºcolumna).
( )
SELECT nombre, oficina, fcontrato SELECT nombre, oficina, fcontrato
FROM empleados FROM empleados
ORDER BY oficina ORDER BY 2

Por defecto el orden será ascendente (ASC) (de menor


a mayor si el campo es numérico, por orden alfabético si
el campo es de tipo texto, de anterior a posterior si el
campo es de
d titipo ffecha/hora,
h /h etc...
t
Ordenación de las filas - ORDER BY –
EJEMPLOS
SELECT nombre, num, cargo
FROM empleados
l d
ORDER BY nombre;
SELECT nombre, num, fcontrato
FROM empleados
ORDER BY fcontrato;

SELECT nombre, num, ventas


FROM empleados
ORDER BY ventas;

SELECT nombre, num, fcontrato


FROM empleados
ORDER BY fcontrato DESC;

SELECT nombre, num, ventas


FROM empleados
ORDER BY ventas DESC;
Ordenación de las filas - ORDER BY –
EJEMPLOS
También podemos ordenar por varias columnas, en este
caso se indican las columnas separadas por comas.
Se ordenan las filas por la primera columna de ordenación,
para un mismo
i valor
l dde lla primera
i columna,
l se ordenan
d
por la segunda columna, y así sucesivamente.
SELECT zona, localidad, ventas
FROM oficinas
ORDER BY zona, localidad;

SELECT zona, localidad, (ventas - objetivo) AS superavit


FROM oficinas
ORDER BY zona, 3 DESC

Lista
Li t llas oficinas
fi i clasificadas
l ifi d por región
ió y d
dentro
t d de cada
d región
ió por
superavit de modo que las de mayor superavit aparezcan las primeras.
Selección de filas
A continuación veremos las cláusulas que
nos permiten indicar qué filas queremos
visualizar.
Selección de filas. Las cláusulas DISTINCT / ALL
Al incluir la cláusula DISTINCT en la SELECT, se
eliminan del resultado las repeticiones de filas. Si
por el contrario queremos que aparezcan todas las
filas incluidas las duplicadas, podemos incluir la
cláusula ALL o nada, ya que ALL es el valor que
SQL asume por defecto
Lista los códigos de los directores
SELECT dir FROM oficinas
de las oficinas. El director 108
SELECT ALL dir FROM oficinas aparece en cuatro oficinas,
fi i por llo
tanto aparecerá cuatro veces en el
resultado de la consulta
consulta.
SELECT DISTINCT dir FROM oficinas

En este
E t caso ell valor
l 108 aparecerá
á una sola
l vez ya que lle d
decimos
i que liliste
t llos
distintos valores de directores.
Selección de filas. La cláusula LIMIT
La cláusula LIMIT permite sacar las n filas de la tabla
origen. Siempre se guía por la columna de ordenación, la
que aparece en lal cláusula
lá l ORDER BY o en su d defecto
f t lla
clave principal de la tabla.
SELECT num,, nombre
FROM empleados Queremos saber los dos empleados más
ORDER BY fcontrato antiguos de la empresa.
LIMIT 2; El argumento
arg mento LIMIT podemos poner
intervalos, así, LIMIT (4,15) mostraría los
SELECT num, nombre registros 4 al 15.
FROM empleados
p
ORDER BY fcontrato
LIMIT 3;

En este caso tiene que sacar los tres primeros, pero si nos fijamos en las fechas
de contrato tenemos 20/10/86, 10/12/86, 01/03/87, 01/03/87, la tercera fecha es
igual
gua que la
a cua
cuarta,
ta, e
en este caso saca
sacaráá estas cuat
cuatro
o filas
as e
en vez
e de ttres,
es, y
sacaría todas las filas que tuviesen el mismo valor que la tercera fecha de
contrato.
Selección de filas. La cláusula WHERE
La cláusula WHERE selecciona unicamente
las filas que cumplan la condición de
p
selección especificada.
SELECT nombre SELECT nombre
FROM empleados FROM empleados
WHERE oficina = 12; WHERE oficina = 12 AND edad > 30;

En la consulta sólo aparecerán las filas para las cuales la


condición es verdadera (TRUE), los valores nulos (NULL) no
se incluyen
i l por llo ttanto
t en llas fil
filas d
dell resultado.
lt d L La
condición de selección puede ser cualquier condición
válida o combinación de condiciones utilizando los
operadores NOT (no) AND (y) y OR (ó)
Selección de filas. La cláusula WHERE
Condiciones de selección
Las condiciones de selección son las condiciones
que pueden aparecer en la cláusula WHERE.
En SQL tenemos cinco condiciones básicas:

•el test de comparación


•el test de rango
•el test de pertenencia a un conjunto
•el test de valor nulo
p
•el test de correspondencia con patrón
p
Selección de filas. La cláusula WHERE
Test de comparación
Compara el valor de una expresión con el
valor de otra.
Selección de filas. La cláusula WHERE
Test de comparación
SELECT num, nombre
FROM empleados
WHERE ventas > minimo ;
SELECT num, nombre
FROM empleados
p
WHERE fcontrato <= '01/01/1989' ;
SELECT num,
num nombre
FROM empleados
WHERE YEAR(fcontrato) < 1992 ;
SELECT numoficina
FROM oficinas
WHERE ventas < objetivo * 0.8 ;
Selección de filas. La cláusula WHERE
Test de rango (Between)
Examina si el valor de la expresión está
p
comprendido entre los dos valores
definidos por exp1 y exp2.
Selección de filas. La cláusula WHERE
Test de rango (between)
SELECT num, nombre
FROM empleados
WHERE ventas BETWEEN 100000 AND 500000 ;
Lista los empleados cuyas ventas estén
comprendidas entre 100.000 y 500.000
SELECT num, nombre
FROM empleados
WHERE (ventas >= 100000) AND (ventas <= 500000)
Obtenemos lo mismo que en el ejemplo
anterior. Los paréntesis son opcionales.
Selección de filas. La cláusula WHERE
Test de pertenencia (in)

Examina si el valor de la expresión es uno de


l valores
los l i l id en la
incluidos l lista
li t de
d valores.
l
Selección de filas. La cláusula WHERE
Test de pertenencia (in)
SELECT num, nombre, oficina
FROM empleados
WHERE oficina IN (12,14,16) ;
Lista los empleados de las oficinas 12, 14 y 16

SELECT num, nombre


FROM empleados
WHERE (oficina = 12) OR (oficina = 14) OR (oficina
= 16) ;
Obtenemos lo mismo que en el ejemplo anterior.
Los paréntesis son opcionales.
Selección de filas. La cláusula WHERE
Test de valor nulo (is null)
Una condición de selección puede dar como
resultado el valor verdadero TRUE, falso FALSE o
nulo NULL.
Cuando una columna que interviene en una
condición de selección contiene el valor nulo,, el
resultado de la condición no es verdadero ni falso,
sino nulo, sea cual sea el test que se haya
utilizado.
Selección de filas. La cláusula WHERE
Test de valor nulo (is null)
SELECT numoficina, localidad
FROM oficinas
WHERE dir IS NULL ;
Lista las oficinas que no tienen director

SELECT num, nombre


FROM empleados
WHERE oficina IS NOT NULL ;

Lista los empleados asignados a alguna


oficina (los que tienen un valor en la
columna
l oficina).
fi i )
Selección de filas. La cláusula WHERE
T t de
Test d correspondencia
d i con patrón
t ó (like)
(lik )

Se utiliza cuando queremos utilizar


caracteres comodines para formar el valor
con el comparar.

Los comodines más usados son los siguientes:


% Coincidencia
C i id i con cualquier
l i número
ú d
de caracteres, iincluso
l ninguno
i
_ Coincidencia con un único carácter
Selección de filas. La cláusula WHERE
Test de correspondencia (like)
SELECT num, nombre
FROM empleados
WHERE nombre LIKE 'Luís%’;
Lista los empleados cuyo nombre empiece por
Luís ((Luís seguido
g de cero o más caracteres).
)
SELECT num, nombre
FROM empleados
WHERE nombre LIKE ‘%Luís%’;

Lista los empleados cuyo nombre contiene Luís,


en este caso también saldría los empleados José
Luís (cero o más caracteres seguidos de LUIS y
seguido de cero o más caracteres).
Selección de filas. La cláusula WHERE
Test de correspondencia (like)
SELECT num, nombre
FROM empleados
WHERE nombre LIKE ‘__a%'
Lista los empleados cuyo nombre contenga
una a como tercera letra (dos caracteres
caracteres, la
letra a, y cero o más caracteres.

También se puede usar la cláusula


REGEXP en vez de LIKE

Se ampliará el tema al ver las expresiones regulares


Selección de filas. La cláusula WHERE
Test de correspondencia (like)
Símbolo Descripción
^ Coincidencia con principio de cadena
$ Coincidencia con final de cadena
. Coincidencia con cualquier carácter incluso avance o retorno de línea
a* Coincidencia con cualquier secuencia de cero o más caracteres
a+ Coincidencia con cualquier secuencia de uno o más caracteres
a?
? C i id
Coincidencia
i con ninguno
i od
de un carácter
á t
de|abc Coincidencia de cualquiera de las secuencias "de" o "abc"
(abc)* Coincidencia de ninguna o más instancias de la secuencia "abc".
{1} La notación {n} o {m,n} proporciona una forma más general para escribir
{2,3} expresiones regulares que coincidan con muchas apariciones del átomo o trozo
previo del patrón. m
y n son enteros.

Hay muchas más, ver Apéndice C(Expresiones Regulares) del Curso_MySQL


Ejercicios
j Propuestos
p 1
1. Obtener una lista de todos los productos
i di
indicando
d para cadad uno su idf
idfab,
b id
idproducto,
d t
descripción, precio y precio con I.G.I.C.
incluido (es el precio anterior aumentado en un
6%).
2. De cada producto queremos saber su
código,
g , fabricante,, descripción,
p , unidades en
stock, precio unitario y valor del inventario.
3. Listar de cada empleado su nombre
3 nombre, nº
de días que lleva trabajando en la empresa
y su año de nacimiento (suponiendo que
este año ya ha cumplido años). Curdate()
Ejercicios
j Propuestos
p 2
4. Obtener las oficinas ordenadas por orden
alfabético
lf béti d de región
ió y d
dentro
t dde cada
d región

por ciudad, si hay más de una oficina en la
misma ciudad
ciudad, aparecerá primero la que
tenga el número de oficina mayor.
5. Obtener la lista de los clientes agrupados
por código
p g de representante
p asignado,
g ,
visualizar todas la columnas de la tabla.
6. Obtener los pedidos ordenados por fecha
6
de pedido.
Ejercicios
j Propuestos
p 3
7. Listar las cuatro líneas de productos más
caros.
8. Obtener las mismas columnas que en el
8
ejercicio 2 pero sacando únicamente las 5
líneas de pproductos de menor p
precio unitario.
9. Listar toda la información de los pedidos
d marzo.
de
10. Listar los números de los empleados
10
que tienen una oficina asignada
Ejercicios
j Propuestos
p 4
11. Listar los números de las oficinas que no
ti
tienen di
director.
t
12. Listar los datos de las oficinas de las
12
regiones del norte y del este (tienen que
aparecer
p p
primero las del norte y después
p las
del este).
13. Listar los empleados de nombre Ana.
14. Listar los productos cuyo idproducto
14
acabe en x.

También podría gustarte