Вы находитесь на странице: 1из 12

17/03/2010

Prof. Marlon S. Ramrez M.

Curso de Microsoft SQL Server


Programacin
Unidad 2 - Usando Transact-SQL (16hrs)
1. Consulta de los datos
2. Consultas multi-tablas
3. Funciones SQL
4. Grupos y Agregacin

Prof. Marlon S. Ramrez M.

1.
2.
3.
4.

Consultas de los datos


Consultas multi-tablas
Funciones SQL
Grupos y Agregacin

USANDO TRANSACT-SQL

SQL Server - Programacin

USANDO TRANSACT-SQL

17/03/2010

Prof. Marlon S. Ramrez M.

La instruccin SELECT
Clausula
SELECT

Descripcin

FROM

Seguida del nombre de la tabla o vista, o mltiples tabla con


expresiones de JOIN

WHERE

Seguida por criterios de filtraje

ORDER BY

Seguida por una lista de columna de ordenacin

Seguida de una lista de columnas o un asterisco. Indicando que


quieres obtener todas las columnas

Ejemplos
SELECT Name, StandardCost, Color FROM Production.Product
SELECT * FROM Production.Product

SQL Server - Programacin

USANDO TRANSACT-SQL

Prof. Marlon S. Ramrez M.

Consulta Multi-Tabla
PRCTICA 3.1: Ejecutar las siguientes
consultas y analizar sus diferencias.
SELECT ProductID
,Name
,Color
,StandardCost
,ListPrice
FROM Production.Product
SELECT ProductID
,Name
Agregando
,Color
informacin
,StandardCost
sobre el
,ListPrice
Modelo
,ProductModelId
,Name
FROM Production.Product
INNER JOIN Production.ProductModel
ON Production.Product.ProductModelID =
Production.ProductModel.ProductModelID
SQL Server - Programacin

SELECT ProductID
, Production.Product.Name
Falla
,Color
corregida
,StandardCost
,ListPrice
, Production.ProductModel.ProductModelID
, Production.ProductModel.Name
FROM Production.Product
INNER JOIN Production.ProductModel
ON Production.Product.ProductModelID =
Production.ProductModel.ProductModelID
SELECT Production.Product.ProductID
,Production.Product.Name AS Product
Nombre
,Production.Product.Color
completo
,Production.Product.StandardCost
,Production.Product.ListPrice
,Production.ProductModel.ProductModelId
,Production.ProductModel.Name AS Model
FROM Production.Product
INNER JOIN Production.ProductModel
ON Production.Product.ProductModelID =
Production.ProductModel.ProductModelID

USANDO TRANSACT-SQL

17/03/2010

Prof. Marlon S. Ramrez M.

Esquemas y Resolucin de
Nombres

Cada objeto en SQL Server es identificado por


cuatro partes

Servidor
Base de datos
Esquema
Objeto

Algunos de acuerdo al contexto pueden ser


omitidos
Ejemplo
SELECT AdventureWorks2008.Production.Product.ProductID
FROM WoodVista.AdventureWorks2008.Production.Product

El esquema por defecto en dbo.


SQL Server - Programacin

USANDO TRANSACT-SQL

Prof. Marlon S. Ramrez M.

Alias de Columnas

Razones para cambiar el nombre a una columna

Ms fcil de entender
Nombre ms descriptivo
Compatibilidad hacia atrs
Nombre repetidos en consultas multi-tablas

PRACTICA 3.2: Ejecutar el ejemplo de tres diferentes sintaxis para


implementar un alias en una columna.
Sintaxis

Descripcin

Ejemplo

Column AS
Alias

La tcnica ms
legible.

SELECT ListPrice - StandardCost AS Margin


FROM Production.Product

Column Alias

La tcnica mas
comn

SELECT ListPrice - StandardCost Margin


FROM Production.Product

Alias = Column

No es comn
en T-SQL

SELECT Margin = ListPrice - StandardCost


FROM Production.Product

