You are on page 1of 81

Algebra Lineal

Lenguaje de Consultas
SQL
Algebra relacional

El lgebra relacional se inspira en la teora de conjuntos. Si


queremos especificar una consulta, es necesario seguir uno o ms
pasos que sirven para ir construyendo, mediante operaciones del
lgebra relacional, una nueva relacin que contenga los datos que
responden a la consulta a partir de las relaciones almacenadas.
Los lenguajes basados en el lgebra relacional son lenguajes
procedimentales, ya que los pasos que forman la consulta
describen un procedimiento.

2
Operaciones de Algebra relacional
Las operaciones del lgebra relacional han sido clasificadas segn
distintos criterios; de todos ellos indicamos los tres siguientes:

1) Segn se pueden expresar o no en trminos de otras


operaciones.

a) Operaciones primitivas: son aquellas operaciones a partir de


las cuales podemos definir el resto. Estas operaciones son la
unin, la diferencia, el producto cartesiano, la seleccin y la
proyeccin.

b) Operaciones no primitivas: el resto de las operaciones del


lgebra relacional que no son estrictamente necesarias,
porque se pueden expresar en trminos de las primitivas; sin
embargo, las operaciones no primitivas permiten formular
algunas consultas de forma ms cmoda: Interseccin,
Combinacin
3
Operaciones de Algebra relacional
2) Segn el nmero de relaciones que tienen como operandos:

a) Operaciones binarias: son las que tienen dos relaciones


como operandos. Son binarias todas las operaciones, excepto
la seleccin y la proyeccin.

b) Operaciones unarias: son las que tienen una sola relacin


como operando. La seleccin y la proyeccin son unarias.

3) Segn se parecen o no a las operaciones de la teora de


conjuntos:

a) Operaciones conjuntistas: son las que se parecen a las de


la teora de conjuntos. Se trata de la unin, la interseccin, la
diferencia y el producto cartesiano.

4
Operaciones de Algebra relacional
b) Operaciones especficamente relacionales: son el resto de
las operaciones; es decir, la seleccin, la proyeccin y la
combinacin.

5
Operaciones Conjuntista
Unin

Es una operacin que, a partir de dos relaciones, obtiene una


nueva relacin formada por todas las tuplas que estn en
alguna de las relaciones de partida.

La unin es una operacin binaria, y la unin de dos relaciones


T y S se indica T S.

Slo tiene sentido aplicar la unin a relaciones que tengan tuplas


similares.

6
Operaciones Conjuntista
Por ejemplo, se puede hacer la unin de las relaciones
EMPLEADOS_ADM y EMPLEADOS_PROD porque sus tuplas se
parecen. En cambio, no se podr hacer la unin de las relaciones
EMPLEADOS_ADM y DESPACHOS porque, como se observa en
las tablas, las tuplas respectivas son de tipo diferente.

7
Operaciones Conjuntista

8
Operaciones Conjuntista

9
Operaciones Conjuntista
Ejemplo de relaciones compatibles

Las relaciones EMPLEADOS_ADM y EMPLEADOS_PROD tienen


grado 5. Podemos establecer la siguiente biyeccin entre sus
atributos:

A DNI de EMPLEADOS_ADM le corresponde DNIemp de


EMPLEADOS_PROD.

A nombre de EMPLEADOS_ADM le corresponde nombreemp de


EMPLEADOS_PROD.

A apellido de EMPLEADOS_ADM le corresponde apellidoemp de


EMPLEADOS_PROD.

A edificiodesp de EMPLEADOS_ADM le corresponde edificiodesp


de EMPLEADOS_PROD.
10
Operaciones Conjuntista
A nmerodesp de EMPLEADOS_ADM le corresponde
edificiodesp de EMPLEADOS_PROD.

Adems, supondremos que los dominios de sus atributos se han


declarado de forma que se cumple que el dominio de cada atributo
de EMPLEADOS_ADM sea el mismo que el dominio de su atributo
correspondiente en EMPLEADOS_PROD.

Por todos estos factores, podemos llegar a la conclusin de que


EMPLEADOS_ADM y EMPLEADOS_PROD son relaciones
compatibles.

11
Operaciones Conjuntista
Ejemplo de unin

Si queremos obtener una relacin R que tenga a todos los


empleados de la empresa del ejemplo anterior, llevaremos a cabo
la unin de las relaciones EMPLEADOS_ADM y
EMPLEADOS_PROD de la forma siguiente:

R := EMPLEADOS_ADM EMPLEADOS_PROD.

Entonces la relacin R resultante ser la reflejada en la tabla


siguiente:

12
Operaciones Conjuntista

13
Operaciones Conjuntista
Interseccin

