Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: SELECT Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Slides:



Advertisements
Presentaciones similares
Consultas en Visual FoxPro
Advertisements

Base de Datos II.
SQL Y BASES DE DATOS A TRAVÉS DE LA WEB
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.
integridad referencial
Repaso DBD!!! (Es ahora o nunca)
SQL BAJO EL ENTORNO PHP/MYSQL MI JUAN PABLO TORRES HERRERA UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA ENSENADA Mayo de 2005.
Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP
Unidad IV Objetivo de la Unidad:
Teórico: Structured Query Language
Mejoras a la Cláusula GROUP BY
Consultas anidadas.
Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: DML Ing. Alfonso Vicente, PMP
Maestría en Bioinformática Bases de Datos y Sistemas de Información Otros objetos de Base de Datos Ing. Alfonso Vicente, PMP
Maestría en Bioinformática Bases de Datos y Sistemas de Información Fundamentos de Matemática Ing. Alfonso Vicente, PMP
Teórico: Algebra Relacional
Lenguaje de consulta de Hibernate
IBD Clase 15.
S.Q.L. (Lenguaje de Consulta Estructurada)
Características Objeto Relacionales en Oracle
Unidad 3 Lenguaje SQL Contenidos Que es SQL ? Estructura de SQL
Lenguaje Estructurado de Consultas (Structured Query Language – SQL)
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.
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
MySQL M.C. Pedro Bello López.
SQL.
Lenguaje SQL (Structured Query Language)
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 5 Agregando Datos Usando Funciones de Grupo.
SQL el Structured Query Language no es mas que un lenguaje estándar de comunicación con bases de datos.
Subconsultas Avanzadas
6 Copyright © 2010, Oracle y/o sus filiales. Todos los derechos reservados. Visualización de Datos de Varias Tablas Utilizando Uniones.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 6 Subconsultas.
Dr. Mario Rossainz López Aplicaciones WEB Primavera 2015.
COMANDOS SQL.
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
Bases de datos con MYSQL
IBD CLASE 15. SQL Lenguaje de Consultas Estruturado (SQL) ◦Lenguaje de trabajo estándard para modelo relacional ◦Componentes ◦DDL: Data Definition Language.
CAPITULO 4 Despliegue de Datos Desde Múltiples Tablas
CONSULTAS SENCILLAS A LA BASE DE DATOS
Autora: Francisca Montañez Muñoz
Consultas SQL (Base de Datos)
LENGUAJE SQL.
Bases de Datos Sql.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 14 Uso de Operadores de Conjuntos.
Más ejemplos en SQL Francisco Moreno. S sn snombre situacion ciudad S1 Salazar 20 Londres S2 Jaramillo 10 París S3 Bernal30 París S4 Caicedo 20 Londres.
Ingeniería de Sistemas y Modelamiento.
LENGUAJE ESTRUCTURADO DE CONSULTAS
Sample-Based Quality Estimation of Query Results in Relational Database Environments Donald P. Ballou InduShobha N. Chengalur-Smith Richard Y. Wang.
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
Funciones de agrupamiento y JOIN de Tablas
 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.
Consultas SQL. SQL SQL es un lenguaje de consulta estructurado (Structured Query Languague). Se utiliza para: Eliminar Modificar Consultar La base de.
JOIN EN MYSQL Bueno en esta presentación mostrare cosas acerca de los usos de la sentencia JOIN en mysql , mediante esta presentación planeo mostrar los.
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.
AA Gerardo Morgade Donato AA Isnel Leyva Herbella.
Unidad 6. Tema 4. Lenguaje de consultas SQL
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Structure Query Languaje SQL. Introducción a SQL El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por.
DLM Transact SQL Sesión II Recuperación de información.
Querys a bases de datos con MS ACCESS. DEFINAMOS LOS TERMINOS: DML=Lenguaje de manipulación de datos Las sentencias DML permiten generar consultas para.
DML Transact SQL Sesión VI Trabajando con subconsultas.
DML Transact SQL Sesión V Consultando múltiples tablas.
6 Triggers ORACLE - III Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
DML Transact SQL Sesión III Agrupando y resumiendo información.
Copyright  Oracle Corporation, All rights reserved. 6 Subconsultas.
CONSULTAS SQL POSTGRES.
Structure Query Languaje
Transcripción de la presentación:

Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: SELECT Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy

