Sunteți pe pagina 1din 16

Sintaxis

FROM (Transact-SQL)
SQL Server 2008 R2
Especifica las tablas, vistas, tablas derivadas y tablas combinadas que se utilizan en las
instrucciones DELETE, SELECT y UPDATE. En la instruccin SELECT, la clusula FROM es
necesaria excepto cuando la lista de seleccin solo contiene constantes, variables y expresiones
aritmticas (sin nombres de columna).
Convenciones de sintaxis de Transact-SQL
1
[ FROM { <table_source> } [ ,...n ] ]
<table_source> ::=
{
table_or_view_name [ [ AS ] table_alias ] [ <tablesample_clause> ]
[ WITH ( < table_hint > [ [ , ]...n ] ) ]
| rowset_function [ [ AS ] table_alias ]
[ ( bulk_column_alias [ ,...n ] ) ]
| user_defined_function [ [ AS ] table_alias ] ]
| OPENXML <openxml_clause>
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
| <joined_table>
| <pivoted_table>
| <unpivoted_table>
| @variable [ [ AS ] table_alias ]
| @variable.function_call ( expression [ ,...n ] ) [ [ AS ] table_alias
] [ (column_alias [ ,...n ] ) ]
}
<tablesample_clause> ::=
TABLESAMPLE [SYSTEM] ( sample_number [ PERCENT | ROWS ] )
[ REPEATABLE ( repeat_seed ) ]
<joined_table> ::=
{
<table_source> <join_type> <table_source> ON <search_condition>
| <table_source> CROSS JOIN <table_source>
| left_table_source { CROSS | OUTER } APPLY right_table_source
| [ ( ] <joined_table> [ ) ]
}
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
<pivoted_table> ::=
table_source PIVOT <pivot_clause> [ AS ] table_alias
<pivot_clause> ::=
( aggregate_function ( value_column [ [ , ]...n ])
FOR pivot_column
IN ( <column_list> )
)
<unpivoted_table> ::=
table_source UNPIVOT <unpivot_clause> [ AS ] table_alias
Pagina 1 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoIt.com/es-es/library/ms177634(printer).aspx
Argumentos
Nota
<table_source>
Especifica el origen de una tabla, una vista, una tabla variable o una tabla derivada, con
o sin alias, para utilizarlo en la instruccin Transact-SQL. Se pueden utilizar hasta 256
orgenes de tabla en una instruccin, aunque el lmite vara en funcin de la memoria
disponible y de la complejidad del resto de las expresiones de la consulta. Las consultas
individuales pueden no admitir un mximo de 256 orgenes de tabla.
El rendimiento de las consultas se puede ver afectado si se hace referencia a un
nmero elevado de tablas en ellas. El tiempo de compilacin y optimizacin tambin
se puede ver afectado por factores adicionales. Dichos factores pueden ser la
presencia de ndices y vistas indizadas en cada <table_source> y el tamao de
<select_list> en la instruccin SELECT.
El orden de los orgenes de tabla despus de la palabra clave FROM no afecta al
conjunto de resultados que se devuelve. SQL Server devuelve los errores cuando
aparecen nombres duplicados en la clusula FROM.
table_or_view_name
Es el nombre de una tabla o una vista.
Si la tabla o la vista existen en otra base de datos de la misma instancia de SQL Server,
utilice un nombre completo con el formato base_de_datos.esquema.nombre_de_objeto.
Si la tabla o vista existe fuera de la instancia de SQL Server, use un nombre en cuatro
partes con el formato servidor_vinculado.catlogo.esquema.objeto. Para obtener ms
informacin, vea sp_addlinkedserver (Transact-SQL)
2
. El nombre de cuatro partes de la
tabla o la vista creado con la funcin OPENDATASOURCE
3
como la parte de servidor del
nombre tambin se puede utilizar para especificar el origen de tabla remoto. Cuando se
especifica OPENDATASOURCE, es posible que database_name y schema_name no se
puedan aplicar a todos los orgenes de datos y dependan de las capacidades del
proveedor OLE DB que tiene acceso al objeto remoto. Para obtener ms informacin,
vea Consultas distribuidas
4
.
[AS] table_alias
Es un alias para table_source que se puede utilizar por comodidad o para distinguir una
tabla o una vista en una autocombinacin o una subconsulta. El alias suele ser un
nombre de tabla abreviado que se utiliza para hacer referencia a columnas especficas
de las tablas en una combinacin. Si el mismo nombre de columna existe en ms de
una tabla en una combinacin, SQL Server requiere que el nombre de columna sea
calificado mediante un nombre de tabla, un nombre de vista o un alias. No se puede
utilizar el nombre de la tabla si se ha definido un alias.
Si se utiliza una tabla derivada, una funcin de conjuntos de filas o con valores de tabla,
o una clusula de operador (como PIVOT o UNPIVOT), el parmetro table_alias
<unpivot_clause> ::=
( value_column FOR pivot_column IN ( <column_list> ) )
<column_list> ::=
column_name [ ,...n ]
Pagina 2 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoIt.com/es-es/library/ms177634(printer).aspx
Nota
requerido al final de la clusula es el nombre de tabla asociado para todas las columnas
devueltas, incluidas las columnas de agrupacin.
WITH (<table_hint> )
Especifica que el optimizador de consultas utiliza una estrategia de optimizacin o
bloqueo con esta tabla y para esta instruccin. Para obtener ms informacin, vea
Sugerencias de tabla (Transact-SQL)
5
.
rowset_function
Especifica una de las funciones de conjuntos de filas, como OPENROWSET, que devuelve
un objeto que se puede utilizar en lugar de una referencia de tabla. Para obtener ms
informacin acerca de la lista de funciones de conjuntos de filas, vea Funciones de
conjuntos de filas (Transact-SQL)
6
.
El uso de las funciones OPENROWSET y OPENQUERY para especificar que un objeto
remoto depende de las capacidades del proveedor OLE DB que tiene acceso al objeto.
Para obtener ms informacin, vea Consultas distribuidas
4
.
bulk_column_alias
Es un alias opcional para sustituir el nombre de una columna en el conjunto de
resultados. Los alias de columna se permiten solo en las instrucciones SELECT que
utilizan la funcin OPENROWSET con la opcin BULK. Si utiliza bulk_column_alias,
especifique un alias para cada columna de tabla en el mismo orden que las columnas
del archivo.
Este alias invalida al atributo NAME de los elementos COLUMN de un archivo de
formato XML si est presente.
user_defined_function
Especifica una funcin con valores de tabla.
OPENXML <openxml_clause>
Proporciona una vista de un conjunto de filas en un documento XML. Para obtener ms
informacin, vea OPENXML (Transact-SQL)
7
.
derived_table
Es una subconsulta que recupera filas de la base de datos. derived_table se utiliza como
entrada de la consulta externa.
derived_table puede utilizar la caracterstica de constructor de filas de Transact-SQL
(constructor de valores de tabla) para especificar varias filas. Por ejemplo, SELECT *
FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);.
column_alias
Es un alias opcional para sustituir el nombre de una columna en el conjunto de
resultados de la tabla derivada. Incluya un alias de columna para cada columna de la
lista de seleccin y delimite la lista de alias de columna con parntesis.
<tablesample_clause>
Pagina 3 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoIt.com/es-es/library/ms177634(printer).aspx
Nota
Especifica que se devuelva un ejemplo de los datos de la tabla. El ejemplo puede ser
aproximado. Esta clusula se puede utilizar en cualquier tabla principal o combinada de
una instruccin SELECT, UPDATE o DELETE. TABLESAMPLE no se puede especificar con
vistas. Para obtener ms informacin, vea Limitar los conjuntos de resultados con
TABLESAMPLE
8
.
Si utiliza TABLESAMPLE en bases de datos actualizadas a SQL Server, el nivel de
compatibilidad de la base de datos se debe establecer en 90 o ms alto. Para
establecer el nivel de compatibilidad de la base de datos, vea Nivel de compatibilidad
de ALTER DATABASE (Transact-SQL)
9
.
SYSTEM
Se trata de un mtodo de muestreo dependiente de la implementacin especificado por
los estndares ISO. En SQL Server, es el nico mtodo de muestreo disponible y se
aplica de forma predeterminada. SYSTEM aplica un mtodo de muestreo basado en
pginas en el que se elige un conjunto de pginas aleatorio de la tabla para el ejemplo y
todas las filas de dichas pginas se devuelven como el subconjunto de ejemplo. Para
obtener ms informacin, vea Limitar los conjuntos de resultados con TABLESAMPLE
8
.
sample_number
Es una expresin numrica constante exacta o aproximada que representa el porcentaje
o el nmero de filas. Si se especifica con PERCENT, sample_number se convierte
implcitamente a un valor float; en caso contrario, se convierte en bigint. PERCENT es
el valor predeterminado.
PERCENT
Especifica que se debe recuperar de la tabla el porcentaje sample_number de filas de la
tabla. Si se especifica PERCENT, SQL Server devuelve un valor aproximado del
porcentaje especificado. Si se especifica PERCENT, la expresin sample_number debe
dar como resultado un valor comprendido entre 0 y 100.
ROWS
Especifica que se recupere aproximadamente el nmero sample_number de filas. Si se
especifica ROWS, SQL Server devuelve una aproximacin del nmero de filas
especificado. Si se especifica ROWS, la expresin sample_number debe ser un valor
entero mayor que cero.
REPEATABLE
Indica que el ejemplo seleccionado se puede devolver de nuevo. Si se especifica con el
mismo valor de repeat_seed , SQL Server devuelve el mismo subconjunto de filas
siempre que no se hayan realizado cambios en las filas de la tabla. Si se especifica con
otro valor de repeat_seed, es probable que SQL Server devuelva un muestra distinto de
filas de la tabla. Se consideran cambios en la tabla las siguientes acciones: insertar,
actualizar, eliminar, volver a generar o desfragmentar ndices, y restaurar o adjuntar
bases de datos.
repeat_seed
Es una expresin de tipo entero constante utilizada por SQL Server para generar un
nmero aleatorio. repeat_seed es de tipo bigint. Si no se especifica repeat_seed, SQL
Server asigna un valor de forma aleatoria. Para un valor repeat_seed especfico, el
Pagina 4 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoIt.com/es-es/library/ms177634(printer).aspx
resultado del muestreo es siempre el mismo si no ha aplicado ningn cambio a la tabla.
La expresin repeat_seed debe ser un entero mayor que cero.
<joined_table>
Es un conjunto de resultados producto de dos o ms tablas. Para varias combinaciones,
utilice parntesis para cambiar el orden natural de las combinaciones.
<join_type>
Especifica el tipo de operacin de combinacin.
INNER
Especifica que se devuelvan todos los pares de filas coincidentes. Rechaza las filas no
coincidentes de las dos tablas. Si no se especifica ningn tipo de combinacin, ste es el
valor predeterminado.
FULL [ OUTER ]
Especifica que una fila de la tabla de la derecha o de la izquierda, que no cumpla la
condicin de combinacin, se incluya en el conjunto de resultados y que las columnas
que correspondan a la otra tabla se establezcan en NULL. De esta forma se agregan
ms filas a las que se suelen devolver con INNER JOIN.
LEFT [ OUTER ]
Especifica que todas las filas de la tabla izquierda que no cumplan la condicin de
combinacin se incluyan en el conjunto de resultados, con las columnas de resultados
de la otra tabla establecidas en NULL, adems de todas las filas devueltas por la
combinacin interna.
RIGHT [OUTER]
Especifica que todas las filas de la tabla derecha que no cumplan la condicin de
combinacin se incluyan en el conjunto de resultados, con las columnas de resultados
de la otra tabla establecidas en NULL, adems de todas las filas devueltas por la
combinacin interna.
<join_hint>
Especifica que el optimizador de consultas de SQL Server debe utilizar una sugerencia
de combinacin o un algoritmo de ejecucin por cada combinacin especificada en la
clusula FROM de la consulta. Para obtener ms informacin, vea Sugerencias de
combinacin (Transact-SQL)
10
.
JOIN
Indica que se va a ejecutar la operacin de combinacin especificada entre los orgenes
de tabla o vistas indicados.
ON <search_condition>
Especifica la condicin en la que se basa la combinacin. La condicin puede especificar
cualquier predicado, aunque se suelen utilizar columnas y operadores de comparacin;
por ejemplo:
USE AdventureWorks2008R2 ;
GO
SELECT p.ProductID, v.BusinessEntityID
FROM Production.Product AS p
SQL
Pgina 5 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
a ndo la condici n e s pe ciIi e col mna s no s e ra ne ce s a rio e t e nga n e l mis mo
nombr e o e l mis mo t ipo de da t os s in e mba rgo s i los t ipos de da t os no s on id nt icos
de be n s e r compa t ible s o t ra t a r s e de t ipos e SQL Se r e r p e da con e r t ir
impl cit a me nt e . Si los t ipos de da t os no s e p e de n con e r t ir impl cit a me nt e la condici n
de be con e rt ir de Iorma e xpl cit a e l t ipo de da t os me dia nt e la I nci n O RT.
P e de ha be r pre dica dos r e la ciona dos s ola me nt e con na de la s t a bla s combina da s de la
cla s la O . s t os pr e dica dos t a mbi n p e de n e s t a r e n la cla s la R de la
cons lt a . n e la pos ici n de e s t os pr e dica dos no pr od ce ning na diIe r e ncia e n e l
ca s o de combina cione s R podr a ge ne ra r n r e s lt a do diIe r e nt e s i e s t ie ra n
implica da s la s combina cione s O T R. La r a n e s e los pre dica dos de la cla s la O
s e a plica n a la t a bla a nt e s de la combina ci n mie nt ra s la cla s la R s e a plica de
Iorma s e ma nt ica a l r e s lt a do de la combina ci n.
Pa ra obt e ne r ma s inIor ma ci n a ce r ca de los pr e dica dos y la s condicione s de b s e da
e a ondicione s de b s e da ( Tra ns a ct - SQL)
11
.
ROSS O
s pe ciIica e l prod ct o r e s lt a nt e de dos t a bla s . e e l e la s mis ma s Iila s e s e
de ol e r a n s i no s e e s pe ciIica ra la cla s la R e n na combina ci n de e s t ilo
a nt ig o dis t int a de l e s t ilo de SQL- 2.
left_table_source ROSS O T R PPL right_table_source
s pe ciIica e e l a rg me nt o right_table_source de l ope ra dor PPL s e e a l e con
r e s pe ct o a ca da Iila de left_table_source. s t a I nciona lida d e s t il s i right_table_source
cont ie ne na I nci n con a lore s de t a bla e t oma los a lore s de col mna de
left_table_source como no de s s a r g me nt os .
Se de be e s pe ciIica r O T R o ROSS con PPL . Si s e e s pe ciIica ROSS no s e ge ne r a
ning na Iila c a ndo right_table_source s e e a l a con r e s pe ct o a na Iila e s pe ciIica da de
left_table_source y s e de e l e n con nt o de r e s lt a dos a c o.
Si s e e s pe ciIica O T R s e ge ne r a na Iila pa ra ca da Iila de left_table_source incl s o s i
right_table_source s e e a l a con r e s pe ct o a dicha Iila y de e l e n con nt o de
r e s lt a dos a c o.
Pa ra obt e ne r ma s inIor ma ci n e a la s e cci n ot a s y s a r PPL
12
.
left_table_source
s n or ige n de t a bla s e g n s e ha de Iinido e n e l a rg me nt o a nt e rior . Pa ra obt e ne r ma s
inIorma ci n e a la s e cci n ot a s .
right_table_source
s n or ige n de t a bla s e g n s e ha de Iinido e n e l a rg me nt o a nt e rior . Pa ra obt e ne r ma s
inIorma ci n e a la s e cci n ot a s .
table_source P OT pi ot cla s e
s pe ciIica e table_source s e dina mice e n I nci n de pivot_column. table_source e s
na t a bla o na e xpre s i n de t a bla . La s a lida e s na t a bla e cont ie ne t oda s la s
col mna s de table_source e xce pt o pivot_column y value_column. La s col mna s de
table_source e xce pt o pivot_column y value_column s e de nomina n col mna s de
a gr pa mie nt o de l ope ra dor dina mico.
JOIN Purchasing.ProductVendor AS v
ON (p.ProductID = v.ProductID);
Pgina 6 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
Nota
P OT r e a li a na ope r a ci n de a gr pa mie nt o e n la t a bla de e nt ra da con re s pe ct o a la s
col mna s de a gr pa mie nt o y de e l e na Iila pa r a ca da gr po. de ma s e l r e s lt a do
cont ie ne na col mna pa r a ca da a lor e s pe ciIica do e n column_list e a pa re ce e n e l
pa ra me t ro pivot_column de input_table.
Pa ra obt e ne r ma s inIor ma ci n e a la s e cci n ot a s y s a r P OT y P OT
13
.
Si t ili a P OT e n ba s e s de da t os a ct a li a da s a SQL Se r e r e l ni e l de
compa t ibilida d de la ba s e de da t os s e de be e s t a ble ce r e n 0 o ma s a lt o. Pa ra
obt e ne r ma s inIorma ci n a ce rca de la conIig ra ci n de l ni e l de compa t ibilida d de la
ba s e de da t os e a i e l de compa t ibilida d de LT R T S ( Tra ns a ct - SQL)