La interseccin es una operacin que, a partir de dos


relaciones, obtiene una nueva relacin formada por las tuplas
que pertenecen a las dos relaciones de partida.

La interseccin es una operacin binaria; la interseccin de


dos relaciones T y S se indica T S.

La interseccin, como la unin, slo se puede aplicar a relaciones


que tengan tuplas similares. Para poder hacer la interseccin de
dos relaciones, es preciso, pues, que las relaciones sean
compatibles.

14
Operaciones Conjuntista
Ejemplo de interseccin

Si queremos obtener una relacin R que incluya a todos los


empleados de la empresa del ejemplo que trabajan tanto en
administracin como en produccin, realizaremos la interseccin
de las relaciones EMPLEADOS_ADM y EMPLEADOS_PROD de
la forma siguiente:

R : = EMPLEADOS_ADM EMPLEADOS_PROD.

Entonces la relacin R resultante ser :

15
Operaciones Conjuntista
Diferencia

La diferencia es una operacin que, a partir de dos relaciones,


obtiene una nueva relacin formada por todas las tuplas que
estn en la primera relacin y, en cambio, no estn en la
segunda.

La diferencia es una operacin binaria, y la diferencia entre las


relaciones T y S se indica como T S.

La diferencia, como ocurra en la unin y la interseccin, slo tiene


sentido si se aplica a relaciones que tengan tuplas similares. Para
poder realizar la diferencia de dos relaciones es necesario que las
relaciones sean compatibles.

16
Operaciones Conjuntista
Ejemplo de diferencia

Si queremos obtener una relacin R con todos los empleados de la


empresa del ejemplo que trabajan en administracin, pero no en
produccin, haremos la diferencia de las relaciones
EMPLEADOS_ADM y EMPLEADOS_PROD de la forma siguiente:

R := EMPLEADOS_ADM EMPLEADOS_PROD.

Entonces la relacin R resultante ser :

17
Operaciones Conjuntista
Producto Cartesiano

El producto cartesiano es una operacin que, a partir de dos


relaciones, obtiene una nueva relacin formada por todas las
tuplas que resultan de concatenar tuplas de la primera relacin
con tuplas de la segunda.

El producto cartesiano es una operacin binaria. Siendo T y S


dos relaciones que cumplen que sus esquemas no tienen
ningn nombre de atributo comn, el producto cartesiano de T
y S se indica como T S.

Si se quiere calcular el producto cartesiano de dos relaciones que


tienen algn nombre de atributo comn, slo hace falta
redenominar previamente los atributos adecuados de una de las
dos relaciones.

18
Operaciones Conjuntista
Ejemplo de producto cartesiano

El producto cartesiano de las relaciones DESPACHOS y


EDIFICIOS_EMP del ejemplo se puede hacer como se indica (es
necesario redenominar atributos previamente):

EDIFICIOS(nombreedificio, supmediadesp) :=
EDICIOS_EMP(edificio, supmediadesp).

R := EDIFICIOS DESPACHOS.

Entonces la relacin R resultante ser :

19
Operaciones Conjuntista

20
Operaciones Especficamente Relacionales
Seleccin

Podemos ver la seleccin como una operacin que sirve para


elegir algunas tuplas de una relacin y eliminar el resto. Ms
concretamente, la seleccin es una operacin que, a partir de
una relacin, obtiene una nueva relacin formada por todas las
tuplas de la relacin de partida que cumplen una condicin de
seleccin especificada.

La seleccin es una operacin unaria. Siendo C una condicin


de seleccin, la seleccin de T con la condicin C se indica
como T(C).

21
Operaciones Especficamente Relacionales
Ejemplo de seleccin

Si queremos obtener una relacin R con los despachos de la base


de datos del ejemplo que
estn en el edificio Marina y que tienen una superficie de ms de
12 metros cuadrados, haremos la siguiente seleccin:

R := DESPACHOS(edificio = Marina y superficie > 12).

Entonces la relacin R resultante ser :

22
Operaciones Especficamente Relacionales
Proyeccin

Podemos considerar la proyeccin como una operacin que


sirve para elegir algunos atributos de una relacin y eliminar el
resto. Ms concretamente, la proyeccin es una operacin
que, a partir de una relacin, obtiene una nueva relacin
formada por todas las (sub)tuplas de la relacin de partida que
resultan de eliminar unos atributos especificados.

La proyeccin es una operacin unaria. Siendo {Ai, Aj, ..., Ak}


un subconjunto de los atributos del esquema de la relacin T,
la proyeccin de T sobre {Ai, Aj, ..., Ak} se indica como T[Ai,
Aj, ..., Ak].

