Upload
patricio-urbieta
View
44
Download
3
Embed Size (px)
Citation preview
Página | 1
Resumen Bases de datos
AlumnosPk_Alumnos nombreAlu
28608032 Natalia catalan29937424 Patricio urbieta33200200 coto48160471 paola urbieta51100100 helena urbieta
Left join y Right join
Asocian dos tablas
select x.notas, a.nombreAlufrom Examenes as x right join Alumnos as aon x.fk_Alumnos=a.pk_dniAlu
Notas NombreAlumnos 10 Natalia catalan7 Patricio urbieta
NULL cotoNULL paola urbieta
8 helena urbieta
Muestra todos los alumnos y si tiene coincidencias con la otra tabla.
select a.nombreAlu, x.notasfrom Alumnos as a left join Examenes as xon a.pk_dniAlu=x.fk_Alumnos
Notas NombreAlumnosPatricio urbieta 7
coto NULLpaola urbieta NULL
helena urbieta 8Natalia catalan 10
Este caso es lo mismo ya que esta invertido el orden de declaracion de las tablas
select x.notas, a.nombreAlu
ExamenesFk_mat Fk_alumnos notas
2 28608032 102 29937424 75 51100100 8
MateriasPk_idMAteria Nombr materia
1 matematica2 lengua3 programacion4 empresarial5 contabilidad
Página | 2
from Examenes as x left join Alumnos as aon x.fk_Alumnos=a.pk_dniAlu
Este caso hace al reves muestra todos los examenes y sus conicidencias con alumnos
Notas Nombre Alumnos10 Natalia catalan7 Patricio urbieta8 helena urbieta
Full join
select x.notas, a.nombreAlufrom Examenes as x full join Alumnos as aon x.fk_Alumnos=a.pk_dniAlu
Notas Nombres
10 Natalia catalan7 Patricio urbieta8 helena urbieta
NULL cotoNULL paola urbieta
El resultado es el conjunto total de registros de ambas tablas, coincidiendo aquellos registros cuando sea posible. Si no hay conicidencias, se asignan nulos.
Inner join
Muestra solo los resultados de ambas tablas que tengan coincidencias.
select x.notas, a.nombreAlufrom Examenes as x inner join Alumnos as aon x.fk_Alumnos=a.pk_dniAlu
Notas Nombres10 Natalia catalan7 Patricio urbieta8 helena urbieta
Página | 3
Cross join
select * from Examenes cross join Alumnos
Cross join, realiza el producto cartesiano de las tablas, muestra todas las combinaciones posibles.
Funciones de agregado
Son funciones escalares devuelven un solo resultado.
Query Tipo Devuelveselect AVG(notas)from Examenes Promedio 8
select SUM(notas)from Examenes Suma 25
select COUNT(*)from Examenes Cuenta 3
Al devolver un solo resultado cuando se consulta junto a otro campo se debe agrupar, por ejemplo…
select EmployeeID, SUM (freight)as Total, COUNT(*) as Cant_Ordenes from ordersgroup by EmployeeIDorder by EmployeeID
ID Empleado Total Cantidad ordenes
1 8836,64 1232 8696,41 963 10884,74 1274 11346,14 1565 3918,71 426 3780,47 677 6665,44 728 7487,88 1049 3326,26 43
La tabla esta ordenada por numero de empleado con order by EmployeeID
Página | 4
Otro ejemplo poniendo una condicion en el where
select EmployeeID, suma = SUM (freight), COUNT(*) as Cant_Ordenes from orderswhere freight > 500group by EmployeeID
ID Empleado Total Cantidad ordenes
1 544,08 12 2654,69 43 3110,08 44 719,78 15 890,78 17 830,75 19 754,26 1
En este ejemplo solo se suman los pedidos que sean mayores de 500
--------------------------------------------------------------------------------------------------------------
Otro ejemplo mas…
select EmployeeID, SUM (freight) as Total, COUNT(*) as Cant_Ordenes from ordersgroup by EmployeeIDhaving sum(Freight) > 9000order by EmployeeID
ID Empleado Total Cantidad ordenes
3 10884,74 1274 11346,14 156
Con having sum(Freight) > 9000 filtro los resultados de las funciones superiores a 9000, having debe usarse despues de agrupar.
Agrupamiento y subtotales
Página | 5
Agrupa por articulos
Agrupa por proveedor
RollUp , cube y compute
Compute: devuelve los datos agrupados y ordenados y totalizados por una campo que se le especifica.
Ejemplo:
select p.NOMBRE, art.NOMBRE, e.Cantidadfrom ENVIOS as e inner join Proveedores as pon e.IdProv = p.idProvinner join Articulos as arton e.idArticulo=art.idArticuloorder by art.NOMBREcompute sum(e.Cantidad) by art.nombre
Esta consulta muestra los datos ordenados por la columna articulos y tira el total de articulos enviados.
Nombre prov Articulo cantidadJUAN CINTA 800INMA CINTA 300EVA CINTA 100
Sum = 1200
select p.NOMBRE, art.NOMBRE, e.Cantidadfrom ENVIOS as e inner join Proveedores as pon e.IdProv = p.idProvinner join Articulos as arton e.idArticulo=art.idArticuloorder by p.NOMBREcompute sum(e.Cantidad) by p.nombre
Nombre prov Articulo cantidadCARLOS CLASIFICADORA 200CARLOS CONSOLA 700
Sum = 900
Siempre se debe ordenar
antes de usar compute.
Cube: devuelve todos los subtotales de todos los campos, antes se debe agrupar por los campos consultados.
Totaliza
Totaliza
Ordeno y totalizo por otro campo
Ordeno y totalizo por articulo
order by p.NOMBREcompute sum(e.Cantidad) by p.nombre
Página | 6
select IdProv, idArticulo,SUM(Cantidad) from envios where idProv=1group by IdProv,idArticulowith cube
Nombre prov Articulo cantidad1 1 200
NULL 1 2001 4 700
NULL 4 700NULL NULL 900
1 NULL 900
RollUp: devuelve los datos agrupados y ordenados y totalizados por una campo que se le especifica, no da subtotales.
select IdProv, idArticulo,SUM(Cantidad) from envios where IdProv=4group by IdProv,idArticulowith rollup
Nombre prov Articulo cantidad4 3 3004 7 3004 NULL 600
NULL NULL 600
Operaciones DDL: create, alter, drop
Total de prov y arti
Total de articulo
Total general
Total proveedor
Muestra detalle prov y art
Total proveedor
Total general
Página | 7
Crear tabla
create table Tablaprueba(numero int primary key identity(1,1),nombre varchar(40) not null…)
Borrar tabla
drop table Tablaprueba
Agregar columna
alter table Tablapruebaadd direccion varchar(50)
Borrar columna
alter table Tablapruebadrop column direccion
Formas de insertar datos en una tabla
Insertar de a una fila
insert into Tablaprueba values('patricio')
Insertar de a una fila especificando que campos
insert into Tablaprueba (nombre)values('paola')
Insertar todos los campos de una tabla en otra
insert Tablapruebaselect nombreMatfrom Materias
especifico que campo de la tabla Materias voy a insertar en la TablaPrueba
insert Tablapruebaselect nombreMatfrom Materiaswhere pk_idMat=2
este es el mismo caso pero con un filtro, inserto todos los nombres de materias de la tabla Materias que tengan un id = 2
Editar campos de una tabla
Página | 8
update tablapruebaset nombre = 'no existe mas'
edito sin una condicion y abajo con una condicion
update tablapruebaset nombre = 'no existe mas'where nombre= 'lengua'
Borrar campos de una tabla
delete Tablaprueba where nombre='natalia catalan'
o
delete Tablaprueba
Borrar campos de una tabla con “truncate”
Si la tabla tiene un campo identity no lo resetea, borra las filas pero, no vuelve el valor de identity a 0, para eso se debe usar truncate. Aparte truncate no deja registro de lo borrado y delete si
truncate table tablaprueba
vuelve el valor de identity a 0
Otras herramientas para consultar
Uso de % y like: se usa para buscar coincidencias el signo % busca
cualquier cosa y se concatena con una variable o literal se puede usar adelente de la variable , atrás o en ambos lados, tambien en el medio concatenando.
update Tablapruebaset nombre = 'nada'where nombre like '%em%'
ejemplo de concatenado, encontraria la palabra “programacion” o “paginacion”
select *from Tablapruebawhere nombre like 'p' + '%' + 'n'
otro ejemplo de concatenado, encontraria la palabra “contabilidad” o “conrad” o “c que me importa que hay en el medio d”
select *from Tablapruebawhere nombre like 'c%d'
Subconsultas
Página | 9
Una subconsulta es nada mas que una consulta dentro de otra y suele remplazar a las combinaciones. De todas maneras siempre es preferible usar combinaciones ya que el motor las puede resolver de manera mas eficaz.
Cómo utilizar subconsultas
Cuando decida utilizar subconsultas, tenga en cuenta los siguientes hechos e instrucciones: Las subconsultas se deben incluir entre paréntesis. Se pueden utilizar subconsultas en lugar de una expresión siempre y
cuando se devuelva un solo valor o una lista de valores. Se pueden utilizar subconsultas que devuelvan un conjunto de registros de varias columnas en lugar de una tabla o para realizar la misma función que una combinación.
No se pueden utilizar subconsultas que recuperen columnas con tipos
de datos text e image.
Puede tener subconsultas dentro de subconsultas, con una anidación de hasta 32 niveles. El límite varía según la cantidad de memoria disponible y la complejidad de las otras expresiones de la consulta. Las consultas individuales pueden no admitir una anidación de hasta 32 niveles.
Uso de subconsulta como tabla derivada.
Una tabla derivada se crea al utilizar una subconsulta en lugar de una tabla en una cláusula FROM a la que hace referencia un alias o nombre especificado por el usuario.
EJEMPLO:
SELECT T.orderid, T.customerid FROM
( SELECT orderid, customerid FROM orders ) AS T
La subconsulta vendria a remplazar a una tabla.
Cuando se utilice como tabla derivada, tenga en cuenta que una subconsulta:
Es un conjunto de registros dentro de una consulta que funciona como una tabla.
Ocupa el lugar de la tabla en la cláusula FROM.
Se optimiza con el resto de la consulta.
Subconsulta como tabla derivada