Base de Datos El lenguaje SQL 1.

Slides:



Advertisements
Presentaciones similares
MOVIMIENTO JOVENES DE LA CALLE CIUDAD DE GUATEMALA chi siamo quienes-somos qui sommes-nous who we are attività actividades activités activities scuola.
Advertisements

Base de Datos II.
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
INTELIGENCIA ARTIFICIAL
1 INFORME RESUMEN SOBRE EL NIVEL DE UTILIZACION DE LAS TIC EN LAS EMPRESAS GALLEGAS ( Resumen PYMES ) Noviembre de 2004.
TEMA 2 MÚLTIPLOS Y DIVISORES
ABECEDARIO FIGURAS GEOMÉTRICAS NÚMERO
Introducción Lenguaje de manipulación de datos (Data Manipulation Language) Permite a los usuarios llevar a cabo las tareas de consulta o manipulación.
MOVIMIENTO ARMÓNICO SIMPLE MOVIMIENTO ARMÓNICO SIMPLE
SISTEMA DE NUMEROS NÚMEROS ENTEROS DIVISIBILIDAD NÚMEROS PRIMOS
integridad referencial
Álgebra 2010 Clase N° 1 Conjuntos numéricos I
ECUACIONES LINEALES.
Medidas de Posición Central:
Ejemplo A continuación aparecen las tasas de retorno de dos fondos de inversión durante los últimos 10 años. 1. ¿Cuál es más riesgoso? 2. ¿En cuál invertiría.
CLASE 3 SOFTWARE DEL MICROPROCESADOR
MOVIMIENTO JOVENES DE LA CALLE CIUDAD DE GUATEMALA chi siamo quienes-somos qui sommes-nous who we are attività actividades activités activities alimentazione.
Estadística Administrativa I
UPC Tema: ESPACIO VECTORIAL Rn
Repaso del capítulo Primer Paso
Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: SELECT Ing. Alfonso Vicente, PMP
UNIDAD 2: FUNCIONES.
SQL G r u p o
EL OSO APRENDIZ Y SUS AMIGOS
Mejoras a la Cláusula GROUP BY
UNIDAD 3 Progresiones.
Consultas anidadas.
3 Enero 2010 PERÚ: IV CENSO NACIONAL ECONÓMICO, APURÍMAC.
Estadística Computacional I
La minimización de los costes
Lenguaje de consulta de Hibernate
¿Qué es un conjunto? Un conjunto es una colección de objetos considerada como un todo. Los objetos de un conjunto son llamados elementos o miembros del.
IBD Clase 15.
S.Q.L. (Lenguaje de Consulta Estructurada)
Base de Datos El lenguaje SQL.
3. INTRODUCCIÓN A LA PROGRAMACIÓN
Números enteros.
JUGANDO CON LOS NÚMEROS
Unidad 3 Lenguaje SQL Contenidos Que es SQL ? Estructura de SQL
Lenguaje Estructurado de Consultas (Structured Query Language – SQL)
E.1 Obtener los detalles completos de todos los proyectos.
BEATRIZ LAFONT VILLODRE
REGLAS DE LOS SIGNOS.
OPERACIONES DE RECUPERACIÓN. WHERE ciudad =‘Las Palmas’; de los suministradores Obtener el código y la situación de Las Palmas SELECT sn, situacion FROM.
Funciones: Conceptos Básicos
ESCUELA: NOMBRES: LÓGICA DE LA PROGRAMACIÓN UNIDAD 2: Naturaleza de los Datos FECHA: Ing. Patricio Abad Espinoza OCTUBRE 2009 – FEBRERO Ciencias.
PL/SQL Francisco Moreno Universidad Nacional.
ELECTRICIDAD.
Manual de Procedimientos Procedimiento de ejecución del programa de
ESTADIGRAFOS DE DISPERSION
Estadística Administrativa I
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 5 Agregando Datos Usando Funciones de Grupo.
Lenguajes Formales de Consulta
SQL el Structured Query Language no es mas que un lenguaje estándar de comunicación con bases de datos.
Subconsultas Avanzadas
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 6 Subconsultas.
COMANDOS SQL.
IBD CLASE 15. SQL Lenguaje de Consultas Estruturado (SQL) ◦Lenguaje de trabajo estándard para modelo relacional ◦Componentes ◦DDL: Data Definition Language.
CONSULTAS SENCILLAS A LA BASE DE DATOS
Autora: Francisca Montañez Muñoz
Tema 2: Base de datos relacionales
Bases de Datos Sql.
LENGUAJE ESTRUCTURADO DE CONSULTAS
 La sentencia SELECT recupera todas las columnas o un subconjunto de ellas de una tabla. Esto afecta a todas las filas de la tabla, a menos que especifiquemos.