23
Operaciones Especficamente Relacionales
Ejemplo de proyeccin

Si queremos obtener una relacin R con el nombre y el apellido de


todos los empleados de administracin de la base de datos del
ejemplo, haremos la siguiente proyeccin:

R := EMPLEADOS_ADM[nombre, apellido].

Entonces la relacin R resultante ser :

24
Operaciones Especficamente Relacionales
Combinacin

La combinacin es una operacin que, a partir de dos


relaciones, obtiene una nueva relacin formada por todas las
tuplas que resultan de concaTenar tuplas de la primera
relacin con tuplas de la segunda, y que cumplen una
condicin de combinacin especificada.

La combinacin es una operacin binaria. Siendo T y S dos


relaciones cuyos esquemas no tienen ningn nombre de
atributo comn, y siendo B una condicin de combinacin, la
combinacin de T y S segn la condicin B se indica T[B]S.

25
Operaciones Especficamente Relacionales
Ejemplo de combinacin

Supongamos que se desea encontrar los datos de los despachos


que tienen una superficie mayor o igual que la superficie media de
los despachos del edificio donde estn situados. La siguiente
combinacin nos proporcionar los datos de estos despachos junto
con los datos de su edificio (observar que es preciso redenominar
previamente los atributos):

EDIFICIOS(nombreeedficio,supmediadesp) :=
EDIFICIOS_EMP(edificio, supmediadesp),

R := EDIFICIOS[nombreedificio = edificio, supmediadesp


superficie] DESPACHOS.

Entonces la relacin R resultante ser :

26
Operaciones Especficamente Relacionales

27
Operaciones Especficamente Relacionales
Ejemplo de combinacin

Supongamos ahora que para obtener los datos de cada uno de los
empleados de administracin, junto con los datos del despacho
donde trabajan, utilizamos la siguiente combinacin:

R := EMPLEADOS_ADM[edificiodesp = edificio, nmerodesp =


nmero]DESPACHOS.

Entonces la relacin R resultante ser :

28
Operaciones Especficamente Relacionales

29
Operaciones Especficamente Relacionales
Divisin

La divisin de dos relaciones es otra relacin cuya extensin


estar constituida por las tuplas que al completarse con las
tuplas de la segunda relacin permiten obtener la primera.

Siendo T y S dos relaciones la divisin de estas dos relaciones


se indica T:S.

Condiciones el grado (T) > grado(S)

30
Operaciones Especficamente Relacionales
Ejemplo de divisin

31
Secuencia de operaciones del AR
En muchos casos, para formular una consulta en lgebra
relacional es preciso utilizar varias operaciones, que se aplican en
un cierto orden.

Para hacerlo, hay dos posibilidades:

1) Utilizar una sola expresin del lgebra que incluya todas las
operaciones con los parntesis necesarios para indicar el orden de
aplicacin.

2) Descomponer la expresin en varios pasos donde cada paso


aplique una sola operacin y obtenga una relacin intermedia que
se pueda utilizar en los pasos subsiguientes.

32
Secuencia de operaciones del AR
Ejemplo

Para obtener el nombre y el apellido de los empleados, tanto de


administracin como de produccin, es necesario hacer una unin
de EMPLEADOS_ADM y EMPLEADOS_PROD, y despus hacer
una proyeccin sobre los atributos nombre y apellido. La operacin
se puede expresar de las formas siguientes:

a) Se puede utilizar una sola expresin:


R := (EMPLEADOS_ADM EMPLEADOS_PROD) [nombre,
apellido].

b) O bien podemos expresarlo en dos pasos:


EMPS := EMPLEADOS_ADM EMPLEADOS_PROD;
R := EMPS[nombre, apellido]

33
Secuencia de operaciones del AR
En los casos en que una consulta requiere efectuar muchas
operaciones, resulta ms sencilla la segunda alternativa, porque
evita expresiones complejas.

Veamos algunos ejemplos de consultas en la base de datos


formuladas con secuencias de operaciones del lgebra relacional.

1) Para obtener el nombre del edificio y el nmero de los


despachos situados en edificios en los que la superficie media de
estos despachos es mayor que 12, podemos utilizar la siguiente
secuencia de operaciones:

A := EDIFICIOS_EMP(supmediadesp > 12);


B := DESPACHOS * A;
R := B[edificio, nmero]

34
Secuencia de operaciones del AR
2) Supongamos ahora que se desea obtener el nombre y el
apellido de todos los empleados (tanto de administracin como de
produccin) que estn asignados al despacho 120 del edificio
Marina. En este caso, podemos utilizar la siguiente secuencia:

