Está en la página 1de 90

Microsoft Sql Server Database Development

MCT . Jos Gabriel Esparza Castr

CONTENIDO DEL CURSO


Capitulo 1 Recuperando Datos Capitulo 2 Modificando Datos (Insert,

Update y Delete)

Capitulo 3 Tablas, Tipos de datos e

integridad de datos declarativ

Capitulo 4 Utilizando tcnicas de

consulta adicionales

Capitulo 5 Funciones, Procedimientos

Almacenados, vistas y triggers

Capitulo 6 Tcnicas para mejorar el

rendimiento de las consultas

Capitulo 7Extendiendo la funcionalidad

de SQL con XML, SQLCLR y filestream

Extendiendo la funcionalidad Capitulo 8

de SQL con Full-Text Search y Service Broker

Introduccin a las caracterstic Capitulo 9 de manejabilidad

Leccin 1 Consultando datos Sintaxis Select Manipulando conjunto de resultados

La sentencia Select debe incluir al men Una clausula SELECT y otra FROM
Comodn
SELECT * FROM HumanResources.Employee;

Campos individuales
SELECT LoginID, JobTitle, BirthDate, MaritalStatus, Gender FROM HumanResources.Employee;

Registros nicos
SELECT DISTINCT color FROM Production .Product ;

Clausula Where
SELECT DISTINCT color FROM Production .Product WHERE color IS NOT NULL;

SET ANSI_NULLS OFF; SELECT DISTINCT color FROM Production.Product WHERE color <> NULL;

La clausula WHERE puede incluir una variedad de condiciones de bsqueda que pueden incluir Operadores y predicados booleanos tales como: LIKE, BETWEEN, EXISTS, IS NULL, IS NOT NULL y CONTAINS.

La clusula CONTAINS est disponible slo cuando creas un ndice full-text en la columna que est siendo comparada.

Qu Sucede con el rendimiento en el uso de las clusulas AND, OR y NOT en un predicado WHERE ejecutado sobre columnas con ndice?

Clausula LIKE
La clusula KIKE nos permite encontrar coincidencia de patrones de caracteres para una columna tipo cadena especificada. Tiene los siguientes comodines.

Reemplaza a cualquier nmero de caracteres en la cadena. Por ejemplo, %at debe coincidir con at, cat, hat, y that. _ reemplaza exactamente a un carcter en la cadena, por jemplo: _at debe coincidir con cat y hat, pero no con that o at.

[ ] Reemplaza cualquier caracter que cumple con un rango de caracteres. Una serie es representada por una lista de caracteres, por ejemplo [abcd]; pero los caracteres pueden ser separados por comas, por ejemplo [a,b,c,d]. Un rango es sepaarado por un guin, por ejemplo [ad]. ^ Representa a cualquier carcter que no se encuentra en una rango especificado, Por ejemplo : ny character not within a set or range of characters. For example, [^a-d] would be equal to [ez].

SELECT BusinessEntityID, JobTitle FROM HumanResources.Employee WHERE JobTitle LIKE 'Market%'; SELECT BusinessEntityID, JobTitle FROM HumanResources.Employee WHERE JobTitle LIKE [CE]% ORDER BY JobTitle;

SELECT BusinessEntityID, JobTitle FROM HumanResources.Employee WHERE JobTitle LIKE [C-E]% ORDER BY JobTitle;

Clasula BETWEEN
La clusula BETWEEN regresa todos los registros basados en un rango de valores.

SELECT ProductNumber, Name, Color FROM Production.Product WHERE ListPrice BETWEEN 50 AND 80

Alias de tablas y columnas


Puedes definir un alias de tabla para ser utilizada cuando no es deseable teclear repetidamente el nombre de la tabla a travs de una consulta.

SELECT PP.FirstName AS 'First Name', PP.LastName AS 'Last Name, PP.PersonType AS 'Person Category' FROM Person.Person AS PP ORDER BY PersonType

Crear una consulta que represente en una sola columna el nombre completo de la persona en la tabla Person

Ejercicios

1.- Ejecutar un cdigo que regrese solamente las columnas ProductSubcategoryID , ProductCategoryID , Name y ModifiedDate . 2.- Ejecutar un cdigo que regrese solamente las columnas de la consulta anterior, pero filtrando slo aquellos productos que tengan la categoria BIKE en cualquier lugar de la columna NAME 3.- Ejecutar un cdigo que regrese solamente las columnas de la consulta anterior, pero filtrando slo aquellos productos que tengan la categoria BIKE en cualquier lugar de la columna NAME , dicha comlumna debe tener un alias llamado Subcategory Name

4.- Ejecutar la misma consulta anterior, pero que ordene de manera ascendente a travs de la columna

Subcategory Name

Leccin Uniendo tablas relacionadas 2


Usando el Operador JOIN

- Operadores INNER, OUTER, FULL y CROSS JOIN.

El operador JOIN permite retornar datos de columnas almacenadas en mltiples tablas relacionadas. Cuando se define una condicin JOIN, necesitas definir las tablas que sern unidas, el tipo de unin y la condicin de la unin, la cul est compuesta de las columnas de las tablas que sern unidas y el operador lgico. INNER JOIN es el tipo de unin por default cuando slo se especifica la palabra JOIN.