MSSQL SERVER CURSO BÁSICO 1. CONCEPTOS BASICOS DE SQL. DESCRIPCIÓN DEL CURSO. Sesión 3: Índices Uso, Creación, Tipos, Eliminación LENGUAJE DE CONSULTAS.
SQL es el lenguaje de comunicación entre el programa cliente y programa servidor; Oracle es un programa servidor, en el que está la base de datos propiamente.
Unidad 6. Tema 4. Lenguaje de consultas SQL
Structure Query Languaje SQL. Introducción a SQL El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por.
DML Transact SQL Sesión VI Trabajando con subconsultas.
Selección Condicionada de Filas Uso de la cláusula WHERE La cláusula WHERE restringe las columnas que retorna una consulta según la condición que se imponga.
Transcripción de la presentación:

Base de Datos El lenguaje SQL 1

Funciones de Agregación Agrupamientos Funciones Escalares Subqueries Contenido Funciones de Agregación Agrupamientos Funciones Escalares Subqueries

FUNCIONES DE AGREGACION Toman valores que dependen de las columnas y retornan información respecto a las columnas (no las columnas propiamente) COUNT (*) COUNT (DISTINCT nombre_columna) SUM (columna/expresión) AVG (columna/expresión) MAX (columna/expresión) MIN (columna/expresión) 2

Funciones de Agregación : COUNT Devuelve la cantidad de tuplas que cumplen la condición de WHERE o HAVING. Ej1: ¿ Cuantos movimientos se han hecho en el banco? SELECT COUNT (*) FROM Movimientos; Ej2: ¿ Cuantos alumnos hay Inscriptos a una materia ? SELECT COUNT (DISTINCT cod_alumno) FROM Inscripciones; 2

Funciones de Agregación : SUM Suma los contenidos de un campo numerico. Ej: ¿Cuánto dinero se ha depositado en la cuenta 100101? SELECT SUM(importe) FROM Movimientos WHERE importe > 0 AND cuenta = 100101 ; Se les puede aplicar Etiquetas : SELECT SUM(importe) AS ‘Total Depósitos’ (sum) 887786.31000000 Total Depósitos 887786.31000000 2

Funciones de Agregación : AVG Devuelve el promedio de los contenidos de un campo numérico. AVG = SUM() / COUNT() ¿Cuál es el monto promedio depositado en la cuenta 100101? SELECT AVG(importe) as Promedio FROM Movimientos WHERE importe > 0 AND cuenta = 100101 ; Promedio 569847.320 2

Funciones de Agregación : MAX, MIN Devuelven el mayor o menor valor del conjunto seleccionado. Ej1 :¿Cuál fue el depósito más alto en la cuenta 100101? SELECT MAX(importe) FROM Movimientos WHERE cuenta = 100101; Ej2 :¿Cuál fue el depósito más pequeño en la cuenta 100101? SELECT MIN(importe) WHERE cuenta = 100101 AND importe > 0 ; (max) 661306.92000000 (min) 226479.39000000 2

Funciones de Agregación Se pueden aplicar simultáneamente. En este caso se aplican al MISMO conjunto de tuplas. SELECT MAX(importe) , MIN(importe), AVG(importe) FROM Movimientos WHERE cuenta = 100101 and importe > 0; En este ejemplo devuelve 1 tupla con 3 campos. 2

Agrupamientos GROUP BY Permite agrupar los registros por un campo (o más de uno) Produce un solo registro por cada grupo de registros. SELECT cuenta FROM Movimientos CUENTA 791 803 106982 106972 107052 SELECT cuenta FROM Movimientos GROUP BY cuenta CUENTA 791 803 106982 106972 107052 2

Agrupamientos Su utilidad es combinarlo con las Funciones Agregadas : Ej1: “Quiero saber cantidad de movimientos y el importe por Cuenta” SELECT cuenta, count(*), sum (importe) FROM Movimientos GROUP BY cuenta CUENTA (count(*)) (sum) 791 1 167505.18 803 1 139000.00 106982 2 0.00 106972 2 0.00 107052 2 0.00 2