A := EMPLEADOS_ADM EMPLEADOS_PROD;
B := A(edificiodesp = Marina y nmerodesp = 120);
R := B[nombre, apellido].

3) Si queremos consultar el nombre del edificio y el nmero de los


despachos que ningn empleado de administracin tiene
asignado, podemos utilizar esta secuencia:

A := DESPACHOS [edificio, nmero];


B := EMPLEADOS_ADM[edificiodesp, nmerodesp];
R := A B.

35
Lenguajes de Consulta SQL

36
SQL (Structured Query Language)
SQL (Structured Query Language) es un lenguaje para acceso a la
informacin almacenada en bases de datos relacionales.

SQL puede usarse desde dentro de programas y tambin desde un


terminal, sin necesidad de incluirlo previamente en un programa.
Esto lo hace til tanto para programadores como para usuarios
finales, dndoles la posibilidad de acceder a los datos mediante
consultas abiertas.

En esta unidad trataremos sintaxis del SQL, independientemente


de si se va a utilizar embebido en programas o si se van a ejecutar
sentencias SQL directamente contra la base de datos.

37
SQL (Structured Query Language)
El procesamiento de las sentencias SQL lo realiza el SGDB
(Sistema de Gestin de Bases de Datos), ste las analiza, las
traduce a operaciones con ficheros fsicos, las ejecuta, y devuelve
el resultado al programa o usuario que realiz la peticin. El SGBD
se encarga de coordinar todas la peticiones asegurando la
integridad de los datos.

38
SQL (Structured Query Language)
En SQL se pueden distinguir tres tipos de sentencias:

DML (Data Manipulation Language).- Como su nombre indica son


las sentencias SQL que permiten trabajar con los datos,
seleccionarlos, actualizarlos, eliminarlos, agruparlos, etc
DDL (Data Definition Language).- Son sentencias que crean o
eliminan objetos del SGDB por ejemplo tablas, vistas, etc
DCL (Data Control Language).- Se encarga de mantener la
seguridad y el control de los datos.

Dentro de estas las ms tiles desde el punto de vista del


programador o del usuario son las DML, y ser en las que se haga
ms hincapi en este curso, las sentencias DDL se vern muy por
encima.

39
SQL (Structured Query Language)
En SQL se pueden distinguir tres tipos de sentencias:

DML (Data Manipulation Language).- Como su nombre indica son


las sentencias SQL que permiten trabajar con los datos,
seleccionarlos, actualizarlos, eliminarlos, agruparlos, etc
DDL (Data Definition Language).- Son sentencias que crean o
eliminan objetos del SGDB por ejemplo tablas, vistas, etc
DCL (Data Control Language).- Se encarga de mantener la
seguridad y el control de los datos.

Dentro de estas las ms tiles desde el punto de vista del


programador o del usuario son las DML, y ser en las que se haga
ms hincapi en este curso, las sentencias DDL se vern muy por
encima.

40
SQL (Structured Query Language)

DML: SELECT, INSERT, UPDATE, DELETE (las cuatro ms


importantes)

DDL: CREATE, DROP, ALTER (modifican tablas, ms propio de


uso por DBAs)

DCL: GRANT, REVOKE Y LOCK, COMMIT, ROLLBACK (no en


ACCESS)

41
Sentencias DDL
En general, un usuario o un programador acceder con el SQL a
los datos de unas tablas ya creadas por el DBA de la base de
datos.

Pero puede ser necesario que el usuario disponga de tablas de


uso privado con datos exclusivamente interesantes para l por su
tipo de actividad o trabajo.

Esto implica que el usuario ha de ser capaz de crear estas nuevas


tablas, destruirlas cuando ya no las necesite, y autorizar a otros
usuarios a utilizarlas si as lo estima oportuno. Todo ello puede
hacerlo con las sentencias DDL si el DBA le ha otorgado
previamente las autorizaciones correspondientes para ello.

42
Sentencias DDL
Las sentencias DDL son las siguientes:

CREATE
DROP
ALTER

43
Sentencias DDL CREATE
La ejecucin de esta sentencia permite almacenar en el catlogo
del SGBD la definicin y el nombre de una tabla para que luego
pueda ser referenciada.
Formato:

CREATE TABLE tabla (col-1 tipo-1 [not null]


[,col-2 tipo-2 [NOT NULL]])

donde col-1 y col-2 son los nombres asignados a las columnas de


la tabla y tipo-1 y tipo-2 son sus respectivos tipos de datos
(INTEGER, FLOAT, VARCHAR, TIME).
Si en alguna columna se especifica NOT NULL, el SGBD no
admitir la insercin en la tabla de una fila con valor Nulo en esa
columna.

