2.2_DML_Consultas SQL Ejercicios - Propuestos

download 2.2_DML_Consultas SQL Ejercicios - Propuestos

of 46

description

libro

Transcript of 2.2_DML_Consultas SQL Ejercicios - Propuestos

  • Base de Datos Avanzada

    Ing. Hctor M. Zelada Valdivieso [email protected]

  • Lenguaje de Manipulacin de Datos (DML)

    - Insert , Update, Delete, Select

    - Consultas avanzadas.

    - Optimizacin de consultas.

    Base de Datos 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.

    BD Avanzada

  • 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

    Condicin de Filtro: Comparacin(=,,>,=,

  • 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

    SELECT *

    FROM departamentos as d LEFT OUTER JOIN

    empleados as e ON d.deptoId = e.deptoId

    Incluye al departamento de Administracin

  • RIGHT OUTER JOIN

    SELECT *

    FROM departamentos as d RIGHT OUTER JOIN

    empleados as e ON d.deptoId = e.deptoId

    Incluye a Juan Jos Sierralta

  • FULL OUTER JOIN

    SELECT *

    FROM departamentos as d FULL OUTER JOIN

    empleados as e ON d.deptoId = e.deptoId

    Incluye tanto Administracin como a Juan Jos Sierralta

  • 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

    Producto ON Categoria.IdCategoria = Producto.IdCategoria LEFT OUTER JOIN

    DetallePedido ON Producto.IdProducto = DetallePedido.IdProducto

    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

    MONTH ( date )

    Select MONTH ('25/10/2009)

    10

    YEAR ( date )

    Select YEAR('25/10/2009)

    2009

  • 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

    Nota: UNIQUE, hace que la tabla no podr tener registros con los

    mismos valores en esos campos

    CREATE INDEX [UNIQUE] IX_Tabla_Columnas ON Tabla ( campo 1 ASC|DESC, campo 2 ASC|DESC, )

    DROP INDEX Tabla.IX_Tabla_Columnas

  • Optimizacin de consultas

  • Gracias!