SQL Server - Programacin

USANDO TRANSACT-SQL

17/03/2010

Prof. Marlon S. Ramrez M.

Columnas Calculadas y Derivadas


La columna calculada es resultado de una expresin o calculo.
PRCTICA 3.3: Ejecutar los ejemplos mostrados
1.

Calculando un cantidad a partir de dos columnas


SELECT SalesOrderID, ProductID
,UnitPrice * OrderQty As PurchasePrice
FROM Sales.SalesOrderDetail

2.

Usando una funcin


SELECT NationalIDNumber,BirthDate
,DATEDIFF(YY, BirthDate, GETDATE()) As Age
FROM HumanResources.Employee

3.

Con un valor constante


SELECT Name, ListPrice,
'Mountain Bike' AS SubCategoryName
FROM Production.Product WHERE ProductSubCategoryID = 1

4.

Concatenando campos y con alias en columnas y tablas


SELECT
PP.FirstName + ' ' + PP.LastName AS Name
, PP.Title AS Titulo
FROM Person.Contact AS PP
ORDER BY Titulo

SQL Server - Programacin

USANDO TRANSACT-SQL

Prof. Marlon S. Ramrez M.

Filtrando Registros
Existen dos maneras para limitar la cantidad de
registros resultantes de una consulta
WHERE revisa cada registro contra un criterio de
filtraje
TOP limita los registros de acuerdo a una cantidad de
registros

Ejemplos
SELECT Name, StandardCost, Color
FROM Production.Product
WHERE Color = Black

SQL Server - Programacin

SELECT Name, ListPrice


FROM Production.Product
WHERE ListPrice < 5.00

USANDO TRANSACT-SQL

17/03/2010

Prof. Marlon S. Ramrez M.

Operadores de Comparacin
Operadores

Operador LIKE

Operador

Comodn

Descripcin
Igual que

Descripcin

Cualquier cadena de cero o


ms caracteres

<> !=

No igual que

<

Menor que

Cualquier nico carcter

>

Mayor que

[]

!<

No menor que

Cualquier nico carcter


dentro del rango
especificado

!>

No mayor que

[^]

<=

Menor o igual que

Cualquier nico carcter


fuera del rango especificado

>=

Mayor o igual que

LIKE

Para comparar valores de


caracteres con comodines

SQL Server - Programacin

USANDO TRANSACT-SQL

Prof. Marlon S. Ramrez M.

PRCTICA 3.4a: Creando Tabla de pruebas


Ejecutar las siguientes
Instrucciones

Tabla de Pruebas
Lastname

Firstname

Position

Flintstone

Fred

Bronto Driver

Rubble

Barney

Accountant

Turley

Paul

Developer

Wood

Dan

DBA

Rockhead

Don

System
Administrator

Rockstone

Pauline

Manager

SQL Server - Programacin

USE AdventureWorks2008
GO
CREATE TABLE dbo.SlateGravel
( LastName varchar(25) NULL
,FirstName varchar(25) NULL
,Position varchar(25) NULL);
INSERT SlateGravel
VALUES
(Flintstone, Fred, Bronto Driver)
,(Rubble, Barney, Accountant)
,(Turley, Paul, Developer)
,(Wood, Dan, DBA)
,(Rockhead, Don, System Administrator)
,(Rockstone, Pauline, Manager)

USANDO TRANSACT-SQL

10

17/03/2010

Prof. Marlon S. Ramrez M.

PRCTICA 3.4b: Analizando el uso del


operador LIKE
1.

Ejecutar las siguientes instrucciones y analizar el resultado.


No Instruccin

Resultado Esperado

SELECT * FROM SlateGravel


WHERE LastName LIKE Flint%

Flintstone

SELECT * FROM SlateGravel


WHERE LastName LIKE %stone

Flintstone y Rockstone

SELECT * FROM SlateGravel


WHERE LastName LIKE %sto%

Flintstone y Rockstone