44
Sentencias DDL CREATE
Ejemplo:
Crear la tabla de empleados.

CREATE TABLE TEMPLE


(NUMEM INTEGER NOT NULL
,NUMDE INTEGER NOT NULL
,EXTEL INTEGER NOT NULL
,FECNA DATE NOT NULL
,FECIN DATE NOT NULL
,SALAR DECIMAL (5,0) NOT NULL
,COMIS DECIMAL (5,0) NOT NULL
,NUMHI INTEGER NOT NULL
,NOMEM VARCHAR (20) NOT NULL)

45
Sentencias DDL DROP
La sentencia DROP TABLE se utiliza para destruir una tabla.
Formato:

DROP TABLE tabla

Esta sentencia borra del catlogo de SGBD la descripcin de


la tabla y desde ese momento no se admitirn referencias a
ella.

Catlogo: Est formado por unas tablas predefinidas donde el


SGBD guarda las descripciones de todas las tablas incluidas
en todo momento en la Base de Datos. En l figuran los
nombres de todas ellas y sus caractersticas, cmo se llaman
sus columnas y qu tipos de datos contienen.

46
Sentencias DDL DROP
La informacin del catlogo es automticamente actualizada y
mantenida por el SGBD cada vez que se aade una nueva
tabla a la B/D o se modifica la descripcin de una ya existente.
Los programas y usuarios pueden tambin utilizar el lenguaje
SQL para acceder al Catlogo consultando estas
descripciones como si fueran datos de aplicaciones incluso
pueden combinarse en una misma consulta tablas del catlogo
con otras B/D, sin diferencia ninguna entre ellas.

Ejemplo:

Borrar la tabla de empleados.

DROP TABLE TEMPLE

47
Sentencias DDL ALTER
La sentencia ALTER TABLE sirve para modificar la estructura
de una tabla que ya existe. Mediante esta instruccin podemos
aadir columnas nuevas, eliminar columnas. Ten cuenta que
cuando eliminamos una columna se pierden todos los datos
almacenados en ella.

Tambin nos permite crear nuevas restricciones o borrar


algunas existentes. La sintaxis puede parecer algo complicada
pero sabiendo el significado de las palabras reservadas la
sentencia se aclara bastante; ADD (aade), ALTER (modifica),
DROP (elimina), COLUMN (columna), CONSTRAINT
(restriccin).

Formato (simplificado):

ALTER TABLE tab1 ADD COLUMN col3 integer NOT


NULL CONSTRAINT c1 UNIQUE
48
Sentencias DDL ALTER
Ejemplo:

ALTER TABLE tab1 ADD COLUMN col3 integer NOT NULL


CONSTRAINT c1 UNIQUE

Con este ejemplo estamos aadiendo a la tabla tab1 una


columna llamada col3 de tipo entero, requerida (no admite
nulos) y con un ndice sin duplicados llamado c1.

Cuando aadimos una columna lo mnimo que se puede poner


sera:

ALTER TABLE tab1 ADD COLUMN col3 integer

En este caso la nueva columna admite valores nulos y duplicados.

49
Sentencias DDL ALTER
Para aadir una nueva restriccin en la tabla podemos utilizar la
clusula ADD restriccion2 (ADD CONSTRAINT...).

Ejemplo:

ALTER TABLE tab1 ADD CONSTRAINT c1 UNIQUE (col3)

Con este ejemplo estamos aadiendo a la tabla tab1 un ndice


nico (sin duplicados) llamado c1 sobre la columna col3.

50
Sentencias DDL ALTER
Para borrar una columna basta con utilizar la clusula DROP
COLUMN (COLUMN es opcional) y el nombre de la columna que
queremos borrar, se perdern todos los datos almacenados en la
columna.

Ejemplo:

ALTER TABLE tab1 DROP COLUMN col3

Tambin podemos escribir:

ALTER TABLE tab1 DROP col3

El resultado es el mismo, la columna col3 desaparece de la tabla


tab1.

51
Sentencias DDL ALTER
Para borrar una restriccin basta con utilizar la clusula DROP
CONSTRAINT y el nombre de la restriccin que queremos borrar, en
este caso slo se elimina la definicin de la restriccin pero los datos
almacenados no se modifican ni se pierden.

Ejemplo:

ALTER TABLE tab1 DROP CONSTRAINT c1

Con esta sentencia borramos el ndice c1 creado anteriormente


pero los datos de la columna col3 no se ven afectados por el
cambio.

52
Sentencias DCL
Control de Acceso

GRANT
REVOKE

Control de Transacciones

COMMIT
ROLLBACK

