sq lv1a

76
Es una colección de datos relacionados que pueden servir para múltiples propósitos y soportar múltiples usuarios Base de datos

Upload: daniel-cruz

Post on 19-Jun-2015

1.566 views

Category:

Technology


8 download

DESCRIPTION

Curso de SQL

TRANSCRIPT

Page 1: Sq Lv1a

Es una colección de datos relacionados que pueden servir para múltiples propósitos y soportar múltiples usuarios

Base de datos

Page 2: Sq Lv1a

Tipos de bases de datos Jerárquica Red Relacional

Page 3: Sq Lv1a

Modelo de datos Es una representación lógica que define

las unidades de datos y especifica como cada unidad de datos se relaciona con las otras

Pedidos

Clientes

Page 4: Sq Lv1a

Modelo entidad relación E-R Modelo de datos basicamente

representado por los objetos

Entidad Relación (Vínculo) Atributo

Page 5: Sq Lv1a

Entidad 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

Page 6: Sq Lv1a

Relación Representa una asociacion entre dos

entidades Un verbo o una preposición que asocia

dos entidades usualmente implica una relación

Page 7: Sq Lv1a

Atributo 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

Page 8: Sq Lv1a

Tipos de atributo Identificador (Llave)

Describe una característica única de la entidad

Descriptor Describe una característica no única de la

entidad

Page 9: Sq Lv1a

Modelos ejemplo Modelo E-R de un sistema de Ventas

Order Details

OrderID (FK)ProductID (FK)

UnitPriceQuantityDiscount

Products

ProductID

ProductNameSupplierID (FK)CategoryID (FK)QuantityPerUnitUnitPriceUnitsInStockUnitsOnOrderReorderLevelDiscontinued

Orders

OrderID

CustomerID (FK)EmployeeID (FK)OrderDateRequiredDateShippedDateShipVia (FK)FreightShipNameShipAddressShipCityShipRegionShipPostalCodeShipCountry

Suppliers

SupplierID

CompanyNameContactNameContactTitleAddressCityRegionPostalCodeCountryPhoneFaxHomePage

Shippers

ShipperID

CompanyNamePhone

Customers

CustomerID

CompanyNameContactNameContactTitleAddressCityRegionPostalCodeCountryPhoneFax

Categories

CategoryID

CategoryNameDescriptionPicture

Employees

EmployeeID

LastNameFirstNameTitleTitleOfCourtesyBirthDateHireDateAddressCityRegionPostalCodeCountryHomePhoneExtensionPhotoNotesReportsTo (FK)PhotoPath

Page 10: Sq Lv1a

Modelos ejemplo Modelo E-R de un sistema de

distribución de libros

employee

emp_id

fnameminitlnamejob_id (FK)job_lvlpub_id (FK)hire_date

pub_info

pub_id (FK)

logopr_info

jobs

job_id

job_descmin_lvlmax_lvl

discounts

discounttypestor_id (FK)lowqtyhighqtydiscount

roysched

title_id (FK)lorangehirangeroyalty

sales

stor_id (FK)ord_numtitle_id (FK)

ord_dateqtypayterms

stores

stor_id

stor_namestor_addresscitystatezip

titleauthor

au_id (FK)title_id (FK)

au_ordroyaltyper

titles

title_id

titletypepub_id (FK)priceadvanceroyaltyytd_salesnotespubdate

publishers

pub_id

pub_namecitystatecountry

authors

au_id

au_lnameau_fnamephoneaddresscitystatezipcontract

Page 11: Sq Lv1a
Page 12: Sq Lv1a

Otros conceptos Llave primaria (PK)

Es un atributo o combinación de atributos que identifican en forma única una instancia de la entidad

Llave foránea (FK) Es un atributo que hace referencia a una

llave primaria de otra entidad Es un atributo o combinación de atributos

usados para establecer una relacion entre dos entidades

Page 13: Sq Lv1a

Otros conceptos Valores nulos

Valor desconocido o ausencia de valor No es lo mismo que blancos o ceros

Requisito de unicidad (Unique) Este requisito señala que dos instancias de la

misma entidad no deben tener el mismo valor

