Академический Документы
Профессиональный Документы
Культура Документы
Santiago Faci
santi@rastafurbi.org
6 de Enero de 2004
Contents
1 Introducción a SQL 3
1.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Tipos de consultas SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1
CONTENTS 2
6 Funciones 16
6.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.2 Funciones aritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.3 Funciones de cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1 Introducción a SQL
1.1 Introducción
El lenguaje SQL (Structured Query Language) permite la comunicaci ón con el sistema de gestión de la
base de datos. Actualmente es el lenguaje estándar para la gestión de bases de datos relacionales para
ANSI (American National Standard Institute) e ISO (International Standarization Organization). Entre
las principales caracterı́sticas de este lenguaje destaca que es un lenguaje para todo tipo de usuarios
ya que el usuario que lo emplea especifica qué quiere, pero no dónde ni cómo, de manera que permite
realizar cualquier consulta de datos.
• Sentencias DDL (Data Description Language : Lenguaje de Descripci ón de Datos). Se trata del
lenguaje con el que se crea y mantiene la estructura de nuestra base de datos. Con él se pueden
realizar las siguientes tareas:
• Sentencias DML (Data Manipulation Language : Lenguaje de Manipulaci ón de Datos). Sirve para
manipular los datos contenidos en la base de datos.
Tipo NUMBER
Con este tipo se almacenan datos numéricos, enteros y decimales, con o sin signo. Entre paréntesis se
indicará los dı́gitos de precisión que se desee para el número declarado y el número de dı́gitos a la derecha
del punto decimal. Por ejemplo SALARIO NUMBER(10,2) declara un tipo NUMBER de 10 dı́gitos de
precisión de los cuales 2 irán a la derecha del punto decimal.
Tipo LONG
Este tipo almacena cadenas de caracteres de longitud variable de hasta 2 gigabytes de informaci ón. Se
usa para almacenar textos muy grandes. Existen una serie de restricciones asociadas a este tipo de dato:
Tipo DATE
Este tipo se usa para almacenar información de fechas y horas. Cada tipo DATE almacena la siguiente
información: Siglo/Año/Mes/Dı́a/Hora/Minutos/Segundos. Por defecto, el formato utilizado por este tipo
de dato es: DD/MM/YY.
Ejemplo: FECHA DATE
Donde:
• columna1, columna2, . . . son los nombres de las columnas que contendrá cada fila.
Ejemplo:
2 CREACIÓN, SUPRESIÓN Y MODIFICACIÓN DE TABLAS 5
Ejemplo:
..................
FECHA DATE DEFAULT SYSDATE,
NOMBRE VARCHAR(20) DEFAULT ’No definido’,
.......................
2 CREACIÓN, SUPRESIÓN Y MODIFICACIÓN DE TABLAS 7
....................
NOMBRE VARCHAR(20),
EDAD NUMBER,
CURSO NUMBER,
CONSTRAINTS COMP_EDAD CHECK (EDAD BETWEEN 5 AND 20),
CONSTRAINTS NOMBRE_MAYUS CHECK (NOMBRE=UPPER(NOMBRE)),
CONSTRAINTS COMP_CURSO CHECK (CURSO IN (1,2,3))
...................
Nota: La restricción NOT NULL es similar a: CHECK (<nombre columna> IS NOT NULL).
....................
NOMBRE VARCHAR(20) UNIQUE,
...................
Ejemplo II:
...................
NOMBRE VARCHAR(20),
CONSTRAINTS NOMBRE_UNI UNIQUE (NOMBRE),
...................
Tendremos que tener cuidado con intentar borrar tablas cuyas claves principales est én referenciadas
como claves ajenas en otras tablas, tal y como ocurrı́a con la tabla EMPLEADO y PROVINCIAS en
un ejemplo anterior. Si intentásemos suprimir la tabla PROVINCIAS nos darı́a un error debido a que
podrı́an existir claves ajenas haciendo referencia a esas claves primarias, es decir, existe una restricci ón
de clave ajena en la tabla EMPLEADO que referencia a la clave primaria de la tabla PROVINCIAS.
2 CREACIÓN, SUPRESIÓN Y MODIFICACIÓN DE TABLAS 8
Entonces, para borrar esta tabla hay que usar la opción CASCADE CONSTRAINTS, que suprimirá todas
las restricciones de integridad que se refieran a claves de la tabla borrada.
Ejemplo:
Ejemplo:
Podemos suponer una tabla ALUMNO con unas determinadas columnas, y que a dicha tabla quere-
mos añadir nuevas columnas. Previamente a esto y una vez creada la tabla ALUMNO podemos visualizar
su descripción 1 antes y después de la modificación para ver lo sucedido. Añadimos dos columnas EDAD
y CURSO a la tabla ya existente ALUMNO.
Pero a la hora de añadir columnas a una tabla hay que tener en cuenta diversos factores:
• Si la columna no está definida como NOT NULL, se le puede añadir en cualquier momento.
• Si la columna está definida como NOT NULL, se puede añadir la columna sin la restricción NOT
NULL, después se da valor a la columna para todas sus filas 2 y finalmente se modifica la columna
a NOT NULL.
También podemos encontrarnos con el caso de que queramos modificar la longitud de la columna
NOMBRE de la tabla ALUMNO. Queremos cambiar su tamaño de 10 a 3, por ejemplo:
1
DESC ALUMNO
2
UPDATE ALUMNO SET CURSO=0
2 CREACIÓN, SUPRESIÓN Y MODIFICACIÓN DE TABLAS 9
En este caso nos encontramos con un error ya que no es posible disminuir la longitud de una columna
a no ser que este vacı́a. En el caso de que queramos aumentar su longitud no nos encontraremos con ese
problema. En general, al modificar una columna de una tabla se han de tener en cuenta varios aspectos:
• Si la columna es NULL en todas sus filas se puede disminuir la longitud y modificar el tipo de
dato.
• La opción MODIFY . . . NOT NULL sólo será posible cuando la tabla no contenga ninguna
fila con valor nulo en la columna que se modifica.
Ejemplo:
En general, a la hora de modificar restricciones, nos podemos encontrar con casos parecidos a los
que nos encontrábamos al modificar las columnas de las tablas ya creadas. Por ejemplo, si quiero a ñadir
una restricción a una columna de la manera siguiente:
ALTER TABLE EMPLEADO ADD CONSTRAINT SUELDO_ALTO CHECK ( SUELDO > 100000 )
Podemos encontrarnos con un error si existe alguna fila de la tabla EMPLEADO en la que el valor de
la columna SUELDO no cumpla esa nueva restricción. Si quisiéramos añadir la restricción deberı́amos
hacer a todos los valores de la columna SUELDO mayores del valor que se indique en la restricci ón en
este caso.
Ejemplo:
Donde:
• nombre vista es el nombre de la vista.
• columna1, columna2, . . . son los nombres de las columnas que contendrá la vista. Si no se ponen,
se asumirán los nombres de las columnas que devuelva la consulta.
• AS consulta determinará las columnas y tablas que contendrá la vista.
Ejemplo: Vamos a crear por ejemplo una vista que contenga parte de las columnas de una tabla
EMPLEADO:
De esta manera, obtenemos una vista que contendrá los datos de las columnas APELLIDO, OFICIO
y SALARIO de las filas cuyo NRO DEPT sea igual a 30.
Podrı́amos haberla creado dando otros nombres a las columnas:
Podemos visualizar los nombres de las vistas creadas con sus textos de la siguiente manera:
Ejemplo:
Ejemplo: Podemos consultar los apellidos de los ENCARGADOS de la vista DEP 30 creada anteri-
ormente de la siguiente manera:
SELECT APELL
FROM DEP_30
WHERE OFIC=’ENCARGADO’
Donde:
• columna1, columna2, . . . son los nombres de las columnas donde se introducen los valores. Si no
se especifica ninguna columna, se consideran todas las columnas de la tabla.
• valor1, valor2, . . . son los valores que se asignarán a cada una de las columnas. Dichos valores
deberán coincidir con el tipo de dato de la columna que le corresponda. Si no se especifica la
columna, ésta tomará valor NULL siempre que sea posible. En caso de que no se especifique lista
de columnas se deberá dar valor a todas.
Ejemplo:
UPDATE <nombre_tabla>
SET <columna1> = <valor1>, <columna2> = <valor2> . . .
WHERE <condición>
Donde:
Ejemplo:
UPDATE PROFESORES
SET COD_CENTRO=24
WHERE APELLIDOS=’apellido1 apellido2, nombre’
Ejemplo:
DELETE PROFESORES WHERE COD_CENTRO=24
Donde expr columna puede ser una columna de una tabla, una constante, una expresi ón aritmética,
una función o varias funciones anidadas.
FROM
Especifica la tabla o lista de tablas de las que se recuperan los datos.
Ejemplo: Queremos consultar los nombres de alumnos y su nota de la tabla ALUMNOS:
Es posible asociar un nombre diferente a las tablas mediante lo que se conoce como alias.
Ejemplo: Damos el nombre A a la tabla ALUMNOS
Esto nos podrá ser de gran utilidad cuando trabajemos con consultas de tablas diferentes en las que
coincidan los nombres de algunas columnas entre ellas.
WHERE
Obtiene las filas que cumplen la expresión que se indica. La complejidad de la expresión que acompaña
a esta cláusula es prácticamente ilimitada, existen multitud de combinaciones diferentes. El forma 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. Los operadores de com-
paración puede ser los siguientes: =, >, <, >=, <=, !=, <>, IN, NOT IN, BETWEEN,
NOT BETWEEN, LIKE. Además, se puede construir condiciones múltiples usando los operadores
lógicos AND, OR Y NOT. Se pueden usar paréntesis si se desea forzar algún orden de evaluación:
Ejemplos:
WHERE NOTA = 5
WHERE (NOTA = 10) AND (CURSO = 1)
WHERE (NOTA IS NULL) AND (UPPER (NOMBRE) = ’PEDRO’)
5 CONSULTA DE LOS DATOS 14
ORDER BY
Especifica el criterio de clasificación del resultado de la consulta. ASC especifica ordenaci ón ascendente
y DESC descendente. Es posible anidar los criterios de manera que el de la izquierda ser á el principal:
SELECT *
FROM ALUMNOS
ORDER BY NOMBRE DESC, CURSO DESC
ALL
Recupera todas las filas, aunque estén repetidas.
DISTINCT
Sólo recupera las filas que son distintas.
Ejemplo: Queremos listar todos los nombres diferentes que tienen nuestros alumnos (Obviamente
siempre habrá alguien con el mismo nombre, de manera que queremos ver la variedad, no queremos ver
los repetidos).
SELECT DISTINCT NOMBRE FROM ALUMNOS
SELECT NOMBRE
FROM ALUMNOS
WHERE CURSO IS NULL
IN
El operador IN nos permite comprobar si una expresión pertenece o no a un conjunto de valores, haciendo
ası́ posible la realización de comparaciones con múltiples valores. Su formato es el siguiente:
Ejemplo:
Consultar los apellidos de los empleados cuyo número de departamento sea 10 ó 30.
SELECT APELLIDO
FROM EMPLEADOS
WHERE DPTO_NO IN (10,30)
Consultar los apellidos de los empleados cuyo número de departamento sea ni 10 ni 30.
SELECT APELLIDO
FROM EMPLEADOS
WHERE DPTO_NO NOT IN (10,30)
BETWEEN
El operador BETWEEN comprueba si un valor está comprendido o no dentro e un rango de valores, desde
un valor inicial a un valor final. Su formato es el siguiente:
Ejemplo:
Obtener el apellido de los empleados cuyo salario está comprendido entre 150000 y 200000:
6 Funciones
6.1 Introducción
Las funciones se usan dentro de expresiones y actúan con los valores de las columnas, variables o con-
stantes. Por ejemplo, poner en mayúscula una cadena, contar el número de datos de una columna, etc . .
. Se utilizan en cláusulas SELECT, WHERE, ORDER BY. Es posible el anidamiento de funciones.
• COUNT(* — expresión) Cuenta el número de veces que ’expresión’ evalúa algún dato.
• DISTINCT En las funciones de grupo se pueden indicar DISTINCT y ALL como argumentos.
Su uso más normal es en COUNT
• LOWER(ch) Devuelve la cadena ’ch’ con todas sus letras convertidas a min úsculas.
• UPPER(ch) Devuelve la cadena ’ch’ con todas sus letras convertidas a may úsculas.
7 CLÁUSULAS AVANZADAS DE SELECCIÓN 17
SELECT . . .
FROM . . .
GROUP BY <columna1>, <columna2>, <columna3> . . .
HAVING <condición>
ORDER BY . . .
Los datos seleccionados en la sentencia SELECT que lleva el GROUP BY deben ser una constante,
una función de grupo (SUM, COUNT, AVG . . .) o una columna expresada en el GROUP BY. Adem ás,
si se selecciona más de un conjunto de filas, GROUP BY controlas que las filas de la tabla original sean
agrupadas en una temporal. De la misma manera que existen condiciones de b úsqueda con la cláusula
WHERE para filas individuales, podemos imponer condiciones de b úsqueda para grupos de filas con
HAVING. La cláusula HAVING se emplea para controlar que conjuntos de filas visualizar. Se eval úa
sobre la tabla devuelta por GROUP BY y no puede existir sin la cláusula anterior. HAVING es como la
cláusula WHERE pero trabaja con grupos de filas, es decir, pregunta a los resultados de las funciones de
grupo lo cual WHERE no puede hacer.
Ejemplo:
i. Queremos visualizar el número de empleados que hay en cada departamento de la tabla EMPLEADOS.
ii. Queremos visualizar los departamentos con más de 4 empleados.
En los ejemplos anteriores, si además queremos ordenar la salida por número de empleados podemos
utilizar una orden ORDER BY de la siguiente manera:
Ası́, se seleccionarán todas las filas de la tabla1 aunque no tenga correspondencia con las filas de
la tabla2. Se denota con el sı́mbolo (+), tal y como se puede observar, detrás de la columna de la tabla
tabla2 en la cláusula WHERE.
SELECT . . .
FROM . . .
WHERE . . .
<operador>
SELECT . . .
FROM . . .
WHERE . . .
• UNION combina los resultados de las dos consultas. Si existen filas duplicadas, s ólo aparecerán
una vez.
• UNION ALL combina los resultados de las dos consultas. Usando este operador aparecer án las
filas duplicadas.
• INTERSECT devuelve las filas que coinciden en las dos consultas. Las filas duplicadas se elimi-
nan.
• MINUS devuelve las filas que están en la primera consulta y no están en la segunda. Las filas
duplicadas de la primera consulta se eliminarán antes de comenzar con la comparación con la otra
consulta.
Existen una serie de reglas para estos operadores que conviene conocer:
• Los nombres de las columnas de la primera consulta no tienen porque coincidir con los de la
segunda consulta.
Por último, añadir que estos operadores se pueden encadenar de la siguiente manera: