Download Diapositiva 1

Document related concepts

SQL wikipedia , lookup

Lenguaje de manipulación de datos wikipedia , lookup

Lenguaje de definición de datos wikipedia , lookup

Optimización de consultas wikipedia , lookup

Base de datos relacional wikipedia , lookup

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
xy  xy
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