Tecnologías de
Información y
Ciberseguridad
Bases de Datos Relacionales
TI2022 – Primavera 2021
DESCRIPCIÓN DE LA ASIGNATURA - Unidad
Consultas, Subconsultas y Agrupaciones SQL
Elaborar consultas mediante lenguaje SQL para extraer y
desplegar información de múltiples tablas de una base
de datos, utilizando perfiles, roles y usuarios para
organizar y restringir el acceso a la base de datos.
Recuperación de datos mediante la sentencia SQL SELECT
Una sentencia SELECT recupera información de la base de datos.
Con una sentencia SELECT, se puede hacer lo siguiente:
Selecciona las columnas de una tabla devueltas por una
consulta. Se pueden seleccionar tantas columnas como sea
necesario.
Selecciona las filas (o tuplas) de una tabla devueltas por
una consulta. Se pueden utilizar diferentes criterios para
restringir las filas recuperadas.
Recuperación de datos mediante la sentencia SQL SELECT
Una sentencia SELECT recupera información de la base de datos.
Con una sentencia SELECT, se puede hacer lo siguiente:
Permite reunir los datos almacenados en diferentes
tablas especificando el enlace entre ellas.
Recuperación de datos mediante la sentencia SQL SELECT
SELECT
SELECT *|{[DISTINCT]
*|{[DISTINCT] columna|expresión
columna|expresión [alias],
[alias], ...}
...}
FROM
FROM tabla
tabla
[WHERE
[WHERE condición(es)]
condición(es)]
[GROUP
[GROUP BY
BY expresión_de_agrupamiento]
expresión_de_agrupamiento]
[HAVING
[HAVING condición_agrupamiento]
condición_agrupamiento]
[ORDER
[ORDER BY
BY columna|expresión|posición
columna|expresión|posición [ASC|DESC]
[ASC|DESC]
• Cláusula SELECT, que especifica las columnas que se van a mostrar.
• * Selecciona todas las columnas
• DISTINCT Suprime los duplicados
• columnaSelecciona la columna especificada
• expresión Genera una expresión a mostrar
• alias proporciona diferentes cabeceras de la columna elegida
• Cláusula FROM, que identifica la tabla que contiene las columnas que se
muestran en la cláusula SELECT.
Recuperación de datos mediante la sentencia SQL SELECT
SELECT * FROM departments;
SELECT department_id,
department_name "Nombre Depto."
FROM departments;
SELECT first_name || ' ' || last_name,
salary*12 AS "Sueldo Anual"
FROM employees;
SELECT DISTINCT department_id
FROM employees;
Recuperación de datos mediante la sentencia SQL SELECT
SELECT
SELECT *|{[DISTINCT]
*|{[DISTINCT] columna|expresión
columna|expresión [alias],
[alias], ...}
...}
FROM
FROM tabla
tabla
[WHERE
[WHERE condición(es)]
condición(es)]
[GROUP
[GROUP BY
BY expresión_de_agrupamiento]
expresión_de_agrupamiento]
[HAVING
[HAVING condición_agrupamiento]
condición_agrupamiento]
[ORDER
[ORDER BY
BY columna|expresión|posición
columna|expresión|posición [ASC|DESC]
[ASC|DESC]
Puede restringir las filas que devuelve la consulta al utilizar la cláusula WHERE.
Una cláusula WHERE contiene una condición que se debe cumplir.
Si la condición es verdadera, se devolverá la fila que cumpla con la condición.
Consta de tres elementos:
• Nombre de la columna
• Condición de comparación
• Nombre de la columna, constante o lista de valores
Recuperación de datos mediante la sentencia SQL SELECT
Recuperación de datos mediante la sentencia SQL SELECT
= Igual que
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
<>, != Distinto de
BETWEEN…AND… Entre dos valores (amos incluidos)
IN (conjunto) Coincide con cualquiera de los valores del conjunto
LIKE Coincide con un patrón
IS NULL Es un valor nulo
REGEXP_LIKE Coincide con una expresión regular
Recuperación de datos mediante la sentencia SQL SELECT
Recuperación de datos mediante la sentencia SQL SELECT
REGEXP_LIKE es similar a la condición LIKE, excepto que REGEXP_LIKE
realiza una coincidencia de expresiones regulares en lugar de la
coincidencia de patrones simple realizada por LIKE.
Esta condición evalúa cadenas utilizando caracteres definidos por el
juego de caracteres de entrada.
REGEXP_LIKE (columna, exp_regular [, parámetro] )
parámetro
parámetro un un literal
literal de
de texto
texto que
que lele permite
permite cambiar
cambiar el
el comportamiento
comportamiento de de
coincidencia
coincidencia predeterminado
predeterminado de de la
la función.
función. Puede
Puede especificar
especificar uno
uno oo más
más de
de los
los
siguientes
siguientes valores:
valores:
•• 'i'
'i' especifica
especifica la
la coincidencia
coincidencia que que no
no distingue
distingue entre
entre mayúsculas
mayúsculas yy minúsculas.
minúsculas.
•• 'c'
'c' especifica
especifica la
la coincidencia
coincidencia sensible
sensible aa mayúsculas
mayúsculas yy minúsculas.
minúsculas.
•• 'n‘
'n‘ permite
permite que
que el el punto
punto (.),
(.), que
que eses el
el carácter
carácter comodín
comodín queque coincide
coincide con
con
cualquier
cualquier carácter,
carácter, coincida
coincida con
con el
el carácter
carácter dede nueva
nueva línea.
línea. Si
Si omite
omite este
este
parámetro,
parámetro, el el punto
punto nono coincide
coincide concon elel carácter
carácter de
de nueva
nueva línea.
línea.
Recuperación de datos mediante la sentencia SQL SELECT
La siguiente consulta devuelve el nombre y apellido de aquellos empleados con
el nombre de pila Steven o Stephen
(donde first_name comienza con Ste y termina con en y en el medio es v o ph):
^Ste : inicia con ..
(v|ph) : tiene v o ph
en$ : termina con ..
Recuperación de datos mediante la sentencia SQL SELECT
La siguiente consulta devuelve el apellido para aquellos empleados con un doble
vocal de su apellido (donde last_name contiene dos apariciones adyacentes a, e, i, o,
o u, sin tener en cuenta mayúsculas o minúsculas):
[aeiou] : una vocal
([])\1 : repite vocal
‘i’ : sin considerar May/Min
Recuperación de datos mediante la sentencia SQL SELECT
- Expresiones Regulares
Operador Significado
. Comodín. Cualquier carácter. Solo uno.
1 o más ocurrencias. Se utiliza en conjunto con un carácter o palabra que
+ precede al símbolo. “a+” localizará todas las palabras que tengan una o más
aes.
Comodín. Sirve para completar cualquier palabra. Indica 0 o varias
*
ocurrencias de la cadena o carácter que le precede.
? 0 o 1 ocurrencia de la expresión que le precede al símbolo.
Ejemplo: h? : información que contenga cero o una h
Conjunto de caracteres. Todo lo que indiquemos dentro de los corchetes hará
pattern matching una vez con las expresiones que coincidan en base de
datos.
[trn]: expresiones que contengan las letras t, r o n
[…] [034]: expresiones que contengan entre sus cadenas los números 0, 3 o 4
[1-9]: expresiones que tengan números del 1 al 9
[a-z]: expresiones que tengan letras de la a la z
[4-8d-pA-Z]: que contengan dígitos del 4 al 8, alguna de las letras de la d
hasta la p (en minúsculas), y letras de la A a la Z en mayúsculas.
Recuperación de datos mediante la sentencia SQL SELECT
- Expresiones Regulares
Operador Significado
No contenido en lista de caracteres.
[^…]
[^12d]: expresiones que no contengan el número 1, el número 2 o la letra d
Comprueba que haya cadenas con solo num ocurrencias de la expresión
que le precede.
{num} (bnb){2}: comprueba que hay exactamente 2 ocurrencias de la palabra BNB
en los resultados de búsqueda. Es decir, entre ellos tienen que haber filas
que tengan la secuencia “bnbbnb”.
Lo mismo que en el anterior caso, pero con la diferencia de que comprueba
que hay al menos num ocurrencias de la expresión que le precede.
{num,} Ejemplo: 1{2,} comprueba que hay al menos 2 ocurrencias del número 1.
· Secuencia correcta: 111
· Secuencia incorrecta: 1
· Secuencia correcta: 11
Al menos num ocurrencias y no más de x ocurrencias.
Ejemplo: a{2,3} . Entre 2 y 3 aes
{num, x} · Secuencia correcta: aa
· Secuencia correcta: aaa
· Secuencia incorrecta: aaaa
Recuperación de datos mediante la sentencia SQL SELECT
- Expresiones Regulares
Veamos un ejemplo: vamos a utilizar el operador de punto para buscar la letra "a"
seguida de cualquier carácter seguido de la letra "c"
Como expresión regular, esto se haría como: 'a.c'
La misma expresión como búsqueda con comodines SQL estándar sería:
WHERE column LIKE 'a_c'
¿Cuáles de las siguientes cadenas coincidirá con 'a.c'?
−'ABC‘
−'abc‘ El resto de ejemplos falla debido a que tienen
−'aqx‘ el carácter en la posición incorrecta o con las
−'axc‘ mayúsculas/minúsculas incorrectos
−'aBc‘ (mayúsculas no minúsculas según lo
−'abC‘ especificado en la cadena de búsqueda)
−'Amc‘
−'amrc'
Recuperación de datos mediante la sentencia SQL SELECT
SELECT
SELECT *|{[DISTINCT]
*|{[DISTINCT] columna|expresión
columna|expresión [alias],
[alias], ...}
...}
FROM
FROM tabla
tabla
[WHERE
[WHERE condición(es)]
condición(es)]
[GROUP
[GROUP BY
BY expresión_de_agrupamiento]
expresión_de_agrupamiento]
[HAVING
[HAVING condición_agrupamiento]
condición_agrupamiento]
[ORDER
[ORDER BY
BY columna|expresión|posición
columna|expresión|posición [ASC|DESC]
[ASC|DESC]
Puede utilizar la cláusula GROUP BY para dividir las filas de la tabla en
grupos. A continuación puede utilizar las funciones de grupo para devolver
información de resumen de cada grupo.
Puede utilizar la cláusula HAVING para especificar los grupos que se van a
mostrar y, por lo tanto, restringir los grupos según la información de
agregación.
Recuperación de datos mediante la sentencia SQL SELECT
Recuperación de datos mediante la sentencia SQL SELECT
SELECT
SELECT *|{[DISTINCT]
*|{[DISTINCT] columna|expresión
columna|expresión [alias],
[alias], ...}
...}
FROM
FROM tabla
tabla
[WHERE
[WHERE condición(es)]
condición(es)]
[GROUP
[GROUP BY
BY expresión_de_agrupamiento]
expresión_de_agrupamiento]
[HAVING
[HAVING condición_agrupamiento]
condición_agrupamiento]
[ORDER
[ORDER BY
BY columna|expresión|posición
columna|expresión|posición [ASC|DESC]
[ASC|DESC]
La cláusula ORDER BY se puede utilizar para ordenar las filas.
Sin embargo, si utiliza la cláusula ORDER BY, debe ser la última cláusula de la
sentencia SQL.
Además, puede especificar una expresión, un alias o una posición de columna como la
condición de ordenación.
Recuperación de datos mediante la sentencia SQL SELECT
1. Para invertir el orden en el que se muestran las filas, especifique la palabra clave
DESC después del nombre de columna en la cláusula ORDER BY. El ejemplo de la
diapositiva ordena el resultado por el empleado contratado más recientemente.
2. También puede utilizar un alias de columna en la cláusula ORDER BY. El
ejemplo de la diapositiva ordena los datos por salario anual.