1. 3.1
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Capítulo 3: SQLCapítulo 3: SQL
Structura básica
Operaciones con Conjuntos
Funciones de Agregado
Valores Null
Subconsultas Anidadas
Relaciones Derivadas
Vistas
Modificació n de la Base de Datos
Union de Relaciones
DDL, Data Definition Language
2. 3.2
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Agencia (AgenciaNombre, AgenciaCiudad)
Cuenta (Cuenta-numero, AgenciaNombre, CuentaMonto)
Depositor (ClienteNombre, CuentaNumero)
Cliente (ClienteNombre, ClienteCalle, ClienteCiudad)
Prestatario (ClienteNombre, PrestamoNumero)
Prestamo (PrestamoNumero, AgenciaNombre, Monto)
Esquema usado en los EjemplosEsquema usado en los Ejemplos
3. 3.3
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Estructura BásicaEstructura Básica
SQL esta basado en un conjunto de operaciones relacionales.
Una tipica consulta en SQL ha de tener la siguiente forma:
select A1, A2, ..., An
from r1, r2, ..., rm
where P
A representa attributos
r representa relaciones
P es un condicionante
El resultado de una consulta SQL es una relació n
4. 3.4
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
La clausula SelectLa clausula Select
Select lista los atributos deseados en una consulta
Ejemplo: Encuentra los nombres de los clientes
select nombre
from cliente
NOTE: SQL no permite ‘-’ en los nombres, en ves de ese caracter puede usar “_”
NOTE: SQL no es sensible a las mayúsculas y minúsculas, por lo que puede
indistamente escribir en cualquiera de ellas.
SQL permite registros duplicados en él resultado de una consulta.
Para forzar la eliminació n de registros o filas duplicadas teclee distinct despues
de la palabra select.
Encuentre todos los precios de videos de videos disponibles en el videocentro,
pero sin que estos precios se vean repetidos
select distinct video_precio
from video
5. 3.5
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
La clausula Select (Cont.)La clausula Select (Cont.)
Un asterisco en la clausula Select es un comodin que significa “todos los
atributos”
select *
from alquiler
Select puede incluir expresiones aritméticas (+, –, ∗, /). Ejemplo
select prestamo_numero, prestamo_ciudad, monto*1000 from prestamo
Note como en el ejemplo anterior el valor monto es multiplicado por 100.
6. 3.6
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Clausula WhereClausula Where
Where especifica condiciones que deben cumplir los registros o filas a mostrar
en los resultados.
Ejemplo: Encontrar todos los numeros de prestamos realizados en la Agencia de
la ciudad de Manta cuyos montos sean mayor a $1200
select prestamo_numero
from prestamo
where agencia_nombre = ‘Manta’ and monto >1200
Note como es posible utilizar los operadores ló gicos AND, OR, NOT.
Como detalle considere tambien la posibilidad de incluir expresiones aritméticas
en las condiciones del where.
SQL incluye el operador de comparació n between (tiene significado “entre” en
españ ol)
Ejemplo: encuentra el numero de prestamos cuyos montos esten entre $90,000 y
$100,000
select prestamo_numero from prestamo where monto between 90000 and
100000
7. 3.7
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
La clausula fromLa clausula from
Lista las entidades que participan en la consulta; pero
un uso más avanzado es lo que se conoce como
producto cartesiano….
Encuentre el producto cartesiano de Prestatario por
Prestamo
select ∗ from prestatario, prestamo
Encuentra el nombre , numero de prestamos y monto
del prestamo de todos los clientes que tienen un
prestamo en la agencia Manta.
select cliente-nombre, prestatario.prestamo-numero,
monto from prestatario, prestamo where
prestatario.prestamo-numero= prestamo.prestamo-
numero and agencia-nombre = ‘Manta’
8. 3.8
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
La operació n de renombresLa operació n de renombres
(atributos derivados)(atributos derivados)
SQL permite renombrar relaciones y atributos usando la sentencia AS:
viejonombre as nuevonombre
Encuentra el nombre, numero de prestamos, monto de prestamos de todos los
clientes. Renombra la columna numero-prestamo como prestamo.id
select cliente-nombre, prestatario.numero-prestamo as prestamo-id, monto
from prestatario, prestamo
where prestatario.numero-prestamo = prestamo.numero-prestamo
9. 3.9
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Operaciones con cadenasOperaciones con cadenas
SQL incluye varios operadores para manejar cadenas como los siguientes
(realmente son muchos pero se iran aprendiendo de a poco):
porcentaje (%). el % permite hacer referencia a cualquier subcadena.
subrayado (_). _ para hacer referencia a cualquier caracter.
Encuentra el nombre de los clientes cuyo nombre de calle incluya la palabra
“Main”.
select cliente-nombre
from cliente
where cliente-calle like ‘%Main%’
SQL soporta una variedad de operaciones de cadena como:
concatenació n (using “||”)
convertir de minusculas a mayusculas y viceversa
encontrar tamañ os de cadenas, extraer subcadenas, etc.
10. 3.10
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Ordenando registrosOrdenando registros
Liste ordenadamente los nombres de los clientes que tienen un prestamo en la
Agencia Manta. Dichos datos no han de estar repetidos (por ejemplo cuando un
cliente tuviese dos creditos y no antepongo distinct sin duda que el aparecería
dos veces en el resultado y eso en este ejemplo no es deseable )
select distinct cliente-nombre
from prestatario, prestamo
where prestatrio.prestamo-numero = prestamo.prestamo-numero and
agencia-nombre = ‘Manta’
order by cliente-nombre
La clausula desc es una variante para ordenar los datos de forma descendente.
Si ella no se especifica se asume que usted uso asc que sirve para ordenar de
forma ascendente.
Ejemplo: order by cliente-nombre desc
11. 3.11
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Operaciones con conjuntos,Operaciones con conjuntos,
EjemplosEjemplos
Las operaciones de conjuntos tales como union, intersect, and except
operan de la misma forma en que les estudió en Teoría de conjuntos.
Cada una de las operaciones anteriores de forma automática eliminan
duplicados; Si se quisiesen los datos duplicados bastaría escribir union all,
intersect all y except all.
Encuentre todos los clientes que tienen un préstamo, una cuenta, o ambos :
(select cliente-nombre from depositor)
union
(select cliente-nombre from prestatario)
Encuentre todos los clientes que tienen préstamo y cuenta.
(select cliente-nombre from depositor)
intersect
(select cliente-nombre from prestatario)
Encuentre todos los clientes que tienen una cuenta pero ningún préstamo
(select cliente-nombre from depositor)
except
(select cliente-nombre from prestatario)
12. 3.12
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Funciones de Agregado, EjemplosFunciones de Agregado, Ejemplos
Estas funciones retornan un valor y operan sobre un conjuntos de valores de un
campo.
avg: valor medio
min: valor minimo
max: valor maximo
sum: suma de valores
count: numero de valores
Encuentre el valor medio del saldo de cuentas en la agencia ‘Manta’
select avg (cuenta-monto) from cuenta where Agencia-Nombre = ‘Manta’
Encuentre el numero de clientes registrados
select count (*) from cliente
13. 3.13
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Funciones de Agregado, Ejemplos–Funciones de Agregado, Ejemplos–
Group ByGroup By
Encuentra el número de depositores de cada agencia.
Select agencia-nombre, count (cliente-nombre)
from depositor, cuenta
where depositor.cuenta-numero = cuenta.cuenta-numero
group by agencia-nombre
Nota: Los atributos en la cláusula Select que esten fuera de las funciones de
agregado deben aparecer en la sentencia group by
14. 3.14
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Funciones de Agregado, Ejemplos–Funciones de Agregado, Ejemplos–
HAVINGHAVING
Encuentra el nombre de las agencia donde la media de saldos de cuentas es
mayor a $1200.
select Agencia-nombre, avg (cuenta-nomto)
from cuenta
group by agencia-nombre
having avg (cuenta-monto) > 1200
Note: Las condiciones de having se aplican después de la formació n de
grupos, en tanto que las condiciones del where son aplicadas antes de la
formació n de los grupos
15. 3.15
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Valores NullValores Null
Es posible que para algunos registros se tenga valores null en algunos de sus
atributos
null significa un valor desconocido o que es un valor que no existe.
El predicado is null puede ser usado para checar valores nulos.
Ejemplo: Encuentra todos los numeros de prestamos que aparecen en la
tabla prestamos con valores nulos en los montos.
select prestamo-numero
from prestamo
where monto is null
El resultado de cualquier expresió n aritmética que involucre null es tambien
null
Ejemplo: 5 + null retorna null
Nota: algunas funciones de agregado simplemente ignoran los valores nulos
16. 3.16
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Valores Null y operaciones ló gicasValores Null y operaciones ló gicas
Cualquier comparació n con null retorna unknown (que tiene
significado desconocido)
Ejemplo 5 < null or null <> null or null = null
Three-valued logic using the truth value unknown:
OR: (unknown or true) = true, (unknown or false) = unknown
(unknown or unknown) = unknown
AND: (true and unknown) = unknown, (false and unknown) =
false,
(unknown and unknown) = unknown
NOT: (not unknown) = unknown
17. 3.17
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Subconsultas anidadas (SentenciaSubconsultas anidadas (Sentencia
IN)IN)
SQL provee mecanismos para realizar subconsultas
Una subconsulta es un select-from-where que es especificado dentro de una
subconsulta.
Un uso común de las subconsultas es ejecutar consultas sobre subgrupos
ló gicos de datos
Ejemplo: Encuentre todos los clientes que tienen cuenta y préstamo en el banco
select distinct cliente-nombre from prestatario where cliente-nombre in
(select cliente-nombre from depositor)
Ejemplo de un caso supuesto: Encuentre todos los clientes que tienen un
préstamo en el banco pero no tenga una cuenta en el banco
select distinct cliente-nombre from prestatario where cliente-nombre NOT in (select
cliente-nombre from depositor)
18. 3.18
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Subconsultas anidadas (SentenciaSubconsultas anidadas (Sentencia
IN)IN)
Encuentre todos los clientes que tienen una cuenta y un prestamo en la agencia
Chone
select distinct cliente-nombre from prestatario, prestamo where
prestatario.prestamo-numero = prestamo.prestamo-numero and Agencia-
nombre = ‘Chone’
and (agencia-nombre, cliente-nombre) in
(select agencia-nombre, cliente-nombre from depositor, cuenta
where depositor.cuenta-numero = cuenta.cuenta-numero)
Note: Esta consulta puede ser escrita de una manera muy simple, por tanto el
ejemplo es realmente ilustrativo
19. 3.19
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Relaciones DerivadasRelaciones Derivadas
Encuentre la media del saldo de cuentas de esas agencias donde la media del
saldo de cuentas es mayor a $1200
select agencia-nombre, media-saldo
from (select agencia-nombre, avg (saldo) from cuenta group by Agencia-nombre)
as rel-derivada (Agencia-nombre, media-saldo)
where media-saldo > 1200
Note que no se necesita usar having, después de calcular temporalmente la
vista rel-derivada en la clausula from, pues los atributos de la relació n derivada
pueden ser usados directamente en la claúsula where.
20. 3.22
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Modificando BD – Delete-sqlModificando BD – Delete-sql
Borra todas las cuentas registradas en la agencia ‘FLAVIO
ALFARO’ delete from cuenta
where agencia-nombre = ‘FLAVIO ALFARO’
Borra todas las cuentas de todas las agencias localizadas en la
ciudad de QUITO.
delete from CUENTA
where agencia-nombre in (select agencia-nombre
from agencia
where agencia-ciudad = ‘QUITO’)
delete from depositor
where cuenta-numero in
(select cuenta-numero
from agencia, cuenta
where agencia-ciudad = ‘QUITO’
and agencia-nombre = cuenta.agencia-nombre)
21. 3.23
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Modificando BD – Delete-sqlModificando BD – Delete-sql
Borra todos los registros que esten por debajo de la media del
saldo de cuentas del banco.
delete from cuenta
where cuenta-monto< (select avg (cuenta-monto)
from cuenta)
Problem: as we delete tuples from deposit, the average balance
changes
Solution used in SQL:
1. First, compute avg balance and find all tuples to delete
2. Next, delete all tuples found above (without recomputing avg or
retesting the tuples)
22. 3.24
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Modificando BD – Insert-sqlModificando BD – Insert-sql
Agrega una nueva cuenta
insert into cuenta
values (‘C001’, ‘CHONE’,1200)
O LO QUE ES LO MISMO
insert into cuenta (agencia-nombre, cuenta-monto, cuenta-
numero) values (‘CHONE’, 1200, ‘C001’)
Agrega un nuevo registro a una cuenta pero con un saldo null
insert into cuenta values (‘C002’,‘MANTA’, null)
23. 3.26
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Modificando BD – Insert-sqlModificando BD – Insert-sql
Incrementa en un 6% todas las cuentas con montos sobre los
$10000, todas las otras se deben icrementar en un 5%.
Se necesita escribir dos sentencias updtes:
update cuenta
set cuenta-monto = cuenta-monto ∗ 1.06
where cuenta-monto > 10000
update cuenta
set cuenta-monto = cuenta-monto ∗ 1.05
where balance ≤ 10000
El orden es importante, en la siguiente lámina vamos a usar la
sentencia case
24. 3.27
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Uso de Case-End para hacerUso de Case-End para hacer
Updates condicionalesUpdates condicionales
Consultas como las anteriores donde se nos presenten casos
del clasico if-else se pueden escribir así:
update cuenta
set cuenta-monto
= case
when cuenta-monto <= 10000
then cuenta-monto*1.05
else cuenta-monto * 1.06
end
25. 3.30
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Joined RelationsJoined Relations
La operació n JOIN toma dos relaciones y devuelve otra relaciín.
En suma esta operació n es utilizada como las tipicas subconsultas (consultas en
FROM)
La condicion del JOIN define que tuplas (esto es filas o registros) y por ende que
atributos se presentaran en la relació n resultantes
Join type – Esxsiten cuatro tipos de JOIN a saber:
Nota: Aunque existen cuatro tipos de JOIN en la práctica se suele usar INNER JOIN y
pocas veces los otros…
Ejemplo;
Join Types
inner join
left outer join
right outer join
full outer join
Join Conditions
natural
on <predicate>
using (A1, A2, ..., An)
26. 3.31
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Joined Relations – Datasets forJoined Relations – Datasets for
ExamplesExamples
Relation loan
Relation borrower
customer-name loan-number
Jones
Smith
Hayes
L-170
L-230
L-155
amount
3000
4000
1700
branch-name
Downtown
Redwood
Perryridge
loan-number
L-170
L-230
L-260
Note: borrower information missing for L-260 and loan
information missing for L-155
27. 3.32
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Joined Relations – ExamplesJoined Relations – Examples
loan inner join borrower on
loan.loan-number = borrower.loan-number
loan left outer join borrower on
loan.loan-number = borrower.loan-number
branch-name amount
Downtown
Redwood
3000
4000
customer-name loan-number
Jones
Smith
L-170
L-230
loan-number
L-170
L-230
branch-name amount
Downtown
Redwood
Perryridge
3000
4000
1700
customer-name loan-number
Jones
Smith
null
L-170
L-230
null
loan-number
L-170
L-230
L-260
28. 3.33
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Joined Relations – ExamplesJoined Relations – Examples
loan natural inner join borrower
loan natural right outer join borrower
branch-name amount
Downtown
Redwood
3000
4000
customer-name
Jones
Smith
loan-number
L-170
L-230
branch-name amount
Downtown
Redwood
null
3000
4000
null
customer-name
Jones
Smith
Hayes
loan-number
L-170
L-230
L-155
29. 3.34
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Joined Relations – ExamplesJoined Relations – Examples
loan full outer join borrower using (loan-number)
Find all customers who have either an account or a loan (but
not both) at the bank.
branch-name amount
Downtown
Redwood
Perryridge
null
3000
4000
1700
null
customer-name
Jones
Smith
null
Hayes
loan-number
L-170
L-230
L-260
L-155
select customer-name
from (depositor natural full outer join borrower)
where account-number is null or loan-number is null
30. 3.35
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Data Definition Language (DDL)Data Definition Language (DDL)
The schema for each relation.
The domain of values associated with each attribute.
Integrity constraints
The set of indices to be maintained for each relations.
Security and authorization information for each relation.
The physical storage structure of each relation on disk.
Allows the specification of not only a set of relations but also
information about each relation, including:
31. 3.36
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Domain Types in SQLDomain Types in SQL
char(n). Fixed length character string, with user-specified length n.
varchar(n). Variable length character strings, with user-specified
maximum length n.
int. Integer (a finite subset of the integers that is machine-dependent).
smallint. Small integer (a machine-dependent subset of the integer
domain type).
numeric(p,d). Fixed point number, with user-specified precision of p
digits, with n digits to the right of decimal point.
real, double precision. Floating point and double-precision floating
point numbers, with machine-dependent precision.
float(n). Floating point number, with user-specified precision of at least n
digits.
Null values are allowed in all the domain types. Declaring an attribute to be
not null prohibits null values for that attribute.
create domain construct in SQL-92 creates user-defined domain types
create domain person-name char(20) not null
32. 3.37
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Date/Time Types in SQL (Cont.)Date/Time Types in SQL (Cont.)
date. Dates, containing a (4 digit) year, month and date
E.g. date ‘2001-7-27’
time. Time of day, in hours, minutes and seconds.
E.g. time ’09:00:30’ time ’09:00:30.75’
timestamp: date plus time of day
E.g. timestamp ‘2001-7-27 09:00:30.75’
Interval: period of time
E.g. Interval ‘1’ day
Subtracting a date/time/timestamp value from another gives an interval value
Interval values can be added to date/time/timestamp values
Can extract values of individual fields from date/time/timestamp
E.g. extract (year from r.starttime)
Can cast string types to date/time/timestamp
E.g. cast <string-valued-expression> as date
33. 3.38
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Example QueryExample Query
Specify the query in SQL and declare a cursor for it
EXEC SQL
declare c cursor for
select customer-name, customer-city
from depositor, customer, account
where depositor.customer-name = customer.customer-name
and depositor account-number = account.account-number
and account.balance > :amount
END-EXEC
From within a host language, find the names and cities of
customers with more than the variable amount dollars in some
account.
34. 3.39
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Updates Through CursorsUpdates Through Cursors
Can update tuples fetched by cursor by declaring that the cursor
is for update
declare c cursor for
select *
from account
where branch-name = ‘Perryridge’
for update
To update tuple at the current location of cursor
update account
set balance = balance + 100
where current of c
35. 3.40
U.L.E.A.M. – Chone
Administración de Bases de Datos
Ing. Jorge Iván Pincay Ponce, pj-83@hotmail.com
Ver el esquema Atras
Other SQL FeaturesOther SQL Features
SQL sessions
client connects to an SQL server, establishing a session
executes a series of statements
disconnects the session
can commit or rollback the work carried out in the session
An SQL environment contains several components,
including a user identifier, and a schema, which
identifies which of several schemas a session is using.