Agrupamientos Ej2: “Quiero saber cantidad de personas por Departamento y luego por Ciudad” SELECT departamento, ciudad, COUNT(*) FROM clientes GROUP BY departamento, ciudad Obs: No necesariamente se ordenan por ese criterio departamento ciudad (count(*)) MONTEVIDEO MONTEVIDEO 598 CANELONES CANELONES 22 CANELONES ATLANTIDA 13 MALDONADO MALDONADO 37 MALDONADO P. DEL ESTE 25 2

Agrupamientos – Con orden Ordenando el GROUP BY : Ej1: Ordenado por departamento y luego ciudad SELECT departamento, ciudad, COUNT(*) FROM Clientes GROUP BY departamento, ciudad ORDER BY departamento, ciudad Ej2: Ordenado por Cantidad (descendente) y luego por ciudad y departamento ORDER BY 3 DESC, 2, 1 7

IMPORTANTE Agrupamientos Todas las columnas en la lista del SELECT que no estén en funciones de agregación, deben figurar en los campos de GROUP BY Esto es porque el GROUP BY solo puede retornar una fila por grupo y para esas filas se aplica la función de agregación. SELECT col1, col2,col3,…., colN, funcA(), funcB() FROM ….. WHERE …. GROUP BY col1, col2,col3,…., colN

Agrupamientos : HAVING La claúsula HAVING usualmente complementa a GROUP BY aplicando condiciones a los grupos (especificados por el GROUP BY) luego de que éstos están formados Ventajas : se pueden incluir funciones de agregación como condición de búsqueda, facilidad que no está permitida en WHERE.

HAVING filtra grupos así como el WHERE filtra registros. Agrupamientos : HAVING Ejemplo: “Quiero saber el total de dinero (por cuenta) de las cuentas > 10.000 pero solo de los que tengan un total positivo” SELECT cuenta, SUM(importe) AS Total FROM Movimientos WHERE cuenta > 10000 GROUP BY cuenta HAVING SUM(importe) > 0; cuenta total 100071 51112.31000000 100102 100.0000000 100111 226857.2900000 HAVING filtra grupos así como el WHERE filtra registros.

Agrupamientos : Un ejemplo SELECT cuenta, MAX(importe) Maximo, MIN (importe) Minimo, AVG(importe) Promedio FROM Movimientos WHERE cuenta > 10000 GROUP BY cuenta HAVING COUNT(*) > 2 AND SUM(importe) > 0 7

Funciones Escalares Funciones de String Funciones Aritméticas Funciones de Fecha Funciones del Sistema Se pueden componer, siempre que se respeten los dominios de Entrada y Salida

Funciones de String LEN STR SUBSTRING LOWER UPPER LTRIM CHARINDEX PATINDEX SPACE CHAR REPLICATE REVERSE STUFF DIFFERENCE RIGHT

Funciones de String LEN( campo/valor) Devuelve el largo del string pasado como argumento. len(‘HOLA’) Resultado : 4 len(‘’) Resultado : 0 STR( valor_numerico[, largo[, pos_decimales]]) SELECT str(-165.8768, 7, 2) Resultado : ‘-165.88’ SUBSTRING( campo/valor, posicion inicial, largo) Devuelve un fragmento del String (parametro 1) Los caracteres comienzan en la posición 1 SELECT substring("ROBERTO MARTINEZ DELGADO",8,7) Resultado : ‘ MARTIN’

Funciones de String LOWER(<char_expr>) Devuelve el mismo string pasado a minúsculas UPPER(<char_expr>) Devuelve el mismo string pasado a mayúsculas SELECT upper('Bob Smith1234*&^'), lower('Bob Smith1234*&^') ---------------- ---------------- BOB SMITH1234*&^ bob smith1234*&^ LTRIM(<char_expr>) Remueve espacios en blanco de la izquierda SELECT ltrim(' valor ') -------------- valor

Funciones de String CHARINDEX retorna la posición de comienzo de una determinada cadena en una expresión, donde expresión usualmente es el nombre de una columna CHARINDEX(<'char_expr'>, <expression>) SELECT charindex('de','Un pequeño texto de muestra') Resultado : 18

Funciones Aritméticas Función Parámetros Semántica ABS (N) Devuelve el valor absoluto de N SIGN (N) Devuelve -1 si N<0 , 1 si N>0 o 0 CEILING (N) Entero inmediato siguiente a N FLOOR (N) Entero inmediato anterior a N EXP (N) EXP(N) = eN LOG (N) LOG(N) = Loge(N) POWER (x,y) POWER(x,y) = xy ROUND (N, d) Redondea N a d digitos SQRT (N) Raiz cuadrada de N Trigonométricas