53
Sentencias DCL GRANT
El propietario de una tabla puede usar esta sentencia SQL
para transmitir a otros sus autorizaciones sobre ella, pero
stos no pueden transmitirlas a su vez.

Formato (simplificado):

GRANT lista-privilegios
ON tabla
TO lista-usuarios

donde lista-usuarios es una lista de identificadores personales,


separados por comas, de los usuarios a los que se va a
autorizar, y lista-privilegios es una lista de palabras separadas
por comas en la que se pueden especificar las siguientes:
DELETE, INSERT, SELECT y UPDATE, que indican que se
autoriza a usar las correspondientes sentencias SQL sobre la
tabla.
54
Sentencias DCL GRANT
Ejemplo:

Dar permisos de consulta y actualizacin sobre la tabla de


empleados a los usuarios U1 y U2.

GRANT SELECT, UPDATE ON TEMPLE TO U1,U2

55
Sentencias DCL REVOKE
Es la sentencia que permite anular una autorizacin
previamente concedida.
Formato (simplificado):

REVOKE lista-privilegios
ON tabla
FROM lista-usuarios

donde lista-privilegios y lista-usuarios significan lo mismo que


en la sentencia GRANT

56
Sentencias DCL REVOKE
Ejemplo

Quitar los permisos de consulta y modificacin sobre la tabla


de empleados a los usuarios U1, U2.

REVOKE SELECT,UPDATE ON TEMPLE TO U1,U2

57
Sentencias DCL LOCK TABLE
Para garantizar la integridad de los datos tambin tenemos la
sentencia LOCK TABLE.

Dicha sentencia nos permitir bloquear una tabla mientras estemos


accediendo a ella, para as estar seguros de que los datos no son
modificados por otros usuarios, mientras estamos accediendo nosotros
a ellos.

Formato:
LOCK TABLE tabla
IN SHARE /EXCLUSIVE MODE

SHARE : bloqueamos la tabla en modo compartido, permitiendo a los


dems usuarios acceder a los datos de esa tabla , pero slo para
lectura no modificacin.

58
Sentencias DCL LOCK TABLE
EXCLUSIVE: bloqueamos la tabla en modo exclusivo, de forma que
los dems usuarios no puedan acceder a los datos de esa tabla ni
siquiera para lectura.

El bloqueo durar hasta que acabe el programa o se produzca un


COMMIT o un ROLLBACK.

59
Sentencias DML
Las sentencias de manipulacin de datos son cuatro y nos van a
permitir:

Recuperar datos : SELECT

Modificar datos: UPDATE

Borrar Filas : DELETE

Aadir Filas : INSERT

60
Sentencias DML SELECT
La sentencia SELECT simple nos permite consultar los datos
almacenados en una tabla de la base de datos.

Formato:
SELECT [DISTINCT] */<colum1,column2,...>
FROM <nombre-tabla>
[WHERE <condicin>]
[GROUP BY <colum1,colum2,...>]
[HAVING <condicin-selec-grupos>]
[ORDER BY <colum1[DESC],colum2[DESC]...>]

61
Sentencias DML SELECT
Clusula SELECT:

En esta clusula se especifican la lista de los campos separados por


comas. Es suficiente con poner nicamente el nombre del campo, pero
si en dos tablas existen campos con el mismo nombre se ha de
preceder el nombre del campo por el de la tabla separados por un
punto (nom_tabla.nom_campo).

-La palabra clave DISTINCT provocara que la sentencia devolviese


solamente las lneas que tengan todos las columnas especificadas en
la sentencia SELECT distintas.

-El asterisco(*) traera todos los campos o columnas de las tablas


indicadas en el FROM.

62
Sentencias DML SELECT
Clusula FROM:
En esta clusula se especifican la lista de los nombres de tablas
separados por comas.

Clusula WHERE:
Es una clusula opcional en la que se incluyen las condiciones de
filtrado de la consulta que se quiere realizar

Clusula GROUP BY:


Es una clusula opcional de la sentencia SELECT que sirve para
agrupar filas que tengan iguales valores en las columnas de
agrupamiento.

Clusula HAVING:
Es una clusula opcional de la sentencia SELECT que sirve para
descartar los grupos de filas. Una vez separados las filas en uno o
varios grupos, se descartan aquellos que no satisfacen la condicin.
63
Sentencias DML SELECT
Clusula ORDER BY:
En esta clusula opcional se le indica a la sentencia el orden en que se
quiere recibir los datos. Las columnas por las que se quiera ordenar
tienen que estar en la clusula SELECT.

La palabra clave DESC devuelve los datos ordenados de forma


decreciente.
.

64
Sentencias DML SELECT
Ejemplo:

Extraer de la tabla de empleados el salario mximo y el mnimo para


