Está en la página 1de 25

Tema 4.

Lenguajes de consulta comerciales


Tema 4. Lenguajes de consulta comerciales
4.1. Introduccin
En el tema anterior hemos estudiado las operaciones del lgebra relacional y el clculo
relacional, imprescindibles para entender las consultas que podemos realizar en una
base de datos relacional. En general, el lgebra relacional est clasificada como un
lenguaje de consulta formal procedimental, en el que el usuario indica cmo (en qu
orden) se deben especificar las operaciones de la consulta para obtener el resultado
deseado, mientras que el clculo relacional es no procedimental.
En este tema vamos a estudiar dos lenguajes de consulta comerciales, como son
el SQL, basado en lgebra relacional y clculo relacional de tuplas, y el QBE, basado en
clculo relacional de dominios.
Los SGBDRs comerciales cuentan con una interfaz de lenguaje declarativo de
alto nivel en el que se especifica la consulta en SQL (Lenguaje de Consulta
Estructurado, del ingls Structured Query Language) o QBE, y el propio SGBD es el
que se encarga de realizar las optimizaciones necesarias para ejecutar la consulta.
4.2 SQL
SQL fue diseado e implementado por IBM Research y se ha convertido en un estndar
para las bases de datos relacionales. Adems, es posible que los programadores de
aplicaciones escriban sentencias SQL en las aplicaciones de bases de datos, dando lugar
a lo que se conoce como SQL embebido.
SQL es un lenguaje de consulta completo, y se puede utilizar como DDL o como
DML, ya que cuenta con sentencias para
Definicin de datos
Consulta de datos
Actualizacin de datos
Adems, SQL cuenta con mecanismos para la definicin de vistas de la base de
datos, creacin y eliminacin de ndices y para la incorporacin de sentencias SQL en
lenguajes de programacin de propsito general.
1
Tema 4. Lenguajes de consulta comerciales
4.2.1. Definicin de datos en SQL
SQL utiliza los trminos de tabla (table), fila (row) y columna (column) en lugar de los
trminos relacin, tupla y atributo del lgebra relacional. Las rdenes SQL para la
definicin de datos son CREATE (crear), ALTER (modificar) y DROP (eliminar).
Antes de estudiar estas operaciones, analizaremos brevemente los tipos de
dominios disponibles y los conceptos de esquema y catlogo.
4.2.1.1. Tipos de dominios
SQL tiene distintos tipos de datos disponibles, entre los que caben destacar aquellos
para la definicin de caracteres numricos, cadenas, fecha y hora.
Los tipos de datos numricos permiten la definicin de nmeros enteros
(INTEGER o INT, SMALLINT) o reales (FLOAT, REAL, DOUBLE PRECISION).
Incluso es posible definir nmeros reales especificando la precisin en forma de nmero
de decimales (DECIMAL(i,j), donde i especifica la precisin, y j el nmero de
dgitos que hay detrs del punto decimal).
Los tipos de datos cadena pueden ser de longitud fija (CHAR(n) o
CHARACTER(n), donde n representa el nmero de caracteres) o de longitud variable
(VARCHAR(n), donde n es el nmero mximo de caracteres).
En cuanto a los tipos de fecha y hora, las fechas se definen mediante DATE y las
horas mediante TIME. Las componentes de DATE son YEAR, MONTH y DAY, y suelen ir
en la forma YYYY-MM-DD. Las componentes de TIME son HOUR, MINUTE y
SECOND, y suele ir en la forma HH:MM:SS.
Si queremos definir un dominio explcitamente (como un tipo en un lenguaje de
programacin), podemos usar CREATE DOMAIN dominio tipo_datos. Posteriormente
podremos usar este dominio al definir los atributos de las tablas.
4.2.1.2. Esquemas y catlogos
Las primeras versiones de SQL no contemplaban el concepto de esquema de base de
datos relacional, y todas las tablas (relaciones) se consideraban parte del mismo
esquema. El concepto de esquema SQL se incorpor en SQL2 con el fin de agrupar
tablas y otros elementos pertenecientes a la misma aplicacin.
Un esquema SQL se identifica con un nombre de esquema y consta de:
Un identificador de autorizacin que indica al usuario o la cuenta que es
propietario del esquema.
Los descriptores de cada elemento del esquema. Entre estos elementos se
encuentran las tablas, vistas, dominios y autorizaciones).
Los esquemas se crean mediante la instruccin CREATE SCHEMA, que puede
contener las definiciones de todos los elementos del esquema. Tambin podemos
asignar un nombre y autorizacin al esquema de forma que se puedan definir sus
elementos ms adelante.
2
Tema 4. Lenguajes de consulta comerciales
Por ejemplo, esta instruccin crea un esquema denominado BANCO, cuyo
propietario es el usuario con autorizacin MLOPEZ:
CREATE SCHEMA BANCO AUTHORIZATION MLOPEZ;
Adems del concepto de esquema, SQL2 utiliza el concepto de catlogo, que es
una coleccin con nombre de esquemas SQL.
4.2.1.3. Definicin de tablas. Especificacin de restricciones
Mediante la orden CREATE TABLE podemos crear cada una de las tablas de nuestra
base de datos especificando su nombre, sus atributos y sus restricciones, donde el
nombre se puede especificar sin ms, o bien despus del nombre del esquema seguido
de un punto.
CREATE TABLE BANCO.CLIENTE... o CREATE TABLE CLIENTE...
En primer lugar se especifican los atributos, cada uno con su nombre, su
dominio (un tipo de datos) y las restricciones en el caso de que las haya (p.e. ser un
valor no nulo).
A continuacin se especifican las restricciones de clave, de integridad de
entidades y de integridad referencial.
Aqu vemos un ejemplo de creacin de una tabla en SQL:
CREATE TABLE CLIENTES
(NOMBRECLI VARCHAR(50) NOT NULL,
DNICLI VARCHAR(8) NOT NULL,
DOMICILIO VARCHAR(50) NOT NULL,
PRIMARY KEY (DNICLI)
ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE CUENTAS
(NUMEROCTA VARCHAR(10) NOT NULL,
SALDO DECIMAL(12,2) NOT NULL,
NOMBRESUC VARCHAR(50) NOT NULL,
PRIMARY KEY (NUMEROCTA)
ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE CTACLI
(DNICLI VARCHAR(8) NOT NULL,
NUMEROCTA VARCHAR(20) NOT NULL,
PRIMARY KEY (DNICLI, CTACLI),
FOREIGN KEY (DNICLI) REFERENCES CLIENTES(DNICLI),
FOREIGN KEY (NUMEROCTA) REFERENCES
3
Tema 4. Lenguajes de consulta comerciales
CUENTAS(NUMEROCTA)
);
La forma ms sencilla de especificar en la definicin de una tabla que un atributo o un
conjunto de atributos son clave es mediante una declaracin PRIMARY KEY en la
definicin de la tabla. Los atributos que forman la clave irn encerrados entre parntesis
formando una lista separada por comas. En el ejemplo anterior, en la tabla CLIENTES,
DNICLI ha sido definido como clave primaria mediante PRIMARY KEY (DNICLI). Como
una clave no puede tomar un valor nulo, los atributos que formen la clave debern estar
definidos como no nulos (NOT NULL).
El proceso de definicin de claves externas es parecido al de definicin de claves
primarias salvo que se utiliza FOREIGN KEY en lugar de PRIMARY KEY. No obstante, en
la definicin de una clave externa tambin hay que especificar a qu atributo se est
haciendo referencia. Eso se hace escribiendo REFERENCES seguido del nombre de la
tabla, y entre parntesis, el nombre del atributo al que se hace referencia. En la tabla
CTACLI del ejemplo anterior, DNICLI est definido como una clave externa y hace
referencia al atributo DNICLI de CLIENTES.
La definicin de clave primarias y claves externas especifican restricciones. A
estas restricciones se les puede asignar un nombre, el cual debe ser nico en todo el
esquema. La utilidad de asignar nombres a las restricciones radica en que quedan
identificadas para cuando posteriormente se decida modificarlas.
Para especificar restricciones basadas en valores, podemos incluir en la
definicin de un atributo la palabra reservada CHECK, seguida de una condicin entre
parntesis, que deber ser verificada por los valores del atributo. Si la restriccin es a
nivel de tupla, la clusula CHECK se introduce en la definicin de la tabla, como las
restricciones de clave primaria o externa.
Las restricciones CHECK tienen el inconveniente de que cuando hacen referencia
a relaciones mediante una subconsulta y hay cambios en las relaciones referenciadas
pueden dejar de cumplirse. Para evitar este problema, disponemos de las aserciones,
restricciones que siempre deben ser verdaderas, y se comprueban cada vez que se
modifica cualquiera de las relaciones mencionadas en ellas.
4.2.1.4 Modificacin de esquemas
La definicin de una tabla se puede modificar mediante la orden ALTER TABLE, y las
posibles acciones que se pueden realizar son:
Incorporacin o eliminacin de una columna (atributo)
Modificacin de la definicin de una columna
Incorporacin o eliminacin de las restricciones de una tabla
Por ejemplo, si queremos aadir a la tabla CLIENTES la ciudad en la que viven,
utilizaremos la orden
ALTER TABLE BANCO.CLIENTES ADD CIUDAD VARCHAR(20);
4
Tema 4. Lenguajes de consulta comerciales
Una vez modificada la definicin de la tabla, se completan con los valores
correspondientes utilizando la orden UPDATE que veremos ms adelante.
Para eliminar una columna tendremos que elegir CASCADE o RESTRICT para
especificar la forma de eliminacin. Si se elige CASCADE, todas las restricciones y
vistas creadas a partir de dicha columna se eliminarn automticamente del esquema.
Por el contrario, si se elige RESTRICT slo se eliminar la columna si no hay ninguna
vista ni restriccin sobre dicha columna.
Por ejemplo, esta orden elimina el campo que hemos aadido antes:
ALTER TABLE BANCO.CLIENTES DROP CIUDAD CASCADE;
Para modificar la definicin de una columna de la tabla utilizaremos ALTER.
Por ejemplo, para eliminar la restriccin definida sobre la columna DOMICILIO de
CLIENTES que impide que haya valores nulos, escribiramos
ALTER TABLE BANCO.CLIENTES ALTER DOMICILIO DROP NOT NULL;
A la hora de eliminar algo, puede darse el caso de que lo que se quiere eliminar
contenga elementos. En SQL es posible eliminar slo en el caso de que no existan
elementos, o bien forzar la eliminacin, independientemente de si contiene elementos o
no, y propagar los cambios en consecuencia. Para ello se utilizan RESTRICT y
CASCADE, respectivamente.
La orden DROP TABLE CLIENTES RESTRICT; elimina la tabla
CLIENTES si no hay ninguna restriccin definida sobre ella en otro componente del
esquema. La orden DROP SCHEMA BANCO CASCADE; elimina el esquema BANCO
de la base de datos y todas sus tablas y dems componentes.
4.2.1.5. El diccionario de datos
Todos los SGBD relacionales gestionan su propio diccionario de datos (aunque slo sea
la descripcin de las tablas presentes en la base de datos) usando un esquema relacional.
Las tablas que contienen informacin sobre las tablas contienen los metadatos y
constituyen el catlogo de la base de datos.
El diccionario de datos podra manipularse a nivel de actualizacin de datos
como otra tabla, pero esto no sera adecuado. Lo que si podemos hacer es consultarlo
igual que otras tablas de las base de datos.
El estndar de diccionario de datos de SQL-2 no es seguido estrictamente en los
SGBD relacionales, debido sobre todo a la informacin sobre cuestiones de estructuras
de almacenamiento de la informacin, pero ofrece una plantilla que suele ser respetada
por estos sistemas. El estndar tiene dos niveles, DEFINITION_SCHEMA, que
describe todas las estructuras de la base de datos, e INFORMATION_SCHEMA, que
contiene vistas sobre el DEFINITION_SCHEMA y ofrece una interfaz con el
diccionario de datos. Como ejemplo de estas vistas, tenemos DOMAINS, TABLES,
VIEWS, o COLUMNS. La vista COLUMNS incluye una fila para cada columna de la
base de datos, con informacin sobre el nombre de la tabla a la que pertenece, su
5
Tema 4. Lenguajes de consulta comerciales
posicin dentro de la misma, su dominio o tipo de datos, el valor predeterminado (si lo
tiene), si admite nulos o no, y otra informacin adicional.
4.2.2 Consulta de datos en SQL
4.2.2.1. Estructura bsica de una consulta SQL
La estructura bsica de una orden SQL consta de tres clusulas: SELECT, FROM y
WHERE
La clusula SELECT se corresponde con la operacin de proyeccin del lgebra
relacional, y se utiliza para indicar cules son los atributos (separados por comas) que se
desea que aparezcan en el resultado de la consulta
La clusula FROM corresponde a la operacin de producto cartesiano del lgebra
relacional, y se utiliza para indicar cules son las relaciones (separadas por comas) que
participan en la consulta.
La clusula WHERE se corresponde con los predicados de seleccin del lgebra
relacional, y dichos predicados hacen referencia a atributos de relaciones especificadas
en la clusula FROM.
Una consulta tpica en SQL tiene esta forma:
SELECT A
1
, A
2
, ..., A
n

FROM R
1
, R
2
, ..., R
m

WHERE P
donde cada A
i
representa a un atributo, cada R
i
representa a una relacin y P es
el predicado o condicin de la consulta.
Esta consulta equivale a la siguiente expresin del lgebra relacional:

A1, A2, ..., An


(
P
(R
1
x R
2
x ... x R
m
))
La lista de atributos puede sustituirse por un asterisco (*) para seleccionar todos
los atributos de todas las relaciones que aparecen en la clusula FROM, y la clasula
WHERE puede omitirse, por lo que el predicado siempre ser verdadero, y se
seleccionarn todas las filas de todas las tablas que aparezcan en la clusula FROM.
Por ejemplo, para saber cules son los nombres de todos los clientes del banco
escribiramos la sentencia SQL siguiente:
SELECT nombreCli
FROM clientes;
Y para saber cules son los nombres de los empleados que trabajan en la
sucursal de "Sol", escribiramos la sentencia SQL siguiente:
SELECT nombreEmp
FROM empleados
WHERE nombreSuc = "Sol";
6
Tema 4. Lenguajes de consulta comerciales
En la clusula SELECT tambin pueden aparecer expresiones con operadores
aritmticos (+, -, *, /) o de otros tipos, por lo que para ver el saldo de las cuentas en
pesetas en lugar de euros, escribiramos
SELECT numeroCta, saldo * 166.386
FROM cuentas;
4.2.2.2. Gestin de duplicados y valores nulos
Si hubiese dos empleados con el mismo nombre, apareceran valores duplicados.
Si estamos interesados en que no aparezcan duplicados se debe utilizar SELECT
DISTINCT. No obstante, si queremos que se conserven explcitamente todos los
duplicados escribiremos SELECT ALL o SELECT.
Por ejemplo, para saber cules son los nombres de los empleados que trabajan en
la sucursal de "Sol" sin que aparezcan duplicados escribiramos la sentencia SQL
siguiente:
SELECT DISTINCT nombreEmp
FROM empleados
WHERE nombreSuc = "Sol";
Cuando en una consulta necesitamos manejar valores nulos, tenemos que usar
las condiciones IS NULL e IS NOT NULL. Por ejemplo, para ver los nombres de
los clientes que no tienen domicilio, usaramos esta instruccin SQL:
SELECT nombreCli
FROM clientes
WHERE domicilio IS NULL;
4.2.2.3. Combinacin de relaciones y otros aspectos bsicos
SQL no dispone de una operacin directa para combinar tablas mediante el producto
natural, pero como ste es un producto cartesiano con una seleccin, es relativamente
sencillo escribir una orden SQL para realizar un producto natural.
Recordemos que en el lgebra relacional, para realizar el producto natural a
partir del producto cartesiano para y obtener los nombres de todos los empleados que
trabajan en todas las ciudades podramos escribir:

empleados.nombreEmp
(
sucursales.nombreSuc = empleados.nombreSuc

(sucursales x empleados))
La sentencia SQL equivalente a esta expresin del lgebra relacional sera:
SELECT empleados.nombreEmp
FROM sucursales, empleados
WHERE sucursales.nombreSuc = empleados.nombreSuc;
7
Tema 4. Lenguajes de consulta comerciales
aunque se podra haber obtenido el mismo resultado a partir nicamente de la
tabla empleados.
Obsrvese que se ha seguido la notacin nombreRelacion.
nombreAtributo para eliminar posibles ambigedades.
Para poder utilizar ms de un predicado en una clusula WHERE se pueden
utilizan los conectores lgicos AND, OR y NOT en lugar de los conectores del lgebra
relacional , , y .
Por ejemplo, para saber cules son los nombres de los empleados que trabajan en
alguna de las sucursales de la ciudad de "Madrid", escribiramos:
SELECT empleados.nombreEmp
FROM sucursales, empleados
WHERE sucursales.nombreSuc = empleados.nombreSuc AND
sucursales.ciudadSuc = "Madrid";
SQL incluye el operador BETWEEN para simplificar las clusulas WHERE que se
refieren a valores que sea mayor o igual que uno y menor o igual que otro, por lo que
para saber cules son los nmeros de las cuentas que tienen un saldo comprendido entre
20000 y 50000 podemos escribir
SELECT numeroCta
FROM cuentas
WHERE saldo BETWEEN 20000 AND 50000;
en lugar de
SELECT numeroCta
FROM cuentas
WHERE saldo >= 20000 AND saldo <= 50000;
Anlogamente, podemos utilizar el operador NOT BETWEEN.
Por ltimo, si queremos realizar consultas SQL comparando ciertos atributos con
valores de cadena que utilicen comodines utilizaremos el operador LIKE, teniendo en
cuenta que el carcter de comodn para un carcter es el subrayado (_) y que el carcter
de comodn para un conjunto de caracteres es el tanto por ciento (%).
De esta forma, para saber cules son los nombres de los clientes que viven en la
calle "Gibraltar espaol" escribiramos lo siguiente:
SELECT nombreCli
FROM clientes
WHERE domicilio LIKE "Gibraltar espaol%";
SQL permite la bsqueda de desigualdades con el operador NOT LIKE.
8
Tema 4. Lenguajes de consulta comerciales
SQL permite al usuario especificar criterios para la presentacin ordenada de
resultados, y lo hace mediante la clusula ORDER BY, que en el caso de que se utilice
debe ir despus de la clusula WHERE (en caso de que exista).
Por ejemplo, para mostrar una lista ordenada alfabticamente de los clientes que
tienen alguna cuenta en la sucursal "Sol", escribiramos lo siguiente:
SELECT DISTINCT nombreCli
FROM clientes, cuentas, ctacli
WHERE clientes.dniCli = ctacli.dniCli AND
cuentas.numeroCta = ctacli.numeroCta AND
cuentas.nombreSuc = "Sol"
ORDER BY nombreCli;
Por omisin, SQL lista las tuplas en orden ascendente (ASC), pero para
especificar un orden descendente, escribiramos DESC, de esta forma:
ORDER BY col1 [ASC|DESC] [, col2 [ASC|DESC]], ...
En SQL, la combinacin de relaciones puede realizarse tambin de otras formas ya
vistas en el lgebra relacional. A continuacin veremos el INNER JOIN, NATURAL
INNER JOIN y los OUTER JOIN. Para ilustrar estas operaciones nos basaremos en
las tablas de Empleados y Sucursales.
El INNER JOIN o reunin interna es una forma compacta de combinar
relaciones atendiendo a una condicin. Su sintaxis es
Tabla1 INNER JOIN Tabla2 ON condicion
Para ilustrar su uso, si queremos obtener el nombre de los empleados y la ciudad
en la que est la sucursal en la que trabajan utilizando un INNER JOIN escribiremos
SELECT nombreEmp, ciudadSuc
FROM Empleados INNER JOIN Sucursales ON
Empleados.nombreSuc = Sucursales.nombreSuc;
En la reunin interna hay que especificar explcitamente la condicin de join de
la consulta, la cual no tiene por que ser siempre ligando los atributos que relacionan las
tablas que participan en la consulta (vase seccin 4.6). Sin embargo, como gran parte
de las consultas que se realizan sobre una base de datos suele combinar las tablas
utilizando los atributos comunes SQL ofrece el NATURAL INNER JOIN para realizar
el producto natural de dos tablas.
La consulta siguiente sera equivalente a la anterior, salvo que la que se muestra
a continuacin lo hace con NATURAL INNER JOIN.
SELECT nombreEmp, ciudadSuc
FROM Empleados NATURAL INNER JOIN Sucursales;
9
Tema 4. Lenguajes de consulta comerciales
Tanto la reunin interna como la natural interna combinan dos relaciones de
forma que en el resultado slo aparecen tuplas que presentan valores si en cada tabla
hay tuplas con valores coincidentes. En cambio, las reuniones externas relajan esta
condicin porque permiten que en el resultado haya tuplas que se correspondan a tuplas
de una tabla que no tienen tuplas relacionadas en la otra tabla.
Existen tres tipos de reuniones externas, que son la reunin externa izquierda
(LEFT OUTER JOIN), la reunin externa derecha (RIGHT OUTER JOIN) y la
reunin externa completa (FULL OUTER JOIN). A continuacin se muestra cada una
de ellas y su sintaxis, similar a la de INNER JOIN.
La reunin externa izquierda se calcula como la reunin interna, pero adems,
tambin se incluirn en el resultado las tuplas de la relacin de la izquierda que no estn
relacionadas con alguna tupla de la relacin de la derecha, rellenndose los valores de
los atributos correspondientes a la relacin de la derecha con nulos. La consulta
siguiente realiza la reunin externa izquierda de Sucursales de Horseneck con
Empleados
SELECT Sucursales.nombreSuc, nombreEmp
FROM Sucursales LEFT OUTER JOIN Empleados ON
Sucursales.nombreSuc = Empleados.nombreSuc
WHERE ciudadSuc = Horseneck;
El resultado de esta consulta sera $$
Sucursales.nombreSuc nombreEmp
Perrydge Hansen
Perrydge Dubitzky
Mianus Henson
Round Hill Null
Anlogamente, la reunin externa derecha (RIGHT OUTER JOIN) funciona de
forma similar que la reunin externa izquierda salvo considerando las tuplas de la
relacin que aparece en la derecha.
Por ltimo, la reunin externa completa es la operacin ms relajada de todas, ya
devuelve las tuplas de ambas relaciones aunque no tengan tuplas relacionadas en la otra
tabla. Por ejemplo, la consulta siguiente realiza la reunin externa completa de
Sucursales y Empleados combinando las tuplas de Sucursales y Empleados. Si hay
tuplas relacionadas las aade al resultado. Si no es as, aade la tupla no relacionada y
completa los valores con nulos. (No obstante, en este caso y por la integridad referencial
definida en Empleados no habr tuplas en Empleados que no tengan tuplas relacionadas
en Sucursales, por lo que la reunin externa completa devolver el mismo resultado que
una reunin externa izquierda.)
SELECT Sucursales.nombreSuc, nombreEmp
FROM Sucursales FULL OUTER JOIN Empleados ON
Sucursales.nombreSuc = Empleados.nombreSuc;
10
Tema 4. Lenguajes de consulta comerciales
4.2.2.4. Agrupacin y funciones de agregacin
SQL permite la posibilidad de calcular funciones en grupos de tuplas utilizando la
clusula GROUP BY. Para formar estos grupos, se utilizan todos los atributos que
aparecen en la clusula GROUP BY, y cada una de las tuplas que tienen el mismo valor
en cada uno de los atributos que se especifican en la clusula GROUP BY se colocan en
el mismo grupo.
SQL incluye funciones para calcular:
Promedio: AVG
Mnimo: MIN
Mximo: MAX
Total: SUM
Cuenta: COUNT
A estas operaciones se les denomina funciones de agregacin, ya que operan
sobre grupos de tuplas, y el resultado de estas funciones es un valor nico.
Por ejemplo, para conocer el activo medio por ciudades escribiramos lo
siguiente:
SELECT ciudadSuc, AVG(activo)
FROM sucursales
GROUP BY ciudadSuc;
Sobre el resultado de una agrupacin es posible establecer una condicin, pero
sta actuar a nivel de grupo, y no a nivel de tupla, como lo hace el WHERE. Las
condiciones a nivel de grupo se definen mediante la clusula HAVING, y se especifica
detrs de GROUP BY. As, si queremos saber cules son las medias de los activos de las
sucursales por ciudades para aquellas en que la media sea superior a 20000,
escribiramos
SELECT ciudadSuc, AVG(activo)
FROM sucursales
GROUP BY ciudadSuc
HAVING AVG(activo) > 20000;
Cuando se utilizan grupos hay que tener en cuenta que en la clusula SELECT
slo pueden aparecer los atributos por los que se est realizando la agrupacin, o bien
funciones de agregacin.
Para saber el saldo mximo de las cuentas de las sucursales por ciudad
agruparamos por ciudad como muestra la consulta siguiente
SELECT ciudadSuc, MAX(saldo)
FROM Sucursales, Cuentas
11
Tema 4. Lenguajes de consulta comerciales
WHERE Sucursales.nombreSuc = Cuentas.nombreSuc
GROUP BY ciudadSuc;
Para saber la ciudad en la que estn las sucursales con ms de una cuenta
necesitamos conocer primero cules son las sucursales que tienen ms de una cuenta, y
luego utilizar esto para obtener en qu ciudad est
SELECT ciudadSuc
FROM Sucursales
WHERE nombreSuc IN
(SELECT nombreSuc
FROM Cuentas
GROUP BY nombreSuc
HAVING COUNT(numeroCta) > 1);
A veces, es necesario tratar toda la relacin como si fuese un solo grupo, por lo
que en estos casos no ser necesario utilizar GROUP BY. Por ejemplo, para obtener el
saldo medio, mximo y mnimo de las cuentas escribiramos
SELECT AVG(saldo), MAX(saldo), MIN(saldo)
FROM Cuentas;
Otra utilidad que se desprende de considerar toda la tabla como un grupo puede
ser para conocer el nmero de tuplas de una relacin. Para ello, podramos escribir lo
siguiente para conocer el nmero de clientes del banco
SELECT COUNT(*)
FROM Clientes;
Para conocer el nmero de ciudades en los que el banco tiene sucursales
escribiramos
SELECT COUNT (DISTINCT ciudadSuc)
FROM Sucursales
y se debe utilizar DISTINCT porque si no se obtendra simplemente el nmero de
sucursales que tiene el banco, ya que se repetiran las ciudades en las que estn las
sucursales de una misma ciudad.
Por ltimo, para conocer el nombre de las ciudades que tienen ms de dos
sucursales lo podramos hacer con una consulta anidada
SELECT ciudadSuc
FROM Sucursales S
WHERE (SELECT COUNT (*)
FROM Sucursales
WHERE S.ciudadSuc = Sucursales.ciudadSuc) > 2;
12
Tema 4. Lenguajes de consulta comerciales
4.2.2.5. Operaciones sobre conjuntos
SQL incorpora las operaciones UNION (unin), INTERSECT (interseccin) y MINUS
(diferencia) que operan sobre relaciones o tablas y se corresponden con las operaciones
, y - del lgebra relacional.
Veamos cmo podemos utilizar estas operaciones en SQL.
Por ejemplo, para saber cules son los nombres de todas las personas
relacionadas con el sistema bancario escribiramos:
SELECT nombreEmp
FROM empleados
UNION
SELECT nombreCli
FROM clientes;
Para encontrar todos los nombres que aparecen como empleado y como cliente
escribiramos:
SELECT nombreEmp
FROM empleados
INTERSECT
SELECT nombreCli
FROM clientes;
Por ltimo para encontrar todos los nombres que aparecen como empleado pero
no como cliente, escribiramos:
13
Tema 4. Lenguajes de consulta comerciales
SELECT nombreEmp
FROM empleados
MINUS
SELECT nombreCli
FROM clientes;
Por omisin, las operaciones UNION, INTERSECT y MINUS eliminan las tuplas
duplicadas, pero si no se desea que se eliminen las tuplas duplicadas, escribiremos
UNION ALL, INTERSECT ALL, y MINUS ALL.
4.2.2.6. Creacin de alias y variables de tupla
Tal y como vimos en el tema anterior, a veces es necesario renombrar una relacin de
forma que se puedan comparar dos tuplas de la misma relacin. Este era el caso de
conocer cules son los nombres de los empleados que trabaja en la misma sucursal que
"Garca".
Para crear alias sobre tablas en SQL, tambin llamados variables de tupla, basta
con poner en la clusula FROM el nombre del alias a continuacin del nombre de la
tabla, como se muestra en este ejemplo
SELECT E.nombreEmp
FROM Empleados E, Empleados Ebis
WHERE Ebis.nombreEmp = "Garca" AND
Ebis.nombreSuc = E.nombreSuc;
No obstante, esta consulta tambin se podra haber realizado con una consulta
anidada, las cuales se describen ms adelante.
Otro ejemplo podra ser el de obtener las sucursales que tienen un activo
superior a cualquier sucursal situada en Almera. Para ello, necesitamos hacer
referencia dos veces a la misma tabla de forma que se podra hacer de esta forma
SELECT E.nombreEmp
FROM Sucursales S1, Sucursales S2
WHERE S1.ciudadSuc = Almera AND
S2.Activo > S1.Activo;
Si lo que queremos es cambiar los nombres de los atributos que resultan de una
consulta, escribiremos en la clusula SELECT el modificador AS entre el antiguo
nombre del atributo y el nuevo nombre del atributo, tal y como se indica en este ejemplo
SELECT nombreSuc AS nombreDeSucursales
FROM sucursales;
14
Tema 4. Lenguajes de consulta comerciales
4.2.2.7. Consultas anidadas y pertenencia a conjuntos
En el predicado de seleccin de tuplas (clasula WHERE), adems de poder comparar un
atributo con un valor, podemos realizar la comparacin con un conjunto de valores, es
decir podemos especificar explcitamente un conjunto con los valores de la
comparacin, en lugar de realizar varias comparaciones OR. Para ello utilizaremos el
operador de pertenencia a conjuntos IN, o bien el operador NOT IN, si lo que
queremos comprobar es la no pertenencia al conjunto.
Por ejemplo, para saber cules son los nombres de los empleados que trabajan en
las sucursales de "Sol" o "Castellana" podemos escribir
SELECT nombreEmp
FROM empleados
WHERE nombreSuc IN ("Sol", "Castellana");
en lugar de escribir
SELECT nombreEmp
FROM empleados
WHERE nombreSuc = "Sol" OR
nombreSuc = "Castellana";
A esta forma de especificacin de parmetros se le denomina conjuntos
explcitos.
A la vista de este ejemplo, cabe pensar que se podra crear una consulta que
utilizase como predicado de comparacin otra consulta, es decir, anidar una consulta
dentro de otra. A la consulta interna se le denomina consulta anidada, y a la que utiliza
el resultado de la ejecucin de la consulta anidada se le denomina consulta externa.
Para ello, veamos otra forma de escribir la consulta que devuelve cules son los
nombres de los empleados que trabajan en las sucursales de la ciudad de "Madrid".
SELECT nombreEmp
FROM empleados
WHERE nombreSuc IN (SELECT nombreSuc
FROM sucursales
WHERE ciudadSuc = "Madrid");
En las consultas anidadas es posible que se puedan originar ambigedades entre
los nombres de los atributos si hay atributos con el mismo nombre en la consulta
externa y en la consulta interna. En este caso, y dado que los atributos que no estn
precedidos por un nombre de relacin se refieren a la consulta anidada ms interna, se
trata de calificar los nombres de los atributos con el nombre de las tablas
correspondientes.
15
Tema 4. Lenguajes de consulta comerciales
4.2.2.8. Consultas correlacionadas
Un caso especial de consultas anidadas son las consultas correlacionadas. Se trata de
consultas en las que la consulta anidada se ejecuta una vez para cada tupla de consulta
externa. Esto ocurre cuando en el WHERE de una subconsulta se hace referencia a un
atributo que est en la consulta externa. Por ejemplo, supongamos que tenemos las
tablas siguientes
Personal
Nombre Apellidos NSS AoNacimiento Sexo Salario NSSSuperv
Pedro Mrquez 1 1954 H 1200 2
Isabel Fernndez 2 1972 M 1150 3
Mara Yage 3 1963 M 2200 null
Juan Martn 4 1971 H 1050 3

Familia
Nombre NSSP AoNacimiento Sexo Parentesco
Juana 1 1974 M Hija
Manuel 1 1976 H Hijo
Margarita 1 1958 M Esposa
Mara 3 1993 M Hija
Luis 3 1963 H Esposo
Si queremos saber el nombre y apellidos de los empleados que tienen familiares
con su mismo nombre y sexo podramos escribir
SELECT Nombre, Apellidos
FROM Personal
WHERE Nombre IN
(SELECT Nombre
FROM Familia
WHERE NSS=NSSP AND
Personal.Nombre = Familia.Nombre AND
Personal.Sexo = Familia.Sexo);
o bien
SELECT Personal.Nombre, Personal.Apellidos
FROM Personal, Familia
WHERE NSS=NSSP AND
Personal.Nombre = Familia.Nombre AND
Personal.Sexo = Familia.Sexo);
16
Tema 4. Lenguajes de consulta comerciales
En algunos casos es necesario que en las consultas anidadas se compruebe si el
resultado de la subconsulta es vaco o no. Esto se realiza utilizando la funcin EXISTS
en la clusula WHERE. Por ejemplo, para el caso anterior se tratara de obtener registros
de empleado para los que existen familiares con su mismo nombre y sexo.
SELECT Nombre, Apellidos
FROM Personal
WHERE EXISTS
(SELECT *
FROM Familia
WHERE NSS=NSSP AND
Personal.Nombre = Familia.Nombre AND
Personal.Sexo = Familia.Sexo);
Si ahora queremos saber el nombre de las personas que no tienen familiares
escribiramos
SELECT Nombre, Apellidos
FROM Personal
WHERE NOT EXISTS
(SELECT *
FROM Familia
WHERE NSS=NSSP);
A veces es necesario que alguna de las condiciones del predicado de la consulta
realicen comparaciones sobre conjuntos, como pueden ser cules son los nombres de las
sucursales que tienen un activo superior a cualquiera de las sucursales de la ciudad de
"Almera", o bien el nombre de las sucursales que tengan un activo mayor que el de
todas las sucursales de la ciudad de "Almera".
Para ello utilizaremos SOME y ALL de esta forma.
En primer lugar, para conocer los nombres de las sucursales que tienen un activo
superior a cualquiera de las sucursales de la ciudad de "Almera" utilizaremos > SOME
de esta forma
SELECT nombreSuc
FROM sucursales
WHERE activo > SOME (SELECT activo
FROM sucursales
WHERE ciudadSuc = "Almera");
No obstante, y tal y como vimos en la seccin anterior, esto tambin se puede
realizar mediante el uso de alias de tabla (variables de tupla).
17
Tema 4. Lenguajes de consulta comerciales
Si ahora lo que quisisemos fuese el nombre de las sucursales que tienen un
activo superior al de todas las sucursales de la ciudad de "Almera" utilizaremos >
ALL de esta forma
SELECT nombreSuc
FROM sucursales
WHERE activo > ALL (SELECT activo
FROM sucursales
WHERE ciudadSuc = "Almera");
Ni que decir tiene que SQL tambin permite las construcciones < SOME, <=
SOME, >= SOME, <> SOME, = SOME, < ALL, <= ALL, >= ALL, = ALL y <> ALL.
Por tanto IN, SOME y ALL permiten comprobar un nico valor con un conjunto
de valores.
4.2.2.9. Vistas. Actualizacin de vistas
Una vista SQL es una tabla derivada a partir de otras. Estas tablas pueden ser tablas
base (tablas de las definidas originalmente en los esquemas) o vistas. Una vista no tiene
por que estar almacenada fsicamente, sino que puede recuperar la informacin bajo
demanda. As, las vistas son consideradas como tablas virtuales, a diferencia de las
tablas base que s almacenan realmente los registros. Este hecho limita la actualizacin
de las vistas, sobre todo cuando se realiza la combinacin de tablas o cuando se realizan
operaciones de agregacin. No obstante, y a efectos de consulta, una vista y una tabla no
ofrecen diferencia alguna, y esto es lo que hace que las vistas sean un mecanismo muy
utilizado, dada la utilidad que presentan para la personalizacin de informacin (p.e.
ocultar informacin de las tablas base) o para la simplificacin de consultas.
En SQL las vistas se crean mediante la orden
CREATE VIEW nombreVista AS ExpresionSELECT;
El ejemplo siguiente creara una vista que devuelve el nombre, telfono y la
ciudad en la que trabajan cada uno de los empleados del banco.
CREATE VIEW EmpleCiudad
AS SELECT nombreEmp, telefono, ciudadSuc
FROM Empleados, Sucursales
WHERE Empleados.nombreSuc = Sucursales.nombreSuc;
La vista queda formada por las columnas que aparezcan en el SELECT que
defina la vista, aunque tambin es posible especificar el nombre que van a tener las
columnas de la vista indicndolas explcitamente, como muestra el ejemplo siguiente
que crea una vista en la que se obtiene el DNI de cada cliente y el saldo total de sus
cuentas.
CREATE VIEW ClientesSumaSaldo (DNICli, SaldoTotal)
AS SELECT DNICli, SUM(Saldo)
18
Tema 4. Lenguajes de consulta comerciales
FROM Clientes, CtaCli, Cuentas
WHERE Clientes.DNICli = CtaCli.DNICli and
CtaCli.numeroCta = Cuentas.numeroCta
GROUP BY Clientes.DNICli;
As, el esquema de la primera vista sera EmpleCiudad(nombreEmp,
telefono, ciudadSuc) y el de la segunda sera ClientesSumaSaldo
(DNICli, SaldoTotal).
La eliminacin de vistas se hace mediante la orden
DROP VIEW nombreVista
Las rdenes DROP VIEW EmpleCiudad y DROP VIEW
ClientesSumaSaldo eliminaran las dos vistas que hemos definido.
Hemos dicho que las vistas son realmente definiciones de consultas, y no se
almacenan como conjuntos de filas en la base de datos. Sin embargo, hay condiciones
en las que se pueden actualizar las vistas. Realmente, estas modificaciones se
efectuarn sobre la tabla de la que procede la vista. Para saber si una vista es
actualizable o no, debemos tener en cuenta lo siguiente:
Una vista definida sobre una sla tabla es actualizable si los atributos de la
vista incluyen la clave primaria de dicha tabla y todos los atributos que no
pueden ser nulos.
Una vista definida sobre la combinacin de dos o ms tablas no es
actualizable.
Una vista definida usando agrupacin y funciones de agregacin no es
actualizable.
4.2.3. Modificacin de datos en SQL
Hasta ahora nos hemos limitado a recuperar informacin de la base de datos. SQL
dispone de rdenes para aadir, eliminar y actualizar los datos de una base de datos
mediante las instrucciones INSERT, DELETE y UPDATE, respectivamente. A
continuacin se estudia cada una de ellas.
4.2.3.1. Insercin
En SQL los datos son introducidos en las tablas mediante la orden INSERT, la cual se
puede utilizar para insertar un solo registro en una tabla o bien para insertar en una tabla
el resultado de una consulta.
Para insertar un registro en una tabla utilizaremos
INSERT INTO nombreTabla VALUES (valor1, valor2, ...);
Por ejemplo, la expresin siguiente creara un nuevo empleado llamado Harry
en la sucursal de "Los Pinos". Harry tiene el DNI 16 y su telfono es 161616.
INSERT INTO Empleados
19
Tema 4. Lenguajes de consulta comerciales
VALUES (Harry, 16, 161616, Los Pinos);
En el caso de que la tabla tuviese definida alguna columna que permitiese
valores nulos o asignase valores predeterminados en el caso de no indicar ningn valor,
se podran especificar los nombres de columna a los que afectan los datos que se
quieren insertar. Por ejemplo, si en la tabla de empleados se permitiese que el telfono
fuese nulo podramos escribir para un empleado de la sucursal de Los Pinos que se
llamase Mukos y con DNI 17 lo siguiente
INSERT INTO Empleados (nombreEmp, dniEmp, nombreSuc)
VALUES (Mukos, 17, Los Pinos);
Por ultimo, una sentencia INSERT tambin puede insertar los valores que
procedan de la ejecucin de una consulta en lugar de especificar explcitamente los
valores que se quieren introducir. En este caso la sintaxis es
INSERT INTO nombreTabla ExpresionSELECT;
Por ejemplo, podemos crear una tabla temporal para guardar el nmero de
empleados para cada sucursal e introducir en ella el resultado de una consulta, como se
muestra a continuacin
CREATE TABLE NumeroEmple
(Sucursal VARCHAR(50),
Empleados INTEGER);
INSERT INTO NumeroEmple
SELECT NombreSuc, COUNT(nombreEmp)
FROM Empleados
GROUP BY NombreSuc;
4.2.3.2. Eliminacin
La orden SQL para eliminar datos de una tabla es DELETE y elimina los registros de
una tabla que satisfacen una condicin. Su sintaxis es parecida al SELECT, salvo que no
especifica atributos para la proyeccin.
DELETE
FROM Tabla
WHERE Condicion;
Por ejemplo, la orden siguiente eliminara el registro del empleado Mukos
DELETE
FROM Empleados
WHERE nombreEmp = Mukos;
20
Tema 4. Lenguajes de consulta comerciales
Como condicin se puede establecer cualquier predicado por complejo que sea,
o incluso se pueden especificar subconsultas. Por ejemplo, la expresin siguiente
elimina todos los empleados de las sucursales de la ciudad de Madrid.
DELETE
FROM Empleados
WHERE nombreSuc IN (SELECT nombreSuc
FROM Sucursales
WHERE ciudadSuc = Madrid);
La eliminacin de registros en una tabla puede desencadenar la eliminacin de
registros en otras tablas si se han definido eliminaciones en cascada. Por ltimo, si no
especifica la clusula WHERE se eliminarn todos los registros de la tabla.
4.2.3.3. Actualizacin de la informacin de la base de datos
Los registros de una tabla se pueden modificar mediante la orden UPDATE de SQL.
Esta orden actualiza el valor de las columnas de los registros que cumplan una
condicin. Al igual que en la orden DELETE, la condicin se especifica en una clusula
WHERE. La sintaxis es la siguiente
UPDATE tabla
SET Modificacion
WHERE Condicion
La consulta siguiente aumenta en 500 el saldo de las cuentas de la sucursal de
Castellana.
UPDATE Cuentas
SET saldo = saldo + 500
WHERE nombreSuc = Castellana;
En la clusula WHERE se pueden especificar subconsultas como hicimos con la
instruccin DELETE. Por ejemplo, para incrementar en un 10 por ciento el saldo de las
cuentas de sucursales de la ciudad de Almera escribiramos
UPDATE Cuentas
SET saldo = saldo * 1.1
WHERE nombreSuc IN (SELECT nombreSuc
FROM Sucursales
WHERE ciudadSuc = Almera);
4.3. QBE
QBE (Query by Example) es un lenguaje para bases de datos relacionales basado en el
clculo relacional de dominios, y es uno de los primeros lenguajes de consulta
21
Tema 4. Lenguajes de consulta comerciales
orientados a la pantalla o grficos, con una sintaxis mnima. Fue desarrollado por IBM
como lenguaje de consulta para DB2, y actualmente est incorporado con una interfaz
de sealar y seleccionar en MS Access. La diferencia fundamental con SQL radica en
que el usuario no tiene que especificar una consulta estructurada, sino que rellena
plantillas de relaciones en la pantalla. El usuario no tiene que recordar los nombres de
las tablas y sus atributos, porque se muestran en las plantillas, y lo que hace es
introducir constantes y variables en dichas plantillas para construir un ejemplo
relacionado con la solicitud de obtencin de datos o actualizacin.
A continuacin se muestra la plantilla correspondiente a la tabla clientes:
CLIENTES NOMBRECLI DNICLI DOMICILIO


4.3.1. Recuperaciones bsicas en QBE
Para especificar una consulta de recuperacin de datos, hay que indicar los criterios de
seleccin introduciendo valores de ejemplo bajo los atributos correspondientes, y hay
que introducir el operador P. en los atributos que deseamos visualizar. Si deseamos
visualizar todos los atributos de una tabla, ponemos el operador P. bajo el nombre de la
tabla. Primero se eligen las tablas necesarias para realizar la consulta, y a continuacin
se rellenan las plantillas y se ejecuta la consulta.
La siguiente consulta muestra el dni y domicilio del cliente Aranda:
CLIENTES NOMBRECLI DNICLI DOMICILIO
Aranda P. P.

Si queremos ver todos los datos de todos los clientes, introduciremos esta
consulta:
CLIENTES NOMBRECLI DNICLI DOMICILIO
P.

Tambin podemos usar operadores como >, <, >= o <=. Por ejemplo, la
siguiente consulta muestra los nmeros de cuenta y saldos de cuentas con un saldo
superior a 100 :
CUENTAS NUMEROCTA SALDO NOMBRESUC
P. P.>100

Para introducir condiciones unidas con AND, introducimos los valores
correspondientes en la misma fila de la plantilla. Para unirlas con OR, los introducimos
en filas diferentes.
22
Tema 4. Lenguajes de consulta comerciales
La siguiente consulta muestra todos los datos de las cuentas de la sucursal
Castellana con saldo superior a 150 :
CUENTAS NUMEROCTA SALDO NOMBRESUC
P. >150 Castellana

La siguiente consulta muestra los nombres de los empleados que trabajan en las
sucursales Castellana y Sol:
EMPLEADOS NOMBREEMP DNIEMP NOMBRESUC
P.
P.
Castellana
Sol

Para combinar tablas, necesitaremos usar variables. Una variable QBE va
precedida de un subrayado, como _X. Usaremos la misma variable en los atributos de
las tablas que deben tener el mismo valor al combinarlas.
La siguiente consulta muestra los nombres y dni de empleados que trabajan en
sucursales de Almera:
EMPLEADOS NOMBREEMP DNIEMP NOMBRESUC
P. P. _X

SUCURSALES NOMBRESUC CIUDADSUC ACTIVO
_X Almera

Si queremos obtener atributos de tablas distintas, podemos poner una variable en
cada uno de ellos, y crear una tabla resultado con todas las variables de salida, porque si
no, el sistema mostrar los valores en tablas distintas, dificultando la lectura.
La siguiente consulta muestra los dni de cliente, nmeros de cuenta y saldos de
las cuentas de la sucursal Paseo:
CUENTAS NUMEROCTA SALDO NOMBRESUC
_C _S Paseo

CTACLI NUMEROCTA DNICLI
_C _D

RESULTADO
P. _D _C _S
23
Tema 4. Lenguajes de consulta comerciales
Para especificar una secuencia de ordenacin de los resultados, se usan los
operadores AO. (ascendente) y DO. (descendente) en las columnas.
Cuando una condicin es compleja y no se puede expresar directamente en las
plantillas, se puede escribir directamente en un cuadro de condicin.
4.3.2. Agrupacin y agregacin
En QBE, el operador de agregacin es G., que indica que los valores de la tabla deben
agruparse en funcin de los valores de esa columna. Se dispone de las funciones AVG.,
SUM., CNT., MAX. y MIN. Al contrario de SQL, estas funciones se aplican a valores
distintos dentro de un grupo. Para tener en cuenta todos los valores, aadiremos el
operador ALL.
La siguiente consulta cuenta el nmero de ciudades en las que hay sucursales:
SUCURSALES NOMBRESUC CIUDADSUC ACTIVO
P.CNT.
Y la siguiente consulta suma el activo de todas las sucursales:
SUCURSALES NOMBRESUC CIUDADSUC ACTIVO
P.SUM.ALL.
La consulta siguiente muestra el saldo medio de las cuentas en cada sucursal:
CUENTAS NUMEROCTA SALDO NOMBRESUC
P.AVG.ALL. P.G.
La siguiente consulta muestra los nombres de clientes con dos o ms cuentas:
CLIENTES NOMBRECLI DNICLI DOMICILIO
P. _X

CTACLI NUMEROCTA DNICLI
CNT._Y G._X

CONDICIONES
CNT._Y>=2

4.3.3. Modificacin de la base de datos
QBE tiene tres operadores para modificar la base de datos: I. (insertar), U. (actualizar) y
D. (eliminar). Los operadores de insertar y eliminar se indican en la columna del
nombre de la tabla, lo que resulta lgico ya que son operadores a nivel de fila. El
operador de actualizacin se indica en la columna o columnas que se van a actualizar.
24
Tema 4. Lenguajes de consulta comerciales
A continuacin se muestra como insertar un empleado de la sucursal Los Pinos
que se llamase Mukos y con DNI 17:
EMPLEADOS NOMBREEMP DNIEMP NOMBRESUC
I. Mukos 17 Los Pinos

Para eliminar, es necesario especificar la condicin que cumplen las filas a
suprimir. Por ejemplo, podramos eliminar el empleado que acabamos de insertar de
este modo:
EMPLEADOS NOMBREEMP DNIEMP NOMBRESUC
D. 17

En la actualizacin, es necesario indicar la condicin que cumplen las filas a
modificar, y los nuevos valores que se van a dar a las columnas modificadas.
Para incrementar en 100 el saldo de todas las cuentas de la sucursal Sol,
utilizaramos esta especificacin:
CUENTAS NUMEROCTA SALDO NOMBRESUC
U._S+100 Sol

25

También podría gustarte

  • Redes Comandos Switch y Router Cisco v2 3
    Redes Comandos Switch y Router Cisco v2 3
    Documento10 páginas
    Redes Comandos Switch y Router Cisco v2 3
    Khalil De la Cruz
    Aún no hay calificaciones
  • Aporte 1
    Aporte 1
    Documento4 páginas
    Aporte 1
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Ayuda Quiz Automata PDF
    Ayuda Quiz Automata PDF
    Documento128 páginas
    Ayuda Quiz Automata PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Ayuda2 PDF
    Ayuda2 PDF
    Documento8 páginas
    Ayuda2 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Capitulo 1 EXAMEN DE CISCO PDF
    Capitulo 1 EXAMEN DE CISCO PDF
    Documento8 páginas
    Capitulo 1 EXAMEN DE CISCO PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Lectura 4 Fisica Electronica PDF
    Lectura 4 Fisica Electronica PDF
    Documento6 páginas
    Lectura 4 Fisica Electronica PDF
    Erika Lorena Lopez
    Aún no hay calificaciones
  • Presaaberes
    Presaaberes
    Documento5 páginas
    Presaaberes
    Natalia-Manuel Solorzano Chavarro
    Aún no hay calificaciones
  • Colaborativo 1 PDF
    Colaborativo 1 PDF
    Documento15 páginas
    Colaborativo 1 PDF
    jairohernandez389
    100% (1)
  • Laboratorio de Circuitos Electricos
    Laboratorio de Circuitos Electricos
    Documento316 páginas
    Laboratorio de Circuitos Electricos
    dofaneite
    Aún no hay calificaciones
  • Cuestionario Final
    Cuestionario Final
    Documento14 páginas
    Cuestionario Final
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • tp101 PDF
    tp101 PDF
    Documento26 páginas
    tp101 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Ayuda2 PDF
    Ayuda2 PDF
    Documento8 páginas
    Ayuda2 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Tarjeta para La Superclase Pantalla
    Tarjeta para La Superclase Pantalla
    Documento4 páginas
    Tarjeta para La Superclase Pantalla
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Cuestionario
    Cuestionario
    Documento9 páginas
    Cuestionario
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Act 2 - Le1 S PDF
    Act 2 - Le1 S PDF
    Documento2 páginas
    Act 2 - Le1 S PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • 5cap 1planteamientodelproblema1 110804090840 Phpapp01
    5cap 1planteamientodelproblema1 110804090840 Phpapp01
    Documento19 páginas
    5cap 1planteamientodelproblema1 110804090840 Phpapp01
    Fabian Granados
    Aún no hay calificaciones
  • Ayuda3 PDF
    Ayuda3 PDF
    Documento23 páginas
    Ayuda3 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Ayuda 2 PDF
    Ayuda 2 PDF
    Documento4 páginas
    Ayuda 2 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Ayuda3 PDF
    Ayuda3 PDF
    Documento23 páginas
    Ayuda3 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Ayuda4 PDF
    Ayuda4 PDF
    Documento27 páginas
    Ayuda4 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Lectura 4 Fisica Electronica PDF
    Lectura 4 Fisica Electronica PDF
    Documento6 páginas
    Lectura 4 Fisica Electronica PDF
    Erika Lorena Lopez
    Aún no hay calificaciones
  • Ayuda Quiz Automata PDF
    Ayuda Quiz Automata PDF
    Documento128 páginas
    Ayuda Quiz Automata PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Contenido ACT 8
    Contenido ACT 8
    Documento4 páginas
    Contenido ACT 8
    Luisa Fernanda Ovalle Ramirez
    Aún no hay calificaciones
  • Ayuda2 PDF
    Ayuda2 PDF
    Documento8 páginas
    Ayuda2 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Contenido ACT 8
    Contenido ACT 8
    Documento4 páginas
    Contenido ACT 8
    Luisa Fernanda Ovalle Ramirez
    Aún no hay calificaciones
  • Ayuda4 PDF
    Ayuda4 PDF
    Documento27 páginas
    Ayuda4 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Ayuda Automatas PDF
    Ayuda Automatas PDF
    Documento31 páginas
    Ayuda Automatas PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Ayuda4 PDF
    Ayuda4 PDF
    Documento27 páginas
    Ayuda4 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones
  • Ayuda3 PDF
    Ayuda3 PDF
    Documento23 páginas
    Ayuda3 PDF
    Damian Andres Gonzalez Cohen
    Aún no hay calificaciones