Page 14: Sq Lv1a

Normalización Es la aplicación de un conjunto de

normas que ayudan a optimizar la estructura de una base de datos

Las normas se aplican para asociar entidades y atributos de manera óptima

Page 15: Sq Lv1a

Beneficios de la normalización Da flexibilidad a la base de datos Reduce la redundancia de los datos Asegura que los atributos son colocados

en la entidad apropiada

Page 16: Sq Lv1a

Modelo lógico y físico

Modelo EREntidadesAtributosRelacionesInstancia de la Entidad

Pedidos

Clientes

Esquema de base de datosTablasColumnas (campos)Llaves primarias y foráneasRenglón (registro)

Page 17: Sq Lv1a

Integridad de la base de datos Integridad referencial

Asegura las relaciones entre las tablas Integridad de la entidad

Asegura el requisito de unicidad para cada renglón basado en la llave primaria especificada

Integridad semántica Asegura que los datos de cada renglón

reflejen un valor permitido para dicho renglon

Asegura que se almacenen los valores permitidos para cada tipo de dato definido

Page 18: Sq Lv1a

Lenguaje SQL Es un lenguaje estándar que

normalmente se emplea para crear, administrar y usar una base de datos

Sus instrucciones se dividen en dos categorías

Las instrucciones DDL (Definición de datos), empleadas para crear la base de datos

Las instrucciones DML (Manipulación de datos), usadas para consultar, agregar, modificar o borrar datos

Page 19: Sq Lv1a

Creación de la base de datos Sentencia CREATE DATABASE

CREATE DATABASE Sales

Page 20: Sq Lv1a

Creación de tablas Sentencia CREATE TABLE

CREATE TABLE Order_Details( OrderID int NOT NULL, ProductID int NOT NULL, UnitPrice money NOT NULL DEFAULT 0 CHECK ([UnitPrice] >= 0), Quantity smallint NOT NULL DEFAULT 1 CHECK ([Quantity] > 0), Discount real NOT NULL DEFAULT 0, CHECK ([Discount] >= 0 and [Discount] <= 1))

Page 21: Sq Lv1a

Creación de índices Sentencia CREATE INDEX

CREATE INDEX OrderID_Ind ON Order_Details( OrderID)

Page 22: Sq Lv1a

Creación de llaves y relaciones Sentencia ALTER TABLE

ALTER TABLE Order_Details ADD PRIMARY KEY (OrderID, ProductID)

ALTER TABLE Order_Details ADD FOREIGN KEY (OrderID) REFERENCES Orders

ALTER TABLE Order_Details ADD FOREIGN KEY (ProductID) REFERENCES Products

Page 23: Sq Lv1a

Manipulación de datos Sentencia SELECT

SELECT lista_expresiones[INTO tabla]FROM tablas[WHERE condicion][GROUP BY lista_columnas][HAVING condicion][ORDER BY nombre_columnas][INTO TEMP tabla]

Page 24: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Quienes son los distribuidores ?

SELECT * FROM Shippers

ShipperID CompanyName Phone------------------- ---------------------------- ------------------------ 1 Speedy Express (503) 555-98312 United Package (503) 555-31993 Federal Shipping (503) 555-9931

Page 25: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Cuantos clientes hay registrados ?

SELECT COUNT(*) FROM Customers

SELECT COUNT(*) AS total_clientes FROM Customers

-----------

91

total_clientes

--------------

91

Page 26: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

En cuantos paises distintos se tienen clientes ?

SELECT Country FROM CustomersORDER BY Country

Country --------------- ArgentinaArgentinaArgentinaAustriaAustriaBelgiumBelgiumBrazilBrazilBrazilBrazilBrazilBrazilBrazil...

Page 27: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

En cuantos paises distintos se tienen clientes ?

SELECT DISTINCT Country FROM CustomersORDER BY Country

SELECT COUNT(DISTINCT Country) FROM Customers

Country--------------- ArgentinaAustriaBelgiumBrazilCanadaDenmarkFinlandFranceGermanyIrelandItalyMexico...

----------- 21

Page 28: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Que clientes hay en la ciudad de México ?

