Módulo IV: Consultas Básicas y Avanzadas

Documentos relacionados
Módulo IV: Consultas Básicas y Avanzadas

Recuperación de datos

Modificación de datos

Modificación de datos

Combinación de varias tablas

SQL Server FEMEPA SQL Server 2000

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACIÓN

Implementación de desencadenadores

SQL DML Select. Ges$ón y Modelación de Datos. María Constanza Pabón

Introducción 1 Recuperación de Datos mediante la Sentencia SQL SELECT

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLOGICOS ESCUELA DE COMPUTACION

MATERIAL INTRODUCTORIO ORACLE 11G

Insertar Datos en Tablas

Usando los operadores SET (Conjunto)

ÍNDICE. Introducción... Capítulo 1. Características, instalación, inicio y entorno de trabajo... 1

Manual de Sentencias Básicas en SQL

Implementación de funciones definidas por el usuario

Computación Web (Curso 2015/2016)

Clase 4: SQL DDL DML Consultas Simples y Multitablas. BASE DE DATOS FAC.DE INGENIERIA - UNJu

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLOGICOS ESCUELA DE COMPUTACION

Introducción a Transact-SQL

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

SQL SERVER SQL Server 2005 permite tres tipos de operaciones con conjuntos: UNION, disponible en todas las versiones de SQL Server.

ADMINISTRACION DE ORACLE 9i Guía de estudio (OCA) TEMA 1

Práctica A: Modificación de datos

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

Modelamiento y Gestión de Base de Datos

Oracle Fundamentos. Programa de Estudio.

SQL. Amparo López Gaona. México, D.F. Noviembre 2003

SQL: Lenguaje de Interrogación Estructurado

Práctica A: Implementación de la integridad de datos

Tema: Combinación de tablas

8 SQL SERVER 2008 RA-MA

Implementación de procedimientos almacenados

Tema: USO DE COMBINACIONES EXTERNAS.

ORACLE 10g. Descripción A QUIEN VA DIRIGIDO?

LENGUAJE DE MANIPULACIÓN DE DATOS

SQL SERVER Curso Teórico-Práctico

Procedimientos alm l a m cenados

Lenguaje de manipulación de datos

Tema: SUBCONSULTAS Y CREACION DE VISTAS.

ÍNDICE INTRODUCCIÓN...17

8 MICROSOFT SQL SERVER 2008 R2. CURSO PRÁCTICO RA-MA

Bases de Datos 1. Teórico: Structured Query Language

Manual Aprendiendo Practicando Oracle SQL (Spanish Edition) Click here if your download doesn"t start automatically

Restricción y Clasificación de los Datos. Copyright Oracle Corporation, All rights reserved.

A.1. Definiciones de datos en SQL

Modelamiento y Diseño de Base de Datos

Universidad Capitán General Gerardo Barrios. Facultad de Ciencia y Tecnología

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

SQL (Structured Query Language)

SQL: Consultas Avanzadas. Bases de Datos

SUBCONSULTAS SQL. Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta por cada fila de la consulta principal.

CC BASES DE DATOS PRIMAVERA Clase 7: SQL (II) Aidan Hogan

Programación con SQL Server

Tutorial MySql - 1 -

T07 Opciones de integridad referencial

Desarrollo Web en Entorno Servidor

Programación con SQL Server

Características del lenguaje SQL

UNIVERSIDAD NACIONAL DE CAJAMARCA MANUAL DE CONSULTAS SQL SERVER 2008 R2 CURSO: BASE DE DATOS I ING. APARICIO

Objetivos: Descripción del curso. Curso: Dirigido a: INTRODUCCIÓN A SQL - ORACLE UNIVERSIDAD NACIONAL DE INGENIERÍA

Un proyecto de IBM llamado Sistem/R construye un prototipo simple llamado SQUARE que después se transformó en SQL.

LENGUAJE SQL. En Mysql se utiliza un subconjunto de SQL (update, insert into, delete, select, truncate,etc).

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLOGICOS ESCUELA DE COMPUTACION

Data source name: Nombre por el que se conocerá la conexión ODBC y que será usado en los distintos clientes del driver ODBC.

