ch3 español
TRANSCRIPT
3.1
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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
3.2
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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
3.4
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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 nombrefrom 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_preciofrom video
3.5
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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.
3.6
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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_numerofrom prestamowhere 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
3.7
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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’
3.8
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
Ver el esquema Atras
La operació n de renombres La 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, montofrom prestatario, prestamowhere prestatario.numero-prestamo = prestamo.numero-prestamo
3.9
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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-nombrefrom clientewhere 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.
3.10
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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-nombrefrom prestatario, prestamowhere 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
3.11
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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)
3.12
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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 mediomin: valor minimo max: valor maximosum: suma de valorescount: 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
3.13
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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, cuentawhere depositor.cuenta-numero = cuenta.cuenta-numerogroup 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
3.14
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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 cuentagroup by agencia-nombrehaving 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
3.15
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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-numerofrom prestamowhere 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
3.16
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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
3.17
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
Ver el esquema Atras
Subconsultas anidadas (Sentencia Subconsultas 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)
3.18
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
Ver el esquema Atras
Subconsultas anidadas (Sentencia Subconsultas 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
3.19
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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.
3.22
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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 CUENTAwhere agencia-nombre in (select agencia-nombre
from agencia where agencia-ciudad = ‘QUITO’)
delete from depositorwhere cuenta-numero in (select cuenta-numero
from agencia, cuenta where agencia-ciudad = ‘QUITO’ and agencia-nombre = cuenta.agencia-nombre)
3.23
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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)
3.24
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
Ver el esquema Atras
Modificando BD – Insert-sqlModificando BD – Insert-sql
� Agrega una nueva cuenta
insert into cuentavalues (‘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)
3.26
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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 cuentaset cuenta-monto = cuenta-monto ∗ 1.06where cuenta-monto > 10000
update cuentaset cuenta-monto = cuenta-monto ∗ 1.05where balance ≤ 10000
� El orden es importante, en la siguiente lámina vamos a usar la sentencia case
3.27
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
Ver el esquema Atras
Uso de Case-End para hacer Uso 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 cuentaset cuenta-monto
= case
when cuenta-monto <= 10000
then cuenta-monto*1.05
else cuenta-monto * 1.06
end
3.30
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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 joinleft outer joinright outer joinfull outer join
Join Conditions
naturalon <predicate>using (A1, A2, ..., An)
3.31
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
Ver el esquema Atras
Joined Relations – Datasets for Joined 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
3.32
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
Ver el esquema Atras
Joined Relations – Examples Joined Relations – Examples
� loan inner join borrower onloan.loan-number = borrower.loan-number
� loan left outer join borrower onloan.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
3.33
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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
3.34
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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-namefrom (depositor natural full outer join borrower)where account-number is null or loan-number is null
3.35
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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:
3.36
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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
3.37
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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
3.38
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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-cityfrom depositor, customer, accountwhere depositor.customer-name = customer.customer-name
and depositor account-number = account.account-numberand 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.
3.39
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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
3.40
U.L.E.A.M. – Chone Administración de Bases de DatosIng. Jorge Iván Pincay Ponce, [email protected]
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.