Story Transcript
6.1 Introducción SQL es más amigable para el usuario, a diferencia de Algebra Relacional, Aunque está basado principalmente en él. Es el lenguaje comercial más popular. Es el lenguaje estándar de las Bases de Datos Relacionales. Significa Structured Query Language Su nombre original era SEQUEL desarrollado como parte del proyecto del sistema R de IBM. Sequential English QUEry Language
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
1
6.1 Introducción
SQL ha sido tan popular, que aunque es uno más de los lenguajes de las B.D. Relacionales, se ha aceptado como “El Lenguaje”. Los dos Lenguajes que “componen” a SQL:
DDL.
Data Definition Language
DML
Data Manipulation Languaje En realidad SQL es una parte de DML. Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
2
6.1 Introducción Una consulta en SQL consta de tres cláusulas: select, from y where
… Select
X … From … Where
No confundamos select con la operación seleccionar del álgebra relacional, de hecho la discrepancia es un error desde la creación de SQL.
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
3
6.3 Estructura Básica
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
4
6.2 Estructura Básica
6.2 Estructura Básica
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
6
6.2 Estructura Básica
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
7
6.2 Estructura Básica
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
8
6.2 Estructura Básica
select nombre,fecha from (select IdAlumno,nombre from Alumnos),InasistAlum where hora='16:00' and Alumnos.IdAlumno=InasistAlum.IdAlumno
6.2 Estructura Básica
select nombre,fecha from (select IdAlumno,nombre from Alumnos), (select * from InasistAlum where hora='16:00') where Alumnos.IdAlumno=InasistAlum.IdAlumno
6.2 Estructura Básica •
•
Anidamientos como los anteriores (producto cartesiano de subconsultas) y muchas variantes más de SQL, no cumplen con el SQL Standard Core (Núcleo del SQL estándar). Conviene usar únicamente expresiones que cumplan con el Núcleo del Estándar para conservar la portabilidad. • Muchos DBMS’s cumplen con el estándar, pero por mercadotecnia, añaden una serie de variantes que no necesariamente tendrán otros DBMS’s.
Puede verificar sus expresiones en la siguiente liga: http://developer.mimer.se/validator/parser200x/index.tml O puede ver una lista de las características del Núcleo de SQL Estándar en: http://developer.mimer.se/validator/parser200x/core-sql-200x.tml Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
11
Esta alternativa es la mejor ya que es la mas simple para el usuario ... además cumple con el Núcleo de SQL estándar
6.2 Estructura Básica
Materias.nombre (Materias.nombre=Mat2.nombreMaterias.IdMateriaMat2.IdMateria ( Materias X
(Materias) ) )
Mat2
Renombrar
select distinct Materias.nombre from Materias, Materias Mat2 where Materias.nombre=Mat2.nombre and Materias.IdMateriaMat2.IdMateria Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
13
6.2 Estructura Básica
no cumple con el Núcleo de SQL estándar ...
6.2 Estructura Básica
Esta expresión cumple con el Núcleo de SQL estándar
6.2 Estructura Básica
Pruebe la expresión de consulta de la página anterior añadiendo lo que está en color rojo:
select nombre,day(FechaNac) as dia from Alumnos where month(FechaNac)=3 union select nombre,day(FechaNac) as dia from Maestros where month(FechaNac)=3
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
17
6.2 Estructura Básica El Operador BETWEEN permite simplificar consultas que contienen una cláusula where que especifica que cierto atributo se encuentre dentro de un rango de valores.
Se busca que SQL se parezca más al lenguaje natural para facilidad del usuario Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
18
6.2 Estructura Básica
select distinct IdAlumno from InasistAlum where fecha between '2001/03/06' and '2001/03/08'
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
19
6.2 Estructura Básica Operador LIKE Es útil cuando no es posible resolver consultas aunque los atributos tengan dominio atómicos. Se aplica a atributos char empleando los símbolos % y _ para representar secciones del valor del atributo. Caracter % (representa una subcadena de cualquier tamaño dentro del valor del atributo) Caracter _ (representa a cualquier carácter dentro del valor del atributo)
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
20
6.2 Estructura Básica
Encontrar a los alumnos que tienen un número de control que no corresponde al I.T.D. (valor distinto de '04' en las posiciones 3 y 4). select * from Alumnos where control not like '_ _04%' Esta consulta no sería resuelta tan fácilmente si el atributo “control” fuera de tipo numérico.
6.2 Estructura Básica
select * from Maestros where Calle like 'C%' select Nombre from Maestros – where Nombre like '_o%'
6.2 Estructura Básica
select * from Materias where nombre like '%datos%' select * from Materias where nombre like '%DATOS%'
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
23
6.2 Estructura Básica
Encontrar los nombres de los alumnos que viven en la calle “Real”.
select nombre from Alumnos where domicilio like '%Real%' El resultado de esta consulta no es satisfactorio.
6.2 Estructura Básica
select nombre from Alumnos where calle='Real' Los esquemas que cuentan con todos los atributos con dominio atómico, facilitan la obtención de consultas precisas. Observe que no se requiere usar LIKE.
6.2 Estructura Básica Cláusula Order by
Obtener una relación de los alumnos ordenada en base a la colonia. select * from Alumnos order by Colonia o select * from Alumnos order by 7
6.2 Estructura Básica
Obtener una relación con el domicilio y nombre de los alumnos ordenada en primer lugar por la colonia, en 2º lugar por la calle y por último números exterior e interior. select Colonia,Calle,NumeroExt,NumeroInt,Nombre from Alumnos order by Colonia,Calle,NumeroExt,NumeroInt Añada tuplas con colonia y calle iguales para observar el efecto de la expresión.
4.3 Funciones de Agrupación
Operan sobre grupos de tuplas. Funciones: Avg(atributo). Calcula la media de los valores de un atributo numérico para un grupo de tuplas. Min(atributo). Determina el valor menor de un atributo de un grupo de tuplas. Max(atributo). Determina el valor mayor de un atributo de un grupo de tuplas.
Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
28
4.3 Funciones de Agrupación
Funciones: Sum(atributo). Calcula la suma de todos los valores de un atributo de un grupo de tuplas. Count(atributo) o Count(*). Cuenta el número de tuplas que hay en un grupo. Antes de "atributo" puede ir la palabra “distinct”. Se debe indicar el criterio de agrupación usando la cláusula group by. En la relación resultante aparecerá una tupla por cada grupo formado. 29 Fund. Bases de Datos Ing. Felipe Alanís González -ITD
4.3 Funciones de Agrupación
Contar el número de materias select count(*) from Materias select count(nombre) from Materias select count(creditos) from Materias Contar el número distinto de créditos de las materias select count(distinct creditos) from Materias No llevan group by, por lo que solo formará un grupo (con todas las tuplas). Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
30
4.3 Funciones de Agrupación Número de alumnos que vive en cada colonia.
select colonia,count(*) from Alumnos group by colonia Número de tuplas de cada grupo (en este caso con la misma colonia).
Relación de los motivos de inasistencia y el total de inasistencias por cada motivo ordenada en forma descendente por el total. select motivo,count(*) from InasistAlum group by motivo order by 2 desc Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
31
4.3 Funciones de Agrupación Igual a la anterior (que se muestra aquí abajo) pero en la relación resultante solo incluir los motivos mayores a 1 inasistencia. select motivo,count(*) from InasistAlum group by motivo order by 2 desc select motivo,count(*) from InasistAlum group by motivo having count(*)>1 order by 2 desc select motivo,count(*) as faltas from InasistAlum group by motivo having faltas>1 order by faltas desc Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
32
4.3 Funciones de Agrupación Número de inasistencias en total de cada alumno. select IdAlumno,count(*) as faltas from InasistAlum group by IdAlumno order by faltas desc Número de inasistencias de cada alumno por mes, ordenadas de más a menos considerando solo las inasistencias por motivos deportivos. select IdAlumno,month(fecha) as mes,count(*) as faltas from InasistAlum where motivo="Deportes" group by IdAlumno,mes order by faltas desc Fund. Bases de Datos
Ing. Felipe Alanís González -ITD-
33
4.3 Funciones de Agrupación
count(distinct fecha) as TotDias from InasistAlum group by IdAlumno order by TotDias desc,TotFaltas desc
4.3 Funciones de Agrupación Encontrar el número máximo de créditos. select max(creditos) from Materias Número mínimo de créditos. select min(creditos) from Materias Número de créditos promedio de todas las materias. select avg(creditos) from Materias o select Fund. Bases de sum(creditos)/count(*) Datos Ing. Felipe Alanís González -ITD-from Materias35