Uso de SQL. "WHERE id = " + cuentas[i].getid() o bien ResulSet r =s.executequery("select nombre FROM alumno" + "WHERE id = " + cuentas[i].

Tema 7. Elaboración de consultas básicas de selección. Lenguajes de bases de datos. SQL básico 15/12/2011

Implementación de la integridad de datos

Implementación de funciones definidas por el usuario

Base de Datos Oracle 10g: Introducción a SQL Código: D Duración: 5 días (40 horas)

INTRODUCCIÓN A LAS BASES DE DATOS. L.I Gerardo Benavides Pérez

Capítulo 4. Realización de consultas

SQL (DML) Carlos A. Olarte Gestión y Modelación de SQL Datos (DML)

1. DML. Las consultas multitabla

ÍNDICE PRIMERA PARTE... 17

ÍNDICE. Introducción... XVII. Capítulo 1. Oracle 10g y el Grid Computing... 1

Consultas con combinaciones

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

SQL. Carlos A. Olarte BDI

Trabajo con Subconsultas

Consultas Complejas:

3ra. Parte. Bases de Datos Relacionales

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

SQL, Consultas. Son Importantes las Consultas? Cuál es el Resultado de SELECT? Andrés Moreno S.

UNIDAD 1.- PARTE 1 MANIPULACIÓN AVANZADA DE DATOS CON SQL. BASES DE DATOS PARA APLICACIONES. Xochitl Clemente Parra Armando Méndez Morales

Manual Buenas Prácticas Codificación SQL Server MANUAL DE REFERENCIA. v. 1.0

Introducción. Definición. Definición 17/12/2011. Unidad 7 Elaboración de consultas básicas de selección.

Práctica A: Trabajo con subconsultas

Anexo 3 COMPONENTES DE SQL SERVER. Los DDL (Data Definition Languaje) que permiten crear y definir nuevas

Crear BD en. Isis Bonet Cruz, PhD

Transcripción:

Módulo IV: Consultas Básicas y Avanzadas Ejecución de Consultas Básicas Consultas de Múltiples Tablas Técnicas Avanzadas Maximiliano Odstrcil - 1

Ejecución de Consultas Básicas Recuperación de Datos Formato de un ResultSet Modificación de Datos Maximiliano Odstrcil - 2

Recuperación de Datos Uso de la sentencia SELECT Especificación de columnas Uso de la cláusula WHERE Condiciones de búsqueda de WHERE Maximiliano Odstrcil - 3

Uso de la sentencia SELECT La sentencia SELECT se usa para recuperar los datos. SELECT [ALL DISTINCT] <lista_selección> FROM {<tabla_fuente>} [, n] WHERE <predicado_búsqueda> lista_selección: especifica las columnas a devolver. FROM: indica la tabla origen de los datos. WHERE: especifica las filas a devolver: Se puede restringir el número de filas usando operadores de comparación, cadenas y operadores lógicos. Maximiliano Odstrcil - 4

Especificación de columnas (1) La lista de selección contiene las columnas, expresiones, variables o constantes a listar. Consideraciones: La lista de selección devuelve los resultados en el orden listado. Los nombres de las columnas se separan con comas. El (*) devuelve todas las columnas (evitar su uso). Maximiliano Odstrcil - 5

Especificación de columnas (2) USE Northwind SELECT EmployeeID, LastName, FirstName, Title FROM Employees EmployeeID EmployeeID LastName LastName 1 Davolio Davolio 2 Fuller Fuller 3 Leverling Leverling 4 Peacock Peacock 5 Buchanan Buchanan 6 Suyama Suyama 7 King King 8 Callahan Callahan 9 Dodsworth Dodsworth FirstName FirstName Nancy Nancy Andrew Andrew Janet Janet Margaret Margaret Steven Steven Michael Michael Robert Robert Laura Laura Anne Anne Title Title Sales Sales Representative Representative Vice Vice President, President, Sales Sales Sales Sales Representative Representative Sales Sales Representative Representative Sales Sales Manager Manager Sales Sales Representative Representative Sales Sales Representative Representative Inside Inside Sales Sales Coordinator Coordinator Sales Sales Representative Representative Maximiliano Odstrcil - 6

Uso de la cláusula WHERE (1) Con la cláusula WHERE se pueden obtener filas específicas basadas en una condición de búsqueda (limita el número de filas devueltas por la sentencia SELECT). Sólo se devuelven las filas que cumplen con los criterios especificados en la cláusula. Maximiliano Odstrcil - 7

Uso de la cláusula WHERE (2) Consideraciones: Los datos char, nchar, varchar, nvarchar, text, datetime y smalldatetime van entre comillas simples (SQL Server). En lo posible se deben emplear condiciones de búsqueda positivas. Maximiliano Odstrcil - 8

Uso de la cláusula WHERE (3) USE Northwind SELECT EmployeeID, LastName, FirstName, Title FROM Employees WHERE EmployeeID = 5 EmployeeID LastName 5 Buchanan FirstName Steven Title Title Sales Manager Maximiliano Odstrcil - 9

Condiciones de búsqueda de WHERE En una cláusula WHERE se puede usar lo siguiente: Descripción Condición de Búsqueda Comparadores =, >, <, >=, <= y <> Comparadores de Cadena LIKE y NOT LIKE - % Operadores Lógicos AND, OR, NOT Rango de Valores BETWEEN y NOT BETWEEN Lista de Valores IN y NOT IN Valores desconocidos IS NOT e IS NOT NULL Maximiliano Odstrcil - 10

Comparadores Comparan columnas, expresiones, variables y constantes entre sí. Usar condiciones positivas (son más rápidas). SELECT LastName, City FROM Employees WHERE Country = 'USA' Maximiliano Odstrcil - 11 LastName Davolio Fuller Leverling Peacock Callahan City City Seattle Tacoma Kirkland Redmond Seattle

Comparadores de Cadena (1) Se puede usar el operador LIKE en combinación con caracteres especiales para seleccionar filas comparando cadenas de caracteres. Consideraciones: Todos los caracteres en el patrón son significantes, incluidos los espacios antes y después. LIKE puede ser usado con los tipos de datos char, nchar, varchar, nvarchar o datetime. Maximiliano Odstrcil - 12

Comparadores de Cadena (2) Caracteres especiales: Caracter Descripción % Cualquier cadena de 0 o más caracteres _ Cualquier caracter [] Cualquier caracter del conjunto [^] Cualquier caracter menos los del conjunto Maximiliano Odstrcil - 13

Comparadores de Cadena (3) Ejemplos: LIKE 'BR%': todos los nombres que empiecen con BR. LIKE '_er': palabras de tres letras terminadas en er. LIKE '[VB]%': palabras que empiecen en V o B. LIKE '[0-3][^0]': números que comiencen con 0,1,2 o 3 y cuyo segundo número no sea 0. Maximiliano Odstrcil - 14

Comparadores de Cadena (4) USE Northwind SELECT CompanyName FROM Customers WHERE CompanyName LIKE '%Restaurant%' CompanyName GROSELLA-Restaurante Lonesome Pine Pine Restaurant Tortuga Restaurante Maximiliano Odstrcil - 15

Operadores Lógicos Combinan expresiones. El orden de evaluación es NOT, AND y OR. Admiten paréntesis. SELECT ProductID, ProductName, SupplierID, UnitPrice FROM Products WHERE (ProductName LIKE 'T%' OR OR ProductID = 46) AND (UnitPrice > 16.00) ProductID ProductName SupplierID UnitPrice 14 14 Tofu Tofu 6 23.25 29 29 Thüringer Rostbratwurst 12 12 123.79 62 62 Tarte au au sucre 29 29 49.3 49.3 Maximiliano Odstrcil - 16

Rango de Valores (1) BETWEEN: se usa para devolver filas cuyos valores de búsqueda se encuentran dentro de un rango. Consideraciones: La inclusión de los valores de los extremos del intervalo depende del SGBDR. Es mejor usar BETWEEN que dos comparadores (<= y >=) Evitar el uso de NOT BETWEEN por su baja performance. Evitar el uso con valores de fecha ya que hay que tener en cuenta la hora (por defecto medianoche 00:00:00). Maximiliano Odstrcil - 17

Rango de Valores (2) USE Northwind SELECT ProductName, UnitPrice FROM Products WHERE UnitPrice BETWEEN 10 10 AND 20 20 Maximiliano Odstrcil - 18 ProductName UnitPrice Chai Chai 18 18 Chang 19 19 Aniseed Syrup 10 10 Genen Shouyu 15.5 15.5 Pavlova 17.45 Sir Sir Rodney s Scones 10 10............

Lista de Valores (1) La condición IN se utiliza para devolver filas cuyos valores de búsqueda pertenezcan a un conjunto dado. Consideraciones: Se pueden reemplazar por series de expresiones OR. No incluir el valor nulo en el conjunto (resultados inesperados). El uso de NOT IN disminuye la performance. Maximiliano Odstrcil - 19

Lista de Valores (2) USE Northwind SELECT CompanyName, Country FROM Suppliers WHERE Country IN IN ('Japan', 'Italy') CompanyName Tokyo Traders Mayumi s Formaggi Fortini s.r.l. s.r.l. Pasta Buttini s.r.l. s.r.l. Country Country Japan Japan Italy Italy Italy Italy Maximiliano Odstrcil - 20

Valores desconocidos (1) Una columna tiene el valor nulo si no se ingresó valor alguno. Un valor nulo no equivale a la cadena vacía ni a 0. Se usa IS NULL para devolver filas cuyos valores de búsqueda sean nulos. Maximiliano Odstrcil - 21

Valores desconocidos (2) Consideraciones: Los valores nulos hacen fallar a todas las comparaciones. Se define la posibilidad de agregar nulos en las columnas en la sentencia CREATE TABLE. Usar IS NOT NULL para devolver filas con valores conocidos. Maximiliano Odstrcil - 22

Valores desconocidos (3) USE Northwind SELECT CompanyName, Fax FROM Suppliers WHERE Fax IS IS NULL CompanyName Exotic Liquids New New Orleans Cajun Delights Tokyo Traders Cooperativa de de Quesos Las Las Cabras...... Fax Fax NULL NULL NULL NULL Maximiliano Odstrcil - 23

Formato de un ResultSet Orden de los Datos Eliminación de Duplicados Cambio de Nombres a las Columnas Uso de Constantes Maximiliano Odstrcil - 24

Orden de los Datos (1) La cláusula ORDER BY ordena las filas devueltas en orden ascendente (ASC) o descendente (DESC). Consideraciones: No se garantiza un orden determinado sin ORDER BY. Por defecto se ordena ascendentemente (ASC). Las columnas por las que se ordenan no necesitan aparecer en la lista de selección. Se puede ordenar por columnas o expresiones y referirse a las mismas por su número de orden en la lista de selección. Maximiliano Odstrcil - 25

Orden de los Datos (2) SELECT ProductID, ProductName, CategoryID, UnitPrice FROM Products ORDER BY BY CategoryID, UnitPrice DESC productid 38 38 43 43 2.... productname Cote de de Blaye Ipoh Ipoh Coffee Chang categoryid 1 1 1 unitprice 263.5 46 46 19 19.. 63 63 8 61 61...... Vegie-spread Northwoods Cranberry Sauce Sirop d'érable 2 2 2 2 2 2 43.9 43.9 40 40 28.5 28.5 Maximiliano Odstrcil - 26

Eliminación de Duplicados (1) La cláusula DISTINCT permite eliminar filas duplicadas. Consideraciones: La combinación de valores en la lista de selección es la que determina la desigualdad entre filas. Solo se muestra un elemento de todas las filas que tienen la misma combinación de valores de la lista de selección. DISTINCT no ordena, para ello se debe usar ORDER BY. Maximiliano Odstrcil - 27

Eliminación de Duplicados (2) USE Northwind SELECT DISTINCT Country FROM Suppliers ORDER BY BY Country Maximiliano Odstrcil - 28 Country Country Australia Brazil Canada Denmark Finland France Germany Italy Italy Japan Netherlands Norway Singapore Spain Sweden UK UK USA USA

Cambio de Nombres a las Columnas (1) La cláusula AS permite crear alias a las columnas de manera que resulten más legibles o bien den nombres a las expresiones. Consideraciones: Por defecto, se muestran los nombres de las columnas. Encerrar los alias entre comillas simples si incluyen espacios. Se pueden crear alias para expresiones. Se puede omitir la cláusula AS y dejar un espacio entre la expresión y el alias. Maximiliano Odstrcil - 29

Cambio de Nombres a las Columnas (2) USE Northwind SELECT FirstName AS AS First, LastName AS AS Last, EmployeeID AS AS 'Employee ID:' FROM Employees First First Nancy Nancy Andrew Andrew Janet Janet Margaret Margaret Steven Steven Michael Michael Robert Robert Laura Laura Anne Anne Last Last Davolio Davolio Fuller Fuller Leverling Leverling Peacock Peacock Buchanan Buchanan Suyama Suyama King King Callahan Callahan Dodsworth Dodsworth Employee Employee ID: ID: 1 2 3 4 5 6 7 8 9 Maximiliano Odstrcil - 30

Uso de Constantes Las constantes o literales son letras, números o símbolos. SELECT FirstName, LastName, 'Identification Number:', EmployeeID FROM Employees FirstName FirstName Nancy Nancy Andrew Andrew Janet Janet Margaret Margaret Steven Steven Michael Michael Robert Robert Laura Laura Anne Anne Maximiliano Odstrcil - 31 LastName LastName Davolio Davolio Fuller Fuller Leverling Leverling Peacock Peacock Buchanan Buchanan Suyama Suyama King King Callahan Callahan Dodsworth Dodsworth EmployeeID EmployeeID Identification Identification Number: Number: 1 Identification Identification Number: Number: 2 Identification Identification Number: Number: 3 Identification Identification Number: Number: 4 Identification Identification Number: Number: 5 Identification Identification Number: Number: 6 Identification Identification Number: Number: 7 Identification Identification Number: Number: 8 Identification Identification Number: Number: 9

Modificación de Datos Inserción de Filas Borrado de Filas Modificación de Filas Maximiliano Odstrcil - 32

Inserción de Filas (1) La sentencia INSERT agrega filas a una tabla. INSERT [INTO] tabla [(lista_columnas)] VALUES (lista_valores) DEFAULT VALUES Consideraciones: Usar la lista de columnas para forzar el orden de los valores. Especificar los datos a ingresar luego de la palabra VALUES. El orden y tipo de datos deben coincidir con los de la tabla. La sentencia INSERT falla si se violan las constraints o Reglas. Maximiliano Odstrcil - 33

Inserción de Filas (2) USE Northwind INSERT Customers (CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax) VALUES ('PECOF', 'Pecos Coffee Company', 'Michael Dunn', 'Owner', '1900 Oak Street', 'Vancouver', 'BC', 'V3F 2K1', 'Canada', '(604) 555-3392', '(604) 555-7293') Maximiliano Odstrcil - 34

Inserción de Filas (3) Cuando se insertan filas a una tabla, se pueden emplear las cláusulas DEFAULT o DEFAULT VALUES. Consideraciones sobre DEFAULT: Se inserta un valor nulo para aquellas columnas que no tienen definido un valor por efecto y admiten valores nulos. Si la columna no admite valores nulos ni tiene valor por defecto, la sentencia fallará. No se puede usar DEFAULT para columnas del tipo IDENTITY. INSERT Shippers (CompanyName, Phone) VALUES ('Kenya Coffee Co.', DEFAULT) Maximiliano Odstrcil - 35

Inserción de Filas (4) DEFAULT VALUES permite insertar toda una fila por defecto en la tabla. Consideraciones: En columnas con tipos de datos timestamp o propiedad IDENTITY, se inserta el siguiente valor apropiado. Se puede usar DEFAULT VALUES para generar datos de prueba y poblar tablas de manera sencilla. No disponible para MySQL. INSERT Clientes DEFAULT VALUES Maximiliano Odstrcil - 36

Inserción de Filas (5) Si la columna tiene valores por defecto o acepta valores nulos, se puede omitir el nombre en la sentencia INSERT. Consideraciones: Listar sólo los nombres de columnas para los cuales haya valores (no listar las columnas IDENTITY). Las columnas no nombradas adoptarán el valor por defecto. Especificar el valor nulo escribiendo NULL (sin comillas). Maximiliano Odstrcil - 37

Inserción de Filas (6) Agregando nuevos datos USE Northwind INSERT Shippers (CompanyName) VALUES ('Fitch & Mather') Verificando nuevos datos USE Northwind SELECT * FROM Shippers WHERE CompanyName = 'Fitch & Mather' Permite valores nulos ShipperID ShipperID 37 37 CompanyName CompanyName Fitch Fitch & Mather Mather Phone Phone NULL NULL Maximiliano Odstrcil - 38

Borrado de Filas (1) La sentencia DELETE: Borra una o más filas de una tabla. Se puede limitar las filas a borrar (WHERE). Cada fila borrada se registra en el RT como una transacción. SQL Server: DELETE Orders WHERE DATEDIFF(MONTH, GETDATE(), ShippedDate) >= >= 6 MySQL: DELETE FROM Orders WHERE DATEDIFF(CURDATE(), ShippedDate) / 30 30 >= >= 6; 6; Maximiliano Odstrcil - 39

Borrado de Filas (2) La sentencia TRUNCATE TABLE: Se usa para borrar todas las filas de una tabla, reteniendo su estructura y sus objetos asociados. Se ejecuta mucho más rápido que DELETE ya que no se registra en el Registro de Transacciones. Si la tabla tiene una columna IDENTITY, vuelve el valor de la semilla al valor inicial. TRUNCATE TABLE Orders Maximiliano Odstrcil - 40

Modificación de Filas (1) La sentencia UPDATE modifica los datos existentes de las filas de las tablas. UPDATE Products SET UnitPrice = (UnitPrice * 1.1) Maximiliano Odstrcil - 41

Modificación de Filas (2) Consideraciones: Las filas a modificar se especifican en la cláusula WHERE. Los valores nuevos se especifican con la cláusula SET. Los valores ingresados deben ser del mismo tipo de las columnas a modificar y no deben violar las constraints y Reglas. Se pueden cambiar los datos de una tabla a la vez. Se pueden usar expresiones basadas en columnas de la tabla u otras tablas, variables y constantes. Maximiliano Odstrcil - 42

Consultas de Múltiples Tablas Combinación de Múltiples Tablas Combinación de Varios Resultsets Creación de Tabla desde Resultset Maximiliano Odstrcil - 43

Combinación de Múltiples Tablas Introducción a Joins Uso de Inner Joins Uso de Outer Joins Uso de Cross Joins Joins de más de dos tablas Join de una tabla con sí misma Maximiliano Odstrcil - 44

Introducción a Joins (1) Se unen (join) tablas para producir un conjunto simple de resultados que incorpora filas de dos o más tablas. SELECT lista_selección FROM tabla1 [INNER LEFT RIGHT OUTER] JOIN tabla2 ON ON condición_join La cláusula JOIN especifica qué tablas son las que se unen y cómo se unen. La cláusula ON especifica las columnas en común que tienen las tablas. Maximiliano Odstrcil - 45

Introducción a Joins (2) Consideraciones: Especificar las condiciones del join basadas en las claves primarias y propagadas de las tablas. Si la tabla tiene una clave compuesta, se deben referenciar todas las columnas luego de la palabra ON. Si los nombres de las columnas son los mismos en las tablas, usar el formato nombre_tabla.nombre_columna. Limitar el número de tablas en un join ya que también aumenta el tiempo de proceso de la consulta. Maximiliano Odstrcil - 46

Uso de Inner Joins (1) Los Inner Joins combinan tablas comparando los valores en las columnas comunes a ambas tablas y devolviendo sólo las filas que cumplen con la condición. Consideraciones: Los inner joins son los joins por defecto (se puede omitir inner ) Especificar las columnas a listar en el ResultSet incluyéndolas en la lista de selección con los nombres cualificados. Si se incluye WHERE, se restringe el nº de filas devueltas. No usar el valor nulo como condición del join. No se garantiza un orden en el resultado (usar ORDER BY). Maximiliano Odstrcil - 47

Uso de Inner Joins (2) SELECT buyer_name, sales.buyer_id, qty qty FROM FROM Buyers INNER JOIN JOIN Sales ON ON Buyers.buyer_id = Sales.buyer_id Buyers buyer_name buyer_name buyer_id buyer_id Adam Adam Barr Barr 1 1 Sean Sean Chai Chai 2 2 Eva Eva Corets Corets 3 3 Erin Erin O Melia O Melia 4 4 Maximiliano Odstrcil - 48 Resultado buyer_name buyer_name buyer_id buyer_id qty qty Adam Adam Barr Barr Adam Adam Barr Barr Erin Erin O Melia O Melia Eva Eva Corets Corets 1 1 4 3 15 15 5 37 37 11 11 Erin Erin O Melia O Melia 4 1003 1003 Sales buyer_id buyer_id prod_id prod_id qty qty 1 1 4 3 2 3 1 5 15 15 5 37 37 11 11 4 2 1003 1003

Uso de Outer Joins (1) Los Left o Right Joins combinan filas desde dos tablas que satisfacen la condición del join más las filas de la tabla izquierda o derecha que no la satisfacen. Se usan para obtener los datos que están en una tabla adicionando los que están en la otra, si es que están. Consideraciones: A LEFT JOIN B = B RIGHT JOIN A No usar valores nulos en la condición del join. Usar los Outer Joins entre dos tablas preferentemente. Se puede abreviar omitiendo la palabra Outer. Maximiliano Odstrcil - 49

Uso de Outer Joins (2) Buyers buyer_name buyer_name Adam Adam Barr Barr Sean Sean Chai Chai Eva Eva Corets Corets Erin Erin O Melia O Melia Maximiliano Odstrcil - 50 SELECT buyer_name, sales.buyer_id, qty qty FROM FROM Buyers LEFT LEFT OUTER JOIN JOIN Sales ON ON Buyers.buyer_id = Sales.buyer_id Sales buyer_id buyer_id buyer_id buyer_id prod_id prod_id qty qty 1 2 3 1 1 4 2 3 1 15 15 5 37 37 4 3 5 11 11 Resultado 4 2 1003 1003 buyer_name buyer_name buyer_id buyer_id qty qty Adam Adam Barr Barr 1 15 15 Adam Adam Barr Barr 1 5 Erin Erin O Melia O Melia 4 37 37 Eva Eva Corets Corets 3 11 11 Erin Erin O Melia O Melia 4 1003 1003 Sean Sean Chai Chai NULL NULL NULL NULL

Uso de Cross Joins (1) Los Cross Joins realizan el producto cartesiano de dos tablas (no requieren columnas en común). Consideraciones: Son raramente usados en una BD normalizada, aunque se los utiliza para poblar rápidamente tablas para pruebas. Cardinalidad(A Cross Join B) = Cardinalidad(A) *Cardinalidad(B) Maximiliano Odstrcil - 51

Uso de Cross Joins (2) Buyers SELECT buyer_name, qty qty FROM FROM Buyers CROSS JOIN JOIN Sales Sales Resultado buyer_id buyer_id buyer_name buyer_name 1 Adam Adam Barr Barr 2 Sean Sean Chai Chai 3 Eva Eva Corets Corets 4 Erin Erin O Melia O Melia Maximiliano Odstrcil - 52 buyer_id buyer_id prod_id prod_id qty qty 1 1 1 1 4 4 3 3 2 3 1 5 15 15 5 37 37 11 11 44 2 1003 1003 buyer_name buyer_name Adam Adam Barr Barr Adam Adam Barr Barr Adam Adam Barr Barr Adam Adam Barr Barr qty qty 15 15 5 37 37 11 11 Adam Adam Barr Barr 1003 1003 Sean Sean Chai Chai 15 15 Sean Sean Chai Chai 5 Sean Sean Chai Chai 37 37 Sean Sean Chai Chai 11 11 Sean Sean Chai Chai 1003 1003 Eva Eva Corets Corets 15 15 Eva Eva Corets Corets 5............

Joins de más de dos tablas (1) Es posible unir más de dos tablas, ya que cada tabla en un join tiene alguna columna en común con otra tabla. Consideraciones: A join B join C = (A join B) join C = D join C, con D = A join B. Se deben tener tablas relacionadas con claves foráneas. Se deben considerar las claves compuestas en los joins. Se puede incluir una cláusula WHERE para limitar las filas. El número de cláusulas joins es siempre uno menor al número de tablas participantes. Los joins son conmutativos. Maximiliano Odstrcil - 53

Joins de más de dos tablas (2) SELECT buyer_name, prod_name, qty qty FROM FROM Buyers JOIN JOIN Sales ON ON Buyers.buyer_id = Sales.buyer_id JOIN JOIN Produce ON ON Sales.prod_id = Produce.prod_id Buyers Sales buyer_id buyer_id buyer_name buyer_name buyer_id buyer_id prod_id prod_id qty qty 1 Adam Adam Barr Barr 1 2 15 15 2 Sean Sean Chai Chai 1 3 5 3 Eva Eva Corets Corets 34 1 37 37 4 Erin Erin O Melia O Melia 43 5 11 11 Resultado 24 2 1003 1003 buyer_name buyer_name prod_name prod_name qty qty Erin Erin O Melia O Melia Apples Apples 37 37 Adam Adam Barr Barr Pears Pears 15 15 Erin Erin O Melia O Melia Pears Pears 1003 1003 Adam Adam Barr Barr Oranges Oranges 5 Eva Eva Corets Corets Peaches Peaches 11 11 Maximiliano Odstrcil - 54 Produce prod_id prod_id prod_name prod_name 1 1 Apples Apples 2 2 Pears Pears 3 3 Oranges Oranges 4 4 Bananas Bananas 5 5 Peaches Peaches

Join de una tabla con sí misma (1) Se realiza para encontrar filas que tengan valores en común con otras filas de la misma tabla. Consideraciones: Hay que especificar alias de la tabla para referenciar dos copias de la misma tabla (se las trata como dos tablas separadas). Cuando se generan las filas, al cumplir las condiciones del ON dos veces, se generan repetidas. Se soluciona aplicando en el WHERE una condición de desigualdad para eliminarlas. Maximiliano Odstrcil - 55

Join de una tabla con sí misma (2) Sales a buyer_id buyer_id prod_id prod_id qty qty 1 1 4 3 2 3 1 5 15 15 5 37 37 11 11 4 2 1003 1003 SELECT a.buyer_id AS AS buyer1, a.prod_id, b.buyer_id AS AS buyer2 FROM FROM Sales a JOIN JOIN Sales b ON ON a.prod_id = b.prod_id WHERE a.buyer_id > b.buyer_id buyer1 buyer1 4 Resultado prod_id prod_id buyer2 buyer2 2 1 Sales b buyer_id buyer_id prod_id prod_id qty qty 1 1 4 3 2 3 1 5 15 15 5 37 37 11 11 4 2 1003 1003 Maximiliano Odstrcil - 56

Combinación de Varios ResultSets (1) El operador UNION combina los resultados de dos o más sentencias SELECT en un solo ResultSet. sentencia_select UNION [ALL] sentencia_select... Se lo usa cuando los datos residen en diferentes ubicaciones y no pueden ser accedidos en una sola consulta. Maximiliano Odstrcil - 57

Combinación de Varios ResultSets (2) SQL Server: MySQL: Maximiliano Odstrcil - 58

Combinación de Varios ResultSets (3) Consideraciones: Los resultados deben tener el mismo tipo de datos, número y orden de columnas en la lista de selección. Automáticamente se remueven las filas duplicadas, a menos que se emplee la cláusula ALL. El resultado se devuelve en cualquier orden. Para que salga ordenado se debe emplear ORDER BY. Maximiliano Odstrcil - 59

Creación de Tabla desde Resultset (1) Se puede crear una nueva tabla en base al resultado de una consulta mediante la sentencia SELECT INTO (SQL Server) o CREATE SELECT (MySQL). Nueva tabla en base a una consulta (SQL Server): SELECT ProductName AS AS Products, UnitPrice AS AS Price INTO PriceTable FROM Products Nueva tabla en base a una consulta (MySQL): CREATE TABLE PriceTable SELECT ProductName, UnitPrice FROM Products; Maximiliano Odstrcil - 60

Creación de Tabla desde Resultset (2) Consideraciones: Siempre se crea una tabla y se inserta el Resultset en la misma. Todas las columnas deben tener nombre (usar alias). En SQL Server se debe tener el permiso select into/bulk copy. Al crear la tabla se puede especificar que la misma sea temporaria. Una tabla temporaria brinda un espacio de trabajo para resultados intermedios. Maximiliano Odstrcil - 61

Creación de Tabla desde Resultset (3) En SQL Server se pueden tener tablas temporales: Locales (#): el espacio que ocupan es liberado cuando se termina la sesión que las creó. Globales (##): el espacio que ocupan es liberado cuando termina la última sesión abierta en el servidor. En el caso de MySQL, las tablas temporales sólo pueden ser locales. Maximiliano Odstrcil - 62

Creación de Tabla desde Resultset (4) Tabla temporal en base a una consulta (SQL Server): SELECT ProductName AS AS Products, UnitPrice AS AS Price INTO #PriceTable FROM Products Tabla temporal en base a una consulta (MySQL): CREATE TEMPORARY TABLE PriceTable SELECT ProductName, UnitPrice FROM Products; Maximiliano Odstrcil - 63

Técnicas Avanzadas EXISTS y NOT EXISTS Modificación de Datos Maximiliano Odstrcil - 64

EXISTS y NOT EXISTS (1) Definiciones: Subconsulta: consulta anidada dentro de otra. Subconsulta correlacionada: subconsulta que utiliza los valores de la consulta externa. La subconsulta se evalúa una vez por cada fila procesada por la consulta externa. Maximiliano Odstrcil - 65

EXISTS y NOT EXISTS (2) Se pueden usar las cláusulas EXISTS y NOT EXISTS para determinar la existencia de filas. Formato: [NOT] EXISTS subconsulta Ejemplo: SELECT LastName, EmployeeID FROM FROM Employees e WHERE WHERE EXISTS (SELECT * FROM FROM Orders WHERE WHERE e.employeeid = Orders.EmployeeID AND AND OrderDate = '9/5/97') Maximiliano Odstrcil - 66

EXISTS y NOT EXISTS (3) Consideraciones: Devuelven un valor TRUE o FALSE basado en la existencia. La consulta externa prueba la existencia de filas que la subconsulta interna retorna (no produce datos). Maximiliano Odstrcil - 67

Modificación de Datos Uso de la sentencia INSERT..SELECT Borrado de filas basadas en otras tablas Modificación de filas basadas en otras tablas Maximiliano Odstrcil - 68

Uso de la sentencia INSERT..SELECT (1) Para agregar filas a una tabla existente, se pueden emplear las sentencias INSERT... SELECT: INSERT Customers SELECT SUBSTRING(FirstName, 1, 1, 3) 3) + SUBSTRING(LastName, 1, 1, 2), 2), LastName, FirstName, Title, NULL NULL FROM FROM Employees INSERT Customers SELECT CONCAT(SUBSTRING(FirstName,1,3),SUBSTRING(LastName,1,2)), LastName,FirstName,Title,NULL,NULL,NULL,NULL,NULL,NULL,NULL FROM FROM Employees; Maximiliano Odstrcil - 69