SELECT CompanyName, ContactName, Phone FROM CustomersWHERE City LIKE "México%"

CompanyName ContactName Phone ------------------------------------ ---------------------------------- ------------------------ Ana Trujillo Emparedados Ana Trujillo (5) 555-4729Antonio Moreno Taquería Antonio Moreno (5) 555-3932Centro comercial Moctezuma Francisco Chang (5) 555-3392Pericles Comidas clásicas Guillermo Fernández (5) 552-3745Tortuga Restaurante Miguel Angel Paolino (5) 555-2933

Page 29: Sq Lv1a

Ejemplo SELECT (modelo de libros)

Cual es el precio unitario del libro ???....uno que habla de computadoras

SELECT Title_id, Title, Price FROM TitlesWHERE Title LIKE "%Computers%"

title_id title price------------ ----------------------------------------------------------------------- -------------- BU1111 Cooking with Computers: Surreptitious Balance Sheets11.9500BU7832 Straight Talk About Computers 19.9900

Page 30: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Que empleados estan fuera de los Estados Unidos y desde cuando fueron contratados ?

SELECT FirstName + " " + LastName AS Nombre,

Country AS Pais, YEAR(HireDate) AS AnioEmpleo

FROM Employees WHERE Country <> "USA"

ORDER BY 1

Nombre PaisAnioEmpleo---------------------------- --------- -----------------Anne Dodsworth UK 1994Michael Suyama UK 1993Robert King UK 1994Steven Buchanan UK 1993

Page 31: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Que pedidos fueron enviados después de la fecha de requerimiento en 1998 ?

SELECT OrderId, RequiredDate, ShippedDate,DATEDIFF(dd,RequiredDate,ShippedDate) AS DiasFROM Orders WHERE ShippedDate > RequiredDate AND YEAR(OrderDate)=1998 ORDER BY Dias

DESC

OrderId RequiredDate ShippedDate Dias---------- -------------------------------- -------------------------------- -------- 10970 1998-04-07 00:00:00.000 1998-04-24 00:00:00.000 1710827 1998-01-26 00:00:00.000 1998-02-06 00:00:00.000 1110828 1998-01-27 00:00:00.000 1998-02-04 00:00:00.000 810924 1998-04-01 00:00:00.000 1998-04-08 00:00:00.000 710927 1998-04-02 00:00:00.000 1998-04-08 00:00:00.000 6.... .... .... ....

Page 32: Sq Lv1a

Ejemplo SELECT (modelo de libros)

Que libros están entre los 20 y 25 dolares ?

SELECT Title, Price FROM TitlesWHERE Price BETWEEN 20 AND 25ORDER BY Price

Title Price ----------------------------------------------------------------------------------- --------------- Secrets of Silicon Valley 20.0000Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean20.9500Computer Phobic AND Non-Phobic Individuals: Behavior Variations21.5900But Is It User Friendly? 22.9500

Page 33: Sq Lv1a

Ejemplo SELECT (modelo de libros)

Cual es el precio mínimo, máximo y promedio de los libros ?

SELECT COUNT(*) AS Cuantos, MIN(Price) AS Minimo,

MAX(Price) AS Maximo, AVG(Price) AS PromedioFROM Titles

Cuantos Minimo MaximoPromedio--------------------- --------------------- -------------------- ------------- 18 2.9900 22.950014.7662

Page 34: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Cual ha sido la cantidad total de venta y el precio promedio del producto con clave 15 ?

SELECT Quantity, UnitPriceFROM Order_DetailsWHERE ProductId = 15ORDER BY OrderId

SELECT SUM(Quantity), AVG(UnitPrice) FROM Order_Details WHERE ProductId = 15

QuantityUnitPrice

----------------------

2012.4000

512.4000

1215.5000

1015.5000

2515.5000

5015.5000

----------- ------------- 122 14.4666

Page 35: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Cuantos proveedores por país existen ?

SELECT Country, SupplierId

FROM SuppliersORDER BY Country

Country SupplierId------------------------ -----------Australia 7Australia 24Brazil 10Canada 25Canada 29Denmark 21Finland 23France 18France 27France 28Germany 11Germany 12Germany 13Italy 14Italy 26... ...