SELECT * FROM SlateGravel


WHERE LastName LIKE _urley

Turley

SQL Server - Programacin

USANDO TRANSACT-SQL

11

Prof. Marlon S. Ramrez M.

PRCTICA 3.4c: Analizando el uso del


operador LIKE
1.

Ejecutar las siguientes instrucciones y analizar el resultado.


No Instruccin

Resultado Esperado

SELECT * FROM SlateGravel


WHERE FirstName LIKE D*ao+n

Dan y Don

Dan y Don
SELECT * FROM SlateGravel
WHERE FirstName LIKE D*a-o+n

SELECT * FROM SlateGravel


WHERE FirstName LIKE D*^o+n

Dan

SELECT * FROM SlateGravel


WHERE FirstName NOT LIKE
Dan

Dan

SQL Server - Programacin

USANDO TRANSACT-SQL

12

17/03/2010

Prof. Marlon S. Ramrez M.

Comparaciones Lgicas

PRACTICA 3.5: Ejecutar los ejemplos con diferentes operadores lgicos.


Sintaxis

Descripcin

Ejemplo

AND

Todos los criterios deben ser


verdaderos

SELECT ProductID, Name, ListPrice


FROM Production.Product
WHERE ProductSubCategoryID = 1 AND ListPrice < 1000

OR

Al menos uno de los criterios


debe ser verdadero

SELECT ProductID, Name, ListPrice


FROM Production.Product
WHERE ProductSubCategoryID = 1 OR ListPrice < 1000

NOT

El criterio debe ser falso

SELECT ProductID, Name, ListPrice


FROM production.Product
WHERE NOT ProductSubCategoryID = 2

NULL

La columna tiene un valor


nulo

SELECT ProductID, Name, Color


FROM Production.Product
WHERE Color IS NULL

La columna no tiene un valor


nulo

SELECT ProductID, Name, Color


FROM Production.Product
WHERE Color IS NOT NULL

NOT NULL

SQL Server - Programacin

USANDO TRANSACT-SQL

13

Prof. Marlon S. Ramrez M.

El operador BETWEEN y la funcin IN


PRACTICA 3.6a
El operador BETWEEN

PRACTICA 3.6b
La funcin IN

1.

1.

Ejecutar las siguientes instrucciones


SELECT NationalIDNumber, LoginID
FROM HumanResources.Employee
WHERE BirthDate > = 1962-1-1
AND BirthDate < = 1985-12-31

2. Ejecutar utilizando su equivalente


con el operador BETWEEN
SELECT NationalIDNumber, LoginID
FROM HumanResources.Employee
WHERE BirthDate BETWEEN 1962-1-1 AND
1985-12-31

SQL Server - Programacin

Ejecutar las siguientes instrucciones


SELECT ProductID
,Name AS Product
FROM Production.Product
WHERE ProductSubCategoryID = 1
OR ProductSubCategoryID = 2
OR ProductSubCategoryID = 3

2. Ejecutar utilizando su equivalente


con la funcin IN
SELECT ProductID
,Name AS Product
FROM Production.Product
WHERE ProductSubCategoryID IN (1,2,3)

USANDO TRANSACT-SQL

14

17/03/2010

Prof. Marlon S. Ramrez M.

La funcin IN con sub-consultas


PRACTICA 3.6c: Ejecutar la siguiente consulta que recupera todos
los productos cuyos ProductCategoryID son 1 2. Como la tabla
de productos solo contiene sub-categorias se debe hacer una
sub consulta a la tabla de categora.
SELECT ProductID
,Name AS Product
FROM Production.Product
WHERE ProductSubCategoryID IN (
SELECT ProductSubCategoryID
FROM Production.ProductSubCategory
WHERE ProductCategoryID IN (1,2))

SQL Server - Programacin

USANDO TRANSACT-SQL

15

Prof. Marlon S. Ramrez M.

Precedencia de los Operadores


Orden de Precedencia

PRCTICA 3.7: Encontrar error