Uso de la sentencia INSERT..SELECT (2) Se puede insertar el resultado de una consulta, por más compleja que ésta sea. Consideraciones: Se agregan todas las filas que satisfacen la condición del SELECT. Las columnas de la tabla destino deben tener tipos de datos compatibles a la lista de selección. Se debe determinar la existencia de valores por defecto o valores nulos en caso de omitir alguna columna. Siempre se agregan filas a una tabla solamente. Maximiliano Odstrcil - 70

Borrado de filas basadas en otras tablas (1) Para borrar filas basadas en datos almacenados en otras tablas, se puede usar DELETE con joins o subconsultas: SQL Server: DELETE FROM FROM [Order Details] FROM FROM Orders o JOIN JOIN [Order Details] od od ON ON o.orderid = od.orderid WHERE WHERE OrderDdate = '4/14/1998' Maximiliano Odstrcil - 71

Borrando filas basadas en otras tablas (2) Si se emplea una subconsulta: SQL Server: DELETE FROM FROM [Order Details] WHERE WHERE OrderID IN IN (SELECT OrderID FROM FROM Orders WHERE WHERE OrderDate = '4/14/1998') MySQL: DELETE FROM FROM `Order Details` WHERE WHERE OrderID IN IN (SELECT OrderID FROM FROM Orders Orders WHERE WHERE OrderDate = '1998/4/14'); Maximiliano Odstrcil - 72