Page 36: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Cuantos proveedores por país existen ?

SELECT Country, COUNT(SupplierId) AS TotalFROM SuppliersGROUP BY CountryORDER BY Total DESC

Country Total -------------------- --------------USA 4France 3Germany 3Australia 2Canada 2Italy 2... ...

Page 37: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Que paises tienen más de dos proveedores ?

SELECT Country, COUNT(SupplierId) AS Total FROM Suppliers GROUP BY CountryHAVING COUNT(SupplierId) > 2ORDER BY Total DESC, Country DESC

Country Total ----------------------- --------- USA 4Germany

3France 3

Page 38: Sq Lv1a

Ejemplo SELECT (modelo de libros)

Cual es el precio mínimo, máximo y promedio de los libros por editor ?

SELECT Pub_id, COUNT(Title_id) AS Cuantos, MIN(Price) AS Minimo, MAX(Price) AS Maximo, AVG(Price) AS Promedio FROM TitlesGROUP BY Pub_id

Pub id Cuantos Minimo MaximoPromedio----------- -------------------- -------------------- -------------------- ----------- 0736 5 2.9900 19.99009.78400877 7 2.9900 21.590015.41001389 6 11.9500 22.9500

18.9760

Page 39: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Cual es el volumen general de venta por producto ?

SELECT ProductId, SUM(Quantity) AS Cantidad, SUM(Quantity * UnitPrice) AS SubTotal, SUM(Quantity * UnitPrice * Discount) AS DescuentoFROM Order_Details GROUP BY ProductIdORDER BY ProductId

ProductId Cantidad SubTotal Descuento--------------------- --------------------- --------------------- ------------------------- 1 828 14277.6000

1489.5000209808352 1057 18559.2000

2203.24002456665043 328 3080.0000 36.04 453 9424.8000

856.90000152587891... ... .... ....

Page 40: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Que productos estan por arriba de las 500 unidades de venta ?

SELECT ProductId, SUM(Quantity) AS Cantidad, SUM(Quantity * UnitPrice) AS SubTotal, SUM(Quantity * UnitPrice * Discount) AS DescuentoFROM Order_Details GROUP BY ProductId HAVING SUM(Quantity) > 500 ORDER BY

ProductId

ProductId Cantidad SubTotalDescuento

--------------------- --------------------- --------------------- --------------------------

1 828 14277.60001489.500020980835

2 1057 18559.20002203.2400245666504

7 763 22464.0000419.70001697540283

10 742 22140.20001272.8600521087646

... ... .... ....

Page 41: Sq Lv1a

Joins

Es una consulta donde se combinan múltiples tablas

Para obtener el total de ventas por cliente se deben emplear las tablas Orders y Order_Details

OrderId es el campo que relaciona a ambas tablas

Es una práctica comun usar alias para identificar las tablas y distinguir los campos con el mismo nombre

Page 42: Sq Lv1a

Producto cartesiano

Ocurre cuando no se especifica condición de relación para las tablas que forman parte de la consulta

El resultado de un producto cartesiano son todas la combinaciones posibles de los registros de las tablas que se consultan

El resultado es muy largo

Page 43: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Cual fue el total de ventas por cliente en 1998 ?

SELECT CustomerId, S.OrderId, Quantity, UnitPrice, Discount

FROM Orders S, Order_Details DWHERE S.OrderId = D.OrderId AND YEAR(OrderDate) = 1998ORDER BY CustomerIdCustomerId OrderId Quantity UnitPrice Discount

------------------------ ---------- ----------- ----------------------- -------------ALFKI 10835 15 55.0000 0.0ALFKI 10835 2 13.0000 0.2ALFKI 10952 16 25.0000 5.0000E-2... ... ... ... ...ANATR 10926 2 21.0000 0.0ANATR 10926 10 6.0000 0.0ANATR 10926 7 9.200 0.0... ... ... ... ...

Page 44: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Cual fue el total de ventas por cliente en 1998 ?

