Download Diapositiva 1
Document related concepts
Transcript
PROGRAMA EDUCATIVO Maestría en ciencias de la computación UNIDAD DE APRENDIZAJE BASES DE DATOS Unidad de competencia Lenguaje de Consulta Estructurado ELABORACION ADRIAN TRUEBA ESPINOSA PRESENTACIÓN DEL CURSO La unidad de aprendizaje “Bases de Datos”, se imparte en el 2° semestre de la Maestría en ciencias de la computación. Tiene la finalidad de desarrollar las competencias necesarias en los alumnos, para reconocer y diseñar una base de datos relacional a través de los diversos modelos de bases de datos. Para ello es necesario sentar las bases teóricas y metodológicas para el desarrollo e implementación de sistemas de información en las organizaciones. 2 CONTENIDO DEL CURSO Unidad I. Introducción a bases de datos Unidad II. Modelo conceptual entidad relación Unida III. Algebra relacional Unidad IV. Arquitectura de los sistemas de bases de datos Unidad V. Lenguaje de consultas estructurado SQL 3 METAS A ALCANZAR Que el alumno desarrolle las competencias técnicas y profesionales para el desarrollo e implementación de bases de datos como: •Conocer los diferentes lenguajes de manipulación de datos. •Conocer el lenguaje basado en algebra relacional. •Conocer el lenguaje basado en calculo relacional. •Estudiar el SQL como lenguaje de consulta mas usado actualmente 4 OBJETIVO DEL MATERIAL DIDÁCTICO Que el alumno conozca los diferentes lenguajes para la manipulación de datos, con énfasis en SQL. 5 METODOLOGÍA DEL CURSO El curso se desarrollará bajo el siguiente proceso de estudio: 1. Exposición de parte del profesor mediante la utilización de este material en diapositivas. 2. Control de lecturas selectas que el profesor asignará para complementar la clase. 3. Tareas donde se investigarán temas, conceptos, procesos y métodos de los temas por ver. 4. Exposición de temas selectos de Administración de Bases de Datos por parte de los alumnos 5. Participación en clases 6. Prácticas de laboratorio 6 UTILIZACIÓN DEL MATERIAL DE DIAPOSITIVAS El material didáctico visual es una herramienta de estudio que sirve como una guía para que el alumno repase los temas más significativos del “Lenguaje de consultas estructurado SQL”, cabe aclarar que será un tutor el cual proporcionará las ideas generales del tema, para que los alumnos hagan ejercicios extra clase. 7 UNIDAD DE COMPETENCIA V Lenguaje de Consulta estructurado Lenguaje de datos El lenguaje de definición de datos, denominado por sus siglas como: DDL(Data definition Language). Permite definir un esquema de base de datos por medio de una serie de definiciones que se expresan en un lenguaje especial, el resultado de estas definiciones se almacena en un archivo especial llamado diccionario de datos. Lenguaje de datos: Es un lenguaje de manejo de datos para el sistema relacional, el álgebra relacional y cálculo relacional, ambos lenguajes son "relacionalmente completos", esto es, cualquier relación que pueda derivarse de una o más tablas de datos, también se puede derivar con u solo comando del sublenguaje. Por tanto, el modo de operación de entrada/Salida en un sistema relacional se puede procesar en la forma: una tabla a la vez en lugar de: un registro a la vez; en otras palabras, se puede recuperar una tabla en vez de un solo registro con la ejecución de un comando del sublenguaje de datos. Lenguaje de manipulación de datos La manipulación de datos se refiere a las operaciones de insertar, recuperar, eliminar o modificar datos; dichas operaciones son realizadas a través del lenguaje de manipulación de datos (DML, Data Manipulation Language), que es quién permite el acceso de los usuarios a los datos. Existen básicamente 2 tipos de lenguajes de manipulación de datos: Lenguajes de consulta formales. Los lenguajes de consultas: Son los lenguajes en el que los usuarios solicitan información de la base de datos. Estos lenguajes son generalmente de más alto nivel que los lenguajes de programación. Los lenguajes de consulta pueden clasificarse como procedimentales y no procedimentales; El álgebra relacional es un lenguaje de consulta formal procedimental, el álgebra relacional define operadores que funcionan sobre las tablas (de una manera similar a los operadores +,-,etc. del álgebra común ) para llegar al resultado deseado. El álgebra relacional es difícil de utilizar, debido en parte a que es procedimental, esto es, al utilizar el álgebra relacional no sólo debemos saber lo que queremos, también cómo obtenerlo. •Procedimentales: Los LMD requieren que el usuario especifique que datos se necesitan y cómo obtenerlos •No procedimentales: Los LMD requieren que el usuario especifique que datos se necesitan y sin especificar cómo obtenerlos. En el lenguaje del tipo procedimental el usuario da las instrucciones al sistema para que realice una secuencia de operaciones en la base de datos para calcular el resultado deseado. En el lenguaje no procedimental, el usuario describe la información deseada sin dar un procedimiento específico para obtener dicha información. En el proceso de bases de datos comerciales el álgebra relacional se utiliza de manera poco frecuente. Aunque unos cuantos productos exitosos DBMS sí tienen opciones del álgebra relacional, éstas son poco utilizadas en vista de su complejidad. El álgebra relacional toma dos o más tablas como entrada produce una nueva tabla como resultado de la serie de operaciones. Las operaciones fundamentales en el álgebra relacional son seleccionar, proyectar, producto cartesiano, renombrar, unión y diferencia de conjuntos. Además de las operaciones fundamentales existen otras operaciones como son: intersección de conjuntos, producto natural, división y asignación El álgebra relacional proporciona una serie de operaciones que se pueden usar para decir al sistema cómo construir la relación deseada a partir de las relaciones de la base de datos. El cálculo relacional proporciona una notación para formular la definición de la relación deseada en términos de las relaciones de la base de datos. El cálculo relacional toma su nombre del cálculo de predicados, que es una rama de la lógica. Hay dos tipos de cálculo relacional, el orientado a tuplas, propuesto por Codd, y el orientado a dominios, propuesto por otros autores. Cálculo Relacional • La Lógica de Primer Orden (FOL) puede pensarse como un lenguaje de consulta de dos formas: – Calculo relacional de tuplas – Cálculo relacional de dominio • La diferencia es el nivel al que son utilizadas las variables – Nivel de Atributo para los Dominios – Nivel de Tuplas Cálculo Relacional de Tuplas • Lenguaje de Consulta no Procedural – describe información deseada sin dar un proceso específico para obtener esa información. • Consultas de la forma { t | P( t) } – Conjunto de tuplas t tal que P(Predicado) es verdadero en t 20 Cálculo Relacional de Tuplas (2) • • • • { t | P( t) } t : una variable de tupla t[A] : el valor de la tupla t en el atributo A t r : la tupla t está en la relación r P : fórmula similar a aquellas del cálculo de predicados Fórmula del Cálculo de Predicados 1. Conjunto de Atributos y Constantes 2. Conjunto de Operadores de Comparación ejemplo: {<, , =, , >, } 3. Conjunto de conectores Y (), O () y No () 4. Implicación (): x y, si x es verdadero, entonces y es verdadero xy xy En el cálculo de predicados (lógica de primer orden), un predicado es una función con argumentos que se puede evaluar a verdadero o falso. Cuando los argumentos se sustituyen por valores, la función lleva a una expresión denominada proposición, que puede ser verdadera o falsa. Por ejemplo, las frases `Carlos Baeza es un miembro de la plantilla' y `Carlos Baeza gana más que Amelia Pastor' son proposiciones, ya que se puede determinar si son verdaderas o falsas. En el primer caso, la función `es un miembro de la plantilla' tiene un argumento (Carlos Baeza) y en el segundo caso, la función `gana más que' tiene dos argumentos (Carlos Baeza y Amelia Pastor). Si un predicado tiene una variable, como en ` x es un miembro de la plantilla', esta variable debe tener un rango asociado. Cuando la variable se sustituye por alguno de los valores de su rango, la proposición puede ser cierta; para otros valores puede ser falsa. Lenguajes de consultas comerciales Un lenguaje de consulta comercial proporciona una interfaz más amigable al usuario. Un ejemplo de este tipo de lenguaje es el SQL, (Structured Query Languaje, Lenguaje de Consulta Estructurado). Las partes más importantes del SQL son: DDL: Lenguaje de definición de datos (que nos permite crear las estructuras ) DML: Lenguaje de manipulación de datos (que nos permite tener acceso a las estructuras para suprimir, modificar e insertar) SQL SQL (Structured Query Language ó Lenguaje Estructurado de Consulta), es un lenguaje bastante sencillo, principalmente orientado a bases de datos y, sobre todo, al manejo de consultas., obteniendo potentes resultados. De hecho, las consultas que se realizan en Access, Oracle, MySQL, BD2, PROGRES SQL, SQL Server, están desarrolladas o basadas en este lenguaje, su implementación. El objetivo principal de SQL es la realización de consultas y cálculos con los datos de una o varias tablas. Consejos Para Escribir Mandatos En SQL Hay una serie de consejos (a veces normas), que hay que tener en cuenta a la hora de escribir mandatos SQL : 1. Un mandato en SQL se expresa en una cadena de caracteres o String. 2. Dicho mandato se escribe con el fin de crear una consulta en la interfaz. 3. Los nombres de los campos especificados (y de las tablas), que contengan más de una palabra, han de encerrarse entre corchetes ([nombre]). Como norma general, se suelen escribir siempre entre corchetes. 4. Para especificar un determinado campo de una determinada tabla, se ha de escribir primero el nombre de la tabla, un punto y, a continuación, el nombre del campo (nombre_tabla.nombre_campo). 5. Al especificar una expresión de búsqueda, si ésta se refiere a una expresión de caracteres, éstos han de encerrarse entre comillas simples ('expresión_a_buscar') 6. Para especificar una fecha en una búsqueda, ésta debe encerrarse entre signos numeral (#fecha#) en Access, Dbase X, etc., y entre comillas simples ('fecha') para bases Sql Server, Informix, etc. Principales palabras reservadas de SQL Significado SELECT ALL Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de selección. Indica que queremos seleccionar todos los valores. Es el valor por defecto y no suele especificarse casi nunca. DISTINCT Indica que queremos seleccionar sólo los valores distintos. FROM WHERE GROUP BY HAVING ORDER BY Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el caso de que exista más de una tabla se denomina a la consulta "consulta combinada" o "join". En las consultas combinadas es necesario aplicar una condición de combinación a través de una cláusula WHERE. Especifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Admite los operadores lógicos AND y OR. Especifica la agrupación que se da a los datos. Se usa siempre en combinación con funciones agregadas. Especifica una condición que debe cumplirse para los datos específica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los campos contenidos en ella. Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse con ASC (orden ascendente) y DESC (orden descendente). El valor predeterminado es ASC. La cláusula Select se usa para listar los atributos que se desean en el resultado de una consulta. From, Lista las relaciones que se van a examinar en la evaluación de la expresión. Where, es la definición de las condiciones a las que puede estar sujeta una consulta. La consulta típica de SQL tiene la siguiente forma: Select A1,A2,A3...An From r1,r2,r3...rm Where Condición(es) Donde: A1,A2,A3...An: Representan a cada atributo(s) o campos de las tablas de la base de datos relacional. R1,r2,r3...rm: Representan a la(s) tabla(s) involucradas en la consulta. Condición: Es el enunciado que rige el resultado de la consulta. Si se omite la cláusula Where, la condición es considerada como verdadera, la lista de atributos (A1,A2..An) puede sustituirse por un asterisco (*), para seleccionar todos los atributos de todas las tablas que aparecen en la cláusula From. Modificación de la Base de datos Para la modificación de bases de datos se creo el SQL, esté cuenta con módulos DDL (Data definition Language), para la definición de datos que nos permite crear o modificar la estructura de las tablas. Las instrucciones para realizar estas operaciones son: CREATE TABLE: Nos permite crear una tabla de datos vacía. INSERT: Permite almacenar registros en una tabla creada. UPDATE: Permite modificar datos de registros almacenados en la tabla. DELETE: Borra un registro entero o grupo de registros de una tabla. CREATE INDEX: Crea un índice que nos puede auxiliar para las consultas. DROP TABLE: Permite borrar una tabla. DROP INDEX: Borra el índice indicado. * Estructura de la sentencia CREATE TABLE. CREATE TABLE <Nombre de la tabla> ( Atributo1: tipo de dato longitud , Atributo2: tipo de dato longitud , Atributo3: tipo de dato longitud , : : Atributon: tipo de dato longitud , PRIMARY KEY (Opcional) ) ; Los campos pueden definirse como NOT NULL de manera opcional excepto en la llave primaria para lo cual es obligatorio. Además al definir la llave primaria se genera automáticamente un índice con respecto al campo llave; para definir la llave la denotamos dentro de los paréntesis de PRIMARY KEY. Ejemplo: Crear la tabla alumno, tomando como llave el numero de control. CREATE TABLE Alumno ( NControl char(8) NOT NULL, NombreA char(20), Especialidad char(3), Dirección char(30), PRIMARY KEY (NControl) ); Tabla Alumno: NControl NombreA Especialidad Dirección Pueden existir más de una llave primaria, esto es si se requiere, se crearán tantos índices como llaves primarias se establezcan. Pueden existir tantos campos Not Null (No nulos) como se requieran; En si estructurar la creación de una tabla es siempre parecida al ejemplo anterior. * Estructura de la sentencia INSERT INSERT INTO Nombre de la tabla a la que se le va a insertar el registro VALUES (Conjunto de valores del registro ) ; Ejemplo: Insertar en la tabla Alumno, antes creada los datos del alumno Daniel colín, con numero de control 95310518 de la especialidad de Ingeniería civil, con domicilio Abasolo Norte #45. INSERT INTO Alumno VALUES("95310518","Daniel Colín","IC","Abasolo Norte #45") ; * Estructura de la Sentencia CREATE INDEX CREATE INDEX Nombre que se le asignara al índice. ON Nombre de la taba a la cual se le creara el índice (Campo(s) por el cual se creara el índice); Ejemplo: Crear un índice de la tabla Alumno por el campo Especialidad. CREATE INDEX Indice1 ON Alumno(Especialidad); Este índice contendrá a todos los alumnos ordenados por el campo especialidad. CREATE INDEX UNIQUE INDEX Indice2 ON Alumno (Especialidad); En la creación de este índice utilizamos la sentencia UNIQUE, es un indicador para permitir que se cree un índice único por especialidad, esta sentencia siempre se coloca antes de CREATE INDEX. En este ejemplo se creara un índice que contenga un alumno por especialidad existente. * Estructura de la sentencia UPDATE UPDATE Nombre de la tabla en donde se modificaran los datos. SET Valores WHERE (Condición); Ejemplo: Modificar el número de control del registro de Daniel Colín de la Tabla alumno por el número 96310518. UPDATE Alumno SET NControl ‘96310518’ WHERE NombreA=’Daniel Colín’; * Estructura de la sentencia DROP TABLE DROP TABLE Nombre de la tabla a borrar ; Ejemplo: Borrar la tabla Alumno creada anteriormente. DROP TABLE Alumno; * Estructura de la sentencia DROP INDEX DROP INDEX Nombre del índice a borrar; Ejemplos: Borrar el índice Indice1 creado anteriormente. DROP INDEX Indice1; * Estructura de la sentencia DELETE DELETE FROM Nombre de la tabla WHERE Condición; - Borrar el registro cuyo número de control es 95310386. DELETE FROM Alumno WHERE Control=’95310386’; - Borrar el registro cuyo número de control es 95310386. DELETE FROM Alumno WHERE Control=’95310386’; - Borrar todos los registros de la tabla alumno. DELETE FROM Alumno; En el primer ejemplo, se borrara todo el registro(todos los datos), del alumno con número de control = 95310386. En el segundo ejemplo se borraran todos los registros de la tabla alumno, pero sin borrar la estructura de la tabla, ya que la orden Delete solo borra registros, la sentencia Drop Table es la que borra toda la estructura de la tabla junto con los registros de la misma. Las ordenes que se utilizan para la manipulación de vistas son: CREATE VIEW: Crea una tabla virtual. DROP VIEW: Elimina una vista creada anteriormente. CREATE VIEW Nombre de la vista AS (Expresión de consulta); Para el ejemplos consideremos la tabla llamada CURSO, que contiene los siguientes campos: Estructura de la sentencia CREATE VIEW. Nombre del campo NumC NombreC DescC Creditos Costo Depto Descripción Número del curso, único para identificar cada curso Nombre del curso, también es único Descripción del curso Créditos, número de estos que gana al estudiante al cursarlo Costo del curso. Departamento académico que ofrece el curso. Que contiene los siguientes datos: NombreC Nu mC DescC Creditos Costo Depto A01 Liderazgo Para público General 10 100.00 Admón. S01 Introducción a la inteligencia artificial Para ISC y LI 10 90.00 Sistemas. C01 Construcción de torres Para IC y Arquitectura 8 0.00 Ciencias B01 Situación actual y perspectivas de la alimentación y la nutrición Para IB 8 80.00 Bioquímica E01 Historia presente y futuro de la energía solar IE e II 10 100.00 Electromecánica. S02 Tecnología OLAP 8 100.00 Sistemas C02 Tecnología del concreto y de las Estructuras Para ISC y LI Para IC 10 100.00 Ciencias B02 Metabolismo de lípidos en el camarón Para IB 10 0.00 Bioquímica Ejemplos: * Crear una vista (tabla virtual), denominada CursosS, que contenga las filas solo correspondientes a cursos ofrecidos por el departamento Sistemas. La vista deberá contener todas las columnas de la tabla CURSO, con la excepción de la columna Depto, la secuencia, de izquierda a derecha de las columnas, deberá ser: NombreC, NumC, Creditos, Costo Y DescC. CREATE VIEW CursosS AS SELECT NombreC,NumC,Creditos,Costo,DescC FROM CURSO WHERE DescC=’Sistemas’; Observemos que después del nombre de la vista ponemos la sentencia AS, esto para definir la estructura de la vista, la estructura en si de la vista esta formada por la consulta anteriormente vista utilizando la orden SELECT. NombreC NumC Credito s Costo DescC Introducción a la inteligencia artificial S01 10 90.00 Para ISC y LI Tecnología OLAP S02 8 100.0 0 Para ISC y LI Estructura de datos S03 8 0.00 Para ISC y LI Circuitos digitales S04 10 0.00 Para ISC Practica SQL para realizarse en clase 1. Se construirá una base de datos a partir de un esquema que se presentara 2. Se introducirán datos en cada una de las tablas 3. Se realizaran consultas donde se utilicen sentencias que permitan explorar el potencial de SQL. 4. Se ejecutaran consultas con fechas, operadores y desigualdades en SQL 5. Se consultaran datos de una tabla, dos tablas y tres tablas de forma simultanea 6. Se ejecutaran sentencias donde se use el algebra relacional. Crear la base de datos mysql> USE Escuela; mysql> INSERT INTO alumno VALUES(‘Adrian', ‘Trueba Espinosa',‘M','2000-03-30'); SELECT "nombre_de_atributo" FROM "nombre_tabla"; Recuperan todos los datos de la tabla alumnos: mysql> SELECT * FROM alumno; Recuperan todos los datos de la tabla profesores: mysql> SELECT * FROM profesor; seleccionamos sólo el registro de Arturo de la siguiente manera: mysql> SELECT * FROM alumno WHERE nombreAlu=“Pedro"; El estudiante comentara que hacen las siguientes sentencias y las ejecutara en MySQL para verificar lo comentado mysql> SELECT * FROM alumno WHERE FechaNa <= "2000-1-1"; mysql> SELECT * FROM alumno WHERE FechaNa <= "2000-1-1"; mysql> SELECT * FROM alumno WHERE FechaNa >= “1975-1-1"; mysql> SELECT * FROM alumno WHERE sexoAlu=“M"; mysql> SELECT * FROM profesor WHERE SexoPro=“F”; mysql> SELECT * FROM profesor WHERE (SexoPro = “F" AND Direccion = “Tabasco"); mysql> SELECT * FROM profesor WHERE (SexoPro = “F" AND Direccion = “Tabasco") or (Direccion = “Veracruz“); mysql> SELECT NombreMateria FROM materia WHERE Area =“Ciencias sociales”; mysql> SELECT NombreMateria, Creditos FROM materia WHERE creditos < 3 OR (Area = “Ciencias exactas”); mysql>SELECT NombreAlu, materia.creditos FROM alumno inner join materia on alumno.idalumno=materia.idmateria; mysql>SELECT NombreAlu, materia.creditos FROM alumno inner join materia on alumno.idalumno=materia.idmateria; mysql> SELECT NombreAlu, materia.Nombremateria, materia.creditos FROM alumno inner join materia on alumno.idalumno=materia.idmateria; SELECT NombreAlu, materia.Nombremateria, materia.creditos, calificacion.calificacion FROM alumno, materia,calificacion inner join materia on alumno.idalumno = materia.idmateria =calificacion.idalumno; select E.EmployeeID, LastName, FirstName, OrderID, C.CustomerID, CompanyName, ContactName from dbo.Orders O join dbo.Employees E on O.EmployeeID = E.EmployeeID join dbo.Customers C on O.CustomerID = C.CustomerID order by EmployeeID select alumno.NombreAlu, alumno.AP, materia.nombremateria,cali ficacion.calificacion, from escuela.califilicacion C join escuela.alumno A on C.idalumno = A.idalumno join escuela.materia M on A.idalumno = C.idalumno order by idalumno; SELECT nombreAlu, nombremateria, calificacion FROM alumno, materia, calificacion WHERE alumno.idalumno = calificacion.alumno_idalumno AND calificacion.materia_idmateria = materia.idmateria; SELECT nombreAlu, nombremateria, calificacion FROM alumno A LEFT JOIN calificacion C ON A.idalumno = C.alumno_idalumno LEFT JOIN materia M ON C.materia_idmateria = M.idmateria; SELECT DISTINCT nombre FROM Salarios; SELECT * FROM Salarios WHERE fecha BETWEEN '06-Jan-1999' AND '10-Jan-1999'; SELECT * FROM Salarios WHERE Nombre LIKE '%AN%'; SELECT Nombre, Salario, fecha FROM Salarios ORDER BY Salario DESC; select nombre, clave from usuarios; select nombre, clave from usuarios where nombre='Leonardo'; select nombre, clave from usuarios where clave='bocajunior'; select nombre, clave from usuarios where clave='river'; Lecturas y practica recomendada http://www.emagister.com/curso-mysql-php/caracteristicas-massignificativas-sql http://www.lawebdelprogramador.com/cursos/archivos/ManualPracticoSQ L.pdf http://www.youtube.com/watch?v=HO5eb2wBaBk http://www.youtube.com/watch?v=6n1lmCyfqLU