Funciones de Fecha DATEPART(<date_part>, d) Devuelve un componente de la fecha d : year, month, day, hour, minute, second select datepart(day, getdate() )  14 select datepart(year, ’25/07/2009’ )  2009 DATENAME(<date part>, d) Devuelve el nombre de una parte de la fecha d select datename(month,'25/07/2009')  ‘July’ select datename(weekday,'25/07/2009')  ‘Saturday’

Funciones de Fecha DATEADD (<date part>, <number>, <date>) Suma o resta intervalos a una fecha (dias, meses, años, etc.) select dateadd(day, 10, ’25/07/2009’)  ‘4/8/2009’ select dateadd(month, 2, ’25/07/2009’)  ‘25/9/2009’ select dateadd(month, -9, ’25/07/2009’)  ‘25/10/2008’ DATEDIFF(<date part>, <date1>, <date2>) Calcula diferencia entre 2 fechas (en dias , meses, años, etc). select datediff(day, '25/07/2009', '25/08/2009')  31 select datediff(month, '25/07/2009', '25/08/2009')  1

Funciones del Sistema Permiten obtener información del entorno Devuelven información del sistema, usuario, BD y objetos de la BD. Suelen depender del DBMS. getdate() , CURRENT_DATE(), CURRENT_TIME() Devuelven fecha/hora actual host_name() Nombre del equipo desde donde se conectó. db_name(), DATABASE() Nombre de la base en que estamos posicionados user_name() , CURRENT_USER() Devuelve el nombre del usuario del DBMS actualmente conectad @@VERSION , VERSION() Devuelven la version del DBMS

Subqueries Son sentencias SELECT anidadas dentro de otra sentencia SELECT Devuelven información a la principal y deben figurar siempre entre paréntesis. Permiten implementar la operación DIFERENCIA del Algebra Relacional 2

Subqueries (ejemplo) “Necesito listar personas que viven en la misma ciudad que ‘CLIENTE 10010’ “ SELECT persona, nombre, ciudad, departamento FROM Personas WHERE ciudad = (SELECT ciudad FROM Personas WHERE nombre = ‘CLIENTE 10010’ ) 2

Subqueries Las subqueries son evaluadas primero y su(s) valor(es) son sustituido(s) en la consulta principal. Una subquery puede retornar : Ningun valor Consecuencias: Dicha subquery es equivalente a un valor Nulo La query general no retona ningún valor. Un valor Consecuencia : La subquery es equivalente a un número o valor carácter Un conjunto de valores Consecuencia : La subquery retorna o una fila o una columna

Subqueries Restricciones: Solo si el subquery devuelve UN valor puede preguntarse por = Si el subquery devuelve UN campo se puede preguntar por IN En caso contrario se debe preguntar por EXISTS Ejemplo 1: Listar las personas que viven en la misma ciudad que ‘ JUAN PEREZ’. SELECT persona, nombre, ciudad, departamento FROM Personas WHERE ciudad = (select ciudad from personas where nombre = ‘JUAN PEREZ’ ) Podemos usar = porque sabemos que solo se va a devolver 1 tupla. 2

Subqueries Ejemplo 2: Listar personas que viven en la misma ciudad y departamento que ‘JUAN PEREZ’. SELECT persona, nombre, ciudad, departamento FROM Personas P WHERE EXISTS (select * from personas P2 where P2.nombre = ‘JUAN PEREZ’ and P.ciudad = P2.ciudad and P.departamento = P2.departamento ) Usamos EXISTS porque no podemos preguntar si <Ciudad,Departamento> IN ….. 2

Subqueries : Tipos Correlacionadas No-Correlacionadas Correlacionadas (o inner SELECT): el valor producido por ella depende de un valor producido por el SELECT externo. En cualquier otro caso son No-Correlacionadas

Deben referirse a la MISMA sección Subqueries Correlacionados Listar los Empleados cuyo sueldo está por debajo del promedio de su Sección SELECT nro_emp, nom_emp, seccion, sueldo FROM Empleados E1 WHERE sueldo < (SELECT AVG (sueldo) FROM Empleados E2 WHERE E2.seccion = E1.seccion ) ORDER BY 1, 2, 3 La subquery es ejecutada por cada fila considerada por el SELECT externo Deben referirse a la MISMA sección 2