SELECT CustomerId,SUM(Quantity) AS Cantidad, SUM(UnitPrice * Quantity) AS Total,SUM(UnitPrice * Quantity * Discount) AS DescuentoFROM Orders S, Order_Details DWHERE S.OrderId = D.OrderId AND YEAR(OrderDate) = 1998 GROUP BY CustomerID ORDER BY CustomerId

CustomerId Cantidad Total Descuento------------------------ ------------------------ --------------------------------------------------- ALFKI 95 2302.200051.700000286102295ANATR 29 514.4000 0.0ANTON 40 660.0000 0.0AROUT 174 5838.5000 233.75... ... ... ...

Page 45: Sq Lv1a

Ejemplo SELECT (modelo de ventas)

Del total de ventas por cliente en 1998, quienes obtuvieron un descuento total mayor al 10 % ?

SELECT CustomerId,SUM(Quantity) AS Cantidad, SUM(UnitPrice * Quantity) AS Total,SUM(UnitPrice * Quantity * Discount) AS DescuentoFROM Orders S, Order_Details DWHERE S.OrderId = D.OrderId AND YEAR(OrderDate) = 1998 GROUP BY CustomerID HAVING SUM(UnitPrice * Quantity * Discount) >

SUM(UnitPrice * Quantity) * 0.10 ORDER BY CustomerId

Page 46: Sq Lv1a

Ejemplo SELECT (modelo de libros)

Quien es el Autor mas vendido ?

SELECT Au_id, s.Title_id, Ord_num, QtyFROM Sales s, Titleauthor tWHERE s.Title_id = t.Title_id ORDER BY Au_id

Au_id Title_id Ord_num Qty ---------------------- --------------------- -----------------------------------172-32-1176 PS3333 P3087a 15213-46-8915 BU1032 68715213-46-8915 BU1032 423LL93010213-46-8915 BU2075 X99935238-95-7766 PC1035 QA879.130267-41-2394 BU1111 P723 25267-41-2394 TC7777 P2121 20274-80-9391 BU7832 QQ229915409-56-7008 BU1032 6871 5409-56-7008 BU1032 423LL930 10... ... ... ...

Page 47: Sq Lv1a

Ejemplo SELECT (modelo de libros)

Quien es el Autor mas vendido ?

SELECT Au_id, s.Title_id, SUM(Qty) AS CantidadFROM Sales s, Titleauthor t WHERE s.Title_id =

t.Title_idGROUP BY Au_id, s.Title_id ORDER by Au_id

Au_id Title_idCantidad-------------------- -------------------------------- 172-32-1176 PS3333 15213-46-8915 BU103215213-46-8915 BU207535238-95-7766 PC1035 30267-41-2394 BU1111 25267-41-2394 TC7777 20274-80-9391 BU7832 15409-56-7008 BU1032 15... ... ...

Page 48: Sq Lv1a

Ejemplo SELECT (modelo de libros)

Quien es el Autor mas vendido ?

SELECT Au_id, SUM(Qty) AS CantidadFROM Sales s, Titleauthor t WHERE s.Title_id =

t.Title_idGROUP BY Au_id ORDER by Cantidad DESC

Au_idCantidad----------------------------------- 899-46-2035 148998-72-3567 133213-46-8915 50427-17-2319 50846-92-7186 50267-41-2394 45724-80-9391 45... ...

Page 49: Sq Lv1a

Ejemplo SELECT (modelo de libros)

Quien es el Autor mas vendido ?

SELECT Au_id, SUM(Qty) AS CantidadINTO Ventas_AutorFROM Sales s, Titleauthor t WHERE s.Title_id =

t.Title_idGROUP BY Au_id ORDER by Cantidad DESC

SELECT * FROM Ventas_Autor

Au_idCantidad----------------------------------- 899-46-2035 148998-72-3567 133213-46-8915 50427-17-2319 50846-92-7186 50267-41-2394 45724-80-9391 45... ...

Page 50: Sq Lv1a

Ejemplo SELECT (modelo de libros)

Cual es el almacén con mayores ventas ?

SELECT Stor_name, SUM(Qty) AS Cantidad, SUM(Qty * Price) AS Total FROM Stores o, Sales s, Titles tWHERE s.Title_id = t.Title_id AND o.Stor_id = s.Stor_idGROUP BY Stor_name ORDER BY 3 DESC

