Beruflich Dokumente
Kultur Dokumente
UNIDAD 2 UNIDAD 2
Tema: Lenguaje de consultas SQL 1. Introduccin Terica 1.1 Qu es el lenguaje de consultas SQL?
El lenguaje de consulta estructurado (SQL18) es un lenguaje de base de datos normalizado, utilizado por los diferentes motores de bases de datos para realizar determinadas operaciones sobre los datos o sobre la estructura de los mismos. Pero como sucede con cualquier sistema de normalizacin hay excepciones para casi todo; de hecho, cada motor de bases de datos tiene sus peculiaridades y lo hace diferente de otro motor, por lo tanto, el lenguaje SQL normalizado (ANSI19) no nos servir para resolver todos los problemas, aunque si se puede asegurar que cualquier sentencia escrita en ANSI ser interpretable por cualquier motor de datos.
51
UNIDAD 2 Lenguaje de Consultas SQL adoptaron algunos de sus clientes elegidos. Gracias al xito de este sistema, que no estaba todava comercializado, tambin otras compaas empezaron a desarrollar sus productos relacionales basados en SQL. A partir de 1981, IBM comenz a entregar sus productos relacionales y en 1983 empez a vender DB2. En el curso de los aos ochenta, numerosas compaas (por ejemplo Oracle y Sysbase, slo por citar algunos) comercializaron productos basados en SQL, que se convierte en el estndar industrial de hecho por lo que respecta a las bases de datos relacionales. En 1986, el ANSI adopt SQL (sustancialmente adopt el dialecto SQL de IBM) como estndar para los lenguajes relacionales y en 1987 se transform en estndar ISO22. Esta versin del estndar va con el nombre de SQL/86. En los aos siguientes, ste ha sufrido diversas revisiones que han conducido primero a la versin SQL/89 y, posteriormente, a la actual SQL/92. El hecho de tener un estndar definido por un lenguaje para bases de datos relacionales abre potencialmente el camino a la intercomunicabilidad entre todos los productos que se basan en l. Desde el punto de vista prctico, por desgracia las cosas fueron de otro modo. Efectivamente, en general cada productor adopta e implementa en la propia base de datos slo el corazn del lenguaje SQL (el as llamado Entry level o al mximo el Intermediate level), extendindolo de manera individual segn la propia visin que cada cual tenga del mundo de las bases de datos. Actualmente, est en marcha un proceso de revisin del lenguaje por parte de los comits ANSI e ISO, que debera terminar en la definicin de lo que en este momento se conoce como SQL 2008. Las caractersticas principales de esta nueva encarnacin de SQL deberan ser el uso de la clusula ORDER BY fuera de las definiciones de los cursores, incluye los disparadores del tipo INSTEAD OF. Aade la sentencia TRUNCATE.
ISO: Es la Organizacin Internacional para la estandarizacin, nacida en 1947, es el organismo encargado de promover el desarrollo de normas internacionales de fabricacin, comercio y comunicacin para todas las ramas industriales a excepcin de la elctrica y la electrnica.
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
22
52
Lenguaje de definicin de datos (DDL-Data Definition Language): Es el encargado de la definicin de bases de datos, tablas, vistas e ndices entre otros. Son comandos propios de ste lenguaje: CREATE TABLE, CREATE INDEX, CREATE VIEW, CREATE SYNONYM.
Lenguaje
de
manipulacin
de
datos
interactivos
(DML-Data
Manipulation Language), cuya misin es la manipulacin de datos. A travs de l podemos seleccionar, insertar, eliminar y actualizar datos. Es la parte que ms frecuentemente utilizaremos ya que con ellas se construyen las consultas. Son comandos propios de ste lenguaje: SELECT, UPDATE, INSERT, INSERT INTO, DELETE FROM.
Lenguaje
de
Control
de
datos
(DDL-Data
Control
Language):
53
UNIDAD 2 Lenguaje de Consultas SQL al control de accesos y privilegios entre los usuarios. Son comandos propios de ste lenguaje: GRANT, REVOKE.
2. Estructura bsica
La estructura bsica de una expresin para consulta SQL consta de tres clusulas:
SELECT FROM WHERE
La clusula SELECT se usa para listar los atributos que se desean en el resultado de una consulta. La clusula FROM lista las relaciones que se van a examinar en la evaluacin de la expresin La clusula WHERE consta de un predicado23 que implica atributos de las relaciones que aparecen en la clusula FROM. Una consulta bsica en SQL tiene la forma:
SELECT A1, A2... An FROM r1, r2... rn WHERE P
Donde: Ai = atributo (Campo de la tabla) ri = relacin (Tabla ) P = predicado (condicin) Ejemplo: Seleccionar todos los nombres de los alumnos que tengan el apellido MARTNEZ de la tabla ALUMNOS.
SELECT nombre FROM alumno WHERE apellido = Martnez
El resultado es:
23
54
El resultado de una consulta es por supuesto otra relacin. Si se omite la clusula WHERE, el predicado P es verdadero. La lista A1, A2,..., An puede sustituirse por un asterisco (*) para seleccionar todos los atributos de todas las relaciones que aparecen en la clusula FROM, aunque no es conveniente elegir esta ltima opcin salvo que sea necesario pues desperdiciamos mucho tiempo en obtenerlo
3. Alias
Es posible renombrar los atributos y las relaciones, a veces por
conveniencia y otras veces por ser necesario, para esto usamos la clausula AS como en el siguiente ejemplo.
SELECT P.nombre AS [PRIMER NOMBRE] FROM alumno P WHERE apellido = Martnez
PRIMER NOMBRE Martin Pablo
En este ejemplo cabe destacar un par de cosas. Cuando nos referimos a un atributo como es el caso de nombre, podemos referirnos a este usando la relacin (o el alias en este ejemplo) a la que pertenece el atributo seguido de un punto seguido del atributo <P.nombre>, a veces esta notacin ser necesaria para eliminar ambigedades. Los corchetes los usamos cuando usamos espacios en blancos o el caratr (-) en el nombre de atributo o alias. Usar alias en los atributos nos permite cambiar el nombre de los atributos de la respuesta a la consulta. Cuando asociamos un alias con una relacin decimos que creamos una variable de tupla. Estas variables de tuplas se definen en la clusula FROM despus del nombre de la relacin. En las consultas que contienen subconsultas, se aplica una regla de mbito a las variables de tupla. En una subconsulta est permitido usar solo
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
55
UNIDAD 2 Lenguaje de Consultas SQL variables de tupla definidas en la misma subconsulta o en cualquier consulta que tenga la subconsulta.
4. Tipos de datos
SQL admite una variada gama de tipos de datos para el tratamiento de la informacin contenida en las tablas, los tipos de datos pueden ser numricos (con o sin decimales), alfanumricos, de fecha o booleanos(si o no).Segn el gestor de base de datos que estemos utilizando los tipos de datos varan, pero se reducen bsicamente a los expuestos
inmediatamente, aunque en la actualidad casi todos los gestores de bases de datos soportan un nuevo tipo, el BLOB (Binary Large Object), que es un tipo de datos especial destinado a almacenar archivos, imgenes ... Dependiendo de cada gestor de bases de datos el nombre que se da a cada uno de estos tipos puede variar. Bsicamente tenemos los siguientes tipos de datos.
NUMRICOS
Integer Numeric(n.m) Decimal(n,m) Float
ALFANUMRICOS
char(n) varchar(n,m) -
FECHA
Date DateTime -
LGICO
Bit -
BLOB
Image Text -
5. Predicados y conectores
Los conectores lgicos en SQL son:
AND OR NOT
La lgica de estos conectores es igual que en cualquier lenguaje de programacin y sirven para unir predicados. Las operaciones aritmticas en SQL son:
56
UNIDAD 2 Lenguaje de Consultas SQL Tambin incluye el operador de comparacin BETWEEN, que se utiliza para valores comprendidos. Ejemplo: Encontrar todos los nombres y cdigos de los alumnos cuyos cdigos sean mayor que 6 mil y menor a 9 mil. Una solucin sera utilizando el conector lgico AND
SELECT nombre, cdigo FROM alumno WHERE (cdigo > 6000) AND (cdigo<9000)
El resultado sera:
NOMBRE Roberto Esteban Rubn Medardo Bruno Juan CDIGO 6401 8064 8975 6224 8765 8845
Anlogamente podemos usar el operador de comparacin NOT BETWEEN. SQL tambin incluye un operador de seleccin para comparaciones de cadena de caracteres. Los modelos se describen usando los caracteres especiales o tambin conocidos como caracteres comodn: El carcter (%) es igual a cualquier subcadena El operador (_) es igual a cualquier caracter Estos modelos se expresan usando el operador de comparacin LIKE. Un error muy frecuente es tratar de utilizar los modelos mediante el operador de igualdad (=) lo cual es un error de sintaxis. Ejemplo: encontrar los nombres que comiencen con la letra p o el nombre tenga exactamente 6 caracteres de la relacin alumno.
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
57
El resultado sera:
NOMBRE Martin Pablo Sandro
6. Tuplas duplicadas
Los lenguajes de consulta formales se basan en la nocin matemtica de relacin como un conjunto. Por ello nunca aparecen tuplas duplicadas en las relaciones. En la prctica la eliminacin de duplicados lleva bastante tiempo. Por lo tanto SQL permite duplicados en las relaciones. As pues en las consultas se listaran todas las tuplas inclusive las repetidas. En aquellos casos en los que queremos forzar la eliminacin de duplicados insertamos la palabra clave Ejemplo: Listar todos los apellidos no repetidos de la relacin persona
SELECT DISTINCT apellido FROM alumno
El resultado sera:
APELLIDO Martnez Snchez Guerrn Alemn Brito Abril Mogrovejo Mndez Serrano
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
58
UNIDAD 2 Lenguaje de Consultas SQL Si observamos la tabla original de la relacin alumno veremos que el apellido Martnez apareca dos veces, pero debido al uso de DISTINCT en la consulta la relacin respuesta solo lista un solo Martnez.
7. Operaciones de conjunto.
SQL incluye las operaciones de conjuntos UNION, INTERSECT, MINUS, que operan sobre relaciones y corresponden a las operaciones del lgebra unin, interseccin y resta de conjuntos respectivamente. Para realizar esta operacin de conjuntos debemos tener sumo cuidado que las relaciones tengan las mismas estructuras. Incorporemos ahora una nueva relacin, llamada jugadores que representa las personas que juegan al ftbol, sus atributos sern DNI, puesto y nmero_camiseta. Supongamos que esta nueva tabla est conformada de la siguiente manera:
JUGADOR JUGADORES 1 2 3 4 CDIGO 5988 5699 9656 9872 PUESTO DELANTERO MEDIO ARQUERO DEFENSA NMERO_CAMISETA 9 5 1 3
Ejemplo: Obtener todos los nombres de la relacin persona cuyos apellidos sean Martnez o Serrano.
SELECT nombre FROM alumno WHERE apellido = "Martnez" UNION SELECT nombre FROM alumno WHERE apellido = "Serrano"
El resultado sera:
NOMBRE Martin Pablo Juan
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
59
UNIDAD 2 Lenguaje de Consultas SQL Ejemplo: Obtener todos los cdigos de los que juegan al ftbol y, adems, estn en la lista de la relacin persona:
SELECT cdigo FROM alumno INTERSECT SELECT cdigo FROM jugador
Y el resultado sera:
CDIGO 5988 5699 8845
Por omisin, la operacin de unin elimina las tuplas duplicadas. Para retener duplicados se debe escribir UNION ALL en lugar de UNION.
El resultado sera:
NOMBRE Martin Pablo Juan APELLIDO Martnez Martnez Serrano
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
60
UNIDAD 2 Lenguaje de Consultas SQL Es posible probar la pertenencia de una relacin arbitraria SQL usa la notacin de elementos <v1, v2,..., vn> para representar una tupla de elementos de n que contiene los valores v1, v2,...,vn.
Como el cdigo= 8055 no existe en la relacin jugadores, la condicin es FALSE y por lo tanto la respuesta es vaca.
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
61
El resultado sera:
APELLIDO NOMBRE Serrano Snchez Mogrovejo Mndez Martnez Martnez Guerrn Brito Alemn Abril Juan Roberto Sal Bruno Pablo Martin Esteban Sandro Rubn Medardo
10.
Funciones de agregacin
SQL ofrece la posibilidad de calcular funciones en grupos de tuplas usando la clusula GROUP BY, tambin incluye funciones para calcular
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
62
Contar COUNT
Para los prximos ejemplos incorporamos una nueva relacin llamada PROFESIONALES que representara los jugadores profesionales de ftbol, sus atributos sern cdula, aos_profesional, club, valor_actual. Y los valores son los siguientes:
PROFESIONALES PROFESIONAL 1 2 3 4 5 CDULA AOS_ PROFESIONAL 5 2 3 CLUB LIGA DE QUITO LIGA DE QUITO DEPORTIVO CUENCA DEPORTIVO CUENCA DEPORTIVO CUENCA VALOR_ ACTUAL 100000 250000 1200000 650000 450000
4 1
SELECT club, SUM(valor_actual) AS VALOR_TOTAL, COUNT(club) AS NRO_JUGADORES FROM profesionales GROUP BY club
El resultado sera:
CLUB LIGA DE QUITO DEPORTIVO CUENCA VALOR_TOTAL NRO_JUGADORES 2 3
250000,00 2300000,00
Ejemplo: Determinar por cada club cual es el valor_actual del jugador ms caro de la relacin PROFESIONALES
SELECT club, MAX(valor_actual) AS JUG_MAS_CARO FROM profesionales GROUP BY club El resultado sera:
CLUB LIGA DE QUITO DEPORTIVO CUENCA JUGADOR_MAS_CARO
250000 1200000,00
Hay ocasiones en la que los duplicados deben eliminarse antes de calcular una agregacin. Cuando queremos eliminar los duplicados del clculo usamos la palabra clave DISTINCT antepuesto al atributo de agregacin que queremos calcular, como por ejemplo COUNT (DISTINCT club).
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
63
UNIDAD 2 Lenguaje de Consultas SQL Hay ocasiones en las que es til declara condiciones que se aplican a los grupos ms que a las tuplas. Para esto usamos la clusula HAVING de SQL. Ejemplo: Determinar por cada club cual es el valor_actual del jugador ms caro, pero con la condicin de que este sea mayor a 10000 de la relacin PROFESIONALES.
SELECT club, MAX(valor_actual) AS JUG_MAS_CARO FROM profesionales GROUP BY club HAVING MAX(valor_actual) > 10000
JUGADOR_MAS_CARO
1200000,00
Si en la misma consulta aparece una clusula WHERE y una clusula HAVING, primero se aplica el predicado de la clusula WHERE, las tupla que satisfacen el predicado WHERE son colocadas en grupos por la clusula GROUP BY. Despus se aplica la clusula HAVING a cada grupo.
11.
11.1 Eliminacin
Una solicitud de eliminacin se expresa casi de igual forma que una consulta. Podemos suprimir solamente tuplas completas, no podemos suprimir valores solo de atributos.
DELETE FROM r WHERE P
Donde P presenta un predicado y r representa una relacin. Las tuplas t en r para las cuales P(t) es verdadero, son eliminadas de r. Si omitimos la clusula WHERE se eliminan todas las tuplas de la relacin r (un buen sistema debera buscar confirmacin del usuario antes de ejecutar una accin tan devastadora) Ejemplo: Eliminar todas las tuplas de la relacin alumno en donde apellido sea igual a Brito
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
64
11.2 Insercin
Para insertar datos en una relacin, especificamos una tupla que se va a insertar o escribimos una consulta cuyo resultado es un conjunto de tuplas que se van a insertar. La insercin de tuplas la realizamos mediante las sentencias:
INSERT INTO r1 VALUES (v1, v2,..., v)
Ejemplo: Insertar una tupla con los mismos valores de la tupla eliminada en el ejemplo anterior en la relacin alumno.
INSERT INTO alumno VALUES ("Sandro","Brito",3669)
11.3 Actualizaciones
En ciertas ocasiones podemos desear cambiar los valores de una tupla sin cambiar todos los valores en dicha tupla. Para este propsito usamos la sentencia:
UPDATE r1 SET A1 = V1, A2 = V2,...,An = Vn WHERE P
Donde r1 es la relacin Ai el atributo a modificar Vi el valor que se le asignara a Ai y P es el predicado. Ejemplo: En la relacin jugador actualizar la posicin de los jugadores que posean la camiseta nmero 5 y asignarles la camiseta nmero 7.
UPDATE jugador SET nmero_camiseta = 7 WHERE nmero_camiseta = 5
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
65
12.
Definicin de datos
12.1 Creacin
Una relacin en SQL se define usando la orden CREATE TABLE r(A1 D1, A2 D3,...,An Dn) Donde r es el nombre de la relacin, cada Ai es el nombre de un atributo del esquema de la relacin r y Di es el tipo de dato de Ai. Una relacin recin creada est vaca. La orden INSERT puede usarse para cargar la relacin Ejemplo: crear la relacin lesionado con los atributos nombre, apellido ambos de tipo char y tiempo_inhabilit de tipo entero
CREATE TABLE lesionado ( nombre CHAR(20), apellido CHAR(20), tiempo_inhabilt INTEGER )
12.2 Eliminacin
Para eliminar una relacin usamos la orden DROP TABLE r, esta orden elimina toda la informacin sobre la relacin sacada de la base de datos, esta orden es ms fuerte que DELET FROM r ya que esta ultima elimina todas las tuplas pero no destruye la relacin, mientras que la primera s. Ejemplo: eliminar la relacin alumno
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
66
12.3 Actualizacin
La orden ALTER TABLE se usa para aadir atributos a una relacin existente. A todas las tuplas en la relacin se les asigna NULL como valor de atributo. La sintaxis de ALTER TABLE es la siguiente:
ALTER TABLE r1 ADD A1 D1
Ejemplo: agregar los atributos de tipo char nombre y apellido a la relacin jugadores
ALTER TABLE jugador ADD nombre CHAR(20) ALTER TABLE jugador ADD apellido CHAR(20)
13.
Ejercicios Propuestos
Los ejercicios de sta tarea se refieren a una sola base de datos, que se compone de tres tablas: la tabla S, que representa a los proveedores; la tabla P, que representa a las partes, y la tabla SP, que representa los envos de partes hechos por los proveedores. La clave primaria de la tabla proveedor es S#, la clave primaria de la tabla partes es P#. Adems, supondremos que no pueden existir al mismo tiempo dos envos del mismo proveedor y de la misma parte, de modo que cada envo tiene una combinacin nica de nmero de proveedor/nmero de parte (es decir es la clave primaria combinada de la tabla SP).
S S# S1 S2 S3 S4 S5 SNOMBRE Salazar Jaimes Bernal Corona Aldana SITUACION 20 10 30 20 30 CIUDAD Londres Pars Pars Londres Atenas
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
67
P P# P1 P2 P3 P4 P5 P6 PNOMBRE Tuerca Perno Birlo Birlo Leva Engrane COLOR Rojo Verde Azul Rojo Azul Rojo PESO 12 17 17 14 12 19 CIUDAD Londres Pars Roma Londres Pars Londres
SP S# S1 S1 S1 S1 S1 S1 S2 S2 S3 S4 S4 S4 P# P1 P2 P3 P4 P5 P6 P1 P2 P3 P2 P4 P5 CANT 300 200 400 200 100 100 300 400 200 200 300 400
Estos ejercicios sern realizados inicialmente en el aula y luego terminado en las casas:
1. Obtener el nmero y la situacin de todos los proveedores de Paris. 2. Obtener los nmeros de parte de todas las partes suministradas. 3. Obtener los nmeros de parte de todas las partes suministradas (sin
valores repetidos).
4. Obtener, para todas las partes, el nmero de parte y su peso en
Paris cuya
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
68
nmero de parte dentro de un orden ascendente por peso en gramos. 9. Obtener todas las combinaciones de informacin de proveedores y partes tales que el proveedor y la parte en cuestin estn situados en la misma ciudad (es decir, estn cosituados; valga utilizar un trmino antiesttico pero cmodo) 10.Obtener todas las combinaciones de informacin de proveedor y parte donde la ciudad del proveedor siga a la ciudad de la parte en el orden alfabtico. 11.Obtener todas las combinaciones de informacin de proveedor y parte donde el proveedor y la parte en cuestin estn cosituadas, pero omitiendo a los proveedores cuya situacin sea 20. 12.Obtener todas las combinaciones de nmero de proveedor/nmero de parte tales que el proveedor y la parte estn cosituados. 13.Obtener todas las parejas de nombres de ciudad (sin parejas repetidas) tales que un proveedor situado en la primera ciudad suministre una parte almacenada en la segunda ciudad. Por ejemplo, el proveedor S1 suministra la parte P1; el proveedor S1 est situado en Londres, y la parte P1 se almacena en Londres; por tanto, (Londres, Londres) es una pareja de ciudades que debera aparecer en el resultado. 14.Obtener todas las parejas de nmeros de proveedor tales que los dos proveedores estn cosituados. 15.Obtener el nmero total de proveedores. 16.Obtener el nmero total de proveedores que suministran partes en la actualidad. 17.Obtener el nmero de envos de la parte P2. 18.Obtener la cantidad total suministrada de la parte P2. 19.Obtener para cada parte suministrada, el nmero de parte y la cantidad total enviada de esa parte. 20.Obtener los nmeros de todas las partes suministradas por ms de un proveedor. 21.Obtener todas las partes cuyos nombres comiencen con la letra B. 22.Obtener los nombres de los proveedores que suministran la parte P2. 23.Obtener los nombres de los proveedores que suministre por lo menos una parte roja. 24.Obtener los nmeros de los proveedores situados en la misma ciudad que el proveedor S1. 25.Obtener los nmeros de los proveedores cuya situacin sea menor que el valor mximo actual de situacin en la tabla S. 26.Obtener los nombres de proveedores que no suministren la parte P2. 27.Obtener los nombres de proveedores que suministren todas las partes. 28.Obtener los nmeros de los proveedores que suministran por lo menos todas las partes suministradas por el proveedor S2. 29.Obtener los nmeros de las partes que pesen mas de 16 libras, o sean suministradas por el proveedor S2 (o las dos cosas) 30.Cambiar a color amarillo el color de la parte P2, aumente su peso en 5 e indicar que su ciudad es desconocida (NULL).
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
69
desconocido por ahora) a la tabla P. 38.Aadir la parte P8( nombre: cadena, color: rosa, peso:14, ciudad: Niza) a la tabla P. 39.Insertar un nuevo envio con nmero de proveedor S20, nmero de parte P20 y cantidad 100. 40.Para cada parte suministrada, obtener el nmero de parte y la cantidad total suministrada, y guardar el resultado en una nueva tabla de la base de datos (puede llamarle TEMP). 41.Para todas las parte rojas y azules tales que la cantidad total suministrada sea mayor o igual a 350 (excluyendo del total todos los envos cuyas cantidades sean menores o iguales a 200), obtener el nmero de parte, el peso en gramos, el color, y la cantidad mxima suministrada de esa parte; y clasificar el resultado en orden descendente por nmero de parte dentro de un orden ascendente segn esa cantidad mxima.
Colegio Tcnico Salesiano Sistemas Gestores de bases de datos Tercero de Bachillerato Aplicaciones Informticas
70