cada grupo de empleados con igual nmero de hijos y que tienen al
menos uno, y slo si hay ms de un empleado en el grupo y el salario
mximo de ste excede 2000 euros.

SELECT NUMHI,MAX(SALAR), MIN(SALAR)


FROM TEMPLE
WHERE NUMHI > 0
GROUP BY NUMHI
HAVING COUNT(*)>1 AND
MAX(SALAR) > 2000
ORDER BY NUMHI

65
Sentencias DML SELECT
Funciones escalares sobre columnas:

Estas funciones permiten obtener un solo valor como resultado de


aplicar una determinada operacin a los valores contenidos en una
columna, por ejemplo, la suma de todos ellos o su valor medio.
Algunos ejemplos de estas funciones son:

AVG: Calcula el valor medio de los valores de la columna.


MAX: Devuelve el mximo.
MIN: Devuelve el mnimo.
SUM: Calcula la suma.
COUNT: Halla cuntos valores hay en la coleccin.

66
Sentencias DML SELECT
Funciones escalares sobre columnas:

Ejemplo:
En este ejemplo se extrae de la tabla de empleados por cada
departamento el salario medio, mnimo, mximo y la media aritmtica
de estos.

SELECT NUMDE,AVG(SALAR),MIN(SALAR),MAX(SALAR)
(MIN(SALAR) + MAX(SALAR))/2
FROM TEMPLE
GROUP BY NUMDE
ORDER BY NUMDE

67
Sentencias DML SELECT
SUBSELECT:

Se llaman subselects o sentencias subordinadas a aquellas consultas


que forman parte de otras sentencia SQL, dentro de la clusula
WHERE de esta. Una sentencia subordinada puede tener a la vez
otras sentencias subordinadas de ella. La sentencia ms externa
puede ser una SELECT, un DELETE, un INSERT o un UPDATE.

68
Sentencias DML SELECT
CLUSULA UNION :
Con esta clusula y con UNION ALL se obtiene como resultado de la
consulta la unin de dos sentencias SELECT.
Si se escribe UNION o UNION ALL entre dos sentencias SELECT las
tablas resultantes de stas deben tener el mismo nmero de columnas,
y adems las columnas que estn en la misma posicin relativa deben
ser de igual tipo, es decir, ambas numricas, o alfanumricas, o tipo
fecha... Al unirlas se obtiene como resultado otra tabla con las mismas
columnas y tipos de datos que las que las unen.

Si se escribe UNION entre dos sentencias SELECT, el resultado final


es otra tabla que contiene todas las filas resultantes del primer
SELECT y todas las del segundo. Si hay una fila igual a otra, se
eliminar para que no haya repeticiones.
Si se escribe UNION ALL entre dos SELECT, el resultado final se
forma igual que con UNION, excepto en que no se suprimen de l las
filas repetidas.
69
Sentencias DML SELECT
CLUSULA UNION :

Ejemplo:
Obtener por orden alfabtico los nombres de los empleados del
departamento 112, as como su sueldo total, es decir, incluyendo la
comisin en aquellos que la tengan.

SELECT NOMEM,SALAR
FROM TEMPLE WHERE COMIS IS NULLL AND NUMDE = 112
UNION
SELECT NOMEM,SALAR + COMIS
FROM TEMPLE WHERE COMIS IS NOT NULL AND NUMDE =
112
ORDER BY 1

70
Sentencias DML INSERT
La sentencia INSERT permite aadir una o ms filas completas a una
tabla.
Puede especificarse con uno de los dos Formatos siguientes:

Formato 1:
INSERT INTO tabla[(col-1, col-2, ...)]
VALUES (valor-1,valor-2,...)

En este Formato tabla es el nombre de la tabla en la que se desea


insertar, y col-1,col2,etc. es una lista del nombre de columnas de esta
tabla, no necesariamente todas ellas, ni en el mismo orden en que se
han definido. Si se omite, se interpreta como si se especificara una
lista incluyndolas a todas y en dicho orden.

Cada uno de los elementos de la lista de valores valor1, valor2,... debe


ser una constante o la palabra NULL o un registro especial, y debe
haber tantos como en la lista de nombres de columnas.
71
Sentencias DML INSERT
Ejemplo 1:
Dar de alta un nuevo departamento en la tabla de departamentos.

INSERT INTO TDEPTO


VALUES (123,10,350,F,4,120,PLANIFICACION)

Formato 2:
INSERT INTO tabla[(col-1, col-2, ...)]
Subselect

En este formato, subselect es una sentencia subordinada y por