Modific. de filas basadas en otras tablas (1) Para modificar filas basadas en datos almacenados en otras tablas, se puede usar UPDATE con joins o subconsultas. UPDATE Products SET SET UnitPrice = UnitPrice + 2 FROM FROM Products JOIN JOIN Suppliers ON ON Products.SupplierID = Suppliers.SupplierID WHERE WHERE Suppliers.Country = 'USA' 'USA' Consideraciones: Nunca se modifica la misma fila dos veces en una sentencia UPDATE. Esta restricción permite el ahorro de mucho tiempo. Usar la cláusula FROM en la sentencia UPDATE. Maximiliano Odstrcil - 73

Modificando filas basadas en otras tablas (2) UPDATE Products SET SET UnitPrice = UnitPrice + 2 WHERE WHERE SupplierID IN IN (SELECT SupplierID FROM FROM Suppliers WHERE WHERE Country = 'USA') Consideraciones: La subconsulta se ejecuta una vez para cada fila que va a ser modificada. La subconsulta retorna un único valor. Si la subconsulta no puede retornar un único valor, se pueden usar las cláusulas: IN, EXISTS, ANY y ALL. Considerar el uso de funciones agregadas con subconsultas correlacionadas ya que nunca se calculan los valores 2 veces. Maximiliano Odstrcil - 74