T3: SQL
1. Lenguaje SQL
SQL, o Lenguaje de Consulta Estructurado, es un lenguaje de programación
estandarizado utilizado para gestionar y manipular datos en sistemas de gestión de
bases de datos relacionales. En esencia, permite a los usuarios comunicarse con las
bases de datos para realizar diversas operaciones, como la creación, modificación,
eliminación y recuperación de datos.
Para trabajar utilizaremos el siguiente simulador, entra AQUÍ
2
2. Tablas
2.1. Creación de una tabla
Empezaremos creando una tabla. Antes de hacerlo es conveniente planificar
varios aspectos:
●
El nombre de la tabla → debe ser un nombre que identifique su
contenido.
●
El nombre de cada columna de la tabla → ha de ser un nombra
autodescriptivo, que identifique su contenido.
●
El tipo de dato y el tamaño que tendrá cada columna.
●
Las columnas obligatorias, los valores por defecto, las restricciones, etc
3
2. Tablas
2.1. Creación de una tabla
Para crear una tabla usamos la orden Donde:
CREATE TABLE, cuyo formato más ●
Columna1, Columna2 → son los
simple es:
nombres de las columnas que
CREATE TABLE Nombretabla contendrá la tabla.
( ●
Tipo_dato → indica el tipo de dato
Columna1 Tipo_dato [NOT NULL].
de cada columna.
Columna2 Tipo_dato [NOT NULL],
--------------------------------------
●
NOT NULL → indica que la
) columna debe contener alguna
información.
4
2. Tablas
2.1. Creación de una tabla
Ejemplo:
CREATE TABLE ALUMNOS
(
NUMERO_MATRICULA NUMBER(6) NOT NULL,
NOMBRE VARCHAR2(15) NOT NULL,
FECHA_NACIMIENTO DATE,
DIRECCION VARCHAR2(30),
LOCALIDAD VARCHAR2(15)
);
5
Actividad
[Link] los diferentes tipo de datos de las columnas
de una tabla creada con SQL, explícalos y pon un
ejemplo de cada uno
6
2. Tablas
2.1. Creación de una tabla
Clave primaria: PRIMARY KEY
Una clave primaria dentro de una tabla es una columna o conjunto de columnas que
identifican unívocamente a cada fila. Debe ser única, no nula y obligatoria. Como máximo
podemos definir una clave primaria por tabla. Para definir una clave primaria en una tabla
usamos la restricción: PRIMARY KEY.
Clave ajena: FOREIGN KEY
Una clave ajena está formada por una o varias columnas que están asociadas a una clave
primaria de otra tabla. Se pueden definir tantas como sea preciso. El valor de la columna o
columnas que son claves ajenas debe ser NULL o igual a un valor de la clave referenciada.
7
2. Tablas
2.1. Creación de una tabla
CREATE TABLE PROVINCIAS
CODPROVINCIA NUMBER(2) PRIMARY KEY,
NOMBRE VARCHAR2(15)
);
CREATE TABLE PERSONAS
DNI NUMBER(9) PRIMARY KEY,
NOMBRE VARCHAR(15),
DIRECCION VARCHAR2(30),
LOCALIDAD VARCHAR2(15),
CODPROVIN NUMBER(2) NOT NULL REFERENCES PROVINCIAS
); 8
2. Tablas
2.2. Borrado de una tabla
Para borrar una tabla en SQL, se utiliza el comando DROP
TABLE. Este comando elimina permanentemente la tabla y
todos sus datos de la base de datos. La sintaxis básica es:
DROP TABLE nombre_tabla;. Es importante tener cuidado
al usar este comando, ya que la operación es irreversible y se
perderán todos los datos de la tabla.
9
2. Tablas
2.3. Datos
Para insertar datos en una tabla SQL, se utiliza la sentencia INSERT INTO. Esta sentencia permite
agregar una o más filas a una tabla existente, especificando los valores que se insertarán en cada
columna.
INSERT INTO empleados (3, “Carlos Ruiz”, 35000);
Para borrar una fila de una tabla en SQL, se utiliza la sentencia DELETE FROM seguida del
nombre de la tabla y una cláusula WHERE para especificar la fila o filas que se quieren eliminar.
La cláusula WHERE es opcional, pero si se omite, se borrarán todas las filas de la tabla.
DELETE FROM Clientes WHERE ClienteID = 123;
Para modificar una fila en una tabla SQL, se utiliza la sentencia UPDATE. Esta sentencia permite
cambiar los valores de una o más columnas en una o más filas de la tabla. La sintaxis básica es:
UPDATE nombre_tabla SET columna1 = valor1, columna2 = valor2, ... WHERE condicion;
10
Actividad
[Link] dos tablas, ALUMNOS y CLASE. Con sus
claves primarias y ajenas. Inserta 3 datos en cada
una, modifica estos datos y bórralos. Finalmente
borra las tablas (cuidado en que orden las borras).
11
3. Consultas de datos
Para recuperar información o, lo que es lo mismo, para realizar
consultas a la base de datos, utilizaremos una única sentencia SELECT.
El usuario emplea esta sentencia con el nivel de complejidad apropiado
para él, especifica qué es lo que quiere obtener, no dónde ni cómo.
De la consulta se puede obtener cualquier unidad de datos, todos los
datos, cualquier subconjunto de datos, cualquier conjunto de
subconjuntos de datos, etc.
12
3. Consultas de datos
3.1. Sentencia SELECT
El formato de la sentencia SELECT es el siguiente:
SELECT [ALL|DISTINCT] [expre_colum1, …, expre_column | * ]
FROM [nombre_tabla1, …, nombre_tablan]
[WHERE condición]
[ORDER BY expre_colum [DESC|ASC] [, expre_colum [DESC|ASC], …];
Donde expre_colum puede ser una columna de una tabla, una constante, una
expresión aritmética, una función o varias funciones anidadas.
13
3. Consultas de datos
3.2. Cláusulas de SELECT: FROM
La única cláusula de la sentencia SELECT que es obligatoria es la cláusula
FROM, el resto son opcionales.
FROM [nombre_tabla1, …, nombre_tablan]
Especifica la tabla o lista de tablas de la que se recuperarán los datos.
Ejemplo:
SELECT NOM_ALUM, NOTA
FROM ALUMNOS;
14
3. Consultas de datos
3.3. Cláusulas de SELECT: WHERE
WHERE condición
Obtiene las filas que cumplen la condición expresada. La complejidad de la
condición es prácticamente ilimitada. El formato de la condición es:
expresión operador expresión
Las expresiones pueden ser una constante, una expresión aritmética, un valor
nulo o un nombre de columna.
Se pueden construir condiciones múltiples usando los operadores lógicos
booleanos: AND, OR y NOT. Está permitido usar paréntesis para forzar el
orden de evaluación.
15
3. Consultas de datos
3.3. Cláusulas de SELECT: WHERE
Ejemplos:
WHERE NOTA = 5;
WHERE (NOTA >= 5) AND (CURSO = 1);
WHERE (NOTA IS NULL) OR (UPPER (NOM_ALUM) = “PEDRO”)
UPPER hace que las letras de NOM_ALUM se conviertan todas en mayúscula
y conseguir que no haya fallos en la búsqueda.
16
3. Consultas de datos
3.4. Cláusulas de SELECT: ORDER BY
ORDER BY expre_colum [DESC|ASC] [,expre_columna [DESC|ASC], …]
Esta cláusula especifica el criterio de clasificación del resultado de la consulta. ASC
especifica una ordenación ascendente y DESC descendente.
SELECT *
FROM ALUMNOS
ORDER BY NOTA/5;
Así mismo, es posible anidar criterios. El situado más a la izquierda será el principal:
ORDER BY NOM_ALUM, CURSO DESC;
También se puede indicar mediante un número que identifica la posición de la
columna a la derecha de SELECT: ORDER BY 2;
17
3. Consultas de datos
3.5. Cláusulas de SELECT: ALL y DISTINCT
ALL → recuperamos todas las filas, aunque algunas estén repetidas. Es la opción por
defecto.
DISTINCT → solo recupera las filas que son distintas. Por ejemplo, consultamos los
departamentos de la tabla EMPLE:
SELECT DEPT_NO SELECT DISTINCT DEPT_NO
FROM EMPLE; FROM EMPLE;
Aparecen todas las filas de la tabla EMPLE donde la columna DEPT_NO no sea nula
también aparecen números de departamentos repetidos. Con DISTINCT se eliminarían
las filas repetidas:
18
4. Selección de columnas
En cuanto a la selección de todas las columnas de una tabla, podemos recuperar las
filas de dos formas:
●
Ponemos los nombres de todas las columnas, uno tras otro, separados por comas:
SELECT EMPLE_NO, APELLIDO, NOMBRE, DIR, SALARIO
FROM EMPLE
●
Ponemos *, que representa a todas las columnas de la tabla:
SELECT*
FROM EMPLE
Para seleccionar determinadas columnas, solo se ponen los nombres de las columnas
que nos interesan
19
Actividades
1. Seleccionamos de la tabla EMPLE A todos los empleados del
departamento 20 (DEPT_NO = 20). Además, la consulta debe aparecer
ordenada por la columna APELLIDO. Los campos que hay que consultar
son: número de empleado, apellido, oficio y número de departamento.
2. Consulta todos los “ANALISTA” ordenado por número de empleado.
3. Seleccionar de la table EMPLE aquellas filas del departamento 20 y cuyo
oficio sea “ANALISTA”. La consulta se ha de ordenar de modo
descendente por APELLIDO y también de manera descendente por número
de empleado.
20
Actividades
4. A partir de la tabla ALUM que contiene los datos de alumnos matriculados en el
curso 2025/2026 para un centro de enseñanza,
a) Obtén todos los datos del alumno.
b) Obtén los los siguientes datos de alumnos: DNI, NOMBRE, APELLIDOS,
CURSO, NIVEL y CLASE.
c) Obtén todos los datos de alumnos cuya población sea “GUADALAJARA”.
d) Obtén el NOMBRE y APELLIDOS de todos los alumnos cuya población sea
“SAGUNTO”.
e) Consulta el DNI, NOMBRE, APELLIDOS, CURSO, NIVEL y CLASE de
todos los alumnos ordenados por APELLIDOS y NOMBRE
ascendentemente. 21
5. Crear Alias
Cuando se consulta la base de datos, los nombres de las columnas se usan
como cabeceras de presentación. Si el nombre resulta demasiado largo, corto o
críptico, existe la posibilidad de cambiarlo con la misma sentencia SQL de
consulta creando un ALIAS. El ALIAS se pone entre comillas dobles, a la
derecha de la columna.
Ejemplo:
SELECT DNOMBRE “Nombre de Departamento”, DEPT_NO “Número
Departamento” FROM DEPART;
22
6. Operadores Aritméticos
Los operadores aritméticos sirven para formar expresiones con constantes,
valores de columnas y funciones de valores de columnas. Son:
●
+ → Suma
●
- → Resta
●
* → Multiplicación.
●
/ → División
Ejemplo:
SELECT col1*col2, col1-col2,
FROM tabla 1
WHERE col1+col2 = 34;
23
Actividad
1. Disponemos de la tabla NOTAS_ALUMNOS, que contiene las
notas de los alumnos de primer curso de BAT2 obtenidas en
cada una de evaluaciones.
Se trata de obtener la nota media de cada alumno. Visualizamos
por cada uno de ellos su nombre y su nota media (suma de las
tres notas dividido por tres”
24
7. Operadores de Comparación y Lógicos
Los operadores de comparación y lógicos son:
●
= → Igual a
●
> → Mayor que
●
>= → Mayor o igual que
●
< → Menor que
●
<= → Menor o igual que
●
!= o <> → Distinto de
●
AND → devuelve el valor TRUE cuando las dos condiciones son verdaderas.
●
OR → devuelve el valor TRUE cuando una de las dos condiciones es verdadera.
●
NOT → devuelve el valor TRUE si la condición es falsa.
25
Actividad
1. A partir de la tabla NOTAS_ALUMNOS, deseamos obtener
aquellos nombres de alumnos que tengan un 7 en la primera
evaluación y cuya media sea mayor que 6.
26
8. Operadores de Comparación de Cadenas
Para comparar cadenas de caracteres, hasta ahora hemos utilizado el comparador de
comparación Igual a (=). Así, a partir de la tabla EMPLE obtenemos el apellido de los
ANALISTAS del departamento 10:
SELECT APELLIDO
FROM EMPLE
WHERE OFICIO = “Analista” AND DEPT_NO = 10;
Pero este operador no nos sirve si queremos hacer consultas de este tipo:
Obtén los datos de los empleados cuyo apellido empiece por la letra “P” u obtener los
nombre de alumnos que incluyan la palabra “Pérez”.
27
8. Operadores de Comparación de Cadenas
Para especificar este tipo de consultas, en SQL, usamos el operador LIKE que permite
utilizar los siguientes caracteres especiales de las cadenas de comparación:
●
% → Comodín → representa cualquier cadena de 0 o más caracteres.
●
“_” → Marcador de posición → representa un carácter cualquiera.
En la cláusula WHERE este operando se utiliza de la siguiente manera:
WHERE columna LIKE “caracteres especiales”
En una sentencia WHERE se pueden usar varias cláusulas LIKE anidadas por operadores
AND/OR:
WHERE col1 LIKE “caracteres especiales” AND|OR col2 LIKE “caracteres especiales”
28
8. Operadores de Comparación de Cadenas
Ejemplos:
●
LIKE “Director” → la cadena “Director”
●
LIKE “M%” → cualquier cadena que empiece por M
●
LIKE “%X%” → cualquier cadena que contenga una X.
●
LIKE “__M” → cualquier cadena de 3 caracteres terminada en M.
●
LIKE “N_” → cualquier cadena de 2 caracteres que empiece por N.
●
LIKE “_N%” → cualquier cadena cuyo segundo carácter sea una N.
29
Actividad
1. A partir de la tabla EMPLE:
a) Obtén aquellos apellidos que empiecen por una “J”.
b) Obtén aquellos apellidos que tengan una “R” en la segunda
posición.
c) Obtén aquellos apellidos que empiecen por “A” y tengan
una “O” en su interior.
30
9. NULL y NOT NULL
Se dice que una columna de una fila es NULL si está completamente vacía.
Para comprobar de el valor de una columna en nulo empleamos la expresión:
columna IS NULL. Si queremos saber si el valor de una columna no es nulo,
usamos la expresión: columna IS NOT NULL. Cuando comparamos con
valores nulos o no nulos no podemos utilizar los operadores de igualdad,
mayor o menor.
SELECT APELLIDO FROM EMPLE WHERE COMISIÓN IS NULL:
SELECT APELLIDO FROM EMPLE WHERE COMISIÓN IS NOT NULL:
31
10. Comprobaciones con Conjuntos
Hasta ahora todas las comprobaciones lógicas que hemos visto comparan una columna
o expresión con un valor. Pero también podemos comparar una columna o una
expresión con una lista de valores utilizando los operadores IN y BETWEEN.
●
Operador IN → nos permite comprobar si una expresión pertenece o no (NOT) a
un conjunto de valores, haciendo posible la realización de comparaciones
múltiples. Su formato es:
<expresión> [NOT] IN (lista de valores separados por comas)
La lista de valores puede estar formada por números o por cadenas.
32
10. Comprobaciones con Conjuntos
Ejemplos:
●
Consulta los apellidos de la tabla EMPLE cuyo número de departamento sea 10 o 30:
SELECT APELLIDOS FROM EMPLE WHERE DEPT_NO IN (10,30);
●
Consulta los apellidos de la tabla EMPLE cuyo número de departamento no sea 10 o 30:
SELECT APELLIDOS FROM EMPLE WHERE DEPT_NO NOT IN (10,30);
●
Consulta los apellidos de la tabla EMPLE cuyo oficio sea “VENDEDOR”, “ANALISTA” o
“EMPLEADO”: SELECT APELLIDOS FROM EMPLE WHERE OFICIO IN
(“VENDEDOR”, “ANALISTA”, “EMPLEADO”);
●
Consulta los apellidos de la tabla EMPLE cuyo oficio no sea ni “VENDEDOR”, ni
“ANALISTA”, ni “EMPLEADO”: SELECT APELLIDOS FROM EMPLE WHERE
OFICIO NOT IN (“VENDEDOR”, “ANALISTA”, “EMPLEADO”);
33
10. Comprobaciones con Conjuntos
●
Operador BETWEEN → comprueba si un valor está comprendido o no (NOT) dentro de
un rango de valores, desde un valor inicial a un valor final. Su formato es:
<expresión> [NOT] BETWEEN valor_inicial AND valor_final
Ejemplos:
●
Consulta los apellidos y el salario de la tabla EMPLE cuyo salario está comprendiso entre
15000 y 20000: SELECT APELLIDOS, SALARIO FROM EMPLE WHERE SALARIO
BETWEEN 15000 AND 20000;
●
Consulta los apellidos y el salario de la tabla EMPLE cuyo salario no está comprendiso
entre 15000 y 20000: SELECT APELLIDOS, SALARIO FROM EMPLE WHERE
SALARIO NOT BETWEEN 15000 AND 20000;
34
11. Combinación de AND y OR
Los operadores AND y OR se pueden combinar de forma ilimitada, pero hay que tener
cuidado al usarlas y utilizar paréntesis para agrupar aquellas expresiones que se deseen
evaluar juntas. Si no nos servimos de los paréntesis, es posible que los resultados no
sean los deseados.
SELECT APELLIDO, SALARIO, DEPT_NO
FROM EMPLR
WHERE SALARIO > 20000 AND (DEPT_NO = 10 OR DEPT_NO = 30);
Sin paréntesis el resultado sería diferente.
35
12. Subconsultas
A veces, para analizar alguna operación de consulta, necesitamos los datos devueltos
por otra consulta. Este problema se puede solucionar usando subconsultas. Las
subconsultas son aquellas sentencias SELECT que forman parte de la cláusula
WHERE de una sentencia SELECT anterior.
EJEMPLO:
Queremos los datos de los empleados que tengan el mismo oficio que “PEPE”.
SELECT *
FROM EMPLE
WHERE OFICIO = (SELECT OFICIO FROM EMPLE WHERE
NOMBRE = “PEPE”);
36
12. Subconsultas
Condiciones de búsqueda en subcansultas
●
=, <, <=, >, >=, <>
●
IN
●
EXISTS → examina si una subconsulta produce alguna fila de resultados.
●
ANY → compara el valor de una expresión con cada uno del conjunto de valores
producidos por una subconsulta, si una comparación da como resultado TRUE,
devuelve TRUE.
●
ALL → como la anterior, pero devuelve TRUE si todas las comparaciones
individuales da como resultado TRUE.
37
Actividades
1. Con la tabla EMPLE, obtén al APELLIDO de los empleados con el mismo
OFICIO que “GIL”.
2. Muestra los datos (apellido, oficio, salario y fecha de alta) de aquellos empleados
que desempeñen el mismo oficio que “JIMENEZ” o que tengan un salario ,mayor
o igual que “FERNANDEZ”.
3. Usamos las tablas EMPLE y DEPART. Queremos consultar los datos de los
empleados que trabajan en “MADRID” o “BARCELONA”. La localidad de los
departamentos se obtiene de la tabla DEPART. Hemos de relacionar las tablas
EMPLE y DEPART por el número de departamento (IN).
38
Actividades
4. Consulta los apellidos y salarios de todos los empleados del departamento 20 cuyo
trabajo sea idéntico al de cualquiera de los empleados del departamento
“VENTAS”. (2 anidaciones, una IN y la otra =)
5. Obtén el apellido de los empleados con el mismo oficio y salario que “GIL”. En
esta consulta se introduce una variante, hasta ahora las subconsultas nos devolvían
una columna, aunque pueden devolver más de una. En este caso, la subconsulta
devuelve dos columna<s, el oficio y el salario.
6. Presenta los apellidos y oficios que tienen el mismo trabajo que “JIMENEZ”.
7. Muestra el APELLIDO, OFICIO y SALARIO de los empleados del departamento
de “FERNANDEZ” que tengan el mismo salario.
39
13. Combinación de Tablas
Hasta ahora, en las consultas que hemos realizado solo se ha utilizado una tabla. Pero
hay veces que una consulta necesita columnas de varias tablas.
Sintaxis:
SELECT columnas de las tablas citadas en la cláusula from
FROM tabla1, tabla2, …
WHERE [Link] = tabla2. columna
Cuando combinamos varias tablas, hemos de tener en cuenta una serie de reglas:
●
Es posible unir tantas tablas como deseemos.
●
En la cláusula SELECT se pueden citar columnas de todas las tablas.
40
13. Combinación de Tablas
●
Si hay columnas con el mismo nombre en las distintas tablas de la
cláusula FROM, se deben identificar, especificando
[Link]
●
Si el nombre de una columna existe solo en una tabla, no será necesario
especificarla. Sin embargo, hacerlo mejoraría la legibilidad de la
sentencia SELECT.
●
El criterio que se siga para combinar las tablas ha de especificarse en la
cláusula WHERE, [Link] = [Link]
41
13. Combinación de Tablas
Ejemplo:
A partir de las tablas EMPLE y DEPART obtenemos los siguientes datos de
los empleados: apellidos, oficio, número de empleado, nombre de
departamento y localidad. Estas tablas tienen en común el campo
DEPT_NO, por el que se combinan las tablas:
SELECT APELLIDO, OFICIO, EMO_NO, DNOMBRE, LOC
FROM EMPLE, DEPART
WHERE EMPLE.DEPT_NO = DEPART.DEPT_NO;
42
Actividades
Con estas tres tablas:
ALUMNOS (DNI, APENOM, DIREC, POBLA, TELEF)
ASIGNATURAS (COD, NOMBRE)
NOTAS (DNI, COD, NOTA)
1. Realiza una consulta para obtener el nombre de alumno, su asignatura y su nota.
2. Obtén los nombres de alumnos matriculados en “FOL”.
3. Visualiza el nombre de los alumnos que tengan una nota entre 7 y 8 en la
asignatura de “FOL”.
4. Visualiza los nombre de las asignaturas que no tengan suspensos,
43
Actividades
5. Visualiza todas las asignaturas que contengan tres letras “o” en su interior y tengan
alumnos matriculados en “Madrid”.
6. Visualiza los nombres de alumnos de “Madrid” que tengan alguna asignatura
suspendida.
7. Muestra los nombres de alumnos que tengan las misma nota que tiene “Díaz
Fernández, María” en “FOL” en alguna asignatura.
8. Obtén los datos de las asignaturas que no tengan alumnos,
9. Obtén el nombre y apellido de los alumnos que tengan nota en la asignatura con código
1.
[Link]én el nombre y apellido de los alumnos que no tengan nota en la asignatura con
código 1.
44
Actividades
Con las tablas EMPLE y DEPART:
1. Selecciona el apellido, el oficio y la localidad de los departamentos de aquellos
empleados cuyo oficio se “ANALISTA”.
2. Obtén los datos de los empleados cuyo director (DIR) sea “CEREZO”.
3. Obtén los datos de los empleados del departamento de “VENTAS”.
4. Obtén los datos de los departamentos que NO tengan empleados.
5. Obtén los datos de los departamentos que tengan empleados.
6. Obtén el apellido y el salario de los empleados que superen todos los salarios de
los empleados del departamento 20.
45
Actividades
Con la tabla LIBRERÍA:
1. Visualiza el tema, estante y ejemplares de las filas de LIBRERÍA con ejemplares
comprendidos entre 8 y 15.
2. Visualiza las columnas TEMA, ESTANTE y EJEMPLARES de las filas cuyo
ESTANTE no esté comprendido entre la “B” y la “D”.
3. Visualiza todos los temas de LIBRERÍA cuyo número de ejemplares sea inferior a
los que hay en “MEDICINA”.
4. Visualiza los temas cuyo número de ejemplares esté entre 15 y 20, ambos
incluidos.
46
14. Funciones
Las funciones se usan dentro de expresiones y actúan con los valores de las columnas.,
variables o constantes. Generalmente producen dos tipos diferentes de resultados, unas
producen una modificación de la información original (por ejemplo, poner en
minúscula lo que está en mayúscula), el resultado de otras indica alguna cosa sobre la
información (por ejemplo, el número de caracteres que tiene una cadena). Se utilizan
en las cláusulas SELECT, WHERE y ORDER BY.
Es posible el anidamiento de funciones. Existen cinco tipos de funciones: aritméticas,
de cadenas de caracteres, de manejo de fechas, de conversión y otras funciones.
En este curso solo veremos el primer tipo.
47
15. Funciones Aritméticas
Las funciones aritméticas trabajan con datos de tipo numérico NUMBER. Este tipo
incluye los dígitos de 0 a 9, el punto decimal y el signo menos.
Estas funciones trabajan con tres clases de números, valores simples, grupos de
valores y listas de valores. Algunas modifican los valores sobre los que actúan, otras
informan de algo sobre los valores. Podemos dividir las funciones aritméticas en tres
grupos:
●
Funciones de valores simples.
●
Funciones de grupos de valores.
●
Funciones de listas.
48
15. Funciones Aritméticas
15.1. Funciones de valores simples
Las funciones de valores simples son funciones sencillas que trabajan con valores
simples. Un valore simple es un número, una variable o una columna de una tabla.
Las funciones de valores simples son:
●
ABS(n) → devuelve al valor absoluto de n,
●
CEIL(n) → obtiene el valor entero inmediatamente superior o igual a n.
●
FLOOR(n) → obtiene el valor entero inmediatamente inferior o igual a n.
●
MOD(m, n) → devuelve el resto resultante de dividir m ente n.
●
SORT(n) → devuelve la raíz cuadrado de n.
49
15. Funciones Aritméticas
15.1. Funciones de valores simples
●
NVL(valor, expresión) → esta función se utiliza para sustituir un valor
nulo por otro valor. Si valor es NULL, es sustituido por la expresión, si no
lo es, la función devuelve valor.
●
POWER(n, exponente) → calcula la potencia de un número. Devuelve el
valor de n elevado a un exponente.
●
ROUND(número [,m]) → devuelve el valor de número redondeado a m
decimales. Si m es negativo, el redondeo de dígitos se lleva a cabo a la
izquierda del punto decimal. Si se omite m, devuelve número con 0
decimales y redondeado.
50
15. Funciones Aritméticas
15.1. Funciones de valores simples
●
SIGN(VALOR) → esta función indica el signo del valor. Si valor
es menor que 0, la función devuelve -1, y si valor es mayor que 0, la
función devuelve 1..
●
TRUNC(número [,m]) → trunca los números para que tengan un
cierto número de dígitos de precisión. Devuelve número truncado a
m decimales, m puede ser negativo con lo que trunca por la izquierda
del punto decimal. Si se omite m devuelve número con 0 decimales.
51
15. Funciones Aritméticas
15.1. Funciones de valores simples
Ejemplo:
Usaremos la tabla EMPLE
1. Obten el valor absoluto de del salario -10000 para todas las filas de la tabla
EMPLE:
SELECT APELLIDO, SALARIO, ABS(SALARIO-10000) FROM EMPLE;
2. A partir de la tabla EMPLE obtenemos el SALARIO, la COMISIÓN y la suma de
ambos:
SELECT SALARIO, COMISION, SALARIO + NVL(COMISION, 0)
Si no hiciéramos esto, si la comisión fuera nula devolvería valor nulo en la suma.
52
Actividad
1.¿Cuál sería la salida de ejecutar estas funciones?
ABS(146) = ABS(-30) = POWER(1, -1) = ROUND(33.67) =
CEIL(2) = CEIL(1,3) = ROUND(-33.67, 2) = ROUND(+33,67, -2) =
CEIL(-2.3) = CEIL(-2) = ROUND(-33,27, 1) = ROUND(-33,27, -1) =
FLOOR(-2) = FLOOR(-2.3) = TRUNC(67.232) = TRUNC(67.232, -2) =
FLOOR(2) = FLOOR(1.3) = TRUNC(67.232, 2) = TRUNC(67.58, -1) =
MOD(22, 23) = MOD(10,3) = TRUNC(67.58,1) = POWER(10, 0) =
POWER(3, 2) =
53
15. Funciones Aritméticas
15.2. Funciones de grupos de valores
Hay funciones estadísticas como SUM, AVG y COUNT, que actúan sobre un grupo de
filas para obtener un valor. Estas funciones permiten obtener la edad media de un
grupo de alumnos, el alumno más joven, el más viejo, el número total de miembros de
un grupo, etc. Los valores nulos son ignorados por las funciones de grupos de valores
y los cálculos se realizan sin contar con ellos. Estas funciones son:
●
AVG(n) → calcula el valor medio de n.
●
COUNT(* | expresión) → cuenta el número de veces que la expresión evalúa
algún dato con valor no nulo. La opción * cuenta todas las filas seleccionadas.
●
MAX(expresión) → calcula el máximo valor de la expresión.
54
15. Funciones Aritméticas
15.2. Funciones de grupos de valores
●
MIN(expresión) → calcula el mínimo valor de la expresión.
●
SUM(expresión) → obtiene la suma de valores de la expresión distintos de nulo.
●
VARIANCE(expresión) → obtiene la varianza de los valores de expresión
distintos de nulo.
Ejemplo:
Cálculo del salario medio de los empleados del departamento 10 de la tabla EMPLE:
SELECT AVG(SALARIO) FROM EMPLE WHERE DEPT_NO = 10;
55
Actividades
[Link] el número de filas de la tabla EMPLE.
[Link] el número de filas de la tabla EMPLE donde la COMISION no sea nula.
[Link] el máximo SALARIO de la tabla EMPLE.
[Link]én al apellido máximo de la tabla EMPLE.
[Link]én el apellido del empleado que tiene mayor salario. (Subconsulta)
[Link]én el mínimo salario de la tabla EMPLE.
[Link]én el departamento en el que trabaja el empleado con menor salario.
56
Actividades
[Link] la suma de todos los salarios de la tabla EMPLE.
[Link]én la varianza de todos los salarios de la tabla EMPLE.
[Link] el número de oficios de la tabla EMPLE. ¿Nos ayudaría usar la
cláusula DISTINCT? ¿De qué forma?.
[Link] cuantos apellidos empiezan por la lera “A”,
[Link]én el apellido o apellidos de los empleados que empiezan por la letra
“A” y que tengan el máximo salario de los que empiezan por la letra “A”.
57
15. Funciones Aritméticas
15.3. Funciones de listas
Las funciones de listas trabajan sobre un grupo de columnas dentro de una misma fila.
Compara los valores de cada una de las columnas en el interior de una fila para obtener el
mayor o menor valor de la lista. Las funciones de lista son:
●
GREATEST(valor1, valor2, ...) → obtiene el mayor valor de la lista.
●
LEAST(valor1, valor2, ...) → obtiene el menor valor de la lista.
Ejemplo:
Obtén por cada alumno la mayor nota y la menor de las tres que tiene en la tabla
NOTAS:ALUMNOS.
SELECT NOMBRE_ALUMNO, GREATEST(NOTA1, NOTA2, NOTA3) “MAYOR”,
LEAST(NOTA1, NOTA2, NOTA3) “MENOR” FROM NOTAS_ALUMNOS;
58
Actividades
[Link] la tabla EMPLE, obtén el sueldo medio, el número de comisiones no nulas, el
máximo sueldo y el mínimo sueldo de los empleados del departamento 30.
[Link] los temas con mayor número de ejemplares de la tabla LIBRERÍA y que
tengan, al menos, una “E”.
[Link] el apellido, el salario y el número de departamento de aquellos empleados
de la tabla EMPLE cuyo salario sea el mayor de su departamento.
[Link] el apellido, el salario y el número de departamento de aquellos empleados
cuyo salario supere a la media de su departemento.
59
Mónica Giner Ariño
60