2.2 - DML - Consultas SQL Ejercicios - Propuestos

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 46

Base de Datos Avanzada

Ing. Hctor M. Zelada Valdivieso


[email protected]

Base de Datos Avanzada

Lenguaje de Manipulacin de Datos (DML)

- Insert , Update, Delete, Select


- Consultas avanzadas.
- Optimizacin de consultas.

BD Avanzada
Lenguaje de manipulacin de datos (DML)
El lenguaje de manipulacin de datos (en ingls Data Manipulation
Language, o DML), nos permite insertar, modificar, eliminar o
recuperar informacin de la base de datos.

Existen cuatro operaciones bsicas:


- INSERT
- UPDATE
- DELETE
- SELECT.

Lenguaje de manipulacin de datos (DML)


INSERT: La instruccin INSERT agrega una o ms filas nuevas a una
tabla o vista.

a) Para insertar una fila:

Ejemplo:

Nota: Si un campo es autonumrico no se podr insertar ya que el DBMS lo generar. Se


recomienda que siempre indique los campos de la tabla en donde se insertarn los datos.

Lenguaje de manipulacin de datos (DML)


INSERT
b) Para insertar los registros devueltos por una consulta.

Ejemplo:

Lenguaje de manipulacin de datos (DML)


UPDATE: La instruccin UPDATE se utiliza para modificar datos de un tabla.

Ejemplo:

Lenguaje de manipulacin de datos (DML)


DELETE: La instruccin DELETE se utiliza para eliminar registros de una tabla.

Ejemplo:

Lenguaje de manipulacin de datos (DML)


SELECT:

La instruccin SELECT permite recuperar los datos almacenados en una


base de datos
ALL | DISTINCT | TOP N

Campo1, Campo2, Campo n

Condicin de Filtro: Comparacin(=,<>,>,<,>=,<=), Rango (between),


Pertenencia(in, not in), Nulos( Is Null, Is Not Null), Patron (Like)

Condicin de filtro de un campo calculado despus de hacer el agrupamiento


ASC | DESC

BDNegocio

Consultar todos los datos de los clientes


ordenados de manera alfabtica.

Consultar el identificador, nombre, y el telfono


de todos los clientes cuyo pas sea Alemania.
Mostrar los clientes ordenados de manera
alfabtica.

Consultar el identificador, nombre, y la categora


de todos los productos cuyos precios estn entre
50 y 60 nuevos soles.

Consultar el identificador, nombre y el cargo


de todos los empleados que no tienen un jefe
asignado.

Consultar el identificador, nombre, pas y el telfono de


todos los clientes cuyo nombres de compaa tengan la
palabra comercial en alguna parte del nombre. Mostrar
los clientes ordenados de manera alfabtica.

Consultar la cantidad de
clientes que se tiene en
cada pas. Mostrar los
pases ordenados
alfabticamente.

Consultar la cantidad de clientes que se


tiene en cada pas. Mostrar los pases
ordenados alfabticamente y slo aquellos
donde haya ms de 10 clientes.

Consultar los 3 productos ms caros.

Consultar el identificador, nombre, y la categora


de todos los productos que nunca han sido
pedidos.

Consultas avanzadas

Temas:

Inner Join
Left Outer Join
Right Outer Join
Full Outer Join
Union
Funciones
Tablas Temporales
Variables tipo tabla

Consultas avanzadas
Las combinaciones que podemos realizar entre tablas podemos clasificarlas de la siguiente manera:

a) Combinaciones internas:
- INNER JOIN O JOIN : Se incluyen los registros en los que haya correspondencia en
ambas tablas segn la condicin de la combinacin.
b) Combinaciones externas:
- LEFT OUTER JOIN O LEFT JOIN: Se incluyen adems los registros de la tabla de la
izquierda que no tienen correspondencia segn la condicin de combinacin.
- RIGHT OUTER JOIN O RIGHT JOIN: Se incluyen adems los registros de la tabla de
la derecha que no tienen correspondencia segn la condicin de combinacin.
- FULL OUTER JOIN O FULL JOIN: Se Incluyen adems registros de la tabla de la
derecha y de la izquierda no tienen correspondencia segn la condicin de
combinacin.

Consultas avanzadas

INNER JOIN

SELECT *
FROM departamentos as d INNER JOIN
empleados as e ON d.deptoId = e.deptoId

LEFT OUTER JOIN

Incluye al departamento de Administracin

SELECT *
FROM departamentos as d LEFT OUTER JOIN
empleados as e ON d.deptoId = e.deptoId

RIGHT OUTER JOIN

Incluye a Juan Jos Sierralta

