Professional Documents
Culture Documents
Resumen Tema 03 - Introducción A SQL Parte 1
Resumen Tema 03 - Introducción A SQL Parte 1
CONTENIDO
Parte 1:
• Comentarios generales sobre SQL
• Definición de datos
• Estructura básica de las consultas
• Operaciones básicas adicionales
• Operaciones sobre conjuntos
• Valores nulos
Parte 2:
• Funciones de agregación
• Subconsultas anidadas
• Modificación de la base de datos
Historía
– La declaración primary key se puede hacer directamente en la declaración del atributo, como se
hace en el ejemplo de arriba con el atributo asignatura_id
Añadir tuplas a una relación
• Todas las relaciones recién creadas están inicialmente vacías
• Se utiliza el comando insert para introducir datos en la relación
Ejemplo:
– Se desea introducir el hecho de que existe un profesor de nombre Smith en el
departamento de Biología con un profesor_id 10211 y un sueldo de 66.000 €, se
escribirá:
• La clave all especifica explícitamente que los duplicados no se eliminen (valor por defecto)
select all nombre_dept
from profesor
Cláusula SELECT (3/3)
• Un asterisco (*) en la cláusula select indica “todos los atributos”
select *
from profesor
• La cláusula select puede contener expresiones aritméticas que incluyan los operadores +, –,
* y / con constantes o atributos de las tuplas.
Ejemplo:
La consulta:
select ID, nombre, nombre_dept, sueldo /12
from profesor
devolverá a una relación que es la misma que la relación profesor, excepto que el atributo
sueldo se divide entre 12
Cláusula WHERE (1/2)
• La cláusula where permite seleccionar solamente aquellas filas de la relación resultado de la
cláusula from que satisfagan determinado predicado
– Corresponde al predicado de la selección del álgebra relacional.
Ejemplo: encontrar los nombres de todos los profesores del departamento de Informática
cuyo sueldo sea superior a 70.000€.
select nombre
from profesor
where nombre_dept = 'Informática' and sueldo > 70000;
Ejemplo:
– Si un nombre de atributo aparece en más de una relación, para referenciarlo hay que
usar el prefijo del nombre de la relación para deshacer la ambigüedad:
• profesor.ID Atributo ID de la relación profesor
• enseña.ID Atributo ID de la relación enseña
Cláusula FROM (2/2)
• from profesor, enseña
– El producto cartesiano: cada tupla de profesor se combina con cada tupla de enseña
Resumen consultas (1/2)
• Una consulta característica de SQL tiene la forma:
• Comparar tuplas de la misma relación: Encontrar los nombres de todos los profesores cuyo sueldo
sea mayor que al menos un profesor del departamento de Biología
select distinct T. nombre
from profesor as T, profesor as S
where T.sueldo > S.sueldo and S.nombre_dept = 'Biología';
Operaciones básicas – Cadena caracteres (1/3)
• SQL especifica las cadenas de caracteres encerrándolas entre comillas simples
• La norma SQL especifica que la operación de igualdad entre cadenas de caracteres sí es
sensible a mayúsculas. SQL Server y MySQL no.
• Hay varias funciones que operan con cadenas:
– Concatenación de cadenas: ||
– Extraer subcadenas: substring()
– Cálculo longitud de subcadenas: len() o length()
– Conversión a mayúsculas o minúsculas: upper() y lower()
– Eliminar espacios en blanco al final: trim()
• Se pueden usar operadores de comparación con cadenas
Operaciones básicas – Cadena caracteres (2/3)
• Para realizar la comparación de patrones se usan los operadores
– like cierto si cumple el patrón
– not like cierto si no cumple el patrón
• Los patrones se escriben utilizando caracteres especiales:
– Tanto por ciento (%). % encaja con cualquier subcadena
– Guión bajo (_). _ encaja con cualquier carácter, pero sólo uno
– Los patrones distinguen mayúsculas de minúsculas
• Ejemplos de patrones:
– ' Intro%' la cadena empieza por “lntro”.
– ' %lnfor%' la cadena contiene “Infor”
– '_ _ _' la cadena tiene exactamente tres caracteres
– '_ _ _% ' la cadena tiene, al menos, tres caracteres.
Operaciones básicas – Cadena caracteres (3/3)
Ejemplo:
– Encontrar los nombres de todos los departamentos cuyo nombre de edificio incluye la
subcadena “Watson”
select nombre_dept
from departamento
where edificio like '%Watson%';
Operaciones básicas – Orden resultado
• SQL permite cierto control sobre el orden en el cual se presentan las tuplas de una relación mediante
la cláusula order by
– Por defecto orden ascendente pero se puede cambiar:
• desc para especificar orden descendente
• asc para especificar orden ascendente (cadenas -> alfabético)
Ejemplo: lista, por orden alfabético, de todos los profesores del dpto. de Física
select nombre
from profesor
where nombre_dept = 'Física'
order by nombre;
Ejemplo: listado completo profesores por orden descendente de sueldo y cuando sueldo sea igual,
ordena alfabéticamente por nombre
select *
from profesor
order by sueldo desc, nombre asc;
Operaciones básicas – Predicados where
• Para simplificar predicados de la clausula where a la hora de comparar valores
– between cierto si el valor está dentro de un rango
– not between cierto si el valor no está dentro de un rango
Ejemplo: Lista de los nombres de los profesores con sueldos entre 90.000 € y 100.000 €
36
Operaciones sobre conjuntos (4/5)
Ejemplo:
– Para encontrar todas las asignaturas que se enseñaron en el otoño de 2009, así como en
la primavera de 2010
Consulta1 Ç Consulta2
(select asignatura_id
from sección
where semestre = 'Otoño' and año = 2009;)
intersect
(select asignatura_ id
from sección
where semestre = 'Primavera' and año = 2010;)
Operaciones sobre conjuntos (5/5)
Ejemplo:
– Para encontrar todas las asignaturas que se enseñaron en el semestre de otoño de 2009
pero que no se enseñaron en el semestre de primavera de 2010
Consulta1 - Consulta2
(select asignatura_id
from sección
where semestre = 'Otoño' and año = 2009;)
except
(select asignatura_ id
from sección
where semestre = 'Primavera' and año = 2010;)
Valores nulos (1/2)
• Algunos de los valores de una tupla puede tener valor nulo: null
• null significa que el valor es desconocido o no existe
• El problema surge al trabajar con estos valores nulos
– Las comparaciones con valores null son un problema (diapositiva siguiente)
– El resultado de cualquier operación aritmética que incluyan, por ejemplo +, -, * o /, es null si
cualquier valor de entrada es null
Ejemplo: encontrar a todos los profesores que aparezcan en la relación profesor con valores null en el
atributo sueldo
select nombre
from profesor
where sueldo is null;
Valores nulos (2/2)
• SQL trata como unknown (desconocido) el resultado de cualquier comparación en la que intervenga
el valor null excepto para los predicados is null o is not null.
– 5 < null o null <> null o null = null devuelven unknown
• El resultado del predicado de una clausula where se trata como false si se evalúa como
unknown