Agenda Proyección y selección DISTINCT Funciones escalares ORDER BY GROUP BY / Funciones de agregación SELECT en una tabla Joins

Agenda Producto cartesiano Equi joins Outer joins SELECT en una tabla

Agenda Proyección y selección DISTINCT Funciones escalares ORDER BY GROUP BY / Funciones de agregación SELECT en una tabla Joins

SELECT en una tabla Proyección y selección La proyección permite seleccionar las columnas, la selección permite seleccionar las tuplas

SELECT en una tabla Proyección y selección Sintaxis básica Ejemplo SELECT <lista_columnas> -- proyección FROM <tabla> WHERE <predicado>; -- selección Ejemplo SELECT id, nombre, apellido, mail FROM empleados WHERE sueldo > 80000;

SELECT en una tabla DISTINCT Al realizar proyección, se pueden perder las claves y pueden aparecer tuplas repetidas La cláusula DISTINCT permite eliminar las tuplas duplicadas Ejemplo SELECT DISTINCT apellido FROM empleados WHERE sueldo > 80000;

SELECT en una tabla Funciones escalares Los predicados pueden incluir funciones escalares built-in (predefinidas) o creadas por el usuario. Algunas son: +, -, *, /, abs, pow, length, substr, hex, locate, replace, add_months, to_char, nlv, coalesce (muchas dependen del RDBMS) Ejemplos: SELECT id, nombre, apellido, mail FROM empleados WHERE length(nombre) > 10; WHERE soundex(nombre) = soundex('maicol'); -- Sólo en DB2

SELECT en una tabla Funciones escalares Hay funciones para modificar los nulos, de forma de interpretarlos y presentarlos correctamente en un reporte Ejemplo: SELECT id, nombre, apellido, nvl(to_char(sueldo), 'no percibe sueldo') sueldo FROM empleados WHERE sueldo < 20000 or sueldo is null;

SELECT en una tabla ORDER BY No se puede asumir ningún orden, a menos que se explicite mediante la cláusula ORDER BY Ejemplos: SELECT sueldo, nombre, apellido, mail FROM empleados WHERE departamento = 3 ORDER BY sueldo DESC; SELECT apellido, nombre, telefono ORDER BY apellido, nombre;

SELECT en una tabla GROUP BY / Funciones de agregación La cláusula GROUP BY permite agrupar los datos que tengan valores iguales por algún conjunto de columnas Ejemplos: SELECT departamento, count(*) FROM empleados GROUP BY departamento ORDER BY departamento; SELECT departamento, min(sueldo)

SELECT en una tabla GROUP BY / Funciones de agregación Funciones de agregación: count, min, max, sum, avg (otras dependen del RDBMS) HAVING: Permite filtrar sobre los resultados de las funciones de agregación Ejemplo: departamentos y cantidad de empleados, de los departamentos que tengan al menos 10 empleados SELECT departamento, count(*) FROM empleados GROUP BY departamento HAVING count(*) >= 10;

Agenda Producto cartesiano Equi joins Outer joins SELECT en una tabla

Joins Producto cartesiano Basados en la idea de producto y división entre relaciones El producto cartesiano entre dos relaciones R1 x R2, es la combinación de todas las parejas (t1, t2) donde t1 es una tupla de R1 y t2 es una tupla de R2 Si R1 tiene cardinalidad N y R2 cardinalidad M el producto cartesiano R1 x R2 tendrá cardinalidad N x M ¿Qué obtenemos del producto cartesiano de una tabla de clientes con 2.000 tuplas y una tabla de teléfonos con 4.000 tuplas? ¿todas las tuplas nos interesan?