Stor_name Cantidad Total----------------------------------------------------- ---------------------

------------- Barnum's 125 2003.3750News & Brews 90

1634.9300Doc-U-Mat: Quality Laundry and Books 130

1540.1650... ... ...

Page 51: Sq Lv1a

Ejemplo “Self Join” (modelo de ventas)

Quien es el supervisor de cada empleado ?

SELECT a.FirstName + " " + a.Lastname AS Empleado,

b.FirstName + " " + b.LastName AS SupervisorFROM Employees a, Employees bWHERE a.ReportsTo=b.Employeeid ORDER BY EmpleadoEmpleado Supervisor

--------------------------------------------------------------

Anne Dodsworth Steven BuchananJanet Leverling Andrew FullerLaura Callahan Andrew FullerMargaret Peacock Andrew FullerMichael Suyama Steven Buchanan... ...

Page 52: Sq Lv1a

Ejercicio sobre el modelo de ventas

Anualmente la compañia de ventas otorga un estímulo a sus empleados de acuerdo con los siguientes criterios

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.

Los empleados con mayores ventas Para ambos casos hay que obtener los 5

primeros vendedores, nombre completo y quien es su jefe inmediato.

Page 53: Sq Lv1a

Ejercicio sobre el modelo de ventas

Además, el proveedor “Gai pâturage” otorga un premio adicional al empleado que más haya vendido sus productos

El proveedor solicita a la compañia de ventas el domicilio del empleado que resulte ganador

Page 54: Sq Lv1a

Manipulación de datos Sentencia INSERT (Agregar nuevos

registros)

INSERT INTO tabla VALUES (lista_expresiones)

INSERT INTO tabla (lista_columnas)VALUES (lista_expresiones)

Page 55: Sq Lv1a

Ejemplo INSERT (modelo de ventas)

El empleado con clave 5 agrega un nuevo pedido para el cliente "CHOPS".

INSERT INTO Orders (EmployeeId, CustomerId, OrderDate,

RequiredDate)VALUES (5 , "CHOPS" , GETDATE() , "05/01/2001")

OrderID 11079CustomerIDCHOPSEmployeeID 5OrderDate 2001-04-06 02:21:46.127RequiredDate 2001-05-01 00:00:00.000 ShippedDate NULLShipVia NULLFreight NULLShipName NULL... NULL

Page 56: Sq Lv1a

Ejemplo INSERT (modelo de ventas)

Agregando los productos 15 y 17 al nuevo pedido

INSERT INTO Order_DetailsVALUES (11079 , 15 , 15.50 , 5 , 0.2)

INSERT INTO Order_DetailsVALUES (11079, 17 , 39.00 , 10 , 0.2)

Page 57: Sq Lv1a

Ejemplo INSERT (modelo de ventas)

Según la definición de la tabla Order_Details (Diapositiva N° 20), que sucede en cada uno de los siguientes casos:

INSERT INTO Order_Details VALUES (11079, 73 , 13.00 , 0 , 0.0)

INSERT INTO Order_Details VALUES (11079, 73 , 15.00 , 10 , 2.0)

INSERT INTO Order_Details (OrderId,ProductId) VALUES (11079 , 73)

Page 58: Sq Lv1a

Manipulación de datos Sentencia UPDATE (Actualizar columnas)

UPDATE tabla SET Columna1 = Expresion1, Columna2 = Expresion2 ,....... , ColumnaN = ExpresionN

[WHERE condicion] UPDATE tabla SET (lista_columnas) = (lista_expresiones)[WHERE condicion]

Page 59: Sq Lv1a

Ejemplo UPDATE (modelo de libros)

Incrementando un 10% el precio de los libros

UPDATE Titles SET Price = Price + Price * 0.10

Actualizando los datos del autor Johnson White

UPDATE Authors SET

phone = "409 496-7224" , address = "1024 Park Av." ,

city = "New York" , state = "NY" , zip = 25040

WHERE au_lname = "White" AND au_fname = "Johnson"

Page 60: Sq Lv1a

Manipulación de datos

Sentencia DELETE (Borrar registros)

