Sei sulla pagina 1di 23

SQL

Fundamentos de Bases de Datos

Concepcin de Sistemas de Informacin


Instituto de Computacin
Facultad de Ingeniera
Universidad de la Repblica

SQL- FBD CSI - InCo - Fing - UDELAR 1


Introduccin

SQL es un lenguaje que permite el acceso a las


funcionalidades de bsicas de un RDMBS
(Manejador de Bases de Datos Relacionales).
Tpicamente se puede usar desde una lnea de
comandos o desde otros lenguajes de programacin
como Java o C.
Se van a estudiar las caractersticas fundamentales
del Standard.

SQL- FBD CSI - InCo - Fing - UDELAR 2


Sublenguajes
DDL
Create Table
Alter Table
DML
Insert
Delete
Update
QL
Select
Tambin hay instrucciones para manejo de
seguridad, definicin de restricciones, etc.

SQL- FBD CSI - InCo - Fing - UDELAR 3


SQL vs Clculo de Tuplas

Estructura de SQL De i en adelante, Ti no aparece


en el select pero s en el from
S e l e c t T1 .a2 , T2 .a5 , ...Ti1 .a2
from T1 , T2 , ...Ti , ...
where ;

En Clculo
{< x1 .a2 , x2 .a5 , . . . , xi1 .a2 > /T1 (x1 ) T2 (x2 ) . . . Ti (xi ) }
Observar Que:
Sin importar la estructura de , la expresin en clculo
es segura porque todas las variables libres toman valores
de las tablas involucradas.
Cualquier consulta se puede escribir de esta forma.

SQL- FBD CSI - InCo - Fing - UDELAR 4


Ejemplos

