Está en la página 1de 90

MCT.

Jos Gabriel Esparza Castro

CONTENIDO DEL CURSO


Capitulo 1 Capitulo 2 Capitulo 3

Recuperando Datos Modificando Datos (Insert, Update y Delete) Tablas, Tipos de datos e integridad de datos declarativa

Capitulo 4

Utilizando tcnicas de consulta adicionales Funciones, Procedimientos Almacenados, vistas y triggers Tcnicas para mejorar el rendimiento de las consultas

Capitulo 5

Capitulo 6

Capitulo 7

Extendiendo la funcionalidad de SQL con XML, SQLCLR y filestream de SQL con Full-Text Search y Service Broker

Capitulo 8 Extendiendo la funcionalidad

Capitulo 9 Introduccin a las caractersticas

de manejabilidad

Leccin 1

Consultando datos
Sintaxis Select Manipulando conjunto de resultados

La sentencia Select debe incluir al menos Una clausula SELECT y otra FROM
Comodn
SELECT * FRO H Res rces.Empl yee;

Campos individuales
SELECT LoginID, JobTitle, BirthD te, FRO H manResources.Employee; rit lSt t s, Gender

Registros nicos
SELECT DISTINCT color M Production .Product ;

Clausula Where
SELECT DISTINCT color M Production .Product W ERE color IS N T NULL;

SET ANSI_NULLS

SELECT DISTINCT color ROM Production.Product W ERE 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 [a d]. ^ 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 [e z].

SELECT BusinessEntityID, JobTitle ROM umanResources.Employee W ERE JobTitle LIKE 'Market%'; SELECT BusinessEntityID, JobTitle ROM umanResources.Employee W ERE JobTitle LIKE [CE]% ORDER BY JobTitle; SELECT BusinessEntityID, JobTitle ROM umanResources.Employee W ERE 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 ROM Production.Product W ERE 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. irstName AS ' irst Name', PP.LastName AS 'Last Name , PP.PersonType AS 'Person Category' ROM 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 2 Uniendo tablas relacionadas


Usando el Operador JOIN
- Operadores INNER, OUTER, ULL 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 First ame, Last ame, Jo Title, VacationHours, Sic LeaveHours FRO HumanResources.Employee E erson. erson P I ER JOI O E. usinessEntityI = P. usinessEntityI ;

SELECT irstName, LastName, JobTitle, acation ours, SickLeave ours ROM umanResources.Employee INNER JOIN Person.Person ON umanResources.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 First ame, Last ame, Jo Title, VacationHours, Sic LeaveHours, Email ress FRO HumanResources.Employee I ER JOI Person.Person O HumanResources.Employee. usinessEntityI = Person.Person. usinessEntityI I ER JOI Person.Email ress O Person.Person. usinessEntityI = ress. usinessEntityI Person.Email

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. endorID , a.ShipMethodID ROM Purchasing.PurchaseOrder eader AS a JOIN Purchasing.PurchaseOrder eader AS b ON a. endorID b. endorID AND a.ShipMethodID b.ShipMethodID W ERE 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 A G(Listprice) AS 'Average' , MIN(Listprice) AS 'Minimum' , MAX(Listprice) AS 'Maximum ROM Production.Product W ERE ListPrice <> 0;

GROUP BY
SELECT Production.Product.ProductSubcategoryID , A G(Listprice) AS 'Average' , MIN(Listprice) AS 'Minimum' , MAX(Listprice) AS 'Maximum' ROM Production.Product W ERE ListPrice <> 0 GROUP BY Product.ProductSubcategoryID;

También podría gustarte