.
aggregate_function
s na I nci n de a gre ga do de l s is t e ma o de Iinida por e l s a rio e a ce pt a na o ma s
e nt ra da s . La I nci n de a gre ga do no p e de a ria r con r e s pe ct o a los a lore s LL. na
I nci n de a gre ga do in a r ia ble con r e s pe ct o a los a lor e s LL no t ie ne e n c e nt a los
a lor e s LL de l gr po mie nt ra s e a l a e l a lor de l a gr e ga do.
o s e pe rmit e la I nci n de a gre ga do de l s is t e ma O T( ) .
value_column
s la col mna de a lore s de l ope r a dor P OT. Si s e t ili a con P OT value_column
no p e de s e r e l nombr e de na col mna e xis t e nt e e n e l pa r a me t r o table_source de
e nt ra da .
FOR pivot_column
s la col mna dina mica de l ope r a dor P OT. pivot_column de be s e r de n t ipo
con e rt ible de Ior ma impl cit a o e xpl cit a a nvarchar(). s t a col mna no p e de s e r
image o rowversion.
Si s e t ili a P OT pivot_column e s e l nombre de la col mna de s a lida re s t r ingida a
pa rt ir de table_source. o p e de ha be r ning na col mna e n table_source con e s e
nombr e .
( column_list )
n la cla s la P OT s e incl ye n los a lore s de pivot_column e s e a n a con e rt ir e n
los nombre s de col mna s de la t a bla de s a lida . La lis t a no p e de e s pe ciIica r ning n
nombr e de col mna e ya e xis t a e n e l pa ra me t ro table_source de e nt ra da e s e e s t a
dina mi a ndo.
n la cla s la P OT s e incl ye n la s col mna s de table_source e s e a a re s t ringir
e n na s ola pivot_column.
table_alias
s e l nombr e de a lia s de la t a bla de s a lida . Se de be e s pe ciIica r pivot_table_alias.
P OT npi ot cla s e
s pe ciIica e la t a bla de e nt ra da s e re s t r inge a pa r t ir de a ria s col mna s de
column_list e n na s ola col mna de nomina da pivot_column.
Pa ra obt e ne r ma s inIor ma ci n e a la s e cci n ot a s y s a r P OT y P OT
13
.
Pgina 7 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
Nota
Comentarios
Si t ili a P OT e n ba s e s de da t os a ct a li a da s a SQL Se r e r e l ni e l de
compa t ibilida d de la ba s e de da t os s e de be e s t a ble ce r e n 0 o ma s a lt o. Pa ra
e s t a ble ce r e l ni e l de compa t ibilida d de la ba s e de da t os e a i e l de compa t ibilida d
de LT R T S ( Tr a ns a ct - SQL)