DELETE FROM tabla [WHERE condicion]

Page 61: Sq Lv1a

Ejemplo DELETE (modelo de libros)

Borra todos los Autores con contrato no vigente

SELECT COUNT(*) AS CuantosFROM Authors WHERE contract = 0

DELETE FROM AuthorsWHERE contract = 0

Cuantos----------- 4

(4 row(s) affected)

Page 62: Sq Lv1a

Borrado de registros e Integridad Referencial

Borra todos los Pedidos

DELETE FROM Orders

Provoca un error ya que existe una relacion formal entre las tablas Orders y Order_Details

ALTER TABLE Order_Details ADD FOREIGN KEY (OrderID) REFERENCES Orders

Esta relación obliga a que los pedidos de la tabla Order_Details existan en la tabla Orders

Si no existen pedidos sería incoherente tener el detalle de cada uno de ellos.

Page 63: Sq Lv1a

Consultas avanzadas y “Subqueries”

Outer Join 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.

Un “Outer Join” sobre la tabla Order_Details, regresa todos los pedidos tengan o no registros en la tabla de detalle.

Orders

Order_Details

Orders

OuterOrder_Detail

s

Page 64: Sq Lv1a

Ejemplo “OUTER JOIN” (modelo de ventas)

Que pedidos no tienen detalle ?

SELECT S.OrderId, Quantity, UnitPrice, DiscountFROM Orders S LEFT OUTER JOIN Order_Details

DON S.OrderId = D.OrderId WHERE Quantity IS NULLORDER BY S.OrderId

OrderId Quantity UnitPriceDiscount

---------- --------------------- --------------------- ----------------

11078 NULL NULL NULL11080 NULL NULL NULL

Page 65: Sq Lv1a

Sintáxis de la sentencia “JOIN” en SQLServer

Normalmente un “JOIN” se realiza

SELECT ProductID, Suppliers.SupplierID

FROM Suppliers, Products WHERE (Suppliers.SupplierID =

Products.SupplierID)

Para SQLServer existe una sintáxis alternativa

SELECT ProductID, Suppliers.SupplierIDFROM Suppliers JOIN Products ON (Suppliers.SupplierID = Products.SupplierID)

Page 66: Sq Lv1a

Ejemplo “OUTER JOIN” (modelo de ventas)

Cual es el total de pedidos por cliente ?

SELECT C.CustomerID, COUNT(OrderID) AS TotalPedidos

FROM Customers C FULL OUTER JOIN Orders OON C.Customerid = O.CustomeridGROUP BY C.CustomerIDORDER BY TotalPedidos

CustomerIDTotalPedidos ---------------------

-----------------FISSA 0PARIS 0CENTC 1GROSR 2LAZYK 2... ...

Page 67: Sq Lv1a

Ejemplo “OUTER JOIN” (modelo de libros)

Que libros no tienen editor o que editor no tiene libros ?

SELECT T.title AS Libro, P.pub_name AS EditorFROM Publishers P FULL OUTER JOIN Titles TON T.pub_id = P.pub_idWHERE T.pub_id IS NULL OR P.pub_id IS NULLORDER BY P.pub_name

Libro Editor---------------------

----------------------------- NULL Five Lakes

PublishingNULL GGG&GNULL Lucerne

PublishingNULL Ramona

PublishersNULL Scootney Books

Page 68: Sq Lv1a

Ejemplo “INNER JOIN” (modelo de libros)

Que libros corresponden a cada editor ?

SELECT T.title AS Libro, P.pub_name AS EditorFROM Publishers P INNER JOIN Titles TON T.pub_id = P.pub_idORDER BY P.pub_name

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 & HardleyThe Gourmet Microwave Binnet & Hardley... ...

Page 69: Sq Lv1a

Ejemplo sin “JOIN” (modelo de libros)

Cual es el total de venta por editor ?

SELECT P.pub_name AS Editor, SUM(T.price * S.qty) AS TotalVenta FROM Publishers P, Titles T, Sales S WHERE T.pub_id = P.pub_idAND T.title_id = S.title_id GROUP BY P.pub_name ORDER BY P.pub_name

Editor TotalVenta-------------------------------------------

