LMD (Lenguaje de Manipulación de Datos)
Programación. Claúsula IN. Claúsula BETWEEN. Claúsula LIKE. Expresiones aritméticas. Funciones de columna.
Agregado: 31 de AGOSTO de 2003 (Por Michel Mosse) | Palabras: 8969 | Votar! | Sin Votos |
Sin comentarios | Agregar Comentario Categoría: Apuntes y Monografías > Computación > Varios >
BASES DE DATOS
2º Cuatrimestre
LMD (Lenguaje de Manipulación de Datos)
SELECT
SELECT [DISTINCT] <lista_columnas> | *
FROM <lista_tablas>
[WHERE <predicado>]
EJ: Visualizar todos los vuelos que tengan como origen
o destino Cáceres.
SELECT *
FROM VUELOS
WHERE ORIGEN='CACERES'
OR DESTINO='CACERES'
EJ: Visualizar todos los vuelos que tengan como origen
Madrid o Londres y como destino Londres o Madrid.
SELECT *
FROM VUELOS
WHERE (ORIGEN='MADRID'
AND DESTINO='LONDRES')
OR (ORIGEN='LONDRES'
AND DESTINO='MADRID')
Claúsula IN
Expresa la pertenencia del valor de una columna a un
determinado conjunto de valores.
EJ: Seleccionar aquellos vuelos que tengan como origen
Madrid, Barcelona o Sevilla.
SELECT *
FROM VUELOS
WHERE ORIGEN IN ('MADRID','BARCELONA','SEVILLA')
ó también
SELECT *
FROM VUELOS
WHERE ORIGEN='MADRID' OR ORIGEN='BARCELONA' OR
ORIGEN='SEVILLA'
EJ: Visualizar todos los vuelos existentes excepto
aquellos que llegan a Londres o a Copenhague.
SELECT *
FROM VUELOS
WHERE DESTINO NOT IN ('LONDRES','COPENHAGUE')
Claúsula BETWEEN
Sirve para establecer o expresar un rango de
valores. Obedece a la siguiente sintaxis:
<nombre_columna> BETWEEN valor1 AND valor2
El rango será [valor1, valor2], extremos incluidos.
EJ: Recuperar todos los vuelos que salgan entre las 6
y las 12 de la mañana.
SELECT *
FROM VUELOS
WHERE HORA_SALIDA BETWEEN '06.00.00'
AND '12.00.00'
ó también
SELECT *
FROM VUELOS
WHERE HORA_SALIDA >= '06.00.00'
AND HORA_SALIDA <= '12.00.00'
EJ: En la columna NUM_VUELO representaré los vuelos con
6 caracteres. Los dos primeros caracteres indicarán la compañía a la que
pertenece cada vuelo (IB®Iberia, BA®British Airways), los
cuatro caracteres siguientes corresponderán al número de vuelo. Bajo estas
condiciones recupérense todos los vuelos que no pertenecen a IBERIA.
SELECT *
FROM VUELOS
WHERE NUM_VUELO NOT BETWEEN 'IB0000'
AND 'IB9999'
Claúsula LIKE
Sirve para especificar, con la ayuda de metasímbolos,
cadenas de caracteres que comparten ciertos caracteres en común. Los
metasímbolos que serán utilizados son:
% Equivale a una cadena de caracteres de longitud
comprendida entre 0 y n.
'AB%' AB, ABCDE, AB 497
_ Equivale a un único carácter
'A_B' A B, A4B, AJB
EJ: Recuperar todos los vuelos pertenecientes a la
compañía IBERIA.
SELECT *
FROM VUELOS
WHERE NUM_VUELOS LIKE 'IB%'
ó también
SELECT *
FROM VUELOS
WHERE NUM_VUELOS LIKE 'IB_ _ _ _'
Expresiones aritméticas
+, -, *, /
Pueden ser utilizadas tanto después de SELECT como
después de WHERE. En el primer caso trabajarían sobre columnas y en el segundo
sobre filas.
EJ: Visualizar la longitud y la envergadura de todos los
aviones, expresando las magnitudes en pies (en la base de datos está almacenado
en metros, para pasar 1 metro a pies se ha de multiplicar por 3.28), y la
velocidad de crucero en mph(está en Km/h, habrá que dividir por 1.6).
SELECT LONGITUD*3.28, ENVERGADURA*3.28,
VELO_CRUC/1.6
FROM AVIONES
┌──┐ ┌──┐ ┌──┐
Etiquetas ® └──┘ └──┘ └──┘
--------
-------- -------
-------- -------- -------
-------- ------- ------
En DB/2 de IBM las etiquetas toman los nombres de
las columnas (col1, col2, col3)
En SQL-SERVER las etiquetas quedarían así
(LONGITUD*3.28, ENVERGADURA*3.28, VELO_CRUC/1.6)
EJ: Relación entre la longitud y la envergadura de todos
los aviones.
SELECT LONGITUD/ENVERGADURA
FROM AVIONES
EJ: Seleccionar aquellos aviones cuya longitud supere a
su envergadura en más de un 10%.
SELECT *
FROM AVIONES
WHERE LONGITUD > ENVERGADURA*1.10
Funciones de columna
Son funciones que operan con todas las filas que
cumplen la condición expuesta en la claúsula WHERE. Su resultado es un único
valor. Sintaxis:
1º) <f_columna> ([DISTINCT]
<nombre_columna>)
2º) <f_columna> (<expresión>), donde
<expresión> es una expresión aritmética en la cual debe participar, al
menos, una columna.
3º) COUNT(*)
Funciones
<f_columna>:
MIN: Calcula el valor mínimo de una columna.
MAX: Calcula el valor máximo de una columna.
AVG: Calcula la media aritmética de una columna.
SUM: Calcula la suma de todos los campos de una columna.
COUNT: Cuenta el nº de filas de una columna.
COUNT(A)=COUNT(B)
COUNT(A)=4, COUNT(B)=4
El COUNT de dos columnas de una misma tabla es
igual. COUNT(*) sirve para obtener el nº de filas.
EJ: Seleccionar los valores mínimo y máximo de la
columna que almacena las velocidades de crucero.
SELECT MIN(VELO_CRUC), MAX(VELO_CRUC)
FROM AVIONES
EJ: Averiguar a que hora parte el primer vuelo hacia
Madrid.
SELECT MIN (HORA_SALIDA)
FROM VUELOS
WHERE DESTINO='MADRID'
Regla que cumplen las
funciones de columna
La función de columna sólo podrá especificarse
detrás de la particula SELECT o en la claúsula HAVING, pero nunca dentro de la
claúsula WHERE.
EJ: Se desea saber cuál es el vuelo que tiene la mínima
hora de salida.
SELECT *
FROM VUELOS
WHERE HORA_SALIDA=(SELECT MIN(HORA_SALIDA)
FROM VUELOS)
Claúsula GROUP BY-HAVING
Sirve para dividir una tabla en grupos de filas que
comparten características comunes. La sintaxis es:
SELECT <lista_columnas>,
<funciones_de_columna>
FROM <lista_tablas>
[WHERE <predicado>]
[GROUP BY <lista_columnas>]
[HAVING <predicado>]
EJ: Efectúese una SELECT que visualice el mínimo valor
de hora de salida para cada uno de los diferentes destinos.
SELECT DISTINCT DESTINO
FROM VUELOS
SELECT MIN(HORA_SALIDA)
FROM VUELOS
WHERE DESTINO LIKE '%'
A continuación se muestra un ejemplo de lo que no se
debe hacer:
SELECT MIN(HORA_SALIDA)
FROM VUELOS
WHERE DESTINO IN (SELECT DISTINCT DESTINO
FROM VUELOS)
Sentencia GROUP BY:
SELECT DESTINO, MIN(HORA_SALIDA)
FROM VUELOS
GROUP BY DESTINO
Tabla VUELOS ® Tabla auxiliar ® Tabla x 'MADRID'
WHERE
GROUP BY DESTINO Tabla y 'BARCELONA'
Tabla z 'SEVILLA'
<f_columna>
GROUP BY crea una serie de subtablas compuestas por
filas con el mismo valor para la columna de agrupamiento (en este ejemplo la
columna DESTINO). Se aplicarán a continuación funciones de columna sobre cada
subtabla de forma independiente.
MADRID, x
BARCELONA, y
SEVILLA, z
No se puede poner en GROUP BY un campo que no se
haya incluido en la sentencia SELECT.
EJ: Obtener el origen del vuelo para cada uno de los
vuelos que tienen la mínima hora de salida para cada uno de los destinos.
EJ: Obtener el número de vuelos que existen para cada
uno de los orígenes.
SELECT ORIGEN, COUNT(*)
FROM VUELOS
GROUP BY ORIGEN
Claúsula HAVING
Permite elegir aquellos grupos que se quieren
visualizar.
EJ: Visualizar los grupos que tienen para cada uno de
los orígenes la mínima hora de salida siendo anterior a las 12 horas.
SELECT ORIGEN, MIN(HORA_SALIDA)
FROM VUELOS
GROUP BY ORIGEN
HAVING MIN(HORA_SALIDA) < '12.00'
HAVING no interferirá en la agrupación por filas de
GROUP BY.
EJ: Se desea seleccionar la hora de salida más temprana
para cada origen y destino.
SELECT ORIGEN, DESTINO, MIN(HORA_SALIDA)
FROM VUELOS
GROUP BY ORIGEN, DESTINO
EJ: Visualizar los orígenes que tengan más de dos
vuelos.
SELECT ORIGEN
FROM VUELOS
GROUP BY ORIGEN
HAVING COUNT(*) > 2
EJ: Visualizar los vuelos de IBERIA que tengan más de
150 plazas libres.
SELECT NUM_VUELO, SUM(PLAZAS_LIBRES)
FROM RESERVAS
GROUP BY NUM_VUELO
HAVING NUM_VUELO LIKE 'IB%'
AND SUM(PLAZAS_LIBRES)>150
ó también
SELECT NUM_VUELO, SUM(PLAZAS_LIBRES)
FROM RESREVAS
WHERE NUM_VUELO LIKE 'IB%'
GROUP BY NUM_VUELO
HAVING NUM_VUELO 'IB%'
AND SUM(PLAZAS_LIBRES)>150
TRATAMIENTO DE NULOS
Operaciones aritméticas
Cualquier operación aritmética sobre un campo nulo
nos devolverá como resultado un valor nulo.
Tomemos como ejemplo la siguiente tabla:
NULOS
|
COL_A
|
COL_B
|
|
15
|
10
|
|
35
|
35
|
|
140
|
NULL
|
|
| |