1.

Primero se
procesa el

despus

NOT

OR

SELECT Name
,ProductNumber
,ListPrice
,ProductSubCategoryID
FROM Production.Product
WHERE ProductSubCategoryID = 1
OR ProductSubCategoryID = 2
AND ListPrice > 500
AND ListPrice < 1000

despus

AND
2.

SQL Server - Programacin

Verificar que la siguiente consulta


genera una lista de bicicletas
montaeras y bicicleta de carretera
con precios mayores de $500 y
menores de $1000

Utilizar parntesis para lograr que la


consulta funcione correctamente

USANDO TRANSACT-SQL

16

17/03/2010

Prof. Marlon S. Ramrez M.

Orden de Registros
Se utiliza la clausula ORDER BY
despus de WHERE
Puede contener una o mas
columnas delimitadas por
comas
Se puede especificar la
direccin

PRCTICA 3.8: Ejecutar las siguientes


consultas y analizar los resultados
1.
SELECT Name AS Product
,ListPrice
,StandardCost
FROM Production.Product
WHERE ListPrice > 0
ORDER BY ListPrice DESC, StandardCost

2.
SELECT SalesOrderID, ProductID
,UnitPrice * OrderQty As
PurchasePrice
FROM Sales.SalesOrderDetail
order by UnitPrice * OrderQty

ASC (ascendente)
DESC (descendente)

Si no se especifica es
ascendente
Tambin se pueden escribir
campos calculados en lugar de
columnas

SQL Server - Programacin

3.
SELECT SalesOrderID, ProductID
,UnitPrice * OrderQty As
PurchasePrice
FROM Sales.SalesOrderDetail
order by PurchasePrice

USANDO TRANSACT-SQL

17

Prof. Marlon S. Ramrez M.

Operadores TOP, TIE y PERCENT

TOP n
Se escribe despus de SELECT y n
indica que se mostrarn las
primeras n lneas segn el orden
establecido en la consulta

SELECT TOP 10 Name,


ListPrice
FROM Production.Product
ORDER BY ListPrice DESC

WITH TIES
Se escribe a continuacin de TOP
n y mostrar las lneas que
coincidan con la lnea n a
continuacin de las primeras n
lneas

PRCTICA 3.9: Ejecutar las


siguientes consultas y analizar los
resultados
1.

2.
SELECT TOP 10 WITH TIES Name,
ListPrice
FROM Production.Product
ORDER BY ListPrice DESC

PERCENT
Muestra un porcentaje de la
cantidad de registros en la tabla en
lugar de una cantidad de lneas

SQL Server - Programacin

3.
SELECT TOP 10 PERCENT Name,
ListPrice
FROM Production.Product
ORDER BY ListPrice DESC

USANDO TRANSACT-SQL

18

17/03/2010

Prof. Marlon S. Ramrez M.

La instruccin CASE
Es una expresin escalar que regresa un valor
basado en una lgica condicional
Se puede usar en SELECT, WHERE, HAVING,
ORDER BY y otros
Si no se escribe ELSE entonces por defecto se
tiene ELSE NULL
Dos formatos
Una funcin CASE simple compara una expresin con
un juego simple de expresiones para determinar el
resultado
Una funcin CASE de bsqueda evala una expresin
booleana para determinar el resultado
SQL Server - Programacin

USANDO TRANSACT-SQL

19

Prof. Marlon S. Ramrez M.

PRCTICAS con la instruccin CASE


PRCTICA 3.10a: Ejecutar la siguiente
consulta y analizar los resultados

PRCTICA 3.10b: Ejecutar la siguiente


consulta y analizar los resultados

SELECT ProductNumber
,Category =
CASE ProductLine
WHEN 'R' THEN 'Road
WHEN 'M' THEN 'Mountain
WHEN 'T' THEN 'Touring
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
END
,Name
FROM Production.Product
ORDER BY ProductNumber