-----------------------Algodata Infosystems 2845.6450Binnet & Hardley 2340.9100New Moon Books 2158.0350

Page 70: Sq Lv1a

Ejemplo “INNER JOIN” (modelo de libros)

Cual es el total de venta por editor ?

SELECT P.pub_name AS Editor, SUM(T.price * S.qty) AS TotalVenta FROM Publishers

PINNER JOIN Titles T ON T.pub_id = P.pub_idINNER JOIN Sales S ON T.title_id = S.title_id GROUP BY P.pub_name ORDER BY P.pub_name

Editor TotalVenta-------------------------------------------

-----------------------Algodata Infosystems 2845.6450Binnet & Hardley 2340.9100New Moon Books 2158.0350

Page 71: Sq Lv1a

Ejemplo “OUTER JOIN” (modelo de libros)

Cual es el total de venta por editor ?

SELECT P.pub_name AS Editor, SUM(T.price * S.qty) AS TotalVenta FROM Publishers

PFULL OUTER JOIN Titles T ON T.pub_id = P.pub_idFULL OUTER JOIN Sales S ON T.title_id = S.title_id

GROUP BY P.pub_name ORDER BY P.pub_name Editor TotalVenta

------------------------------------------------------------------------

Algodata Infosystems 2845.6450Binnet & Hardley 2340.9100Five Lakes Publishing NULLGGG&G NULLLucerne Publishing NULLNew Moon Books 2158.0350Ramona Publishers NULLScootney Books NULL

Page 72: Sq Lv1a

Subqueries

Es una sentencia SELECT dentro de otra sentencia SELECT (o DELETE, UPDATE o INSERT)

Debe estar encerrada entre parentesis No debe incluir la cláusula ORDER BY Debe tener al menos la estructura

básica SELECT lista_expresiones FROM tabla

Page 73: Sq Lv1a

Ejemplo “Subquery” (modelo de ventas)

Que clientes están en la misma ciudad que el cliente "Familia Arquibaldo" ?

SELECT CompanyName,ContactName,City FROM CUSTOMERS WHERE City IN (SELECT City FROM Customers WHERE CompanyName LIKE "%Familia Arquibaldo%")

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

Page 74: Sq Lv1a

Ejemplo “Subquery” (modelo de ventas)

Que proveedores surten condimentos ?

SELECT Companyname,City,Country FROM Suppliers WHERE SupplierId IN ( SELECT SupplierId FROM Products WHERE

CategoryId IN ( SELECT CategoryId FROM Categories WHERE CategoryName LIKE "%Condiments%"))ORDER BY Companyname

Companyname City Country

------------------------------------------- ---------------------- ---------------

Exotic Liquids London UKForêts d'érables Ste-Hyacinthe CanadaGrandma Kelly's Homestead Ann Arbor USALeka Trading Singapore

Singapore... ... ...

Page 75: Sq Lv1a

Ejemplo (modelo de ventas)

Que proveedores surten condimentos ?

SELECT Companyname,City,Country FROM Suppliers S, Products P, Categories CWHERE S.SupplierId=P.SupplierIdAND P.CategoryId=C.CategoryIdAND C.CategoryName LIKE "%Condiments%"ORDER BY CompanyName

Companyname City Country

------------------------------------------- ---------------------- ---------------

Exotic Liquids London UKForêts d'érables Ste-Hyacinthe CanadaGrandma Kelly's Homestead Ann Arbor USAGrandma Kelly's Homestead Ann Arbor USA... ... ...

Page 76: Sq Lv1a

Ejemplo (modelo de ventas)

Que proveedores surten condimentos ?

SELECT DISTINCT Companyname,City,Country FROM Suppliers S, Products P, Categories CWHERE S.SupplierId=P.SupplierIdAND P.CategoryId=C.CategoryIdAND C.CategoryName LIKE "%Condiments%"ORDER BY CompanyName

Companyname City Country

------------------------------------------- ---------------------- ---------------

Exotic Liquids London UKForêts d'érables Ste-Hyacinthe CanadaGrandma Kelly's Homestead Ann Arbor USALeka Trading Singapore

Singapore... ... ...