Joins Producto cartesiano SQL> select c.id, c.nombre, c.apellido, t.id_cliente, t.telefono 2 from clientes c, telefonos_cliente t; ID NOMBRE APELLIDO ID_CLIENTE TELEFONO ---------- ---------- ---------- ---------- ---------- 1 Juan Lopez 1 24002425 1 Juan Lopez 2 23087373 ? 1 Juan Lopez 2 44722020 2 Martin Garcia 1 24002425 2 Martin Garcia 2 23087373 2 Martin Garcia 2 44722020 SQL> select id, nombre, apellido 2 from clientes; ID NOMBRE APELLIDO ---------- ---------- ---------- 1 Juan Lopez 2 Martin Garcia SQL> select id_cliente, telefono 2 from telefonos_cliente; ID_CLIENTE TELEFONO ---------- ---------- 1 24002425 2 23087373 2 44722020

Joins Equi joins Nos interesan las tuplas donde matchea el valor de clientes.id con el de telefonos_cliente.id_cliente SQL> select c.id, c.nombre, c.apellido, t.id_cliente, t.telefono 2 from clientes c, telefonos_cliente t 3 where c.id = t.id_cliente; ID NOMBRE APELLIDO ID_CLIENTE TELEFONO ---------- ---------- ---------- ---------- ---------- 1 Juan Lopez 1 24002425 2 Martin Garcia 2 23087373 2 Martin Garcia 2 44722020 Ya que el ID se repite, podemos omitir una de las columnas, o incluso omitir las dos ya que es una surrogate key

Joins Equi joins Ejemplo: reporte de clientes y teléfonos SQL> break on cliente skip 1 -- Específico de Oracle SQL> select c.nombre||' '||c.apellido cliente, t.telefono 2 from clientes c, telefonos_cliente t 3 where c.id = t.id_cliente; CLIENTE TELEFONO --------------------- ---------- Juan Lopez 24002425 Martin Garcia 23087373 44722020

Joins Outer joins Motivación: ¿por qué faltan empleados en el reporte? SQL> select e.nombre, e.apellido, d.nom_departamento 2 from empleados e, departamentos d 3 where e.departamento = d.id_departamento; NOMBRE APELLIDO NOM_DEPARTAMENTO --------------- --------------- -------------------- Guzman Perez Administracion ... ... ... 15 rows selected. SQL> select count(*) from empleados; COUNT(*) ---------- 18

Joins Outer joins No hay un departamento con ID NULL en la tabla de departamentos, y aunque lo hubiera, NULL = NULL se evalúa como falso Podemos querer relajar el join para aceptar tuplas de una de las tablas aunque tengan valor NULL en alguna columna por la que se realiza el join En el caso anterior, querríamos las tuplas “de la izquierda”: Nombre Apellido Departamento ---------- ---------- ------------ Matías Pereyra <null>

Joins Outer joins El outer join permite hacer exactamente eso (left, nos da las columnas de la izquierda que no matchean): SQL> select e.nombre, e.apellido, d.nom_departamento 2 from empleados e left outer join departamentos d 3 on e.departamento = d.id_departamento; NOMBRE APELLIDO NOM_DEPARTAMENTO --------------- --------------- -------------------- Luis Rodriguez Administracion ... ... ... Luisa Herrera Investigacion Matias Pereyra Juana Garcia Jorge Lopez 18 rows selected.

Joins Outer joins Right, nos da las columnas de la derecha que no matchean: SQL> select e.nombre, e.apellido, d.nom_departamento 2 from empleados e right outer join departamentos d 3 on e.departamento = d.id_departamento; NOMBRE APELLIDO NOM_DEPARTAMENTO --------------- --------------- -------------------- Guzman Perez Administracion ... ... ... Emiliano Pereira Investigacion Astrid Brandner Investigacion Santiago Fontenla Investigacion Guillermo Eastman Investigacion Martin Beracochea Investigacion Sistemas 16 rows selected.