Subqueries : Negación Permiten implementar DIFERENCIA de tablas Ej: Que clientes no tienen cuentas SELECT * FROM Clientes WHERE cod_cliente NOT IN (SELECT cod_cliente FROM Cuentas) Sentencia equivalente (correlacionada) : WHERE NOT EXISTS (SELECT * FROM Cuentas WHERE Cuentas.cod_cliente = Clientes.cod_cliente )

Subqueries : Negación Se utiliza NOT EXISTS cuando se desea evaluar un NOT IN con más de una columna Ej: “Movimientos para los cuales no se ha ingresado una cotización aun (están en tabla MOVIMIENTOS pero NO en COTIZACIONES)” SELECT M.id_mov, M.fecha, M.cuenta, C.moneda FROM movimientos M, cuentas C WHERE M.cuenta = C.cuenta AND NOT EXISTS ( SELECT * FROM Cotizaciones COT WHERE COT.moneda = C.moneda AND COT.fecha = M.fecha ) ORDER BY 1, 2, 3 2

Subqueries : Uso en HAVING Se pueden utilizar en la cláusula HAVING para mayor expresividad. “Clientes con un saldo en plazo fijo igual al más alto de todos los plazos fijos” SELECT cliente, sum(saldo) FROM Cuentas GROUP BY cliente HAVING sum (saldo) = (SELECT max (saldo) FROM cuentas ) 2

UNION Combina múltiples consultas en una sola Facilita ordenamiento no posible con una consulta simple UNION : Operador que une el resultado de 2 o mas Consultas en una Consulta Simple. 2 Tipos : UNION Excluye los resultados repetidos de las consultas unidas. UNION ALL Incluye TODAS las tuplas de las consultas unidas (aun con repetición)

UNION Sintaxis SELECT lista de columnas FROM tablas [WHERE condicion] UNION [ALL] FROM tablas [Order By lista de columnas]

UNION Condiciones y Requisitos La cantidad de columnas en cada sentencia SELECT debe ser la misma El tipo de datos de cada columna entre los dos SELECT’s debe coincidir. No se exige que sea la misma columna, ni siquiera que posea el mismo nombre. Si deseo ordenar la salida, debo ubicar la sentencia ORDER BY al final de la consulta. Referencio las columnas por sus posiciones. 2

UNION Ejemplo SELECT unique cuentas.cuenta, cuentas.producto FROM movimientos, cuentas WHERE movimientos.cuenta = cuentas.cuenta and sucursal = 4 and importe > 3000000 UNION SELECT unique cuentas.cuenta, cuentas.producto FROM cuentas, cuentas_intereses WHERE cuentas.cuenta =cuentas_intereses.cuenta and cuentas_intereses.interes = 0; 2

UNION Resultado con UNION Resultado con UNION ALL Cuenta Producto 95 3 100 3 102 3 188 3 247 3 256 3 266 3 338 3 570 3 578 3 599 3 610 3 947 3 1422 3 1423 3 23213 3 101801 3 102002 3 105612 3 105622 3 Cuenta Producto 95 3 100 3 102 3 188 3 247 3 256 3 266 3 338 3 570 3 578 3 599 3 610 3 947 3 1422 3 1422 3 1423 3 23213 3 101801 3 102002 3 105612 3 105622 3 2

UNION - Ejemplos Válidos 1) SELECT cod_cliente, nro_cuenta, cod_moneda, ‘Cliente 102’ as Grupo FROM Cuentas WHERE cod_cliente = 102 UNION SELECT cod_cliente, nro_cuenta, cod_moneda , ‘Euros’ as Grupo WHERE cod_moneda = 3 and cod_cliente <> 102 ORDER BY 3,1,2 2) SELECT E.id_persona, P.nombre FROM Personas P, Empleados E WHERE P.id_persona = E.id_persona SELECT C.cod_cliente, P.nombre FROM Personas P, Clientes C WHERE P.id_persona = C.id_persona 2

UNION - Ejemplos Incorrectos SELECT cod_cliente, fec_apertura FROM Cuentas WHERE cod_cliente = 102 UNION SELECT cod_cliente, nro_cuenta WHERE cod_moneda = 3 and cod_cliente <> 102 2) SELECT E.id_persona, P.nombre, E.fec_ingreso FROM Personas P, Empleados E WHERE P.id_persona = E.id_persona SELECT C.cod_cliente, P.nombre FROM Personas P, Clientes C WHERE P.id_persona = C.id_persona , ??????? 2