F abs(#f, N ombre, Dir), P rods(#p, Desc),


V entas(#f, #p, P recio).
Devolver los nombres de los fabricantes que venden
el producto con nro 7848
Clculo de tuplas
{t.nombre/F abs(t) v.(V entas(v) v.#p = 7848
v.#f = t.#f )}
SQL
S e l e c t nombre
from Fabs t , V e n t a s v S e l e c t nombre
where e x i s t s ( s e l e c t from Fabs t , V e n t a s v
From v e n t a s v where #p=7848 and t .# f=v.# f ;
Where v.#p=7848 and t .# f=v.# f ) ;

SQL- FBD CSI - InCo - Fing - UDELAR 5


Ejemplos
Devolver los nombres de los vendedores que venden
el producto 7848 y tambin el producto 8747
Clculo de tuplas

{t.nombre/F abs(t) v.(V entas(v) v.#p = 7848 v.#f = t.#f


v1.(V entas(v1) v1.#f = t.#f v1.#p = 8747))}
SQL
S e l e c t nombre
from Fabs t , V e n t a s v
where #p=7848 and t .# f=v.# f and
exists ( select
from V e n t a s v1
where v1 .# f=t .# f and v1 .#p = 87 47) ) ;
SQL- FBD CSI - InCo - Fing - UDELAR 6
Ejemplos

Devolver los nombres de los vendedores que venden


el producto 7848 y tambin el producto 8747
SQL (Otra versin)
S e l e c t nombre
from Fabs t , V e n t a s v
where #p=7848 and t .# f=v.# f and
t .# f i n ( s e l e c t #f
from V e n t a s v1
where v1 .#p = 874 7) ) ;
SQL tiene los operadores y (in y not in)

SQL- FBD CSI - InCo - Fing - UDELAR 7


Ejemplos

Devolver los nombres de los vendedores que no


venden el producto 7848
Clculo de tuplas
{t.nombre/F abs(t) v.(V entas(v) v.#f = t.#f v.#p = 7848)}
SQL
S e l e c t nombre
from Fabs t
where not e x i s t s (
select
from V e n t a s v1
where v1 .# f=t .# f and v1 .#p = 7848 ) ;

SQL- FBD CSI - InCo - Fing - UDELAR 8


Ejemplos
Devolver los nombres de los fabricantes que venden
todos los productos con descripcin d1
Clculo de tuplas
{t.nombre/F abs(t) (p.(P rod(p) p.desc = d1
v1.(V entas(v1) v1.#f = t.#f v1.#p = p.#p))
p.(P rod(p) p.desc = d1 )}
SQL
S e l e c t f . nombre
From f a b s f
Where e x i s t s ( s e l e c t
from p r o d p
where p . desc=d1 ) and not e x i s t s ( s e l e c t
from p
where p . desc=d1
and not e x i s t s ( s e l e c t
from v e n t a v1
where v1 .# f=f .# f and v1 .#p=p.#p ) )

SQL- FBD CSI - InCo - Fing - UDELAR 9


SQL como Lenguaje de Consultas

SQL permite hacer operaciones que no son posibles


con la versin de CR vista en el curso.
El standard, actualmente permite:
recursividad
manejo temporal
consultas sobre tablas modificadas al vuelo.
Etc.
Tambin provee DDL y DML:
Ejs: Create table, insert.,delete, grant, etc.
Cada proveedor hace lo que quiere, por lo que:
Slo se ver la parte central de todo el lenguaje.
Luego hay que ir a los manuales.

SQL- FBD CSI - InCo - Fing - UDELAR 10


SQL: DDL

Create Table.
Create t a b l e <nombre> (
<nomatt> <t i p o > [[ < r e s t r i c c i n a t t >] [ , . . . ]
[< r e s t r i c c i n tab> [ , . . . ] ]
);
Ejemplos:
Create t a b l e Fabs ( Create t a b l e I t e m V t a (
numF i n t e g e r primary key , numF i n t e g e r r e f e r e n c e s Fabs . Numf ,
nombre varchar [ 1 2 8 ] not n u l l , numP i n t e g e r r e f e r e n c e s P r o d s . NumP,
d i r varchar [ 2 5 6 ] f e c h a date ,
); cantV i n t e g e r ,
Create t a b l e P r o d s ( p r e c i o U n i t number ( 1 2 , 2 ) ,
numP i n t e g e r primary key , primary key ( numF , numP , f e c h a )
desc t e x t )
);

SQL- FBD CSI - InCo - Fing - UDELAR 11


Estructura General de una Consulta SQL
S e l e c t <E x p r e s i o n e s de S a l i d a >
[ From <E x p r e s i o n e s de Tabla> ]
[ Order by <E x p r e s i o n e s de Orden> ]
Donde:
<Expresiones de Salida>: es una lista de nombres
de atributos o expresiones aritmticas.
<Expresiones de Tabla>: es un conjunto de
indicaciones sobre cmo se construye una tabla de base
para la consulta.
<Expresiones de Orden>: es una lista de nombres de
columnas que figuran en el select, con una indicacin
asc o desc para cada una.

SQL- FBD CSI - InCo - Fing - UDELAR 12


Expresiones de Salida

Pueden ser:
Nombres de funciones.
Select s y s d a t e ( ) ;
Nombres de atributos y/o expresiones aritmticas
complejas.
S e l e c t f e c h a , numP , F . nombre ,
p r e c i o U n i t cantV
From . . .
Funciones de agregacin ( Funciones Agregadas).
S e l e c t count ( )
From . . .

SQL- FBD CSI - InCo - Fing - UDELAR 13


Expresiones de Tablas

Son las que describen la tabla (auxiliar) de la cual


se toman valores en el resultado.
Incluyen el contenido de la lnea del From y las
clusulas Where, Group By y Having.
De esta forma, la estructura de una consulta queda
de la siguiente forma:
Select . . .
From <E x p r e s i o n e s de From>
Where <c o n d i c i o n e s s o b r e t u p l a s >
Group by < a t r i b u t o s d e l from>
Having <c o n d i c i o n e s s o b r e g r u p o s >

SQL- FBD CSI - InCo - Fing - UDELAR 14


Ejecucin de un Consulta
Se eligen las tuplas a Se seleccionan las
considerar evaluando tuplas que cumplan
las expresiones del from las condiciones.

S e l e c t <E x p r e s i o n e s de S a l i d a >
From <E x p r e s i o n e s de From> Se agrupan
Where <c o n d i c i o n e s s o b r e t u p l a s > de acuerdo a
Group by < a t r i b u t o s d e l from> los atributos
Having <c o n d i c i o n e s s o b r e g r u p o s > indicados.

Se seleccionan
los grupos que
Se computan los valores de salida.
cumplan las
condiciones.

SQL- FBD CSI - InCo - Fing - UDELAR 15


Expresiones en el From

Las expresiones ms simples que se pueden poner en


from son listas de tablas separadas por ,. En este
caso, calcula el producto cartesiano de las tablas.
Adems pueden aparecer expresiones de Join:
<expr. de from> [<tipo>] join <expr. de
from> <using o on>
El tipo de join puede ser:
Natural
(Left|Right|Full) Outer

SQL- FBD CSI - InCo - Fing - UDELAR 16


Ejemplos: Natural Join
La siguiente consulta:
Select
from P r o d s n a t u r a l j o i n I t e m V t a
where numF=5

es equivalente a:
S e l e c t P r o d s . , I t e m V t a . numF , I t e m V t a . Fecha , . . .
from Prods , I t e m V t a
where numF=5 and
I t e m V t a . numP = P r o d s . numP

Natural Join agrega la condicin de igualdad para


los atributos de igual nombre en las tablas indicadas.
Slo devuelve las tuplas que cumplen la condicin y
proyecta una vez por cada atributo.
SQL- FBD CSI - InCo - Fing - UDELAR 17
Ejemplos: Join Using y Join on
La clusula Using recibe la lista de atributos que
deben participar en igualdades.
Select
from P r o d s j o i n I t e m V t a using (numP ) ;
where numF=5

La clusula On recibe la condicin de join que


puede no ser una igualdad.
S e l e c t P r o d s . , I t e m V t a . numF , I t e m V t a . Fecha , . . .
from P r o d s j o i n I t e m V t a
on ( I t e m V t a . numP = P r o d s . numP)
where numF=5

Using proyecta una vez por cada atributo pero On


no lo hace.
SQL- FBD CSI - InCo - Fing - UDELAR 18
Outer Join
Los casos anteriores, siempre devuelven las tuplas
que cumplen la condicin.
Los Outer Join devuelve las que cumplen las
condiciones y tambin las algunas de las que no las
cumplen completadas con nulos.
Los nombres (Left,Right y Full) se refieren al lado
del que devuelven datos.
Left Outer Join: todas las tuplas de la tabla de la
izquierda. Cuando la condicin falla, completa la derecha
con nulos.
Right Outer Join: todas las tuplas de la tabla de la
derecha . Cuando la condicin falla, completa la
izquierda con nulos.

SQL- FBD CSI - InCo - Fing - UDELAR 19


Ejemplos: Outer Join
Prods ItemVta
numP desc numf numP pUnit
5 Tornillos 1/4 1 5 5
4 Martillo 1 3 20
select
from P r o d s as p l e f t outer j o i n I t e m V t a I
using (numP ) ;

Resultado
numP desc numf pUnit
5 Tornillos 1/4 1 5
4 Martillo
SQL- FBD CSI - InCo - Fing - UDELAR 20
Group By y Having

La lista de atributos en el Group By indica sobre


qu atributos se deben agrupar las tuplas de la tabla
base. El resultado de la consulta es una tupla por
grupo.
Las funciones de agregacin se computan sobre
cada grupo.
Hay que garantizar que los valores de salida
(Select) son nicos para cada grupo.
La condicin Having selecciona los grupos que
quedan en el resultado.

SQL- FBD CSI - InCo - Fing - UDELAR 21


Ejemplos: Group By y Having
ItemVta Para cada vendedor
numf numP pUnit obtener la cantidad de
1 5 5 productos que vende.
1 3 20
2 3 19
2 4 20
2 5 10

ItemVta
s e l e c t numF , count (numP) numf count(*)
from I t e m V t a
group by numF 1 2
2 3
SQL- FBD CSI - InCo - Fing - UDELAR 22
Ejemplos: Group By y Having

Para cada vendedor que vende productos con


numero mximo mayor que 3, obtener la cantidad
de productos que vende

s e l e c t numF , count (numP)


from I t e m V t a
group by numF
having max(numP) > 3

SQL- FBD CSI - InCo - Fing - UDELAR 23

Potrebbero piacerti anche