Joins Outer joins Left outer join nos introduce tuplas en el join, que sólo existen en la tabla de la izquierda Right outer join nos introduce tuplas en el join, que sólo existen en la tabla de la derecha Existe también el full outer join, que nos introduce en el join las tuplas que introduce el left y el right outer join (probarlo) Oracle tiene una sintaxis alternativa (pero propietaria) para especificar los outer joins en el predicado: where e.departamento(+) = d.id_departamento;

Joins Subconsultas El resultado de una consulta (result-set) se puede usar como subconsulta para predicar en otra Ejemplo: queremos los empleados de Ventas e Investigación SQL> select nombre, apellido 2 from empleados 3 where departamento in ( 4 select id_departamento 5 from departamentos 6 where nom_departamento in ('Ventas', 'Investigacion') 7 ); Usamos “in” porque el result-set es un conjunto …

Joins Subconsultas Si estamos seguros que el result-set es de cardinalidad 1, podemos usar “=“ Ejemplo: queremos los empleados de Ventas SQL> select nombre, apellido 2 from empleados 3 where departamento = ( 4 select id_departamento 5 from departamentos 6 where nom_departamento = 'Ventas' 7 ); NOMBRE APELLIDO --------------- --------------- Fernando Pereyra ... ...

Joins Subconsultas Si nos equivocamos, y el result-set es de cardinalidad > 1, obtendremos un error SQL> select nombre, apellido 2 from empleados 3 where departamento = ( 4 select id_departamento 5 from departamentos 6 ); select id_departamento * ERROR at line 4: ORA-01427: single-row subquery returns more than one row

Joins Operaciones de conjuntos Se pueden realizar las operaciones de conjuntos UNION, INTERSECT y MINUS, con sus variantes “ALL” SQL> select sysdate fecha from dual 2 union select sysdate fecha from dual; FECHA ---------- 23/05/2012 2 union all select sysdate fecha from dual;

Ejercicios Ejercicios Obtener los nombres y apellidos de los empleados que tendrán más de un año de antigüedad al 01/06/2012 Obtener los subtotales de sueldos de cada departamento y el total de sueldos, en la misma consulta Obtener el nombre de todos los empleados, con el nombre de su cargo y el nombre de su departamento

Ejercicios Nombres y apellidos de los empleados que tendrán más de un año de antigüedad al 01/06/2012 SQL> select nombre, apellido 2 from empleados 3 where add_months(fecha_ingreso, 12) 4 <= to_date('01/06/2012', 'dd/mm/yyyy'); NOMBRE APELLIDO --------------- --------------- Matias Pereyra ... ... Rodrigo Lemos Emiliano Pereira Astrid Brandner Santiago Fontenla Guillermo Eastman 14 rows selected.

Ejercicios Subtotales de sueldos de cada departamento y el total de sueldos, en la misma consulta SQL> select nvl(d.nom_departamento, 'Sin departamento') departamento, 2 sum(e.sueldo) sueldos 3 from empleados e left outer join departamentos d 4 on e.departamento = d.id_departamento 5 group by d.nom_departamento 6 union all 7 select 'Total', sum(sueldo) 8 from empleados; DEPARTAMENTO SUELDOS -------------------- ---------- Ventas 232000 Investigacion 547000 Sin departamento 100000 Administracion 232000 Total 1111000

Ejercicios Nombre de todos los empleados, con el nombre de su cargo y el nombre de su departamento SQL> select e.nombre, e.apellido, c.nom_cargo, d.nom_departamento 2 from (empleados e left outer join departamentos d 3 on e.departamento = d.id_departamento), cargos c 4 where e.cargo = c.id_cargo; NOMBRE APELLIDO NOM_CARGO NOM_DEPARTAMENTO --------------- ------------ ---------------------- ----------------- Rosana Nu??ez Administrativo senior Administracion ... ... ... ... Karina Garcia Subgerente Investigacion Luisa Herrera Gerente Investigacion Matias Pereyra Director Juana Garcia Socio Director Jorge Lopez Socio Director 18 rows selected.