Tema 4 BD
Tema 4 BD
Tema 4 BD
Realizacin de consultas.
Caso prctico
Una de las cosas ms importantes que ofrece una
base de datos es la opcin de poder consultar los
datos que guarda, por eso Ana y Juan van a intentar
sacar el mximo partido a las tablas que han
guardado y sobre ellas van a obtener toda aquella
informacin que su cliente les ha solicitado. Sabemos
que dependiendo de quin consulte la base de datos,
se debe ofrecer un tipo de informacin u otra. Es por
esto que deben crear distintas consultas y vistas.
Ana sabe que existen muchos tipos de operadores con los que puede "jugar" para
crear consultas y tambin tiene la posibilidad de crear campos nuevos donde podrn
hacer clculos e incluso trabajar con varias tablas relacionadas a la vez.
1.- Introduccin.
Caso prctico
Juan quiere comenzar con consultas bsicas a los datos, cosas bastante concretas y
sencillas de manera que se obtenga informacin relevante de cada una de las
tablas. Tambin quieren realizar algunos clculos como conocer el salario medio de
cada empleado, o el mayor salario de cada departamento, o saber cunto tiempo
lleva cada empleado en la empresa.
lleva cada empleado en la empresa.
En unidades anteriores has aprendido que SQL es un conjunto de sentencias u rdenes que se
necesitan para acceder a los datos. Este lenguaje es utilizado por la mayora de las aplicaciones
donde se trabaja con datos para acceder a ellos. Es decir, es la va de comunicacin entre el
usuario y la base de datos.
SQL naci a partir de la publicacin "A relational model of data for large shared data banks" de
Edgar Frank
Codd. IBM aprovech el modelo que planteaba Codd para desarrollar un lenguaje acorde con el
recin nacido modelo relacional, a este primer lenguaje se le llam SEQUEL (Structured English
QUEry Language). Con el tiempo SEQUEL se convirti en SQL (Structured Query Language).
En 1979, la empresa Relational Software sac al mercado la primera implementacin comercial
de SQL. Esa empresa es la que hoy conocemos como Oracle.
Hoy en da todas las bases de datos comerciales cumplen con este estndar, eso s, cada
fabricante aade sus mejoras al lenguaje SQL.
La siguiente fase ser manipular los datos, es decir, trabajar con sentencias DML (en espaol
Lenguaje de Manipulacin de Datos). Este conjunto de sentencias est orientado a consultas y
manejo de datos de los objetos creados. Bsicamente consta de cuatro sentencias: SELECT,
INSERT, DELETE y UPDATE. En esta unidad nos centraremos en una de ellas, que es la
sentencia para consultas: SELECT.
Las sentencias SQL que se vern a continuacin pueden ser ejecutadas desde el entorno web
Application Express de Oracle utilizando el botn SQL en la pgina de inicio, y desplegando su
lista desplegable elegir Comandos SQL > Introducir Comando.
Tambin se pueden indicar las sentencias SQL desde el entorno de SQL*Plus que ofrece Oracle
y que puedes encontrar en Inicio > Todos los programas > Base de Datos Oracle Express
Edition > Ejecutar Lnea de Comandos SQL.
Si optas por abrir esa aplicacin (Ejecutar Lnea de
Comandos SQL), el primer paso que debe realizarse para
manipular los datos de una determinada tabla, es
conectarse utilizando un nombre de usuario con los
permisos necesarios para hacer ese tipo de operaciones a
la tabla deseada. Utiliza para ello la orden CONNECT
seguida del nombre de usuario. Posteriormente, solicitar la
contrasea correspondiente a dicho usuario.
Para ejecutar cualquiera de las sentencias SQL que aprenders en los siguientes puntos,
simplemente debes escribirla completa y pulsar Intro para que se inicie su ejecucin.
Autoevaluacin
Con qu sentencias se denen las estructuras donde agrupar la informacin, es
decir, las tablas?
DML.
DDL.
DCL.
Caso prctico
Ana est trabajando con la tabla Partidas, de aqu
quiere ver qu informacin es la ms importante, para
as crear las consultas ms sencillas pero a la vez
ms frecuentes. Sabe que con SQL y utilizando el
comando SELECT puede sacar provecho a los datos
contenidos en una tabla.
Cmo podemos seleccionar los datos que nos interesen dentro de una base de datos? Para
recuperar o seleccionar los datos, de una o varias tablas puedes valerte del lenguaje SQL, para
ello utilizars la sentencia SELECT, que consta de cuatro partes bsicas:
SELECT [ALL | DISTINCT] columna1, columna2, ... FROM tabla1, tabla2, ... WHERE condicin
Recomendacin
Las clusulas ALL y DISTINCT son opcionales.
Autoevaluacin
Qu se debe indicar a continuacin de la clusula FROM?
Las columnas que queremos seleccionar.
Los criterios con los que ltro la seleccin.
Las tablas de donde se van a extraer los datos.
La ordenacin ascendente.
Si queremos incluir todas las columnas de una tabla podemos utilizar el comodn asterisco
("*"). Quedara as: SELECT * FROM NombreTabla;
Tambin podemos ponerle alias a los nombres de las columnas. Cuando se consulta una
base de datos, los nombres de las columnas se usan como cabeceras de presentacin. Si
ste resulta largo, corto o poco descriptivo, podemos usar un alias. Para ello a
continuacin del nombre de la columna ponemos entre comillas dobles el alias que demos
a esa columna. Veamos un ejemplo:
Para saber ms
Si quieres conocer algo ms sobre esta sentencia y ver algunos ejemplos del uso de
SELECT aqu tienes el siguiente enlace:
La clusula SELECT.
Ejercicio resuelto
Si quieres practicar algunos ejercicios puedes ayudar a Ana con algunas consultas.
Para ello te facilitamos las tablas que ha creado recientemente para la base de datos
con la que actualmente estn trabajando. En el siguiente documento tienes los datos
que te permitirn realizar algunos ejemplos de esta unidad. Recuerda que los
ejemplos irn apareciendo bajo el epgrafe Ejercicio Resuelto.
Tambin tienes algunos datos incluidos para probar las distintas consultas que
crees. A partir de ahora nos referiremos a estos datos como tablas de la empresa
JuegosCA.
Por tanto lo primero que tienes que hacer es abrir el editor de SQL, para ello debes ir
a Base de Datos de Oracle 10g Express y a continuacin pulsar en Ejecutar Lnea
de Comandos SQL. Aparecer una pantalla donde tienes que realizar los siguientes
pasos:
En este ejercicio te pedimos que ejecutes el archivo y crees las tablas necesarias
para poder realizar ejercicios posteriores.
Al realizar la consulta o seleccin has visto que puedes elegir las columnas
que necesites, pero de dnde extraigo la informacin?
Por tanto, en la clusula FROM se denen los nombres de las tablas de las
que proceden las columnas.
Tambin puedes aadir el nombre del usuario que es propietario de esas tablas, indicndolo de
la siguiente manera:
USUARIO.TABLA
de este modo podemos distinguir entre las tablas de un usuario y otro (ya que esas tablas
pueden tener el mismo nombre).
Tambin puedes asociar un alias a las tablas para abreviar, en este caso no es necesario que lo
encierres entre comillas.
Pongamos un ejemplo:
Si en nuestra tabla USUARIOS, necesitramos un listado de los usuarios que son mujeres,
bastara con crear la siguiente consulta:
Ms adelante te mostraremos los operadores con los que podrs crear condiciones de diverso
tipo.
Para saber ms
Aqu te adelantamos los operadores para que vayas conocindolos. Con ellos
trabajars cuando hayas adquirido algunos conocimientos ms:
Operadores SQL
En la consulta del ejemplo anterior hemos obtenido una lista de nombres y apellidos de las
usuarias de nuestro juego. Sera conveniente que aparecieran ordenadas por apellidos, ya que
siempre quedar ms profesional adems de ms prctico. De este modo, si necesitramos
localizar un registro concreto la bsqueda sera ms rpida. Cmo lo haremos? Para ello
usaremos la clusula ORDER BY.
Debes saber que es posible ordenar por ms de una columna. Es ms, puedes ordenar no solo
por columnas sino a travs de una expresin creada con columnas, una constante (aunque no
tendra mucho sentido) o funciones SQL.
Puedes colocar el nmero de orden del campo por el que quieres que se ordene en lugar de su
nombre, es decir, referenciar a los campos por su posicin en la lista de seleccin. Por ejemplo,
si queremos el resultado del ejemplo anterior ordenado por localidad:
Se puede utilizar cualquier tipo de datos para ordenar? No todos los tipos de campos te
servirn para ordenar, nicamente aquellos de tipo carcter, nmero o fecha.
Autoevaluacin
Relaciona cada clusula de la sentencia SELECT con la informacin que debe
seguirle:
Ejercicio de relacionar Clusula Relacin Informacin que le sigue.
WHERE 1. Ordenacin.
ORDER BY 2. Columnas.
FROM 3. Tablas.
SELECT 4. Condiciones.
Ejercicio resuelto
Utilizando las tablas y datos de la empresa JuegosCA descargados anteriormente,
vamos a realizar una consulta donde obtengamos de la tabla ESTUDIOS, DNI de los
empleados ordenados por Universidad descendente y ao de manera ascendente.
3.- Operadores.
Caso prctico
En el proyecto en el que actualmente trabajan Ana y Juan,
tendrn que realizar consultas que cumplan unos criterios
concretos, por ejemplo, obtener el nmero de jugadores
que tienen cierto nmero de crditos o aquellos que son
mujeres e incluso conocer el nmero de usuarios que son
de una provincia y adems sean hombres.
Veamos que en la clusula WHERE podamos incluir expresiones para ltrar el conjunto de
datos que queramos obtener. Para crear esas expresiones necesitas utilizar distintos
operadores de modo que puedas comparar, utilizar la lgica o elegir en funcin de una suma,
resta, etc.
Los operadores son smbolos que permiten realizar operaciones matemticas, concatenar
cadenas o hacer comparaciones.
1. Relacionales o de comparacin.
2. Aritmticos.
3. De concatenacin.
4. Lgicos.
Para saber ms
Si quieres conocer un poco ms sobre los operadores visita este enlace:
Operadores.
< <
NOT
Fuera del rango.
BETWEEN
Se utiliza sobre todo con textos y permite obtener columnas cuyo valor en un
LIKE campo cumpla una condicin textual. Utiliza una cadena que puede contener
'_abc%' los smbolos "%" que sustituye a un conjunto de caracteres o "_" que sustituye
a un carcter.
Si queremos obtener aquellos empleados cuyo salario es superior a 1000 podemos crear la
siguiente consulta:
SELECT nombre FROM EMPLEADOS WHERE SALARIO > 1000; Ahora queremos
aquellos empleados cuyo apellido comienza por R: SELECT nombre FROM EMPLEADOS
WHERE APELLIDO1 LIKE 'R %';
Ejercicio resuelto
Utilizando las tablas y datos de la empresa JuegosCA descargados anteriormente,
vamos a realizar una consulta donde obtengamos las universidades de Sevilla o
Cdiz.
Para saber ms
Los operadores que se utilizan en MySQL puedes verlos en el siguiente enlace:
Aprendimos que los operadores son smbolos que permiten realizar distintos tipos de
operaciones. Los operadores aritmticos permiten realizar clculos con valores numricos. Son
los siguientes:
- Resta
* Multiplicacin
/ Divisin
Utilizando expresiones con operadores es posible obtener salidas en
las cuales una columna sea el resultado de un clculo y no un campo
de una tabla.
Cuando una expresin aritmtica se calcula sobre valores NULL, el resultado es el propio valor
NULL.
Para concatenar cadenas de caracteres existe el operador de concatenacin (" | | "). Oracle
puede convertir automticamente valores numricos a cadenas para una concatenacin.
Si queremos dejar un espacio entre un apellido y otro, debemos concatenar tambin el espacio
en blanco de la siguiente manera:
Para saber ms
Los operadores que se utilizan en MySQL puedes verlos en el siguiente enlace:
Habr ocasiones en las que tengas que evaluar ms de una expresin y necesites vericar que
se cumple una nica condicin, otras veces comprobar si se cumple una u otra o ninguna de
ellas. Para poder hacer esto utilizaremos los operadores lgicos.
Ejercicio resuelto
Utilizando las tablas y datos de la empresa JuegosCA descargados anteriormente,
vamos a realizar una consulta donde obtengamos todos nombres de trabajos menos
el de contable.
Autoevaluacin
En la siguiente consulta:
Qu estaramos seleccionando?
Aquellos jugadores cuyos apellidos contienen la letra A y la S.
Aquellos jugadores cuyos apellidos comienzan por la letra A y contienen la letra S.
Aquellos jugadores cuyos apellidos no contienen ni la letra A ni la S.
Todos los apellidos de todos los jugadores menos los que su apellido comienza por
S.
Para saber ms
Tambin tenemos orden de precedencia en MySQL:
Precedencia en MySQL.
Lo que har ser practicar a partir de una tabla que tenga bastantes campos
numricos de manera que pueda manipular la informacin sin modicar nada.
En clase trabajaban con la tabla ARTICULOS que tena, entre otros, los campos
Precio y Cantidad. A partir de ellos podra realizar consultas calculadas para obtener
el precio con IVA incluido, un descuento sobre el precio e incluso aumentar ese
precio en un porcentaje concreto. Seguro que se pone al da rpidamente.
En algunas ocasiones es interesante realizar operaciones con algunos campos para obtener
informacin derivada de stos. Si tuviramos un campo Precio, podra interesarnos calcular el
precio incluyendo el IVA o si tuviramos los campos Sueldo y Paga Extra, podramos necesitar
obtener la suma de los dos campos. Estos son dos ejemplos simples pero podemos construir
expresiones mucho ms complejas. Para ello haremos uso de la creacin de campos
calculados.
Los operadores aritmticos se pueden utilizar para hacer clculos en las consultas.
Con esta consulta hemos creado un campo que tendr como nombre la expresin utilizada.
Podemos ponerle un alias a la columna creada aadindolo detrs de la expresin junto con la
palabra AS. En nuestro ejemplo quedara de la siguiente forma:
5.- Funciones.
Caso prctico
Juan le ha pedido a Ana que calcule la edad actual de los
usuarios que tienen registrados en la base de datos pues
sera interesante realizar estadsticas mensuales sobre los
grupos de edad que acceden al sistema y en funcin de ello
obtener algunos resultados interesantes para la empresa.
Para realizar el clculo de la edad tendramos que echar
mano a funciones que nos ayuden con los clculos. Existen
funciones que nos facilitarn la tarea y nos ayudarn a
obtener informacin que de otro modo resultara
complicado.
Has pensado en todas las operaciones que puedes realizar con los datos que guardas en una
base de datos? Seguro que son muchsimas. Pues bien, en casi todos los Sistemas Gestores
de Base de Datos existen funciones ya creadas que facilitan la creacin de consultas ms
complejas. Dichas funciones varan segn el SGBD, veremos aqu las que utiliza Oracle.
Las funciones son realmente operaciones que se realizan sobre los datos y que realizan un
determinado clculo. Para ello necesitan unos datos de entrada llamados parmetros o
argumentos y en funcin de stos, se realizar el clculo de la funcin que se est utilizando.
Normalmente los parmetros se especican entre parntesis.
Las funciones se pueden incluir en las clusulas SELECT, WHERE y ORDER BY.
numricas,
de cadena de caracteres,
de manejo de fechas,
de conversin,
otras
Oracle proporciona una tabla con la que podemos hacer pruebas, esta tabla se llama
Dual y contiene un nico campo llamado DUMMY y una sola la.
Podremos utilizar la tabla Dual en algunos de los ejemplos que vamos a ver en los siguientes
apartados.
ABS(n)
Calcula el valor absoluto de un nmero n.
Ejemplo:
EXP(n)
Calcula n , es decir, el exponente en base e del nmero n.
Ejemplo:
CEIL(n)
Calcula el valor entero inmediatamente superior o igual al argumento n.
Ejemplo:
FLOOR(n)
Calcula el valor entero inmediatamente inferior o igual al parmetro n.
Ejemplo:
MOD(m,n)
Calcula el resto resultante de dividir m entre n.
Ejemplo:
POWER(valor, exponente)
Eleva el valor al exponente indicado.
Ejemplo:
ROUND(n, decimales)
Redondea el nmero n al siguiente nmero con el nmero de decimales que se indican.
Ejemplo:
SQRT(n)
Calcula la raz cuadrada de n.
Ejemplo:
SELECT SQRT(25) FROM DUAL; --Resultado: 5
TRUNC(m,n)
Trunca un nmero a la cantidad de decimales especicada por el segundo argumento. Si
se omite el segundo argumento, se truncan todos los decimales. Si "n" es negativo, el
nmero es truncado desde la parte entera.
Ejemplos:
SIGN(n)
Si el argumento "n"es un valor positivo, retorna 1, si es negativo, devuelve -1 y 0 si es 0.
Para saber ms
Aqu encontrars las funciones que has visto y algunas ms.
Ms funciones numricas.
CHR(n)
Devuelve el carcter cuyo valor codicado es n.
Ejemplo:
ASCII(n)
Devuelve el valor ASCII de n.
Ejemplo:
CONCAT(cad1, cad2)
Devuelve las dos cadenas unidas. Es equivalente al operador ||
Ejemplo:
LOWER(cad)
Devuelve la cadena cad con todos sus caracteres en minsculas.
Ejemplo:
SELECT LOWER('En MInsculAS') FROM DUAL; --Resultado: en minsculas
UPPER(cad)
Devuelve la cadena cad con todos sus caracteres en maysculas.
Ejemplo:
INITCAP(cad)
Devuelve la cadena cad con su primer carcter en mayscula.
Ejemplo:
LPAD(cad1, n, cad2)
Devuelve cad1 con longitud n, ajustada a la derecha, rellenando por la izquierda con cad2.
Ejemplo:
RPAD(cad1, n, cad2)
Devuelve cad1 con longitud n, ajustada a la izquierda, rellenando por la derecha con cad2.
Ejemplo:
Ejemplo:
SUBSTR(cad, m, n)
Devuelve la cadena cad compuesta por n caracteres a partir de la posicin m.
Ejemplo:
LENGTH(cad)
Devuelve la longitud de cad.
Ejemplo:
TRIM(cad)
Elimina los espacios en blanco a la izquierda y la derecha de cad y los espacios dobles del
interior.
Ejemplo:
SELECT TRIM(' Hola de nuevo ') FROM DUAL; --Resultado: Hola de nuevo
LTRIM(cad)
Elimina los espacios a la izquierda que posea cad.
Ejemplo:
RTRIM(cad)
Elimina los espacios a la derecha que posea cad.
Ejemplo:
Ejemplo:
Autoevaluacin
En la siguiente consulta: SELECT LENGTH("Adis") FROM DUAL; qu
obtendramos?
5
4
6
Nos devolvera un error.
En los SGBD se utilizan mucho las fechas. Oracle tiene dos tipos
de datos para manejar fechas, son DATE y TIMESTAMP.
Le podemos sumar nmeros y esto se entiende como sumarles das, si ese nmero tiene
decimales se suman das, horas, minutos y segundos.
La diferencia entre dos fechas tambin nos dar un nmero de das.
SYSDATE Devuelve la fecha y hora actuales. Ejemplo: SELECT SYSDATE FROM DUAL;
--Resultado: 26/07/11
EXTRACT(valor FROM fecha) Extrae un valor de una fecha concreta. El valor puede ser
day, month, year, hours, etc. Ejemplo: SELECT EXTRACT(MONTH FROM SYSDATE)
FROM DUAL; --Resultado: 7
En Oracle: Los operadores aritmticos "+" (ms) y "-" (menos) pueden emplearse para las
fechas. Por ejemplo:
SELECT SYSDATE 5;
Se pueden emplear estas funciones enviando como argumento el nombre de un campo de tipo
fecha.
Autoevaluacin
Cules de estas armaciones sobre funciones de manejo de fechas son ciertas?
Existen dos tipos de fechas de datos con las que podemos trabajar, DATE y
TIMESTAMP.
Se puede poner como argumento el nombre de un campo de cualquier tipo.
Le podemos sumar o restar nmeros, lo cual se entiende como sumarle o restarle
das.
La diferencia entre dos fechas nos dar un nmero de das.
0 Visualiza ceros por la izquierda hasta completar la longitud del formato especicado.
D Da de la semana del 1 al 7
Q Semestre
WW Semana del ao
AM Indicador a.m.
PM Indicador p.m.
HH12 Hora de 1 a 12
HH24 Hora de 0 a 23
MI Minutos de 0 a 59
Por tanto, es habitual encontrarnos con estos valores y es entonces cuando aparece la
necesidad de poder hacer algo con ellos. Las funciones con nulos nos permitirn hacer algo en
caso de que aparezca un valor nulo.
NVL(valor, expr1)
Si valor es NULL, entonces devuelve expr1. Ten en cuenta que expr1 debe ser del mismo
tipo que valor.
Y no habr alguna funcin que nos permita evaluar expresiones? La respuesta es armativa y
esa funcin se llama DECODE.
Si en la tabla EMPLEADOS queremos un listado de sus direcciones, podemos pedir que cuando
una direccin no exista, aparezca el texto No tiene direccin, para ello podemos utilizar la
siguiente consulta:
Obtendremos:
C/Sol, 1
Autoevaluacin
Qu funcin convierte un nmero o fecha a cadena de caracteres?
TO_DATE.
TO_CHAR.
DECODE.
TO_NUMBER.
Seguro que alguna vez has necesitado realizar clculos sobre un campo para obtener algn
resultado global, por ejemplo, si tenemos una columna donde estamos guardando las notas que
obtienen unos alumnos o alumnas en Matemticas, podramos estar interesados en saber cual
es la nota mxima que han obtenido o la nota media.
La sentencia SELECT nos va a permitir obtener resmenes de los datos de modo vertical. Para
ello consta de una serie de clusulas especcas (GROUP BY, HAVING) y tenemos tambin
unas funciones llamadas de agrupamiento o de agregado que son las que nos dirn qu
clculos queremos realizar sobre los datos (sobre la columna).
Hasta ahora las consultas que hemos visto daban como resultado un subconjunto de las de la
tabla de la que extraamos la informacin. Sin embargo, este tipo de consultas que vamos a ver
no corresponde con ningn valor de la tabla sino un total calculado sobre los datos de la tabla.
Esto har que las consultas de resumen tengan limitaciones que iremos viendo.
Las funciones que podemos utilizar se llaman de agrupamiento (de agregado). stas toman un
grupo de datos (una columna) y producen un nico dato que resume el grupo. Por ejemplo, la
funcin SUM() acepta una columna de datos numricos y devuelve la suma de estos.
Todas las funciones de agregado tienen una estructura muy parecida: FUNCIN ([ALL|
DISTINCT] Expresin) y debemos tener en cuenta que:
La palabra ALL indica que se tienen que tomar todos los valores de la columna. Es el valor
por defecto.
La palabra DISTINCT indica que se considerarn todas las repeticiones del mismo valor
como uno solo (considera valores distintos).
El grupo de valores sobre el que acta la funcin lo determina el resultado de la expresin
que ser el nombre de una columna o una expresin basada en una o varias columnas.
Por tanto, en la expresin nunca puede aparecer ni una funcin de agregado ni una
subconsulta.
Todas las funciones se aplican a las las del origen de datos una vez ejecutada la clusula
WHERE (si la tuviramos).
Todas las funciones (excepto COUNT) ignoran los valores NULL.
Podemos encontrar una funcin de agrupamiento dentro de una lista de seleccin en
cualquier sitio donde pudiera aparecer el nombre de una columna. Es por eso que puede
formar parte de una expresin pero no se pueden anidar funciones de este tipo.
No se pueden mezclar funciones de columna con nombres de columna ordinarios, aunque
hay excepciones que veremos ms adelante.
Para saber ms
Puedes acceder a este enlace si quieres conocer ms sobre este tipo de consultas.
Consultas de resumen.
La funcin SUM:
SUM([ALL|DISTINCT] expresin)
Devuelve la suma de los valores de la expresin.
Slo puede utilizarse con columnas cuyo tipo de dato sea nmero. El resultado ser
del mismo tipo aunque puede tener una precisin mayor.
Por ejemplo,
SELECT SUM( credito) FROM Usuarios;
La funcin COUNT:
COUNT([ALL|DISTINCT] expresin)
Cuenta los elementos de un campo. Expresin contiene el nombre del campo que
deseamos contar. Los operandos de expresin pueden incluir el nombre del campo,
una constante o una funcin.
Puede contar cualquier tipo de datos incluido texto.
COUNT simplemente cuenta el nmero de registros sin tener en cuenta qu valores
se almacenan.
La funcin COUNT no cuenta los registros que tienen campos NULL a menos que
expresin sea el carcter comodn asterisco (*).
Si utilizamos COUNT(*), calcularemos el total de las, incluyendo aquellas que
contienen valores NULL.
Por ejemplo,
SELECT COUNT(nombre) FROM Usuarios;
SELECT COUNT(*) FROM Usuarios;
Ejercicio resuelto
Utilizando las tablas y datos de la empresa JuegosCA descargados anteriormente,
vamos a realizar una consulta donde contemos el nmero de empleados que son
mujeres.
Funcin MIN:
MIN ([ALL| DISTINCT] expresin)
Devuelve el valor mnimo de la expresin sin considerar los
nulos (NULL).
En expresin podemos incluir el nombre de un campo de
una tabla, una constante o una funcin (pero no otras
funciones agregadas de SQL).
Un ejemplo sera:
SELECT MIN(credito) FROM Usuarios;
Funcin MAX:
MAX ([ALL| DISTINCT] expresin)
Devuelve el valor mximo de la expresin sin considerar los nulos (NULL).
En expresin podemos incluir el nombre de un campo de una tabla, una constante o
una funcin (pero no otras funciones agregadas de SQL).
Un ejemplo,
SELECT MAX (credito) FROM Usuarios;
Funcin AVG
AVG ([ALL| DISTINCT] expresin)
Devuelve el promedio de los valores de un grupo, para
ello se omiten los valores nulos (NULL).
El grupo de valores ser el que se obtenga como resultado de la expresin y sta
puede ser un nombre de columna o una expresin basada en una columna o varias
de la tabla.
Se aplica a campos tipo nmero y el tipo de dato del resultado puede variar segn
las necesidades del sistema para representar el valor.
Funcin VAR
VAR ([ALL| DISTINCT] expresin)
Devuelve la varianza estadstica de todos los valores de la expresin.
Como tipo de dato admite nicamente columnas numricas. Los valores nulos
(NULL) se omiten.
Funcin STDEV
STDEV ([ALL| DISTINCT] expresin)
Devuelve la desviacin tpica estadstica de todos los valores de la expresin.
Como tipo de dato admite nicamente columnas numricas. Los valores nulos
(NULL) se omiten.
Ejercicio resuelto
Utilizando las tablas y datos de la empresa JuegosCA descargados anteriormente,
vamos a realizar una consulta donde obtengamos la media del salario mnimo y
mximo de la tabla TRABAJOS.
Autoevaluacin
Cules de las siguientes armaciones sobre las consultas de resumen son ciertas?
Toman un grupo de datos de una columna.
Producen un nico dato que resume el grupo.
Utilizar una funcin de agregado en una consulta la convierte en consulta de
resumen.
Dan como resultado un subconjunto de las de la tabla.
Hasta aqu las consultas de resumen que hemos visto obtienen totales de
todas las las de un campo o una expresin calculada sobre uno o varios
campos. Lo que hemos obtenido ha sido una nica la con un nico dato.
En todos estos casos en lugar de una nica la de resultados necesitaremos una la por cada
actividad, cada cliente, etc.
En la clusula GROUP BY se colocan las columnas por las que vamos a agrupar. En
la clusula HAVING se especica la condicin que han de cumplir los grupos para
que se realice la consulta.
Es muy importante que te jes bien en el orden en el que se ejecutan las clusulas:
1. WHERE que ltra las las segn las condiciones que pongamos.
2. GROUP BY que crea una tabla de grupos nueva.
3. HAVING ltra los grupos.
4. ORDER BY que ordena o clasica la salida.
SELECT provincia, SUM(credito) FROM Usuarios GROUP BY provincia HAVING provincia = 'C
Autoevaluacin
Relaciona cada clusula con su orden de ejecucin:
Ejercicio de relacionar Clusula. Relacin. Funcin.
WHERE 1. PRIMERO
ORDER BY 2. SEGUNDO
HAVING 3. TERCERO
GROUP BY 4. CUARTO
Caso prctico
Hasta ahora Juan ha estado haciendo uso de
consultas a una nica tabla, pero eso limita la
obtencin de resultados. Si esas tablas estn
relacionadas Juan podr coger informacin de cada
una de ellas segn lo que le interese. En las tablas de
la empresa JuegosCA, tiene por un lado la tabla que
recoge los datos del empleado y por otra su historial
laboral. En esta ltima tabla, lo nico que recogemos
de los empleados es su cdigo. Como a Juan le
interesa obtener el historial laboral incluyendo nombres y apellidos de sus
empleados, debe utilizar la informacin que viene en ambas tablas.
Imagina tambin que en lugar de tener una tabla USUARIOS, dispusiramos de dos por
tenerlas en servidores distintos. Lo lgico es que en algn momento tendramos que unirlas.
Hasta ahora las consultas que hemos usado se referan a una sola tabla, pero tambin es
posible hacer consultas usando varias tablas en la misma sentencia SELECT. Esto permitir
realizar distintas operaciones como son:
La composicin interna.
La composicin externa.
En la versin SQL de 1999 se especica una nueva sintaxis para consultar varias tablas que
Oracle incorpora, as que tambin la veremos. La razn de esta nueva sintaxis era separar las
condiciones de asociacin respecto a las condiciones de seleccin de registros.
La sintaxis es la siguiente:
El producto cartesiano entre dos tablas da como resultado todas las combinaciones de todas las
las de esas dos tablas.
Se indica poniendo en la clusula FROM las tablas que queremos componer separadas por
comas. Y puedes obtener el producto cartesiano de las tablas que quieras.
Como lo que se obtiene son todas las posibles combinaciones de las, debes tener especial
cuidado con las tablas que combinas. Si tienes dos tablas de 10 las cada una, el resultado
tendr 10x10 las, a medida que aumentemos el nmero de las que contienen las tablas,
mayor ser el resultado nal, con lo cual se puede considerar que nos
mayor ser el resultado nal, con lo cual se puede considerar que nos
encontraremos con una operacin costosa.
Lo importante en las composiciones internas es emparejar los campos que han de tener valores
iguales.
Puedes combinar una tabla consigo misma pero debes poner de manera obligatoria un alias a
uno de los nombres de la tabla que vas a repetir.
Vamos a obtener el historial con los nombres de departamento, nombre y apellidos del
empleado de todos los departamentos:
Obtener un listado con el histrico laboral de un empleador cuyo DNI sea '12345'. En
dicho listado interesa conocer el nombre del puesto, as como el rango salarial.
Autoevaluacin
Si queremos incluir aquellas las que no tienen an correspondencia con la tabla
relacionada, tendremos que poner un signo ms entre parntesis:
Delante del nombre de la tabla en la clusula FROM.
Delante del nombre del campo que relaciona donde sabemos que hay valores
nulos.
Detrs del nombre del campo que relaciona donde sabemos que hay valores nulos.
Delante del nombre del campo que relaciona donde sabemos que no hay valores
nulos.
CROSS JOIN: crear un producto cartesiano de las las de ambas tablas por lo que podemos
olvidarnos de la clusula WHERE.
JOIN USING: las tablas pueden tener ms de un campo para relacionar y no siempre queremos
que se relacionen por todos los campos. Esta clusula permite establecer relaciones indicando
qu campo o campos comunes se quieren utilizar para ello.
JOIN ON: se utiliza para unir tablas en la que los nombres de columna no coinciden en ambas
tablas o se necesita establecer asociaciones ms complicadas.
OUTER JOIN: se puede eliminar el uso del signo (+) para composiciones externas utilizando un
OUTER JOIN, de este modo resultar ms fcil de entender.
LEFT OUTER JOIN: es una composicin externa izquierda, todas las las de la tabla de la
izquierda se devuelven, aunque no haya ninguna columna correspondiente en las tablas
combinadas.
RIGTH OUTER JOIN: es una composicin externa derecha, todas las las de la tabla de la
derecha se devuelven, aunque no haya ninguna columna correspondiente en las tablas
combinadas.
FULL OUTER JOIN: es una composicin externa en la que se devolvern todas las las de los
campos no relacionados de ambas tablas.
Podramos transformar algunas de las consultas con las que hemos estado trabajando:
Queramos obtener el historial laboral de los empleados incluyendo nombres y apellidos de los
empleados, la fecha en que entraron a trabajar y la fecha de n de trabajo si ya no continan en
la empresa. Es una consulta de composicin interna, luego utilizaremos JOIN ON:
Queramos tambin, obtener un listado con los nombres de los distintos departamentos y sus
jefes con sus datos personales. Ten en cuenta que deben aparecer todos los departamentos
aunque no tengan asignado ningn jefe. Aqu estamos ante una composicin externa, luego
podemos utilizar OUTER JOIN:
Para saber ms
En MySQL tambin se utilizan las composiciones, aqu puedes verlo:
Composiciones.
9.- Otras consultas multitablas: Unin,
Interseccin y diferencia de consultas.
Caso prctico
Ana le cuenta a Carlos que ya tienen terminado casi
todo el trabajo, pero que no le importa ensearle otros
tipos de consultas que no han necesitado utilizar en
esta ocasin pero que es conveniente conocer, se
reere al uso de uniones, intersecciones y diferencia
de consultas. Le explicar que es muy parecido a la
teora de conjuntos que recordar de haber terminado
hace poco sus estudios.
UNION: combina las las de un primer SELECT con las las de otro
SELECT, desapareciendo las las duplicadas.
INTERSECT: examina las las de dos SELECT y devolver aquellas que aparezcan en ambos
conjuntos. Las las duplicadas se eliminarn.
MINUS: devuelve aquellas las que estn en el primer SELECT pero no en el segundo. Las las
duplicadas del primer SELECT se reducirn a una antes de comenzar la comparacin.
Para estas tres operaciones es muy importante que utilices en los dos SELECT el mismo
nmero y tipo de columnas y en el mismo orden.
Estas operaciones se pueden combinar anidadas, pero es conveniente utilizar parntesis para
indicar que operacin quieres que se haga primero.
UNIN: Obtener los nombres y ciudades de todos los proveedores y clientes de Alemania.
DIFERENCIA: Ahora la academia necesita el nombre y domicilio solo de todos los alumnos que
cursan ingls (no quiere a los que ya cursan portugus pues va a enviar publicidad referente al
curso de portugus).
Autoevaluacin
Cules de las siguientes armaciones son correctas?
La unin combina las las de un primer SELECT con las las de otro SELECT,
desapareciendo las las duplicadas.
La diferencia devuelve aquellas las que estn en el primer SELECT pero no en el
segundo.
La interseccin examina las las de un SELECT y de otro y devolver aquellas que
aparezcan en ambos conjuntos.
En uniones, intersecciones y diferencias, los dos SELECT deben tener el mismo
nmero pero no tienen por qu tener el mismo tipo de columnas.
10.- Subconsultas.
Caso prctico
Es posible consultar dentro de otra consulta? pregunta Carlos.
El OPERADOR puede ser >, <, >=, <=, !=, = o IN. Las subconsultas que se utilizan con estos
operadores devuelven un nico valor, si la subconsulta devolviera ms de un valor devolvera un
error.
Como puedes ver en la sintaxis, las subconsultas deben ir entre parntesis y a la derecha del
operador.
Pongamos un ejemplo:
Obtendramos el nombre de los empleados y el sueldo de aquellos que cobran menos que Ana.
Los tipos de datos que devuelve la subconsulta y la columna con la que se compara ha de ser el
mismo.
SELECT nombre, sueldo FROM EMPLEADOS WHERE sueldo <= ALL (SELECT
sueldo FROM EMPLEADOS);
Autoevaluacin
Relaciona cada instruccin con su funcin:
Ejercicio de relacionar Instruccin. Relacin. Funcin.
ANY 1. Compara con cualquier la de la consulta.
OT
4. Comprueba si un valor no se encuentra en una subconsulta.
IN
Para saber ms
Quieres ms ejemplos con los que practicar?
Ejercicios SQL.
Para comenzar crearemos a partir de un usuario con privilegios el usuario ANA y pondremos
una contrasea. Adems, le daremos posibilidad de crear tablas.
Desconectamos a este usuario, ya que queremos crear las tablas e insertar los datos en el
nuevo usuario creado.
Vamos a utilizar la lnea de comandos de SQL para ejecutar el archivo descargado, para ello
seguiremos los pasos que aparecen a continuacin:
En nuestro caso, el archivo est guardado directamente en la unidad C para que nos resulte
ms fcil localizarlo:
Si todo es correcto, deberan crearse las tablas e insertarse los datos que contiene el archivo:
A partir de aqu ya tienes un usuario con tablas y datos inlcuidos para poder practicar a la vez
que Ana.
Puedes hacerlo a travs de lnea de comandos o entrando a entorno web Application Express
de Oracle utilizando el botn SQL en la pgina de inicio, y desplegando su lista desplegable
elegir Comandos SQL > Introducir Comando.
Licencias de recursos utilizados en la Unidad de Trabajo. Recurso (1) Datos del recurso (1)
Recurso (2) Datos del recurso (2)
Autora:
Microsoft.
Autora: Oracle. Licencia:
Licencia: Copyright. (Cita). Copyright (cita).
Procedencia: Elaboracin Procedencia:
Propia. Captura de pantalla Elaboracin
Oracle Express. Propia. Captura
Windows XP.
Autora:
Stockbyte.
Licencia: Uso
educativo no
Autora: Oracle. comercial para
Licencia: Copyright (cita). plataformas
Procedencia: Elaboracin pblicas de
Propia. Captura de pantalla Formacin
SQL*Express. Profesional a
distancia.
Procedencia:
CD-DVD Num.
V07.
Autora:
Stockbyte.
Licencia: Uso
Autora: Stockbyte. educativo no
Licencia: Uso educativo no comercial para
comercial para plataformas plataformas
pblicas de Formacin pblicas de
Profesional a distancia. Formacin
Procedencia: CD-DVD Num. Profesional a
CD165. distancia.
Procedencia:
CD-DVD Num.
CD109.
Autora:
Stockbyte.
Licencia: Uso
Autora: Stockbyte. educativo no
Licencia: Uso educativo no comercial para
comercial para plataformas plataformas
pblicas de Formacin pblicas de
Profesional a distancia. Formacin
Procedencia: CD-DVD Num. Profesional a
CD109. distancia.
Procedencia:
CD-DVD Num.
CDV43.
Autora:
Stockbyte.
Licencia: Uso
Autora: Stockbyte. educativo no
Licencia: Uso educativo no comercial para
comercial para plataformas plataformas
pblicas de Formacin pblicas de
Profesional a distancia. Formacin
Procedencia: CD-DVD Num. Profesional a
CDV43. distancia.
Procedencia:
CD-DVD Num.
CDV43.
Autora:
Stockbyte.
Licencia: Uso
Autora: Stockbyte. educativo no
Licencia: Uso educativo no comercial para
comercial para plataformas plataformas
pblicas de Formacin pblicas de
Profesional a distancia. Formacin
Procedencia: CD-DVD Num. Profesional a
ECD001. distancia.
Procedencia:
CD-DVD Num.
CD165.
Autora:
Stockbyte.
Licencia: Uso
Autora: Stockbyte. educativo no
Licencia: Uso educativo no comercial para
comercial para plataformas plataformas
pblicas de Formacin pblicas de
Profesional a distancia. Formacin
Procedencia: CD-DVD Num. Profesional a
CD EP006. distancia.
Procedencia:
CD-DVD Num.
CD EP006.
Autora: Oracle.
Autora: Stockbyte.
Licencia:
Licencia: Uso educativo no
Copyright (cita).
comercial para plataformas
Procedencia:
pblicas de Formacin
Elaboracin
Profesional a distancia.
Propia. Captura
Procedencia: CD-DVD Num.
de pantalla
CD EP006.
Oracle Express.
Autora: Oracle.
Licencia:
Autora: Oracle.
Copyright (cita).
Licencia: Copyright (cita).
Procedencia:
Procedencia: Elaboracin
Elaboracin
Propia. Captura de pantalla
Propia. Captura
Oracle Express.
de pantalla
Oracle Express.
Autora: Oracle.
Licencia:
Autora: Oracle. Copyright (cita).
Licencia: Copyright (cita). Procedencia:
Procedencia: Elaboracin Elaboracin
Propia. Captura de pantalla Propia. Captura
Oracle Express. de pantalla
Oracle Express.
Autora: Oracle.
Licencia:
Autora: Oracle.
Copyright (cita).
Licencia: Copyright (cita).
Procedencia:
Procedencia: Elaboracin
Elaboracin
Propia. Captura de pantalla
Propia. Captura
Oracle Express.
de pantalla
Oracle Express.
Autora:
Stockbyte.
Licencia: Uso
Autora: Stockbyte. educativo no
Licencia: Uso educativo no comercial para
comercial para plataformas plataformas
pblicas de Formacin pblicas de
Profesional a distancia. Formacin
Procedencia: CD-DVD Num. Profesional a
CD EP006. distancia.
Procedencia:
CD-DVD Num.
CD V43.
Autora:
Stockbyte.
Licencia: Uso
Autora: Stockbyte. educativo no
Licencia: Uso educativo no comercial para
comercial para plataformas plataformas
pblicas de Formacin pblicas de
Profesional a distancia. Formacin
Procedencia: CD-DVD Profesional a
Num.CD165. distancia.
Procedencia:
CD-DVD Num.
SD174.
Autora: Oracle.
Licencia:
Autora: Oracle.
Copyright (cita).
Licencia: Copyright (cita).
Procedencia:
Procedencia: Elaboracin
Elaboracin
Propia. Captura de pantalla
Propia. Captura
Oracle Express.
de pantalla
Oracle Express.
Autora:
Stockbyte.
Licencia: Uso
educativo no
Autora: Stockbyte.
Licencia: Uso educativo no comercial para
comercial para plataformas plataformas
pblicas de Formacin pblicas de
Profesional a distancia. Formacin
Procedencia: CD-DVD Num. Profesional a
SD174. distancia.
Procedencia:
CD-DVD Num.
ECD001.
Autora: Oracle.
Autora: Stockbyte. Licencia:
Licencia: Uso educativo no Copyright (cita).
comercial para plataformas Procedencia:
pblicas de Formacin Elaboracin
Profesional a distancia. Propia. Captura
Procedencia: CD-DVD Num. de
CD109. pantalla Oracle
Express.
Autora:
Stockbyte.
Licencia: Uso
educativo no
Autora: Oracle. comercial para
Licencia: Copyright (cita). plataformas
Procedencia: Elaboracin pblicas de
Propia. Captura de pantalla Formacin
Oracle Express. Profesional a
distancia.
Procedencia:
CD-DVD Num.
SD174.
Autora:
Stockbyte.
Licencia: Uso
Autora: Stockbyte. educativo no
Licencia: Uso educativo no comercial para
comercial para plataformas plataformas
pblicas de Formacin pblicas de
Profesional a distancia. Formacin
Procedencia: CD-DVD Num. Profesional a
EP006_. distancia.
Procedencia:
CD-DVD Num.
ECD001.
Autora:
Stockbyte.
Licencia: Uso
Autora: Stockbyte. educativo no
Licencia: Uso educativo no comercial para
comercial para plataformas plataformas
pblicas de Formacin pblicas de
Profesional a distancia. Formacin
Procedencia: CD-DVD Num. Profesional a
ECD001. distancia.
Procedencia:
CD-DVD Num.
SD174.
Autora: Oracle
Autora: Stockbyte.
Licencia:
Licencia: Uso educativo no
Copyright (Cita)
comercial para plataformas
Procedencia:
pblicas de Formacin
Elaboracin
Profesional a distancia.
Propia. Captura
Procedencia: CD-DVD Num.
de pantalla
CD73.
Oracle Express
Autora: Oracle
Licencia:
Autora: Oracle
Copyright (Cita)
Licencia: Copyright (Cita)
Procedencia:
Procedencia: Elaboracin
Elaboracin
Propia. Captura de pantalla
Propia. Captura
Oracle Express
de pantalla
Oracle Express
Autora: Oracle
Licencia:
Autora: Oracle
Copyright (Cita)
Licencia: Copyright (Cita)
Procedencia:
Procedencia: Elaboracin
Elaboracin
Propia. Captura de pantalla
Propia. Captura
Oracle Express
de pantalla
Oracle Express
Autora: Oracle
Licencia: Copyright (Cita)
Procedencia: Elaboracin
Propia. Captura de pantalla
Oracle Express