Beruflich Dokumente
Kultur Dokumente
1
Sentencias de creacin de las tablas.............................................................................................1
Contenido de las tablas ......................................................................................................................2
SQL ........................................................................................... 3
FORMATO BSICO DE LA SENTENCIA SELECT.........................................................................................3
ELIMINACION DE FILAS REPETIDAS...........................................................................................6
EXPRESIONES ..........................................................................................................................................7
PREDICADOS.............................................................................................................................................9
Predicados Simples..............................................................................................................................9
SENTENCIAS SUBORDINADAS ....................................................................................................................11
Predicados compuestos .................................................................................................................... 12
PREDICADOS PROPIOS DE SQL ................................................................................................................. 12
Comprobacin de valor nulo. Predicado NULL........................................................................... 12
Prueba de pertenencia a un conjunto. Predicado IN.............................................................. 13
Predicados cuantificados (ALL, SOME, ANY).......................................................................... 14
Cuantificador ALL.............................................................................................................................. 15
Cuantificador SOME......................................................................................................................... 15
Cuantificador ANY ............................................................................................................................ 16
Predicado BETWEEN - AND .......................................................................................................... 16
Predicado LIKE ................................................................................................................................... 17
FUNCIONES DE COLUMNAS ............................................................................................................ 18
FUNCIONES COLECTIVAS ................................................................................................................ 18
REGLAS Y FORMATOS DE LAS FUNCIONES COLECTIVAS ................................................ 19
FORMATO 1: ....................................................................................................................................... 19
FORMATO 2:...................................................................................................................................... 20
FORMATO 3:...................................................................................................................................... 20
CONSULTAS CON AGRUPAMIENTO DE FILAS ........................................................................ 21
CLAUSULA GROUP BY ..................................................................................................................... 21
CLAUSULA HAVING........................................................................................................................ 22
HAVING SIN GROUP BY ............................................................................................................... 23
SENTENCIA SELECT CON AGRUPAMIENTO DE FILAS....................................................... 23
CONSULTAS SOBRE VARIAS TABLAS........................................................................................ 24
CALIFICACION DE NOMBRES DE COLUMNAS................................................................... 24
LA CLAUSULA FROM ...................................................................................................................... 24
OPERACION DE REUNIN (JOIN) ............................................................................................... 25
SENTENCIAS SUBORDINADAS..................................................................................................... 27
CONSULTAS CORRELACIONADAS ............................................................................................... 27
Predicado EXISTS ........................................................................................................................... 28
EJERCICIOS: ...............................................................................29
COMPOSICIN DE CONSULTAS ................................................................................................... 32
Clusula UNION [ALL] .................................................................................................................... 32
CREACIN DE VISTAS ...................................................................................................................... 34
INSERCIN, MODIFICACIN Y BORRADO DE INFORMACIN .....................35
INSERCION, MODIFICACION Y BORRADO DE INFORMACION EN VISTAS............ 37
Clusula WITH CHECK OPTION: ................................................................................................ 38
SEGURIDAD.................................................................................39
Bases de Datos. SQL. Curso 2000-2001
ii
-- ------------------ --- CREAR LA TABLA EMP --- ------------------ -CREATE TABLE EMP (
ENO
INT
NOT NULL PRIMARY KEY,
ENAME
CHAR (6)
NOT NULL UNIQUE,
JOB
CHAR (9)
NOT NULL,
MGR
INT
NULL,
HIREDATE
DATETIME
NOT NULL,
SAL
INT
NOT NULL,
COMM
INT
NULL,
DEPTNO
INT
NOT NULL REFERENCES DEPT
)
ALTER TABLE EMP
ADD CONSTRAINT MANAGER FOREIGN KEY (MGR) REFERENCES EMP
-- ----------------------- --- CREAR LA TABLA SALGRADE --- ----------------------- -CREATE TABLE SALGRADE (
GRADE
INT
NOT NULL PRIMARY KEY,
LOSAL
INT
NOT NULL,
HISAL
INT
NOT NULL
)
EMP
ENO
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
ENAME
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
JOB
CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
MGR HIREDATE
7902 17/12/80
7698 20/02/81
7698 22/02/81
7839 02/04/81
7698 28/10/81
7839 01/05/81
7839 09/06/81
7566 09/12/82
NULL 17/11/81
7698 08/10/81
7788 12/01/83
7698 03/12/81
7566 03/12/81
7782 23/01/82
SAL
800
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300
COMM DEPTNO
NULL
20
300
30
500
30
NULL
20
1400
30
NULL
30
NULL
10
NULL
20
NULL
10
0
30
NULL
20
NULL
30
NULL
20
NULL
10
DEPT
DEPTNO
10
20
30
40
DNAME
ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
NEW YORK
DALLAS
CHICAGO
BOSTON
SALGRADE
GRADE
1
2
3
4
5
LOSAL
HISAL
700
1200
1201
1400
1401
2000
2001
3000
3001
9999
SQL
Las sentencias SQL se componen de clusulas, cada una de las cuales comienza con una palabra
reservada determinada.
SAL
----------800
1600
1250
2975
1250
2850
2450
3000
5000
1500
1100
950
3000
1300
COMM
----------NULL
300
500
NULL
1400
NULL
NULL
NULL
NULL
0
NULL
NULL
NULL
NULL
DEPTNO
----------20
30
30
20
30
30
10
20
10
30
20
30
20
10
HIREDATE
---------1980-12-17
1981-02-20
1981-02-22
1981-04-02
1981-10-28
1981-05-01
1981-06-09
1982-12-09
1981-11-17
1981-10-08
1983-01-12
1981-12-03
1981-12-03
1982-01-23
Si se escribe un asterisco, las columnas sern todas las de la tabla de la clusula FROM, en el
mismo orden en el que fueron creadas en la sentencia CREATE TABLE.
Ejemplo:
2. Seleccionar todas las columnas de la tabla DEPT.
SELECT *
FROM DEPT;
DEPTNO
----------10
20
30
40
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
Los nombres de las columnas de la tabla resultante sern los mismos que los de las columnas de
la tabla de la que proceden, salvo en el caso de que se usen expresiones. En este caso,
dependiendo del gestor, pueden desde no tener nombre (!) hasta tener nombres generados por
el propio gestor. Pueden salir, incluso, columnas con el mismo nombre ( !). Puede asignarse un
nombre, o cambiar el nombre de la columna escribiendo el nuevo nombre a continuacin del
nombre de la columna o de la expresin que genera la columna en la sentencia SELECT. Si el
nombre tiene espacios en blanco, debe escribirse entre comillas.
Ejemplo:
SELECT ENAME "NOMBRE DEL EMPLEADO"
FROM EMP;
NOMBRE DEL EMPLEADO
------------------ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
KING
MARTIN
MILLER
SCOTT
SMITH
TURNER
WARD
(14 filas afectadas)
La evaluacin de la condicin expresada en la clusula WHERE puede resultar verdadera o no.
La columna especificada en la clusula ORDER BY ser, habitualmente, una de las que aparecen
en la clusula SELECT.
Si no se especifica ORDER BY, las filas se devuelven en cualquier orden. La nica manera de
obtener las filas ordenadas es solicitarlo explcitamente mediante ORDER BY.
Cuando se ordena ascendentemente por los valores de una columna las filas se presentan de tal
forma que cada valor sea menor o igual que el siguiente para esa columna. Tambin se puede
clasificar el resultado por ms de una columna, para ello se escriben sus nombres o sus
nmeros separados por comas. Si se especifica ms de una columna, se clasifica por la primera
y despus, para cada valor clasificado de la primera, por la segunda y as sucesivamente. Si
existen valores nulos, la posicin de stos depende del SGBDR. En DB2 se colocan al final. En
Sybase SQL Server y en Microsoft SQL Server se colocan al principio.
Ejemplo:
3. Seleccionar los nombres y los empleos de todos los empleados, ordenados por empleo.
SELECT JOB, ENAME
FROM EMP
ORDER BY JOB;
JOB
--------ANALYST
ANALYST
CLERK
CLERK
CLERK
CLERK
MANAGER
MANAGER
MANAGER
PRESIDENT
SALESMAN
SALESMAN
SALESMAN
SALESMAN
ENAME
-----SCOTT
FORD
SMITH
ADAMS
JAMES
MILLER
JONES
BLAKE
CLARK
KING
ALLEN
WARD
MARTIN
TURNER
Se puede especificar un nmero en lugar del nombre de una columna. Si se hace as, equivale a
escribir el nombre de la columna cuya posicin en la clusula SELECT corresponde a ese
nmero. Por ejemplo, si se especifica ORDER BY 2 equivale a escribir el nombre de la segunda
columna especificada en la clusula SELECT.
Ejemplo:
5. Seleccionar los empleos que hay en cada departamento, ordenados por departamento.
SELECT DEPTNO, JOB
FROM EMP
ORDER BY 1;
DEPTNO
----------10
10
10
20
20
20
20
20
30
30
30
30
30
30
JOB
--------MANAGER
PRESIDENT
CLERK
CLERK
MANAGER
ANALYST
CLERK
ANALYST
SALESMAN
SALESMAN
SALESMAN
MANAGER
SALESMAN
CLERK
ENAME
-----SCOTT
FORD
MILLER
ADAMS
JAMES
SMITH
JONES
BLAKE
CLARK
KING
ALLEN
TURNER
WARD
MARTIN
SAL
----------3000
3000
1300
1100
950
800
2975
2850
2450
5000
1600
1500
1250
1250
Por ejemplo:
SELECT DEPTNO
FROM EMP
DEPTNO
----------20
30
30
20
30
30
10
20
10
30
20
30
20
10
Para eliminar las filas repetidas, puede incluirse la palabra reservada DISTINCT antes del
nombre de las columnas. En este caso, dos valores nulos se consideran iguales.
Ejemplos:
7. Seleccionar los distintos departamentos que existen en la tabla EMP.
SELECT DISTINCT DEPTNO
FROM EMP;
DEPTNO
----------10
20
30
EXPRESIONES
En una sentencia para formular una consulta se pueden realizar operaciones con los datos. Por
ejemplo, se puede solicitar el resultado del producto de los valores de dos columnas, o el valor
de una columna dividido por un valor. Para ello se utilizan expresiones.
Tambin pueden utilizarse expresiones en las condiciones de bsqueda impuestas en la clusula
WHERE.
Una expresin es una combinacin de operadores, operandos y parntesis. El resultado de la
ejecucin de una expresin es un nico valor.
En el formato de la sentencia SELECT descrito anteriormente, las expresiones pueden
utilizarse en la clusula SELECT en lugar de nombres de columnas y en la clusula WHERE en la
formulacin de la condicin donde uno o ambos de los valores a comparar pueden ser el
resultado de evaluar una expresin.
Los operandos pueden ser nombres de columnas, constantes u otras expresiones. Otros tipos
de operandos, como las funciones de columna se vern ms adelante.
Los operadores actan sobre datos homogneos, es decir bien numricos o bien alfanumricos.
Con los datos de tipo numrico slo se pueden realizar operaciones aritmticas, cuyos
operadores son + (suma), - (resta), * (multiplicacin) y / (divisin).
Ejemplos:
8. Calcular el salario anual a percibir por cada empleado.
SELECT ENAME, SAL * 4 * 12 SAL ANUAL
FROM EMP;
ENAME
-----SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
9.
SAL ANUAL
----------38400
76800
60000
142800
60000
136800
117600
144000
240000
72000
52800
45600
144000
62400
Mostrar el nombre del empleado y una columna que contenga el salario multiplicado
por la comisin cuya cabecera sea BONO.
SELECT ENAME, SAL*COMM BONO
FROM EMP;
ENAME
-----SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
BONO
----------NULL
480000
625000
NULL
1750000
NULL
NULL
NULL
NULL
0
NULL
NULL
NULL
NULL
Los operadores para tipos de datos alfanumricos varan de una implementacin de SQL a otra.
En el apartado correspondiente estudiaremos algunos de los soportados por Sybase SQL
Server.
PREDICADOS
En las consultas vistas hasta ahora hemos visto consultas sin condiciones. Pueden especificarse
condiciones de bsqueda ms complejas que proporcionan una gran potencia de seleccin al
SQL. Estas condiciones se denominan predicados.
Un predicado expresa una condicin entre valores y el resultado de su evaluacin puede ser
"verdadero", "falso" o "desconocido"
Los predicados se expresan en la clusula WHERE y en otras que veremos ms adelante.
Slo se considera satisfecha la condicin de bsqueda expresada en un predicado cuando toma
el valor "Verdadero". Esto quiere decir que el resultado de la evaluacin de un predicado
expresado en la clusula WHERE da lugar a la recuperacin de las filas para las que toma el
valor "Verdadero" y se rechazarn las filas para las que tome el valor "Falso" o "Desconocido".
Los predicados pueden clasificarse en simples y compuestos.
Predicados Simples
Predicados bsicos:
Expresan condiciones de comparacin entre dos valores. Son =, <, > o las siguientes
combinaciones de ellos:
Predicado
x=y
x <> y
x<y
x>y
x <= y
x >= y
"Verdadero" si y slo si
x es igual a y
x no es igual a y
x es menor que y
x es mayor que y
x es menor o igual que y
x es mayor o igual que y
10
ENAME
-----SCOTT
FORD
HIREDATE
---------1982-12-09
1981-12-03
Sentencias subordinadas
El segundo operador (y) puede ser, en lugar de una expresin, el resultado de la ejecucin de
otra sentencia SELECT, que deber ir entre parntesis y devolver como resultado un nico
valor. Es decir, la tabla resultante debe tener una sola columna y una fila o ninguna. Adems no
se puede especificar en ella la clusula ORDER BY. Si el resultado de esta sentencia SELECT
es una tabla vaca, su valor se toma como "desconocido".
15. Seleccionar los empleados cuyo salario sea superior al de ADAMS.
SELECT ENAME
FROM EMP
WHERE SAL > (SELECT SAL
FROM EMP
WHERE ENAME = ADAMS);
ENAME
-----ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
FORD
MILLER
16. Seleccionar los empleados que trabajan en el mismo departamento que CLARK.
SELECT ENAME
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = CLARK);
ENAME
-----CLARK
KING
MILLER
17. Encontrar a los empleados cuyo jefe es BLAKE.
SELECT ENAME
FROM EMP
WHERE MGR = (SELECT ENO
FROM EMP WHERE ENAME = BLAKE);
ENAME
-----ALLEN
WARD
MARTIN
TURNER
JAMES
11
Predicados compuestos
Lo visto hasta ahora son predicados simples. Los predicados compuestos son combinaciones de
predicados, simples o compuestos con los operadores lgicos AND, OR y NOT.
AND y OR se aplican a dos operandos, mientras que NOT se aplica a uno slo. En todos los
casos, los operandos son otros predicados.
Los predicados compuestos, al igual que los simples, pueden tomar los valores "Verdadero",
"Falso" o "Desconocido".
Cuando se utiliza AND, el resultado es "Verdadero" cuando los dos predicados lo son. Cuando
se utiliza OR, el resultado es "Verdadero" cuando lo es cualquiera de sus operandos (al menos
uno). Cuando se utiliza NOT, el resultado es verdadero cuando el predicado sobre el que se
aplica es "Falso".
Ejemplos:
18. Seleccionar el nombre de los vendedores que ganen ms de 1500.
SELECT ENAME
FROM EMP
WHERE JOB = SALESMAN
AND SAL > 1500;
ENAME
-----ALLEN
19. Seleccionar el nombre de aquellos que sean CLERK o trabajen en el departamento 30.
SELECT ENAME
FROM EMP
WHERE JOB = CLERK
OR DEPTNO = 30;
ENAME
-----SMITH
ALLEN
WARD
MARTIN
BLAKE
TURNER
ADAMS
JAMES
MILLER
Se utiliza para consular si el valor de la columna de una fila determinada es o no nulo. Si es nulo
el resultado ser "Verdadero", si no lo es "Falso". No puede tomar el valor "Desconocido".
12
Ejemplo:
20. Seleccionar aquellos empleados que tienen comisin.
SELECT ENAME
FROM EMP
WHERE COMM IS NOT NULL;
ENAME
-----ALLEN
WARD
MARTIN
TURNER
ENAME
-----SMITH
ALLEN
SCOTT
JOB
MGR
HIREDATE SAL
COMM
DEPTNO
--------- -------- ---------- --------- ---------- ---------CLERK
7902
1980-12-17 800
NULL
20
SALESMAN 7698
1981-02-20 1600
300
30
ANALYST
7566
1982-12-09 3000
NULL
20
13
ENAME
-----WARD
JONES
MARTIN
BLAKE
CLARK
KING
TURNER
ADAMS
JAMES
FORD
MILLER
JOB
--------SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
MGR
------7698
7839
7698
7839
7839
NULL
7698
7788
7698
7566
7782
HIREDATE
---------1981-02-22
1981-04-02
1981-10-28
1981-05-01
1981-06-09
1981-11-17
1981-10-08
1983-01-12
1981-12-03
1981-12-03
1982-01-23
SAL
---------1250
2975
1250
2850
2450
5000
1500
1100
950
3000
1300
COMM
--------500
NULL
1400
NULL
NULL
NULL
0
NULL
NULL
NULL
NULL
DEPTNO
---------30
20
30
30
10
10
30
20
30
20
10
Como hemos visto, cuando se utiliza una sentencia SELECT subordinada en un predicado de
comparacin, el resultado debe ser un valor nico (una tabla con una sola fila y una sola
columna).
14
Cuantificador ALL
"Falso" si para alguno de los valores no nulos la comparacin toma el valor "Falso"
"Desconocido" Si la comparacin es verdadera para todos los valores no nulos.
Cuantificador SOME
15
Cuantificador ANY
Ejemplo:
26. Seleccionar los empleados que ganen ms que alguno de los SALESMAN.
SELECT ENAME
FROM EMP
WHERE SAL > SOME (SELECT SAL
FROM EMP
WHERE JOB = SALESMAN);
ENAME
-----ALLEN
JONES
BLAKE
CLARK
SCOTT
KING
TURNER
FORD
MILLER
Formato:
expr_1 [NOT] BETWEEN expr_2 AND expr_3
Se utiliza para comprobar si un valor est comprendido entre otros dos (ambos inclusive), o no.
Si se omite NOT, el predicado es verdadero si el valor de expr_1 est comprendido entre el
valor de expr_2 y el de expr_3, ambos inclusive.
Si se especifica NOT, el predicado es verdadero si el valor de expr_1 no est en ese rango.
En el caso de V1 BETWEEN V2 AND V3:
Si ninguno de los valores de V1, V2 y V3 es nulo, el predicado es verdadero si el resultado de
V1 es mayor o igual que el de V2 y menor o igual que el de V3. En otro caso es "Falso".
Normalmente, el valor de V2 ser menor o igual que el de V3. De no ser as, el predicado ser
"Falso" para cualquier valor de V1. Salvo que V1 = V2 = V3, en cuyo caso el predicado es
verdadero.
Si alguno de los valores, V1, V2 o V3 es nulo, el predicado toma el valor desconocido.
Ejemplo:
27. Seleccionar aquellos cuyo salario est entre 2000 y 3000.
SELECT ENAME
FROM EMP
WHERE SAL BETWEEN 2000 AND 3000;
ENAME
-----JONES
BLAKE
CLARK
SCOTT
FORD
16
Predicado LIKE
Formato:
nom_columna [NOT] LIKE cte_alfanumrica
La columna debe ser de tipo alfanumrico.
Se utiliza para buscar combinaciones de caracteres que coincidan con un patrn especificado.
Ejemplo:
X LIKE Y
donde X es el nombre de una columna de tipo alfanumrico e Y una constante del mismo tipo
utilizada como patrn de bsqueda.
La constante alfanumrica puede contener cualquier carcter vlido, pero dos de ellos, el
carcter de subrayado (_) y el smbolo de porcentaje (%) tienen un significado especial.
17
A partir del valor de la cadena Y se generan otras cadenas de caracteres sustituyendo cada
carcter "_" por un nico carcter cualquiera y siempre uno, y cada "%" por una cadena
cualquiera de cualquier longitud (incluida la cadena vaca).
Los resultados pueden ser:
Si X no es nulo, el predicado es verdadero si su valor est incluido entre los que se pueden
generar a partir del patrn Y. Si no toma el valor "Falso".
Si X e Y son ambos cadenas vacas (cadenas de longitud cero), se conviene que el predicado
es verdadero.
Si X es nulo, el resultado es "Desconocido"
Evidentemente, si el valor de Y no contiene caracteres "_" o "%", el predicado X LIKE Y
equivale a X=Y.
Ejemplos:
29. Seleccionar aquellos empleados cuyo nombre empiece por A.
SELECT ENAME
FROM EMP
WHERE ENAME LIKE A%;
ENAME
-----ALLEN
ADAMS
30. Seleccionar aquellos empleados cuyo nombre tenga como segunda letra una D.
SELECT ENAME
FROM EMP
WHERE ENAME LIKE _D%;
ENAME
-----ADAMS
FUNCIONES DE COLUMNAS
Permiten obtener un solo valor como resultado de aplicar una determinada operacin a los
valores contenidos en una columna.
FUNCIONES COLECTIVAS
Son aquellas cuyo argumento es una coleccin de valores tomados de los pertenecientes a una o
ms columnas. Se llaman tambin por ello funciones de columna.
Se aplican a la coleccin de valores del argumento y producen un nico resultado a partir de
ellos.
Son:
AVG
MAX
MIN
SUM
COUNT
18
El argumento suele ser una expresin. Pueden utilizarse como operandos en las expresiones
utilizadas en la clusula SELECT.
Antes de aplicar las funciones se construyen uno o ms grupos de filas. La forma de construir
grupos se especifica mediante la clusula GROUP BY (que veremos ms adelante). Si no se
emplea GROUP BY se considera un solo grupo formado por todas las filas de la tabla que
cumplen el predicado de la clusula WHERE. A todas ellas se les aplican las funciones
colectivas y el resultado ser una tabla con una sola fila y con tantas columnas como
expresiones haya en la clusula SELECT.
FORMATO 1:
19
FORMATO 2:
nom_funcin (expresin)
nom_funcin: cualquiera, excepto COUNT
argumento: expresin en la que debe haber al menos un nombre de columna y no puede haber
una funcin colectiva.
Ejemplo:
35. Calcular el salario total mensual.
SELECT SUM(SAL * 4) SUMA
FROM EMP;
SUMA
----------116100
FORMATO 3:
COUNT (*)
Slo vlido para la funcin COUNT.
Devuelve el nmero de filas que hay en el grupo sobre el que se aplica.
Ejemplo:
36. Encontrar el n de trabajadores diferentes en el departamento 30 para aquellos
empleados cuyo salario pertenezca al intervalo [1000, 1800].
20
SELECT COUNT(*)
FROM EMP
WHERE DEPTNO = 30
AND SAL BETWEEN 1000 AND 1800;
----------4
CLAUSULA GROUP BY
----------3000
800
2450
5000
1250
----------3000
1300
2975
5000
1600
21
----------0
0
4
----------NULL
NULL
550
----------2
3
1
40. Seleccionar el salario mnimo, mximo y medio de los empleados agrupados por
empleo.
SELECT JOB, MIN(SAL), MAX(SAL), AVG(SAL)
FROM EMP
GROUP BY JOB;
JOB
--------ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
----------3000
800
2450
5000
1250
----------3000
1300
2975
5000
1600
----------3000
1037
2758
5000
1400
CLAUSULA HAVING
22
----------3000
2758
5000
----------3000
2450
5000
Aunque hay que particularizar su uso para cada gestor, puede utilizarse la clusula
HAVING sin un GROUP BY previo. En este caso se aplica la condicin al nico grupo de
filas formado por todas las filas de la tabla resultante.
Por ejemplo:
SELECT MAX(SAL), AVG (SAL)
FROM EMP
HAVING AVG(SAL) > 1000;
----------- ----------5000
2073
(1 filas afectadas)
23
Como para una tabla los nombres de todas sus columnas son diferentes, en una sentencia SQL
eln la que interviene una sola tabla, basta el nombre de una columna para designarla sin
ambigedad.
Sin embargo, si interviene ms de una tabla en una misma sentencia SQL, puede ocurrir que
algn nombre de columna se repita en ms de una de ellas. En este caso, para referirnos sin
ambigedad a una columna determinada, hay que indicar a qu tabla pertenece. Para ello se
escribe el nombre de la columna precedido del de la tabla y separados por un punto.
As, por ejemplo, el nombre reservas.num_vuelo se refiere a la columna num_vuelo de la tabla
reservas, y partes.num_vuelo a la columna num_vuelo de la tabla partes.
Cuando un nombre de columna se escribe de esta forma, se dice que est calificado por el
nombre de la tabla.
LA CLAUSULA FROM
En ella se puede especificar una lista de nombres de tablas separados por comas.
De esta forma, la siguiente clusula de la sentencia se aplicar al producto cartesiano de las
tablas especificadas en la clusula FROM.
Como en las tablas puede haber nombres de columnas repetidos, si en la sentencia se hace
referencia a alguno de ellos es necesario califacarlo.
Se puede simplificar la operacin de calificacin de nombres de columnas mediante el uso de
nombres locales tambin llamados alias. Estos nombres se asignan a las tablas en una sentencia
y cuyo mbito de uso se restringe a sta. Se definen en la clusula FROM, escribiendo detrs
del nombre de cada tabla el alias que se le quiere asignar. (Cuando se asigna un alias a una
tabla, todas las referencias calificadas a sus columnas deben usar el alias.)
Una tabla puede especificarse ms de una vez en una clusula FROM. En este caso es necesario
asignarle un alias.
24
25
Si hay columnas con el mismo nombre, es necesario calificarlas con el nombre de la tabla para
evitar ambigedades.
45. Nombre de todos los empleados, empleo, departamento y localidad.
SELECT ENAME, JOB, EMP.DEPTNO, LOC
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
ENAME
-----SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
JOB
--------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
DEPTNO
----------20
30
30
20
30
30
10
20
10
30
20
30
20
10
LOC
-------DALLAS
CHICAGO
CHICAGO
DALLAS
CHICAGO
CHICAGO
NEW YORK
DALLAS
NEW YORK
CHICAGO
DALLAS
CHICAGO
DALLAS
NEW YORK
MGR
----------7788
7698
7839
7839
7566
7698
7839
7698
7782
7566
7902
7698
7698
ENAME
-----SCOTT
BLAKE
KING
KING
JONES
BLAKE
KING
BLAKE
CLARK
JONES
FORD
BLAKE
BLAKE
26
47. Mostrar el nombre del empleado, su trabajo, el nombre y el cdigo del departamento
en el que trabaja.
SELECT ENAME, JOB, DNAME, DEPT.DEPTNO
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
ENAME
-----SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
JOB
--------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
DNAME
---------RESEARCH
SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING
DEPTNO
----------20
30
30
20
30
30
10
20
10
30
20
30
20
10
SENTENCIAS SUBORDINADAS
Ya se ha visto al describir el uso de predicados que dentro de una sentencia SELECT pueden
especificarse otras. Se dice entonces que stas son sentencias subordinadas a la primera.
Las sentencias subordinadas pueden especificarse en las clusulas WHERE y HAVING, como
parte de los predicados siguientes:
- Predicados bsicos
- Predicados cuantificados (ANY, SOME, ALL)
- Predicado EXISTS
- Predicado IN
Una sentencia subordinada de otra puede tener a su vez otras sentencias subordinadas a ella.
Llamamos sentencia externa a la primera de todas, la que no es subordinada de ninguna. Una
sentencia es antecedente de otra cuando esta es su subordinada directa o subordinada de sus
subordinadas a cualquier nivel.
A las sentencias subordinadas suele llamrselas anidadas. Puede haber hasta quince niveles de
anidamiento.
CONSULTAS CORRELACIONADAS
En las sentencias anidadas vistas hasta ahora, stas no hacen referencia a columnas de tablas
que no estn en su propia clusula FROM. Esto significa que el resultado de la sentencia
subordinada puede evaluarse independientemente de sus sentencias antecedentes de cualquier
nivel. El SGBDR las evala una sola vez y reemplaza los valores resultantes en el predicado
donde se encuentre.
27
Predicado EXISTS
Formato:
EXISTS (subselect)
Donde subselect es una sentencia SELECT subordinada que puede tener cualquier nmero de
columnas.
Es "Verdadero" si el resultado de la sentencia SELECT subordinada es una tabla con una o ms
filas. Es "Falso" si es una tabla vaca. No puede tomar el valor "Desconocido".
Ejemplos:
El ejemplo n 23 (Nombres de los empleados que trabajan en Chicago)
SELECT ENAME
FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO
FROM DEPT
WHERE LOC = CHICAGO);
ENAME
-----ALLEN
WARD
MARTIN
BLAKE
TURNER
JAMES
Resuelto mediante el uso del predicado EXISTS:
48. Nombres de los empleados que trabajan en Chicago:
SELECT ENAME
FROM EMP E
WHERE EXISTS (SELECT *
FROM DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND LOC = "CHICAGO");
ENAME
-----ALLEN
WARD
MARTIN
BLAKE
TURNER
JAMES
(6 filas afectadas)
28
Ejercicios:
51. Seleccionar el nombre y fecha de ingreso del empleado que lleva ms tiempo.
SELECT ENAME, HIREDATE
FROM EMP
WHERE HIREDATE = (SELECT MIN (HIREDATE)
FROM EMP);
ENAME HIREDATE
------ ----------SMITH 1980-12-17
52. Mostrar el nombre, el trabajo y el salario de todos los empleados que tienen un
salario superior al salario ms bajo del departamento 30.
SELECT ENAME, JOB, SAL
FROM EMP
WHERE SAL > (SELECT MIN(SAL) FROM EMP WHERE DEPTNO = 30)
ORDER BY 3 DESC;
29
ENAME
-----KING
SCOTT
FORD
JONES
BLAKE
CLARK
ALLEN
TURNER
MILLER
WARD
MARTIN
ADAMS
JOB
--------PRESIDENT
ANALYST
ANALYST
MANAGER
MANAGER
MANAGER
SALESMAN
SALESMAN
CLERK
SALESMAN
SALESMAN
CLERK
SAL
----------5000
3000
3000
2975
2850
2450
1600
1500
1300
1250
1250
1100
53. Encontrar el ename, dname, job y sal de los empleados que trabajen en el mismo
departamento que TURNER y su salario sea mayor que la media del salario del
departamento 10.
SELECT ENAME, DNAME, JOB, SAL
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.DEPTNO = (SELECT DEPTNO
FROM EMP
WHERE ENAME = TURNER)
AND SAL > (SELECT AVG(SAL)
FROM EMP
WHERE DEPTNO = 30);
ENAME
-----ALLEN
BLAKE
DNAME
---------SALES
SALES
JOB
--------SALESMAN
MANAGER
SAL
----------1600
2850
30
ENAME
-----JONES
CLARK
SCOTT
KING
FORD
JOB
--------MANAGER
MANAGER
ANALYST
PRESIDENT
ANALYST
DEPTNO
----------20
10
20
10
20
LOC
-------DALLAS
NEW YORK
DALLAS
NEW YORK
DALLAS
SAL
----------2975
2450
3000
5000
3000
31
COMPOSICIN DE CONSULTAS
Clusula UNION [ALL]
La composicin de consultas consiste en fundir el resultado de varias sentencias SELECT
en una nica tabla resultante.
Formato:
SELECT...
FROM...
.
.
.
UNION [ALL]
SELECT...
FROM...
.
.
.
[UNION [ALL]
SELECT...
FROM...
.
.
.
]
Los resultados de la ejecucin de cada una de las sentencias SELECT de la unin se
mostrarn en una nica tabla resultante.
Caractersticas:
Cada una de las consultas es independiente de las dems. En una sentencia SELECT no
puede haber referencias a tablas ni a columnas de otra sentencia SELECT de la unin.
Todas las sentencias SELECT deben tener el mismo nmero de columnas y sus
dominios deben ser compatibles.
Si no se especifica la clusula ALL tras UNION, la tabla resultante no tendr filas
repetidas. Si se especifica UNION ALL, se mostrarn en la tabla resultante todas las
filas de cada una de las sentencias SELECT, incluidas las filas que ya hubieran
resultado de otra sentencia SELECT de la unin.
No pueden realizarse ordenaciones parciales para cada sentencia SELECT. De existir
una clusula ORDER BY, sta debe ser la ltima de la unin y la referencia a la(s)
columna(s) por las que se debe ordenar ha de ser obligatoriamente numrica.
No se puede agrupar la unin. Si se hacen consultas con agrupamiento, los
agrupamientos deben ser para cada consulta de la unin.
32
Ejemplos:
Obtener los nombres de todas las ciudades que aparecen en la tabla de vuelos, ordenados
alfabticamente.
SELECT origen
FROM vuelos
UNION
SELECT destino
FROM vuelos
ORDER BY 1
Obtener en una sola columna el nombre de todas las ciudades origen de un vuelo y el de las que
son su destino. Una misma ciudad puede aparecer como origen y como destino.
33
CREACIN DE VISTAS
CREATE VIEW nombre_vista
AS
Sentencia SELECT sin ORDER BY
[WITH CHECK OPTION]
La ejecucin de una sentencia CREATE VIEW crea una tabla vista (una tabla virtual) cuyo
contenido ser el resultado de ejecutar la sentencia SELECT que genera la vista.
34
35
Modificar el destino del vuelo IB9999, que pasar a ser el del vuelo IB327.
UPDATE vuelos_2
SET destino = (SELECT destino from vuelos
WHERE num_vuelo = 'IB327')
WHERE num_vuelo = 'IB9999';
Modificar, dividiendo por 10, las distancias de los vuelos.
UPDATE vuelos_2
SET distancia = distancia / 10;
Borrar las filas cuya distancia sea mayor que la media de las distancias de los vuelos
realizados por Iberia.
DELETE vuelos_2
WHERE distancia > (SELECT AVG (distancia)
FROM vuelos_2
WHERE num_vuelo LIKE 'IB%');
Modificar la columna distancia dejndola nula para todas las filas.
UPDATE vuelos_2
SET distancia = NULL;
Borrar los vuelos con origen en Madrid.
DELETE vuelos_2
WHERE origen = 'MADRID';
Borra todas las filas.
DELETE vuelos_2;
Borrar el ndice y la tabla creados.
36
NOT NULL,
NOT NULL,
NOT NULL,
NULL
37
La sentencia:
DELETE vuelos_2;
Borra todas las filas de la vista
Borrar las vistas, el ndice y la tabla.
DROP
DROP
DROP
DROP
VIEW vista_1;
VIEW vista_2;
INDEX vuelos_2.ix_v2;
TABLE vuelos_2;
38
SEGURIDAD
Sentencias GRANT y REVOKE
GRANT {ALL | lista_permisos}
ON {nombre_tabla [(lista_columnas)] | nombre_vista
[(lista_columnas)] }
TO {PUBLIC | lista_usuarios }
[WITH GRANT OPTION]
REVOKE {ALL | lista_permisos}
ON {nombre_tabla [(lista_columnas)] | nombre_vista
[(lista_columnas)] }
FROM {PUBLIC | lista_usuarios }
[CASCADE]
lista_permisos:
39
SQL EMBEBIDO.
1 Introduccin.
Toda sentencia SQL puede utilizarse como SQL embebido, al contrario no.
1.a Preliminares.
Delimitadores:
Hay marcas de inicio y de fin que suelen ser EXEC SQL y END EXEC o
simplemente ;
Declarativas
Ejecutables
Operaciones SQL.
Aparecen en cualquier lugar donde podra aparecer una sentencia ejecutable del
lenguaje anfitrin.
Referencia a variables anfitrionas
Sintaxis.
:<variable anfitriona>
Definicin:
Uso.
Expresiones:
Sintaxis
Concepto:
Bases de Datos. SQL. Curso 2000-2001
40
Nombre:
Sintaxis y uso:
Tipos de datos
Hay correspondencia entre los tipos de dato SQL y los del lenguaje anfitrin.
No unicidad de nombres.
Las variables anfitrionas y los campos de las tablas pueden coincidir en nombre.
Las que devuelven una sola tupla o registro: similares a SQL visto.
La siguiente lista:
UPDATE
DELETE
INSERT
Ejemplos y sintaxis
41
EXEC SQL
SELECT
SITUACION, CIUDAD
FROM S
WHERE S# = :DADO
;
EXEC SQL
UPDATE S
SET SITUACION = SITUACION + :AUMENTO
WHERE CIUDAD = LONDRES
;
EXEC SQL
DELETE
FROM JSP
WHERE :CIUDAD =
(SELECT CIUDAD
FROM S
WHERE S.S# = SPJ.S#)
;
EXEC SQL
INSERT
INTO P (P#, PNOMBRE, PESO )
VALUES ( :NUMPAR, :NOMPAR, :PESOPAR)
;
3 Operaciones con cursores
3.a Situacin.
Uso:
Select
Update
Delete
Abierto.
Usado y avanzado.
42
Cerrado.
Sintaxis:
EXEC SQL
DECLARE <nombre cursor> CURSOR
FOR <sentencia SELECT>
;
Ejemplo
EXEC SQL
DECLARE X CURSOR FOR
SELECT S#, SNOMBRE, SITUACION
FROM S
WHERE CIUDAD = :Y
;
Apertura
Sintaxis
Ejemplo
Sintaxis
EXEC SQL
FETCH <nombre cursor>
INTO <variables anfitrionas>
;
Ejemplo
Sintaxis:
Ejemplo:
EXEC SQL
UPDATE <nombre tabla>
SET <pares de actualizacin>
WHERE CURRENT OF <nombre cursor> ;
43
EXEC SQL
UPDATE S
SET SITUACION = SITUACION + :AUMENTO
WHERE CURRENT OF X
;
EXEC SQL
DELETE FROM <nombre tabla>
WHERE CURRENT OF <nombre cursor>
;
EXEC SQL
DELETE FROM s
WHERE CURRENT OF X
;
44