SELECT *
FROM departamentos as d RIGHT OUTER JOIN
empleados as e ON d.deptoId = e.deptoId

FULL OUTER JOIN

Incluye tanto Administracin como a Juan Jos Sierralta

SELECT *
FROM departamentos as d FULL OUTER JOIN
empleados as e ON d.deptoId = e.deptoId

Consultar el identificador, nombre, y la


categora de todos los productos que nunca
han sido pedidos.
SELECT Producto.IdProducto, Producto.NombreProducto, Categoria.NombreCategoria
FROM Categoria INNER JOIN
LEFT OUTER JOIN
DetallePedido ON Producto.IdProducto = DetallePedido.IdProducto

Producto ON Categoria.IdCategoria = Producto.IdCategoria

WHERE DetallePedido.IdProducto IS NULL

ORDER BY Producto.NombreProducto

Consultar el identificador, nombre, cargo y la


cantidad de ventas que ha realizado hasta el
momento cada uno de los empleados.Deben
mostrarse todos los empleados.
SELECT Empleado.IdEmpleado, Empleado.Apellidos, Empleado.Nombre,
Empleado.Cargo, count (Pedido.IdPedido) as Cantidad

FROM Empleado LEFT OUTER JOIN


Pedido ON Empleado.IdEmpleado = Pedido.IdEmpleado And Pedido.Anulado=0

GROUP BY Empleado.IdEmpleado, Empleado.Apellidos,


Empleado.Nombre, Empleado.Cargo
ORDER BY Empleado.Apellidos, Empleado.Nombre

UNION
El operador UNION une los resultados de dos o ms
sentencias SELECT en un solo conjunto de
resultados.
- SQL Server requiere que las consultas a las tablas
referenciales tengan el mismo nmero de columnas,
los mismos tipos de datos, y que las columnas se
encuentren en el mismo orden en la lista SELECT.
- SQL Server elimina las filas duplicadas en el
resultado. Sin embargo, si usa la opcin UNION ALL,
todas las filas (incluso las duplicadas) son incluidas en
el resultado.

UNION
-

Debe especificar los nombres de las columnas o alias en la


primera sentencia del SELECT. Por consiguiente, si quiere definir
los nuevos ttulos de las columnas para el resultado, debe crear los
seudnimos de las columnas en la primera sentencia SELECT.

La clusula ORDER BY se escribe despus de la ltima


consulta, al final de la sentencia; para indicar las columnas de
ordenacin podemos utilizar su nmero de orden o el nombre de la
columna, en este ltimo caso se deben de utilizar los nombres de
columna de la primera consulta ya que son los que se van a utilizar
para nombrar las columnas del resultado

UNION
Unin: Evita registros repetidos
Unin All: Considera registros repetidos

SELECT (nombre + ' ' + apellidos) as Nombre, TelDomicilio,


'Empleado' as Tipo
FROM Empleado
UNION
SELECT NombreCompaia, Telefono, 'Cliente'
FROM Cliente
ORDER BY Nombre

Funciones
-

Funciones de agregado:
En la lista de seleccin de una consulta de resumen aparecen
funciones de columna tambin denominadas funciones de dominio
agregadas. Una funcin de columna se aplica a una columna y
obtiene un valor que resume el contenido de la columna.

Funciones
- Funciones de fecha y hora:

Datepart:
Day, Month, year, weekday, etc.

Funcin

Ejemplo

Resultado

DATEADD ( datepart , number, date )

Select DATEADD ( day, 5, '01/01/2010')

2010-01-06

DATEDIFF ( datepart , startdate , enddate )

Select DATEDIFF ( day, 25/10/1981 ,


25/10/2009)

10227

DATENAME ( datepart , date )

Select DATENAME (month, '25/10/2009')

Octubre

DAY ( date )