.
La cla s la FROM a dmit e la s int a xis SQL- 2- SQL pa ra la s t a bla s combina da s y la s t a bla s
de r i a da s . La s int a xis SQL- 2 pr opor ciona los ope ra dor e s de combina ci n R L FT
O T R R T O T R F LL O T R y ROSS.
n la s is t a s t a bla s de r i a da s y s bcons lt a s s e a dmit e n la s ope ra cione s O y O
de nt r o de na cla s la FROM.
na a t ocombina ci n e s na t a bla e s e combina cons igo mis ma . La s ins e rcione s o
a ct a li a cione s ba s a da s e n na a t ocombina ci n s ig e n e l orde n de la cla s la FROM.
P e s t o e SQL Se r e r cons ide ra la s e s t a d s t ica s de ca rdina lida d y dis t r ib ci n de s e r idor e s
inc la dos e propor ciona n e s t a d s t ica s de dis t rib ci n de col mna s no e s ne ce s a ria la
s ge re ncia de combina ci n R MOT pa ra e xigir la e a l a ci n de na combina ci n de Iorma
r e mot a . l proce s a dor de cons lt a s de SQL Se r e r cons ide ra la s e s t a d s t ica s re mot a s y
de t e r mina s i e s a propia da na e s t ra t e gia de combina ci n r e mot a . La s ge re ncia de
combina ci n R MOT e s t il pa ra los pr o e e dore s e no pr oporciona n e s t a d s t ica s de
dis t rib ci n de col mna s . Pa ra obt e ne r ma s inIor ma ci n e a Re is it os de la s e s t a d s t ica s de
dis t rib ci n pa r a pr o e e dore s OL
14
.
Pa ra obt e ne r ma s inIor ma ci n a ce r ca de c mo t ra ba a r con combina cione s e a s pe ct os
ba s icos de la s combina cione s
1
y s a r combina cione s
16
.
Usar APPLY
Los ope r a ndos i ie rdo y de re cho de l ope r a dor PPL s on e xpr e s ione s de t a bla . La diIe re ncia
principa l e nt r e e s t os ope ra ndos e s e right_table_source p e de t ili a r na I nci n con
a lor e s de t a bla e t ome na col mna de left_table_source como no de los a rg me nt os de
la I nci n. left_table_source p e de incl ir I ncione s con a lor e s de t a bla pe ro no p e de
cont e ne r a rg me nt os e s e a n col mna s de right_table_source.
l ope ra dor PPL I nciona de l s ig ie nt e modo pa ra ge ne r a r e l orige n de t a bla pa ra la
cla s la FROM:
1. a l a right_table_source con r e s pe ct o a ca da Iila de left_table_source pa ra ge ne ra r
con nt os de Iila s .
Los a lore s de right_table_source de pe nde n de left_table_source. right_table_source s e
p e de re pr e s e nt a r a proxima da me nt e de e s t e modo: T F( le It t a ble s o r ce . ro ) donde
T F e s na I nci n con a lore s de t a bla .
2. ombina los con nt os de r e s lt a dos ge ne r a dos pa ra ca da Iila e n la e a l a ci n de
right_table_source con left_table_source me dia nt e na ope r a ci n O LL.
La lis t a de col mna s e ge ne ra e l r e s lt a do de l ope r a dor PPL e s e l con nt o de
col mna s de left_table_source combina do con la lis t a de col mna s de
right_table_source.
Usar PIVOT y UNPIVOT
Pgina 8 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
Permisos
Ejemplos
pivot_column y value_column s on col mna s de a gr pa mie nt o t ili a da s por e l ope ra dor
P OT. Pa r a obt e ne r e l con nt o de r e s lt a dos de s a lida P OT a plica e l s ig ie nt e proce s o:
1. Re a li a na ope r a ci n RO P e n input_table pa ra la s col mna s de a gr pa mie nt o y
ge ne r a na Iila de r e s lt a dos pa ra ca da gr po.
La s col mna s de a gr pa mie nt o de la Iila de s a lida obt ie ne n los a lore s de col mna
corr e s pondie nt e s pa ra dicho gr po e n input_table.
2. e ne ra a lore s pa ra la s col mna s de la lis t a de col mna s pa ra ca da Iila de re s lt a dos
me dia nt e la s s ig ie nt e s ope ra cione s :
a . gr pa ci n a diciona l de la s Iila s ge ne r a da s e n RO P e n e l pa s o a nt e r ior pa ra
pivot_column.
Pa ra ca da col mna de s a lida de column_list s e s e le cciona n s bgr po e
c mple la condici n:
pi ot col mn O RT( da t a t ype oI pi ot col mn o t p t col mn )
b. aggregate_function s e e a l a con re s pe ct o a value_column e n e s t e s bgr po y s
r e s lt a do s e de e l e como n a lor de output_column cor re s pondie nt e . Si e l
s bgr po e s t a a c o SQL Se r e r ge ne ra n a lor LL pa r a output_column. Si la
I nci n de a gre ga do e s O T y e l s bgr po e s t a a c o s e de e l e ce r o ( 0) .
Pa ra obt e ne r ma s inIor ma ci n e a s a r P OT y P OT
13
.
Re ie re los pe rmis os pa r a la ins t r cci n L T S L T o P T .
A. Usar una clusula FROM sencilla
n e l s ig ie nt e e e mplo s e r e c pe ra n la s col mna s Te rr it or y y a me de la t a bla
Sa le s Te rrit ory de la ba s e de da t os de e e mplo d e nt r e or s 200 R2.
l con nt o de r e s lt a dos e s e l s ig ie nt e .
USE AdventureWorks2008R2 ;
GO
SELECT TerritoryID, Name
FROM Sales.SalesTerritory
ORDER BY TerritoryID ;
TerritoryID Name

