Práctica 3:
El lenguaje SQL (1ª parte).
(2ª sesión).
Práctica 1.
Introducción al uso de una BD relacional
(ACCESS).
Práctica 2.
Representación de la realidad en el modelo
relacional de datos.
Práctica 3.
El lenguaje SQL. (ORACLE8)
Práctica 4.
Estudio del SGBD ORACLE8.
Programa de prácticas:
El lenguaje SQL.
•
estudio de la sentencia de consulta del lenguaje
SQL : SELECT
•
realizar consultas a una base de datos relacional en
el lenguaje SQL.
•
Utilizar el entorno interactivo del SGBD ORACLE8.
Objetivos (1ª parte):
El lenguaje SQL.
Lenguaje SQL:
9
manipulación de datos
(consulta y actualización):
•
SELECT
(consulta)
•
INSERT
(inserción de tuplas)
•
DELETE
(borrado de tuplas)
•
UPDATE
(modificación de tuplas)
9definición de datos
(definición del esquema)
SELECT
[
ALL
|
DISTINCT
] A
1i
, A
2j
,... A
nk
| *
FROM
R
1
, R
2
, ...R
n
[
WHERE
condición
]
[
GROUP BY
B
1
, B
2
,...B
m
]
[
HAVING
condición
]
El lenguaje SQL.
SELECT
[
ALL
|
DISTINCT
] A
1i
, A
2j
,..., A
nk
| *
FROM
R
1
, R
2
, ..., R
n
[
WHERE
condición
]
El lenguaje SQL.
datos que se desea
consultar
relaciones que
intervienen en la
consulta
condición que
cumplen los datos que
se desea consultar
cod_pro
nombre
teléfono
cod_dep
Profesor
cod_dep
nombre
director
teléfono
Departamento
cod_asg
nombre
semestre
teoría
prac
cod_dep
Asignatura
cod_pro
cod_asg
gteo
gpra
Docencia
atributos identificadores
atributos de referencia
Departamento
(cod_dep: tira(5), nombre: tira(40), director tira(30),
teléfono : entero)
Asignatura
(cod_asg: tira(3), nombre: tira(40), semestre: tira(2),
teoría: real, prác: real, cod_dep: tira(5))
Profesor
(cod_pro : tira(3), nombre : tira(40), teléfono: entero,
cod_dep: tira(5) )
Docencia
( cod_asg: tira(3), cod_pro: tira(3), gteo: entero, gpra: entero)
Esquema relacional
El lenguaje SQL.
cod_pro nombre teléfono cod_dep
JCC Juan C. Casamayor Ródenas 7796 DSIC RFC Robert Fuster i Capilla 6789 MAT JBD José V. Benlloch Dualde 5760 DISCA MAF María Alpuente Frasnedo 3560 DSIC CPG Cristina Pérez Guillot 7439 IDM JTM José M. Torralba Martínez 4590 OEM IGP Ignacio Gil Pechuán 3423 OEM DGT Daniel Gil Tomás 5679 DISCA MCG Matilde Celma Giménez 7756 DSIC
Profesor
cod_asg nombre semestreteoríapraccod_dep
BDA Bases de Datos 2B 3 3 DSIC AD1 Algoritmos y
Estructuras de Datos 1 1A 4 2 DSIC FCO Fundamentos de
computadores 1A 4,5 4,5 DISCA MADMatemática Discreta 1A 3 3 MAT INT Inglés Técnico 1B 3 3 IDM FFI Fundamentos Físicos
de la Informática 1A 3 3 FIS EC2 Estructuras de Computadores 2 2A 3 3 DISCA
Asignatura
c o d _ a sgc o d _ p r o g te o g p r a B D A J C C 2 4 M A D R F C 1 2 F C O D G T 2 2 A D 1 M A F 1 1 IN T C P G 1 0 E C 2 JB D 2 0 B D A M C G 1 3 A D 1 J C C 1 1 F C O JB D 2 2 A D 1 M C G 1 1Docencia
cod_dep nombre director teléfono
DSIC Sistemas Informáticos y Computación
V. Botti 3500
DISCA Ingeniería de Sistemas, Computadores y Automática
A. Crespo 5700
MAT Matemática Aplicada P. Pérez 6600 FIS Física Aplicada J. Linares 5200 IDM Idiomas B. Montero 5300 EIO Estadística e Investigación
Operativa L. Barceló 4900 OEM Org. de Empresas, Economía
Financ. y Contabilidad M. Pérez 6800
Departamento
BD relacional
El lenguaje SQL.
El lenguaje SQL.
Consultas sobre varias relaciones.
SELECT
[
ALL
|
DISTINCT
] A
1i
, A
2j
,... A
kl
| *
FROM
R
1
, R
2
, ...R
n
[
WHERE
condición
]
[
GROUP BY
B
1
, B
2
,...B
m
]
[
HAVING
condición
]
El lenguaje SQL.
Consultas sobre varias relaciones.
SELECT
[
ALL
|
DISTINCT
] A
1i
, A
2j
,... A
nk
| *
FROM
R
1
, R
2
, ...R
n
[
WHERE
condición
]
de las tuplas de R
1
, R
2
, ...R
n
para las cuales la
condición
se evalúa
a
CIERTO
, obtener el valor de los atributos A
1i
, A
2j
,... A
nk
A
1i:
denota el iésimo atributo de la relación R
1
El lenguaje SQL.
Obtener de todos los profesores: su código, su nombre y el
nombre de su departamento de adscripción.
SELECT
cod_pro, nombre, cod_dep
FROM
Profesor
SELECT
Profesor.cod_pro, Profesor.nombre,
Departamento.nombre
FROM
Profesor, Departamento
WHERE
Profesor.cod_dep = Departamento.cod_dep
De los pares de tuplas de
Profesor
y
Departamento
para los
cuales la condición se evalúa a
CIERTO
obtener el valor de los
atributos
cod_pro
y
nombre
de
Profesor
y
nombre
de
Departamento
.
cod_pro
nombre
teléfono
cod_dep
JCC
Juan C. Casamayor Ródenas
7796
DSIC
RFC
Robert Fuster i Capilla
6789
MAT
JBD
José V. Benlloch Dualde
5760
DISCA
MAF
María Alpuente Frasnedo
3560
DSIC
CPG
Cristina Pérez Guillot
7439
IDM
JTM
José M. Torralba Martínez
4590
OEM
IGP
Ignacio Gil Pechuán
3423
OEM
DGT
Daniel Gil Tomás
5679
DISCA
MCG
Matilde Celma Giménez
7756
DSIC
Profesor
cod_dep nombre director teléfono
DSIC Sistemas Informáticos y Computación
V. Botti 3500
DISCA Ingeniería de Sistemas,
Computadores y Automática A. Crespo 5700 MAT Matemática Aplicada P. Pérez 6600 FIS Física Aplicada J. Linares 5200 IDM Idiomas B. Montero 5300 EIO Estadística e Investigación
Operativa L. Barceló 4900 OEM Org. de Empresas, Economía
Financ. y Contabilidad M. Pérez 6800
Departamento
P r o f e s o r . c o d _ p r o P r o f e s o r . n o m b r e D e p a r t a m e n t o . n o m b r e J C C J u a n C . C a s a m a y o r R ó d e n a s S i s t e m a s I n f o r m á t i c o s y C o m p u t a c i ó n R F C R o b e r t F u s t e r i C a p i l l a M a t e m á t i c a A p l i c a d a J B D J o s é V . B e n l l o c h D u a l d e I n g e n i e r í a d e S i s t e m a s C o m p u t a d o r e s y A u t o m á t i c a M A F M a r í a A l p u e n t e F r a s n e d o S i s t e m a s I n f o r m á t i c o s y C o m p u t a c i ó n C P G C r i s t i n a P é r e z G u i l l o t I d i o m a s J T M J o s é M . T o r r a l b a M a r t í n e z O r g a n i z a c i ó n d e E m p r e s a s I G P I g n a c i o G i l P e c h u á n O r g a n i z a c i ó n d e E m p r e s a s D G T D a n i e l G i l T o m á s I n g e n i e r í a d e S i s t e m a s C o m p u t a d o r e s y A u t o m á t i c a M C G M a t i l d e C e l m a G i m é n e z S i s t e m a s I n f o r m á t i c o s y C o m p u t a c i ó nlas tuplas
marcadas de
Profesor y
Departamento
cumplen la
condición
re
lac
ión
res
ult
an
te
cod_pro
nombre
teléfono
cod_dep
JCC
Juan C. Casamayor Ródenas
7796
DSIC
RFC
Robert Fuster i Capilla
6789
MAT
JBD
José V. Benlloch Dualde
5760
DISCA
MAF
María Alpuente Frasnedo
3560
DSIC
CPG
Cristina Pérez Guillot
7439
IDM
JTM
José M. Torralba Martínez
4590
OEM
IGP
Ignacio Gil Pechuán
3423
OEM
DGT
Daniel Gil Tomás
5679
DISCA
MCG
Matilde Celma Giménez
7756
DSIC
Profesor
cod_dep nombre director teléfono
DSIC Sistemas Informáticos y Computación
V. Botti 3500
DISCA Ingeniería de Sistemas,
Computadores y Automática A. Crespo 5700 MAT Matemática Aplicada P. Pérez 6600 FIS Física Aplicada J. Linares 5200 IDM Idiomas B. Montero 5300 EIO Estadística e Investigación
Operativa L. Barceló 4900 OEM Org. de Empresas, Economía
Financ. y Contabilidad M. Pérez 6800
Departamento
P r o f e s o r . c o d _ p r o P r o f e s o r . n o m b r e D e p a r t a m e n t o . n o m b r e J C C J u a n C . C a s a m a y o r R ó d e n a s S i s t e m a s I n f o r m á t i c o s y C o m p u t a c i ó n R F C R o b e r t F u s t e r i C a p i l l a M a t e m á t i c a A p l i c a d a J B D J o s é V . B e n l l o c h D u a l d e I n g e n i e r í a d e S i s t e m a s C o m p u t a d o r e s y A u t o m á t i c a M A F M a r í a A l p u e n t e F r a s n e d o S i s t e m a s I n f o r m á t i c o s y C o m p u t a c i ó n C P G C r i s t i n a P é r e z G u i l l o t I d i o m a s J T M J o s é M . T o r r a l b a M a r t í n e z O r g a n i z a c i ó n d e E m p r e s a s I G P I g n a c i o G i l P e c h u á n O r g a n i z a c i ó n d e E m p r e s a s D G T D a n i e l G i l T o m á s I n g e n i e r í a d e S i s t e m a s C o m p u t a d o r e s y A u t o m á t i c a M C G M a t i l d e C e l m a G i m é n e z S i s t e m a s I n f o r m á t i c o s y C o m p u t a c i ó nlas tuplas
marcadas de
Profesor y
Departamento
no cumplen la
condición
re
lac
ión
res
ult
an
te
El lenguaje SQL.
cod_pro
nombre
teléfono
cod_dep
JCC
Juan C. Casamayor Ródenas
7796
DSIC
RFC
Robert Fuster i Capilla
6789
MAT
JBD
José V. Benlloch Dualde
5760
DISCA
MAF
María Alpuente Frasnedo
3560
DSIC
CPG
Cristina Pérez Guillot
7439
IDM
JTM
José M. Torralba Martínez
4590
OEM
IGP
Ignacio Gil Pechuán
3423
OEM
DGT
Daniel Gil Tomás
5679
DISCA
MCG
Matilde Celma Giménez
7756
DSIC
Profesor
cod_dep nombre director teléfono
DSIC Sistemas Informáticos y
Computación V. Botti 3500 DISCA Ingeniería de Sistemas,
Computadores y Automática
A. Crespo 5700
MAT Matemática Aplicada P. Pérez 6600 FIS Física Aplicada J. Linares 5200 IDM Idiomas B. Montero 5300 EIO Estadística e Investigación
Operativa L. Barceló 4900 OEM Org. de Empresas, Economía
Financ. y Contabilidad M. Pérez 6800
Departamento
P r o f e s o r . c o d _ p r o P r o f e s o r . n o m b r e D e p a r t a m e n t o . n o m b r e J C C J u a n C . C a s a m a y o r R ó d e n a s S i s t e m a s I n f o r m á t i c o s yC o m p u t a c i ó n R F C R o b e r t F u s t e r i C a p i l l a M a t e m á t i c a A p l i c a d a J B D J o s é V . B e n l l o c h D u a l d e I n g e n i e r í a d e S i s t e m a s C o m p u t a d o r e s y A u t o m á t i c a M A F M a r í a A l p u e n t e F r a s n e d o S i s t e m a s I n f o r m á t i c o s y C o m p u t a c i ó n C P G C r i s t i n a P é r e z G u i l l o t I d i o m a s J T M J o s é M . T o r r a l b a M a r t í n e z O r g a n i z a c i ó n d eE m p r e s a s I G P I g n a c i o G i l P e c h u á n O r g a n i z a c i ó n d e E m p r e s a s D G T D a n i e l G i l T o m á s I n g e n i e r í a d e S i s t e m a s C o m p u t a d o r e s y A u t o m á t i c a M C G M a t i l d e C e l m a G i m é n e z S i s t e m a s I n f o r m á t i c o s y C o m p u t a c i ó nlas tuplas
marcadas de
Profesor y
Departamento
cumplen la
condición
re
lac
ión
res
ult
an
te
El lenguaje SQL.
Consultas sobre varias relaciones.
SELECT
[
ALL
|
DISTINCT
] A
1i
, A
2j
,... A
nk
| *
FROM
R
1
, R
2
, ...R
n
[
WHERE
condición
]
R
1
X R
2
X ...X R
n
DONDE
condición
[A
1i
, A
2j
,..., A
nk
]
Álgebra
Relacional
El lenguaje SQL.
Consultas sobre varias relaciones.
SELECT
[
ALL
|
DISTINCT
] A
1i
, A
2j
,... A
nk
| *
FROM
R
1
, R
2
, ...R
n
[
WHERE
condición
]
{R
1
X.A
1i
,R
2
X.A
2j
,...,R
n
X.A
nk
|R
1
(R
1
X)
∧
R
2
(R
2
X)
∧
...
∧
R
n
(R
n
X)
∧
condición
}
Cálculo
Relacional
de Tuplas
Se asume que para cada relación que aparece en el FROM
existe una variable-tupla declarada sobre el esquema de la
relación.
R
1
X: R
1,
R
2
X: R
2, ....,
R
n
X: R
n
El lenguaje SQL.
SELECT
cod_pro, Profesor.nombre, Departamento.nombre
FROM
Profesor, Departamento
WHERE
Profesor.cod_dep = Departamento.cod_dep
¡ la calificación de los atributos sólo es
necesaria cuando puede existir ambigüedad!
SELECT
PX.cod_pro, PX.nombre, DX.nombre
FROM
Profesor PX, Departamento DX
WHERE
PX.cod_dep = DX.cod_dep
Para cada relación en el FROM se puede declarar una
variable de recorrido específica: PX, DX
{PX.cod_pro, PX.nombre, DX.nombre |
Profesor(PX)
∧
Departamento(DX)
∧
PX.cod_dep=DX.cod_dep}
Cálculo
Relacional
de Tuplas
Obtener la docencia de los profesores del DSIC: nombre del
profesor, nombre de la asignatura impartida y grupos
impartidos.
SELECT
FROM
WHERE
PX.nombre, AX.nombre, DX.gteo, DX.gpra
Profesor PX, Docencia DX, Asignatura AX
PX.cod_pro = DX.cod_pro
AND
AX.cod_asg = DX.cod_asg
AND
PX.cod_dep=“DSIC”
cod_pro nombre teléfono cod_dep
JCC Juan C. Casamayor Ródenas 7796 DSIC RFC Robert Fuster i Capilla 6789 MAT JBD José V. Benlloch Dualde 5760 DISCA MAF María Alpuente Frasnedo 3560 DSIC CPG Cristina Pérez Guillot 7439 IDM JTM José M. Torralba Martínez 4590 OEM IGP Ignacio Gil Pechuán 3423 OEM DGT Daniel Gil Tomás 5679 DISCA MCG Matilde Celma Giménez 7756 DSIC
Profesor
cod_asg nombre semestre teoría praccod_dep
BDA Bases de Datos 2B 3 3 DSIC AD1 Algoritmos y
Estructuras de Datos 1
1A 4 2 DSIC
FCO Fundamentos de
computadores 1A 4,5 4,5 DISCA MAD Matemática Discreta 1A 3 3 MAT INT Inglés Técnico 1B 3 3 IDM FFI Fundamentos Físicos
de la Informática 1A 3 3 FIS EC2 Estructuras de Computadores 2 2A 3 3 DISCA
Asignatura
c o d _ a sg
c o d _ p r o
g te o
g p r a
B D A
J C C
2
4
M A D
R F C
1
2
F C O
D G T
2
2
A D 1
M A F
1
1
IN T
C P G
1
0
E C 2
J B D
2
0
B D A
M C G
1
3
A D 1
J C C
1
1
F C O
J B D
2
2
A D 1
M C G
1
1
Docencia
El lenguaje SQL.
las tuplas marcadas de
Profesor, Asignatura y
Docencia cumplen la
condición
El lenguaje SQL.
Obtener el nombre de los profesores que imparten mas de
una asignatura.
SELECT
FROM
WHERE
PX.nombre
Profesor PX, Docencia D1X, Docencia D2X
PX.cod_pro = D1X.cod_pro
AND
PX.cod_pro = D2X.cod_pro
AND
D1X.cod_asg <> D2X.cod_asg
En este ejemplo el uso de las variables de recorrido (alias de
relación) es imprescindible.
El lenguaje SQL.
Obtener el nombre de los profesores que imparten
asignaturas que no son de su departamento.
SELECT
FROM
WHERE
PX.nombre
Profesor PX, Asignatura AX, Docencia DX
PX.cod_pro = DX.cod_pro
AND
AX.cod_asg = DX.cod_asg
AND
PX.cod_dep <> AX.cod_dep
El lenguaje SQL.
Consultas sobre varias relaciones.
SELECT
[
ALL
|
DISTINCT
] A
1i
, A
2j
,... A
nk
| *
FROM
R
1
, R
2
, ...R
n
[
WHERE
condición
]
condiciones de concatenación de
las relaciones R
1
, R
2
, ...R
n
AND
condiciones de la consulta
la concatenación entre R
1
, R
2
, ...R
n
se realiza
usualmente sobre los atributos de referencia de las
relaciones.
Subconsultas.
En una consulta (SELECT externa) se
utiliza una subconsulta (SELECT interna)
para obtener datos que serán utilizados
como argumentos de predicados de la
consulta.
SELECT
FROM
WHERE
PX.nombre
Profesor PX
PX.cod_dep
Obtener el nombre de los profesores adscritos al mismo
departamento que ‘JCC’.
(SELECT PY.cod_dep
FROM Profesor PY
WHERE PY.cod_pro=‘JCC’)
=
subconsulta: devuelve un valor utilizado como
operando del predicado de comparación =
SELECT
FROM
WHERE
PX.nombre
Profesor PX, Profesor PY
PX.cod_dep =
PY.cod_dep
AND
PY.cod_pro=‘JCC’
Obtener el nombre de los profesores adscritos al mismo
departamento que ‘JCC’.
¡en ocasiones las subconsultas no son imprescindibles
aunque sirven para estructurar la consulta!
El lenguaje SQL.
SELECT
FROM
WHERE
PX.nombre
Profesor PX, Docencia DX
PX.cod_pro = DX.cod_pro
AND
DX.cod_asg
Obtener el nombre de los profesores que imparten alguna
de las asignaturas impartidas por el profesor de código
‘JCC’.
(SELECT DY.cod_asg
FROM Docencia DY
WHERE DY.cod_pro=‘JCC’)
IN
subconsulta: devuelve una lista de valores
utilizada como argumento del predicado IN
El lenguaje SQL.
SELECT
FROM
WHERE
nombre
Profesor
cod_pro IN
Obtener el nombre de los profesores que imparten alguna
asignatura de mas de 6 créditos.
(SELECT cod_pro
FROM Docencia
WHERE
cod_asg IN
El lenguaje SQL.
(SELECT cod_asg
FROM Asignatura
WHERE(teoría+prac)>6))
¡las subconsultas se pueden anidar!
SELECT
FROM
WHERE
AX.nombre
Asignatura AX
(AX.teoría + AX.prac)
Obtener el nombre de las asignaturas que tienen menos
créditos.
(SELECT AY.teoría + AY.prac
FROM Asignatura AY)
<
subconsulta: devuelve una lista de valores (no
puede ser utilizada como operando de un
predicado de comparación).
Predicados que admiten subconsultas como
argumentos:
9
predicados de comparación α
: =, <>, >, <, >=, <=.
[expresión| subconsulta ] α
[expresión| subconsulta ]
9
predicado IN:
expresión IN (subconsulta)
9
predicados de comparación cuantificados:
expresión
α
[ALL| ANY] (subconsulta)
9
predicado EXISTS:
EXISTS (subconsulta)
9
predicado MATCH
9
predicado UNIQUE
Si la evaluación de la subconsulta es vacía, se devuelve una tupla de
valores nulos.
Predicados de comparación cuantificados:
>
>=
<
<=
=
<>
ALL
ANY
predicado de
comparación
cuantificado
9
Los predicados de comparación cuantificados con
ALL
se evalúan a
CIERTO si la comparación se evalúa a CIERTO para todos los valores
devueltos por la subconsulta.
9
Los predicados de comparación cuantificados con
ANY
o
SOME
se
evalúan a CIERTO si la comparación se evalúa a CIERTO para algún valor
devuelto por la subconsulta.
(subconsulta)
(expresión)
El lenguaje SQL.
SELECT
FROM
WHERE
AX.nombre
Obtener el nombre de las asignaturas que tienen el mayor
número de créditos.
(SELECT DISTINCT (AY.teoría + AY.prac)
FROM Asignatura AY)
>= ALL
subconsulta: devuelve una lista de valores
(créditos de todas las asignaturas).
Asignatura AX
(AX.teoría + AX.prac)
SELECT
FROM
WHERE
AX.nombre
(SELECT DISTINCT (AY.teoría + AY.prac)
FROM Asignatura AY)
>= ALL
Asignatura AX
(AX.teoría + AX.prac)
6
9
cod_asg nombre semestre teoría praccod_dep
BDA Bases de Datos 2B 3 3 DSIC AD1 Algoritmos y
Estructuras de Datos 1 1A 4 2 DSIC FCO Fundamentos de
computadores 1A 4,5 4,5 DISCA MAD Matemática Discreta 1A 3 3 MAT INT Inglés Técnico 1B 3 3 IDM FFI Fundamentos Físicos
de la Informática 1A 3 3 FIS EC2 Estructuras de Computadores 2 2A 3 3 DISCA
>=
ALL
6
9
El lenguaje SQL.
El lenguaje SQL.
SELECT
FROM
WHERE
AX.nombre
Obtener el nombre de las asignaturas que no son las de
menor número de créditos.
(SELECT DISTINCT (AY.teoría + AY.prac)
FROM Asignatura AY)
> ANY
subconsulta: devuelve una lista de valores
(créditos de todas las asignaturas).
Asignatura AX
(AX.teoría + AX.prac)
SELECT
FROM
WHERE
AX.nombre
(SELECT DISTINCT (AY.teoría + AY.prac)
FROM Asignatura AY)
> ANY
Asignatura AX
(AX.teoría + AX.prac)
6
9
cod_asg nombre semestre teoría praccod_dep
BDA Bases de Datos 2B 3 3 DSIC AD1 Algoritmos y
Estructuras de Datos 1 1A 4 2 DSIC FCO Fundamentos de
computadores 1A 4,5 4,5 DISCA MAD Matemática Discreta 1A 3 3 MAT INT Inglés Técnico 1B 3 3 IDM FFI Fundamentos Físicos
de la Informática 1A 3 3 FIS EC2 Estructuras de
Computadores 2 2A 3 3 DISCA