SELECT FirstName, LastName, JobTitle, VacationHours, SickLeaveHours FROM HumanResources.Employee E INNER JOIN Person.Person P ON E.BusinessEntityID = P.BusinessEntityID;

SELECT FirstName, LastName, JobTitle, VacationHours, SickLeaveHours FROM HumanResources.Employee INNER JOIN Person.Person ON HumanResources.Employee.BusinessEntityID = Person.Person.BusinessEntityID;

Outer Joins
Un outer join se puede utilizar para regresar todos los registros de una tabla y slo la informacin de los registros que son en comn de la otra tabla o puede regresar todos los registros de todas las tablas en la clusula JOIN. La palabra OUTER se puede omitir de la sintaxis, pero debes especificar LEFT, RIGHT o FULL.

SELECT FirstName, LastName, JobTitle, VacationHours, SickLeaveHours FROM HumanResources.Employee E RIGHT OUTER JOIN Person.Person P ON E.BusinessEntityID = P.BusinessEntityID;

SELECT FirstName, LastName, JobTitle, VacationHours, SickLeaveHours FROM Person.Person P LEFT OUTER JOIN HumanResources.Employee E ON E.BusinessEntityID = P.BusinessEntityID;

Cross Joins
Cross joins tiene como resultado lo que se conoce como Producto Cartesiano de las dos tablas. Cada registro de la primer tabla se une con cada registro de la segunda tabla en la clausula JOIN.

Trabajando ms de una tabla


Una recomendacin general para el rendimiento es evitar operaciones JOIN que incluyen ms de cuatro o cinco tablas. You should always test new JOIN statements, especially those containing a large number of tables or rows, on a nonproduction server to avoid problems caused by long-running, resource-intensive queries.

SELECT FirstName, LastName, JobTitle, VacationHours, SickLeaveHours, EmailAddress FROM HumanResources.Employee INNER JOIN Person.Person ON HumanResources.Employee.BusinessEntityID = Person.Person.BusinessEntityID INNER JOIN Person.EmailAddress ON Person.Person.BusinessEntityID = Person.EmailAddress.BusinessEntityID

Self-Join
Es cuando una sola tabla es referenciada ms de una vez en la clusula JOIN porque sta utiliza un alias diferente cada vez que sta se refiere a una tabla.

SELECT E.FirstName + ' ' + E.LastName AS 'Employee Name' , DS.FirstName + ' ' + DS.LastName AS 'Direct Supervisor' FROM DimEmployee E INNER JOIN DimEmployee DS ON E.ParentEmployeeKey = DS.EmployeeKey;

Ejercicios

1.-

USE AdventureWorks; SELECT ProductSubcategoryID, ProductCategoryID , Name AS 'Subcategory Name' FROM Production.ProductSubcategory WHERE Name LIKE '%Bike%' ORDER BY [Subcategory Name];

2.-Nota

que los resultados incluyen el numero de la categoria del producto, pero no el nombre de la categoria. modifica la consulta para solucionar esa situacin haciendo un Join de la tabla ProductCategory a ProductSubcategory.

3.- Ahora agrega la tabla Producto, de tal forma que


puedas ver los productos existentes en cada una de esas subcategorias.

4.-

Ejecuta una consulta para retornar pares de rdenes de compra que tienen el mismo vendedor y mtodo de envo.

USE AdventureWorks2008; SELECT a.PurchaseOrderID , b.PurchaseOrderID , a.VendorID , a.ShipMethodID FROM Purchasing.PurchaseOrderHeader AS a JOIN Purchasing.PurchaseOrderHeader AS b ON a.VendorID = b.VendorID AND a.ShipMethodID = b.ShipMethodID WHERE a.PurchaseOrderID < b.PurchaseOrderID;

5.-

Para el ejemplo anterior, hacer ms fcil la lectura remplazando los IDs de los vendedores y los IDs de los mtodos de envo con sus respectivos nombres

Trabajando con funciones agregadas


COUNT Returns the number of values contained in the data set. COUNT (*) returns the number of rows in the set. When a column is specified, such as COUNT(FaxNo), the value returned reflects the number of rows that contain data in that column. NULL values are ignored. In addition, COUNT DISTINCT returns the number of unique non-NULL values in the data set.

COUNT_BIG Works the same as COUNT, but it returns the bigint data type, while COUNT returns only the int data type. MAX Returns the highest value in the data set for numeric, data, and character-based fields. MIN Returns the lowest value in the data set for numeric, data, and character-based fields.

SUM Returns the total of the values in the data set. You can specify ALL or DISTINCT to produce either the sum of all values or only distinct values in the data set. STDEV Returns the statistical standard deviation of the values in the data set. STDEVP Returns the statistical standard deviation for the population of the values in the data set. VAR Returns the statistical variance of the values in the data set. VARP Returns the statistical variance for the population of the values in the data set.

SELECT AVG(Listprice) AS 'Average' , MIN(Listprice) AS 'Minimum' , MAX(Listprice) AS 'Maximum FROM Production.Product WHERE ListPrice <> 0;

GROUP BY
SELECT Production.Product.ProductSubcategoryID , AVG(Listprice) AS 'Average' , MIN(Listprice) AS 'Minimum' , MAX(Listprice) AS 'Maximum' FROM Production.Product WHERE ListPrice <> 0 GROUP BY Product.ProductSubcategoryID;

También podría gustarte