consiguiente su formato es el de un SELECT bsico. Todas las filas
que resulten de ejecutarla se insertan en la tabla.
El nmero de columnas del resultado del subselect debe ser igual al de
nombres en la lista de columnas, asignndose la primera de ellas a la
primera columna de la lista, la segunda a la segunda, etc.

72
Sentencias DML INSERT
Ejemplo 2:
Supongamos que tenemos una tabla de empleados2 en la que
queremos meter los datos de los empleados que han ingresado en la
empresa despus de 1970.

INSERT INTO TEMPLE2


SELECT *
FROM TEMPLE
WHERE FECIN > 31/12/1970

73
Sentencias DML UPDATE
La sentencia UPDATE permite modificar o actualizar varias filas de una
tabla.
Formato:

UPDATE tabla [nombre-local]


SET col-1 = expresin-1 [,col-2 = expresin-2]
[WHERE predicado]

Actualiza todas las filas de la tabla mencionada detrs de UPDATE que


cumplan la condicin, modificando las columnas que se mencionen en
la clusula SET.
Se pueden actualizar parte o todas las columnas de los registros, al
contrario de los que ocurre con la insercin y el borrado de filas.

Si se omite la clusula WHERE se actualizan todas las filas.

74
Sentencias DML UPDATE
Ejemplo:
Cambiar la fecha de ingreso de Pedro Prez poniendo la del da
25/12/1999.

UPDATE TEMPLE
SET FECIN= 25/12/1999
WHERE NOMEM = PEDRO PEREZ

75
Sentencias DML DELETE
La sentencia DELETE permite borrar filas de una tabla.
Formato:

DELETE FROM tabla [nombre-local]


[WHERE condicin]

Esta sentencia borra todas las filas que cumplan la condicin


expresada en la clusula WHERE. Las filas no se pueden borrar
parcialmente, de modo que se borran filas completas.

Si se omite la clusula WHERE se borran todas las filas de la tabla

Ejemplo:
Borrar de la tabla de empleados a Pedro Prez.

DELETE FROM TEMPLE


WHERE NOMEM = PEDRO PEREZ
76
Sentencias Avanzadas SELECT

77
Sentencias Avanzadas SELECT
Clusula DISTINCT / ALL

Al incluir la clusula DISTINCT en la SELECT, se eliminan del


resultado las repeticiones de filas. Si por el contrario queremos que
aparezcan todas las filas incluidas las duplicadas, podemos incluir la
clusula ALL o nada, ya que ALL es el valor que SQL asume por
defecto.
Ejemplos: queremos saber los cdigos de los directores de oficina.

SELECT dir FROM oficinas


SELECT ALL dir FROM oficinas
SELECT DISTINCT dir FROM oficinas

En los dos primeros aparece el 108 repetido, con DISTINCT


aparecer una sola vez ya que le decimos que liste los distintos
valores de directores.

78
Sentencias Avanzadas SELECT
Clusula TOP

La clusula TOP permite sacar las n primeras filas de la tabla origen.


Siempre se gua por la columna de ordenacin, la que aparece en la
clusula ORDER BY o en su defecto la clave principal de la tabla.

Ejemplo 1 : listar los dos empleados ms antiguos de la empresa.


SELECT TOP 2 numemp, nombre
Lista el cdigo y nombre de 2
FROM empleado empleados.
ORDER BY contrato

Otro ejemplo:
Lista el cdigo y nombre de 4
SELECT TOP 3 numemp, nombre
empleados. (3 y 4 fechas de
FROM empleado contrato son iguales)
ORDER BY contrato

79
Sentencias Avanzadas SELECT
Clusula TOP PERCENT

El nmero de filas que queremos visualizar se puede expresar con un


nmero entero o como un porcentaje sobre el nmero total de filas que
se recuperaran sin la clusula TOP. En este ltimo caso utilizaremos la
clusula TOP n PERCENT (porcentaje en ingls).

SELECT TOP 20 PERCENT nombre


FROM empleado
ORDER BY contrato

Lista el nombre de los empleados ordenndolos por fecha de contrato,


sacando nicamente un 20% del total de empleados. Como tenemos
10 empleados, sacar los dos primeros, si tuvisemos 100 empleados
sacara los 20 primeros.

80
Sentencias Avanzadas SELECT
Alias de columna.

Cuando se visualiza el resultado de la consulta, normalmente las


columnas toman el nombre que tiene la columna en la tabla, si
queremos cambiar ese nombre lo podemos hacer definiendo un alias
de columna mediante la clusula AS ser el nombre que aparecer
como ttulo de la columna.

Ejemplo:
SELECT idfab AS fabricante, idproducto, descripcion
FROM productos

Como ttulo de la primera columna aparecer fabricante en vez de


idfab

81

You might also like