Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Comprende 4 sentencias:
1) SELECT => Para obtener información de las tablas
2) INSERT => Para insertar una o más filas a una tabla
3) UPDATE=> Para modificar datos de una tabla
4) DELETE=> Para borrar una o más filas de una tabla
SQL (Lenguaje de Manipulación )
DML
Sintaxis General
SELECT [DISTINCT] campos
FROM tabla1,tabla2,…
[ WHERE Expresión lógica]
[ ORDER BY campo1 [DESC], campo2 [DESC]...]
SELECT (Sobre una relación)
PROYECCIÓN ()
Algebra relacional SQL
SELECT DISTINCT a1,a2,..ak
R= a1,a2..ak(B)
FROM B
SELECT DISTINCT x
FROM B
Q1 es equivalente a Q2
SELECT (Sobre una relación)
A diferencia de álgebra relacional, el resultado de una sentencia SQL :
- Puede tener filas repetidas (ver Q2, Q5)
- Puede tener un orden
DML
(Sobre una relación)
Alumno(ci,nom,sexo,colegio,telf,direcc,tipo)
Materia(sigla,nomMat,creditos,area,tipo)
Nota(ci,sigla,gestion,calif)
SELECT * SELECT *
FROM B FROM B
WHERE x=1 WHERE x=1 or z=9
SELECT Sobre una tabla (relación)
A diferencia de álgebra relacional, el resultado de una sentencia SQL :
- Puede tener filas repetidas (ver Q2, Q5)
- Puede tener un orden (ver Q3,Q6)
(El usuario decide)
DML Sobre una tabla: ejemplos
Alumno(ci,nom,sexo,colegio,telf,direcc,tipo)
Materia(sigla,nomMat,creditos,area,tipo)
Nota(ci,sigla,gestion,calif)
Obtener todos los datos de los alumnos de sexo femenino
SELECT * FROM alumno WHERE sexo=‘F’
Obtener todos los datos de los alumnos de sexo femenino que
vienen del San Agustín.
SELECT * FROM alumno
WHERE sexo=‘F’ and colegio=‘San Agustín’
Obtener las siglas y créditos de todas las materias del área de
programación y de sistemas de información I.
SELECT sigla,creditos FROM materia
WHERE area=‘Progr’ or nomMat=‘SistInf I’
DML Sobre una tabla: ejemplos
Alumno(ci,nom,sexo,colegio,telf,direcc,tipo)
Materia(sigla,nomMat,area,nivel)
Nota(ci,sigla,gestion,calif)
Obtener la sigla y nivel de todas las materias del área de programación
y de Sist Inf I.
FORMA 1 materia
Q= SELECT sigla, nivel FROM materia
WHERE area=‘pg’ or nomMat=‘Sist Inf I’
FORMA 2
En SQL también
elimina duplicados.
Trabjando con 2 o más tablas
UNION ()
Obtener todos los datos de los
alumnos y empleados de la
Universidad.
SQL
En SQL también
eliminan duplicados.
SELECT (Sobre 2 o más tablas)
INTERSECCIÓN ()
Algebra SQL
relacional No existe en Access
Pero si en SQLServer
SELECT * FROM A
R= A B INTERSECT
SELECT * FROM B
Trabjando con 2 o más tablas
INTERSECCIÓN ()
Obtener todos los datos de
los alumnos que también son
empleados de la Universidad
SQL
Q2= SELECT * FROM Alumno
INTERSECT
SELECT * FROM Empleado
SELECT a.ci,nombre,m.sigla,nomMat,calif
FROM alumno a, nota n, materia m
WHERE a.ci=n.ci and m.sigla=n.sigla and gestion=‘I-17’
FORMA2
SELECT a.ci,nombre,m.sigla,nomMat,calif
FROM materia m INNER JOIN
(alumno a INNER JOIN nota n ON a.ci = n.ci)
ON m.sigla = n.sigla
WHERE gestion='I-17'
DML (Sobre 2 o más tablas)
Alumno(ci,nom,sexo,colegio,telf,direcc,tipo)
Materia(sigla,nomMat,creditos,area,tipo)
Nota(ci,sigla,gestion,calif)
FORMA2
SELECT nombre,n.*
FROM alumno a , nota n
WHERE a.ci=n.ci AND gestion like '*17'
Variaciones INNER JOIN RIGHT JOIN
de JOIN
Suponiendo:
table1(ac,a1,a2..)
table2(ac,b1,b2..)
SELECT atributo(s) SELECT atributo(s)
ac=atributo por el FROM table1 as T1 FROM table1 as T1
que se hará INNER JOIN table2 as T2 RIGHT JOIN table2 as T2
el join ON T1.ac=T2.ac; ON T1.ac=T2.ac;
OUTER JOIN es como un INNER JOIN, pero añade las filas restantes de
una de las tablas:
• LEFT OUTER JOIN incluye todas las filas de la tabla de la izquierda (A
en el ejemplo)
• RIGHT OUTER JOIN incluye todas las filas de la tabla de la derecha (B
en el ejemplo)
Variaciones del join: Ejemplo
Sean A(x,y,z) B(x,a)
Q1=SELECT * FROM Q2=SELECT * FROM Q3=SELECT * FROM
A INNER JOIN B A LEFT OUTER JOIN B A RIGHT OUTER JOIN B
ON A.x=B.x ON A.x=B.x ON A.x=B.x
valor >TODOS/ALGUN ELEMENTO DEL conjunto Ej calif > all (SELECT calif from ..)
Ci no pertenece
Al conjunto de carnets de estudiantes que alguna vez se aplazaron
Ejemplo: CONSULTAS ANIDADAS [NOT] IN
valor [NO] PERTENECE A conjunto Ej ci NOT IN (SELECT ci from…)
ci NOT IN {a1,a2 }
a1 NOT IN {a1,a2 } FALSO => a1 no entra en el resultado
a2 NOT IN {a1,a2} FALSO => a2 no entra en el resultado
a3 NOT IN {a1,a2} VERDAD => a3 si entra en el resultado
a5 NOT IN {a1,a2} VERDAD => a5 si entra en el resultado
Ejercicio: CONSULTAS ANIDADAS [NOT] IN
Ejercicio:
Escribir una sentencia SQL para obtener el ci y nombre
de los alumnos de sexo femenino que nunca se aplazaron.
SELECT ci,nom
FROM alumno
WHERE sexo=‘f’ and ci NOT IN
(SELECT ci from nota where calif<51)
ORDER BY nombre
Ejercicio: CONSULTAS ANIDADAS [NOT] IN
Diseñar una consulta para generar un listado con el ci y
nombre de los alumnos que aprobaron base de datos I y
nunca se aplazaron Tablas de las que
tomaré la
SELECT A.ci, nom información
Tomaron
SELECT N.ci, nom INF 102
NOT EXISTS
Para A.ci=a1
NOT EXISTS {1,3,4} FALSO => a1 no entra en el resultado
Para A.ci=a2
NOT EXISTS {6,7} FALSO => a2 no entra en el resultado
Para A.ci=a3
NOT EXISTS {} VERDAD => a3 si entra en el resultado
Para A.ci=a5
NOT EXISTS {} VERDAD => a5 si entra en el resultado
NOT EXISTS VS
NOT IN
Obtener el ci y nombre de los
alumnos que nunca se aplazaron.
Q=SELECT ci, nom
FROM alumno A
WHERE NOT EXISTS
(SELECT * from nota N
where calif<51 and N.ci=A.ci ) Q= SELECT ci, nom
FROM alumno
NOT EXISTS C
WHERE ci NOT IN
Para A.ci=a1
NOT EXISTS{1,3,4} FALSO => a1 no entra (SELECT ci from nota
Para A.ci=a2
NOT EXISTS {6,7} FALSO => a2 no entra
where calif<51)
Para A.ci=a3 ci NOT IN {a1,a2 }
NOT EXISTS { } VERDAD => a3 si entra
a1 NOT IN {a1,a2 } FALSO => a1 no entra
Para A.ci=a5
NOT EXISTS {} VERDAD => a5 si entra a2 NOT IN {a1,a2} FALSO => a2 no entra
a3 NOT IN {a1,a2} VERDAD => a3 si entra
CI DE LOS ALUMNOS QUE TIENEN UN a5 NOT IN {a1,a2} VERDAD => a5 si entra
CONJUNTO VACÍO DE NOTAS DE APLAZO
O
CI DE LOS ALUMNOS PARA QUIENES NO CI DE LOS ALUMNOS CUYO CI NO
EXISTE UN CONJUNTO DE NOTAS DE PERTENECE AL CONJUNTO DE CIS DE LOS
APLAZO APLAZADOS
Ejercicio CONSULTAS ANIDADAS [NOT] EXISTS
Obtener el ci y nombre de los alumnos que hayan tomado
todas las materias del área de Prog.
SELECT ci, nom FROM alumno A
WHERE NOT EXISTS
(SELECT sigla from materia M
where area=‘Prog’ and
sigla NOT IN (select sigla from nota N
where N.ci = A.ci ))
(No existen materias del área Prog que no estén entre las siglas de
las materias tomadas por el alumno en cuestión )
alumno para el que se está decidiendo si entra o no al
alumno en cuestión = resultado
Pueden incluir
DML: Group By funciones agregadas
1 grupo = 1 fila
Ejercicio: SQL: resumen
Escribir el resultado de
ejecutar Q grupos
Consulta incorrecta
Hay
Hay varios
varios
valores
valores de
de bb
en el grupo,
en el grupo,
cuál
cuál pondría?
pondría?
El usuario define qué
atributos incluir SQL: resumen/grupos
Algebra relacional SQL
Filtramos grupos
con prom>50
DML (Group By)
Ejercicio: Diseñar una consulta para generar un listado con
el ci y promedio general del año 2016 de todos los alumnos.
Sólo tomar en cuenta los promedios de aprobación
Algebra relacional SQL
Filtro Formo
Filas grupos Filtro
grupos
DML (Group By)
Ejercicio: Diseñar una consulta para generar un listado
con el ci y promedio general de todos los alumnos de
sexo femenino.
Para que la tabla resultante tenga como nombre del campo prom
DML (Group By)
DML (Group By)
Ejercicio: Diseñar una consulta para generar un listado
con el ci, nombre y promedio general de todas las
alumnas que hayan tomado más de tres materias.
Ejemplo:
Sea Alumno(ci,nom,sexo,fecNac)
Obtener los datos de los alumnos que nacieron el año 2000
SELECT *
FROM alumno
WHERE year(fecNac)=2000
DML: Modificar datos de una tabla
UPDATE tabla
SET campo = valor, ....
WHERE condición
DML: Modificar datos de una tabla
Ejercicio: Diseñar una consulta para aumentar 5 puntos a
todas las calificaciones inferiores a 96, obtenidas por los
alumnos de sexo femenino.
UPDATE nota
SET calif=calif+5
WHERE calif<=95 and ci in
(select ci from alumno where sexo=‘f`’)
DML: Añadir una fila a una tabla
INSERT INTO tabla(a1,a2,.. ak)
VALUES (va1,va2,…)