1 Northwest
2 Northeast
3 Central
4 Southwest
5 Southeast
6 Canada
SQL
Pgina 9 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
B. Usar las sugerencias del optimizador TABLOCK y HOLDLOCK
n la s ig ie nt e t ra ns a cci n pa rcia l s e m e s t ra c mo coloca r n blo e o e xpl cit o de t a bla
compa rt ida e n mploye e y c mo le e r e l ndice . l blo e o s e ma nt ie ne d ra nt e t oda la
t ra ns a cci n.
C. Usar la sintaxis CROSS JOIN de SQL-92
s t e e e mplo de e l e e l pr od ct o re s lt a nt e de la s t a bla s mploye e y e pa rt me nt . Se
de e l e la lis t a de t oda s la s combina cione s pos ible s de la s Iila s de mploye e y t oda s la s
Iila s con e l nombre e pa r t me nt .
D. Usar la sintaxis FULL OUTER JOIN de SQL-92
n e l s ig ie nt e e e mplo s e de e l e e l nombre de l prod ct o y los pe didos de e nt a
corr e s pondie nt e s de la t a bla Sa le s Or de r e t a il. de ma s s e de e l e n t odos los pe didos de
e nt a e no incl ye n ning n pr od ct o e n la t a bla Prod ct y t odos los prod ct os con n
pe dido de e nt a dis t int o de l e s pe ciIica do e n la t a bla Prod ct .
7 France
8 Germany
9 Australia
10 United Kingdom
(10 row(s) affected)
USE AdventureWorks2008R2 ;
GO
BEGIN TRAN
SELECT COUNT(*)
FROM HumanResources.Employee WITH (TABLOCK, HOLDLOCK) ;
USE AdventureWorks2008R2 ;
GO
SELECT e.BusinessEntityID, d.Name AS Department
FROM HumanResources.Employee AS e
CROSS JOIN HumanResources.Department AS d
ORDER BY e.BusinessEntityID, d.Name ;
USE AdventureWorks2008R2 ;
GO
The OUTER keyword following the FULL keyword is optional.
SELECT p.Name, sod.SalesOrderID
FROM Production.Product AS p
FULL OUTER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
WHERE p.ProductID IS NULL OR sod.ProductID IS NULL
ORDER BY p.Name ;
SQL
SQL
SQL
Pgina 10 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
( . 8 sar la sint axis L( FT O8 T( R - O, 1 de SQL-9 2
Este ejemplo combina dos tablas en ProductID y mantiene las filas no coincidentes de la tabla
izquierda. La tabla Product coincide con la tabla SalesOrderDetail en las columnas ProductID
de cada tabla. Todos los productos, ordenados y no ordenados, aparecen en el conjunto de
resultados.
F. 8 sar la sint axis , 1 1 ( R - O, 1 de SQL-9 2
En el siguiente ejemplo se devuelven todos los nombres de productos e identificadores de
pedidos de venta.
* . 8 sar la sint axis R, * + T O8 T( R - O, 1 de SQL-9 2
Este ejemplo combina dos tablas en TerritoryID y mantiene las filas no coincidentes de la
tabla derecha. La tabla SalesTerritory coincide con la tabla SalesPerson en la columna
TerritoryID de cada tabla. Todos los vendedores aparecen en el conjunto de resultados con
independencia de que tengan un territorio asignado.
USE AdventureWorks2008R2 ;
GO
SELECT p.Name, sod.SalesOrderID
FROM Production.Product AS p
LEFT OUTER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name ;
USE AdventureWorks2008R2 ;
GO
By default, SQL Server performs an INNER JOIN if only the JOIN
keyword is specified.
SELECT p.Name, sod.SalesOrderID
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name ;
USE AdventureWorks2008R2 ;
GO
SELECT st.Name AS Territory, sp.BusinessEntityID
FROM Sales.SalesTerritory AS st
RIGHT OUTER JOIN Sales.SalesPerson AS sp
ON st.TerritoryID = sp.TerritoryID ;
SQL
SQL
SQL
Pgina 11 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
Importante
+ . 8 sar las sX gerencias de combinaciy n + $ S+ y M( R* (
En el siguiente ejemplo se realiza una combinacin de tres tablas entre las tablas Product,
ProductVendor y Vendor para generar una lista de productos y sus proveedores. El
optimizador de consultas combina Product y ProductVendor (p y pv) mediante una
combinacin MERGE. A continuacin, los resultados de la combinacin MERGE de Product y
ProductVendor (p y pv) se combinan mediante HASH con la tabla Vendor para generar (p y
pv) y v.
Despus de especificar una sugerencia de combinacin, la palabra clave INNER ya no es
opcional y se tiene que incluir explcitamente para hacer combinaciones INNER JOIN.
, . 8 sar X na t abla deriY ada
En el siguiente ejemplo se utiliza una tabla derivada y una instruccin SELECT despus de la
clusula FROM para devolver los nombres y apellidos de todos los empleados y las ciudades
en que residen.
- . 8 sar T$ % L( S$ MPL( para leer dat os de X n eM emplo de filas de X na t abla
USE AdventureWorks2008R2 ;
GO
SELECT p.Name AS ProductName, v.Name AS VendorName
FROM Production.Product AS p
INNER MERGE JOIN Purchasing.ProductVendor AS pv
ON p.ProductID = pv.ProductID
INNER HASH JOIN Purchasing.Vendor AS v
ON pv.BusinessEntityID = v.BusinessEntityID
ORDER BY p.Name, v.Name ;
USE AdventureWorks2008R2 ;
GO
SELECT RTRIM(p.FirstName) + ' ' + LTRIM(p.LastName) AS Name, d.City
FROM Person.Person AS p
INNER JOIN HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN
(SELECT bea.BusinessEntityID, a.City
FROM Person.Address AS a
INNER JOIN Person.BusinessEntityAddress AS bea
ON a.AddressID = bea.AddressID) AS d
ON p.BusinessEntityID = d.BusinessEntityID
ORDER BY p.LastName, p.FirstName;
SQL
SQL
Pgina 12 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
En el siguiente ejemplo se utiliza TABLESAMPLE en la clusula FROM para devolver
aproximadamente un 10 por ciento de todas las filas de la tabla Customer de la base de datos
AdventureWorks2008R2.
. . 8 sar $ PPL<
En el siguiente ejemplo se da por supuesto que las siguientes tablas con el esquema que se
indica existen en la base de datos:
Departments: DeptID, DivisionID, DeptName, DeptMgrID
EmpMgr: MgrID, EmpID
Employees: EmpID, EmpLastName, EmpFirstName, EmpSalary
Se incluye adems una funcin con valores de tabla, GetReports(MgrID), que devuelve la lista
de todos los empleados (EmpID, EmpLastName, EmpSalary) que dependen directa o
indirectamente del MgrID especificado.
En el ejemplo se utiliza APPLY para devolver todos los departamentos y todos los empleados
de cada departamento. Si un departamento concreto no tiene ningn empleado, no se
devuelve ninguna fila para dicho departamento.
Si desea que la consulta genere filas para los departamentos sin empleados, lo que genera
valores NULL para las columnas EmpID, EmpLastName y EmpSalary, utilice OUTER APPLY.
L. 8 sar P, 9 OT y 8 1 P, 9 OT
En el siguiente ejemplo se devuelve el nmero de pedidos de compra realizados por los
empleados con los identificadores 164, 198, 223, 231 y 233, clasificados en categoras por
identificador de proveedor.
USE AdventureWorks2008R2 ;
GO
SELECT *
FROM Sales.Customer TABLESAMPLE SYSTEM (10 PERCENT) ;
SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary
FROM Departments d CROSS APPLY dbo.GetReports(d.DeptMgrID) ;
SELECT DeptID, DeptName, DeptMgrID, EmpID, EmpLastName, EmpSalary
FROM Departments d OUTER APPLY dbo.GetReports(d.DeptMgrID) ;
USE AdventureWorks2008R2;
GO
SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [2
60] AS Emp5
SQL
SQL
Pgina 13 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
A continuacin se muestra un conjunto de resultados parcial:
VendorID Emp1 Emp2 Emp3 Emp4 Emp5
----------------------------------------------------------------
1 4 3 5 4 4
2 4 1 5 5 5
3 4 3 5 4 4
4 4 2 5 5 4
5 5 1 5 5 5
Para anular la dinamizacin de la tabla, debe dar por supuesto que el conjunto de resultados
generado en el ejemplo anterior se almacena como pvt. La consulta sera la siguiente.
A continuacin se muestra un conjunto de resultados parcial:
VendorID Employee Orders
FROM
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) AS p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( [250], [251], [256], [257], [260] )
) AS pvt
ORDER BY VendorID;
Create the table and insert values as portrayed in the previous example.
CREATE TABLE dbo.pvt (VendorID int, Emp1 int, Emp2 int,
Emp3 int, Emp4 int, Emp5 int);
GO
INSERT INTO dbo.pvt VALUES
(1,4,3,5,4,4)
,(2,4,1,5,5,5)
,(3,4,3,5,4,4)
,(4,4,2,5,5,4)
,(5,5,1,5,5,5);
GO
Unpivot the table.
SELECT VendorID, Employee, Orders
FROM
(SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
FROM dbo.pvt) AS p
UNPIVOT
(Orders FOR Employee IN
(Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt
GO
SQL
Pgina 14 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
9 ea t ambip n
------------------------------
1 Emp1 4
1 Emp2 3
1 Emp3 5
1 Emp4 4
1 Emp5 4
2 Emp1 4
2 Emp2 1
2 Emp3 5
2 Emp4 5
2 Emp5 5
Referencia
CONTAINSTABLE (Transact-SQL)
17
DELETE (Transact-SQL)
18
FREETEXTTABLE (Transact-SQL)
19
INSERT (Transact-SQL)
20
OPENQUERY (Transact-SQL)
21
OPENROWSET (Transact-SQL)
22
Operadores (Transact-SQL)
23
UPDATE (Transact-SQL)
24
WHERE (Transact-SQL)
25
Tabla de Y t ncX los
1
http://technet.microsoft.com/es-es/library/ms177563.aspx
2
http://technet.microsoft.com/es-es/library/ms190479.aspx
3
http://technet.microsoft.com/es-es/library/ms179856.aspx
4
http://technet.microsoft.com/es-es/library/ms188721.aspx
5
http://technet.microsoft.com/es-es/library/ms187373.aspx
6
http://technet.microsoft.com/es-es/library/ms187957.aspx
7
http://technet.microsoft.com/es-es/library/ms186918.aspx
8
http://technet.microsoft.com/es-es/library/ms189108.aspx
9
http://technet.microsoft.com/es-es/library/bb510680.aspx
10
http://technet.microsoft.com/es-es/library/ms173815.aspx
11
http://technet.microsoft.com/es-es/library/ms173545.aspx
12
http://technet.microsoft.com/es-es/library/ms175156.aspx
Pgina 15 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx
2011 Micros oft . Re s e rY a dos t odos los de re chos .
13
http://technet.microsoft.com/es-es/library/ms177410.aspx
14
http://technet.microsoft.com/es-es/library/ms186237.aspx
15
http://technet.microsoft.com/es-es/library/ms191517.aspx
16
http://technet.microsoft.com/es-es/library/ms191472.aspx
17
http://technet.microsoft.com/es-es/library/ms189760.aspx
1
http://technet.microsoft.com/es-es/library/ms189835.aspx
1
http://technet.microsoft.com/es-es/library/ms177652.aspx
20
http://technet.microsoft.com/es-es/library/ms174335.aspx
21
http://technet.microsoft.com/es-es/library/ms188427.aspx
22
http://technet.microsoft.com/es-es/library/ms190312.aspx
23
http://technet.microsoft.com/es-es/library/ms174986.aspx
24
http://technet.microsoft.com/es-es/library/ms177523.aspx
25
http://technet.microsoft.com/es-es/library/ms188047.aspx
Contenido de la comunidad
Pgina 16 de 16 FROM (Transact-SQL)
24/11/2011 http://technet.microsoft.com/es-es/library/ms177634(printer).aspx

S-ar putea să vă placă și