Sunteți pe pagina 1din 14

1

Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
IV. CLAUSULAS JOIN
CCNSUL1AS DL UNICN IN1LkNAS
consu/tos de combinocin entre tob/os
Las vlnculaclones enLre Lablas se reallzan medlanLe la clusula lnnL8 que comblna reglsLros de
dos Lablas slempre que haya concordancla de valores en un campo comun. Su slnLaxls es:
SLLLC1 campos
IkCM Lb1
INNLk ICIN Lb2 CN Lb1.campo1 comp Lb2.campo2
Ln donde:
Lb1, Lb2 Son los nombres de las Lablas desde las que se comblnan los reglsLros.
campo1,
campo2
Son los nombres de los campos que se comblnan. Sl no son numerlcos, los
campos deben ser del mlsmo Llpo de daLos y conLener el mlsmo Llpo de daLos,
pero no Llenen que Lener el mlsmo nombre.
comp Ls cualquler operador de comparacln relaclonal: =, <,<>, <=, =>, >.
Se puede uLlllzar una operacln lnnL8 !Cln en cualquler clusula l8CM. LsLo crea una
comblnacln por equlvalencla, conoclda Lamblen como unln lnLerna. Las comblnaclones
equlvalenLes son las ms comunes, esLas comblnan los reglsLros de dos Lablas slempre que haya
concordancla de valores en un campo comun a ambas Lablas. Se puede uLlllzar lnnL8 !Cln con las
Lablas ueparLamenLos y Lmpleados para selecclonar Lodos los empleados de cada deparLamenLo.
or el conLrarlo, para selecclonar Lodos los deparLamenLos (lncluso sl alguno de ellos no Llene
nlngun empleado aslgnado) se emplea LLl1 !Cln o Lodos los empleados (lncluso sl alguno no esL
aslgnado a nlngun deparLamenLo), en esLe caso 8lCP1 !Cln.
2
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
1amblen se pueden enlazar varlas clusulas Cn en una lnsLruccln !Cln, uLlllzando la slnLaxls
slgulenLe:
SLLLC1 campos IkCM Labla1
INNLk ICIN Labla2 CN ( Lb1.campo1 comp Lb2.campo1
AND Lb1.campo2 comp Lb2.campo2 )
Ck Lb1.campo3 comp Lb2.campo3
Sl empleamos la clusula lnnL8 en la consulLa se selecclonarn slo aquellos reglsLros de la Labla
de la que hayamos escrlLo a la lzqulerda de lnnL8 !Cln que conLengan al menos un reglsLro de la
Labla que hayamos escrlLo a la derecha. ara soluclonar esLo Lenemos dos clusulas que susLlLuyen
a la palabra clave lnnL8, esLas clusulas son LLl1 y 8lCP1. LLl1 Loma Lodos los reglsLros de la
Labla ublcada en l8CM aunque no Lengan nlngun reglsLro en la Labla del !Cln. 8lCP1 reallza la
mlsma operacln pero al conLrarlo, Loma Lodos los reglsLros de la Labla del !Cln aunque no Lenga
nlngun reglsLro en la Labla del l8CM.
Consu|tas de Auto comb|nac|n
La auLo comblnacln se uLlllza para unlr una Labla conslgo mlsma, comparando valores de dos
columnas con el mlsmo Llpo de daLos. La slnLaxls en la slgulenLe:
SELECT allas1.columna, allas2.columna, ...
FROMLabla1 as allas1, Labla2 as allas2
WHERE allas1.columna = allas2.columna
ANDoLras condlclones
3
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
or e[emplo, para vlsuallzar el numero, nombre y puesLo de cada empleado, [unLo con el numero,
nombre y puesLo del supervlsor de cada uno de ellos se uLlllzarla la slgulenLe senLencla:
SELECT L.num_emp, L.nombre, L.puesLo, L.num_sup,s.nombre, s.puesLo
FROMempleados AS L, empleados AS s
WHERE L.num_sup = s.num_emp
CCNSUL1AS DL UNICN Lk1LkNAS
Se uLlllza la operacln unlCn para crear una consulLa de unln, comblnando los resulLados de dos
o ms consulLas o Lablas lndependlenLes. Su slnLaxls es:
consulLa1 unlCn consulLa2 unlCn consulLa n
Ln donde:
ConsulLa1, consulLa2, consulLa n Son lnsLrucclones SLLLC1
uede comblnar los resulLados de dos o ms consulLas, lnsLrucclones SLLLC1, en cualquler orden,
en una unlca operacln unlCn. 1odas las consulLas en una operacln unlCn deben pedlr el
mlsmo numero de campos, no obsLanLe los campos no Llenen porque Lener el mlsmo Lamano o el
mlsmo Llpo de daLos.
Se puede uLlllzar una clusula C8Cu 8? y/o PAvlnC en cada argumenLo consulLa para agrupar
los daLos devuelLos. uede uLlllzar una clusula C8uL8 8? al flnal del ulLlmo argumenLo consulLa
para vlsuallzar los daLos devuelLos en un orden especlflco.
CkI1LkICS DL SLLLCCICN
AnLes de comenzar el desarrollo de esLe aparLado hay que recalcar Lres deLalles de vlLal
lmporLancla. Ll prlmero de ellos es que cada vez que se desee esLablecer una condlcln referlda a
un campo de LexLo la condlcln de busqueda debe lr encerrada enLre comlllas slmples, la segunda
hace referencla a las fechas se hace necesarlo parLlcularlzarlas segun el banco de daLos.
4
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
8eferenLe a los valores lglcos 1rue o lalse, en esLos slsLemas se uLlllzan los campos 8l1 que
permlLen almacenar valores de 0 1, 0 para los valores lALSL, y 1 para los valores 18uL, se puede
uLlllzar la slnLaxls slgulenLe que funclona en Lodos los casos: sl se desea saber sl el campo es falso
"... CAMC = 0" y para saber los verdaderos "CAMC <> 0" o CAMC = 1".
Cperadores Lg|cos
Los operadores lglcos soporLados por SCL son: Anu, C8, nC1. A excepcln del ulLlmo
Lodos poseen la slgulenLe slnLaxls:
<expresln1> operador <expresln2>
Ln donde expresln1 y expresln2 son las condlclones a evaluar, el resulLado de la operacln varla
en funcln del operador lglco. La Labla ad[unLa muesLra los dlferenLes poslbles resulLados:
<expresln1> Cperador <expresln2> 8esulLado
verdad Anu lalso lalso
verdad Anu verdad verdad
lalso Anu verdad lalso
lalso Anu lalso lalso
verdad C8 lalso verdad
verdad C8 verdad verdad
lalso C8 verdad verdad
lalso C8 lalso lalso
3
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
Sl a cualqulera de las anLerlores condlclones le anLeponemos el operador nC1 el resulLado de la
operacln ser el conLrarlo al devuelLo sln el operador nC1.
Ejemplos:
SELECT * FROM Lmpleados
WHERE Ldad > 23 AND Ldad < 30
SELECT * FROMLmpleados
WHERE (Ldad > 23 AND Ldad < 30)
OR Sueldo = 100
SELECT * FROMLmpleados
WHERE NOT LsLado = 'SolLero'
SELECT * FROMLmpleados
WHERE (Sueldo > 100 Anu Sueldo < 300)
OR (Munlclplo = 'Soyapango' AND LsLado = 'Casado')
vo/ores Nu/os
Ln muchas ocaslones es necesarlo emplear como crlLerlo de seleccln valores nulos en los
campos. odemos emplear el operador lS nuLL para reallzar esLa operacln. or e[emplo:
SELECT * FROMLmpleados
WHERE uul IS NULL
lntervo/os de vo/ores
ara lndlcar que deseamos recuperar los reglsLros segun el lnLervalo de valores de un campo
emplearemos el operador 8eLween cuya slnLaxls es:
campo [noL] 8eLween valor1 And valor2 (la condlcln noL es opclonal)
6
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
Ln esLe caso la consulLa devolverla los reglsLros que conLengan en "campo" un valor lncluldo en el
lnLervalo valor1, valor2 (ambos lncluslve). Sl anLeponemos la condlcln noL devolver aquellos
valores no lncluldos en el lnLervalo.
SELECT * FROMLmpleados
WHERE Codlgo Between 1134 And 1324
/ Operodor Like
Se uLlllza para comparar un campo con un modelo en una expresln SCL. Su slnLaxls es:
campo Llke modelo
Ln donde campo se compara con el modelo expresln. Se puede uLlllzar el operador Llke para
enconLrar valores en los campos que colncldan con el modelo especlflcado. or modelo puede
especlflcar un valor compleLo (Ana Marla), o se puede uLlllzar una cadena de caracLeres comodln
como los reconocldos por el slsLema operaLlvo para enconLrar un rango de valores (An,).
Ll operador Llke se puede uLlllzar en una expresln para comparar un valor de un campo con una
expresln de cadena. or e[emplo, sl lnLroduce Llke 'C*' en una consulLa SCL, la consulLa devuelve
Lodos los valores de campo que comlencen por la leLra C. Ln una consulLa con parmeLros, puede
hacer que el usuarlo escrlba el modelo que se va a uLlllzar.
La c|usu|a WnLkL
La clusula WPL8L puede usarse para deLermlnar que reglsLros de las Lablas enumeradas en la
clusula l8CM aparecern en los resulLados de la lnsLruccln SLLLC1. uespues de escrlblr esLa
clusula se deben especlflcar las condlclones expuesLas en los aparLados anLerlores. Sl no se
emplea esLa clusula, la consulLa devolver Lodas las fllas de la Labla. WPL8L es opclonal, pero
cuando aparece debe lr a conLlnuacln de l8CM o lnnL8, LLl1 8lCP1 !Cln.
SELECT Apellldos, Salarlo FROMLmpleados
WHERE Salarlo = 21000
SELECT ldroducLo, LxlsLenclas FROMroducLos
WHERE LxlsLenclas <= nuevoedldo
7
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
SELECT * FROMedldos
WHERE lechaLnvlo = '19943003'
SELECT Apellldos, nombre FROMLmpleados
WHERE Apellldos = 'klng'
SELECT Apellldos, nombre FROMLmpleados
WHERE Apellldos Like 'S'
SELECT Apellldos, Salarlo FROMLmpleados
WHERE Salarlo Between 200 And 300
SELECT Apellldos, Salarlo FROMLmpleados
WHERE Apellldos Between 'Lon' And '1ol'
SELECT ldedldo, lechaedldo FROMedldos
WHERE lechaedldo Between '19940101' And '19941231'
SELECT Apellldos, nombre, Cludad FROMLmpleados
WHERE Cludad In ('Sevllla', 'Los Angeles', '8arcelona')
AGkUAMILN1C DL kLGIS1kCS
8
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
6kOuP 8Y
Comblna los reglsLros con valores ldenLlcos, en la llsLa de campos especlflcados, en un unlco
reglsLro. ara cada reglsLro se crea un valor sumarlo sl se lncluye una funcln SCL agregada, como
por e[emplo Sum o CounL, en la lnsLruccln SLLLC1. Su slnLaxls es:
SLLLC1 campos IkCM Labla
WnLkL crlLerlo
GkCU 8 campos del grupo
C8Cu 8? es opclonal. Los valores de resumen se omlLen sl no exlsLe una funcln SCL agregada
en la lnsLruccln SLLLC1. Los valores null en los campos C8Cu 8? se agrupan y no se omlLen. no
obsLanLe, los valores null no se evaluan en nlnguna de las funclones SCL agregadas.
Se uLlllza la clusula WPL8L para exclulr aquellas fllas que no desea agrupar, y la clusula PAvlnC
para fllLrar los reglsLros una vez agrupados.
1odos los campos de la llsLa de campos de SLLLC1 deben o blen lnclulrse en la clusula C8Cu 8?
o como argumenLos de una funcln SCL agregada.
SELECT ldlamllla, Sum(SLock) AS SLockAcLual FROMroducLos
GROUP BY ldlamllla
una vez que C8Cu 8? ha comblnado los reglsLros, PAvlnC muesLra cualquler reglsLro agrupado
por la clusula C8Cu 8? que saLlsfaga las condlclones de la clusula PAvlnC.
PAvlnC es slmllar a WPL8L, deLermlna que reglsLros se selecclonan. una vez que los reglsLros se
han agrupado uLlllzando C8Cu 8?, PAvlnC deLermlna cuales de ellos se van a mosLrar.
9
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
SELECT ldlamllla, Sum(SLock) AS SLockAcLual FROMroducLos
GROUP BY ldlamllla
HAVING SLockAcLual > 100 AND nombreroducLo Like '8CS'
AVG
Calcula el promedlo de un con[unLo de valores conLenldos en un campo especlflcado de una
consulLa. Su slnLaxls es la slgulenLe
Avg (expr)
Ln donde expr represenLa el campo que conLlene los daLos numerlcos para los que se desea
calcular el promedlo o una expresln que reallza un clculo uLlllzando los daLos de dlcho campo. Ll
promedlo para Avg se calcula asl: la suma de los valores dlvldldo por el numero de valores). La
funcln Avg no lncluye nlngun campo null en el clculo.
SELECT Avg(CasLos) AS romedlo FROMedldos
WHERE CasLos > 100
Count
Calcula el numero de reglsLros devuelLos por una consulLa. Su slnLaxls es la slgulenLe
CounL(expr)
Ln donde expr conLlene el nombre del campo que desea conLar. Los operandos de expr pueden
lnclulr el nombre de un campo de una Labla, una consLanLe o una funcln (la cual puede ser
lnLrlnseca o deflnlda por el usuarlo pero no oLras de las funclones agregadas de SCL). uede
conLar cualquler Llpo de daLos lncluso LexLo.
10
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
Aunque expr puede reallzar un clculo sobre un campo, CounL slmplemenLe cuenLa el numero de
reglsLros sln Lener en cuenLa que valores se almacenan en los reglsLros. La funcln CounL no
cuenLa los reglsLros que Llenen campos null a menos que expr sea el carcLer comodln asLerlsco
(*). Sl uLlllza un asLerlsco, CounL calcula el numero LoLal de reglsLros, lncluyendo aquellos que
conLlenen campos null. CounL(*) es conslderablemenLe ms rplda que CounL(Campo). no se debe
poner el asLerlsco enLre dobles comlllas ('*').
SELECT Count(*) AS 1oLal FROMedldos
Max, M|n
uevuelven el mxlmo o el mlnlmo de un con[unLo de valores conLenldos en un campo especlflco
de una consulLa. Su slnLaxls es:
Mln(expr)
Max(expr)
Ln donde expr es el campo sobre el que se desea reallzar el clculo. Lxpr puede lnclulr el nombre
de un campo de una Labla, una consLanLe o una funcln (la cual puede ser lnLrlnseca o deflnlda por
el usuarlo pero no oLras de las funclones agregadas de SCL).
SELECT Min(CasLos) AS LlMln FROMedldos
WHERE als = 'Lspana'
SELECT Max(CasLos) AS LlMax FROMedldos
WHERE als = 'Lspana'
Sum
uevuelve la suma del con[unLo de valores conLenldo en un campo especlflco de una consulLa. Su
slnLaxls es:
Sum(expr)
11
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
Ln donde expr represenLa el nombre del campo que conLlene los daLos que desean sumarse o una
expresln que reallza un clculo uLlllzando los daLos de dlchos campos. Los operandos de expr
pueden lnclulr el nombre de un campo de una Labla, una consLanLe o una funcln (la cual puede
ser lnLrlnseca o deflnlda por el usuarlo pero no oLras de las funclones agregadas de SCL).
SELECT Sum(reclounldad * CanLldad) AS 1oLal FROMueLalleedldo
SU8CCNSUL1AS
una subconsulLa es una lnsLruccln SLLLC1 anldada denLro de una lnsLruccln SLLLC1,
SLLLC1...ln1C, lnSL81...ln1C, uLLL1L, o uuA1L o denLro de oLra subconsulLa. uede uLlllzar dos
formas de slnLaxls para crear una subconsulLa:
expresln [nC1] ln (lnsLruccln sql)
[nC1] LxlS1S (lnsLruccln sql)
Ln donde:
Lxpresslon Ls una expresln por la que se busca el con[unLo resulLanLe de la subconsulLa.
lnsLruccln
SCL
Ls una lnsLruccln SLLLC1, que slgue el mlsmo formaLo y reglas que cualquler
oLra lnsLruccln SLLLC1. uebe lr enLre parenLesls.
Se puede uLlllzar una subconsulLa en lugar de una expresln en la llsLa de campos de una
lnsLruccln SLLLC1 o en una clusula WPL8L o PAvlnC. Ln una subconsulLa, se uLlllza una
lnsLruccln SLLLC1 para proporclonar un con[unLo de uno o ms valores especlflcados para evaluar
en la expresln de la clusula WPL8L o PAvlnC.
12
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
Ll predlcado ln se emplea para recuperar unlcamenLe aquellos reglsLros de la consulLa prlnclpal
para los que algunos reglsLros de la subconsulLa conLlenen un valor lgual. Ll e[emplo slgulenLe
devuelve Lodos los producLos vendldos con un descuenLo lgual o mayor al 23 por clenLo:
SLLLC1 * IkCM roducLos
WnLkL luroducLo ln
( SLLLC1 lmproducLo l8CM ueLalleedldo
WPL8L uescuenLo = 0.23 )
lnversamenLe se puede uLlllzar nC1 ln para recuperar unlcamenLe aquellos reglsLros de la
consulLa prlnclpal para los que no hay nlngun reglsLro de la subconsulLa que conLenga un valor
lgual.
Ll predlcado LxlS1S (con la palabra reservada nC1 opclonal) se uLlllza en comparaclones de
verdad/falso para deLermlnar sl la subconsulLa devuelve algun reglsLro. Supongamos que
deseamos recuperar Lodos aquellos cllenLes que hayan reallzado al menos un pedldo:
SLLLC1 CllenLes.Companla, CllenLes.1elefono IkCM CllenLes
WnLkL LkIS1S ( SLLLC1 * IkCM edldos
WnLkL edldos.ldedldo = CllenLes.ldCllenLe )
LsLa consulLa es equlvalenLe a esLa oLra:
SLLLC1 CllenLes.Companla, CllenLes.1elefono IkCM CllenLes
WnLkL ldCllenLes ln ( SLLLC1 edldos.ldCllenLe l8CM edldos )
Se puede uLlllzar Lamblen allas del nombre de la Labla en una subconsulLa para referlrse a Lablas
llsLadas en la clusula l8CM fuera de la subconsulLa. Ll e[emplo slgulenLe devuelve los nombres
de los empleados cuyo salarlo es lgual o mayor que el salarlo medlo de Lodos los empleados con el
mlsmo LlLulo. A la Labla Lmpleados se le ha dado el allas 11:
SLLLC1 Apellldo, nombre, 1lLulo, Salarlo IkCM Lmpleados AS 11
13
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
WnLkL Salarlo = ( SLLLC1 Avg(Salarlo) l8CM Lmpleados
WPL8L 11.1lLulo = Lmpleados.1lLulo )
CkDLk 8 1lLulo
Ln el e[emplo anLerlor, la palabra reservada AS es opclonal.
SLLLC1 Apellldos, nombre, Cargo, Salarlo IkCM Lmpleados
WnLkL Cargo LlkL 'AgenLe ven'
Anu Salarlo > ( SLLLC1 Salarlo l8CM Lmpleados
WPL8L Cargo LlkL '!efe'
C8 Cargo LlkL 'ulrecLor' )
(Obtleoe ooo llsto coo el oombte, cotqo y solotlo Je toJos los oqeotes Je veotos coyo solotlo es
moyot poe el Je toJos los jefes y Jltectotes.)
SLLLC1 DIS1INC1 nombreroducLo, reclo_unldad IkCM roducLos
WnLkL reclounldad = ( SLLLC1 reclounldad IkCM roducLos
WnLkL nombreroducLo = 'Almlbar anlsado' )
(Obtleoe ooo llsto coo el oombte y el pteclo ooltotlo Je toJos los ptoJoctos coo el mlsmo pteclo
poe el olmlbot oolsoJo.)
SLLLC1 DIS1INC1 nombreConLacLo, nombreCompanla, CargoConLacLo, 1elefono IkCM
CllenLes
WnLkL ldCllenLe ln ( SLLLC1 ulS1lnC1 ldCllenLe l8CM edldos
WPL8L lechaedldo < '19930701' )
(Obtleoe ooo llsto Je los compolos y los cootoctos Je toJos los clleotes poe boo teollzoJo oo
peJlJo eo el seqooJo ttlmestte Je 199J.)
SLLLC1 nombre, Apellldos IkCM Lmpleados AS L
14
Iuente: L|bros en panta||a de SL Server 2008 de M|crosoft Corporat|on (Ld|c|n de Lnero de 2009)
WnLkL LkIS1S ( SLLLC1 * IkCM edldos AS C
WnLkL C.ldLmpleado = L.ldLmpleado )
(5elecclooo el oombte Je toJos los empleoJos poe boo tesetvoJo ol meoos oo peJlJo.)
SLLLC1 DIS1INC1 edldos.ld_roducLo, edldos.CanLldad,
( SLLLC1 roducLos.nombre l8CM roducLos
WPL8L roducLos.ldroducLo = edldos.ldroducLo ) AS LlroducLo
IkCM edldos
WnLkL edldos.CanLldad = 130
CkDLk 8 edldos.ld_roducLo
(kecopeto el cJlqo Jel ltoJocto y lo cootlJoJ peJlJo Je lo toblo peJlJos, exttoyeoJo el oombte
Jel ptoJocto Je lo toblo Je ptoJoctos.)
SLLLC1 numvuelo, lazas IkCM vuelos
WnLkL Crlgen = 'Madrld'
Anu LxlsLs ( SLLLC1 11.numvuelo l8CM vuelos AS 11
WPL8L 11.lazasLlbres > 0 Anu 11.numvuelo=vuelos.numvuelo )
(kecopeto oometos Je voelo y copoclJoJes Je opoellos voelos coo Jestloo MoJtlJ y plozos llbtes

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