SELECT ProductNumber
,Name
,'Price Range' = CASE
WHEN ListPrice = 0
THEN 'Mfg item - not for resale'
WHEN ListPrice < 50
THEN 'Under $50'
WHEN ListPrice >= 50 and ListPrice < 250
THEN 'Under $250'
WHEN ListPrice>=250 and ListPrice < 1000
THEN 'Under $1000'
ELSE 'Over $1000'
END
FROM Production.Product
ORDER BY ProductNumber

SQL Server - Programacin

USANDO TRANSACT-SQL

20

10

17/03/2010

Prof. Marlon S. Ramrez M.

Ejercicios 1/3
Ejercicio 3.1:

Escriba una consulta de regrese los registros de empleados de


AdventureWorks. Incluya las columnas NationalIDNumber, LoginID, JobTitle,
BirthDate, MaritalStatus, y HireDate en el resultado. Ejecutar la consulta y vea los
resultados.

Ejercicio 3.2:

Modificar el ejercicio 3.1 para aadir una nueva columna


AgeAtHire, la cual es el resultado de la diferencia entre las columnas HireDate y
BirthDate. (Pista: utilice la funcin DATEDIFF)

Ejercicio 3.3 Regrese todos los registros de Product en la tabla


[Production.Product] en AdventureWorks que tiene 3 das o ms para su
produccin. Incluya el nombre [Name] y el precio de lista [ListPrice]

Ejercicio 3.4:

Regrese una lista de los 10 productos ms caros de la tabla


[Production.Product] en AdventureWorks que tiene un nmero de producto
comenzando con BK. Incluya solamente las columnas *ProductID], [Name],
[ProductNumber], [Color], y [ListPrice]. Cuando termine, revise si existe algn
otro producto con el mismo precio que el decimo producto en la lista.

SQL Server - Programacin

USANDO TRANSACT-SQL

21

Prof. Marlon S. Ramrez M.

Ejercicios 2/3
Ejercicio 3.5:

Recuperar todas las lneas y columnas de la


tabla [ProductSubcategory] y hacer las modificaciones que se
solicitan:
1.
2.

3.
4.
5.

Obtenga todas las filas y columnas en la tabla [ProductSubcategory].


Modifique la consulta para mostrar solo las columnas:
[ProductSubcategoryID], [ProductCategoryID], [Name] y
[ModifiedDate]
Modifique la consulta para mostrar solo las filas donde bike esta
en alguna parte de la columna [Name]
Modifique la consulta para agregar un alias a las columna [Name]
Modifique la consulta para ordenar el resultado por el nombre de la
sub-categoria (columna Name)

SQL Server - Programacin

USANDO TRANSACT-SQL

22

11

17/03/2010

Prof. Marlon S. Ramrez M.

Ejercicios 3/3
Ejercicio 3.6: Obtenga las ordenes puestas en Junio 2004.

(Tablas:

SalesSalesOrderHeader)

Ejercicio 3.7: Obtenga las ordenes puestas en el ltimo da del mes. (Tablas: Sales.
SalesOrderHeader)

Ejercicio 3.8: Obtenga los empleados cuyo apellido (LastName) contienen la letra
a tres veces o ms. (Tablas: Person.Contact)

Ejercicio 3.9: Encuentre la instruccin SELECT que regresa para cada empleado el
sexo basado en su titulo (Title). Por ejemplo Ms. y Mrs. regresa Female; para
Mr regresa Male; y para cualquier otro caso (por ejemplo Dr.) regresar
Unknown. Mostrar el ID, Nombre, Apellido, Titulo y Sexo. (Tablas:
Person.Contact)

Ejercicio 3.10:

En el ejercicio anterior ordene los resultados por el titulo, pero


teniendo los NULL ordenados al final. Note que el orden por defecto pone los
NULL al principio o sea antes de los valores NOT NULL. (Tablas: Person.Contact)

SQL Server - Programacin

USANDO TRANSACT-SQL

23

12

Вам также может понравиться