Ejemplos de SELECT (Transact-SQL) SQL Server 2014
Otras versiones
En este tema se proporcionan ejemplos del uso de la instrucción SELECT SELECT..
A.Usar SELECT para recuperar las ! columnas En el si"uiente ejemplo se muestran tres #ra"mentos de códi"o. En el primer ejemplo de códi"o$ se devuelven todas las las (no se especica la cl%usula &'EE) ! todas las columnas (con ) de la ta*la +roduct +roduct de de la *ase de datos Adventure&or,s/ Adventure&or,s/ . Transact-SQL T ransact-SQL USE AdventureWorks2012; GO SELECT * FROM Producton!Product OR"ER #$ %&'e ASC; (( A)tern&te &+! USE AdventureWorks2012; GO SELECT ,!* FROM Producton!Product AS , OR"ER #$ %&'e ASC; GO
En este ejemplo se devuelven todas las las (no se 0a especicado la cl%usula &'EE) ! solo un su*conjunto de las columnas (1ame (1ame$$ +roduct1um*er +roduct1um*er$$ List+rice List+rice)) de la ta*la +roduct +roduct de de la *ase de datos Adventure&or,s/ Adventure&or,s/ .Adem%s$ se a"re"a un enca*e2ado de columna. Transact-SQL T ransact-SQL USE AdventureWorks2012; GO SELECT %&'e- Product%u'.er- LstPrce AS Prce FROM Producton!Product OR"ER #$ %&'e ASC; GO
En este ejemplo solo se devuelven las las de +roduct +roduct 3ue 3ue tienen una l4nea de productos de ! cu!o valor correspondiente a los d4as para #a*ricar es in#erior a 5. Transact-SQL T ransact-SQL USE AdventureWorks2012; GO
SELECT %&'e- Product%u'.er- LstPrce AS Prce FROM Producton!Product W/ERE ProductLne R A%" "&+sToM&nu&cture 3 4 OR"ER #$ %&'e ASC; GO
6.Usar SELECT con enca*e2ados de columna ! c%lculos En los si"uientes ejemplos se devuelven todas las las de la ta*la +roduct +roduct.. En el primer ejemplo se devuelven las ventas totales ! los descuentos de cada producto. En el se"undo ejemplo se calculan los *enecios totales de cada producto. Transact-SQL T ransact-SQL USE AdventureWorks2012; GO SELECT ,!%&'e AS Product%&'e%on"scountS&)es 5Order6t+ * UntPrce7"scounts 55Order6t+ * UntPrce7 * UntPrce"scount7 FROM Producton!Product AS , 8%%ER 9O8% S&)es!S&)esOrder"et&) AS sod O% ,!Product8" sod!Product8" OR"ER #$ Product%&'e "ESC; GO
7sta es la consulta 3ue calcula el *enecio de cada producto de cada pedido de venta. Transact-SQL T ransact-SQL USE AdventureWorks2012; GO SELECT Tot&) nco'e s- 55Order6t+ * UntPrce7 * 51!0 ( UntPrce"scount77- or ,!%&'e AS Product%&'e FROM Producton!Product AS , 8%%ER 9O8% S&)es!S&)esOrder"et&) AS sod O% ,!Product8" sod!Product8" OR"ER #$ Product%&'e ASC; GO
C.Usar 89ST91CT con SELECT En el si"uiente ejemplo se utili2a 89ST91CT 89ST91CT para para evitar la recuperación de t4tulos duplicados. Transact-SQL T ransact-SQL USE AdventureWorks2012; GO SELECT "8ST8%CT 9o.Tt)e FROM /u'&nResources!E',)o+ee OR"ER #$ 9o.Tt)e; GO
8.Crear ta*las con SELECT 91TO En el primer ejemplo se crea una ta*la temporal denominada :6ic!cles :6ic!cles en en tempd* tempd*.. Transact-SQL T ransact-SQL USE te',d.; GO 8F O#9ECT:8" 5%#c+c)es-%U7 8S %OT %ULL "ROP TA#LE #c+c)es; GO SELECT * 8%TO #c+c)es FROM AdventureWorks2012!Producton!Product W/ERE Product%u'.er L8
En el se"undo ejemplo se crea la ta*la permanente 1e;+roducts 1e;+roducts.. Transact-SQL T ransact-SQL USE AdventureWorks2012; GO 8F O#9ECT:8"5d.o!%eProducts- U7 8S %OT %ULL "ROP TA#LE d.o!%eProducts; GO ALTER "ATA#ASE AdventureWorks2012 SET RECO>ER$ #UL<:LOGGE"; GO SELECT * 8%TO d.o!%eProducts FROM Producton!Product W/ERE LstPrce ? @2 A%" LstPrce 3 @100; GO ALTER "ATA#ASE AdventureWorks2012 SET RECO>ER$ FULL; GO
E.Usar su*consultas correlacionadas En el si"uiente ejemplo se muestran consultas 3ue son sem%nticamente e3uivalentes ! se demuestra la di#erencia entre la utili2ación de la pala*ra clave E<9STS E<9STS ! ! la pala*ra clave 91 91.. Am*os son ejemplos de su*consultas v%lidas 3ue recuperan una instancia de cada nom*re de producto cu!o modelo es un j erse! de man"a lar"a con lo"otipo lo"oti po ! cu!os n=meros de +roduct>odel98 +roduct>odel98 coinciden coinciden en las ta*las +roduct +roduct ! ! +roduct>odel +roduct>odel.. Transact-SQL T ransact-SQL USE AdventureWorks2012; GO SELECT "8ST8%CT %&'e FROM Producton!Product AS , W/ERE EB8STS 5SELECT * FROM Producton!ProductMode) AS ,' W/ERE ,!ProductMode)8" ,'!ProductMode)8" A%" ,'!%&'e L8
GO (( OR USE AdventureWorks2012; GO SELECT "8ST8%CT %&'e FROM Producton!Product W/ERE ProductMode)8" 8% 5SELECT ProductMode)8" FROM Producton!ProductMode) W/ERE %&'e L8
En el si"uiente ejemplo se utili2a 91 91 en en una su*consulta correlativa o repetitiva. Se trata de una consulta 3ue depende de la consulta e?terna de sus valores. Se ejecuta varias veces$ una ve2 por cada la 3ue pueda seleccionar la consulta e?terna. Esta consulta recupera una instancia del nom*re ! apellido de cada empleado cu!a *onicación en la ta*laSales+erson ta*laSales+erson sea sea de @. @. ! ! cu!os n=meros de identicación coincidan en las ta*las Emplo!ee Emplo!ee ! ! Sales+erson Sales+erson.. Transact-SQL T ransact-SQL USE AdventureWorks2012; GO SELECT "8ST8%CT ,!L&st%&'e- ,!Frst%&'e FROM Person!Person AS , 9O8% /u'&nResources!E',)o+ee AS e O% e!#usnessEntt+8" ,!#usnessEntt+8" W/ERE 000!00 8% 5SELECT #onus FROM S&)es!S&)esPerson AS s, W/ERE e!#usnessEntt+8" s,!#usnessEntt+8"7; GO
La su*consulta anterior de esta instrucción no se puede evaluar independientemente de la consulta e?terna. 1ecesita el valor Emplo!ee.Emplo!ee98 Emplo!ee.Emplo!ee98$$ aun3ue este valor cam*ia a medida 3ue el >otor de *ase de datos de SQL Server e?amina di#erentes las de Emplo!ee Emplo!ee.. Una su*consulta correlativa se puede usar tam*in en la cl%usula 'AB91 'AB91 de de una consulta e?terna. En este ejemplo se *uscan los modelos cu!o precio m%?imo es superior al do*le de la media del modelo. Transact-SQL T ransact-SQL USE AdventureWorks2012; GO SELECT ,1!ProductMode)8" FROM Producton!Product AS ,1 GROUP #$ ,1!ProductMode)8" /A>8%G MAB5,1!LstPrce7 ? ALL 5SELECT A>G5,2!LstPrce7 FROM Producton!Product AS ,2 W/ERE ,1!ProductMode)8" ,2!ProductMode)8"7;
GO
En este ejemplo se utili2an dos su*consultas correlativas para *uscar los nom*res de los empleados 3ue 0an vendido un producto espec4co. Transact-SQL USE AdventureWorks2012; GO SELECT "8ST8%CT ,,!L&st%&'e- ,,!Frst%&'e FROM Person!Person ,, 9O8% /u'&nResources!E',)o+ee e O% e!#usnessEntt+8" ,,!#usnessEntt+8" W/ERE ,,!#usnessEntt+8" 8% 5SELECT S&)esPerson8" FROM S&)es!S&)esOrder/e&der W/ERE S&)esOrder8" 8% 5SELECT S&)esOrder8" FROM S&)es!S&)esOrder"et&) W/ERE Product8" 8% 5SELECT Product8" FROM Producton!Product , W/ERE Product%u'.er #<(MD#(42777; GO
D.Usar OU+ 6 En este ejemplo se *usca el total de cada pedido de venta de la *ase de datos. Transact-SQL USE AdventureWorks2012; GO SELECT S&)esOrder8"- SUM5LneTot&)7 AS Su.Tot&) FROM S&)es!S&)esOrder"et&) GROUP #$ S&)esOrder8" OR"ER #$ S&)esOrder8"; GO
8e*ido a la cl%usula OU+ 6$ solo se devuelve una la 3ue contiene la suma de todas las ventas por cada pedido de venta.
.Usar OU+ 6 con varios "rupos
En este ejemplo se *usca el precio medio ! la suma de las ventas anuales 0asta la #ec0a$ a"rupados por 9d. de producto e 9d. de o#erta especial. Transact-SQL USE AdventureWorks2012; GO SELECT Product8"- S,ec&)Oer8"- A>G5UntPrce7 AS Aver&e PrceSUM5LneTot&)7 AS Su.Tot&) FROM S&)es!S&)esOrder"et&) GROUP #$ Product8"- S,ec&)Oer8" OR"ER #$ Product8"; GO
'.Usar OU+ 6 ! &'EE
En el si"uiente ejemplo se colocan los resultados en "rupos despus de recuperar =nicamente las las con precios superiores a F/. Transact-SQL USE AdventureWorks2012; GO SELECT ProductMode)8"- A>G5LstPrce7 AS Aver&e Lst Prce FROM Producton!Product W/ERE LstPrce ? @1000 GROUP #$ ProductMode)8" OR"ER #$ ProductMode)8"; GO
9.Usar OU+ 6 con una e?presión En este ejemplo se a"rupa por una e?presión. +uede a"rupar por una e?presión si sta no inclu!e #unciones de a"re"ado. Transact-SQL USE AdventureWorks2012; GO SELECT A>G5Order6t+7 AS Aver&e 6u&ntt+%on"scountS&)es 5Order6t+ * UntPrce7 FROM S&)es!S&)esOrder"et&) GROUP #$ 5Order6t+ * UntPrce7 OR"ER #$ 5Order6t+ * UntPrce7 "ESC; GO
G.Usar OU+ 6 con O8E 6 En este ejemplo se *usca el precio medio de cada tipo de producto ! se ordenan los resultados por precio medio. Transact-SQL USE AdventureWorks2012; GO SELECT Product8"- A>G5UntPrce7 AS Aver&e Prce FROM S&)es!S&)esOrder"et&) W/ERE Order6t+ ? 10 GROUP #$ Product8" OR"ER #$ A>G5UntPrce7; GO
H.Usar la cl%usula 'AB91 En el primer ejemplo se muestra una cl%usula 'AB91 con una #unción de a"re"ado. A"rupa las las de la ta*laSalesOrder8etail por 9d. de producto ! elimina a3uellos productos cu!as cantidades de pedido medias son cinco o menos. En el se"undo ejemplo se muestra una cl%usula 'AB91 sin #unciones de a"re"ado. Transact-SQL USE AdventureWorks2012; GO SELECT Product8" FROM S&)es!S&)esOrder"et&)
GROUP #$ Product8" /A>8%G A>G5Order6t+7 ? OR"ER #$ Product8"; GO
En esta consulta se utili2a la cl%usula L9HE en la cl%usula 'AB91. USE AdventureWorks2012 ; GO SELECT S&)esOrder8"- C&rrerTr&ckn%u'.er FROM S&)es!S&)esOrder"et&) GROUP #$ S&)esOrder8"- C&rrerTr&ckn%u'.er /A>8%G C&rrerTr&ckn%u'.er L8
L.Usar 'AB91 ! OU+ 6 En el si"uiente ejemplo se muestra el uso de las cl%usulas OU+ 6$ 'AB91$ &'EE ! O8E 6 en una instrucciónSELECT. enera "rupos ! valores de resumen pero lo 0ace tras eliminar los productos cu!os precios superan los @ F ! cu!as cantidades de pedido medias son in#eriores a @. Tam*in or"ani2a los resultados por +roduct98. Transact-SQL USE AdventureWorks2012; GO SELECT Product8" FROM S&)es!S&)esOrder"et&) W/ERE UntPrce 3 2!00 GROUP #$ Product8" /A>8%G A>G5Order6t+7 ? OR"ER #$ Product8"; GO
>.Usar 'AB91 con SU> ! AB En el si"uiente ejemplo se a"rupa la ta*la SalesOrder8etail por 9d. de producto ! solo se inclu!en a3uellos "rupos de productos cu!os pedidos suman m%s de F/. ! cu!as cantidades de pedido medias son in#eriores a I. Transact-SQL USE AdventureWorks2012; GO SELECT Product8"- A>G5Order6t+7 AS Aver&e6u&ntt+- SUM5LneTot&)7 AS Tot&) FROM S&)es!S&)esOrder"et&) GROUP #$ Product8" /A>8%G SUM5LneTot&)7 ? @1000000!00 A%" A>G5Order6t+7 3 H; GO
+ara ver los productos cu!as ventas totales son superiores a F.$ utilice esta consultaJ
Transact-SQL USE AdventureWorks2012; GO SELECT Product8"- Tot&) SUM5LneTot&)7 FROM S&)es!S&)esOrder"et&) GROUP #$ Product8" /A>8%G SUM5LneTot&)7 ? @2000000!00; GO
Si desea ase"urarse de 3ue 0a! al menos mil 3uinientos elementos para los c%lculos de cada producto$ use 'AB91 COU1T() K /@ para eliminar los productos 3ue devuelven totales in#eriores a /@ elementos vendidos. La consulta ser4a la si"uienteJ Transact-SQL USE AdventureWorks2012; GO SELECT Product8"- SUM5LneTot&)7 AS Tot&) FROM S&)es!S&)esOrder"et&) GROUP #$ Product8" /A>8%G COU%T5*7 ? 100; GO
1.Usar la su"erencia del optimi2ador 918E< En el ejemplo si"uiente se muestran dos #ormas de usar la su"erencia del optimi2ador 918E<. En el primer ejemplo se muestra cómo o*li"ar al optimi2ador a 3ue use un 4ndice no cl=ster para recuperar las de una ta*la$ mientras 3ue en el se"undo ejemplo se o*li"a a reali2ar un recorrido de ta*la mediante un 4ndice i"ual a . Transact-SQL USE AdventureWorks2012; GO SELECT ,,!Frst%&'e- ,,!L&st%&'e- e!%&ton&)8"%u'.er FROM /u'&nResources!E',)o+ee AS e W8T/ 58%"EB5A<:E',)o+ee:%&ton&)8"%u'.er77 9O8% Person!Person AS ,, on e!#usnessEntt+8" ,,!#usnessEntt+8" W/ERE L&st%&'e 9oInson; GO (( Force & t&.)e sc&n .+ usn 8%"EB 0! USE AdventureWorks2012; GO SELECT ,,!L&st%&'e- ,,!Frst%&'e- e!9o.Tt)e FROM /u'&nResources!E',)o+ee AS e W8T/ 58%"EB 07 9O8% Person!Person AS ,, O% e!#usnessEntt+8" ,,!#usnessEntt+8" W/ERE L&st%&'e 9oInson; GO
>.Usar O+T9O1 ! las su"erencias OU+ En el ejemplo si"uiente se muestra cómo se usa la cl%usula O+T9O1 (OU+) con una cl%usula OU+ 6.
Transact-SQL USE AdventureWorks2012; GO SELECT Product8"- Order6t+- SUM5LneTot&)7 AS Tot&) FROM S&)es!S&)esOrder"et&) W/ERE UntPrce 3 @!00 GROUP #$ Product8"- Order6t+ OR"ER #$ Product8"- Order6t+ OPT8O% 5/AS/ GROUP- FAST 107; GO
O.Usar la su"erencia de consulta U19O1 En el ejemplo si"uiente se usa la su"erencia de consulta >EE U19O1. Transact-SQL USE AdventureWorks2012; GO SELECT #usnessEntt+8"- 9o.Tt)e- /re"&te- >&c&ton/oursSckLe&ve/ours FROM /u'&nResources!E',)o+ee AS e1 U%8O% SELECT #usnessEntt+8"- 9o.Tt)e- /re"&te- >&c&ton/oursSckLe&ve/ours FROM /u'&nResources!E',)o+ee AS e2 OPT8O% 5MERGE U%8O%7; GO
+.Usar una instrucción U19O1 simple En el ejemplo si"uiente$ el conjunto de resultados inclu!e el contenido de las columnas +roduct>odel98 ! 1ame de las ta*las +roduct>odel ! loves. Transact-SQL USE AdventureWorks2012; GO 8F O#9ECT:8" 5d.o!G)oves- U7 8S %OT %ULL "ROP TA#LE d.o!G)oves; GO (( Cre&te G)oves t&.)e! SELECT ProductMode)8"- %&'e 8%TO d.o!G)oves FROM Producton!ProductMode) W/ERE ProductMode)8" 8% 5H- 47; GO (( /ere s tIe s',)e unon! USE AdventureWorks2012; GO SELECT ProductMode)8"- %&'e FROM Producton!ProductMode) W/ERE ProductMode)8" %OT 8% 5H- 47
U%8O% SELECT ProductMode)8"- %&'e FROM d.o!G)oves OR"ER #$ %&'e; GO
Q.Usar SELECT 91TO con U19O1 En el ejemplo si"uiente$ la cl%usula 91TO de la se"unda instrucción SELECT especica 3ue la ta*la denominada+roductesults contiene el conjunto nal de resultados de la unión de las columnas desi"nadas de las ta*las+roduct>odel ! loves. Ten"a en cuenta 3ue la ta*la loves se crea en la primera instrucción SELECT. Transact-SQL USE AdventureWorks2012; GO 8F O#9ECT:8" 5d.o!ProductResu)ts- U7 8S %OT %ULL "ROP TA#LE d.o!ProductResu)ts; GO 8F O#9ECT:8" 5d.o!G)oves- U7 8S %OT %ULL "ROP TA#LE d.o!G)oves; GO (( Cre&te G)oves t&.)e! SELECT ProductMode)8"- %&'e 8%TO d.o!G)oves FROM Producton!ProductMode) W/ERE ProductMode)8" 8% 5H- 47; GO USE AdventureWorks2012; GO SELECT ProductMode)8"- %&'e 8%TO d.o!ProductResu)ts FROM Producton!ProductMode) W/ERE ProductMode)8" %OT 8% 5H- 47 U%8O% SELECT ProductMode)8"- %&'e FROM d.o!G)oves; GO SELECT ProductMode)8"- %&'e FROM d.o!ProductResu)ts;
.Usar U19O1 con dos instrucciones SELECT ! O8E 6 El orden de al"unos par%metros empleados con la cl%usula U19O1 es importante. En el ejemplo si"uiente se muestra el uso correcto e incorrecto de U19O1 en dos instrucciones SELECT en las 3ue se va a cam*iar el nom*re de una columna en el resultado. Transact-SQL
USE AdventureWorks2012; GO 8F O#9ECT:8" 5d.o!G)oves- U7 8S %OT %ULL "ROP TA#LE d.o!G)oves; GO (( Cre&te G)oves t&.)e! SELECT ProductMode)8"- %&'e 8%TO d.o!G)oves FROM Producton!ProductMode) W/ERE ProductMode)8" 8% 5H- 47; GO J* 8%CORRECT *J USE AdventureWorks2012; GO SELECT ProductMode)8"- %&'e FROM Producton!ProductMode) W/ERE ProductMode)8" %OT 8% 5H- 47 OR"ER #$ %&'e U%8O% SELECT ProductMode)8"- %&'e FROM d.o!G)oves; GO J* CORRECT *J USE AdventureWorks2012; GO SELECT ProductMode)8"- %&'e FROM Producton!ProductMode) W/ERE ProductMode)8" %OT 8% 5H- 47 U%8O% SELECT ProductMode)8"- %&'e FROM d.o!G)oves OR"ER #$ %&'e; GO
S.Usar U19O1 de tres instrucciones SELECT para mostrar los e#ectos de ALL ! los parntesis En los si"uientes ejemplos se utili2a U19O1 para com*inar los resultados de tres ta*las 3ue tienen las mismas @ las de datos. En el primer ejemplo se utili2a U19O1 ALL para mostrar los re"istros duplicados ! se devuelven las /@ las.En el se"undo ejemplo se utili2a U19O1 sin ALL para eliminar las las duplicadas de los resultados com*inados de las tres instrucciones SELECT ! se devuelven @ las. En el tercer ejemplo se utili2a ALL con el primer U19O1 ! los parntesis inclu!en al se"undo U19O1 3ue no utili2a ALL.El se"undo U19O1 se procesa en primer lu"ar por3ue se encuentra entre parntesis. 8evuelve @ las por3ue no se utili2a la opción ALL ! se 3uitan los duplicados. Estas @ las se com*inan con los resultados del
primer SELECTmediante las pala*ras clave U19O1 ALL. Esto no 3uita los duplicados entre los dos conjuntos de @ las. El resultado nal es de / las. Transact-SQL USE AdventureWorks2012; GO 8F O#9ECT:8" 5d.o!E',)o+eeOne- U7 8S %OT %ULL "ROP TA#LE d.o!E',)o+eeOne; GO 8F O#9ECT:8" 5d.o!E',)o+eeTo- U7 8S %OT %ULL "ROP TA#LE d.o!E',)o+eeTo; GO 8F O#9ECT:8" 5d.o!E',)o+eeTIree- U7 8S %OT %ULL "ROP TA#LE d.o!E',)o+eeTIree; GO SELECT ,,!L&st%&'e- ,,!Frst%&'e- e!9o.Tt)e 8%TO d.o!E',)o+eeOne FROM Person!Person AS ,, 9O8% /u'&nResources!E',)o+ee AS e O% e!#usnessEntt+8" ,,!#usnessEntt+8" W/ERE L&st%&'e 9oInson; GO SELECT ,,!L&st%&'e- ,,!Frst%&'e- e!9o.Tt)e 8%TO d.o!E',)o+eeTo FROM Person!Person AS ,, 9O8% /u'&nResources!E',)o+ee AS e O% e!#usnessEntt+8" ,,!#usnessEntt+8" W/ERE L&st%&'e 9oInson; GO SELECT ,,!L&st%&'e- ,,!Frst%&'e- e!9o.Tt)e 8%TO d.o!E',)o+eeTIree FROM Person!Person AS ,, 9O8% /u'&nResources!E',)o+ee AS e O% e!#usnessEntt+8" ,,!#usnessEntt+8" W/ERE L&st%&'e 9oInson; GO (( Unon ALL SELECT L&st%&'e- Frst%&'e- 9o.Tt)e FROM d.o!E',)o+eeOne U%8O% ALL SELECT L&st%&'e- Frst%&'e -9o.Tt)e FROM d.o!E',)o+eeTo U%8O% ALL SELECT L&st%&'e- Frst%&'e-9o.Tt)e FROM d.o!E',)o+eeTIree; GO SELECT L&st%&'e- Frst%&'e-9o.Tt)e FROM d.o!E',)o+eeOne U%8O% SELECT L&st%&'e- Frst%&'e- 9o.Tt)e FROM d.o!E',)o+eeTo
U%8O% SELECT L&st%&'e- Frst%&'e- 9o.Tt)e FROM d.o!E',)o+eeTIree; GO SELECT L&st%&'e- Frst%&'e-9o.Tt)e FROM d.o!E',)o+eeOne U%8O% ALL 5 SELECT L&st%&'e- Frst%&'e- 9o.Tt)e FROM d.o!E',)o+eeTo U%8O% SELECT L&st%&'e- Frst%&'e- 9o.Tt)e FROM d.o!E',)o+eeTIree 7; GO
DO (cl%usula de TransactSQL) SQL Server 2014
Otras versiones
La cl%usula DO se utili2a para especicar la opción 6O&SE o <>L. 6O&SE ! <>L son opciones no relacionadas. Importante
La directiva XMLDATA para la opción FOR XML ha quedado desusada. Utilice la XSD generación en los odos RA! " AUTO. #o ha" sustitución para la directiva XMLDATA en odo $X%L&'&T. $sta caracter(stica se quitar) en una versión *utura de Microso*t S+L Server. $vite utili,ar esta caracter(stica en nuevos tra-aos de desarrollo " tenga previsto odi*icar las aplicaciones que actualente la utili,an. Se aplica a/ S+L Server 0S+L Server 1223 a versión actual45 !indo6s A,ure S+L Data-ase 07ersión
inicial a versión actual4.
Convenciones de sinta?is de Transact-SQL
Sinta?is FOR K #ROWSE 3BML? 3BML? NN BML K K RAW 5 E)e'ent%&'e 7 AUTO 3Co''on"rectves? - K BML"ATA BMLSC/EMA 5 T&ret%&'eS,&ceUR8 7 - ELEME%TS BS8%8L A#SE%T EBPL8C8T 3Co''on"rectves? - BML"ATA PAT/ 5 E)e'ent%&'e 7 3Co''on"rectves? - ELEME%TS BS8%8L A#SE%T 3Co''on"rectves? NN - #8%AR$ #ASED4 - T$PE - ROOT 5 Root%&'e 7
Ar"umentos 6O&SE Especica 3ue se permiten las actuali2aciones mientras se visuali2an los datos en el cursor del modo de e?ploración de 86-Li*rar!. Una ta*la se puede e?plorar en una aplicación si la ta*la inclu!e una columnatimestamp$ la ta*la tiene un 4ndice =nico ! la opción DO 6O&SE est% al nal de las instrucciones SELECT enviadas a una instancia de SQL Server. Nota
#o se puede utili,ar 8loc9:hint;
RO!S$.
DO 6O&SE no puede aparecer en instrucciones SELECT com*inadas mediante el operador U19O1.
Nota
'uando las colunas de clave de (ndice ?nico de una ta-la pueden aceptar valores #ULL5 " la ta-la est) en la parte interna de la co-inación e@terna5 el (ndice no se adite en el odo de e@ploración.
El modo de e?ploración permite e?aminar las las de la ta*la de SQL Server ! actuali2ar los datos de la ta*la la por la. +ara tener acceso a una ta*la de SQL Server en una aplicación en el modo de e?ploración$ de*e utili2ar una de las dos opciones si"uientesJ La instrucción SELECT 3ue utili2a para tener acceso a los datos de la ta*la de SQL Server de*e nali2ar con las pala*ras clave FOR BROWSE. Al activar la opción FOR BROWSE para utili2ar el modo de e?ploración$ se crean ta*las temporales. 8e*e ejecutar la instrucción de Transact-SQL si"uiente para activar el modo de e?ploración utili2ando la opción NO_BROWSETABLEJ •
•
•
SET %O:#ROWSETA#LE O%
Al activar la opción NO_BROWSETABLE$ todas las instrucciones SELECT se comportan como si la opción FOR BROWSE se ane?ara a las instrucciones. Sin em*ar"o$ la opción NO_BROWSETABLE no crea las ta*las temporales 3ue la opción FOR BROWSE utili2a "eneralmente para enviar los resultados a la aplicación. Cuando se intenta tener acceso a los datos de las ta*las de SQL Server en modo de e?ploración utili2ando una consulta SELECT 3ue i mplica una instrucción de com*inación e?terna$ ! cuando se dene un 4ndice =nico en la ta*la 3ue est% presente en el lado interno de una instrucción de com*inación e?terna$ el modo de e?ploración no admite el 4ndice =nico. El modo de e?ploración =nicamente admite el 4ndice =nico cuando todas las columnas de clave de 4ndice =nico pueden aceptar valores 1ULL. El modo de e?ploración no admite el 4ndice =nico si se cumplen las condiciones si"uientesJ 9ntenta tener acceso a los datos de las ta*las de SQL Server en modo de e?ploración utili2ando una consulta SELECT 3ue implica una instrucción de com*inación e?terna. Un 4ndice =nico se dene en la ta*la 3ue est% presente en el lado interno de una instrucción de com*inación e?terna. +ara reproducir este comportamiento en el modo de e?ploración$ si"a estos pasosJ /. En SQL Server >ana"ement Studio$ cree una *ase de datos denominada Sample86. . En la *ase de datos Sample86$ cree una ta*la tle#t ! una ta*la tri"0t 3ue conten"an am*as una =nica columna 3ue se denomine c/. 8ena un 4ndice =nico en la columna c/ de la ta*la tle#t ! esta*le2ca la columna para aceptar valores 1ULL. +ara ello$ ejecute las instrucciones de Transact-SQL si"uientes en una ventana de consulta adecuadaJ •
•
H! CREATE TA#LE t)et5c1 8%T %ULL U%86UE7 ;
4! GO ! CREATE TA#LE trIt5c1 8%T %ULL7 ; D! GO
. 9nserte varios valores en las ta*las tle#t ! tri"0t. Ase"=rese de insertar un valor 1ULL en la ta*la tle#t.+ara ello$ ejecute las instrucciones de Transact-SQL si"uientes en la ventana de consultaJ ! 8%SERT 8%TO t)et >ALUES527 ; ! 8%SERT 8%TO t)et >ALUES5%ULL7 ; 10! 8%SERT 8%TO trIt >ALUES517 ; 11! 8%SERT 8%TO trIt >ALUES5H7 ; 12! 8%SERT 8%TO trIt >ALUES5%ULL7 ; 1H! GO
/5. Active la opción NO_BROWSETABLE. +ara ello$ ejecute las instrucciones de Transact-SQL si"uientes en la ventana de consultaJ 1! 1D!
SET %O:#ROWSETA#LE O% ; GO
/. O*ten"a acceso a los datos de las ta*las tle#t ! tri"0t utili2ando una instrucción de com*inación e?terna en la consulta SELECT. Ase"=rese de 3ue la ta*la tle#t est% en el lado interno de la instrucción de com*inación e?terna. +ara ello$ ejecute las instrucciones de Transact-SQL si"uientes en la ventana de consultaJ 1! 1! 20! 21! 22!
SELECT t)et!c1 FROM t)et R8G/T 9O8% trIt O% t)et!c1 trIt!c1 W/ERE trIt!c1 3? 2 ;
O*serve la salida si"uiente en el panel esultadosJ c/ ---1ULL 1ULL 8espus de ejecutar la consulta SELECT para o*tener acceso a las ta*las en el modo de e?ploración$ el conjunto de resultados de la consulta SELCT contiene dos valores 1ULL para la columna c/ de la ta*la tle#t de*ido a la denición de la instrucción de com*inación e?terna derec0a. +or consi"uiente$ en el conjunto de resultados no puede distin"uir entre los valores 1ULL 3ue proced4an de la ta*la ! los incluidos por la instrucción de com*inación e?terna derec0a. +uede reci*ir resultados incorrectos si de*e omitir los valores 1ULL del conjunto de resultados. Nota
Si las colunas que est)n incluidas en el (ndice ?nico no aceptan valores #ULL5 todos los
valores #ULL en el conunto de resultados *ueron incluidos por la instrucción de co-inación e@terna.
<>L Especica 3ue el resultado de una consulta se devolver% como documento <>L. 8e*e especicarse uno de los si"uientes modos <>LJ A&$ AUTO$ E<+L9C9T. +ara o*tener m%s in#ormación acerca de datos <>L ! SQL Server$ vea DO <>L (SQL Server). A& M ('ElementName') N O*tiene el resultado de la consulta ! trans#orma cada la del conjunto de resultados en un elemento <>L con un identicador "enrico ro; PK como eti3ueta del elemento. Opcionalmente$ puede especicar un nom*re para el elemento de la. La salida <>L resultante utili2a el par%metro ElementName especicado como el elemento de la "enerado para cada la. +ara o*tener m%s in#ormación$ vea Usar el modo A& con DO <>L! Usar el modo A& con DO <>L. AUTO 8evuelve los resultados de la consulta en un %r*ol anidado <>L sencillo. Cada ta*la de la cl%usula DO>$ para la 3ue al menos se presenta una columna en la cl%usula SELECT$ se representa como elemento <>L. A las columnas presentadas en la cl%usula SELECT se les asi"nan los atri*utos de elemento apropiados. +ara o*tener m%s in#ormación$ vea Usar el modo AUTO con DO <>L. E<+L9C9T Especica 3ue la #orma del %r*ol <>L resultante est% denida e?pl4citamente. Con este modo$ es necesario escri*ir las consultas de una cierta manera$ de modo 3ue se pueda especicar e?pl4citamente in#ormación adicional acerca de la anidación deseada. +ara o*tener m%s in#ormación$ vea Usar el modo E<+L9C9T con DO <>L. <>L8ATA 8evuelve el es3uema <8 insertado$ pero no a"re"a el elemento ra42 al resultado. Si se especica <>L8ATA$ el es3uema <8 se a"re"a al documento. <>LSC'E>A M ('TargetNameSpaceURI ') N 8evuelve el es3uema E1TS Especica 3ue las columnas se devuelven como su*elementos. Sin em*ar"o$ se les asi"nan atri*utos <>L. Esta opción solo se admite en los modos A&$ AUTO ! +AT'. +ara o*tener m%s in#ormación$ vea Usar el modo A& con DO <>L. E1TS. +ara o*tener m%s in#ormación$ vea enerar elementos para valores 1ULL mediante el par%metro
9ndica 3ue para los valores de columna 1ULL$ no se a"re"ar%n los elementos <>L correspondientes en el resultado <>L. Especi3ue esta opción solo con ELE>E1TS. +AT' M ('ElementName') N enera un contenedor del elemento de ro;K para cada la en el conjunto de resultados. Opcionalmente$ especi3ue un nom*re de elemento para el contenedor del elemento ro;K. Si se proporciona una cadena vac4a$ como DO <>L +AT' ('') $ no se "enera un elemento contenedor. El uso de +AT' puede proporcionar una alternativa m%s sencilla a consultas escritas con la directiva E<+L9C9T. +ara o*tener m%s in#ormación$ veaUsar el modo +AT' con DO <>L. 691A 6ASE5 Especica 3ue la consulta devuelve los datos *inarios en el #ormato codicado 691A 6ASE5. Al recuperar datos *inarios mediante el modo A& ! E<+L9C9T$ se de*e especicar esta opción. 7ste es el valor predeterminado en el modo AUTO. T+E Especica 3ue la consulta devuelve un resultado de tipo xm". +ara o*tener m%s in#ormación$ vea 8irectiva T+E en consultas DO <>L. OOT M ('RootName') N Especica 3ue se va a a"re"ar un solo elemento de nivel superior al <>L resultante. Opcionalmente puede especicar el nom*re del elemento ra42 3ue se va a "enerar. Si no se especica el nom*re de ra42 opcional$ se a"re"a el elemento rootK predeterminado.
Ejemplos
En el si"uiente ejemplo se especica DO <>L AUTO con las opciones T+E ! <>LSC'E>A. 8e*ido a la opción T+E$ el conjunto de resultados 3ue se devuelve al cliente es de tipo xm". La opción <>LSC'E>A especica 3ue el es3uema L devueltos ! la opción ELE>E1TS especica 3ue el resultado <>L est% centrado en elementos. USE AdventureWorks2012; GO SELECT ,!#usnessEntt+8"- Frst%&'e- L&st%&'e- PIone%u'.er AS PIone FROM Person!Person AS , 9O8% Person!PersonPIone AS ,,I O% ,!#usnessEntt+8" ,,I!#usnessEntt+8" W/ERE L&st%&'e L8
OU+ 6 (Transact-SQL)
SQL Server 2014
Otras versiones
A"rupa un conjunto de las seleccionado en un conjunto de las de resumen de acuerdo con los valores de una o m%s columnas o e?presiones en SQL Server /5. Se devuelve una la para cada "rupo. Las #unciones de a"re"ado de la lista selectK de la cl%usula SELECT proporcionan in#ormación de cada "rupo en lu"ar de las individuales. La cl%usula OU+ 6 tiene una sinta?is 3ue cumple la norma 9SO ! otra sinta?is 3ue no cumple dic0a norma. Solo se puede usar un estilo de sinta?is en cada instrucción SELECT. Use la sinta?is 3ue cumple la norma 9SO para todos los tra*ajos nuevos. La sinta?is 3ue no cumple dic0a norma solo se inclu!e por motivos de compati*ilidad con versiones anteriores. En este tema$ una cl%usula OU+ 6 se puede descri*ir como "eneral o como simpleJ •
•
Una cl%usula OU+ 6 "eneral inclu!e los elementos OU+91 SETS$ CU6E$ OLLU+$ &9T' CU6E o &9T' OLLU+. Una cl%usula OU+ 6 simple no inclu!e OU+91 SETS$ CU6E$ OLLU+$ &9T' CU6E ni &9T' OLLU+. OU+ 6 ()$ total "eneral$ se considera una cl%usula OU+ 6 simple.
Se aplica a/ S+L Server 0desde S+L Server 1223 hasta la versión actual45 !indo6s A,ure S+L Data-ase 0desde la versión inicial hasta la versión actual4.
Convenciones de sinta?is de Transact-SQL (Transact-SQL)
Sinta?is 8SO(Co',)&nt S+nt& GROUP #$ 3rou, .+ s,ec? 3rou, .+ s,ec? NN 3rou, .+ te'? -!!!n 3rou, .+ te'? NN 3s',)e rou, .+ te'?
3ro))u, s,ec? 3cu.e s,ec? 3rou,n sets s,ec? 3r&nd tot&)?
3s',)e rou, .+ te'? NN 3co)u'n:e,resson? 3ro))u, s,ec? NN ROLLUP 5 3co',oste e)e'ent )st? 7 3cu.e s,ec? NN CU#E 5 3co',oste e)e'ent )st? 7 3co',oste e)e'ent )st? NN 3co',oste e)e'ent? -!!!n 3co',oste e)e'ent? NN 3s',)e rou, .+ te'? 5 3s',)e rou, .+ te' )st? 7 3s',)e rou, .+ te' )st? NN 3s',)e rou, .+ te'? -!!!n 3rou,n sets s,ec? NN GROUP8%G SETS 5 3rou,n set )st? 7 3rou,n set )st? NN 3rou,n set? -!!!n 3rou,n set? NN 3r&nd tot&)? 3rou,n set te'? 5 3rou,n set te' )st? 7 3e',t+ rou,? NN 5 7 3rou,n set te'? NN 3s',)e rou, .+ te'? 3ro))u, s,ec? 3cu.e s,ec? 3rou,n set te' )st? NN 3rou,n set te'? -!!!n %on(8SO(Co',)&nt S+nt& GROUP #$ ALL rou,:.+:e,resson -!!!n W8T/ K CU#E ROLLUP
Ar"umentos columnRe?pressionK Es la e?presión en la 3ue se reali2a la operación de a"rupamiento. OLLU+ ( ) enera las de a"re"ado mediante la cl%usula OU+ 6 simple$ m%s las de su*total o de supera"re"ado$ as4 como una la de total "eneral. El n=mero de a"rupaciones 3ue se devuelve es i"ual al n=mero de e?presiones de la lista de elementos compuestosK m%s uno. Considere$ por ejemplo$ la si"uiente instrucciónJ SELECT &- .- c- SUM 5 3e,resson? 7 FROM T GROUP #$ ROLLUP 5&-.-c7;
Se "enera una la con un su*total para cada com*inación =nica de valores de (a$ *$ c)$ (a$ *) ! (a).Tam*in se calcula una la de total "eneral. Las columnas se acumulan de derec0a a i23uierda. El orden de las columnas inu!e en las a"rupaciones de salida de OLLU+ ! tam*in puede a#ectar al n=mero de las del conjunto de resultados. CU6E ( ) enera las de a"re"ado mediante la cl%usula OU+ 6 simple$ las de supera"re"ado mediante la instrucción OLLU+ ! las de ta*ulación cru2ada. CU6E "enera una a"rupación para todas las permutaciones de e?presiones de la lista de elementos compuestosK. El n=mero de a"rupaciones "enerado es i"ual a (n)$ donde n es el n=mero de e?presiones de la lista de elementos compuestosK. Considere$ por ejemplo$ la si"uiente instrucciónJ SELECT &- .- c- SUM 53e,resson?7 FROM T GROUP #$ CU#E 5&-.-c7;
Se "enera una la para cada com*inación =nica de valores de (a$ *$ c)$ (a$ *)$ (a$ c)$ (*$ c)$ (a)$ (*) !(c)$ con un su*total para cada la ! una la de total "eneral. El orden de las columnas no a#ecta a la salida de CU6E.
OU+91 SETS ( ) Especica varias a"rupaciones de datos en una consulta. Solo se a"re"an los "rupos especicados$ en lu"ar del conjunto completo de a"re"aciones "enerado por CU6E o OLLU+. Los resultados son e3uivalentes a usar la instrucción U19O1 ALL en los "rupos especicados. OU+91 SETS puede contener un =nico elemento o una lista de elementos. OU+91 SETS puede especicar a"rupaciones e3uivalentes a las devueltas por OLLU+ o CU6E. La lista de elementos de conjunto de a"rupaciónK puede contener OLLU+ o CU6E. () El "rupo vac4o "enera un total.
Sinta?is 3ue no cumple la norma 9SO ALL Esta caracter4stica se 3uitar% en una versión #utura de >icroso#t SQL Server. Evite utili2ar esta caracter4stica en nuevos tra*ajos de desarrollo ! ten"a previsto modicar las aplicaciones 3ue actualmente la utili2an.9nclu!e todos los "rupos ! conjuntos de resultados$ incluso a3uellos en los 3ue no 0a! las 3ue cumplan la condición de *=s3ueda especicada en la cl%usula &'EE. Cuando se especica ALL$ se devuelven valores 1ULL para las columnas de resumen de los "rupos 3ue no cumplen la condición de *=s3ueda. 1o puede especicar ALL con los operadores CU6E ! OLLU+. OU+ 6 ALL no se admite en consultas 3ue tienen acceso a ta*las remotas si tam*in 0a! una cl%usula &'EE en la consulta. OU+ 6 ALL "enerar% error en las columnas 3ue ten"an el atri*uto D9LESTEA>. group_by_expression
Es una e?presión se"=n la cual se reali2a la a"rupación. group_by_expression tam*in se conoce como columna de a"rupación. group_by expression puede ser una columna o una e?presión no a"re"ada 3ue 0a"a re#erencia a una columna devuelta por la cl%usula DO>. Un alias de columna 3ue est denido en la lista SELECT no puede usarse para especicar una columna de a"rupamiento.
N$ta
Las colunas de tipo text5 ntext e image no se pueden utili,ar en group_by_expression.
En las cl%usulas OU+ 6 3ue no conten"an CU6E o OLLU+$ el n=mero de elementos group_by_expressionest% limitado por los tamaos de columna de OU+ 6$ las columnas de a"re"ado ! los valores de a"re"ado 3ue participan en la consulta. Este l4mite procede del l4mite de . *!tes de la ta*la de tra*ajo intermedia 3ue se necesita para contener los resultados intermedios de la consulta. Se permite un m%?imo de / e?presiones de a"rupamiento cuando se especica CU6E o OLLU+. 1o se pueden especicar mtodos de tipos de datos xm" directamente en group_by_expression. En su lu"ar$ 0a"a re#erencia a una #unción denida por el usuario 3ue inclu!a mtodos de tipos de datos xm"$ o 0a"a re#erencia a una columna calculada 3ue los utilice. &9T' CU6E Esta caracter4stica se 3uitar% en una versión #utura de >icroso#t SQL Server. Evite utili2ar esta caracter4stica en nuevos tra*ajos de desarrollo ! ten"a previsto modicar las aplicaciones 3ue actualmente la utili2an. Especica 3ue$ adem%s de las las 3ue normalmente proporciona OU+ 6$ de*en incluirse las de resumen en el conjunto de resultados. Se devuelve una la de resumen OU+ 6 por cada posi*le com*inación de "rupo ! su*"rupo del conjunto de resultados. Utilice la #unción OU+91 para determinar si los valores 1ULL del conjunto de resultados son valores de resumen OU+ 6. El n=mero de las de resumen del conjunto de resultados se determina mediante el n=mero de columnas 3ue contiene la cl%usula OU+ 6. 8e*ido a 3ue CU6E devuelve todas las com*inaciones posi*les de "rupo ! su*"rupo$ el n=mero de las es el mismo$ independientemente del orden en 3ue se especi3uen las columnas de a"rupamiento. &9T' OLLU+ Esta caracter4stica se 3uitar% en una versión #utura de >icroso#t SQL Server. Evite utili2ar esta caracter4stica en nuevos tra*ajos de desarrollo ! ten"a previsto modicar las aplicaciones 3ue actualmente la utili2an. Especica 3ue$ adem%s de las las 3ue normalmente proporciona OU+ 6$ de*en incluirse las de resumen en el conjunto de resultados. Los "rupos se resumen en un orden jer%r3uico$ desde el nivel in#erior del "rupo 0asta el superior. La jerar3u4a del "rupo se determina por el orden en 3ue se especican las columnas de a"rupamiento. Cam*iar el orden de las columnas de a"rupamiento puede a#ectar al n=mero de las "eneradas en el conjunto de resultados.
%mp$rta!te
'uando se utili,a 'U>$ o ROLLU% no se aditen agregados Distinct5 coo A7 0D&ST'T column_name45 'OU#T 0D&ST'T column_name4 " SUM 0D&ST'T column_name4. Si se utili,an5 Motor de -ase de datos de S+L Server devuelve un ensae de error " cancela la consulta.
Comentarios Las e?presiones de la cl%usula OU+ 6 pueden contener columnas de las ta*las$ de las ta*las derivadas o de las vistas de la cl%usula DO>. 1o es necesario 3ue apare2can las columnas en la lista de selecciónK de la cl%usula SELECT. 8e*en incluirse en la lista OU+ 6 todas las columnas de la ta*la o la vista de cual3uier e?presión no a"re"ada de la lista de selecciónKJ •
• • • •
•
• •
Est%n permitidas las si"uientes instruccionesJ SELECT Co)u'nA- Co)u'n# FROM T GROUP #$ Co)u'nA- Co)u'n#; SELECT Co)u'nA Q Co)u'n# FROM T GROUP #$ Co)u'nA- Co)u'n#; SELECT Co)u'nA Q Co)u'n# FROM T GROUP #$ Co)u'nA Q Co)u'n#; SELECT Co)u'nA Q Co)u'n# Q const&nt FROM T GROUP #$ Co)u'nACo)u'n#;
1o est%n permitidas las si"uientes instruccionesJ SELECT Co)u'nA- Co)u'n# FROM T GROUP #$ Co)u'nA Q Co)u'n#; SELECT Co)u'nA Q const&nt Q Co)u'n# FROM T GROUP #$ Co)u'nA Q Co)u'n#;
Si se inclu!en #unciones de a"re"ado en la lista de selecciónK de la cl%usula SELECT$ OU+ 6 calcula un valor de resumen para cada "rupo. Se conocen como a"re"ados vectoriales. Las las 3ue no cumplen las condiciones especicadas en la cl%usula &'EE se 3uitan antes de reali2ar nin"una operación de a"rupación. La cl%usula 'AB91 se usa junto con la cl%usula OU+ 6 para ltrar los "rupos en el conjunto de resultados. La cl%usula OU+ 6 no ordena el conjunto de resultados. En su lu"ar$ use la cl%usula O8E 6 para ordenarlo. Si una columna de a"rupamiento contiene varios valores 1ULL$ todos ellos se consideran e3uivalentes ! se colocan en un "rupo individual.
1o es posi*le usar OU+ 6 con un alias para reempla2ar el nom*re de una columna en la cl%usula AS$ a menos 3ue dic0o alias sustitu!a a un nom*re de columna en una ta*la derivada de la cl%usula DO>. Los conjuntos de a"rupación duplicados de una lista OU+91 SETS no se eliminan. Los conjuntos de a"rupación duplicados se pueden "enerar especicando una e?presión de columna m%s de una ve2 o inclu!endo una e?presión de columna tam*in "enerada por una instrucción CU6E o OLLU+ en la lista OU+91 SETS. Cuando se utili2a OLLU+$ CU6E ! OU+91 SETS se admite n a"re"ados 8istinct$ como AB (89ST91CT column_name)$ COU1T (89ST91CT column_name) ! SU> (89ST91CT column_name). OLLU+$ CU6E ! OU+91 SETS no se pueden especicar en una vista inde?ada. OU+ 6 o 'AB91 no se pueden usar directamente en columnas de !text$ text o ima&e. Estas columnas se pueden usar como ar"umentos en #unciones 3ue devuelven un valor de otro tipo de datos$ como SU6ST91() ! CAST(). 1o se pueden especicar mtodos de tipos de datos xm" directamente en columnRe?pressionK. En su lu"ar$ 0a"a re#erencia a una #unción denida por el usuario 3ue inclu!a mtodos de tipos de datos xm" o 0a"a re#erencia a una columna calculada 3ue los utilice.
Limitaciones de OU+ 6 para OU+91 SETS$ OLLU+ ! CU6E Limitaciones de la sintaxis
Los operadores OU+91 SETS no se pueden usar en la cl%usula OU+ 6 a menos 3ue #ormen parte de una lista OU+91 SETS. +or ejemplo$ no se admite OU+ 6 C/$ (C$...$ Cn) pero s4 OU+ 6 OU+91 SETS (C/$ (C$ ...$ Cn)). Los operadores OU+91 SETS no se pueden usar dentro de OU+91 SETS. +or ejemplo$ no se admite OU+ 6 OU+91 SETS (C/$ OU+91 SETS (C$ CI)). Las pala*ras clave 3ue no cumplen la norma 9SO ALL$ &9T' CU6E ! &9T' OLLU+ no se pueden usar en una cl%usula OU+ 6 con las pala*ras clave OLLU+$ CU6E o OU+91 SETS. Limitaciones de tamaño
En la cl%usula simple OU+ 6$ no 0a! nin"=n l4mite en cuanto al n=mero de e?presiones. En una cl%usula OU+ 6 3ue utilice OLLU+$ CU6E o OU+91 SETS$ el n=mero m%?imo de e?presiones es I$ ! el n=mero m%?imo de conjuntos de a"rupación 3ue se pueden "enerar es 5.V (/). Los ejemplos si"uientes producen un error de*ido a 3ue la cl%usula OU+ 6 es demasiado complejaJ
•
En los ejemplos si"uientes se "eneran ./V (/I) conjuntos de a"rupamiento.
•
GROUP #$ CU#E 5&1- !!!- &1H7 GROUP #$ &1- !!!- &1H W8T/ CU#E
•
En el ejemplo si"uiente se "eneran 5.V (/ W /) conjuntos de a"rupamiento.
•
GROUP #$ GROUP8%G SETS5 CU#E5&1- !!!- &127- . 7
•
•
•
En el ejemplo si"uiente tam*in se "eneran 5.V (/ W /) conjuntos de a"rupamiento. Los conjuntos de a"rupación CU6E () ! () "eneran una la de total "eneral ! los conjuntos de a"rupación duplicados no se eliminan. GROUP #$ GROUP8%G SETS5 CU#E5&1- !!!- &127- 577
Compati*ilidad con las caracter4sticas OU+ 6 de 9SO ! A1S9 SQL En SQL Server /5$ la cl%usula OU+ 6 no puede contener una su*consulta en una e?presión 3ue se use para la lista de a"rupación. Se devuelve el error /55. SQL Server /5 admite todas las caracter4sticas OU+ 6 incluidas en el est%ndar SQL- con las e?cepciones de sinta?is si"uientesJ •
•
•
Los conjuntos de a"rupamiento no se pueden usar en la cl%usula OU+ 6 a menos 3ue #ormen parte de una lista OU+91 SETS e?pl4cita. +or ejemplo$ OU+ 6 Column/$ (Column$ ...Column1) se admite en el est%ndar pero no en SQL Server. Se permite OU+ 6 C/$ OU+91 SETS ((Column$ ...Column1)) oOU+ 6 Column/$ Column$ ... Column1. 7stos son e3uivalentes sem%nticamente al ejemplo de OU+ 6 anterior. Con ello se evita la posi*ilidad de 3ue OU+ 6 Column/$ (Column$ ...Column1) se pueda malinterpretar como OU+ 6 C/$ OU+91 SETS ((Column$ ...Column1)). 7ste no es e3uivalente sem%nticamente. 1o se pueden usar conjuntos de a"rupamiento dentro de conjuntos de a"rupamiento. +or ejemplo$ OU+ 6 OU+91 SETS (A/$ A$XAn$ OU+91 SETS (C/$ C$ ...Cn)) se admite en el est%ndar SQL- pero no en SQL Server. SQL Server /5 permite OU+ 6 OU+91 SETS( A/$ A$...An$ C/$ C$ ...Cn ) o OU+ 6 OU+91 SETS( (A/)$ (A)$ ... (An)$ (C/)$ (C)$ ... (Cn) ). Estos ejemplos son e3uivalentes sem%nticamente al primer ejemplo de OU+ 6 ! tienen una sinta?is m%s clara. 1o se admite OU+ 6 MALLP89ST91CTN en una cl%usula OU+ 6 "eneral ni con las construcciones OU+91 SETS$ OLLU+$ CU6E$ &9T' CU6E o &9T' OLLU+. ALL es el valor predeterminado ! es impl4cito.
Comparación de las caracter4sticas OU+ 6 compati*les En la ta*la si"uiente se descri*en las caracter4sticas de OU+ 6 3ue son compati*les dependiendo de la versión de SQL Server ! del nivel de compati*ilidad de la *ase de datos.
Caract erístic a
SQL Server Integration Services
Agrega #o se adite en !&T< 'U>$ dos ni en !&T< ROLLU%. D&ST& #'T
Nivel de compatibilidad 100 o superior con SQL Server
Se adite en !&T< 'U>$5 !&T< ROLLU%5 ROU% S$TS5 'U>$ o ROLLU%.
Funció Se adite la *unción de*inida #o se adite la *unción de*inida por el n por el usuariodbocube de*inid usuariodbocube!arg1"...argN # !arg1"...arg## odborollup!argB"...argN #e a por el odborollup!arg1"...argN #en n la cl)usula ROU% >C. usuario la cl)usula ROU% >C. con un %or eeplo/ no-re %or eeplo/ SELECT SUM 57 'U>$ FROM T SELECT SUM 57 o GROUP #$ d.o!cu.e5+7; FROM T ROLL GROUP #$ d.o!cu.e5+7; U% en Se devuelve el ensae de error siguiente/ la Sinta@is incorrecta cerca de la pala-ra cl)usul clave Ecu-eEErollupE. a ROU %ara evitar este pro-lea5 % >C reeplace d*o.cu*e por Md*oN.Mcu*eN od*o.rollup por Md*oN.MrollupN. Se adite el siguiente eeplo/ SELECT SUM 57 FROM T
SQL Server 2008 o posterior con el nivel de compatibilid ad 90
&gual que el nivel de copati-ilida d B22.
Se adite la *unción de*inida por el usuariodboc ube !arg1"...argN 4 odborollup! arg1"...argN #e n la cl)usula ROU% >C %or eeplo/ SELECT SUM 57 FROM T GROUP #$ d.o!cu.e5+7 ;
GROUP #$ d.o!cu.e5+7;
ROU % S$TS
#o copati-le
'opati-le
'opati-le
' U> $
#o copati-le
'opati-le
#o copati-le
ROLL U%
#o copati-le
'opati-le
#o copati-le
Total #o copati-le general 5 coo ROU % >C 04
'opati-le
'opati-le
Funció #o copati-le n ROU %: &D
'opati-le
'opati-le
Funció n ROU %
'opati-le
'opati-le
'opati-le
!&T< 'U>$
'opati-le
'opati-le
'opati-le
!&T< ROLL U%
'opati-le
'opati-le
'opati-le
$liin ación de grupos duplica dos de !&T< 'U>$ o !&T< ROLL U%
'opati-le
'opati-le
'opati-le
Ejemplos A.Utili2ar una cl%usula OU+ 6 simple En el ejemplo si"uiente se recupera el total de cada SalesOrder98 SalesOrder98 de de la ta*la SalesOrder8etail SalesOrder8etail de de la *ase de datos Adventure&or,s/. SELECT S&)esOrder8"- SUM5LneTot&)7 AS Su.Tot&) FROM S&)es!S&)esOrder"et&) AS sod GROUP #$ S&)esOrder8" OR"ER #$ S&)esOrder8";
6.Utili2ar una cl%usula OU+ 6 con varias ta*las En el ejemplo si"uiente se recupera el n=mero de empleados de cada Cit! Cit! de de la ta*la Address Address com*inada com*inada con la ta*la Emplo!eeAddress Emplo!eeAddress de de la *ase de datos Adventure&or,s/. SELECT &!Ct+- COU%T5.e&!Address8"7 E',)o+eeCount FROM Person!#usnessEntt+Address AS .e&
8%%ER 9O8% Person!Address AS & O% .e&!Address8" &!Address8" GROUP #$ &!Ct+ OR"ER #$ &!Ct+;
C.Utili2ar una cl%usula OU+ 6 con una e?presión En el ejemplo si"uiente se recuperan las ventas totales de cada ao con la #unción 8ATE+AT 8ATE+AT.. 8e*e incluirse la misma e?presión en la lista SELECT SELECT ! ! en la cl%usula OU+ 6. 6. SELECT "ATEPART5++++-Order"&te7 AS %$e&r -SUM5Tot&)"ue7 AS %Tot&) Order A'ount FROM S&)es!S&)esOrder/e&der GROUP #$ "ATEPART5++++-Order"&te7 OR"ER #$ "ATEPART5++++-Order"&te7;
8.Utili2ar una cl%usula OU+ 6 con una cl%usula 'AB91 En el ejemplo si"uiente se usa la cl%usula 'AB91 'AB91 para para especicar cu%les de los "rupos "enerados en la cl%usulaOU+ cl%usulaOU+ 6 de*en 6 de*en incluirse en el conjunto de resultados. SELECT "ATEPART5++++-Order"&te7 AS %$e&r -SUM5Tot&)"ue7 AS %Tot&) Order A'ount FROM S&)es!S&)esOrder/e&der GROUP #$ "ATEPART5++++-Order"&te7 /A>8%G "ATEPART5++++-Order"&te7 ? %200H OR"ER #$ "ATEPART5++++-Order"&te7;
1TO (cl%usula de Transact-SQL) Transact-SQL) SQL Server 2014
Otras versiones
SELECT...91TO crea una nueva ta*la en el "rupo de arc0ivos predeterminado e inserta SELECT...91TO las las resultantes de la consulta en ella. +ara ver la sinta?is completa de SELECT$ vea SELECT (Transact-SQL). (Transact-SQL).
Se aplica a/ S+L Server 0S+L Server 1223 a versión actual45 actual45 !indo6s A,ure S+L Data-ase 07ersión inicial a versión actual4. actual4.
Convenciones de sinta?is de Transact-SQL
Sinta?is 8%TO ne:t&.)e
Ar"umentos new_table
Especica el nom*re de una nueva ta*la 3ue se va a crear en #unción de las columnas de la lista de selección ! de las las ele"idas desde el ori"en de datos. El #ormato de new_table se determina mediante la evaluación de las e?presiones de la lista de selección. Las columnas de new_table se crean en el orden 3ue especica la lista de selección. Cada columna de new_tabletiene el mismo nom*re$ tipo de datos$ nula*ilidad ! valor 3ue la e?presión correspondiente de la lista de selección. La propiedad 98E1T9T de una columna se transere e?cepto *ajo las l as condiciones denidas en YTra*ajar YTra*ajar con columnas de identidadY en la sección Comentarios. +ara crear la ta*la en otra *ase de datos en la misma instancia de SQL Server$ especi3ue new_table como un nom*re completo con #ormato database.scema.table_name. 1o puede crear new_table en un servidor remotoZ sin em*ar"o$ puede rellenar new_table desde un ori"en de datos remoto. +ara crear new_table a partir de una ta*la de ori"en remota$ especi3ue la ta*la de ori"en utili2ando un nom*re con cuatro partes con el #ormato lin!ed_ser"er .catalog.scema.ob#ect en en la cl%usula DO> de la instrucción SELECT. SELECT. Tam*in puede utili2ar la #unción O+E1QUE O+E1QUE o o la #unción O+E18ATASOUCE en la cl%usula DO> para especicar el ori"en de datos remoto.
Tipos de datos El atri*uto D9LESTEA> no transere a la nueva ta*la. Los 6LO6 D9LESTEA> se copian ! se almacenan en la nueva ta*la como 6LO6 vari!ar(max). Sin el atri*uto D9LESTEA>$ el tipo de datos vari!ar(max) tiene una limitación de 6. Si un D9LESTEA> 6LO6 supera este valor$ se produce el error //V ! se detiene la instrucción. Cuando se selecciona una columna de identidad e?istente en una nueva ta*la$ la nueva columna 0ereda la propiedad 98E1T9T$ a menos 3ue se cumpla una de las si"uientes condicionesJ •
La instrucción SELECT contiene una com*inación.
•
Se 0an com*inado varias instrucciones SELECT con U19O1.
•
La columna de identidad aparece m%s de una ve2 en la lista de selección.
•
La columna de identidad #orma parte de una e?presión.
•
La columna de identidad es de un ori"en de datos remoto.
Si se cumple al"una de estas condiciones$ la columna se crea como 1OT 1ULL en lu"ar de 0eredar la propiedad 98E1T9T. Si una columna de identidad se re3uiere en la nueva ta*la pero este tipo de columna no est% disponi*le o desea un valor de iniciali2ación o de incremento di#erente de la columna de identidad de ori"en$ dena la columna en la lista de selección utili2ando la #unción 98E1T9T. Bea YCrear una columna de identidad utili2ando la #unción 98E1T9TY en la sección Ejemplos si"uiente.
Limitaciones ! restricciones 1o puede especicar una varia*le de ta*la o par%metro con valores de ta*la como la nueva ta*la. 1o puede utili2ar SELECTX91TO para crear una ta*la con particiones$ incluso si la partición se reali2a so*re la ta*la de ori"en. SELECT...91TO no usa el es3uema de partición de la ta*la de ori"enZ en su lu"ar$ la nueva ta*la se crea en el "rupo de arc0ivos predeterminado. +ara insertar las en una ta*la con parti ciones$ primero de*e crearse la ta*la con particiones !$ a continuación$ utili2ar la instrucción 91SET 91TO...SELECT DO>. Los 4ndices$ restricciones ! desencadenadores denidos en la ta*la de ori"en no se transeren a la nueva ta*la$ ni se pueden especicar en la instrucción SELECT...91TO. Si se re3uieren estos o*jetos$ puede crearlos despus de ejecutar la instrucción SELECT...91TO.
Especicar una cl%usula O8E 6 no "aranti2a 3ue las las se inserten en el orden especicado. Cuando se inclu!e una columna dispersa en la lista de selección$ la propiedad de la columna dispersa no se transere a la columna de la nueva ta*la. Si esta propiedad es necesaria en la nueva ta*la$ modi3ue la denición de columna despus de ejecutar la instrucción SELECT...91TO para 3ue inclu!a esta propiedad. Cuando se inclu!e una columna calculada en la lista de selección$ la columna correspondiente de la nueva ta*la no es una columna calculada. Los valores de la nueva columna son los 3ue se calcularon en el momento en 3ue se ejecutó SELECT...91TO.
Comportamiento del re"istro La cantidad de re"istro para SELECT...91TO depende del modelo de recuperación en vi"or para la *ase de datos. En el modelo de recuperación simple o en el optimi2ado para car"as masivas de re"istros$ las operaciones masivas se re"istran m4nimamente. Con re"istro m4nimo$ utili2ar la instrucción SELECTX 91TO puede ser m%s eca2 3ue crear una ta*la ! rellenarla con una instrucción 91SET. +ara o*tener m%s in#ormación$ vea El re"istro de transacciones (SQL Server).
+ermissions e3uiere el permiso CEATE TA6LE en la *ase de datos de destino.
Ejemplos A.Crear una ta*la especicando columnas de varios or4"enes En el ejemplo si"uiente se crea la ta*la d*o.Emplo!eeAddresses en la *ase de datos Adventure&or,s/ seleccionando siete columnas de varias ta*las relacionadas con empleados ! direcciones. SELECT c!Frst%&'e- c!L&st%&'e- e!9o.Tt)e- &!AddressLne1- &!Ct+s,!%&'e AS St&teJProvnce- &!Post&)Code 8%TO d.o!E',)o+eeAddresses FROM Person!Person AS c 9O8% /u'&nResources!E',)o+ee AS e O% e!#usnessEntt+8" c!#usnessEntt+8" 9O8% Person!#usnessEntt+Address AS .e& O% e!#usnessEntt+8" .e&!#usnessEntt+8" 9O8% Person!Address AS & O% .e&!Address8" &!Address8" 9O8% Person!St&teProvnce &s s, O% s,!St&teProvnce8" &!St&teProvnce8";
GO
6.9nsertar las las utili2ando el re"istro m4nimo El ejemplo si"uiente crea la ta*la d*o.1e;+roducts e inserta las de la ta*la +roduction.+roduct. El ejemplo supone 3ue el modelo de recuperación de la *ase de datos Adventure&or,s/ est% esta*lecido en DULL. +ara ase"urarse de 3ue se utili2a el re"istro m4nimo$ el modelo de recuperación de la *ase de datos Adventure&or,s/ se esta*lece en 6ULHRLOE8 antes de 3ue las las se inserten ! se resta*lece en DULL despus de la instrucción SELECT...91TO. 8e esta manera se ase"ura de 3ue la instrucción SELECT...91TO use el espacio m4nimo en el re"istro de transacciones ! #uncione eca2mente. 8F O#9ECT:8"5d.o!%eProducts- U7 8S %OT %ULL "ROP TA#LE d.o!%eProducts; GO ALTER "ATA#ASE AdventureWorks2012 SET RECO>ER$ #UL<:LOGGE"; GO SELECT * 8%TO d.o!%eProducts FROM Producton!Product W/ERE LstPrce ? @2 A%" LstPrce 3 @100; GO ALTER "ATA#ASE AdventureWorks2012 SET RECO>ER$ FULL; GO
C.Crear una columna de identidad utili2ando la #unción 98E1T9T En el ejemplo si"uiente se utili2a la #unción 98E1T9T para crear una columna de identidad en la nueva ta*la+erson.USAddress de la *ase de datos Adventure&or,s/. Se re3uiere esto por3ue la instrucción SELECT 3ue dene la ta*la contiene una unión$ 3ue 0ace 3ue la propiedad 98E1T9T no transera a la nueva ta*la. Ten"a en cuenta 3ue los valores de iniciali2ación e incremento especicados en la #unción 98E1T9T son di#erentes de los de la columna Address98 de la ta*la de ori"en +erson.Address. 8F O#9ECT:8" 5Person!USAddress7 8S %OT %ULL "ROP TA#LE Person!USAddress; GO (( "eter'ne tIe 8"E%T8T$ st&tus o tIe source co)u'n Address8"! SELECT O#9ECT:%AME5o.ect:d7 AS T&.)e%&'e- n&'e AS co)u'n:n&'es:dentt+- seed:v&)ue- ncre'ent:v&)ue FROM s+s!dentt+:co)u'ns W/ERE n&'e Address8"; (( Cre&te & ne t&.)e tI co)u'ns ro' tIe estn t&.)e Person!Address! A ne 8"E%T8T$ (( co)u'n s cre&ted .+ usn tIe 8"E%T8T$ uncton! SELECT 8"E%T8T$ 5nt- 100- 7 AS Address8"-
&!AddressLne1- &!Ct+- .!%&'e AS St&te- &!Post&)Code 8%TO Person!USAddress FROM Person!Address AS & 8%%ER 9O8% Person!St&teProvnce AS . O% &!St&teProvnce8" .!St&teProvnce8" W/ERE .!Countr+ReonCode %US; (( >er+ tIe 8"E%T8T$ st&tus o tIe Address8" co)u'ns n .otI t&.)es! SELECT O#9ECT:%AME5o.ect:d7 AS T&.)e%&'e- n&'e AS co)u'n:n&'es:dentt+- seed:v&)ue- ncre'ent:v&)ue FROM s+s!dentt+:co)u'ns W/ERE n&'e Address8";
8.Crear una ta*la especicando las columnas de un ori"en de datos remoto El ejemplo si"uiente muestra tres mtodos para crear una nueva ta*la en el servidor local desde un ori"en de datos remoto. En el ejemplo se comien2a creando un v4nculo al ori"en de datos remoto. El nom*re del servidor vinculado$>!Lin,Server$ se especica en la cl%usula DO> de la primera instrucción SELECT...91TO ! en la #unción O+E1QUE de la se"unda instrucción SELECT...91TO. La tercera instrucción SELECT...91TO utili2a la #unción O+E18ATASOUCE$ 3ue especica el ori"en de datos remoto directamente en lu"ar de utili2ar el nom*re del servidor vinculado. Se ap"ia *es*e SQL Server 0asta SQL Server /5. USE '&ster; GO (( Cre&te & )nk to tIe re'ote d&t& source! (( S,ec+ & v&)d server n&'e or d&t&src &s server:n&'e or server:n&'enst&nce:n&'e! EBEC s,:&dd)nkedserver server %M+LnkServersrv,roduct % ,rovder %S6L%CL8d&t&src %server:n&'ec&t&)o %AdventureWorks2012; GO USE AdventureWorks2012; GO (( S,ec+ tIe re'ote d&t& source n tIe FROM c)&use usn & our(,&rt n&'e (( n tIe or' )nked:server!c&t&)o!scIe'&!o.ect! SELECT "e,&rt'ent8"- %&'e- Grou,%&'e- Moded"&te 8%TO d.o!"e,&rt'ents FROM M+LnkServer!AdventureWorks2012!/u'&nResources!"e,&rt'ent GO (( Use tIe OPE%6UER$ uncton to &ccess tIe re'ote d&t& source! SELECT "e,&rt'ent8"- %&'e- Grou,%&'e- Moded"&te 8%TO d.o!"e,&rt'entsUsnO,en6uer+
FROM OPE%6UER$5M+LnkServer- SELECT * FROM AdventureWorks2012!/u'&nResources!"e,&rt'ent7; GO (( Use tIe OPE%"ATASOURCE uncton to s,ec+ tIe re'ote d&t& source! (( S,ec+ & v&)d server n&'e or "&t& Source usn tIe or'&t server:n&'e or server:n&'enst&nce:n&'e! SELECT "e,&rt'ent8"- %&'e- Grou,%&'e- Moded"&te 8%TO d.o!"e,&rt'entsUsnO,en"&t&Source FROM OPE%"ATASOURCE5S6L%CL8"&t& Sourceserver:n&'e;8nter&ted Securt+SSP87 !AdventureWorks2012!/u'&nResources!"e,&rt'ent; GO
O8E 6 (cl%usula de Transact-SQL) SQL Server 2014
Otras versiones
Ordenar los datos devueltos por una consulta en SQL Server. Use esta cl%usula paraJ •
•
Ordenar el conjunto de resultados de una consulta por la lista de columnas especicada !$ opcionalmente$ limitar las las devueltas a un intervalo especicado. El orden en 3ue se devuelven las las en un conjunto de resultados no se puede "aranti2ar$ a menos 3ue se especi3ue una cl%usula O8E 6. 8eterminar el orden en 3ue se aplican los valores de la #unción de cate"or4a al conjunto de resultados.
Se aplica a/ S+L Server 0S+L Server 1223 a versión actual45 !indo6s A,ure S+L Data-ase 07ersión inicial a versión actual4.
Convenciones de sinta?is de Transact-SQL
Sinta?is Transact-SQL OR"ER #$ order:.+:e,resson COLLATE co))&ton:n&'e ASC "ESC -!!!n 3oset:etcI?
3oset:etcI? NN K OFFSET K nteer:const&nt oset:ro:count:e,resson K ROW ROWS FETC/ K F8RST %EBT Knteer:const&nt etcI:ro:count:e,resson K ROW ROWS O%L$
Ar"umentos order_by_expression
Especica una columna o e?presión se"=n la 3ue s e ordenar% el conjunto de resultados de la consulta. Una columna de ordenación se puede especicar como un nom*re o un alias de columna$ o un entero no ne"ativo 3ue representa la posición de la columna en la lista de selección. Es posi*le especicar varias columnas de ordenación. Los nom*res de columna tienen 3ue ser =nicos. La secuencia de las columnas de ordenación de la cl%usula O8E 6 dene la or"ani2ación del conjunto de resultados ordenado. Es decir$ el conjunto de resultados se ordena con#orme a la primera columna !$ a continuación$ esa lista ordenada se ordena se"=n la se"unda columna$ ! as4 sucesivamente. Los nom*res de columna a los 3ue se 0ace re#erencia en la cl%usula O8E 6 de*en corresponderse con una columna de la lista de selección o con una columna denida en la ta*la especicada en la cl%usula DO> sin am*i"[edades. COLLATE collation_name
Especica 3ue la operación O8E 6 de*e reali2arse con#orme a la intercalación especicada encollation_name ! no con#orme a la intercalación de la columna denida en la ta*la o vista. collation_namepuede ser un nom*re de intercalación de &indo;s o un nom*re de intercalación de SQL. +ara o*tener m%s in#ormación$ vea Compati*ilidad con la intercalación ! Unicode. COLLATE solo se aplica a las columnas con tipos de datos +ar$ var+ar$ !+ar ! !var+ar. ASC \ 8ESC 9ndica 3ue los valores de la columna especicada se de*en ordenar en sentido ascendente o descendente. ASC ordena del valor m4nimo al valor m%?imo. 8ESC ordena del valor m%?imo al valor m4nimo. ASC es el criterio de ordenación predeterminado. Los valores 1ULL se tratan como los valores m%s *ajos posi*les. ODDSET ] integer_constant \ o$set_row_count_expression ^ ] O& \ O&S ^ Especica el n=mero de las 3ue se de*en omitir antes de comen2ar a devolver las de la e?presión de consulta. El valor puede ser una e?presión o constante entera ma!or o i"ual 3ue cero.
Se aplica a/ S+L Server 12B1 a S+L Server 12BG " !indo6s A,ure S+L Data-ase.
o$set_row_count_expression puede ser una varia*le$ un par%metro o una
su*consulta escalar constante.Cuando se utili2a una su*consulta$ no puede 0acer re#erencia a nin"una columna denida en el %m*ito de la consulta e?terna. Es decir$ no se puede poner en correlación con la consulta e?terna. O& ! O&S son sinónimos ! se proporcionan para o#recer compati*ilidad con A1S9. En los planes de ejecución de consultas$ el valor de recuento de las de despla2amiento se muestra en el atri*uto O,set del operador de consulta TO+. DETC' ] D9ST \ 1E
Se aplica a/ S+L Server 12B1 a S+L Server 12BG " !indo6s A,ure S+L Data-ase.
%etc_row_count_expression puede ser una varia*le$ un par%metro o una
su*consulta escalar constante. Cuando se utili2a una su*consulta$ no puede 0acer re#erencia a nin"una columna denida en el %m*ito de la consulta e?terna. Es decir$ no se puede poner en correlación con la consulta e?terna. D9ST ! 1E
+r%cticas recomendadas Evite especicar enteros en la cl%usula O8E 6 como representaciones posicionales de las columnas en la lista de selección. +or ejemplo$ aun3ue una instrucción como SELECT +roduct98$ 1ame DO> +roduction.+roduction O8E 6 es v%lida$ otros usuarios no la entender%n tan *ien como si especicase el nom*re de la columna real.Adem%s$ para reali2ar cam*ios en la lista de selección$ como modicar el orden de las columnas o a"re"ar otras nuevas$ ser% preciso modicar la cl%usula O8E 6 a n de evitar resultados inesperados. En una instrucción SELECT TO+ ( N)$ utilice siempre una cl%usula O8E 6. Esta es la =nica manera de indicar previsi*lemente a 3u las a#ecta TO+. +ara o*tener m%s in#ormación$ vea TO+ (Transact-SQL).
9nteropera*ilidad Cuando se utili2a con una instrucción SELECT...91TO para insertar las de otro ori"en$ la cl%usula O8E 6 no "aranti2a la inserción de las las en el orden especicado. Al usar ODDSET ! DETC' en una vista no se cam*ia la propiedad Updatea*ilit! de la vista.
Limitaciones ! restricciones
1o 0a! nin"=n l4mite en cuanto al n=mero de columnas de la cl%usula O8E 6Z sin em*ar"o$ el tamao total de las columnas especicadas en una cl%usula O8E 6 no puede superar los . *!tes. Las columnas de tipo !text$ text$ ima&e$ &e$&rap+$ &e$metr ! xm" no se pueden usar en una cl%usula O8E 6. 1o puede especicarse un entero o una constante cuando en una #unción de cate"or4a aparece order_by_expression .+ara o*tener m%s in#ormación$ vea OBE (cl%usula de Transact-SQL). Si los nom*res de ta*la est%n asociados a un alias en la cl%usula DO>$ solo pueden usarse los nom*res de alias para calicar sus columnas en la cl%usula O8E 6. Los nom*res ! alias de columna especicados en la cl%usula O8E 6 de*en estar denidos en la lista de selección si la instrucción SELECT contiene uno de los operadores o cl%usulas si"uientesJ •
U19O1$ operador
•
E
•
91TESECT$ operador
•
SELECT 89ST91CT
Adem%s$ cuando la instrucción inclu!e un operador U19O1$ E
ODDSET ! DETC' se pueden utili2ar en cual3uier consulta 3ue permita TO+ ! O8E 6 con las si"uientes limitacionesJ •
•
•
•
La cl%usula OBE no admite ODDSET ni DETC'. ODDSET ! DETC' no se pueden especicar directamente en las instrucciones 91SET$ U+8ATE$ >EE ni 8ELETE$ pero s4 en una su*consulta denida en ellas. +or ejemplo$ en la instrucción 91SET 91TO SELECT$ se pueden especicar ODDSET ! DETC' en la instrucción SELECT. En una consulta 3ue utili2a los operadores U19O1$ E
Utili2ar ODDSET ! DETC' para limitar las las devueltas ecomendamos utili2ar las cl%usulas ODDSET ! D ETC' en lu"ar de la cl%usula TO+ para implementar una solución de pa"inación de consulta ! limitar el n=mero de las enviadas a una aplicación cliente. +ara utili2ar ODDSET ! DETC' como solución de pa"inación$ es preciso ejecutar la consulta una ve2 por cada Yp%"inaY de datos devuelta a la aplicación cliente. +or ejemplo$ para devolver los resultados de una consulta en incrementos de / las$ se de*e ejecutar la consulta una ve2 para devolver las las de / a /$ despus otra ve2 para devolver las las de // a $ ! as4 sucesivamente. Cada consulta es independiente ! no est% relacionada con las dem%s de #orma al"una. Esto si"nica 3ue$ a di#erencia de cuando se usa un cursor en 3ue la consulta se ejecuta una ve2 ! su estado se mantiene en el servidor$ en este caso es la aplicación cliente la responsa*le de reali2ar el se"uimiento del estado.+ara lo"rar resultados esta*les entre las solicitudes de consultas donde se utilicen ODDSET ! DETC'$ se de*en cumplir las si"uientes condicionesJ /. Los datos su*!acentes 3ue la consulta utilice no de*en cam*iar. Es decir$ o *ien las las a#ectadas por la consulta no se actuali2ar%n$ o *ien todas las solicitudes correspondientes a las p%"inas de la consulta se ejecutar%n en una transacción =nica utili2ando el aislamiento de transacción seriali2a*le o de instant%nea. +ara o*tener in#ormación acerca de estos niveles de aislamiento de transacción$ vea SET TA1SACT9O1 9SOLAT9O1 LEBEL (Transact-SQL). . 8e*e "aranti2arse 3ue la columna o com*inación de columnas contenidas en la cl%usula O8E 6 sean =nicas.
Bea el ejemplo 3ue YEjecutar varias consultas en una sola transacciónY en la sección Ejemplos 3ue aparece m%s adelante en este tema. Si el 0ec0o de 3ue los planes de ejecución sean co0erentes es importante para su solución de pa"inación$ puede ser conveniente utili2ar la su"erencia de consulta O+T9>9_E DO para los par%metros de ODDSET ! DETC'. Bea YEspecicar e?presiones para valores de ODDSET ! DETC'Y en la sección Ejemplos 3ue aparece m%s adelante en este tema. +ara o*tener m%s in#ormación acerca de O+T9>9_E DO$ vea Su"erencias de consulta (Transact-SQL).
Ejemplos Categoría
$lementos de sintaxis o%recidos
Sinta@is -)sica
ORD$R >C
$speci*icar orden ascendente " descendente
D$S' H AS'
$speci*icar una intercalación
'OLLAT$
$speci*icar un orden condicional
'AS$5 e@presión
Usar ORD$R >C en una *unción de categor(a
Funciones de categor(a
Liitar el n?ero de *ilas devueltas
OFFS$T H F$T'<
Usar ORD$R >C con U#&O#5 $X'$%T e T$RS$'T
U#&O#
Sinta?is *%sica En los ejemplos de esta sección se muestra la #uncionalidad *%sica de la cl%usula O8E 6 utili2ando la sinta?is m4nima re3uerida. &.Especi'car una sola columna de'nida en la lista de selecci(n
En el si"uiente ejemplo se ordena el conjunto de resultados por la columna numrica +roduct98. 8ado 3ue no se especica un criterio de ordenación concreto$ se utili2a el valor predeterminado (orden ascendente). USE AdventureWorks2012; GO SELECT Product8"- %&'e FROM Producton!Product W/ERE %&'e L8
).Especi'car una columna *ue no est+ de'nida en la lista de selecci(n
En el si"uiente ejemplo se ordena el conjunto de resultados por una columna 3ue no est% incluida en la lista de selección$ pero s4 denida en la ta*la especicada en la cl%usula DO>. USE AdventureWorks2012; GO SELECT Product8"- %&'e- Co)or FROM Producton!Product OR"ER #$ LstPrce;
,.Especi'car un alias como columna de ordenaci(n
En el ejemplo si"uiente se especica el alias de columna Sc0ema1ame como columna de criterio de ordenación. USE AdventureWorks2012; GO SELECT n&'e- SC/EMA:%AME5scIe'&:d7 AS ScIe'&%&'e FROM s+s!o.ects W/ERE t+,e U OR"ER #$ ScIe'&%&'e;
-.Especi'car una expresi(n como columna de ordenaci(n
En el ejemplo si"uiente se utili2a una e?presión como columna de ordenación. La e?presión se dene mediante la #unción 8ATE+AT para ordenar el conjunto de resultados se"=n el ao de contratación de los empleados. USE AdventureWorks2012; GO SELECT #usnessEntt+8"- 9o.Tt)e- /re"&te FROM /u'&nResources!E',)o+ee
OR"ER #$ "ATEPART5+e&r- /re"&te7;
Especicar un criterio de ordenación ascendente ! descendente &.Especi'car un orden descendente
En el si"uiente ejemplo se ordena el conjunto de resultados en sentido descendente se"=n la columna numrica+roduct98. USE AdventureWorks2012; GO SELECT Product8"- %&'e FROM Producton!Product W/ERE %&'e L8
).Especi'car un orden ascendente
En el si"uiente ejemplo se ordena el conjunto de resultados en orden ascendente se"=n la columna 1ame. O*serve 3ue los caracteres est%n ordenados al#a*ticamente$ no numricamente. Es decir$ / se ordena antes 3ue . USE AdventureWorks2012; GO SELECT Product8"- %&'e FROM Producton!Product W/ERE %&'e L8
,.Especi'car orden ascendente y tambin descendente
En el si"uiente ejemplo se ordena el conjunto de resultados se"=n dos columnas. El conjunto de resultados se ordena en primer lu"ar en sentido ascendente se"=n la columna Dirst1ame !$ a continuación$ en orden descendente se"=n la columna Last1ame. USE AdventureWorks2012; GO SELECT L&st%&'e- Frst%&'e FROM Person!Person W/ERE L&st%&'e L8
Especicar una intercalación
En el si"uiente ejemplo se muestra cómo especicar una intercalación en la cl%usula O8E 6 puede cam*iar el orden en 3ue se devuelven los resultados de la consulta. Se crea una ta*la 3ue contiene una columna denida mediante una intercalación 3ue no distin"ue entre ma!=sculas ! min=sculas$ ni las tildes. Los valores se insertan con diversas di#erencias de uso de ma!=sculas$ min=sculas ! tildes. 8ado 3ue no se especica nin"una intercalación en la cl%usula O8E 6$ la primera consulta utili2a la intercalación de la columna al ordenar los valores. En la se"unda consulta$ se especica una intercalación 3ue distin"ue entre ma!=sculas ! min=sculas ! las tildesZ en consecuencia$ cam*ia el orden en el 3ue se devuelven las las. USE te',d.;
GO CREATE TA#LE t1 5n&'e nv&rcI&r517 COLLATE L&tn1:Gener&):C8:A87 GO 8%SERT 8%TO t1 >ALUES5%SncIeV7-5%S&ncIeV7-5%sncIeV75%s&ncIeV7; (( TIs uer+ uses tIe co))&ton s,eced or tIe co)u'n n&'e or sortn! SELECT n&'e FROM t1 OR"ER #$ n&'e; (( TIs uer+ uses tIe co))&ton s,eced n tIe OR"ER #$ c)&use or sortn! SELECT n&'e FROM t1 OR"ER #$ n&'e COLLATE L&tn1:Gener&):CS:AS;
Especicar un orden condicional
En los ejemplos si"uientes se utili2a la e?presión CASE en una cl%usula O8E 6 para determinar de manera condicional el criterio de ordenación de las las se"=n el valor de una columna dada. En el primer ejemplo se eval=e el valor de la columna SalariedDla" de la ta*la 'umanesources.Emplo!ee. Los empleados 3ue tienen la columnaSalariedDla" esta*lecida en / se devuelven en orden descendente se"=n el 6usinessEntit!98. Los empleados 3ue tienen la columna SalariedDla" esta*lecida en se devuelven en orden ascendente se"=n el6usinessEntit!98. En el se"undo ejemplo$ el conjunto de resultados se ordena se"=n la columna Territor!1amecuando la columna Countr!e"ion1ame es i"ual a `United States` ! se"=n la columna Countr!e"ion1ame en las dem%s las. SELECT #usnessEntt+8"- S&)&redF)& FROM /u'&nResources!E',)o+ee OR"ER #$ CASE S&)&redF)& W/E% 1 T/E% #usnessEntt+8" E%" "ESC -CASE W/E% S&)&redF)& 0 T/E% #usnessEntt+8" E%"; GO SELECT #usnessEntt+8"- L&st%&'e- Terrtor+%&'e- Countr+Reon%&'e FROM S&)es!vS&)esPerson W/ERE Terrtor+%&'e 8S %OT %ULL OR"ER #$ CASE Countr+Reon%&'e W/E% Unted St&tes T/E% Terrtor+%&'e ELSE Countr+Reon%&'e E%";
Usar O8E 6 en una #unción de cate"or4a
En el si"uiente ejemplo se utili2a la cl%usula O8E 6 en las #unciones de cate"or4a O&R1U>6E$ A1H$ 8E1SERA1H ! 1T9LE. USE AdventureWorks2012; GO SELECT ,!Frst%&'e- ,!L&st%&'e -ROW:%UM#ER57 O>ER 5OR"ER #$ &!Post&)Code7 AS XRo %u'.erX
-RA%<57 O>ER 5OR"ER #$ &!Post&)Code7 AS XR&nkX -"E%SE:RA%<57 O>ER 5OR"ER #$ &!Post&)Code7 AS X"ense R&nkX -%T8LE547 O>ER 5OR"ER #$ &!Post&)Code7 AS X6u&rt)eX -s!S&)es$T"- &!Post&)Code FROM S&)es!S&)esPerson AS s 8%%ER 9O8% Person!Person AS , O% s!#usnessEntt+8" ,!#usnessEntt+8" 8%%ER 9O8% Person!Address AS & O% &!Address8" ,!#usnessEntt+8" W/ERE Terrtor+8" 8S %OT %ULL A%" S&)es$T" 3? 0;
Limitar el n=mero de las devueltas
En los si"uientes ejemplos se utili2a ODDSET ! DETC' para limitar el n=mero de las devueltas por una consulta.
Se aplica a/ S+L Server 12B1 a S+L Server 12BG " !indo6s A,ure S+L Data-ase.
&.Especi'car constantes enteras para los "alores de /00SET y 0ET,1
En el si"uiente ejemplo se especica una constante entera como valor para las cl%usulas ODDSET ! DETC'. La primera consulta devuelve todas las las ordenadas se"=n la columna 8epartment98. Compare los resultados devueltos por esta consulta con los de las dos consultas si"uientes. La consulta si"uiente utili2a la cl%usula ODDSET @ O&S para omitir las primeras @ las ! devolver todas las restantes. La =ltima consulta utili2a la cl%usula ODDSET O&S para comen2ar por la primera la !$ a continuación$ utili2a DETC' 1E
OFFSET 0 ROWS FETC/ %EBT 10 ROWS O%L$;
).Especi'car "ariables para los "alores de /00SET y 0ET,1
En el si"uiente ejemplo se declaran las varia*les Startin"o;1um*er ! Detc0o;s$ ! se especican estas varia*les en las cl%usulas ODDSET ! DETC'. USE AdventureWorks2012; GO (( S,ec+n v&r&.)es or OFFSET &nd FETC/ v&)ues "ECLARE St&rtnRo%u'.er tn+nt 1 - FetcIRos tn+nt ; SELECT "e,&rt'ent8"- %&'e- Grou,%&'e FROM /u'&nResources!"e,&rt'ent OR"ER #$ "e,&rt'ent8" ASC OFFSET St&rtnRo%u'.er ROWS FETC/ %EBT FetcIRos ROWS O%L$;
,.Especi'car expresiones para los "alores de /00SET y 0ET,1
En el si"uiente ejemplo se utili2a la e?presión Startin"o;1um*er - / para especicar el valor de ODDSET ! la e?presión Endin"o;1um*er Startin"o;1um*er W / para especicar el valor de DETC'. Adem%s$ se especica la su"erencia de consulta O+T9>9_E DO. Esta su"erencia se puede usar para 3ue se utilice un valor concreto para una varia*le local al compilar ! optimi2ar la consulta. El valor se utili2a solo durante la optimi2ación de la consulta ! no durante la ejecución de la misma. +ara o*tener m%s in#ormación$ vea Su"erencias de consulta (Transact-SQL). USE AdventureWorks2012; GO (( S,ec+n e,ressons or OFFSET &nd FETC/ v&)ues "ECLARE St&rtnRo%u'.er tn+nt 1 - EndnRo%u'.er tn+nt ; SELECT "e,&rt'ent8"- %&'e- Grou,%&'e FROM /u'&nResources!"e,&rt'ent OR"ER #$ "e,&rt'ent8" ASC OFFSET St&rtnRo%u'.er ( 1 ROWS FETC/ %EBT EndnRo%u'.er ( St&rtnRo%u'.er Q 1 ROWS O%L$ OPT8O% 5 OPT8M8YE FOR 5St&rtnRo%u'.er 1- EndnRo%u'.er 207 7;
-.Especi'car una subconsulta escalar constante para los "alores de /00SET y 0ET,1
En el si"uiente ejemplo se utili2a una su*consulta escalar constante a n de denir el valor para la cl%usula DETC'. La su*consulta devuelve un valor =nico de la columna +a"eSi2e de la ta*la d*o.AppSettin"s. (( S,ec+n & const&nt sc&)&r su.uer+ USE AdventureWorks2012;
GO CREATE TA#LE d.o!A,,Settns 5A,,Settn8" nt %OT %ULL- P&eSVe nt %OT %ULL7; GO 8%SERT 8%TO d.o!A,,Settns >ALUES51- 107; GO "ECLARE St&rtnRo%u'.er tn+nt 1; SELECT "e,&rt'ent8"- %&'e- Grou,%&'e FROM /u'&nResources!"e,&rt'ent OR"ER #$ "e,&rt'ent8" ASC OFFSET St&rtnRo%u'.er ROWS FETC/ %EBT 5SELECT P&eSVe FROM d.o!A,,Settns W/ERE A,,Settn8" 17 ROWS O%L$;
E.E#ecutar "arias consultas en una sola transacci(n
En el si"uiente ejemplo se muestra un mtodo de implementar una solución de pa"inación 3ue permite ase"urarse de la devolución de resultados esta*les en todas las solicitudes de la consulta. La consulta se ejecuta en una sola transacción utili2ando el nivel de aislamiento de instant%nea$ mientras 3ue la columna especicada en la cl%usula O8E 6 ase"ura la sin"ularidad de la columna. USE AdventureWorks2012; GO (( Ensure tIe d&t&.&se c&n su,,ort tIe sn&,sIot so)&ton )eve) set or tIe uer+! 8F 5SELECT sn&,sIot:so)&ton:st&te FROM s+s!d&t&.&ses W/ERE n&'e %AdventureWorks20127 0 ALTER "ATA#ASE AdventureWorks2012 SET ALLOW:S%APS/OT:8SOLAT8O% O%; GO (( Set tIe tr&ns&cton so)&ton )eve) to S%APS/OT or tIs uer+! SET TRA%SACT8O% 8SOLAT8O% LE>EL S%APS/OT; GO (( #en tIe tr&ns&cton #EG8% TRA%SACT8O%; GO (( "ec)&re &nd set tIe v&r&.)es or tIe OFFSET &nd FETC/ v&)ues! "ECLARE St&rtnRo%u'.er nt 1 - RoCountPerP&e nt H; (( Cre&te tIe condton to sto, tIe tr&ns&cton &ter &)) ros I&ve .een returned! W/8LE 5SELECT COU%T5*7 FROM /u'&nResources!"e,&rt'ent7 ? St&rtnRo%u'.er #EG8% (( Run tIe uer+ unt) tIe sto, condton s 'et!
SELECT "e,&rt'ent8"- %&'e- Grou,%&'e FROM /u'&nResources!"e,&rt'ent OR"ER #$ "e,&rt'ent8" ASC OFFSET St&rtnRo%u'.er ( 1 ROWS FETC/ %EBT RoCountPerP&e ROWS O%L$; (( 8ncre'ent St&rtnRo%u'.er v&)ue! SET St&rtnRo%u'.er St&rtnRo%u'.er Q RoCountPerP&e; CO%T8%UE E%"; GO COMM8T TRA%SACT8O%; GO
Usar O8E 6 con U19O1$ E
Cuando una consulta utili2a los operadores U19O1$ E
OBE (cl%usula de Transact-SQL) SQL Server 2014
Otras versiones
8etermina las particiones ! el orden de un conjunto de las antes de 3ue se apli3ue la #unción de ventana asociada. Es decir$ la cl%usula OBE dene una ventana o un conjunto de las denido por el usuario en un conjunto de resultados de la consulta. Una #unción de ventana calcula entonces un valor para cada la de la ventana. +uede utili2ar la cl%usula OBE con #unciones para calcular valores a"re"ados tales como medias móviles$ a"re"ados acumulados$ totales acumulados o 1 elementos superiores por resultados del "rupo. Se ap"ia a •
Dunciones de cate"or4a
•
Dunciones de a"re"ado
•
Dunciones anal4ticas
•
Dunción 1E
Se aplica a/ S+L Server 0S+L Server 1223 a versión actual45 !indo6s A,ure S+L Data-ase 07ersión inicial a versión actual4.
Convenciones de sinta?is de Transact-SQL
Sinta?is O>ER 5 3PART8T8O% #$ c)&use? 3OR"ER #$ c)&use? 3ROW or RA%GE c)&use? 7 3PART8T8O% #$ c)&use? NN PART8T8O% #$ v&)ue:e,resson - !!! n 3OR"ER #$ c)&use? NN OR"ER #$ order:.+:e,resson COLLATE co))&ton:n&'e ASC "ESC -!!!n
3ROW or RA%GE c)&use? NN K ROWS RA%GE 3ndo r&'e etent? 3ndo r&'e etent? NN K 3ndo r&'e ,recedn? 3ndo r&'e .eteen? 3ndo r&'e .eteen? NN #ETWEE% 3ndo r&'e .ound? A%" 3ndo r&'e .ound? 3ndo r&'e .ound? NN K 3ndo r&'e ,recedn? 3ndo r&'e o))on? 3ndo r&'e ,recedn? NN K U%#OU%"E" PRECE"8%G 3unsned:v&)ue:s,ecc&ton? PRECE"8%G CURRE%T ROW 3ndo r&'e o))on? NN K U%#OU%"E" FOLLOW8%G 3unsned:v&)ue:s,ecc&ton? FOLLOW8%G CURRE%T ROW 3unsned v&)ue s,ecc&ton? NN K 3unsned nteer )ter&)?
Ar"umentos +AT9T9O1 6 8ivide el conjunto de resultados de la consulta en particiones. La #unción se aplica a cada partición por separado ! el c%lculo se reinicia para cada partición. "alue_expression
Especica la columna a partir de la cual se particiona el conjunto de las. "alue_expression solo puede 0acer re#erencia a columnas disponi*les a travs de la cl%usula DO>. "alue_expression no puede 0acer re#erencia a e?presiones ni a alias de la lista de selección. "alue_expression puede ser una e?presión de columna$ una su*consulta escalar$ una #unción escalar o una varia*le denida por el usuario.
Cl%usula O8E 6K 8ene el orden ló"ico de las las dentro de cada partición del conjunto de resultados. Es decir$ especica el orden ló"ico en el 3ue se reali2a el c%lculo de la #unción de ventana. order_by_expression
Especica la columna o e?presión se"=n la cual se va a reali2ar la ordenación. order_by_expression solo puede 0acer re#erencia a columnas disponi*les a travs de la cl%usula DO>. 1o se puede especicar un n=mero entero para representar un nom*re de columna o alias. COLLATE collation_name Especica 3ue la operación O8E 6 se de*e reali2ar se"=n la intercalación especicada en collation_name.collation_name puede ser un nom*re de intercalación de &indo;s o un nom*re de intercalación de SQL. +ara o*tener m%s in#ormación$ vea Compati*ilidad con la intercalación ! Unicode. COLLATE solo se aplica a las columnas con tipos de datos +ar$ var+ar$ !+ar ! !var+ar. ASC \ 8ESC 9ndica 3ue los valores de la columna especicada se de*en ordenar en sentido ascendente o descendente. ASC es el criterio de ordenación predeterminado. Los valores 1ULL se tratan como los valores m%s *ajos posi*les. O&S \ A1E
Se aplica a/ S+L Server 12B1 a S+L Server 12BG.
Limita a=n m%s las las de la partición especicando los puntos inicial ! nal. +ara ello$ se especica un ran"o de las con respecto a la la actual mediante asociación ló"ica o asociación #4sica. La asociación #4sica se reali2a mediante la cl%usula O&S. La cl%usula O&S restrin"e las las dentro de una partición especicando un n=mero jo de las delante ! detr%s de la la actual. La cl%usula A1E tam*in puede restrin"ir ló"icamente las las de una partición especicando un ran"o de valores con respecto al valor de la la actual. Las las precedentes ! si"uientes se denen en #unción de la ordenación de la cl%usula O8E 6. El marco de ventana bA1E X CUE1T O& X inclu!e todas las las 3ue
tienen los mismos valores en la e?presión O8E 6 3ue la la actual. +or ejemplo$ O&S 6ET&EE1 +ECE891 A18 CUE1T O& indica 3ue la ventana de las en la 3ue opera la #unción tiene un tamao de tres las$ con dos las delante 0asta e inclusive la la actual.
N$ta
RO!S o RA#$ requieren que se especi*ique la cl)usula ORD$R >C. Si ORD$R >C contiene varias e@presiones de orden5 'URR$#T RO! FOR RA#$ considera todas las colunas de la lista ORD$R >C al deterinar la *ila actual.
U16OU18E8 +ECE891
Se aplica a/ S+L Server 12B1 a S+L Server 12BG.
Especica 3ue la ventana comien2a en la primera la de la partición. U16OU18E8 +ECE891 solo se puede especicar como punto inicial de la ventana. especicación de valor sin si"noK +ECE891 Se especica con especicación de valor sin si"noK para indicar el n=mero de las o valores 3ue preceden a la la actual. Esta especicación no se permite para A1E. CUE1T O&
Se aplica a/ S+L Server 12B1 a S+L Server 12BG.
Especica 3ue la ventana comien2a o termina en la la actual cuando se utili2a con O&S$ o el valor actual cuando se utili2a con A1E. CUE1T O& se puede especicar como punto inicial o nal. 6ET&EE1 l4mite del marco de ventana K A18 l4mite del marco de ventana K
Se aplica a/ S+L Server 12B1 a S+L Server 12BG.
Se utili2a con O&S o A1E para especicar los puntos de l4mite in#erior (inicio) ! superior (nal) de la ventana. l4mite del marco de ventanaK dene el punto inicial del l4mite ! l4mite del marco de ventanaK dene el punto nal. El l4mite superior no puede ser menor 3ue el l4mite in#erior. U16OU18E8 DOLLO&91
Se aplica a/ S+L Server 12B1 a S+L Server 12BG.
Especica 3ue la ventana termina en la =ltima la de la partición. U16OU18E8 DOLLO&91 solo se puede especicar como punto nal de una ventana. +or ejemplo$ A1E 6ET&EE1 CUE1T O& A18 U16OU18E8 DOLLO&91 dene una ventana 3ue empie2a en la la actual ! termina en la =ltima la de la partición. especicación de valor sin si"noK DOLLO&91 Se especica con especicación de valor sin si"noK para indicar el n=mero de las o valores detr%s de la la actual. Cuando especicación de valor sin si"noK DOLLO&91 se especica como punto inicial de la ventana$ el punto nal de*e ser especicación de valor sin si"noKDOLLO&91. +or ejemplo$ O&S 6ET&EE1 DOLLO&91 A18 / DOLLO&91 dene una ventana 3ue empie2a en la se"unda la a partir de la la actual ! termina en la dcima la a partir de la la actual. Esta especicación no se permite para A1E. literal entero sin si"no
Se aplica a/ S+L Server 12B1 a S+L Server 12BG.
Es un literal entero positivo (incluido el ) 3ue especica el n=mero de las o de valores delante o detr%s de la la o el valor actual. Esta especicación es v%lida solamente para O&S.
Comentarios "enerales
Se pueden utili2ar varias #unciones de ventana en una sola consulta con una =nica cl%usula DO>. La cl%usula OBE de cada #unción puede di#erir en particiones ! tam*in en orden. Si no se especica +AT9T9O1 6$ la #unción trata todas las las del conjunto de resultados de la consulta como un =nico "rupo. Si no se especica O8E 6$ se utili2a la partición completa para el marco de ventana. Esto se aplica =nicamente a las #unciones 3ue no re3uieren la cl%usula O8E 6. Si no se especica O&SPA1E pero s4 O8E 6$ A1E U16OU18E8 +ECE891 A18 CUE1T O& se utili2a como valor predeterminado para el marco de ventana. Esto se aplica solamente a las #unciones 3ue pueden aceptar la especicación opcional de O&SPA1E. +or ejemplo$ las #unciones de clasicación no pueden aceptar O&SPA1EZ por lo tanto$ este marco de ventana no se aplica aun3ue se especi3ue O8E 6 ! no se especi3ue O&SPA1E. Si se especica O&SPA1E ! se usa marco de ventana precedenteK para e?tensión de marco de ventanaK (sinta?is a*reviada)$ esta especicación se usa para el punto inicial del l4mite del marco de ventana ! CUE1T O& se usa para el punto nal. +or ejemplo$ bO&S @ +ECE891 es i"ual a bO&S 6ET&EE1 @ +ECE891 A18 CUE1T O&.
Limitaciones ! restricciones 1o se puede utili2ar la cl%usula OBE con la #unción de a"re"ado C'ECHSU>. 1o se puede utili2ar A1E con especicación de valor sin si"noK +ECE891 o especicación de valor sin si"noK DOLLO&91. 8ependiendo de la #unción de clasicación$ de a"re"ado o anal4tica utili2ada con la cl%usula OBE$ puede 3ue no se admitan la cl%usula O8E 6K o la cl%usula O&S ! A1EK.
Ejemplos A.Utili2ar la cl%usula OBE con la #unción O&R1U>6E En el ejemplo si"uiente se muestra cómo usar la cl%usula OBE con la #unción O&R1U>6E para mostrar un n=mero de la para cada la de una partición. La cl%usula O8E 6 especicada en la cl%usula OBE ordena las las de cada partición por la columna SalesT8. La cl%usula O8E 6 en la instrucción SELECT determina el orden en 3ue se devuelve el conjunto completo de resultados de la consulta. USE AdventureWorks2012; GO
SELECT ROW:%UM#ER57 O>ER5PART8T8O% #$ Post&)Code OR"ER #$ S&)es$T" "ESC7 AS XRo %u'.erX,!L&st%&'e- s!S&)es$T"- &!Post&)Code FROM S&)es!S&)esPerson AS s 8%%ER 9O8% Person!Person AS , O% s!#usnessEntt+8" ,!#usnessEntt+8" 8%%ER 9O8% Person!Address AS & O% &!Address8" ,!#usnessEntt+8" W/ERE Terrtor+8" 8S %OT %ULL A%" S&)es$T" 3? 0 OR"ER #$ Post&)Code; GO
El conjunto de resultados es el si"uiente. o; 1um*er
Last1ame
SalesT8
+ostalCode
--------------- ----------------------- --------------------- ---------/
>itc0ell
5@/I.@5V
V
6l!t0e
II/./
V
I
Carson
I/V5/.I
V
5
eiter
@
Bar"as
Ansman-&ol#e
/
+a,
Bar,e! C0udu,atil
I
Saraiva
5
9to
@
Balde2
>ensa-Annan
Camp*ell
Tsoias
I/@/@.//
V
/5@I/V.5@I
V
/I@@./I@
V
5///.
V@@
I///.I 5@5./
5@@I@./V /.// /@@./V /@I/.VII /5//.V5
V@@ V@@
V@@ V@@ V@@ V@@ V@@
6.Utili2ar la cl%usula OBE con #unciones de a"re"ado En el ejemplo si"uiente se utili2a la cl%usula OBE con #unciones de a"re"ado en todas las las devueltas por la consulta. En este ejemplo$ el uso de OBE es m%s eca2 3ue usar su*consultas para o*tener los valores a"re"ados. USE AdventureWorks2012; GO SELECT S&)esOrder8"- Product8"- Order6t+ -SUM5Order6t+7 O>ER5PART8T8O% #$ S&)esOrder8"7 AS Tot&) -A>G5Order6t+7 O>ER5PART8T8O% #$ S&)esOrder8"7 AS XAvX -COU%T5Order6t+7 O>ER5PART8T8O% #$ S&)esOrder8"7 AS XCountX -M8%5Order6t+7 O>ER5PART8T8O% #$ S&)esOrder8"7 AS XMnX -MAB5Order6t+7 O>ER5PART8T8O% #$ S&)esOrder8"7 AS XM&X FROM S&)es!S&)esOrder"et&) W/ERE S&)esOrder8" 8%54HD-4HDD47; GO
El conjunto de resultados es el si"uiente. S&)esOrder8" Product8" M& (((((((((((( ((((((((((( (((((( (((((( 4HD ZZD D 4HD ZZZ D 4HD ZZ D 4HD ZZ1 D 4HD ZZ2 D 4HD ZZH D 4HD ZZ4 D 4HD Z14 D 4HD Z1D D 4HD Z0 D 4HD Z12 D 4HD Z11 D
Order6t+ Tot&)
Av
Count
Mn
(((((((( ((((((((((( ((((((((((( ((((((((((( 1
2D
2
12
1
H
2D
2
12
1
1
2D
2
12
1
1
2D
2
12
1
1
2D
2
12
1
2
2D
2
12
1
1
2D
2
12
1
H
2D
2
12
1
1
2D
2
12
1
D
2D
2
12
1
2
2D
2
12
1
4
2D
2
12
1
4HDD4 4 4HDD4 4 4HDD4 4 4HDD4 4 4HDD4 4 4HDD4 4 4HDD4 4 4HDD4 4
ZZ2
1
14
1
1
ZZ
4
14
1
1
Z14
1
14
1
1
Z1D
1
14
1
1
ZZZ
2
14
1
1
ZZ1
H
14
1
1
ZZH
1
14
1
1
ZZ
1
14
1
1
En el ejemplo si"uiente se muestra el uso de la cl%usula OBE con una #unción de a"re"ado en un valor calculado. USE AdventureWorks2012; GO SELECT S&)esOrder8"- Product8"- Order6t+ -SUM5Order6t+7 O>ER5PART8T8O% #$ S&)esOrder8"7 AS Tot&) -CAST51! * Order6t+ J SUM5Order6t+7 O>ER5PART8T8O% #$ S&)esOrder8"7 *100 AS "EC8MAL5-277AS XPercent .+ Product8"X FROM S&)es!S&)esOrder"et&) W/ERE S&)esOrder8" 8%54HD-4HDD47; GO
El conjunto de resultados es el si"uiente. Ten"a en cuenta 3ue los a"re"ados se calculan mediante SalesOrder98 ! se calcula +ercent *! +roduct98 para cada l4nea de cada SalesOrder98. S&)esOrder8" Product8" Order6t+ Tot&) (((((((((((( ((((((((((( (((((((( ((((((((((( ((((((((((((((((((((((((((((((((((((((( 4HD ZZD 1 2D 4HD ZZZ H 2D 4HD ZZ 1 2D 4HD ZZ1 1 2D 4HD ZZ2 1 2D 4HD ZZH 2 2D 4HD ZZ4 1 2D 4HD Z14 H 2D 4HD Z1D 1 2D 4HD Z0 D 2D 4HD Z12 2 2D 4HD Z11 4 2D
Percent .+ Product8"
H! 11!4 H! H! H! Z!D H! 11!4 H! 2H!0 Z!D 1!H
4HDD4 4HDD4 4HDD4 4HDD4 4HDD4 4HDD4 4HDD4 4HDD4
ZZ2 ZZ Z14 Z1D ZZZ ZZ1 ZZH ZZ
1 4 1 1 2 H 1 1
14 14 14 14 14 14 14 14
Z!14 2!Z Z!14 Z!14 14!2 21!4 Z!14 Z!14
520 ro5s7 &ected7
C.+roducir una media móvil ! un total acumulativo En el ejemplo si"uiente se usan las #unciones AB ! SU> con la cl%usula OBE para proporcionar una media móvil ! un total acumulado de ventas anuales para cada territorio de la ta*la Sales.Sales+erson. Se crean particiones de los datos por Territor!98 ! se ordenan ló"icamente por SalesT8. Esto si"nica 3ue la #unción AB se calcula para cada territorio en #unción del ao de ventas. O*serve 3ue para Territor!98 /$ solo 0a! dos las para el ao de ventas @$ 3ue representan los dos vendedores con ventas durante ese ao. Se calculan las ventas medias de estas dos las ! la tercera la 3ue representa las ventas durante el ao se inclu!e en el c%lculo. USE AdventureWorks2012; GO SELECT #usnessEntt+8"- Terrtor+8" -"ATEPART5++-Moded"&te7 AS S&)es$e&r -CO%>ERT5v&rcI&r5207-S&)es$T"-17 AS S&)es$T" -CO%>ERT5v&rcI&r5207-A>G5S&)es$T"7 O>ER 5PART8T8O% #$ Terrtor+8" OR"ER #$ "ATEPART5++-Moded"&te7 7-17 AS MovnAv -CO%>ERT5v&rcI&r5207-SUM5S&)es$T"7 O>ER 5PART8T8O% #$ Terrtor+8" OR"ER #$ "ATEPART5++-Moded"&te7 7-17 AS Cu'u)&tveTot&) FROM S&)es!S&)esPerson W/ERE Terrtor+8" 8S %ULL OR Terrtor+8" 3 OR"ER #$ Terrtor+8"-S&)es$e&r;
El conjunto de resultados es el si"uiente. #usnessEntt+8" Terrtor+8" S&)es$e&r S&)es$T" MovnAv Cu'u)&tveTot&) (((((((((((((((( ((((((((((( ((((((((((( (((((((((((((((((((( (((((((((((((((((((( (((((((((((((((((((( 2Z4 %ULL 200 -DZ!D -DZ!D -DZ!D
2Z 1-0Z-D0H!0 2 1-22-12Z! 2H 1-4D2-Z!04 20 1-4D2-Z!04 24 1-00-Z1Z!42 2Z H-ZDH-1Z!1 2ZZ H-1-41!HZ 2ZD H-H4-2!0 21 H-H4-2!0
%ULL
200D
1-0!H
H-01!Z
%ULL
200Z
1Z2-24!4
41Z-HZ!
1 1 1 2 H 4 4
200 2-2-0!0Z 200 2-2-0!0Z 200D 4-02-12!2Z 200 H-ZDH-1Z!1 200 H-1-41!HZ 200 D-Z0-04!1Z 200 D-Z0-04!1Z
1-ZH-012!4 1-H2-ZZ!1H 1-ZD-D2!20 H-ZDH-1Z!1 H-1-41!HZ 4-21-HD! 2-4-H!D2
510 ro5s7 &ected7
En este ejemplo$ la cl%usula OBE no inclu!e +AT9T9O1 6. Esto si"nica 3ue la #unción se aplicar% a todas las las devueltas por la consulta. La cl%usula O8E 6 especicada en la cl%usula OBE determina el orden ló"ico al 3ue se aplica la #unción AB. La consulta devuelve una media móvil de ventas por ao para todos los territorios de ventas especicados en la cl%usula &'EE. La cl%usula O8E 6 especicada en la instrucción SELECT determina el orden en 3ue se muestran las las de la consulta. SELECT #usnessEntt+8"- Terrtor+8" -"ATEPART5++-Moded"&te7 AS S&)es$e&r -CO%>ERT5v&rcI&r5207-S&)es$T"-17 AS S&)es$T" -CO%>ERT5v&rcI&r5207-A>G5S&)es$T"7 O>ER 5OR"ER #$ "ATEPART5++-Moded"&te7 7-17 AS MovnAv -CO%>ERT5v&rcI&r5207-SUM5S&)es$T"7 O>ER 5OR"ER #$ "ATEPART5++-Moded"&te7 7-17 AS Cu'u)&tveTot&) FROM S&)es!S&)esPerson W/ERE Terrtor+8" 8S %ULL OR Terrtor+8" 3 OR"ER #$ S&)es$e&r;
El conjunto de resultados es el si"uiente. #usnessEntt+8" Terrtor+8" S&)es$e&r S&)es$T" MovnAv Cu'u)&tveTot&) (((((((((((((((( ((((((((((( ((((((((((( (((((((((((((((((((( (((((((((((((((((((( (((((((((((((((((((( 2Z4 %ULL 200 -DZ!D 2-44-D4!0 1Z-14Z-Z!H
2Z 2 200 2-44-D4!0 1Z-14Z-Z!H 2ZD 4 200 2-44-D4!0 1Z-14Z-Z!H 2ZZ H 200 2-44-D4!0 1Z-14Z-Z!H 20 1 200 2-44-D4!0 1Z-14Z-Z!H 21 4 200 2-44-D4!0 1Z-14Z-Z!H 2H 1 200 2-44-D4!0 1Z-14Z-Z!H 24 1 200D 2-1H-20!Z2 1-244-2D!4Z 2Z %ULL 200D 2-1H-20!Z2 1-244-2D!4Z 2 %ULL 200Z 1-41-DZ!0 1-41D-Z0!H 510 ro5s7 &ected7
H-ZDH-1Z!1 4-21-HD! H-1-41!HZ 1-H2-ZZ!1H 2-4-H!D2 1-ZH-012!4 1-ZD-D2!20 1-0!H 1Z2-24!4
8.Especicar la cl%usula O&S
Se aplica a/ S+L Server 12B1 a S+L Server 12BG.
En el ejemplo si"uiente se utili2a la cl%usula O&S para denir una ventana de cu!as las se calcula la la actual ! el n=mero N de las incluidas a continuación (/ la en este ejemplo). SELECT #usnessEntt+8"- Terrtor+8" -CO%>ERT5v&rcI&r5207-S&)es$T"-17 AS S&)es$T" -"ATEPART5++-Moded"&te7 AS S&)es$e&r -CO%>ERT5v&rcI&r5207-SUM5S&)es$T"7 O>ER 5PART8T8O% #$ Terrtor+8" OR"ER #$ "ATEPART5++-Moded"&te7 ROWS #ETWEE% CURRE%T ROW A%" 1 FOLLOW8%G 7-17 AS Cu'u)&tveTot&) FROM S&)es!S&)esPerson W/ERE Terrtor+8" 8S %ULL OR Terrtor+8" 3 ;
El conjunto de resultados es el si"uiente. #usnessEntt+8" Terrtor+8" S&)es$T" S&)es$e&r Cu'u)&tveTot&) (((((((((((((((( ((((((((((( (((((((((((((((((((( ((((((((((( (((((((((((((((((((( 2Z4 %ULL -DZ!D 200 1-0Z-D0H!0
2Z 2 2H 2-2-0!0Z 20 2-2-1H!HH 24 1-ZD-D2!20 2Z H-ZDH-1Z!1 2ZZ H-1-41!HZ 2ZD D-Z0-04!1Z 21 2-4-H!D2
%ULL %ULL 1
1-0!H 1Z2-24!4 1-ZH-012!4
200D 200Z 200
1
1-H2-ZZ!1H
200
1
1-ZD-D2!20
200D
2
H-ZDH-1Z!1
200
H
H-1-41!HZ
200
4
4-21-HD!
200
4
2-4-H!D2
200
D2-4H0!H 1Z2-24!4
En el ejemplo si"uiente$ la cl%usula O&S se especica con U16OU18E8 +ECE891. El resultado es 3ue la ventana comien2a en la primera la de la partición. SELECT #usnessEntt+8"- Terrtor+8" -CO%>ERT5v&rcI&r5207-S&)es$T"-17 AS S&)es$T" -"ATEPART5++-Moded"&te7 AS S&)es$e&r -CO%>ERT5v&rcI&r5207-SUM5S&)es$T"7 O>ER 5PART8T8O% #$ Terrtor+8" OR"ER #$ "ATEPART5++-Moded"&te7 ROWS U%#OU%"E" PRECE"8%G7-17 AS Cu'u)&tveTot&) FROM S&)es!S&)esPerson W/ERE Terrtor+8" 8S %ULL OR Terrtor+8" 3 ;
El conjunto de resultados es el si"uiente. #usnessEntt+8" Terrtor+8" Cu'u)&tveTot&) (((((((((((((((( ((((((((((( (((((((((((((((((((( 2Z4 %ULL 2Z %ULL 1-0Z-D0H!0 2 %ULL 1-22-12Z! 2H 1 1-ZH-012!4 20 1 2-2-0!0Z 24 1 4-02-12!2Z
S&)es$T"
S&)es$e&r
(((((((((((((((((((( ((((((((((( -DZ!D 1-0!H
200 200D
1Z2-24!4
200Z
1-ZH-012!4
200
1-H2-ZZ!1H
200
1-ZD-D2!20
200D
-DZ!D
2Z H-ZDH-1Z!1 2ZZ H-1-41!HZ 2ZD 4-21-HD! 21 D-Z0-04!1Z
2
H-ZDH-1Z!1
200
H
H-1-41!HZ
200
4
4-21-HD!
200
4
2-4-H!D2
200
Si!taxis *e SQL Ta"as
Una *ase de datos contienen uno o mas ta*las. Cada ta*la esta identicada por un nom*re (ejemplo Clientes o Ordenes). Las ta*las contienen re"istros (las) con datos
Se!te!ias SQL
.ream$s "a ase *e *at$s
CEATE 8ATA6ASE empresa .ream$s "a ta"a /ers$!as
CEATE TA6LE d*o.+ersonas ( +Rid int +9>A HE 98E1T9T$ 1om*re nc0ar() 1OT 1ULL$ Apellidos nc0ar(I) 1OT 1ULL$ 8ireccion nc0ar(5) 1OT 1ULL$ Ciudad nc0ar(/) 1OT 1ULL ) O %!sertam$s a"!$s re&istr$s
91SET 91TO +ersonas BALUES (`>arco Antonio`$`Trejo Lemus`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`>art0a 6eatri2`$`Trejo Lemus`$`Calle E `$`Tampico`) 91SET 91TO +ersonas
BALUES (`Guana Elvira`$`Trejo Lemus`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`1ora _ulma`$`Trejo Lemus`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`Laura Lucero`$`So*revilla Trejo`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`>aria de la lu2`$`Trejo Campos`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`Trinidad`$`Trejo 6autista`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`>arcel A*isa"`$`So*revilla Trejo`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`Gose A*ra0am`$`So*revilla Trejo`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`Samuel Salomon`$`Olmeda Trejo`$`Calle E `$`Tampico`) >uc0as de las acciones 3ue necesitas reali2ar en una *ase de datos se 0acen con sentencias SQL Se"ei$!am$s t$*$s "$s re&istr$s *e "a ta"a
Las si"uiente sentencia seleccionara todos los re"istros de la ta*la Y+ersonasY J SELECT DO> +ersonas A*ajo esta un ejemplo del resultado de la sentencia a la ta*la llamada Y+ersonasYJ
Este tutorial te enseara acerca de las di#erentes declaraciones en SQL >anten en mente lo si"uienteJ las sentencias SQL no son senci*les a las ma!usculas o minisculas /#!t$ $ma *esp#es *e "as se!te!ias SQL
Al"unos sistemas de *ases de datos re3uieren un punto ! coma al nal de cada sentencia SQL
El punto ! como es un estandar 3ue se para cada sentencia SQL en sistemas de *ases de datos 3ue 0a*ilitan mas de una sentencia SQL ejecutada en la misma llamada al servidor SQL L LL
SQL puede ser dividido en dos partesJ El Len"uaje de >anipulacion de 8atos (8>L) ! el Len"uaje de 8enicion de 8atos (88L) La parte L del SQL de los comandos de consulta ! actuali2acion sonJ
SELECT - e?trae datos de una *ase de datos U+8ATE - actuali2a datos en una *ase de datos 8ELETE - *orra datos de una *ase de datos 91SET 91TO - inserta datos dentro de una *ase de datos 8LL del SQL 3ue permite a *ases de datos ! ta*las ser creadas o *orradas. Tam*ien dene indices(llaves). especica enlaces entre ta*las$ ! impone relaciones entre ta*las. La parte LL del SQL$ las sentencias mas importante 88L en SQL sonJ
CEATE 8ATA6ASE - crea una nueva *ase de datos ALTE 8ATA6ASE - modica una *ase de datos CEATE TA6LE - crea una nueva ta*la ALTE TA6LE - modica una ta*la 8O+ TA6LE - *orra una ta*la CEATE 918E< - crea un indice (llave de *us3ueda) 8O+ 918E< - *orra un indice La se!te!ia SELE.T
La sentencia SELECT es usada para seleccionar datos de una *ase de datos. El resultado es almacenado en una ta*la temporal$ llamada ta*la-resultado La sinta?is SQL de la sentencia SELECT esJ /) SELECT nom*reRcolumna(s) DO> nom*reRta*la ! ) SELECT DO> nom*reRta*la
Ejemplo / SELECT nom*reRcolumna(s) DO> nom*reRta*la
SELECT 1om*re$Apellidos$Ciudad DO> +ersonas
Ejemplo SELECT DO> nom*reRta*la SELECT DO> nom*reRta*la
Nave&ai$! e! #!a ta"a *e res#"ta*$s
>uc0os sistemas de *ases de datos permiten la nave"acion en la ta*la de resultados pro"ramando #unciones comoJ >overse-Al-+rimero$ O*tener-Contenido-e"istro$ >overse-Al-Si"uiente-e"istro$ etc. Dunciones de pro"ramacion como estas no son parte de este tutorial. +ara aprender a accesar a datos con la llamada a #unciones espera mi si"uiente tutorial A8O ! +'+.
La se!te!ia SELE.T %ST%N.T
8entro de una ta*la$ al"unas columnas pueden contener valores duplicados. Esto no es un pro*lema$ al"unas veces tu 3uerras listar solo los valores di#erentes (distintos) en la ta*la La pala*ra 89ST91CT puede ser usada como llave para re"resar solo los valores distintos(di#erentes). Sinta?is SQL SELECT 89ST91CT SELECT 89ST91CT nom*reRcolumna(s) DO> nom*reRta*le EjemploJ SELECT 89ST91CT Apellidos DO> +ersonas A*ajo esta el resultado de la sentencia 89ST91CT a la ta*la Y+ersonasYJ
SELECT 89ST91CT Ciudad DO> +ersonas A*ajo esta el resultado de la sentencia 89ST91CT a la ta*la Y+ersonasYJ
SQL W3ERE
La sentencia ;0ere es usada para e?traer solo los re"istros 3ue cumplen con el criterio especicad La Sinta?is SQL &'EE SELECT nom*reRcolumna(s) DO> nom*reRta*la &'EE nom*reRcolumna operador valor Ejemplo de la sentecia &'EE SELECT DO> +ersonas &'EE Apellidos `Trejo Lemus`
.$mi""as e! "$s amp$s *e text$
SQL usa comillas simples en los valores de te?to (muc0os sitemas manejadores de *ases de datos aceptan comillas do*les).+ara SQL los valores de te?to de*en ser puestos entre comillas simples Los valores numericos no de*en ser puestos entre comillas /ara va"$res *e text$
Esta es la #orma correctaJ SELECT DO> +ersonas &'EE 1om*re`Lucero` Esta es la #orma e3uivocadaJ SELECT
DO> +ersonas &'EE 1om*reLucero /ara va"$res !#meri$s
Esta es la #orma correctaJ SELECT DO> +ersonas &'EE +Rid V Esta es la #orma incorrectaJ SELECT DO> +ersonas &'EE +Rid `V`
Opera*$res permiti*$s e! "a se!te!ia W3ERE
Con la sentencia &'EE$ los si"uientes operadores pueden ser usadosJ
Operadores SQL A18 ! O Los operadores A18 ! O son usados para ltrar re"istros *asados en mas de una condicion Opera*$r AN
El operador A18 muestra el re"istro si la primera condicion ! la se"unda condicion son verdaderas El operador O muestra el re"istro si la primera o la se"unda condicion es verdadera A0ora teniendo en cuenta la si"uiente ta*laJ
+ara seleccionar solo las personas con el 1om*re i"ual a >arcel A*isa" ! el apellido i"ual a So*revilla Trejo$ Usaremos la si"uiente sentencia SELECTJ SELECT DO> +ersonas &'EE 1om*re`>arcel A*isa"` A18 Apellidos`So*revilla Trejo` El resultado seriaJ
Opera*$r OR
A0ora seleccionaremos las personas con el campo 1om*re i"ual a Y>art0aY o el campo 1om*re i"ual a YElviraY Usaremos la si"uiente sentencia SELECT SELECT DO> +ersonas &'EE 1om*re`>art0a 6eatri2` O 1om*re`Guana Elvira` El resultado sera el si"uienteJ
.$mi!a!*$ AN OR
+uedes com*inar el A18 ! el O (usando parentesis para #ormar e?presiones complejas) A0ora seleccionaremos solo las personas con el campo Apellidos i"ual a YSo*revilla TrejoY A18 1om*re i"ual a Y>arcel A*isa"Y O i"ual a YGose A*ra0amY Usaremos la si"uiente sentencia SELECTJ SELECT DO> +ersonas &'EE Apellidos`So*revilla Trejo` A18 (1om*re`>arcel A*isa"` O 1om*re`Gose A*ra0am`) El resultado sera el si"uienteJ
SQL O8E 6 T0e O8E 6 ,e!;ord is used to sort t0e result-set. La sentencia O8E 6 es usada para ordenar un resultado ordenado por una columna especica La sentencia O8E 6 es usada para ordenar los re"istros en orden ascendente por de#ault Si 3uieres ordenar los re"istros en orden descendente utili2a la pala*ra 8ESC Sinta?is SQL O8E 6 SELECT nom*reRcolumna(s) DO> nom*reRta*la O8E 6 nom*reRcolumn(s) ASC8ESC A0ora vamos a seleccionar todas las personas de la ta*la$ pero mostrando en orden por el campo 1om*re Usaremos la si"uiente sentencia SELECTJ SELECT DO> +ersonas O8E 6 1om*re El resultado sera el si"uienteJ
O8E 6 8ESC A0ora vamos a seleccionar a todas las personas de la ta*la pero mostrandolas en un orden descendente por el campo 1om*re con la pala*ra 8ESC &e use t0e #ollo;in" SELECT statementJ SELECT DO> +ersonas O8E 6 1om*re 8ESC El resultado sera el si"uienteJ
Se!te!ia SQL %NSERT %NTO
La sentencia 91SET 91TO se usa para insertar un re"istro o la en una ta*la Sinta?is SQL 91SET 91TO Es posi*le escri*ir la sentencia 91SET 91TO en dos #ormas La primera #orma no especica los nom*res de las columnas donde los datos seran insertados solo los valoresJ 91SET 91TO nom*reRta*la BALUES (valor/$ valor$ valorI$...)
La se"unda #orma especica los nom*res de las columnas ! los valores insertados 91SET 91TO nom*reRta*la (columna/$ columna$ columnaI$...) BALUES (valor/$ valor$ valorI$...) Ejemplo 91SET 91TO 8ado 3ue tenemos la si"uiente ta*la +ersonasJ
9nsertaremos un nuevo re"istro de la si"uiente #ormaJ 91SET 91TO +ersonas BALUES (`>art0a`$ `Lemus 'urtado`$ `Cano"a +ar,`$ `L.A.`) El resultado lo mostrariamos con la sentencia SELECT DO> +ersonas ! seria el si"uienteJ
9nsertar 8atos solo en columnas especicadas Es posi*le a"re"ar datos en columnas especicas Las si"uientes sentencias SQL a"re"aran una nueva la$ pero solo a"re"aran datos en las columnas 1om*re ! Apellidos
91SET 91TO +ersonas (1om*re$ Apellidos) BALUES (`Antonio`$ `Trejo Campos`) +ara mostrar el resultado con la sentenciaJ SELECT DO> +ersonas >ostrara lo si"uienteJ
Se!te!ia SQL 5/ATE Stateme!t
La sentencia U+8ATE es usada para actuali2ar re"istros en una ta*la Sinta?is SQL U+8ATE U+8ATE nom*reRta*la SET columna/valor$ columnvalor$... &'EE al"unaRcolumnaal"unRvalor 1otaJ La sentencia &E'E en la sinta?is U+8ATE$ especica cual de los re"istros va a ser actuali2ado. Si omites la sentencia &'EE todos los re"istros seran actuali2ados. A0ora vamos a actuali2ar la persona YAntonio Trejo CamposY en la ta*la +ersonas Usaremos la si"uientes sentencias SQLJ U+8ATE +ersonas SET 8ireccion`Cano"a +ar,`$ Ciudad`L.A.` &'EE 1om*re`Antonio` A18 Apellido`Trejo Campos` El resultado sera el si"uienteJ
CU98A8O al utili2ar la sentencia U+8ATE Si omites la sentencia &'EE se actuali2aran todos los re"istros de esta #ormaJ U+8ATE +ersonas SET 8ireccion`Cano"a +ar,`$ Ciudad`L.A.` El resultado seriaJ
Sentencia SQL 8ELETE La sentencia 8ELETE se usa para *orrar re"istros o las en una ta*la Sinta?is SQL 8ELETE 8ELETE DO> nom*reRta*la &'EE al"unaRcolumnaal"unRvalor 1otaJ La sentencia &'EE en la sinta?is 8ELETE especica el re"istro o los re"istros 3ue seran *orrados$ si omites la sentencia &'EE$ todos los re"istros seran *orrados de la ta*la
A0ora vamos a *orrar la persona Y>arco Antonio Trejo LemusY en la ta*la +ersonas con la si"uiente sentenciaJ 8ELETE DO> +ersonas &'EE 1om*re`>arco Antonio` A18 Apellidos`Trejo Lemus` SELECT DO> +ersonas El resultado sera el si"uienteJ
B$rrar t$*as "as 6"as
Es posi*le *orrar todas las las en una ta*le sin *orrar la ta*la en si. Esto si"nica 3ue la estructura de la ta*la$ atri*utos e indices 3uedaran intactosJ 8ELETE DO> nom*reRta*la or 8ELETE DO> nom*reRta*la 1otaJ 8e*es tener cuidado cuando *orres re"istros. a 3ue no podras des0acer lo 3ue 0a"as con esta sentencia.
A+E189CE / E" siie!te $*i&$ reara "a ase *e *at$s e! e" servi*$r SQL E7/RESS
/.- 'acer clic en 9nicio --K Todos los +ro"ramas --K >icroso#t SQL SEBE --K SQL
Server >ana"ement Studio .- 'acer clic en el *oton CO1ECTA
I.- 'acer clic 1ueva Consulta (se encuentra en el mar"en superior i23uierdo)
Seleccionar ! Copiar el si"uiente YCO89O E1EA8O 8E 6ASE 8E 8ATOSY empresaJ RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR USE master i# e?ists (select #rom s!sdata*ases ;0ere name`empresa`) *e"in raiserror(`La *ase de datos e?isteZ elimin%ndola....`$$/) 8O+ data*ase empresa
end O raiserror(`Creando *ase de datos empresa....`$$/) "o CEATE 8ATA6ASE empresa O USE empresa O CEATE TA6LE +ersonas( +Rid int +9>A HE 98E1T9T$ 1om*re nc0ar() 1OT 1ULL$ Apellidos nc0ar(I) 1OT 1ULL$ 8ireccion nc0ar(5) 1OT 1ULL$ Ciudad nc0ar(/) 1OT 1ULL) O O 91SET 91TO +ersonas BALUES (`>arco Antonio`$`Trejo Lemus`$`Calle E `$`Tampico`)91SET 91TO +ersonas BALUES (`>art0a 6eatri2`$`Trejo Lemus`$`Calle E `$`Tampico`)91SET 91TO +ersonas BALUES (`Guana Elvira`$`Trejo Lemus`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`1ora _ulma`$`Trejo Lemus`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`Laura Lucero`$`So*revilla Trejo`$`Calle E `$`Tampico`)91SET 91TO +ersonas BALUES (`>aria de la lu2`$`Trejo Campos`$`Calle E `$`Tampico`)91SET 91TO +ersonas BALUES (`Trinidad`$`Trejo 6autista`$`Calle E `$`Tampico`) 91SET 91TO +ersonas BALUES (`>arcel A*isa"`$`So*revilla Trejo`$`Calle E `$`Tampico`)91SET 91TO +ersonas BALUES (`Gose A*ra0am`$`So*revilla Trejo`$`Calle E `$`Tampico`)91SET 91TO +ersonas BALUES (`Samuel Salomon`$`Olmeda Trejo`$`Calle E `$`Tampico`) O select #rom +ersonas 3uit RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
5.- +e"ar el codi"o
@.- Ejecutar el codi"o SQL 0aciendo clic so*re la opcion Ejecutar 3ue se muestra a continuacionJ
2ublicado por Marco Antonio Trejo Lemus en 19:18 1 comentario:
lunes$ / de ma!o de V A8AN9AO ."a#s#"a SQL TO/
La clausula TO+ se usa para especicar el numer de re"istros 3ue e?isten puede vericar la lon"itud de las ta*las con miles de re"istros$ re"resando el numero de re"istros 1otaJ 1o todas las *ases de datos soportan la clausula TO+ Sinta?is SQL Server SELECT TO+ numeroporciento nom*reRcolumna(s)
DO> nom*reRta*la A0ora seleccionaremos solo los dos primeros re"istros de la ta*la 3ue se muestra a*ajoJ
Utili2aremos las si"uientes sentencias SELECTJ SELECT TO+ DO> +ersonas El resultado sera el si"uienteJ
Se!te!ia SQL TO/ /ER.ENT
A0ora seleccionaremos solo el @f de los re"istros en la ta*la Usaremos las si"uientes sentencias SELECTJ SELECT TO+ @ +ECE1T DO> +ersonas El resultado se muestra a*ajo en la ta*laJ
Opera*$r SQL L%:E Opera*$r SQL L%:E
El operador L9HE se usa en una sentencia &'EE para *uscar un patron en una columna Sinta?is L9HE SELECT nom*reRcolumna(s) DO> nom*reRta*la &'EE nom*reRcolumna L9HE patron
Ejemplo de operador L9HE En la ta*la Y+ersonasY J Bamos a *uscar las personas 3ue viven en la ciudad de Tampico 3ue empiecen con YTaY de la ta*la en cuestion Usaremos la si"uiente sentencia SELECTJ SELECT DO> +ersonas &'EE Ciudad L9HE `Taf` El si"no YfY puede ser usado para denir comodines (letras 3ue #altan en el patron de *us3ueda) am*as antes o despues del patron de *us3ueda El resultado seria el si"uienteJ A0ora vamos a seleccionar las personas 3ue viven en la ciudad 3ue comien2a con una YTY de la ta*la personas Usaremos la si"uiente sentencia SELECTJ SELECT DO> +ersonas &'EE Ciudad L9HE `fT` El resultado seria el si"uienteJ A0ora vamos a seleccionar las personas 3ue viven en la ciudad 3ue contiene el patron YtamY de la ta*la personas Usaremos la si"uiente sentencia SELECTJ SELECT DO> +ersonas &'EE Ciudad L9HE `ftamf`
El resultado seria el si"uienteJ Tam*ien es posi*le seleccionar las personas 3ue viven en la ciudad 3ue no contienen el patron YtampY de la ta*la personas$ usando la pala*ra clave 1OT Usaremos la si"uiente sentencia SELECTJ SELECT DO> +ersonas &'EE Ciudad 1OT L9HE `ftampf` El resultado seria el si"uienteJ
.$m$*i!es SQL
Los comodines SQL pueden ser usados en la *us3ueda de datos en una *ase de datos pueden sustituir a uno o mas caracteres cuando se *us3uen los datos Los comodines de*en usarse con el operador L9HE Se pueden usar con SQL los si"uientes comodinesJ
Usando el comod4n f A0ora seleccionaremos las personas 3ue viven en la ciudad de Tampico 3ue empiecen con YTaY de la ta*la +ersonas Usaremos la si"uiente sentencia SELECTJ SELECT DO> +ersonas &'EE Ciudad L9HE `Taf` A0ora *uscaremos las personas 3ue viven en la ciudad 3ue conten"a el patron YicoY de la ta*la +ersonas Usaremos la si"uiente sentencia SELECTJ SELECT DO> +ersonas &'EE Ciudad L9HE `ficof`