Sq Lv1a

3,343 views

Published on

Curso de SQL

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,343
On SlideShare
0
From Embeds
0
Number of Embeds
1,264
Actions
Shares
0
Downloads
35
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Hoy dia existen diversos manejadores de bases de datos relacionales como Oracle, Informix, Sybase, Ingres, PostgreSQL, Progress, SQLServer.
  • En un sistema de ventas un Cliente tiene varios Pedidos.
  • En el entorno de un sistema de control escolar, cuales serían las entidades ?
  • Un cliente tiene varios pedidos. Un alumno cursa varias materias. Un empleado atiende a múltiples clientes. Un profesor imparte varios cursos
  • Cuales serían los atributos de la entidad Alumno ?
  • El código de barras es un atributo identificador para la entidad Productos. El ISBN es un atributo identificador para la entidad Libros.
  • Las entidades son: Employees - Empleados Customers - Clientes Orders - Pedidos Products - Productos Suppliers - Proveedores Shippers - Distribuidores Order_Details - Detalle de pedidos Categories - Tipos de producto
  • Las entidades son: Stores - Tiendas Sales - Ventas Titles - Libros Authors - Autores Employee - Empleados Jobs - Tipo de trabajo o actividad Discounts - Descuentos TitleAuthor - Titulos por autor Roysched - Control de inventario
  • Los modelos son importantes para realizar consultas. Un buen esquema gráfico responde a cuestiones como; Que tablas necesitamos para crear una lista de todos los jugadores que han anotado más de 15 goles en las últimas dos temporadas ?
  • Identifique las llaves primarias y foráneas de los esquemas de ventas y distribución de libros.
  • Que concepto asegura el requisito de unicidad de una entidad ?
  • Para producir un diseño de una base de datos se tiene que comenzar con tablas sin normalizar y a través de una serie de pasos descomponer la estructura de datos hasta desarrollar el esquema final.
  • Una consecuencia negativa de la normalización es la ineficacia de la recupearación debido a una descomposición excesiva.
  • Un manejador de base de datos hace posible la definición física de un modelo lógico. Un manejador de base de datos relacional RDBMS es un sistema de software que administra la manera en que se almacenan y recuperan los datos.
  • Un manejador de base de datos debe conservar la integridad de la base de datos.
  • Entre las múltiples herramientas de un RDBMS está el SQL.
  • Para la creación de la base de datos existen muchas herramientas gráficas. La herramienta de dibujo Visio es flexible, rápida y facil de utilizar. ERwin es otra herramienta de diseño gráfico con soporte para múltiples bases de datos.
  • Los tipos de datos pueden ser: Char, Money, Real, Decimal, Int, Date/Time y Especiales Las e specificaciones NOT NULL, DEFAULT y CHECK definen lo que deberá hacerse cuando se inserte un registro a la tabla y se asignen los valores a los campos . NOT NULL obliga a que el campo tenga un valor. DEFAULT define el valor que será asignado por omisión en la asignación. CHECK define el rango de valores que aceptará el campo. Los tipos de datos y las especificaciones NOT NULL, DEFAULT y CHECK c onforman la integridad semántica.
  • Nombre del índice OrderID_Ind. Clave de ordenamiento OrderID. Tabla dereferencia Order_Details.
  • La llave primaria de la tabla Order_Details se construye con los campos O r derID y ProductID. La definición de la llave primaria asegura el requisito de unicidad para cada registro de la tabla (integridad de la entidad). Los campos OrderID y ProductID de la tabla Order_Details solo aceptarán valores que exístan dentro de las tablas Orders y Products (integridad referencial).
  • Para SQL Server INTO va después de SELECT y crea una tabla permanente. Para Informix INTO TEMP va al final y la tabla es temporal.
  • El símbolo * devuelve todos los campos encontrados en la tabla especificada. Recuperar todos los campos de la tabla puede ser poco eficaz en tablas con demasiadas columnas.
  • COUNT(*) es una función de agregación que cuenta todos los registros de la tabla de Clientes. Lo claúsula AS cambia el nombre del campo en la consulta.
  • El resultado muestra que existen varios clientes por país, 3 en Argentina, 2 en Austria, 2 en Belgium, etc. Como saber en cuantos paises distintos se tienen clientes ?
  • En una consulta, la claúsula DISTINCT suprime los registros duplicados. Es valido
  • LIKE equivale a coincide con . El carácter comodin % indica una coincidencia parcial. La consulta recupera todos los clientes cuya ciudad inicie con los caracteres “México”. Otros operadores son: < Menor que, <= Menor o igual que, > Mayor que, >= Mayor o igual que, = Igual que, <> No igual que. BETWEEN - Dentro de un intervalo de valores IN - Contenido dentro de una lista de valores
  • Es posible emplear expresiones y/o funciones en las consultas. FirstName + " " + LastName es una expresión que concatena dos campos del tipo caracter. YEAR(HireDate) es una función que se aplica solo a campos del tipo fecha.
  • La claúsula WHERE puede tener mas de una condición. Si deseamos los pedidos que fueron enviados despues de la fecha de requerimiento en los años 1997 y 1998 la condición queda WHERE ShippedDate > RequiredDate AND (YEAR(OrderDate)=1997 OR YEAR(OrderDate)=1998)
  • Es posible emplear NOT BETWEEN.
  • Otras funciones de agregación son: SUM Suma MIN Valor mínimo MAX Valor máximo AVG Promedio
  • SUM() y AVG() actúan sobre todos los registros de la tabla de detalle de pedidos que cumplan con la condición ProductId = 15 . Es posible ordenar por un campo que no este dentro de la consulta pero que sea parte de la tabla.
  • Ordenar es una forma de agrupar y acercarse al resultado. Se tienen 2 proveedores en Australia, 1 en Brazil, 2 en Canada, ......, 3 en France, 3 en Germany,........
  • Las consultas de grupo resumen los datos en función de uno o más campos comúnes. Se agrupan los registros en función del campo Country y la función COUNT() cuenta los registros que fueron agrupados por ese campo.
  • La claúsula HAVING es equivalente a la claúsula WHERE para consultas agrupadas.
  • Cual es el resultado con COUNT(Price) ? Por que ?
  • Las funciones de agregación no se limitan simplemente a contar o acumular valores. Es posible realizar operaciones dentro de ellas.
  • Es posible emplear HAVING SUM(Quantity) BETWEEN 500 AND 700 HAVING SUM(Quantity) BETWEEN 500 AND 700 AND SUM(Quantity * UnitPrice) > 10000.00
  • Es importante evitar este tipo de consultas pues solicitan demasiados recursos al RDBMS.
  • Se asegura la relación entre las tablas con la claúsula WHERE S.OrderId = D.OrderId Si no se emplean los alias S y D la sintaxis alternativa es: WHERE Orders.OrderId = Order_Details.OrderId Solo se antepone el nombre de la tabla o el alias cuando el nombre de algún campo se repite en ambas tablas.
  • Agrupando por cliente se tienen los resultados.
  • En la clausula HAVING, el total de descuento es: SUM(UnitPrice * Quantity * Discount) Y el 10% del total de venta es: SUM(UnitPrice * Quantity) * 0.10
  • Ordenar es una forma de agrupar y acercarse al resultado.
  • Observando los datos de la consulta anterior 213-46-8915 BU1032 6871 5 213-46-8915 BU1032 423LL930 10 213-46-8915 BU2075 X999 35 Al agrupar por los campos Au_id y Title_id queda 213-46-8915 BU1032 15 213-46-8915 BU2075 35
  • Observando los datos de la consulta anterior 213-46-8915 BU1032 15 213-46-8915 BU2075 35 Al agrupar por el campos Au_id queda 213-46-8915 50
  • En algunos RDBMS las tablas temporales o generadas por la sentencia INTO subsisten mientras dure la sesión activa. No son vistas por otros usuarios.
  • Se unen tres tablas, las relaciones entre ellas son: Por Titulo s.Title_id = t.Title_id y por Almacén o.Stor_id = s.Stor_id Dejar una tabla si relación con las otras, provoca un producto cartesiano.
  • Que sucede si: b.ReportsTo=a.Employeeid
  • La solución puede incluir tablas temporales.
  • Tips: Que número de proveedor es “ Gai pâturage” ? Que productos distribuye ?
  • En el primer caso se deben asignar valores para cada campo de la tabla en el orden en que fueron definidos. La segunda forma es más flexible, permite especificar algunos campos en cualquier orden y sus respectivos valores.
  • OrderId es un campo númerico del tipo autoincremento (IDENTITY para SQL Server y SERIAL para Informix). El RDBMS genera el siguiente valor que corresponde al campo OrderId. Una nueva inserción generará el pedido 11080. GETDATE() es una función disponible en SQL Server para obtener la fecha y hora del sistema. Los campos sin asignación toman el valor NULL o el valor por omisión (DEFAULT).
  • INSERT statement conflicted with COLUMN CHECK constraint 'CK_Quantity'. The conflict occurred in database 'Northwind', table 'Order_Details', column 'Quantity'. INSERT statement conflicted with TABLE CHECK constraint 'CK_Discount'. The conflict occurred in database 'Northwind', table 'Order Details'. Inserta un nuevo registro con los cvalores 11079, 73, 0, 1, 0.
  • Si no se especifia la clausula WHERE todos los registros de la tabla serán actualizados. La segunda forma no es valida para SQL Server.
  • Es importante conocer el tipo de dato de cada campo (columna).
  • Si no se especifia la clausula WHERE todos los registros de la tabla serán borrados.
  • Es importante conocer de antemano cuantos registros serán borrados.
  • EL RDBMS prohíbe cualquier operación que pudiera romper la integridad referencial. DELETE statement conflicted with COLUMN REFERENCE constraint 'FK_Order_Details_Orders'. The conflict occurred in database 'Northwind', table 'Order Details', column 'OrderID'.
  • La cláusula: WHERE Quantity IS NULL Solo presenta los registros donde no hay valor para Quantity (no se encontraron registros). Para Informix la sintaxis es: SELECT S.OrderId, Quantity, UnitPrice, Discount FROM Orders S, OUTER (Order_Details) D WHERE S.OrderId = D.OrderId AND Quantity IS NULL ORDER BY S.OrderId
  • Por omisión, la consulta es INNER JOIN. Esto es, solo trae los proveedores que tengan productos en la tabla Products. FROM Suppliers INNER JOIN Products ON (Suppliers.SupplierID = Products.SupplierID) Para OUTER JOIN, tenemos: FROM Suppliers FULL | LEFT | RIGHT OUTER JOIN Products ON (Suppliers.SupplierID = Products.SupplierID) Y para un producto cartesiano: FROM Suppliers CROSS JOIN Products
  • En un INNER JOIN los clientes “FISSA” y “PARIS” no son parte del resultado de la consulta. FULL OUTER JOIN especifica que los registros de la tabla de la izquierda “Customers” y derecha “Orders” que no reunan la condicion del JOIN son incluidos en el conjunto de resultados. LEFT OUTER JOIN especifica que todos los registros de la tabla izquierda “Customers” que no reunan la condición del JOIN son incluidos en el conjunto de resultados. RIGHT OUTER JOIN especifica que todos los registros de la tabla derecha “Orders” que no reunan la condición del JOIN son incluidos en el conjunto de resultados.
  • La cláusula WHERE T.pub_id IS NULL OR P.pub_id IS NULL Elimina todos los libros que corresponden a cada editor. Los siguientes cambios devuelven: FROM Publishers P LEFT OUTER JOIN Titles T - El mismo resultado FROM Publishers P RIGHT OUTER JOIN Titles T - No devuelve registros FROM Titles T LEFT OUTER JOIN Publishers P - No devuelve registros FROM Titles T RIGHT OUTER JOIN Publishers P - El mismo resultado Por que ?
  • Solo presenta los editores que tienen libros y ventas.
  • Solo presenta los editores que tienen libros y ventas.
  • Presenta el total de editores.
  • Ejemplo de “Subquery” en la claúsula “WHERE”. El “Subquery” debe regresar exactamente una columna.
  • Ejemplo se “Subqueries” anidados. Es posible obtener el mismo resultado con una consulta diferente ?
  • Como eliminar los duplicados ?
  • Como eliminar los duplicados ?
  • Sq Lv1a

    1. 1. <ul><li>Es una colección de datos relacionados que pueden servir para múltiples propósitos y soportar múltiples usuarios </li></ul>Base de datos
    2. 2. Tipos de bases de datos <ul><li>Jerárquica </li></ul><ul><li>Red </li></ul><ul><li>Relacional </li></ul>
    3. 3. Modelo de datos <ul><li>Es una representación lógica que define las unidades de datos y especifica como cada unidad de datos se relaciona con las otras </li></ul>
    4. 4. Modelo entidad relación E-R <ul><li>Modelo de datos basicamente representado por los objetos </li></ul><ul><ul><li>Entidad </li></ul></ul><ul><ul><li>Relación (Vínculo) </li></ul></ul><ul><ul><li>Atributo </li></ul></ul>
    5. 5. Entidad <ul><li>Son objetos concretos o abstractos que presentan interés para el sistema y sobre los que se recoge información. Por ejemplo, clientes proveedores y facturas serían entidades en el entorno de una empresa </li></ul>
    6. 6. Relación <ul><li>Representa una asociacion entre dos entidades </li></ul><ul><li>Un verbo o una preposición que asocia dos entidades usualmente implica una relación </li></ul>
    7. 7. Atributo <ul><li>Es una unidad básica e indivisible de información acerca de una entidad. Por ejemplo la entidad proveedor tendrá los atributos nombre, domicilio, población </li></ul>
    8. 8. Tipos de atributo <ul><li>Identificador (Llave) </li></ul><ul><ul><li>Describe una característica única de la entidad </li></ul></ul><ul><li>Descriptor </li></ul><ul><ul><li>Describe una característica no única de la entidad </li></ul></ul>
    9. 9. Modelos ejemplo <ul><li>Modelo E-R de un sistema de Ventas </li></ul>
    10. 10. Modelos ejemplo <ul><li>Modelo E-R de un sistema de distribución de libros </li></ul>
    11. 12. Otros conceptos <ul><li>Llave primaria (PK) </li></ul><ul><ul><li>Es un atributo o combinación de atributos que identifican en forma única una instancia de la entidad </li></ul></ul><ul><li>Llave foránea (FK) </li></ul><ul><ul><li>Es un atributo que hace referencia a una llave primaria de otra entidad </li></ul></ul><ul><ul><li>Es un atributo o combinación de atributos usados para establecer una relacion entre dos entidades </li></ul></ul>
    12. 13. Otros conceptos <ul><li>Valores nulos </li></ul><ul><ul><li>Valor desconocido o ausencia de valor </li></ul></ul><ul><ul><li>No es lo mismo que blancos o ceros </li></ul></ul><ul><li>Requisito de unicidad (Unique) </li></ul><ul><ul><li>Este requisito señala que dos instancias de la misma entidad no deben tener el mismo valor </li></ul></ul>
    13. 14. Normalización <ul><li>Es la aplicación de un conjunto de normas que ayudan a optimizar la estructura de una base de datos </li></ul><ul><li>Las normas se aplican para asociar entidades y atributos de manera óptima </li></ul>
    14. 15. Beneficios de la normalización <ul><li>Da flexibilidad a la base de datos </li></ul><ul><li>Reduce la redundancia de los datos </li></ul><ul><li>Asegura que los atributos son colocados en la entidad apropiada </li></ul>
    15. 16. Modelo lógico y físico <ul><li>Modelo ER </li></ul><ul><li>Entidades </li></ul><ul><li>Atributos </li></ul><ul><li>Relaciones </li></ul><ul><li>Instancia de la Entidad </li></ul><ul><li>Esquema de base de datos </li></ul><ul><li>Tablas </li></ul><ul><li>Columnas (campos) </li></ul><ul><li>Llaves primarias y foráneas </li></ul><ul><li>Renglón (registro) </li></ul>
    16. 17. Integridad de la base de datos <ul><li>Integridad referencial </li></ul><ul><ul><li>Asegura las relaciones entre las tablas </li></ul></ul><ul><li>Integridad de la entidad </li></ul><ul><ul><li>Asegura el requisito de unicidad para cada renglón basado en la llave primaria especificada </li></ul></ul><ul><li>Integridad semántica </li></ul><ul><ul><li>Asegura que los datos de cada renglón reflejen un valor permitido para dicho renglon </li></ul></ul><ul><ul><li>Asegura que se almacenen los valores permitidos para cada tipo de dato definido </li></ul></ul>
    17. 18. Lenguaje SQL <ul><li>Es un lenguaje estándar que normalmente se emplea para crear, administrar y usar una base de datos </li></ul><ul><li>Sus instrucciones se dividen en dos categorías </li></ul><ul><ul><li>Las instrucciones DDL (Definición de datos), empleadas para crear la base de datos </li></ul></ul><ul><ul><li>Las instrucciones DML (Manipulación de datos), usadas para consultar, agregar, modificar o borrar datos </li></ul></ul>
    18. 19. Creación de la base de datos <ul><li>Sentencia CREATE DATABASE </li></ul><ul><ul><li>CREATE DATABASE Sales </li></ul></ul>
    19. 20. Creación de tablas <ul><li>Sentencia CREATE TABLE </li></ul><ul><ul><li>CREATE TABLE Order_Details ( </li></ul></ul><ul><ul><li>Order ID int NOT NULL, </li></ul></ul><ul><ul><li>ProductID int NOT NULL, </li></ul></ul><ul><ul><li>Unit Pr ice money NOT NULL DEFAULT 0 </li></ul></ul><ul><ul><li>CHECK ([ UnitPrice ] >= 0), </li></ul></ul><ul><ul><li>Quantity smallint NOT NULL DEFAULT 1 </li></ul></ul><ul><ul><li>CHECK ([ Quantity ] > 0), </li></ul></ul><ul><ul><li>D iscount real NOT NULL DEFAULT 0, </li></ul></ul><ul><ul><li>CHECK ([D iscount ] >= 0 and [D iscount ] <= 1) </li></ul></ul><ul><ul><li>) </li></ul></ul>
    20. 21. Creación de índices <ul><li>Sentencia CREATE INDEX </li></ul><ul><ul><li>CREATE INDEX Order ID _Ind ON Order_Details </li></ul></ul><ul><ul><li>( </li></ul></ul><ul><ul><li>Order ID </li></ul></ul><ul><ul><li>) </li></ul></ul>
    21. 22. Creación de llaves y relaciones <ul><li>Sentencia ALTER TABLE </li></ul><ul><ul><li>ALTER TABLE Order_Details </li></ul></ul><ul><ul><li>ADD PRIMARY KEY ( Order ID, ProductID) </li></ul></ul><ul><ul><li>ALTER TABLE Order_Details </li></ul></ul><ul><ul><li>ADD FOREIGN KEY ( Order ID) </li></ul></ul><ul><ul><li>REFERENCES Orders </li></ul></ul><ul><ul><li>ALTER TABLE Order _ Details </li></ul></ul><ul><ul><li>ADD FOREIGN KEY (ProductID) </li></ul></ul><ul><ul><li>REFERENCES Products </li></ul></ul>
    22. 23. Manipulación de datos <ul><li>Sentencia SELECT </li></ul><ul><ul><li>SELECT lista_expresiones </li></ul></ul><ul><ul><li>[INTO tabla] </li></ul></ul><ul><ul><li>FROM tablas </li></ul></ul><ul><ul><li>[WHERE condicion] </li></ul></ul><ul><ul><li>[GROUP BY lista_columnas] </li></ul></ul><ul><ul><li>[HAVING condicion] </li></ul></ul><ul><ul><li>[ORDER BY nombre_columnas] </li></ul></ul><ul><ul><li>[INTO TEMP tabla] </li></ul></ul>
    23. 24. Ejemplo SELECT (modelo de ventas) <ul><li>Quienes son los distribuidores ? </li></ul><ul><ul><li>SELECT * FROM Shippers </li></ul></ul>ShipperID CompanyName Phone ----------- -------- --------------------------- - ------------------------ 1 Speedy Express (503) 555-9831 2 United Package (503) 555-3199 3 Federal Shipping (503) 555-9931
    24. 25. Ejemplo SELECT (modelo de ventas) <ul><li>Cuantos clientes hay registrados ? </li></ul><ul><ul><li>SELECT COUNT(*) FROM Customers </li></ul></ul><ul><ul><li>SELECT COUNT(*) AS total_clientes </li></ul></ul><ul><ul><li>FROM Customers </li></ul></ul>----------- 91 total_clientes -------------- 91
    25. 26. Ejemplo SELECT (modelo de ventas) <ul><li>En cuantos paises distintos se tienen clientes ? </li></ul><ul><ul><li>SELECT Country </li></ul></ul><ul><ul><li>FROM Customers </li></ul></ul><ul><ul><li>ORDER BY Country </li></ul></ul>Country --------------- Argentina Argentina Argentina Austria Austria Belgium Belgium Brazil Brazil Brazil Brazil Brazil Brazil Brazil ...
    26. 27. Ejemplo SELECT (modelo de ventas) <ul><li>En cuantos paises distintos se tienen clientes ? </li></ul><ul><ul><li>SELECT DISTINCT Country </li></ul></ul><ul><ul><li>FROM Customers </li></ul></ul><ul><ul><li>ORDER BY Country </li></ul></ul><ul><ul><li>SELECT COUNT (DISTINCT Country) </li></ul></ul><ul><ul><li>FROM Customers </li></ul></ul>Country --------------- Argentina Austria Belgium Brazil Canada Denmark Finland France Germany Ireland Italy Mexico ... ----------- 21
    27. 28. Ejemplo SELECT (modelo de ventas) <ul><li>Que clientes hay en la ciudad de México ? </li></ul><ul><ul><li>SELECT CompanyName, ContactName, Phone </li></ul></ul><ul><ul><li>FROM Customers </li></ul></ul><ul><ul><li>WHERE City LIKE &quot;México % &quot; </li></ul></ul>CompanyName ContactName Phone ------------------------------------ ---------------------------------- ------------------------ Ana Trujillo Emparedados Ana Trujillo (5) 555-4729 Antonio Moreno Taquería Antonio Moreno (5) 555-3932 Centro comercial Moctezuma Francisco Chang (5) 555-3392 Pericles Comidas clásicas Guillermo Fernández (5) 552-3745 Tortuga Restaurante Miguel Angel Paolino (5) 555-2933
    28. 29. Ejemplo SELECT (modelo de libros) <ul><li>Cual es el precio unitario del libro ???....uno que habla de computadoras </li></ul><ul><ul><li>SELECT T itle_id, T itle, P rice FROM T itles </li></ul></ul><ul><ul><li>WHERE T itle LIKE &quot;%Computers%&quot; </li></ul></ul>title_id title price ------------ ----------------------------------------------------------------------- -------------- BU1111 Cooking with Computers : Surreptitious Balance Sheets 11.9500 BU7832 Straight Talk About Computers 19.9900
    29. 30. Ejemplo SELECT (modelo de ventas) <ul><li>Que empleados estan fuera de los Estados Unidos y desde cuando fueron contratados ? </li></ul><ul><ul><li>SELECT FirstName + &quot; &quot; + LastName AS Nombre, </li></ul></ul><ul><ul><li>Country AS Pais, YEAR (HireDate) AS AnioEmpleo </li></ul></ul><ul><ul><li>FROM Employees WHERE Country <> &quot; USA &quot; </li></ul></ul><ul><ul><li>ORDER BY 1 </li></ul></ul>Nombre Pais A nio Empleo ---------------------------- ------- -- -------------- --- Anne Dodsworth UK 1994 Michael Suyama UK 1993 Robert King UK 1 994 Steven Buchanan UK 1 993
    30. 31. Ejemplo SELECT (modelo de ventas) <ul><li>Que pedidos fueron enviados después de la fecha de requerimiento en 1998 ? </li></ul><ul><ul><li>SELECT OrderId, RequiredDate, ShippedDate, </li></ul></ul><ul><ul><li>DATEDIFF (dd,RequiredDate,ShippedDate) AS Dias </li></ul></ul><ul><ul><li>FROM Orders WHERE ShippedDate > RequiredDate </li></ul></ul><ul><ul><li>AND YEAR (OrderDate)=1998 ORDER BY Dias DESC </li></ul></ul>OrderId RequiredDate ShippedDate Dias ---------- -------------------------------- -------------------------------- -------- 10970 1998-04-07 00:00:00.000 1998-04-24 00:00:00.000 17 10827 1998-01-26 00:00:00.000 1998-02-06 00:00:00.000 11 10828 1998-01-27 00:00:00.000 1998-02-04 00:00:00.000 8 10924 1998-04-01 00:00:00.000 1998-04-08 00:00:00.000 7 10927 1998-04-02 00:00:00.000 1998-04-08 00:00:00.000 6 .... .... .... ....
    31. 32. Ejemplo SELECT (modelo de libros) <ul><li>Que libros están entre los 20 y 25 dolares ? </li></ul><ul><ul><li>SELECT Title, Price FROM Titles </li></ul></ul><ul><ul><li>WHERE Price BETWEEN 20 AND 25 </li></ul></ul><ul><ul><li>ORDER BY Price </li></ul></ul>Title Price -------------------------------------------------------------------------------- --- --------------- Secrets of Silicon Valley 20.0000 Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean 20.9500 Computer Phobic AND Non-Phobic Individuals: Behavior Variations 21.5900 But Is It User Friendly? 22.9500
    32. 33. Ejemplo SELECT (modelo de libros) <ul><li>Cual es el precio mínimo, máximo y promedio de los libros ? </li></ul><ul><ul><li>SELECT COUNT (*) AS Cuantos, MIN (Price) AS Minimo, </li></ul></ul><ul><ul><li>MAX (Price) AS Maximo, AVG (Price) AS Promedio </li></ul></ul><ul><ul><li>FROM Titles </li></ul></ul>Cuantos Minimo Maximo Promedio ----------- ---------- ---------------- ----- ---------------- ---- ------------- 18 2.9900 22.9500 14.7662
    33. 34. Ejemplo SELECT (modelo de ventas) <ul><li>Cual ha sido la cantidad total de venta y el precio promedio del producto con clave 15 ? </li></ul><ul><ul><li>SELECT Quantity, UnitPrice </li></ul></ul><ul><ul><li>FROM Order _ Details </li></ul></ul><ul><ul><li>WHERE ProductId = 15 </li></ul></ul><ul><ul><li>ORDER BY OrderId </li></ul></ul><ul><ul><li>SELECT SUM (Quantity), </li></ul></ul><ul><ul><li>AVG (UnitPrice) </li></ul></ul><ul><ul><li>FROM Order _ Details </li></ul></ul><ul><ul><li>WHERE ProductId = 15 </li></ul></ul>Quantity UnitPrice -------- -- ------------ 20 12.4000 5 12.4000 12 15.5000 10 15.5000 25 15.5000 50 15.5000 ----------- ------------- 122 14.4666
    34. 35. Ejemplo SELECT (modelo de ventas) <ul><li>Cuantos proveedores por país existen ? </li></ul><ul><ul><li>SELECT Country, SupplierId </li></ul></ul><ul><ul><li>FROM Suppliers </li></ul></ul><ul><ul><li>ORDER BY Country </li></ul></ul>Country SupplierId ------------------------ ----------- Australia 7 Australia 24 Brazil 10 Canada 25 Canada 29 Denmark 21 Finland 23 France 18 France 27 France 28 Germany 11 Germany 12 Germany 13 Italy 14 Italy 26 ... ...
    35. 36. Ejemplo SELECT (modelo de ventas) <ul><li>Cuantos proveedores por país existen ? </li></ul><ul><ul><li>SELECT Country , COUNT (SupplierId) AS Total </li></ul></ul><ul><ul><li>FROM Suppliers </li></ul></ul><ul><ul><li>GROUP BY Country </li></ul></ul><ul><ul><li>ORDER BY Total DESC </li></ul></ul>Country Total -------------------- -------------- USA 4 France 3 Germany 3 Australia 2 Canada 2 Italy 2 ... ...
    36. 37. Ejemplo SELECT (modelo de ventas) <ul><li>Que paises tienen más de dos proveedores ? </li></ul><ul><ul><li>SELECT Country, COUNT(SupplierId) AS Total </li></ul></ul><ul><ul><li>FROM Suppliers </li></ul></ul><ul><ul><li>GROUP BY Country </li></ul></ul><ul><ul><li>HAVING COUNT(SupplierId) > 2 </li></ul></ul><ul><ul><li>ORDER BY Total DESC, Country DESC </li></ul></ul>Country Total ----------------------- --------- USA 4 Germany 3 France 3
    37. 38. Ejemplo SELECT (modelo de libros) <ul><li>Cual es el precio mínimo, máximo y promedio de los libros por editor ? </li></ul><ul><ul><li>SELECT Pub_id , COUNT (Title_id) AS Cuantos, </li></ul></ul><ul><ul><li>MIN (Price) AS Minimo, MAX (Price) AS Maximo, </li></ul></ul><ul><ul><li>AVG (Price) AS Promedio FROM Titles </li></ul></ul><ul><ul><li>GROUP BY Pub_id </li></ul></ul>Pub id Cuantos Minimo M aximo P romedio ------ ----- -- -------- --------- - ------------------ -- --------- ----------- ----------- 0736 5 2.9900 19.9900 9.7840 0877 7 2.9900 21.5900 15.4100 1389 6 11.9500 22.9500 18.9760
    38. 39. Ejemplo SELECT (modelo de ventas) <ul><li>Cual es el volumen general de venta por producto ? </li></ul><ul><ul><li>SELECT ProductId , SUM (Quantity) AS Cantidad, </li></ul></ul><ul><ul><li>SUM (Quantity * UnitPrice) AS SubTotal, </li></ul></ul><ul><ul><li>SUM (Quantity * UnitPrice * Discount) AS Descuento </li></ul></ul><ul><ul><li>FROM Order_Details GROUP BY ProductId </li></ul></ul><ul><ul><li>ORDER BY ProductId </li></ul></ul>ProductId Cantidad SubTotal Descuento ----------- ---------- ----------- ---------- --------------------- ------------------------- 1 828 14277.6000 1489.500020980835 2 1057 18559.2000 2203.2400245666504 3 328 3080.0000 36.0 4 453 9424.8000 856.90000152587891 ... ... .... ....
    39. 40. Ejemplo SELECT (modelo de ventas) <ul><li>Que productos estan por arriba de las 500 unidades de venta ? </li></ul><ul><ul><li>SELECT ProductId, SUM(Quantity) AS Cantidad, </li></ul></ul><ul><ul><li>SUM(Quantity * UnitPrice) AS SubTotal, </li></ul></ul><ul><ul><li>SUM(Quantity * UnitPrice * Discount) AS Descuento </li></ul></ul><ul><ul><li>FROM Order_Details GROUP BY ProductId </li></ul></ul><ul><ul><li>HAVING SUM(Quantity) > 500 ORDER BY ProductId </li></ul></ul>ProductId Cantidad SubTotal Descuento ----------- ---------- ----------- ---------- ------------------- -- -------------------------- 1 828 14277.6000 1489.500020980835 2 1057 18559.2000 2203.2400245666504 7 763 22464.0000 419.70001697540283 10 742 22140.2000 1272.8600521087646 ... ... .... ....
    40. 41. Joins <ul><li>Es una consulta donde se combinan múltiples tablas </li></ul><ul><ul><li>Para obtener el total de ventas por cliente se deben emplear las tablas Orders y Order_Details </li></ul></ul><ul><ul><li>OrderId es el campo que relaciona a ambas tablas </li></ul></ul><ul><ul><li>Es una práctica comun usar alias para identificar las tablas y distinguir los campos con el mismo nombre </li></ul></ul>
    41. 42. Producto cartesiano <ul><li>Ocurre cuando no se especifica condición de relación para las tablas que forman parte de la consulta </li></ul><ul><li>El resultado de un producto cartesiano son todas la combinaciones posibles de los registros de las tablas que se consultan </li></ul><ul><li>El resultado es muy largo </li></ul>
    42. 43. Ejemplo SELECT (modelo de ventas) <ul><li>Cual fue el total de ventas por cliente en 1998 ? </li></ul><ul><ul><li>SELECT CustomerId, S.OrderId, Quantity, UnitPrice, Discount </li></ul></ul><ul><ul><li>FROM Orders S, Order_Details D </li></ul></ul><ul><ul><li>WHERE S.OrderId = D.OrderId </li></ul></ul><ul><ul><li>AND YEAR(OrderDate) = 1998 </li></ul></ul><ul><ul><li>ORDER BY CustomerId </li></ul></ul>CustomerId OrderId Quantity UnitPrice Discount ------------------------ ---------- ----------- ----------------------- ------------- ALFKI 10835 15 55.0000 0.0 ALFKI 10835 2 13.0000 0.2 ALFKI 10952 16 25.0000 5.0000E-2 ... ... ... ... ... ANATR 10926 2 21.0000 0.0 ANATR 10926 10 6.0000 0.0 ANATR 10926 7 9.200 0.0 ... ... ... ... ...
    43. 44. Ejemplo SELECT (modelo de ventas) <ul><li>Cual fue el total de ventas por cliente en 1998 ? </li></ul><ul><ul><li>SELECT CustomerId , SUM (Quantity) AS Cantidad, </li></ul></ul><ul><ul><li>SUM (UnitPrice * Quantity) AS Total, </li></ul></ul><ul><ul><li>SUM (UnitPrice * Quantity * Discount) AS Descuento </li></ul></ul><ul><ul><li>FROM Orders S, Order_Details D </li></ul></ul><ul><ul><li>WHERE S.OrderId = D.OrderId </li></ul></ul><ul><ul><li>AND YEAR(OrderDate) = 1998 </li></ul></ul><ul><ul><li>GROUP BY CustomerID ORDER BY CustomerId </li></ul></ul>CustomerId Cantidad Total Descuento ------------------------ ------------------------ ------------------------ --------------------------- ALFKI 95 2302.2000 51.700000286102295 ANATR 29 514.4000 0.0 ANTON 40 660.0000 0.0 AROUT 174 5838.5000 233.75 ... ... ... ...
    44. 45. Ejemplo SELECT (modelo de ventas) <ul><li>Del total de ventas por cliente en 1998, quienes obtuvieron un descuento total mayor al 10 % ? </li></ul><ul><ul><li>SELECT CustomerId,SUM(Quantity) AS Cantidad, </li></ul></ul><ul><ul><li>SUM(UnitPrice * Quantity) AS Total, </li></ul></ul><ul><ul><li>SUM(UnitPrice * Quantity * Discount) AS Descuento </li></ul></ul><ul><ul><li>FROM Orders S, Order_Details D </li></ul></ul><ul><ul><li>WHERE S.OrderId = D.OrderId </li></ul></ul><ul><ul><li>AND YEAR(OrderDate) = 1998 </li></ul></ul><ul><ul><li>GROUP BY CustomerID </li></ul></ul><ul><ul><li>HAVING SUM(UnitPrice * Quantity * Discount) > SUM(UnitPrice * Quantity) * 0.10 </li></ul></ul><ul><ul><li>ORDER BY CustomerId </li></ul></ul>
    45. 46. Ejemplo SELECT (modelo de libros) <ul><li>Quien es el Autor mas vendido ? </li></ul><ul><ul><li>SELECT Au_id, s.Title_id, Ord_num, Qty </li></ul></ul><ul><ul><li>FROM Sales s, Titleauthor t </li></ul></ul><ul><ul><li>WHERE s.Title_id = t.Title_id ORDER BY Au_id </li></ul></ul>Au_id Title_id Ord_num Qty ---------------------- --------------------- -------------------- --------------- 172-32-1176 PS3333 P3087a 15 213-46-8915 BU1032 6871 5 213-46-8915 BU1032 423LL930 10 213-46-8915 BU2075 X999 35 238-95-7766 PC1035 QA879.1 30 267-41-2394 BU1111 P723 25 267-41-2394 TC7777 P2121 20 274-80-9391 BU7832 QQ2299 15 409-56-7008 BU1032 6871 5 409-56-7008 BU1032 423LL930 10 ... ... ... ...
    46. 47. Ejemplo SELECT (modelo de libros) <ul><li>Quien es el Autor mas vendido ? </li></ul><ul><ul><li>SELECT Au_id, s.Title_id , SUM (Qty) AS Cantidad </li></ul></ul><ul><ul><li>FROM Sales s, Titleauthor t WHERE s.Title_id = t.Title_id </li></ul></ul><ul><ul><li>GROUP BY Au_id, s.Title_id ORDER by Au_id </li></ul></ul>Au_id Title_id Cantidad -------------------- --------------------- ----------- 172-32-1176 PS3333 15 213-46-8915 BU1032 15 213-46-8915 BU2075 35 238-95-7766 PC1035 30 267-41-2394 BU1111 25 267-41-2394 TC7777 20 274-80-9391 BU7832 15 409-56-7008 BU1032 15 ... ... ...
    47. 48. Ejemplo SELECT (modelo de libros) <ul><li>Quien es el Autor mas vendido ? </li></ul><ul><ul><li>SELECT Au_id , SUM (Qty) AS Cantidad </li></ul></ul><ul><ul><li>FROM Sales s, Titleauthor t WHERE s.Title_id = t.Title_id </li></ul></ul><ul><ul><li>GROUP BY Au_id ORDER by Cantidad DESC </li></ul></ul>Au_id Cantidad --------------------- -------------- 899-46-2035 148 998-72-3567 133 213-46-8915 50 427-17-2319 50 846-92-7186 50 267-41-2394 45 724-80-9391 45 ... ...
    48. 49. Ejemplo SELECT (modelo de libros) <ul><li>Quien es el Autor mas vendido ? </li></ul><ul><ul><li>SELECT Au_id, SUM(Qty) AS Cantidad </li></ul></ul><ul><ul><li>INTO Ventas_Autor </li></ul></ul><ul><ul><li>FROM Sales s, Titleauthor t WHERE s.Title_id = t.Title_id </li></ul></ul><ul><ul><li>GROUP BY Au_id ORDER by Cantidad DESC </li></ul></ul><ul><ul><li>SELECT * </li></ul></ul><ul><ul><li>FROM Ventas_Autor </li></ul></ul>Au_id Cantidad --------------------- -------------- 899-46-2035 148 998-72-3567 133 213-46-8915 50 427-17-2319 50 846-92-7186 50 267-41-2394 45 724-80-9391 45 ... ...
    49. 50. Ejemplo SELECT (modelo de libros) <ul><li>Cual es el almacén con mayores ventas ? </li></ul><ul><ul><li>SELECT Stor_name, SUM(Qty) AS Cantidad, </li></ul></ul><ul><ul><li>SUM(Qty * Price) AS Total </li></ul></ul><ul><ul><li>FROM Stores o, Sales s, Titles t </li></ul></ul><ul><ul><li>WHERE s.Title_id = t.Title_id </li></ul></ul><ul><ul><li>AND o.Stor_id = s.Stor_id </li></ul></ul><ul><ul><li>GROUP BY Stor_name ORDER BY 3 DESC </li></ul></ul>Stor_name Cantidad Total ----------------------------------------------------- --------------------- ------------- Barnum's 125 2003.3750 News & Brews 90 1634.9300 Doc-U-Mat: Quality Laundry and Books 130 1540.1650 ... ... ...
    50. 51. Ejemplo “Self Join” (modelo de ventas) <ul><li>Quien es el supervisor de cada empleado ? </li></ul><ul><ul><li>SELECT a.FirstName + &quot; &quot; + a.Lastname AS Empleado, </li></ul></ul><ul><ul><li>b.FirstName + &quot; &quot; + b.LastName AS Supervisor </li></ul></ul><ul><ul><li>FROM Employees a, Employees b </li></ul></ul><ul><ul><li>WHERE a.ReportsTo=b.Employeeid </li></ul></ul><ul><ul><li>ORDER BY Empleado </li></ul></ul>Empleado Supervisor ------------------------------- ------------------------------- Anne Dodsworth Steven Buchanan Janet Leverling Andrew Fuller Laura Callahan Andrew Fuller Margaret Peacock Andrew Fuller Michael Suyama Steven Buchanan ... ...
    51. 52. Ejercicio sobre el modelo de ventas <ul><li>Anualmente la compañia de ventas otorga un estímulo a sus empleados de acuerdo con los siguientes criterios </li></ul><ul><ul><li>Los empleados que mas pedidos hayan realizado. No se deben de tomar en cuenta los pedidos que fueron enviados despues de la fecha de requerimiento. </li></ul></ul><ul><ul><li>Los empleados con mayores ventas </li></ul></ul><ul><ul><li>Para ambos casos hay que obtener los 5 primeros vendedores, nombre completo y quien es su jefe inmediato. </li></ul></ul>
    52. 53. Ejercicio sobre el modelo de ventas <ul><li>Además, el proveedor “Gai pâturage” otorga un premio adicional al empleado que más haya vendido sus productos </li></ul><ul><ul><li>El proveedor solicita a la compañia de ventas el domicilio del empleado que resulte ganador </li></ul></ul>
    53. 54. Manipulación de datos <ul><li>Sentencia INSERT (Agregar nuevos registros) </li></ul><ul><ul><li>INSERT INTO tabla </li></ul></ul><ul><ul><li>VALUES (lista_expresiones) </li></ul></ul><ul><ul><li>INSERT INTO tabla (lista_columnas) </li></ul></ul><ul><ul><li>VALUES (lista_expresiones) </li></ul></ul>
    54. 55. Ejemplo INSERT (modelo de ventas) <ul><li>El empleado con clave 5 agrega un nuevo pedido para el cliente &quot; CHOPS &quot;. </li></ul><ul><ul><li>INSERT INTO Orders </li></ul></ul><ul><ul><li>(EmployeeId, CustomerId, OrderDate, RequiredDate) </li></ul></ul><ul><ul><li>VALUES (5 , &quot;CHOPS&quot; , GETDATE() , &quot;05/01/2001&quot;) </li></ul></ul>OrderID 11079 CustomerID CHOPS EmployeeID 5 OrderDate 2001-04-06 02:21:46.127 RequiredDate 2001-05-01 00:00:00.000 ShippedDate NULL ShipVia NULL Freight NULL ShipName NULL ... NULL
    55. 56. Ejemplo INSERT (modelo de ventas) <ul><li>Agregando los productos 15 y 17 al nuevo pedido </li></ul><ul><ul><li>INSERT INTO Order_Details </li></ul></ul><ul><ul><li>VALUES (11079 , 15 , 15.50 , 5 , 0.2) </li></ul></ul><ul><ul><li>INSERT INTO Order_Details </li></ul></ul><ul><ul><li>VALUES (11079, 17 , 39.00 , 10 , 0.2) </li></ul></ul>
    56. 57. Ejemplo INSERT (modelo de ventas) <ul><li>Según la definición de la tabla Order_Details (Diapositiva N° 20), que sucede en cada uno de los siguientes casos: </li></ul><ul><ul><li>INSERT INTO Order_Details </li></ul></ul><ul><ul><li>VALUES (11079, 73 , 13.00 , 0 , 0.0) </li></ul></ul><ul><ul><li>INSERT INTO Order_Details </li></ul></ul><ul><ul><li>VALUES (11079, 73 , 15.00 , 10 , 2.0) </li></ul></ul><ul><ul><li>INSERT INTO Order_Details (OrderId,ProductId) </li></ul></ul><ul><ul><li>VALUES (11079 , 73) </li></ul></ul>
    57. 58. Manipulación de datos <ul><li>Sentencia UPDATE (Actualizar columnas) </li></ul><ul><ul><li>UPDATE tabla SET </li></ul></ul><ul><ul><li>Columna1 = Expresion1, Columna2 = Expresion2 , </li></ul></ul><ul><ul><li>....... , ColumnaN = ExpresionN </li></ul></ul><ul><ul><li>[WHERE condicion] </li></ul></ul><ul><ul><li>UPDATE tabla SET </li></ul></ul><ul><ul><li>(lista_columnas) = (lista_expresiones) </li></ul></ul><ul><ul><li>[WHERE condicion] </li></ul></ul>
    58. 59. Ejemplo UPDATE (modelo de libros) <ul><li>Incrementando un 10% el precio de los libros </li></ul><ul><ul><li>UPDATE Titles SET Price = Price + Price * 0.10 </li></ul></ul><ul><li>Actualizando los datos del autor Johnson White </li></ul><ul><ul><li>UPDATE Authors SET </li></ul></ul><ul><ul><li>phone = &quot;409 496-7224&quot; , address = &quot;1024 Park Av.&quot; , </li></ul></ul><ul><ul><li>city = &quot;New York&quot; , state = &quot;NY&quot; , zip = 25040 </li></ul></ul><ul><ul><li>WHERE au_lname = &quot;White&quot; AND au_fname = &quot;Johnson&quot; </li></ul></ul>
    59. 60. Manipulación de datos <ul><li>Sentencia DELETE (Borrar registros) </li></ul><ul><ul><li>DELETE FROM tabla </li></ul></ul><ul><ul><li>[WHERE condicion] </li></ul></ul>
    60. 61. Ejemplo DELETE (modelo de libros) <ul><li>Borra todos los Autores con contrato no vigente </li></ul><ul><ul><li>SELECT COUNT(*) AS Cuantos </li></ul></ul><ul><ul><li>FROM Authors WHERE contract = 0 </li></ul></ul><ul><ul><li>DELETE FROM Authors </li></ul></ul><ul><ul><li>WHERE contract = 0 </li></ul></ul>Cuantos ----------- 4 (4 row(s) affected)
    61. 62. Borrado de registros e Integridad Referencial <ul><li>Borra todos los Pedidos </li></ul><ul><ul><li>DELETE FROM Orders </li></ul></ul><ul><ul><li>Provoca un error ya que existe una relacion formal entre las tablas Orders y Order_Details </li></ul></ul><ul><ul><ul><li>ALTER TABLE Order_Details </li></ul></ul></ul><ul><ul><ul><li>ADD FOREIGN KEY ( Order ID) REFERENCES Orders </li></ul></ul></ul><ul><ul><li>Esta relación obliga a que los pedidos de la tabla Order_Details existan en la tabla Orders </li></ul></ul><ul><ul><li>Si no existen pedidos sería incoherente tener el detalle de cada uno de ellos. </li></ul></ul>
    62. 63. Consultas avanzadas y “Subqueries” <ul><li>Outer Join </li></ul><ul><ul><li>Una consulta entre Orders S y Order_Details D con la cláusula WHERE S.OrderId=D.OrderId , regresa solo los pedidos que tienen detalle. </li></ul></ul><ul><ul><li>Un “Outer Join” sobre la tabla Order_Details, regresa todos los pedidos tengan o no registros en la tabla de detalle. </li></ul></ul>Orders Order_Details Orders Outer Order_Details
    63. 64. Ejemplo “OUTER JOIN” (modelo de ventas) <ul><li>Que pedidos no tienen detalle ? </li></ul><ul><ul><li>SELECT S.OrderId, Quantity, UnitPrice, Discount </li></ul></ul><ul><ul><li>FROM Orders S LEFT OUTER JOIN Order_Details D </li></ul></ul><ul><ul><li>ON S.OrderId = D.OrderId </li></ul></ul><ul><ul><li>WHERE Quantity IS NULL </li></ul></ul><ul><ul><li>ORDER BY S.OrderId </li></ul></ul>OrderId Quantity UnitPrice Discount ---------- --------------------- --------------------- ---------------- 11078 NULL NULL NULL 11080 NULL NULL NULL
    64. 65. Sintáxis de la sentencia “JOIN” en SQLServer <ul><li>Normalmente un “JOIN” se realiza </li></ul><ul><li> SELECT ProductID, Suppliers.SupplierID </li></ul><ul><ul><li>FROM Suppliers, Products </li></ul></ul><ul><ul><li>WHERE (Suppliers.SupplierID = Products.SupplierID) </li></ul></ul><ul><li>Para SQLServer existe una sintáxis alternativa </li></ul><ul><ul><li>SELECT ProductID, Suppliers.SupplierID </li></ul></ul><ul><ul><li>FROM Suppliers JOIN Products </li></ul></ul><ul><ul><li>ON (Suppliers.SupplierID = Products.SupplierID) </li></ul></ul>
    65. 66. Ejemplo “OUTER JOIN” (modelo de ventas) <ul><li>Cual es el total de pedidos por cliente ? </li></ul><ul><ul><li>SELECT C.CustomerID, COUNT(OrderID) AS TotalPedidos </li></ul></ul><ul><ul><li>FROM Customers C FULL OUTER JOIN Orders O </li></ul></ul><ul><ul><li>ON C.Customerid = O.Customerid </li></ul></ul><ul><ul><li>GROUP BY C.CustomerID </li></ul></ul><ul><ul><li>ORDER BY TotalPedidos </li></ul></ul>CustomerID TotalPedidos --------------------- ----------------- FISSA 0 PARIS 0 CENTC 1 GROSR 2 LAZYK 2 ... ...
    66. 67. Ejemplo “OUTER JOIN” (modelo de libros) <ul><li>Que libros no tienen editor o que editor no tiene libros ? </li></ul><ul><ul><li>SELECT T.title AS Libro, P.pub_name AS Editor </li></ul></ul><ul><ul><li>FROM Publishers P FULL OUTER JOIN Titles T </li></ul></ul><ul><ul><li>ON T.pub_id = P.pub_id </li></ul></ul><ul><ul><li>WHERE T.pub_id IS NULL OR P.pub_id IS NULL </li></ul></ul><ul><ul><li>ORDER BY P.pub_name </li></ul></ul>Libro Editor --------------------- ----------------------------- NULL Five Lakes Publishing NULL GGG&G NULL Lucerne Publishing NULL Ramona Publishers NULL Scootney Books
    67. 68. Ejemplo “INNER JOIN” (modelo de libros) <ul><li>Que libros corresponden a cada editor ? </li></ul><ul><ul><li>SELECT T.title AS Libro, P.pub_name AS Editor </li></ul></ul><ul><ul><li>FROM Publishers P INNER JOIN Titles T </li></ul></ul><ul><ul><li>ON T.pub_id = P.pub_id </li></ul></ul><ul><ul><li>ORDER BY P.pub_name </li></ul></ul>Libro Editor ------------------------------------------- ---------------------------------- The Busy Executive's Database ... Algodata Infosystems Cooking with Computers: Surre... Algodata Infosystems Straight Talk About Computers Algodata Infosystems ... ... Silicon Valley Gastronomic Treats Binnet & Hardley The Gourmet Microwave Binnet & Hardley ... ...
    68. 69. Ejemplo sin “JOIN” (modelo de libros) <ul><li>Cual es el total de venta por editor ? </li></ul><ul><ul><li>SELECT P.pub_name AS Editor, </li></ul></ul><ul><ul><li>SUM(T.price * S.qty) AS TotalVenta </li></ul></ul><ul><ul><li>FROM Publishers P, Titles T, Sales S </li></ul></ul><ul><ul><li>WHERE T.pub_id = P.pub_id </li></ul></ul><ul><ul><li>AND T.title_id = S.title_id </li></ul></ul><ul><ul><li>GROUP BY P.pub_name ORDER BY P.pub_name </li></ul></ul>Editor TotalVenta ------------------------------------------- ----------------------- Algodata Infosystems 2845.6450 Binnet & Hardley 2340.9100 New Moon Books 2158.0350
    69. 70. Ejemplo “INNER JOIN” (modelo de libros) <ul><li>Cual es el total de venta por editor ? </li></ul><ul><ul><li>SELECT P.pub_name AS Editor, </li></ul></ul><ul><ul><li>SUM(T.price * S.qty) AS TotalVenta FROM Publishers P </li></ul></ul><ul><ul><li>INNER JOIN Titles T ON T.pub_id = P.pub_id </li></ul></ul><ul><ul><li>INNER JOIN Sales S ON T.title_id = S.title_id </li></ul></ul><ul><ul><li>GROUP BY P.pub_name ORDER BY P.pub_name </li></ul></ul>Editor TotalVenta ------------------------------------------- ----------------------- Algodata Infosystems 2845.6450 Binnet & Hardley 2340.9100 New Moon Books 2158.0350
    70. 71. Ejemplo “OUTER JOIN” (modelo de libros) <ul><li>Cual es el total de venta por editor ? </li></ul><ul><ul><li>SELECT P.pub_name AS Editor, </li></ul></ul><ul><ul><li>SUM(T.price * S.qty) AS TotalVenta FROM Publishers P </li></ul></ul><ul><ul><li>FULL OUTER JOIN Titles T ON T.pub_id = P.pub_id </li></ul></ul><ul><ul><li>FULL OUTER JOIN Sales S ON T.title_id = S.title_id </li></ul></ul><ul><ul><li>GROUP BY P.pub_name ORDER BY P.pub_name </li></ul></ul>Editor TotalVenta -------------------------------------------------- ---------------------- Algodata Infosystems 2845.6450 Binnet & Hardley 2340.9100 Five Lakes Publishing NULL GGG&G NULL Lucerne Publishing NULL New Moon Books 2158.0350 Ramona Publishers NULL Scootney Books NULL
    71. 72. Subqueries <ul><li>Es una sentencia SELECT dentro de otra sentencia SELECT (o DELETE, UPDATE o INSERT) </li></ul><ul><li>Debe estar encerrada entre parentesis </li></ul><ul><li>No debe incluir la cláusula ORDER BY </li></ul><ul><li>Debe tener al menos la estructura básica SELECT lista_expresiones FROM tabla </li></ul>
    72. 73. Ejemplo “Subquery” (modelo de ventas) <ul><li>Que clientes están en la misma ciudad que el cliente &quot;Familia Arquibaldo&quot; ? </li></ul><ul><ul><li>SELECT CompanyName,ContactName,City </li></ul></ul><ul><ul><li>FROM CUSTOMERS WHERE City IN </li></ul></ul><ul><ul><li>(SELECT City FROM Customers </li></ul></ul><ul><ul><li>WHERE CompanyName </li></ul></ul><ul><ul><li>LIKE &quot;%Familia Arquibaldo%&quot;) </li></ul></ul>CompanyName ContactName City ------------------------------- -------------------------------- --------------- Comércio Mineiro Pedro Afonso Sao Paulo Familia Arquibaldo Aria Cruz Sao Paulo Queen Cozinha Lúcia Carvalho Sao Paulo Tradição Hipermercados Anabela Domingues Sao Paulo
    73. 74. Ejemplo “Subquery” (modelo de ventas) <ul><li>Que proveedores surten condimentos ? </li></ul><ul><ul><li>SELECT Companyname,City,Country FROM Suppliers </li></ul></ul><ul><ul><li>WHERE SupplierId IN </li></ul></ul><ul><ul><li>( SELECT SupplierId FROM Products WHERE CategoryId IN </li></ul></ul><ul><ul><li>( SELECT CategoryId FROM Categories </li></ul></ul><ul><ul><li>WHERE CategoryName LIKE &quot;%Condiments%&quot;)) </li></ul></ul><ul><ul><li>ORDER BY Companyname </li></ul></ul>Companyname City Country ------------------------------------------- ---------------------- --------------- Exotic Liquids London UK Forêts d'érables Ste-Hyacinthe Canada Grandma Kelly's Homestead Ann Arbor USA Leka Trading Singapore Singapore ... ... ...
    74. 75. Ejemplo (modelo de ventas) <ul><li>Que proveedores surten condimentos ? </li></ul><ul><ul><li>SELECT Companyname,City,Country </li></ul></ul><ul><ul><li>FROM Suppliers S, Products P, Categories C </li></ul></ul><ul><ul><li>WHERE S.SupplierId=P.SupplierId </li></ul></ul><ul><ul><li>AND P.CategoryId=C.CategoryId </li></ul></ul><ul><ul><li>AND C.CategoryName LIKE &quot;%Condiments%&quot; </li></ul></ul><ul><ul><li>ORDER BY CompanyName </li></ul></ul>Companyname City Country ------------------------------------------- ---------------------- --------------- Exotic Liquids London UK Forêts d'érables Ste-Hyacinthe Canada Grandma Kelly's Homestead Ann Arbor USA Grandma Kelly's Homestead Ann Arbor USA ... ... ...
    75. 76. Ejemplo (modelo de ventas) <ul><li>Que proveedores surten condimentos ? </li></ul><ul><ul><li>SELECT DISTINCT Companyname,City,Country </li></ul></ul><ul><ul><li>FROM Suppliers S, Products P, Categories C </li></ul></ul><ul><ul><li>WHERE S.SupplierId=P.SupplierId </li></ul></ul><ul><ul><li>AND P.CategoryId=C.CategoryId </li></ul></ul><ul><ul><li>AND C.CategoryName LIKE &quot;%Condiments%&quot; </li></ul></ul><ul><ul><li>ORDER BY CompanyName </li></ul></ul>Companyname City Country ------------------------------------------- ---------------------- --------------- Exotic Liquids London UK Forêts d'érables Ste-Hyacinthe Canada Grandma Kelly's Homestead Ann Arbor USA Leka Trading Singapore Singapore ... ... ...

    ×