Select DAY('25/10/2009)

25

Select MONTH ('25/10/2009)

10

Select YEAR('25/10/2009)

2009

MONTH ( date )
YEAR ( date )

Tablas Temporales Locales


Ejemplo:
-- 1.- Creamos la tabla temporal local
Create Table #NombreTabla
(
campo1 tipoDato ,
campo2 tipoDato
)
-- 2.- Llenamos la tabla temporal local
INSERT INTO #NombreTabla
SELECT c1, c2 FROM Tabla
-- 3.- Usamos la tabla temporal en alguna consulta.
-- 4.- Eliminamos la tabla temporal
DROP TABLE #NombreTabla

Tablas Temporales Locales


Create Table #Merito
(
orden int IDENTITY (1,1),
puntaje int
)
INSERT #Merito (puntaje)
SELECT DISTINCT puntaje FROM Alumno ORDER BY puntaje desc
SELECT #Merito.orden, Alumno.codigo, Alumno.nombre, Alumno.puntaje
FROM Alumno INNER JOIN
#Merito ON Alumno.puntaje = #Merito.puntaje
ORDER BY #Merito.orden, Alumno.nombre

DROP TABLE #Merito

Variables tipo tabla


Ejemplo:
-- 1.- Declaramos la variable tipo tabla.
Declare @NombreTabla table
(
campo1 tipoDato ,
campo2 tipoDato
)
-- 2.- Llenamos la variable tipo tabla

INSERT INTO @NombreTabla


SELECT c1, c2 FROM Tabla
-- 3.- Usamos la variable tipo tabla con un alias en alguna consulta.

Variables tipo tabla


DECLARE @merito TABLE
(
orden int IDENTITY (1,1),
puntaje int
)
INSERT @merito(puntaje)
SELECT DISTINCT puntaje FROM Alumno ORDER BY puntaje desc

SELECT m.orden, Alumno.codigo, Alumno.nombre, Alumno.puntaje


FROM @merito m INNER JOIN
Alumno ON m.puntaje = Alumno.puntaje
ORDER BY m.orden, Alumno.nombre
Nota: Es ms eficiente el uso de variables tipo tabla que usar tablas temporales

Optimizacin de Consultas

Optimizacin de consultas
1.- No utilizar SELECT * por que el motor debe leer
primero la estructura de la tabla antes de ejecutar la
sentencia para ubicar los campos Seleccionar solo
aquellos campos que se necesiten, cada campo extra
genera tiempo extra.
2.- Deben Cualificar los campos, es decir especificar el
alias de la tabla o el nombre de la tabla delante de
cada campo definido en el select, esto le ahorra tiempo
al motor de tener que buscar a que tabla pertenece el
campo especificado. Select Tabla.campo, .

Optimizacin de consultas
3.- Utilizar Inner Join , left join , right join, para
unir las tablas en lugar del From Tabla1, Tabla2,
, que se usaba antiguamente, esto permite que
a medida que se declaran las tablas se unan,
mientras que si utilizamos el FROM Tabla1, Tabla
2 y luego en el where las relacionamos, el motor
genera primero el producto cartesiano de todos
los registros de las tablas para luego filtrar las
correctas, un trabajo definitivamente lento. Justo
para evitar esto surgen los JOIN

Optimizacin de consultas
4.- El orden de ubicacin de las tablas en el From se
sugiere que deberan ir en lo preferible de menor a mayor
segn el nmero de registros, de esta manera se dice
que reduce la cantidad de revisiones de registros que
realiza el motor al unir las tablas a medida que se
agregan.
5.- Evitar el uso de Like en la medida de lo posible en el
Where.

Optimizacin de consultas
6.-Evitar el uso de Subconsultas que generalmente se ponen con IN
(Select) y NOT IN (Select .), en lugar del IN usar Inner Join, y en
lugar de NOT IN usar Left Outer Join y en el Where le agregan una
condicin de nulidad.
7.- Evitar el uso de Convert, Cast y Formulas dentro de las consultas,
cada formula y casteo retrasan el motor considerablemente. Esto
hacerlo en la capa de cliente o presentacin.

Optimizacin de consultas
8.- No usar cursores, se recomienda en su lugar usar tablas temporales o
variables tipo tabla, El usar variables tipo tabla es ms optimo que el uso de
tablas temporales.
9.- Siempre el SQL SERVER buscar el mejor plan de ejecucin para las
consultas, pero para ello se basa en el registro de las estadsticas, por lo
que la recomendacin es que las estadsticas de las tablas que maneja el
SQL SERVER siempre estn actualizadas.

Optimizacin de consultas
10.- Crear ndices para tablas que tienen gran cantidad de registros y
que se consultan frecuentemente, pero tener cuidado con los ndices ya
que retrasan las actualizaciones y ocupan espacio en disco, se
recomienda generalmente para claves primarias que ya las crea
automticamente, para las claves forneas, pero sobre todo para
campos por los que se hacen bsquedas frecuentes en el Where.
Cuando la tabla no tiene muchos registros no son necesarios por que el
mejor plan de ejecucin que elegir el SQL SERVER ser el leer la tabla
directamente y no buscar en el ndice.

Optimizacin de consultas

CREATE INDEX [UNIQUE] IX_Tabla_Columnas


ON Tabla
(
campo 1 ASC|DESC,
campo 2 ASC|DESC,
)

DROP INDEX Tabla.IX_Tabla_Columnas


Nota: UNIQUE, hace que la tabla no podr tener registros con los
mismos valores en esos campos

Optimizacin de consultas

Gracias!

También podría gustarte