Sunteți pe pagina 1din 49

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

TEMA 3: El lenguaje SQL I: Consulta de datos.


3.1 Introduccin. Antes de proceder a explicar el lenguaje en SQL, veamos la descripcin de la peque a !ase de datos relacional que usaremos a lo largo del presente tema para la ejecucin de los ejemplos" La !ase de datos esta #ormada por cinco ta!las, donde cada ta!la almacena in#ormacin re#erente a un tipo particular de entidad" El diagrama de la !ase de datos puede verse en la #igura siguiente $#igura %"&"&'"
*0ICI/AS oficina ciudad region dir o!jetivo ventas +E(.E/-AS num_empl nom!re edad o#icina2rep titulo contrato director cuota ventas (+*),C-*S id_fab id_producto descripcion precio existencias

CLIE/-ES num_clie empresa rep2clie limite2credito

(E)I)*S num_pedido #ec1a2pedido clie rep #a! producto cant importe

Figura 3.1.1: Diagrama de la base de datos de ejemplo. La ta!la *0ICI/AS $ta!la %"&"&' almacena datos acerca de cada una de las cinco o#icinas de ventas incluyendo la ciudad en donde est3 locali4ada la o#icina, la regin de ventas a la que pertenece, etc"
OFICINA 55 && &5 &% 5& CIUDAD -oledo .alencia <arcelona Alicante >adrid REGION DIR OBJETI O Centro &67 58"966 Este &6; 95"966 Este &6: 86"666 Este &69 %6"666 Centro &67 ;6"666 ENTA! %:":%5 :6"6;% 5="%57 %="%58 7&"%6=

Tabla 3.1.1: La tabla OFICINAS de la base de datos de ejemplo. La ta!la CLIE/-ES $ta!la %"&"5' almacena datos acerca de cada cliente, tales como el nom!re de la empresa, el l?mite de cr@dito y el vendedor que atiende al cliente"
NU"_C#IE E"$RE!A 5&&& E.<E S"A" 5&65 Exclusivas del Este S"L" Ciencias y -@cnicas Estad?sticas & RE$_C#IE &6% &6& #I"ITE_CREDITO 96"666 ;9"666

Adquisicin y tratamiento de datos 5&6% 5&5% 5&68 5&&9 5&6& 5&&5 5&5& 5&&: 5&5: 5&67 5&&8 5&55 5&56 5&6; 5&&= 5&&7 5&&% 5&6= 5&69 (ino S"L" Anos" >artine4 S"A" )istri!uciones Sur S"A" A0S S"A" Exclusivas Soriano S"A" Lope4 Asociados S"L" Aernande4 B 1ijos S"L" Componentes 0ernande4 S"A" )omingo S"L" Capater Importaciones S"A" Anos" +amon S"L" D(0 S"L" )istri!uciones >ontiel S"L" Construcciones Leon S"A" >artine4 B Earcia S"L" Exclusivas /orte S"A" Importaciones >artin S"L" +oda B Castedo S"L" >AL< S"A"

El lenguaje SQL I: Consulta de datos &69 &65 &&6 &6& &6; &67 &6% &65 &68 &6= &6; &69 &65 &65 &6= &67 &6: &6% &6& 96"666 :6"666 %9"666 56"666 ;9"666 96"666 :9"666 56"666 :6"666 99"666 %9"666 %6"666 96"666 ;9"666 59"666 ;6"666 56"666 59"666 :9"666

Tabla 3.1.2: La tabla CLI NT S de la base de datos de ejemplo. La ta!la +E(.E/-AS $ta!la %"&"%' almacena el nFmero de empleado, el nom!re, la edad, las ventas anuales 1asta la #ec1a y otros datos re#erentes a cada vendedor"
NU"_E"$# &6; &6: &69 &6= &67 &65 &6& &&6 &6% &68 DIRECTOR /,LL &6; &6: &6; &6; &67 &6: &6& &6: &67 NO"BRE Dose >aldonado Carlos >artine4 <elen Aguirre >aria Earcia Loren4o 0ernande4 Soledad >artine4 )aniel Eutierre4 Antonio .alle (edro Cru4 /atalia >artin CUOTA 59"666 &8"966 %6"666 58"966 %6"666 %6"666 58"966 /,LL 59"666 58"966 EDAD OFICINA_RE$ TITU#O 95 && .( .entas %% &5 )ir" .entas %8 &% )ir" .entas %& && +ep" .entas ;5 5& )ir" .entas :7 5& +ep" .entas :9 &5 +ep" .entas :& /,LL +ep" .entas 5= &5 +ep" .entas := 55 +ep" .entas ENTA! %5"=97 6 %="%58 8"&69 97"9%% 55"88; 5;";57 5%"&5% 5"866 %:":%5 CONTRATO &:G6;G&==7 &=G69G&==8 &5G65G&==7 &5G&6G&=== &5G&6G&=== &6G&5G&==; 56G&6G&==; &%G6&G5666 6&G6%G&==8 &:G&&G&==7

Tabla 3.1.3: La Tabla ! "# NTAS de la base de datos de ejemplo. La ta!la (+*),C-*S $ta!la %"&":' almacena datos acerca de cada producto disponi!le para venta, tal como el #a!ricante, el nFmero del producto, su descripcin y su precio"
ID_FAB +EI ACI QSA ID_$RODUCTO DE!CRI$CION $RECIO E%I!TENCIA! 5A:9C . Stago -rinquete 8= 5&6 :&66H Extractor 5"896 59 IJ:8 +eductor %99 %7 5

Ciencias y -@cnicas Estad?sticas

Adquisicin y tratamiento de datos <IC I>> ACI ACI <IC I>> QSA +EI 0EA I>> <IC ACI I>> ACI QSA ACI +EI I>> ACI 0EA I>> +EI :&;85 88=C :&66% :&66: :&66% 778( IJ:7 5A::L &&5 778A :&67= :&66& 889C :&66C IJ:7A :&665 5A::+ 88%C :&66I &&: 778I 5A::E (late +iostra 5K-m Art?culo -ipo % Art?culo -ipo : >anivela (erno +iostra +eductor <isagra I4qda" Cu!ierta Soporte +iostra +eten Art?culo -ipo & +iostra &K-m >ontador +eductor Art?culo -ipo 5 <isagra )c1a" +iostra &G5K-m Ajustador <ancada >otor +etenedor +iostra (asador <isagra

El lenguaje SQL I: Consulta de datos &76 &"789 &68 &&8 ;95 596 &%: :"966 &:7 9: 559 99 &":59 5"966 &&8 8; :"966 =89 59 5:% :89 %96 6 = 568 &%= % 5: 56% &5 &&9 55% 87 588 9 57 %8 &;8 &5 57 %8 &9 %5 &:

Tabla 3.1.$: La tabla "!OD%CTOS de la base de datos de ejemplo. La ta!la (E)I)*S $ta!la %"&"9' lleva la cuenta de cada pedido remitido por un cliente, identi#icando al vendedor que acept el pedido, el producto solicitado, la cantidad y el importe del pedido, etc" (or simplicidad, cada pedido ata e a un solo producto"
NU"_$EDIDO &&5=;& &&%6&5 &&5=7= &&%69& &&5=;7 &&66%; &&%6:9 &&5=;% &&%6&% &&%697 &&5==8 &&5=7% &&%65: &&%6;5 &&5=8= &&%658 &&%668 &&%6;= &&%6%: &&5==5 &&5=89 &&%699 &&%6:7 &&5==% &&%6;9 &&%66% &&%6:= &&5=78 &&%698 FEC&A_$EDIDO &8G&5G&=== &&G6&G5666 6%G6&G5666 &6G65G5666 &5G&6G&=== %6G6&G5666 65G65G5666 &8G&5G&=== &:G6&G5666 5%G65G5666 67G6&G5666 58G&5G&=== 56G6&G5666 5:G65G5666 &5G&6G&=== 55G65G5666 67G6&G5666 65G6%G5666 5=G6&G5666 6:G&&G&=== &5G&6G&=== &9G65G5666 &6G65G5666 6:G6&G5666 58G65G5666 59G6&G5666 &6G65G5666 %&G&5G&=== &7G65G5666 C#IE 5&&8 5&&& 5&6& 5&&7 5&65 5&68 5&&5 5&6% 5&&7 5&67 5&5: 5&6% 5&&: 5&5: 5&&: 5&6% 5&&5 5&6= 5&68 5&&7 5&&& 5&67 5&56 5&6; 5&6; 5&67 5&&7 5&6% 5&&& RE$ &6; &69 &6; &67 &6& &&6 &67 &69 &67 &6= &68 &69 &67 &68 &65 &69 &67 &68 &&6 &67 &6% &6& &65 &65 &65 &6= &67 &69 &6% % FAB +EI ACI 0EA QSA ACI ACI +EI ACI <IC 0EA <IC ACI QSA 0EA ACI ACI I>> I>> +EI ACI +EI ACI I>> +EI QSA I>> QSA ACI ACI $RODUCTO CANT I"$ORTE 5A::L 8 %&"966 :&66% %9 %"8:9 &&: ; &":97 IJ:8 : &":56 :&66: %: %"=87 :&66C = 55"966 5A::+ &6 :9"666 :&66: 57 %"58; :&66% & ;95 &&5 &6 &":76 :&66% & ;95 :&66: ; 865 IJ:8 56 8"&66 &&: &6 5":%6 :&66C ; &9"666 :&665 9: :"&6: 88%C % 5"759 889C 55 %&"%96 5A:9C 7 ;%5 :&665 &6 8;6 5A::E ; 5"&66 :&66I ; &96 88=C 5 %"896 5A:9C 5: &"7=; IJ:8 ; 5"&%6 88=C % 9";59 IJ:8 5 88; :&66H && 58"966 :&66I 5: ;66

Ciencias y -@cnicas Estad?sticas

Adquisicin y tratamiento de datos &&%6:5 65G65G5666 5&&% &6& +EI

El lenguaje SQL I: Consulta de datos 5A::+ 9 55"966

Tabla 3.1.&: La tabla " DIDOS de la base de datos de ejemplo. 3.2 Tipos de datos. Existen tres grandes tipos de datos en SQL: &" /um@ricos" +epresentan cantidades num@ricas, suscepti!les de participar en c3lculos aritm@ticos" 5" Al#anum@ricos" +epresentan com!inaciones de caracteres cualesquiera" %" )e tiempo" +epresentan magnitudes temporales $a os, meses, d?as, etc"'" )entro de cada tipo de datos 1ay varios su!tipos" .amos a descri!ir a1ora los dominios correspondientes a cada uno de ellos y cmo se de#inen" 3.2.1 Datos numricos. Existen tres su!tipos de datos num@ricos: enteros, decimales y en coma #lotante" Enteros" Sus valores son nFmeros enteros, positivos o negativos" Existen dos tipos de enteros: los peque os y los grandes" Los primeros se de#inen con la pala!ra S'ALLINT y su dominio son los nFmeros enteros comprendidos entre L%58;7 y %58;8" Los segundos se de#inen con la pala!ra INT ( ! y su dominio son los nFmeros enteros entre L5&:8:7%;:7 y 5&:8:7%;:8" )ecimales" Sus valores son nFmeros positivos o negativos que pueden tener parte entera y parte #raccionaria" Estos tipos de datos se de#inen como D CI'AL)p*s+, donde el primer entero p se llama precisin y es el nFmero total de d?gitos $parte entera y parte #raccionaria' que puede tener un valor" El segundo entero es el nFmero de d?gitos que puede tener la parte #raccionaria y se conoce con el nom!re de escala" El dominio de un )ECI>AL$p,s' es el conjunto de todos los nFmeros racionales, positivos y negativos, #ormados por p d?gitos de los que s son #raccionarios" En coma #lotante" Sus valores representan nFmeros positivos o negativos que pueden tener parte entera y parte #raccionaria, como los datos de tipo decimal, pero con m3s ci#ras" Este tipo de datos se de#inen con la pala!ra FLOAT o la pala!ra ! AL $am!as son equivalentes'" Su dominio es el conjunto de nFmeros racionales que son aproximaciones a los nFmeros reales comprendidos entre ciertos l?mites $generalmente los l?mites son los nFmeros cuyo valor a!soluto esta comprendido entre &"&89:=:%9&eK%7 y %":6575%:;;e%7'"

Ciencias y -@cnicas Estad?sticas

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

Internamente est3n codi#icados en lo que en t@rminos in#orm3ticos se denomina coma #lotante, lo que conlleva que puedan aparecer decimales inesperados en algunas operaciones" As?, puede ocurrir que en la suma de dos valores que de!ieran dar un nFmero entero apare4can decimales $por ejemplo =="===== en ve4 de &66'" Esto 1ace a este tipo de datos menos adecuado, en general, que el tipo )ECI>AL para aplicaciones comerciales, conta!les o #inancieras" En cam!io, son m3s adecuados para aplicaciones cient?#icas o de ingenier?a en que se necesite manejar nFmeros muy grandes" 3.2.2 Datos alfanumricos. Se utili4an para almacenar descripciones, nom!res de personas, direcciones, etc" En general in#ormacin de tipo textual o descriptiva" Sus valores son secuencias de caracteres cualesquiera, tomados del conjunto de caracteres disponi!le" Al nFmero de caracteres que #orman un valor al#anum@rico se le denomina longitud" Los datos de tipo al#anum@rico pueden ser de dos su!tipos: de longitud #ija o de longitud varia!le" )e longitud #ija" Este tipo de datos se de#ine como C,A!)-+, donde n indica la longitud" Su dominio es el de todas las secuencias de caracteres de longitud n" La longitud n de!e estar comprendida entre & y 59:, am!os inclusive" )e longitud varia!le" Se de#inen como #A!C,A!)-+" Su dominio es el de todas las secuencias de caracteres de longitud comprendida entre 6 y n" ,na secuencia de longitud cero se llama el valor vac?o" La longitud m3xima suele ser %58;8" 3.2.3 Datos de tiempo. Sus valores son nFmeros que representan un punto en el tiempo con una precisin de d?as, segundos o microsegundos" Existen tres su!tipos: 0ec1as" Se de#inen con la pala!ra DAT y representan un d?a determinado" Sus valores constan de tres partes, todas ellas nFmeros enteros sin signo" La primera parte tiene cuatro d?gitos y representa un nFmero de a o" La segunda tiene dos d?gitos y representa el mes y la tercera, tam!i@n de dos d?gitos, representa el d?a" Su dominio es el conjunto de todas las #ec1as validas segFn el calendario gregoriano, empe4ando en el d?a & de Enero del a o & y terminando el %& de )iciem!re del a o ====, am!os inclusive" Aoras" Se de#inen con la pala!ra TI' y representan una 1ora determinada con precisin de segundos" Sus valores constan de tres partes, todas ellas nFmeros enteros de dos d?gitos sin signo" La primera parte representa la 1ora, la segunda representa el

Ciencias y -@cnicas Estad?sticas

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

minuto y la tercera los segundos" Si la 1ora tiene el valor 5:, la segunda y tercera partes de!en valer cero" Su dominio es de todos los valores de 1oras, minutos y segundos v3lidos en un reloj de 5: 1oras" Instante" Se de#inen con la pala!ra TI' STA'" y representan un punto en el tiempo con precisin de microsegundos" (ara ello sus valores constan de siete partes, todas ellas nFmeros enteros sin signo que representan a o, mes, d?a, 1ora, minuto, segundo y microsegundo" Sus valores son iguales a los de )A-E y -I>E y los microsegundos tienen una precisin de ; d?gitos" Su dominio es el conjunto de valores que identi#ican todos los microsegundos comprendidos entre el & de Enero del a o & y el %& de )iciem!re del a o ====, am!os inclusive" 3.3 Constantes. Entre los elementos componentes de una sentencia SQL, se encuentran las constantes, tam!i@n llamadas literales" Son secuencias de caracteres que representan un valor determinado, num@rico o al#anum@rico" Las constantes pueden ser igual que los tipos num@ricas, al#anum@ricas o de tiempo" Las num@ricas son nFmeros enteros positivos o negativos $&6, M&6, K&6', nFmeros decimales $%"6:, M%"6:, K%"6:' o nFmeros en notacin exponencial $%"&:eK9'" Las constantes al#anum@ricas son secuencias de caracteres cualesquiera que empie4an y terminan con un apstro#e $NA<CO, N(E(EOOSO,O&6"5%O'" Las constantes de tiempo pueden representarse como ddGmmGaaaa aaaaGmmGdd, etc" 3.4 Valores nulos. Sea cual sea el tipo de datos asignado a una columna, se puede permitir o no entre sus valores posi!les uno especial denominado -ulo" El valor nulo se especi#ica con la pala!ra prede#inida N%LL" El valor nulo puede interpretarse como PdesconocidoQ" Se utili4a en ta!las en las que puede 1a!er #ilas para las que no se cono4can los valores de todas sus columnas, o alguna de @stas no sea aplica!le al concepto representado" En una columna de tipo num@rico el valor nulo no es lo mismo que el valor cero" En una columna de tipo al#anum@rico, el nulo no es lo mismo que !lanco o que el valor vac?o $longitud cero'" 3.5 Consultas simples.

Ciencias y -@cnicas Estad?sticas

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

Las consultas son el cora4n del lenguaje SQL" La sentencia S L CT, que se utili4a para expresar consultas en SQL, es la m3s potente y compleja de las sentencias de SQL" Empe4aremos en este punto con las consultas m3s simples para pasar posteriormente a consultas m3s complicadas" 3.5.1 La sentencia SELECT.
SELECALL )IS-I/C?tem seleccionado

, S

0+*>

especi#icacin de ta!la

RAE+E

condicin de !Fsqueda

E+*,( <H

columna de agrupacin

AA.I/E

condicin de !Fsqueda

*+)E+ <H

especi#icacin de ordenacin

Figura 3.&.1.1: Diagrama si-t./ti/o de la se-te-/ia S L CT. La sentencia SELEC- recupera datos de una !ase de datos y los devuelve en #orma de resultados de la consulta" El diagrama sint3ctico de SELEC- puede verse en la #igura %"9"&"&" Las cl3usulas S L CT y F!O' de la sentencia son necesarias" Las cuatro cl3usulas restantes son opcionales" La cl3usula S L CT que inicia cada sentencia SELEC- especi#ica los ?tems de datos a recuperar por la consulta" Los ?tems se especi#ican generalmente mediante una lista de seleccin separados por comas" Cada ?tem de seleccin de la lista genera una Fnica columna de resultados de consulta, en orden de i4quierda a derec1a" ,n ?tem puede ser:

,n nom!re de columna, identi#icando una columna de la ta!la designada en la cl3usula F!O'" Cuando un nom!re de columna aparece como ?tem de seleccin SQL simplemente toma el valor de esa columna de cada #ila de la ta!la de la
8

Ciencias y -@cnicas Estad?sticas

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

!ase de datos y lo coloca en la #ila correspondiente de los resultados de la consulta" El valor S, indicando todas las columnas que #orman la ta!la" ,na constante, especi#icando que el valor constante va a aparecer en todas las #ilas de los resultados de la consulta" ,na expresin SQL, indicando que SQL de!e calcular el valor a colocar en los resultados segFn el estilo especi#icado por la expresin"

La cl3usula F!O' consta de la pala!ra clave F!O', seguida de una lista de especi#icaciones de ta!las separadas por comas" Cada especi#icacin de ta!la identi#ica una ta!la que contiene datos a recuperar por la consulta" Estas ta!las se denominan ta!las #uente de la consulta $y de la sentencia SELEC-', ya que constituyen la #uente de todos los datos que aparecen en los resultados" 3.5.2 Resultados de consultas. El resultado de una consulta SQL es siempre una ta!la de datos, semejante a las ta!las de !ase de datos" Eeneralmente los resultados de la consulta #ormar3n una ta!la con varias columnas y #ilas" (or ejemplo, la consulta siguiente #orma una ta!la de tres columnas $ya que se piden tres ?tems de datos' y die4 #ilas $ya que 1ay die4 vendedores':
SELECT nombre,oficina rep,contrato !R"# rep$entas
NO"BRE OFICINA_RE$ Dose >aldonado && Carlos >artine4 &5 <elen Aguirre &% >aria Earcia && Loren4o 0ernande4 5& Soledad >artine4 5& )aniel Eutierre4 &5 Antonio .alle /,LL (edro Cru4 &5 /atalia >artin 55 CONTRATO &:G6;G&==7 &=G69G&==8 &5G65G&==7 &5G&6G&=== &5G&6G&=== &6G&5G&==; 56G&6G&==; &%G6&G5666 6&G6%G&==8 &:G&&G&==7

Tabla 3.&.2.1: Listado de los -ombres* o0i/i-as 1 0e/2as de /o-trato de todos los 3e-dedores. En contraste, la consulta siguiente produce una Fnica #ila, ya que slo 1ay un vendedor que tenga el nFmero de empleado solicitado" AFn cuando esta Fnica #ila de resultados tenga un aspecto menos Pta!ularQ que los resultados multi#?la, SQL sigue consider3ndolo una ta!la de tres columnas y una #ila"
SELECT nombre,cuota,$entas !R"# rep$entas %&ERE num empl'1()
NO"BRE CUOTA /atalia >artin 58966 ENTA! %::%5

Tabla 3.&.2.2: Nombre* /uota 1 3e-tas del empleado -4mero 156.


Ciencias y -@cnicas Estad?sticas 7

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

En algunos casos los resultados de la consulta pueden ser un Fnico valor, como el siguiente ejemplo:
SELECT *+,-$entas. !R"# rep$entas
A G'(enta)* 5:897"56

Tabla 3.&.2.3: "romedio de 3e-tas de los 3e-dedores. E incluso en otros puede producir cero #ilas de resultados como en este ejemplo:
SELECT nombre,contrato !R"# rep$entas %&ERE $entas/)5(((
NO"BRE CONTRATO

Tabla 3.&.2.$: Nombre 1 0e/2a de /o-trato de /ual7uier 3e-dedor /o- 3e-tas superiores a 6&555. AFn en esta situacin, el resultado sigue siendo una ta!la" Se trata de una ta!la vac?a con dos columnas y cero #ilas" 3.5.3 Consultas sencillas. Las consultas SQL m3s sencillas solicitan columnas de datos de una Fnica ta!la en la !ase de datos" (or ejemplo:
SELECT ciudad,re0ion,$entas !R"# oficinas
CIUDAD -oledo .alencia <arcelona Alicante >adrid REGION Centro Este Este Este Centro ENTA! %:":%5 :6"6;% 5="%57 %="%58 7&"%6=

Tabla 3.&.3.1: Lista de la pobla/i8-* regi8- 1 3e-tas de /ada o0i/i-a de 3e-tas. Adem3s de las columnas cuyos valores provienen directamente de la !ase de datos, una consulta SQL puede incluir columnas calculadas cuyos valores se calculan a partir de los valores de los datos almacenados" (ara solicitar una columna calculada, se especi#ica una expresin SQL en la lista de seleccin"
SELECT ciudad,re0ion,-$entas1ob2eti$o. !R"# oficinas
CIUDAD -oledo .alencia <arcelona Alicante >adrid REGION Centro Este Este Este Centro ENTA!+OBJETI O ;"=%5 K&5":%8 K:6";85 ="%58 5&"%6=

Tabla 3.&.3.2: Lista de la /iudad* regi8- 1 el resultado de 3e-tas para /ada o0i/i-a. (ara procesar la consulta, SQL examina las o#icinas, generando una #ila de resultados por cada #ila de la ta!la *0ICI/AS" Las dos primeras columnas de resultados provienen directamente de la ta!la" La tercera columna se calcula, #ila a #ila, utili4ando
Ciencias y -@cnicas Estad?sticas =

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

los valores de datos de la #ila actual de la ta!la *0ICI/AS" .eamos otros ejemplos de columnas calculadas"
SELECT id fab,id producto,descripcion,-e3istencias4precio. !R"# productos
ID_FAB +EI ACI QSA <IC I>> ACI ACI <IC I>> QSA +EI 0EA I>> <IC ACI I>> ACI QSA ACI +EI I>> ACI 0EA I>> +EI ID_$RODUCTO 5A:9C :&66H IJ:8 :&;85 88=C :&66% :&66: :&66% 778( IJ:7 5A::L &&5 778A :&67= :&66& 889C :&66C IJ:7A :&665 5A::+ 88%C :&66I &&: 778I 5A::E DE!CRI$CION E%I!TENCIA!,$RECIO . Stago -rinquete &;"9=6 Extractor ;7"896 +eductor &%":=6 (late 6 +iostra 5K-m &;"789 Art?culo -ipo % 55"&:= Art?culo -ipo : &;"5;% >anivela &"=9; (erno +iostra ;"666 +eductor 58"565 <isagra I4qda" 9:"666 Cu!ierta &8"656 Soporte +iostra &5"6:5 +eten &8"996 Art?culo -ipo & &9"5%9 +iostra &K-m 8"&59 >ontador &:"666 +eductor :"%5= Art?culo -ipo 5 &5";=5 <isagra )c1a" 9:"666 +iostra &G5K-m 58"%66 Ajustador =59 <ancada >otor %";:9 +etenedor +iostra &9"566 (asador <isagra :"=66

Tabla 3.&.3.3: #alor del i-3e-tario de /ada produ/to.


SELECT nombre,cuota,-cuota5-(.(34$entas.. !R"# rep$entas
NO"BRE CUOTA Dose >aldonado 59"666 Carlos >artine4 &8"966 <elen Aguirre %6"666 >aria Earcia 58"966 Loren4o 0ernande4 %6"666 Soledad >artine4 %6"666 )aniel Eutierre4 58"966 Antonio .alle /,LL (edro Cru4 59"666 /atalia >artin 58"966 CUOTA-'./0, ENTA!* 59"=77,8: &8"966,66 %&"&8=,7& 58"8&%,&9 %&"899,== %6";7%,57 57"5=7,7: /,LL 59"67&,66 57"9%5,=;

Tabla 3.&.3.$: !esultado de ele3ar la /uota de 3e-tas u- 39 a /ada 3e-dedor.


SELECT nombre,#"6T&-contrato.,7E*R-contrato. !R"# rep$entas
NO"BRE "ONT&'contrato* Dose >aldonado ; Carlos >artine4 9 <elen Aguirre 5 >aria Earcia &6 Loren4o 0ernande4 &6 Soledad >artine4 &5 )aniel Eutierre4 &6 Ciencias y -@cnicas Estad?sticas &6 1EAR'contrato* &==7 &==8 &==7 &=== &=== &==; &==;

Adquisicin y tratamiento de datos Antonio .alle (edro Cru4 /atalia >artin & % &&

El lenguaje SQL I: Consulta de datos 5666 &==8 &==7

Tabla 3.&.3.&: 'es 1 a:o de /o-trato de /ada 3e-dedor. -am!i@n se pueden utili4ar constantes de SQL por s? mismas como ?tems en una lista de seleccin" Esto puede ser Ftil para producir resultados que sean m3s #3ciles de leer e interpretar, como por ejemplo:
SELECT ciudad,8tiene $entas de8,$entas !R"# oficinas
CIUDAD -oledo .alencia <arcelona Alicante >adrid 2tiene (enta) de3 tiene ventas de tiene ventas de tiene ventas de tiene ventas de tiene ventas de ENTA! %:":%5 :6"6;% 5="%57 %="%58 7&"%6=

Tabla 3.&.3.;: Lista de 3e-tas para /ada /iudad. A veces es conveniente visuali4ar el contenido de todas las columnas de una ta!la" Esto puede ser particularmente Ftil cuando uno va a utili4ar por primera ve4 una !ase de datos y desea o!tener una r3pida comprensin de su estructura y de los datos que contiene" SQL permite utili4ar un asterisco $S' en lugar de la lista de seleccin como a!reviatura de Ptodas las columnasQ:
SELECT 4 !R"# oficinas
OFICINA 55 && &5 &% 5& CIUDAD -oledo .alencia <arcelona Alicante >adrid REGION DIR OBJETI O Centro &67 58"966 Este &6; 95"966 Este &6: 86"666 Este &69 %6"666 Centro &67 ;6"666 ENTA! %:":%5 :6"6;% 5="%57 %="%58 7&"%6=

Tabla 3.&.3.6: Todos los datos de la tabla o0i/i-as. 3.5.9 !ilas duplicadas. Si una consulta incluye la clave primaria de una ta!la en su lista de seleccin, entonces cada #ila de resultados ser3 Fnica $ya que la clave primaria tiene un valor di#erente en cada #ila'" Si no se incluye la clave primaria en los resultados pueden producirse #ilas duplicadas" (or ejemplo, supongamos la siguiente peticin:
SELECT re0ion !R"# oficinas
REGION Centro Este Este Este Centro

Tabla 3.&.$.1: Lista de las regio-es e- 7ue se e-/ue-tra- las o0i/i-as. Los resultados tienen cinco #ilas $uno por o#icina', pero se encuentran #ilas duplicadas una de la otra" Estos resultados no son pro!a!lemente los que uno pretende
Ciencias y -@cnicas Estad?sticas &&

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

con la consulta, si existen dos regiones di#erentes, ca!r?a esperar que aparecieran solo las dos regiones" Se pueden eliminar #ilas duplicadas de los resultados de la consulta insertando la pala!ra clave DISTINCT en la sentencia SELEC- justa antes de la lista de seleccin" .eamos la consulta anterior modi#icada:
SELECT D:ST:6CT re0ion !R"# oficinas
REGION Este Centro

Tabla 3.&.$.2: Lista de las regio-es e- 7ue se e-/ue-tra- las o0i/i-as. Conceptualmente, SQL e#ectFa esta consulta generando primero un conjunto completo de resultados $cinco #ilas' y eliminando luego las #ilas que son duplicados exactos de alguna otra para #ormar los resultados #inales" Si se omite la pala!ra DISTINCT, SQL no elimina #ila duplicadas" -am!i@n se puede especi#icar la pala!ra clave ALL para indicar que las #ilas duplicadas sean mostradas, pero es innecesario ya que @ste es el comportamiento por de#ecto" 3.5.5 Selecci;n de fila. Las consultas SQL que recuperan todas las #ilas de una ta!la Fnicamente son Ftiles para generar in#ormes so!re la !ase de datos" Eeneralmente se desea seleccionar solamente parte de las #ilas de una ta!la, y slo se incluir3n esas #ilas en los resultados" La cl3usula <, ! se emplea para especi#icar las #ilas que se desean recuperar" .eamos unos ejemplos simples:
SELECT ciudad,$entas,ob2eti$o !R"# oficinas %&ERE $entas/ob2eti$o
CIUDAD -oledo Alicante >adrid ENTA! %:":%5 %="%58 7&"%6= OBJETI O 58"966 %6"666 ;6"666

Tabla 3.&.&.1: O0i/i-as do-de las 3e-tas e=/ede- al objeti3o.


SELECT nombre,$entas,cuota !R"# rep$entas %&ERE num empl'1(5
NO"BRE <elen Aguirre ENTA! %="%58 CUOTA %6"666

Tabla 3.&.&.2: Nombre* 3e-tas 1 /uota del empleado -4mero 15&.


SELECT nombre,$entas !R"# rep$entas %&ERE director'1(9
NO"BRE <elen Aguirre )aniel Eutierre4 (edro Cru4 ENTA! %="%58 5;";57 5"866

Tabla 3.&.&.3: mpleados dirigidos por el empleado -4mero 15$.

Ciencias y -@cnicas Estad?sticas

&5

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

La cl3usula RAE+E consta de la pala!ra clave <, ! seguida de una condicin de !Fsqueda que especi#ica las #ilas a recuperar" Conceptualmente, SQL recorre cada #ila de la ta!la seleccionada, una a una, y aplica la condicin de !Fsqueda" Esta condicin de !Fsqueda puede producir uno de los tres resultados: Si la condicin de !Fsqueda es cierta, la #ila se incluye en los resultados de la consulta" Si la condicin de !Fsqueda es #alsa, la #ila se excluye de los resultados de la consulta" Si la condicin de !Fsqueda tiene un valor /,LL $desconocido', la #ila se excluye de los resultados de la consulta"

3.5.< Condiciones de b=s>ueda. SQL o#rece un rico conjunto de condiciones de !Fsqueda que permiten especi#icar muc1os tipos di#erentes de consultas e#ica4 y naturalmente" Las condiciones de !Fsqueda son cinco segFn el est3ndar A/SIGIS*:

-est de comparacin" Compara el valor de una expresin con el valor de otra" -est de rango" Examina si el valor de una expresin cae dentro de un rango especi#icado de valores" -est de pertenencia a conjunto" Comprue!a si el valor de una expresin se corresponde con uno de un conjunto de valores" -est de correspondencia con patrn" Comprue!a si el valor de una columna que contiene datos de cadena de caracteres se corresponde a un patrn especi#icado" -est de valor nulo" Comprue!a si una columna tiene un valor /,LL $desconocido'"

-est de comparacin" La condicin de !Fsqueda m3s comFn utili4ada en una consulta SQL es la de comparacin" En un test de comparacin, SQL calcula y compara los valores de dos expresiones SQL por cada #ila de datos" Las expresiones pueden ser tan simples como un nom!re de columna o una constante, o pueden ser expresiones aritm@ticas m3s complejas" SQL o#rece seis modos de comparar dos expresiones $T, UV, U, UT, V, VT'" .eamos algunos ejemplos:
SELECT nombre !R"# rep$entas %&ERE contrato?8(1@(1@1AAB8
NO"BRE Carlos >artine4 Soledad >artine4 )aniel Eutierre4 (edro Cru4 Ciencias y -@cnicas Estad?sticas &%

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

Tabla 3.&.;.1: Lista los 3e-dedores /o-tratados a-tes de 1>>?.


SELECT ciudad,$entas,ob2eti$o !R"# oficinas %&ERE $entas?-(.)54ob2eti$o.
CIUDAD <arcelona ENTA! 5="%57 OBJETI O 86"666

Tabla 3.&.;.2: Lista las o0i/i-as /u1as 3e-tas est.- por debajo del 6&9 del objeti3o.
SELECT ciudad,re0ion !R"# oficinas %&ERE re0ion?/8Centro8
CIUDAD REGION .alencia Este <arcelona Este Alicante Este

Tabla 3.&.;.3: Lista de las o0i/i-as 7ue -o se e-/ue-tra- e- la regi8- Ce-tro. El test de comparacin m3s 1a!itual es el que comprue!a si el valor de una columna es igual a cierta constante" Cuando la columna es clave primaria, el test a?sla una sola #ila de la ta!la, produciendo una sola #ila de resultados, como en el ejemplo siguiente:
SELECT empresa,limite credito !R"# clientes %&ERE num clie'21()
E"$RE!A )istri!uciones Sur S"A" #I"ITE_CREDITO %9"666

Tabla 3.&.;.$: Nombre 1 limite de /r@dito del /lie-te -4mero 2156. *!serve que la sentencia SQL que recupera un cliente espec?#ico por su nFmero y la que recupera todos los clientes que tienen una cierta caracter?stica es exactamente de la misma #orma" Estos dos tipos de consulta ser?an operaciones muy di#erentes en una !ase de datos no relacional" Considere adem3s, que SQL maneja lgica trivaluada, por lo cual es necesario considerar el manejo del valor /,LL como en el ejemplo siguiente:
SELECT nombre !R"# rep$entas %&ERE $entas/cuota
NO"BRE Dose >aldonado <elen Aguirre Loren4o 0ernande4 /atalia >artin

Tabla 3.&.;.&: Lista de 3e-dedores 7ue supera- sus /uotas.


SELECT nombre !R"# rep$entas %&ERE $entas?'cuota
NO"BRE Carlos >artine4 >aria Earcia Soledad >artine4 )aniel Eutierre4 (edro Cru4

Tabla 3.&.;.;: Lista de 3e-dedores 7ue -o supera- sus /uotas.

Ciencias y -@cnicas Estad?sticas

&:

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

Como puede o!servarse, solo se recuperan nueve #ilas, pues una de las #ilas originales no posee una cuota esta!lecida $valor /,LL'" -est de rango" SQL proporciona una #orma di#erente de condicin de !Fsqueda con el test de rango $A T< N'" El test de rango comprue!a si el valor del dato se encuentre entre dos valores especi#icados" ,n ejemplo de test de rango es el siguiente:
SELECT num pedido,fecCa pedido,producto,importe !R"# pedidos %&ERE fecCa pedido DET%EE6 E(1@1(@1AAA8 *6D E31@12@1AAA8
NU"_$EDIDO &&5=;& &&5=;7 &&5=;% &&5=7% &&5=8= &&5==5 &&5=89 &&5=78 FEC&A_$EDIDO &8G&5G&=== &5G&6G&=== &8G&5G&=== 58G&5G&=== &5G&6G&=== 6:G&&G&=== &5G&6G&=== %&G&5G&=== $RODUCTO 5A::L :&66: :&66: :&66: :&66C :&665 5A::E :&66H I"$ORTE %&966 %"=87 %"58; 865 &9"666 8;6 5"&66 58966

Tabla 3.&.;.6: !ela/i8- de pedidos e-tre dos 0e/2as. El test <E-REE/ incluye los puntos extremos del rango, por lo que los pedidos remitidos el & de *ctu!re o el %& de )iciem!re se incluyen en los resultados de la consulta" .eamos otro ejemplo de test de rango:
SELECT num pedido,importe !R"# pedidos %&ERE importe DET%EE6 2((((.(( *6D 2AAAA.AA
NU"_$EDIDO &&66%; &&5=78 &&%6:5 I"$ORTE 55"966 58"966 55"966

Tabla 3.&.;.?: "edidos 7ue /ae- e- u- determi-ado ra-go de importe. La versin negada del test de rango $/*- <E-REE/' comprue!a los valores que caen #uera del rango, como en el siguiente ejemplo:
SELECT nombre,$entas,cuota !R"# rep$entas %&ERE $entas 6"T DET%EE6 -(.)54cuota. *6D -1.5(4cuota.
NO"BRE Carlos >artine4 >aria Earcia Loren4o 0ernade4 (edro Cru4 ENTA! 6 8"&69 97"9%% 5"866 CUOTA &8"966 58"966 %6"666 59"666

Tabla 3.&.;.>: Lista de 3e-dedores /u1as 3e-tas -o est.- e-tre el 6& 1 el 1&59 de su /uota. Es necesario se alar que la sentencia <E-REE/ no a ade potencia expresiva a SQL, pues A A T< N A AND C puede ser expresado como )ABCA+ AND )ADCC+"

Ciencias y -@cnicas Estad?sticas

&9

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

-est de pertenencia a conjunto" *tra condicin 1a!itual es el test de pertenencia a conjunto $IN'" Examina si un valor de dato coincide con uno de una lista de valores o!jetivo" .eamos varios ejemplos:
SELECT nombre,cuota,$entas !R"# rep$entas %&ERE oficina rep :6 -11,13,22.
NO"BRE CUOTA Dose >aldonado 59"666 <elen Aguirre %6"666 >aria Earcia 58"966 /atalia >artin 58"966 ENTA! %5"=97 %="%58 8"&69 %:":%5

Tabla 3.&.;.15: Lista de los 3e-dedores de las o0i/i-as 11* 13 1 22.


SELECT num pedido,rep,importe !R"# pedidos %&ERE rep :6 -1(1,1(3,1(),1(A.
NU"_$EDIDO RE$ &&5=;7 &6& &&%697 &6= &&5==8 &68 &&%6;5 &68 &&%6;= &68 &&5=89 &6% &&%699 &6& &&%66% &6= &&%698 &6% &&%6:5 &6& I"$ORTE %"=87 &":76 ;95 5":%6 %&"%96 5"&66 &96 9";59 ;66 55"966

Tabla 3.&.;.11: "edidos obte-idos por /uatro 3e-dedores espe/E0i/os. Al igual que el test <E-REE/, el test I/ no a ade potencia expresiva a SQL, ya que la condicin de !Fsqueda F IN )A*A*C+ es equivalente a )FCA+ O! )FCA+ O! )FCC+" -est de correspondencia con patrn" Se puede utili4ar un test de comparacin simple para recuperar las #ilas en donde el contenido de una columna de texto se corresponde con un cierto texto particular" (or ejemplo, esta consulta recupera la #ila de la ta!la clientes por nom!re:
SELECT empresa,limite credito !R"# clientes %&ERE empresa'8*!S S.*.8
E"$RE!A A0S S"A" #I"ITE_CREDITO 56"666

Tabla 3.&.;.12: Limite de /r@dito de la empresa AFS S.A. Sin em!argo, uno puede olvidar #3cilmente el nom!re exacto de la empresa" El test de correspondencia con patrn $LIG ' comprue!a si el valor de dato de una columna se ajusta a un patrn especi#icado" El patrn es una cadena que puede incluir uno o m3s caracteres comodines" Estos caracteres comodines son el signo de porcentaje $W' y el su!rayado $2'"

Ciencias y -@cnicas Estad?sticas

&;

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

El car3cter comod?n signo de porcentaje $W' se corresponde con cualquier secuencia de cero o m3s caracteres" El car3cter comod?n su!rayado $2' se corresponde con cualquier car3cter simple" As? por ejemplo, uno puede consultar todos los vendedores de apellido >artine4 de la siguiente #orma:
SELECT num empl,nombre !R"# rep$entas %&ERE nombre L:FE EG #artineH8
NU"_E"$# NO"BRE &6: Carlos >artine4 &65 Soledad >artine4

Tabla 3.&.;.13: mpleados apellidados 'arti-eH. ,no de los pro!lemas de la correspondencia con patrones de cadenas es cmo 1acer corresponder los propios caracteres comodines como caracteres literales" (ara compro!ar la presencia de un car3cter comod?n en una cadena se precede de un car3cter de escape que 1ace que el car3cter que le sigue inmediatamente se trate como un literal en lugar de cmo un car3cter comod?n" El car3cter escape en SQL es un signo de dlar $X'" -est de valor nulo" En algunas ocasiones es Ftil compro!ar expl?citamente los valores /,LL en una condicin de !Fsqueda y manejarlos directamente" SQL proporciona un test especial de valor nulo $IS N%LL' para tratar este caso" (or ejemplo, la consulta siguiente utili4a el test de valor nulo para 1allar los vendedores a los que no se les 1a asignado una o#icina:
SELECT nombre !R"# rep$entas %&ERE oficina rep :S 6ILL
NO"BRE Antonio .alle

Tabla 3.&.;.1$: #e-dedores 7ue a4- -o tie-e- asig-ada u-a o0i/i-a. La #orma negada del test de valor nulo $IS NOT N%LL' encuentra las #ilas que no contienen un valor /,LL:
SELECT nombre !R"# rep$entas %&ERE oficina rep :S 6"T 6ILL
NO"BRE Dose >aldonado Carlos >artine4 <elen Aguirre >aria Earcia Loren4o 0ernande4 Soledad >artine4 )aniel Eutierre4 (edro Cru4 /atalia >artin

Tabla 3.&.;.1&: #e-dedores 7ue tie-e- asig-ada u-a o0i/i-a. 3.5.) Condiciones de b=s>ueda compuestas.
Ciencias y -@cnicas Estad?sticas &8

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

Las condiciones de !Fsqueda simples, descritas en las secciones precedentes devuelven un valor -+,E, 0ALSE o /,LL cuando se aplican a una #ila de datos" ,tili4ando las reglas de la lgica trivaluada, se pueden com!inar estas condiciones de !Fsqueda para #ormar otras m3s complejas" Las condiciones de !Fsqueda compuesta se crean con las pala!ras clave AND, O! y NOT" La pala!ra clave O! se utili4a para com!inar dos condiciones de !Fsqueda cuando una o otra $o am!as' de!an ser ciertas:
SELECT nombre,cuota,$entas !R"# rep$entas %&ERE $entas?cuota "R $entas?3((((.((
NO"BRE CUOTA Carlos >artine4 &8"966 >aria Earcia 58"966 Soledad >artine4 %6"666 )aniel Eutierre4 58"966 Antonio .alle /,LL (edro Cru4 59"666 ENTA! 6 8"&69 55"88; 5;";57 5%"&5% 5"866

Tabla 3.&.6.1: #e-dedores por debajo de la /uota o /o- 3e-tas i-0eriores a 35555. La pala!ra clave AND se utili4a para com!inar dos condiciones de !Fsqueda que de!an ser ciertas simult3neamente:
SELECT nombre,cuotas,$entas !R"# rep$entas %&ERE $entas?cuota *6D $entas?2((((.((
NO"BRE CUOTA Carlos >artine4 &8"966 >aria Earcia 58"966 (edro Cru4 59"666 ENTA! 6 8"&69 5"866

Figura 3.&.6.2: #e-dedores por debajo de la /uota 1 /o- 3e-tas i-0eriores a 25555. (or Fltimo, se puede utili4ar la pala!ra clave NOT para seleccionar #ilas en donde la condicin de !Fsqueda es #alsa:
SELECT nombre,cuota,$entas !R"# rep$entas %&ERE $entas?cuota *6D 6"T $entas/5(((.((
NO"BRE CUOTA Carlos >artine4 &8"966 (edro Cru4 59"666 ENTA! 6 5"866

Tabla 3.&.6.3: #e-dedores 7ue est.- por debajo de la /uota 1 /o- 3e-tas -o superiores a &555. ,tili4ando las pala!ras clave AND, O! y NOT y los par@ntesis para agrupar los criterios de !Fsqueda, se pueden construir criterios de !Fsqueda muy complejos:
SELECT nombre,edad !R"# rep$entas %&ERE -$entas?cuota *6D edad/95. "R $entas?5(((.((
NO"BRE Carlos >artine4 Ciencias y -@cnicas Estad?sticas &7 EDAD %%

Adquisicin y tratamiento de datos Soledad >artine4 (edro Cru4 :7 5=

El lenguaje SQL I: Consulta de datos

Tabla 3.&.6.$: #e-dedores /o- 3e-tas i-0eriores a la /uota 1 edad ma1or de $& a:os o /o- 3e-tas i-0eriores a &555. 3.5.B "rdenaci;n de los resultados de una consulta. Al igual que las #ilas de una ta!la en la !ase de datos, las #ilas de los resultados de una consulta no est3n dispuestas en ningFn orden particular" Se puede pedir a SQL que ordene los resultados de una consulta incluyendo la cl3usula O!D ! AI en la sentencia SELEC-" La cl3usula O!D !JAI consta de las pala!ras clave O!D ! AI seguidas de una lista de especi#icaciones de ordenacin separadas por comas" (or ejemplo, los resultados de la consulta siguiente est3n ordenados por las columnas regin y ciudad"
SELECT ciudad,re0ion,$entas !R"# oficinas "RDER D7 re0ion,ciudad
CIUDAD >adrid -oledo Alicante <arcelona .alencia REGION Centro Centro Este Este Este ENTA! 7&"%6= %:":%5 %="%58 5="%57 :6"6;%

Tabla 3.&.?.1: #e-tas de /ada o0i/i-a* orde-adas e- orde- al0ab@ti/o por regi8-* 1 de-tro de /ada regi8- por /iudad. La primera especi#icacin de ordenacin $regin' es la clave de ordenacin mayorY las que le sigan $ciudad, en este caso' son progresivamente claves de ordenacin menores, utili4adas para PdesempatarQ cuando dos #ilas de resultados tienen los mismos valores para las claves mayores" (or omisin, SQL ordena los datos en secuencia ascendente" (ara solicitar la ordenacin en secuencia descendente, se incluye la pala!ra clave D SC en la especi#icacin de ordenacin, como en este ejemplo:
SELECT ciudad,re0ion,$entas !R"# oficinas "RDER D7 $entas DESC
CIUDAD >adrid .alencia Alicante -oledo <arcelona REGION Centro Este Este Centro Este ENTA! 7&"%6= :6"6;% %="%58 %:":%5 5="%57

Figura 3.&.?.2: Lista de las o0i/i-as /lasi0i/adas e- orde- des/e-de-te de 3e-tas. Si la columna de resultados de la consulta utili4ada para ordenacin es una columna calculada, no tiene nom!re de columna que se pueda emplear en una especi#icacin de ordenacin" En este caso, de!e especi#icarse un nFmero de columna en lugar de un nom!re, como en el siguiente ejemplo:
SELECT ciudad,re0ion,-$entas1ob2eti$o. !R"# oficinas "RDER D7 3 DESC
CIUDAD REGION Ciencias y -@cnicas Estad?sticas ENTA!+OBJETI O &=

Adquisicin y tratamiento de datos >adrid Alicante -oledo .alencia <arcelona Centro Este Centro Este Este

El lenguaje SQL I: Consulta de datos 5&"%6= ="%58 ;"=%5 K&5":%8 K:6";85

Figura 3.&.?.3: Lista de las o0i/i-as /lasi0i/adas e- orde- des/e-de-te de re-dimie-to de 3e-tas. 3.5.A Combinaci;n de resultados de consulta. *casionalmente, es conveniente com!inar los resultados de dos o m3s consultas en una Fnica ta!la de resultados totales" SQL soporta esta capacidad gracias a la caracter?stica %NION de la sentencia SELEC-" (or ejemplo, supongamos que queremos resolver la peticin: PLista todos los productos en donde el precio del producto exceda de 5666 o en donde m3s de %6666 del producto 1ayan sido ordenados en un solo pedidoQ" La primera parte de la peticin puede satis#acerse con la consulta:
SELECT id fab,id producto !R"# productos %&ERE precio/2(((
ID_FAB ACI +EI ACI +EI ID_$RODUCTO :&66H 5A::L :&66C 5A::+

Tabla 3.&.>.1: "rodu/tos /u1o pre/io e=/ede de 2555. An3logamente, la segunda parte de la peticin puede satis#acerse con la consulta:
SELECT D:ST:6CT fab,producto !R"# pedidos %&ERE importe/3((((
FAB $RODUCTO I>> 889C +EI 5A::L +EI 5A::+

Tabla 3.&.>.2: "rodu/tos de los /uales se 2a 2e/2o u- pedido ma1or de 35555. La unin de am!as consultas se reali4a de la siguiente #orma:
SELECT id fab,id producto !R"# productos %&ERE precio/2((( I6:"6 SELECT D:ST:6CT fab,producto !R"# pedidos %&ERE importe/3((((
ID_FAB ACI ACI I>> +EI +EI ID_$RODUCTO :&66H :&66C 889C 5A::L 5A::+

Tabla 3.&.>.3: !esultado de la u-i8- de las dos /o-sultas a-teriores. (ara poder reali4ar una unin existen varias restricciones:

Ciencias y -@cnicas Estad?sticas

56

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

Am!as ta!las de!en contener el mismo nFmero de columnas" El tipo de datos de cada columna en la primera ta!la de!e ser el mismo que el tipo de datos en la columna correspondiente en la segunda ta!la" /inguna de las dos ta!las puede estar ordenadas con la cl3usula *+)E+ <H"

(uede o!servarse que la %NION com!ina las #ilas de los dos conjuntos de resultados eliminando por de#ecto las #ilas duplicadas" Si se desean mantener las #ilas duplicadas en una operacin %NION, se puede especi#icar la pala!ra clave ALL a continuacin de la pala!ra %NION" (or ejemplo:
SELECT id fab,id producto !R"# productos %&ERE precio/2((( I6:"6 *LL SELECT D:ST:6CT fab,producto !R"# pedidos %&ERE importe/3((((
ID_FAB ACI +EI ACI +EI I>> +EI +EI ID_$RODUCTO :&66H 5A::L :&66C 5A::+ 889C 5A::L 5A::+

Tabla 3.&.>.$: !esultado de la u-i8- de las /o-sultas a-teriores /o-ser3a-do las 0ilas repetidas. Como 1emos dic1o, las sentencias SELEC- com!inadas no pueden estar ordenadas" Sin em!argo, el resultado de la %NION puede ordenarse mediante una cl3usula O!D ! AI que ordene el resultado" (or ejemplo, la consulta anterior puede ordenarse de la siguiente #orma:
SELECT id fab,id producto !R"# productos %&ERE precio/2((( I6:"6 SELECT D:ST:6CT fab,producto !R"# pedidos %&ERE importe/3(((( "RDER D7 2
ID_FAB +EI +EI ACI ACI I>> ID_$RODUCTO 5A::L 5A::+ :&66H :&66C 889C

Tabla 3.&.>.&: !esultado de la u-i8- de las /o-sultas orde-ado por la ide-ti0i/a/i8- del produ/to. 3.6 Consultas multitabla (composiciones). >uc1as consultas Ftiles solicitan datos procedentes de dos o m3s ta!las en la !ase de datos" (or ejemplo, las siguientes consultas extraen los datos de varias ta!las: Lista los vendedores y las o#icinas en donde tra!ajan $ta!las +E(.E/-AS y *0ICI/AS'"

Ciencias y -@cnicas Estad?sticas

5&

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

Lista los pedidos mostrando el importe del pedido, el nom!re del cliente que lo orden y el nom!re del producto solicitado $ta!las (E)I)*S, CLIE/-ES y +E(.E/-AS'" >uestra todas las rdenes aceptadas por vendedores de la regin Este, mostrando la descripcin del producto y el vendedor $ta!las (E)I)*S, +E(.E/-AS, *0ICI/AS y (+*),C-*S'"

SQL permite recuperar datos que responden a estas peticiones mediante consultas multita!la que componen $join' datos procedentes de dos o m3s ta!las" (or ejemplo, la consulta Plista todos los pedidos, mostrando su nFmero, importe, nom!re del cliente y el l?mite de cr@dito del clienteQ se reali4a de la siguiente #orma:
SELECT num pedido,importe,empresa,limite credito !R"# pedidos,clientes %&ERE clie'num clie
NU"_$EDIDO I"$ORTE E"$RE!A &&5=;& %&"966 Anos" +amon S"L" &&%6&5 %"8:9 E.<E S"A" &&5=7= &":97 Exclusivas Soriano S"A" &&%69& &":56 Exclusivas /orte S"A" &&5=;7 %"=87 Exclusivas del Este S"L" &&66%; 55"966 )istri!uciones Sur S"A" &&%6:9 :9"666 Lope4 Asociados S"L" &&5=;% %"58; (ino S"L" &&%6&% ;95 Exclusivas /orte S"A" &&%697 &":76 Capater Importaciones S"A" &&5==8 ;95 )omingo S"L" &&5=7% 865 (ino S"L" &&%65: 8"&66 Componentes 0ernande4 S"A" &&%6;5 5":%6 )omingo S"L" &&5=8= &9"666 Componentes 0ernande4 S"A" &&%658 :"&6: (ino S"L" &&%668 5"759 Lope4 Asociados S"L" &&%6;= %&"%96 +oda B Castedo S"L" &&%6%: ;%5 )istri!uciones Sur S"A" &&5==5 8;6 Exclusivas /orte S"A" &&5=89 5"&66 E.<E S"A" &&%699 &96 Capater Importaciones S"A" &&%6:7 %"896 )istri!uciones >ontiel S"L" &&5==% &"7=; Construcciones Leon S"A" &&%6;9 5"&%6 Construcciones Leon S"A" &&%66% 9";59 Capater Importaciones S"A" &&%6:= 88; Exclusivas /orte S"A" &&5=78 58"966 (ino S"L" &&%698 ;66 E.<E S"A" &&%6:5 55"966 Importaciones >artin S"L" #I"ITE_CREDITO %9"666 96"666 ;9"666 ;6"666 ;9"666 %9"666 96"666 96"666 ;6"666 99"666 :6"666 96"666 56"666 :6"666 56"666 96"666 96"666 59"666 %9"666 ;6"666 96"666 99"666 96"666 ;9"666 ;9"666 99"666 ;6"666 96"666 96"666 56"666

Tabla 3.;.1: jemplo de /o-sulta de dos tablas. Los cuatro datos de la consulta anterior est3n almacenados en dos ta!las: La ta!la (E)I)*S contiene el nFmero de pedido y el importe de cada pedido, pero no tiene los nom!res de cliente ni los l?mites de cr@dito"

Ciencias y -@cnicas Estad?sticas

55

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

La ta!la CLIE/-ES contiene los nom!res de cliente y sus !alances pero no la in#ormacin re#erente a los pedidos"

Sin em!argo, existe un enlace entre estas dos ta!las" En cada #ila de la ta!la (E)I)*S, la columna CLIE contiene el nFmero del cliente que orden el pedido, el cual se corresponde con el valor en la columna /,>2CLIE de una de las #ilas de la ta!la CLIE/-ES" El proceso de #ormar parejas de #ilas 1aciendo coincidir los contenidos de las columnas relacionadas se denomina componer $joining' las ta!las" La ta!la resultante se denomina composicin entre las ta!las" Las composiciones son el #undamento del procesamiento de consultas multita!la en SQL" -odos los datos de la !ase relacional est3n almacenados en sus columnas con valores expl?citos, de modo que todas las relaciones posi!les entre ta!las puedan #ormarse comparando los contenidos de las columnas relacionadas" 3.<.1 Consultas padre@Ci2o. Las consultas multita!la m3s comunes implican a dos ta!las que tienen la relacin natural padreG1ijo" La consulta re#erente a pedidos y clientes anterior es un ejemplo de tal tipo de consulta" Cada pedido $1ijo' tiene un cliente asociado $padre', y cada cliente $padre' puede tener muc1os pedidos asociados $1ijos'" Los pares de #ilas que generan los resultados de la consulta son com!inaciones de #ila padreG1ijo" Las claves #or3neas y las claves primarias crean relaciones padreG1ijo en una !ase de datos SQL" La ta!la que contiene la clave #or3nea es el 1ijo en la relacinY la ta!la con la clave primaria es el padre" (ara ejercitar la relacin padreG1ijo en una consulta de!e especi#icarse una condicin de !Fsqueda que compare la clave #or3nea y la clave primaria" *tro ejemplo de una consulta padreG1ijo es la siguiente:
SELECT nombre,ciudad,re0ion !R"# rep$entas,oficinas %&ERE oficina rep'oficina
NO"BRE Dose >aldonado Carlos >artine4 <elen Aguirre >aria Earcia Loren4o 0ernande4 Soledad >artine4 )aniel Eutierre4 (edro Cru4 /atalia >artin CIUDAD .alencia <arcelona Alicante .alencia >adrid >adrid <arcelona <arcelona -oledo REGION Este Este Este Este Centro Centro Este Este Centro

Tabla 3.;.1.1: Lista de los 3e-dedores 1 la /iudad 1 regi8- do-de trabaja-. Como puede o!servarse, SQL no requiere que las columnas de emparejamiento sean incluidas en los resultados de la consulta multita!la" Con #recuencia son omitidas pues las claves primarias y las claves #or3neas suelen ser nFmeros de identi#icacin di#?ciles de recordar y poco descriptivos" 3.<.2 Composiciones con criterios de selecci;n de fila.

Ciencias y -@cnicas Estad?sticas

5%

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

La condicin de !Fsqueda que especi#ica las columnas de emparejamiento en una consulta multita!la puede com!inarse con otras condiciones de !Fsqueda para restringir aFn m3s los contenidos de los resultados" (or ejemplo, supongamos la consulta anterior que se desea restringirla mostrando Fnicamente los vendedores de las o#icinas con o!jetivos de ventas iguales o mayores de ;6666"
SELECT nombre,ciudad,re0ion !R"# rep$entas,oficinas %&ERE oficina rep'oficina *6D ob2eti$o/'<((((
NO"BRE Carlos >artine4 Loren4o 0ernande4 Soledad >artine4 )aniel Eutierre4 (edro Cru4 CIUDAD <arcelona >adrid >adrid <arcelona <arcelona REGION Este Centro Centro Este Este

Tabla 3.;.2.1: Lista de los 3e-dedores de las o0i/i-as /o- objeti3o igual o superior a ;5555. Con la condicin de !Fsqueda adicional, las #ilas que aparecen en los resultados est3n m3s restringidas" El primer test $o#icina2repTo#icina' selecciona solamente pares de #ilas +E(.E/-AS y *0ICI/AS que tienen la relacin padreG1ijo" El segundo test selecciona adicionalmente slo aquellos pares de #ilas donde la o#icina est3 por encima del o!jetivo" 3.<.3 #=ltiples columnas de empare2amiento. La ta!la (E)I)*S y la ta!la (+*),C-*S de la !ase de datos ejemplo est3n relacionadas por un par de claves #or3neaGprimaria" Las columnas 0A< y (+*),C-* de la ta!la (E)I)*S #orman juntas una clave #or3nea para la ta!la (+*),C-*S, que se emparejan con las columnas I)20A< e I)2(+*),C-*, respectivamente" (ara componer las ta!las !as3ndose en la relacin padreG1ijo, de!en especi#icarse am!os pares de columnas de emparejamiento" (or ejemplo:
SELECT num pedido,importe,descripcion !R"# pedidos,productos %&ERE fab'id fab *6D producto'id producto
NU"_$EDIDO I"$ORTE DE!CRI$CION &&5=;& %&"966 <isagra I4qda" &&%6&5 %"8:9 Articulo -ipo % &&5=7= &":97 <ancada >otor &&%69& &":56 +eductor &&5=;7 %"=87 Articulo -ipo : &&66%; 55"966 >ontador &&%6:9 :9"666 <isagra )c1a" &&5=;% %"58; Articulo -ipo : &&%6&% ;95 >anivela &&%697 &":76 Cu!ierta &&5==8 ;95 >anivela &&5=7% 865 Articulo -ipo : &&%65: 8"&66 +eductor &&%6;5 5":%6 <ancada >otor &&5=8= &9"666 >ontador &&%658 :"&6: Articulo -ipo 5 &&%668 5"759 +iostra &G5K-m Ciencias y -@cnicas Estad?sticas 5:

Adquisicin y tratamiento de datos &&%6;= &&%6%: &&5==5 &&5=89 &&%699 &&%6:7 &&5==% &&%6;9 &&%66% &&%6:= &&5=78 &&%698 &&%6:5 %&"%96 ;%5 8;6 5"&66 &96 %"896 &"7=; 5"&%6 9";59 88; 58"966 ;66 55"966

El lenguaje SQL I: Consulta de datos +iostra &K-m . Stago -rinquete Articulo -ipo 5 (asador <isagra Ajustador +iostra 5K-m . Stago -rinquete +eductor +isotra 5K-m +eductor Extractor Ajustador <isagra )c1a"

Tabla 3.;.3.1: Lista todos los pedidos* mostra-do los importes 1 las des/rip/io-es del produ/to. Las composiciones multicolumna son menos 1a!ituales y se encuentran generalmente en consultas que a#ectan a claves #or3neas compuestas" 3.<.9 Consultas de tres o mJs tablas. SQL puede com!inar datos de tres o m3s ta!las utili4ando las mismas t@cnicas !3sicas utili4adas para las consultas de dos ta!las" ,n sencillo ejemplo es el siguiente:
SELECT num pedido,importe,empresa,nombre !R"# pedidos,clientes,rep$entas %&ERE clie'num clie *6D rep'num empl *6D importe/25(((
NU"_$EDIDO I"$ORTE E"$RE!A &&5=;& %&"966 Anos" +amon S"L" &&%6:9 :9"666 Lope4 Asociados S"L" &&%6;= %&"%96 +oda B Castedo S"L" &&5=78 58"966 (ino S"L" NO"BRE Dose >aldonado Loren4o 0ernande4 /atalia >artin <elen Aguirre

Tabla 3.;.$.1: Lista de los pedidos superiores a 2&555* i-/lu1e-do el -ombre del 3e-dedor 7ue tomo el pedido 1 el -ombre del /lie-te 7ue lo soli/it8. Esta consulta utili4a dos claves #or3neas de la ta!la (E)I)*S" La columna CLIE es una clave #or3nea para la ta!la CLIE/-ES, que enla4a cada pedido con el cliente que lo remiti" La columna +E( es una clave #or3nea para la ta!la +E(.E/-AS, que enla4a cada pedido con el vendedor que lo acept" *tra consulta de tres ta!las que utili4a una disposicin di#erente de las relaciones padreG1ijo es:
SELECT num pedido,importe,empresa,nombre !R"# pedidos,clientes,rep$entas %&ERE clie'num clie *6D rep clie'num empl *6D importe/25(((
NU"_$EDIDO I"$ORTE E"$RE!A &&5=;& %&"966 Anos" +amon S"L" &&%6:9 :9"666 Lope4 Asociados S"L" &&%6;= %&"%96 +oda B Castedo S"L" &&5=78 58"966 (ino S"L" NO"BRE Dose >aldonado Loren4o 0ernande4 (edro Cru4 <elen Aguirre

Tabla 3.;.$.2: Lista de los pedidos superiores a 2&555* i-/lu1e-do el -ombre del /lie-te 7ue remiti8 el pedido 1 el -ombre del 3e-dedor asig-ado a ese /lie-te.

Ciencias y -@cnicas Estad?sticas

59

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

/o es in#recuente encontrar consultas de tres o m3s ta!las en aplicaciones SQL de produccin" (or ejemplo, dentro de la sencilla !ase de datos ejemplo que contiene cinco ta!las, es posi!le 1allar una consulta de cuatro ta!las que tiene sentido:
SELECT num pedido,importe,empresa,nombre,ciudad !R"# pedidos,clientes,rep$entas,oficinas %&ERE clie'num clie *6D rep clie'num empl *6D oficina rep'oficina *6D importe/25(((
NU"_$EDIDO I"$ORTE E"$RE!A &&5=;& %&"966 Anos" +amon S"L" &&%6:9 :9"666 Lope4 Asociados S"L" &&%6;= %&"%96 +oda B Castedo S"L" &&5=78 58"966 (ino S"L" NO"BRE Dose >aldonado Loren4o 0ernande4 (edro Cru4 <elen Aguirre CIUDAD .alencia >adrid <arcelona Alicante

Tabla 3.;.$.3: Lista de los pedidos superiores a 2&555* i-/lu1e-do el -ombre del /lie-te 7ue remiti8 el pedido* el 3e-dedor aso/iado al /lie-te 1 la o0i/i-a do-de trabaja. 3.<.5 "tras e>uicomposiciones. La mayor?a de las consultas multita!la se !asan en relaciones padreG1ijo, pero SQL no exige que las columnas de emparejamiento est@n relacionadas como clave primaria y clave #or3nea" Cualquier par de columnas de dos ta!las pueden servir de columnas de emparejamiento, siempre que tengan tipos de datos compara!les" .eamos un ejemplo:
SELECT num pedido,importe,fecCa pedido,nombre !R"# pedidos,rep$entas %&ERE fecCa pedido'contrato
NU"_$EDIDO I"$ORTE FEC&A_$EDIDO &&5=;7 %"=87 &5G&6G&=== &&5=8= &9"666 &5G&6G&=== &&5=89 5"&66 &5G&6G&=== &&5=;7 %"=87 &5G&6G&=== &&5=8= &9"666 &5G&6G&=== &&5=89 5"&66 &5G&6G&=== NO"BRE >aria Earcia >aria Earcia >aria Earcia Loren4o 0ernande4 Loren4o 0ernande4 Loren4o 0ernande4

Tabla 3.;.&.1: "edidos re/ibidos e- los dEas e- 7ue u- 3e-dedor 0ue /o-tratado. Los resultados de esta consulta provienen de los pares de #ilas de las ta!las (E)I)*S y +E(.E/-AS donde el valor en la columna 0ECAA2(E)I)* coincide con el valor de la columna C*/-+A-* para el vendedor" /inguna de estas columnas es una clave #or3nea o una clave primaria, pero SQL es capa4 de componer las ta!las" 3.<.< Composiciones basadas en desi0ualdad. El t@rmino composicin $join' se aplica a cualquier consulta que com!ina datos de dos ta!las mediante comparacin de los valores en una pareja de columnas de las ta!las" Aunque las composiciones !asadas en la igualdad entre columnas correspondientes $equicomposiciones' son con muc1o las composiciones m3s 1a!ituales, SQL tam!i@n permite componer ta!las !as3ndose en otros operadores de comparacin" (or ejemplo:
SELECT nombre,cuota,ciudad,ob2eti$o !R"# rep$entas,oficinas %&ERE oficina rep'oficina and cuota/-(.54ob2eti$o.
Ciencias y -@cnicas Estad?sticas 5;

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

NO"BRE CUOTA CIUDAD <elen Aguirre %6"666 Alicante >aria Earcia 58"966 .alencia /atalia >artin 58"966 -oledo

OBJETI O %6"666 95"966 58"966

Tabla 3.;.;.1: Lista los 3e-dedores 1 o0i/i-as do-de la /uota del 3e-dedor es superior al &59 del objeti3o de la o0i/i-a. 3.<.) 6ombres de columna cualificados. La !ase de datos ejemplo incluye varias instancias en donde dos ta!las contienen columnas con el mismo nom!re" La ta!la *0ICI/AS y la ta!la +E(.E/-AS, por ejemplo, contienen am!as una columna de nom!re .E/-AS" /ormalmente, no 1ay con#usin entre am!as columnas, ya que la cl3usula 0+*> determina cu3l de ellas es la adecuada en una consulta determinada, como en estos dos ejemplos:
SELECT ciudad,$entas !R"# oficinas %&ERE $entas/ob2eti$o
CIUDAD -oledo Alicante >adrid ENTA! %:":%5 %="%58 7&"%6=

Tabla 3.;.6.1: Lista de las /iudades do-de las 3e-tas supera- el objeti3o.
SELECT nombre,$entas !R"# rep$entas %&ERE $entas/3((((
NO"BRE Dose >aldonado <elen Aguirre Loren4o 0ernande4 /atalia >artin ENTA! %5"=97 %="%58 97"9%% %:":%5

Tabla 3.;.6.2: Lista de los 3e-dedores /o- 3e-tas superiores a 35555. Sin em!argo, en la siguiente consulta los nom!res duplicados provocan un pro!lema:
SELECT nombre,$entas,ciudad !R"# rep$entas,oficinas %&ERE oficina rep'oficina

rror: Colum-a K3e-tasL se e-/ue-tra e- mas de u-a tabla. (ara eliminar la am!igZedad, de!e utili4arse un nom!re de columna cuali#icado para identi#icar la columna" El nom!re de columna cuali#icado se construye con el nom!re de la ta!la y el nom!re de la columna" (or ejemplo, los nom!res cuali#icados de las dos columnas .E/-AS son *0ICI/AS".E/-AS y +E(.E/-AS".E/-AS, esto es, el nom!re de la ta!la seguido por el nom!re de la columna" ,n nom!re de columna cuali#icado puede ser utili4ado en una sentencia SELEC- en cualquier lugar donde se permite usar un nom!re de columna" La ta!la especi#icada en el nom!re de columna cuali#icado de!e, o!viamente, corresponder a una de las ta!las especi#icadas en la lista 0+*>" .eamos la versin corregida de la consulta anterior:

Ciencias y -@cnicas Estad?sticas

58

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

SELECT nombre,rep$entas.$entas,ciudad !R"# rep$entas,oficinas %&ERE oficina rep'oficina


NO"BRE Dose >aldonado Carlos >artine4 <elen Aguirre >aria Earcia Loren4o 0ernande4 Soledad >artine4 )aniel Eutierre4 (edro Cru4 /atalia >artin ENTA! %5"=97 6 %="%58 8"&69 97"9%% 55"88; 5;";57 5"866 %:":%5 CIUDAD .alencia <arcelona Alicante .alencia >adrid >adrid <arcelona <arcelona -oledo

Tabla 3.;.6.3: Lista del -ombre* las 3e-tas 1 la o0i/i-a de /ada 3e-dedor. ,tili4ar nom!res de columna cuali#icados en una consulta multita!la es siempre una !uena medida" La desventaja es que 1acen que el texto de la consulta sea mayor" 3.<.B Selecciones de todas las columnas. Como se vio con anterioridad, PSELEC- SQ puede ser utili4ado para seleccionar todas las columnas de la ta!la designada en la cl3usula 0+*>" En una consulta multita!la, el asterisco selecciona todas las columnas de todas las ta!las listadas en la cl3usula 0+*>" (or ejemplo:
SELECT 4 !R"# rep$entas,oficinas %&ERE oficina rep'oficina
NU"_E"$# NO"BRE EDAD OFICINA_RE$ TITU#O CONTRATO DIRECTOR

&6; &6: &69 &6= &67 &65 &6& &6% &68


CUOTA

Dose >aldonado Carlos >artine4 <elen Aguirre >aria Earcia Loren4o 0ernande4 Soledad >artine4 )aniel Eutierre4 (edro Cru4 /atalia >artin
ENTA! OFICINA

95 %% %8 %& ;5 :7 :9 5= :=

&& &5 &% && 5& 5& &5 &5 55


REGION DIR

.( .entas )ir" .entas )ir" .entas +ep" .entas )ir" .entas +ep" .entas +ep" .entas +ep" .entas +ep" .entas
OBJETI O

&:G6;G&==7 &=G69G&==8 &5G65G&==7 &5G&6G&=== &5G&6G&=== &6G&5G&==9 56G&6G&==; 6&G6%G&==8 &:G&&G&==7


ENTA!

/,LL &6; &6: &6; &6; &67 &6: &6: &67

CIUDAD

59"666 &8"966 %6"666 58"966 %6"666 %6"666 58"966 59"666 58"966

%5"=97 6 %="%58 8"&69 97"9%% 55"88; 5;";57 5"866 %:":%5

&& &5 &% && 5& 5& &5 &5 55

.alencia <arcelona Alicante .alencia >adrid >adrid <arcelona <arcelona -oledo

Este Este Este Este Centro Centro Este Este Centro

&6; &6: &69 &6; &67 &67 &6: &6: &67

95"966 86"666 %6"666 95"966 ;6"666 ;6"666 86"666 86"666 58"966

:6"6;% 5="%57 %="%58 :6"6;% 7&"%6= 7&"%6= 5="%57 5="%57 %:":%5

Tabla 3.;.?.1: I-0orme sobre todos los 3e-dedores 1 las o0i/i-as e- 7ue trabaja-. *!viamente, la #orma SELEC- S en una consulta resulta ser de menos pr3ctica cuando existen dos o m3s ta!las en la cl3usula 0+*>"

Ciencias y -@cnicas Estad?sticas

57

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

3.<.A *utocomposiciones. Algunas consultas multita!la a#ectan a una relacin que una ta!la tiene consigo misma" (or ejemplo, supongamos que se desea listar los nom!res de todos los vendedores y sus directores" Cada vendedor aparece como una #ila en la ta!la +E(.E/-AS, y la columna )I+EC-*+ contiene el nFmero de empleado del director del vendedor" (or ello, la columna )I+EC-*+ es una clave #or3nea para la propia ta!la +E(.E/-AS" Si se tratara de expresar esta consulta como cualquier otra consulta de dos ta!las implicando una coincidencia clave #or3neaGclave primaria, aparecer?a tal como @sta:
SELECT nombre,nombre !R"# rep$entas,rep$entas %&ERE director'num empl

rror: !e0ere-/ia dupli/ada a la tabla Krep3e-tasL. -am!i@n podr?a intentarse la pregunta eliminando la segunda re#erencia a la ta!la +E(.E/-AS:
SELECT nombre,nombre !R"# rep$entas %&ERE director'num empl
NO"BRE NO"BRE

Tabla 3.;.>.1: mpleados 7ue so- sus propios dire/tores. *!teniendo una ta!la vac?a, pues la condicin directorTnum2empl se aplica #ila a #ila, !uscando empleados que sean sus propios directores, no existiendo tales #ilas" (ara resolver el pro!lema, imaginemos que SQL tuviera dos copias id@nticas de la ta!la +E(.E/-AS, una llamada E>(S, que contuviera los empleados, y otra llamada )I+S, que contuviera los directores" Entonces la columna director de la ta!la E>(S ser?a una clave #or3nea para la ta!la )I+S y la consulta se reali4ar?a como:
SELECT emps.nombre,dirs.nombre !R"# emps, dirs %&ERE emps.director'dirs.num empl

SQL realmente no tiene dos ta!las di#erentes, pero es capa4 de asignar a una ta!la un nom!re di#erente, llamado alias de tabla" La consulta, escrita utili4ando los alias E>(S y )I+S para la ta!la +E(.E/-AS ser?a:
SELECT emps.nombre,dirs.nombre !R"# rep$entas emps,rep$entas dirs %&ERE emps.director'dirs.num empl
NO"BRE Carlos >artine4 <elen Aguirre >aria Earcia Loren4o 0ernande4 Soledad >artine4 )aniel Eutierre4 Antonio .alle (edro Cru4 /atalia >artin Ciencias y -@cnicas Estad?sticas NO"BRE Dose >aldonado Carlos >artine4 Dose >aldonado Dose >aldonado Loren4o 0ernande4 Carlos >artine4 )aniel Eutierre4 Carlos >artine4 Loren4o 0ernande4 5=

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

Tabla 3.;.>.2: Lista de los -ombres de los 3e-dedores 1 sus dire/tores. La cl3usula 0+*> asigna una alias a cada PcopiaQ de la ta!la +E(.E/-AS especi#icando el nom!re del alias inmediatamente despu@s del nom!re real de la ta!la" Cuando la cl3usula 0+*> contiene un alias, el alias de!e ser utili4ado para identi#icar la ta!la en re#erencias de columna cuali#icadas" /aturalmente, en la pregunta anterior solo es realmente necesario utili4ar un alias para una de las dos ocurrencias de la ta!la de la consulta, por lo cual pod?amos 1a!er escrito la pregunta como:
SELECT rep$entas.nombre,dirs.nombre !R"# rep$entas,rep$entas dirs %&ERE rep$entas.director'dirs.num empl

*tro ejemplo de autocomposicin puede verse a continuacin:


SELECT rep$entas.nombre,rep$entas.cuota,dirs.cuota !R"# rep$entas, rep$entas dirs %&ERE rep$entas.director'dirs.num empl *6D rep$entas.cuota/dirs.cuota
NO"BRE CUOTA CUOTA <elen Aguirre %6"666 &8"966 >aria Earcia 58"966 59"666 Loren4o 0ernande4 %6"666 59"666 )aniel Eutierre4 58"966 &8"966 (edro Cru4 59"666 &8"966

Tabla 3.;.>.3: Lista de los 3e-dedores /o- u-a /uota superior a la de su dire/tor. Los alias de ta!las se requieren en consultas que a#ectan a autocomposiciones, pero pueden utili4arse alias en cualquier consulta" As?, por ejemplo la consulta:
SELECT nombre,rep$entas.$entas,ciudad !R"# rep$entas,oficinas %&ERE oficina rep'oficina

(uede escri!irse como:


SELECT r.nombre,r.$entas,ciudad !R"# rep$entas r,oficinas %&ERE r.oficina rep'oficina

3.7 Consultas sumarias. >uc1as peticiones de in#ormacin no requieren el nivel de detalle proporcionado por las consultas SQL" (or ejemplo, podemos solicitar de la !ase de datos: [Cu3l es la cuota total para todos los vendedores\" [Cu3les son las cuotas m?nima y m3xima\" [Cu3ntos vendedores 1an superado su cuota\" [Cu3l es el tama o del pedido medio para cada o#icina\"

Ciencias y -@cnicas Estad?sticas

%6

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

SQL soporta estas peticiones mediante un conjunto de 0u-/io-es de /olum-a" ,na #uncin de columna SQL acepta una columna entera de datos como argumento y produce un Fnico dato que sumari4a la columna" SQL o#rece seis #unciones de columna di#erentes: S,>$' calcula el total de una columna" A.E$' calcula el valor promedio de una columna" >I/$' encuentra el valor m3s peque o en una columna" >AI$' encuentra el valor mayor en una columna" C*,/-$' cuenta el nFmero de valores en una columna" C*,/-$S' cuenta las #ilas de resultados de la consulta"

3.).1 CJlculo del total de una columna -SI#.. La #uncin columna S,>$' calcula la suma de una columna de valores de datos" Los datos de la columna de!en tener un tipo num@rico $entero, decimal o coma #lotante'" El resultado de la #uncin S,>$' tiene el mismo tipo de dato !3sico que los datos de la columna, pero el resultado puede tener una precisin superior" .eamos algunos ejemplos que utili4an la #uncin de columna S,>$':
SELECT SI#-cuota.,SI#-$entas. !R"# rep$entas
!U"'CUOTA* !U"' ENTA!* 5:6"666 5:8"975

Tabla 3.6.1.1: Cuotas 1 3e-tas totales.


SELECT SI#-importe. !R"# pedidos,rep$entas %&ERE nombre'8Delen *0uirre8 *6D rep'num empl
!U"'I"$ORTE* %="%58

Tabla 3.6.1.2: Total de pedidos a/eptados por el empleado Aele- Aguirre. 3.).2 CJlculo del promedio de una columna -*+,.. La #uncin de columna A.E$' calcula el promedio de una columna de valores de datos" Al igual que en la #uncin S,>$', los datos de la columna de!en tener tipo num@rico" El resultado de la #uncin A.E$' puede tener un tipo de datos di#erente al de los valores de la columna" (or ejemplo, si se aplica A.E$' a una columna de enteros, el resultado ser3 un nFmero decimal o un nFmero de coma #lotante" .eamos algunos ejemplos de uso de la #uncin de columna A.E$':
SELECT *+,-precio. !R"# productos %&ERE id fab'8*C:8

Ciencias y -@cnicas Estad?sticas

%&

Adquisicin y tratamiento de datos A G'$RECIO* 76:,5=

El lenguaje SQL I: Consulta de datos

Tabla 3.6.2.1: "re/io promedio de los produ/tos del 0abri/a-te KACIL.


SELECT *+,-importe. !R"# pedidos %&ERE clie'21(3
A G'I"$ORTE* 7"7=9,96

Tabla 3.6.2.2: "re/io medio del pedido orde-ado por el /lie-te 2153. 3.).3 Determinaci;n de los $alores e3tremos -#:6 K #*L.. Las #unciones de columna >I/$' y >AI$' determinan los valores menor y mayor de una columna, respectivamente" Los datos de la columna pueden contener in#ormacin num@rica, de cadena o de #ec1aG1ora" El resultado de la #uncin >I/$' y >AI$' tiene exactamente el mismo tipo de dato que los datos de la columna" .eamos algunos ejemplos:
SELECT #:6-cuota.,#*L-cuota. !R"# rep$entas
"IN'CUOTA* "A%'CUOTA* &8"966 %6"666

Tabla 3.6.3.1: Cuotas mE-ima 1 m.=ima asig-adas a los 3e-dedores.


SELECT #:6-fecCa pedido. !R"# pedidos
"IN'FEC&A_$EDIDO* &5G&6G&===

Tabla 3.6.3.2: Fe/2a del pedido m.s a-tiguo e- la base de datos.


SELECT #*L-1((4$entas@cuota. !R"# rep$entas
"A%'4//, ENTA!5CUOTA* &=9

Tabla 3.6.3.3: 'ejor re-dimie-to de todos los 3e-dedores.


SELECT #:6-nombre.,#*L-nombre. !R"# rep$entas
"IN'NO"BRE* Antonio .alle "A%'NO"BRE* Soledad >artine4

Tabla 3.6.3.$: "rimer 1 4ltimo 3e-dedor por orde- al0ab@ti/o. 3.).9 Cuenta de $alores de datos -C"I6T.. La #uncin de columna C*,/-$' cuenta el nFmero de valores de datos que 1ay en una columna" Los datos de la columna pueden ser de cualquier tipo" La #uncin C*,/-$' devuelve siempre un entero, independientemente del tipo de datos de la columna" Algunos ejemplos son:
SELECT C"I6T-num clie. !R"# clientes

Ciencias y -@cnicas Estad?sticas

%5

Adquisicin y tratamiento de datos COUNT'NU"_C#IE* 5&

El lenguaje SQL I: Consulta de datos

Tabla 3.6.$.1: N4mero de /lie-tes.


SELECT C"I6T-nombre. !R"# rep$entas %&ERE $entas/cuota
COUNT'NO"BRE* :

Tabla 3.6.$.2:N4mero de 3e-dedores 7ue supera- su /uota.


SELECT C"I6T-importe. !R"# pedidos %&ERE importe/25(((
COUNT'I"$ORTE* :

Tabla 3.6.$.3: N4mero de pedidos de m.s de 2&555. +esaltar que la #uncin C*,/-$' ignora los valores de los datos en la columna, simplemente cuenta cu3ntos datos 1ay" En consecuencia, no importa realmente qu@ columna se especi#ica como argumento de la #uncin C*,/-$'" (or ello, el SQL soporta una #uncin de columna especial, C*,/-$S' que cuenta #ilas en lugar de valores de datos" (or ello la Fltima consulta podr?a 1a!erse escrito como:
SELECT C"I6T-4. !R"# pedidos %&ERE importe/25(((

COUNT',* :

Tabla 3.6.$.$: N4mero de pedidos de m.s de 2&555. 3.).5 !unciones de columna en la lista de selecci;n. Las consultas simples con una #uncin de columna en una lista de seleccin son #3ciles de entender" Sin em!argo, cuando la lista de seleccin incluye varias #unciones de columna es di#?cil entender su proceso" ,no de los mejores modos de imaginar las consultas sumarias y las #unciones de columna es pensar en el procesamiento de la consulta dividido en dos pasos" (rimero, imaginamos cmo #uncionaria la consulta sin las #unciones de columna, produciendo muc1as #ilas de resultados de consulta detallados" Luego imaginamos a SQL aplicando las #unciones de columna a los resultados de consulta detallados, produciendo una sola #ila sumaria" (or ejemplo:
SELECT importe,importe,1((4importe@limite credito,1((4importe@cuota !R"# pedidos,clientes,rep$entas %&ERE clie'num clie *6D rep'num empl

H a continuacin se aplican so!re los resultados las #unciones de columna:


SELECT *+,-importe.,SI#-importe.,*+,-1((4importe@limite credito., *+,-1((4importe@cuota. !R"# pedidos,clientes,rep$entas %&ERE clie'num clie *6D rep'num empl
Ciencias y -@cnicas Estad?sticas %%

Adquisicin y tratamiento de datos


A G'I"$ORTE* !U"'I"$ORTE*

El lenguaje SQL I: Consulta de datos


A G'4//,I"$ORTE5#I"ITE_CREDITO* A G'4//,I"$ORTE5CUOTA*

7"59%,6%

5:8"9=&

5:"&6

58,7;

Tabla 3.6.&.1: Di3ersos por/e-tajes de la base de datos. ,na #uncin columna puede aparecer en la lista de seleccin en cualquier lugar en el que puede aparecer un nom!re de columna" Sin em!argo, el argumento de una #uncin de columna no puede contener a otra #uncin de columna y tam!i@n es ilegal me4clar #unciones de columna y nom!res de columnas ordinarios en una lista de seleccin, pues la consulta carece de sentido, ya que un nom!re de columna genera una ta!la de resultados con cierto nFmero de #ilas y una #uncin de columna genera una columna de una #ila con los resultados sumarios" 3.).< +alores 6ILL K funciones de columna. Las #unciones de columna S,>$', A.E$', >I/$', >AI$' y C*,/-$' aceptan cada una de ellas una columna de valores de datos como argumento y producen un Fnico valor como resultado" Sin em!argo, dic1a columna puede contener valores /,LL" En tal caso, los valores /,LL son ignorados por las #unciones de columna" .eamos un ejemplo:
SELECT C"I6T-4.,C"I6T-$entas.,C"I6T-cuota. !R"# rep$entas
COUNT',* COUNT' ENTA!* COUNT'CUOTA* &6 &6 =

Tabla 3.6.;.1: jemplo de 0u-/io-es de /olum-a /o- 3alores N%LL. La ta!la +E(.E/-AS contiene die4 #ilas, por lo que C*,/-$S' devuelve die4" Las columnas .E/-AS contienen die4 valores no /,LL, por lo que la #uncin C*,/-$ventas' devuelve tam!i@n die4" Sin em!argo, la columna C,*-A es /,LL para un vendedor, por lo cual la #uncin C*,/-$cuota' ignora ese valor de /,LL y devuelve el valor nueve" La ignorancia de los valores /,LL para las #unciones >I/$' y >AI$' carece de importancia" Sin em!argo para las #unciones S,>$' y A.E$' puede producir sutiles pro!lemas" Supongamos la siguiente consulta:
SELECT SI#-$entas.,SI#-cuota.,SI#-$entas.1SI#-cuota.,SI#-$entas1cuota. !R"# rep$entas
!U"' ENTA!* !U"'CUOTA* !U"' ENTA!*+!U"'CUOTA* !U"' ENTA!+CUOTA* 5:8"975 5:6"666 8"975 K&9"9:&

Tabla 3.6.;.2: %so de la 0u-/i8- S%' /o- 3alores N%LL. Como se o!serva, la expresin S,>$ventas'KS,>$cuota' #unciona correctamente, mientras que la expresin S,>$ventasKcuota' proporciona un resultado aparentemente incorrecto" Esto es as? pues existe un valor /,LL en la columna C,*-A" Entonces, S,>$ventas'KS,>$cuota' reali4a la resta entre la suma de los die4 valores de ventas y la suma de los nueve valores de cuota, mientras que S,>$ventasK cuota' reali4a primero la resta, con lo cual solo aparecen nueve valores validos $pues la resta de un nFmero menos /,LL produce /,LL', con lo cual solo se suman nueve restas"
Ciencias y -@cnicas Estad?sticas %:

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

3.).) Eliminaci;n de filas duplicadas -D:ST:6CT.. Igual que en la seleccin de una lista, se puede pedir a SQL que elimine valores duplicados de una columna antes de aplicarle la #uncin de columna" (ara eliminar valores duplicados, la pala!ra clave )IS-I/C- se incluye delante del argumento de la #uncin de columna, inmediatamente despu@s del par@ntesis a!ierto" .eamos algunos ejemplos:
SELECT C"I6T-D:ST:6CT titulo. !R"# rep$entas
COUNT'DI!TINCT TITU#O* %

Tabla 3.6.6.1: N4mero de tEtulos di0ere-tes de los 3e-dedores.


SELECT C"I6T-D:ST:6CT oficina rep. !R"# rep$entas %&ERE $entas/cuota
COUNT'DI!TINCT OFICINA_RE$* :

Tabla 3.6.6.2: N4mero de o0i/i-as /o- 3e-dedores 7ue supera- sus /uotas. La pala!ra clave )IS-I/C- puede usarse con las #unciones de columna C*,/-$', S,>$' y A.E$'" Cuando se usa la pala!ra clave )IS-I/C- el argumento de la #uncin columna de!e ser un nom!re de columna Fnico, no puede ser una expresinY adem3s, la pala!ra clave )IS-I/C- slo puede ser especi#icada una ve4 en una consulta" 3.).B Consultas a0rupadas -clJusula ,R"IM D7.. Las consultas sumarias descritas 1asta a1ora son como los totales al #inal de un in#orme" Condensan todos los datos detallados del in#orme en una Fnica #ila sumaria de datos" Sin em!argo, en algunos casos es Ftil o!tener su!totales" La cl3usula E+*,( <H de la sentencia SELEC- proporciona esta capacidad" .eamos un ejemplo:
SELECT rep,*+,-importe. !R"# pedidos ,R"IM D7 rep
RE$ &6& &65 &6% &69 &6; &68 &67 &6= &&6 A G'I"$ORTE* 7"78;,66 9";=:,66 &"%96,66 8"7;9,:6 &;":8=,66 &&":88,%% 7"%;&,7; %"995,96 &&"9;;,66

Tabla 3.6.?.1: Tama:o medio de los pedidos para /ada 3e-dedor. SQL lleva a ca!o la consulta de la siguiente #orma: &" SQL divide los pedidos en grupos de pedidos, un grupo por cada vendedor" )entro de cada grupo todos los pedidos tienen el mismo valor en la columna +E("
Ciencias y -@cnicas Estad?sticas %9

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

5" (or cada grupo, SQL calcula el valor medio de la columna I>(*+-E para todas las #ilas del grupo y genera una Fnica #ila sumario de resultados" .eamos algunos ejemplos adicionales de consultas agrupadas:
SELECT oficina rep,#:6-cuota.,#*L-cuota. !R"# rep$entas ,R"IM D7 oficina rep

OFICINA_RE$ "IN'CUOTA* "A%'CUOTA* /,LL /,LL /,LL && 59"666 58"966 &5 &8"966 58"966 &% %6"666 %6"666 5& %6"666 %6"666 55 58"966 58"966

Tabla 3.6.?.2: !a-go de /uotas asig-adas a /ada o0i/i-a.


SELECT oficina rep,C"I6T-4. !R"# rep$entas ,R"IM D7 oficina rep
OFICINA_RE$ /,LL && &5 &% 5& 55 COUNT',* & 5 % & 5 &

Tabla 3.6.?.3: N4mero de 3e-dedores asig-ados a /ada o0i/i-a.


SELECT C"I6T-D:ST:6CT num clie.,rep clie !R"# clientes ,R"IM D7 rep clie
COUNT'DI!TINCT NU"_C#IE* % : % & 5 5 & 5 5 & RE$_C#IE &6& &65 &6% &6: &69 &6; &68 &67 &6= &&6

Tabla 3.6.?.$: N4mero de /lie-tes di0ere-tes ate-didos por /ada 3e-dedor. SQL tam!i@n puede agrupar resultados de consulta en !ase a contenidos de dos o m3s columnas" (or ejemplo:
SELECT rep,clie,SI#-importe. !R"# pedidos ,R"IM D7 rep,clie
RE$ &6& &6& &6& &65 &65 Ciencias y -@cnicas Estad?sticas C#IE 5&65 5&67 5&&% 5&6; 5&&: !U"'I"$ORTE* %"=87 &96 55"966 :"65; &9"666 %;

Adquisicin y tratamiento de datos &65 &6% &69 &69 &6; &6; &68 &68 &67 &67 &67 &6= &&6 5&56 5&&& 5&6% 5&&& 5&6& 5&&8 5&6= 5&5: 5&&5 5&&: 5&&7 5&67 5&68

El lenguaje SQL I: Consulta de datos %"896 5"866 %9"975 %"8:9 &":97 %&"966 %&"%96 %"675 :8"759 8"&66 %";67 8"&69 5%"&%5

Tabla 3.6.?.&: "edidos totales por /lie-te 1 3e-dedor. ,na limitacin de las consultas agrupadas es que SQL ignora in#ormacin re#erente a claves primarias y #or3neas cuando anali4a la valide4 de una consulta agrupada" (or ello, la consulta:
SELECT num empl,nombre,SI#-importe. !R"# pedidos,rep$entas %&ERE rep'num empl ,R"IM D7 num empl

)a como resultado: rror: La /olum-a K-ombreL -o es u-a e=presi8- (!O%" AI La consulta tiene per#ecto sentido, ya que la agrupacin por el nFmero de empleado del vendedor es, en e#ecto, igual que la agrupacin so!re el nom!re del vendedor" /o o!stante, SQL requiere que las columnas de SELEC- est@n especi#icadas como columna de agrupacin, por ello el pro!lema se corrige sencillamente reali4ando la consulta de la #orma siguiente:
SELECT num empl,nombre,SI#-importe. !R"# pedidos,rep$entas %&ERE rep'num empl ,R"IM D7 num empl,nombre
NU"_E"$# &6& &65 &6% &69 &6; &68 &67 &6= &&6 NO"BRE )aniel Eutierre4 Soledad >artine4 (edro Cru4 <elen Aguirre Dose >aldonado /atalia >artin Loren4o 0ernande4 >aria Earcia Antonio .alle !U"'I"$ORTE* 5;";57 55"88; 5"866 %="%58 %5"=97 %:":%5 97"9%% 8"&69 5%"&%5

Tabla 3.6.?.;: "edidos totales por /ada 3e-dedor. 3.).A Condiciones de b=s>ueda en 0rupos -clJusula &*+:6,.. Al igual que la cl3usula RAE+E puede ser utili4ada para seleccionar y rec1a4ar #ilas individuales que participan en una consulta, la cl3usula AA.I/E puede ser utili4ada para seleccionar y rec1a4ar grupos de #ilas" El #ormato de la cl3usula AA.I/E es an3logo al de la cl3usula RAE+E, consistiendo en la pala!ra clave AA.I/E seguida

Ciencias y -@cnicas Estad?sticas

%8

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

de la condicin de !Fsqueda" (or tanto, la cl3usula AA.I/E especi#ica una condicin de !Fsqueda por grupos" .eamos un ejemplo:
SELECT rep,*+,-importe. !R"# pedidos ,R"IM D7 rep &*+:6, SI#-importe./3((((
RE$ &69 &6; &68 &67 A G'I"$ORTE* 8"7;9,:6 &;":8=,66 &&":88,%% 7"%;&,7;

Tabla 3.6.>.1: Tama:o de pedido promedio por 3e-dedor para 3e-dedores /o- pedidos totales de m.s de 35555. SQL e#ectFa la consulta de la siguiente #orma: &" La cl3usula E+*,( <H dispone los pedidos en grupos por vendedor" 5" La cl3usula AA.I/E elimina entonces los grupos donde el total de pedidos no excede de %6666" %" 0inalmente la cl3usula SELEC- calcula el tama o de pedido medio para cada uno de los grupos restantes y genera los resultados de la consulta" .eamos otro ejemplo:
SELECT ciudad,SI#-cuota.,SI#-rep$entas.$entas. !R"# oficinas,rep$entas %&ERE oficina'oficina rep ,R"IM D7 ciudad &*+:6, C"I6T-4./'2
CIUDAD !U"'CUOTA* !U"'RE$ ENTA!. ENTA!* <arcelona 86"666 5="%57 >adrid ;6"666 7&"%6= .alencia 95"966 :6"6;%

Tabla 3.6.>.2: Cuota total 1 3e-tas totales para todos los 3e-dedores de u-a o0i/i-a eo0i/i-as /o- dos o m.s perso-as. En este caso el proceso que reali4a SQL es el siguiente: &" Compone las ta!las *0ICI/AS y +E(.E/-AS para 1allar la ciudad donde tra!aja cada vendedor" 5" Agrupa las #ilas resultantes por o#icina" %" Elimina los grupos con menos de dos #ilas" :" Calcula la cuota total y las ventas totales para cada grupo" (or Fltimo, veamos otro ejemplo que utili4a todas las cl3usulas de la sentencia SELEC-:
SELECT descripcion,precio,e3istencias,SI#-cant. !R"# productos,pedidos %&ERE fab'id fab *6D producto'id producto ,R"IM D7
Ciencias y -@cnicas Estad?sticas %7

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

id fab,id producto,descripcion,precio,e3istencias &*+:6, SI#-cant./-(.)54e3istencias. "RDER D7 e3istencias DESC


DE!CRI$CION $RECIO E%I!TENCIA! !U"'CANT* +eductor %99 %7 %5 Ajustador 59 %8 %6 <ancada >otor 5:% &9 &; <isagra )c1a" :"966 &5 &9 +iostra &K-m &":59 9 55

Tabla 3.6.>.3: "re/io* e=iste-/ias 1 /a-tidad total de los pedidos de /ada produ/to para los /uales la /a-tidad total pedida es superior al 6&9 de las e=iste-/ias. (ara procesar esta consulta, SQL e#ectFa conceptualmente los siguientes pasos: &" Agrupa las #ilas resultantes por #a!ricante e id de producto" 5" Elimina los grupos en donde la cantidad pedida $el total de la columna CA/para todos los pedidos del grupo' es menos del 89W de las existencias" %" Calcula la cantidad total pedida para cada grupo" :" Eenera una #ila sumaria de resultados por cada grupo" 9" *rdena los resultados para que los productos con el mayor valor de existencias apare4can en primer lugar" Las columnas )ESC+I(CI*/, (+ECI* y EIIS-E/CIAS aparecen especi#icadas como columnas de agrupacin en esta consulta Fnicamente porque aparecen en la lista de seleccin" +ealmente no contri!uyen en nada al proceso de agrupacin, ya que I)20A< e I)2(+*),C-* especi#ican completamente una Fnica #ila en la ta!la (+*),C-*S, 1aciendo autom3ticamente que las otras tres columnas tengan un Fnico valor por grupo" 3. !ubconsultas. La caracter?stica de su!consulta de SQL permite utili4ar los resultados de una consulta como parte de otra" La capacidad de utili4ar una consulta dentro de otra #ue la ra4n original para la pala!ra PestructuradaQ en el nom!re Lenguaje de Consultas Estructuradas $Structured Query LanguageKSQL'" Esta caracter?stica juega un papel importante por tres ra4ones: &" ,na sentencia SQL con una su!consulta es #recuentemente el modo m3s natural de expresar una consulta, ya que se asemeja m3s estrec1amente a la descripcin de la consulta en lenguaje natural" 5" Las su!consultas 1acen m3s #3cil la escritura de sentencias SELEC-, ya que permiten Pdescomponer una consulta en partesQ $la consulta y sus su!consultas' y luego Precomponer las partesQ" %" Aay algunas consultas que no pueden ser expresadas en el lenguaje SQL sin utili4ar una su!consulta"
Ciencias y -@cnicas Estad?sticas %=

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

,na su!consulta es una consulta que aparece dentro de la cl3usula RAE+E o AA.I/E de otra sentencia SQL" Las su!consultas proporcionan un modo e#ica4 y natural de manejar las peticiones de consultas que se expresan en t@rminos de los resultados de otras consultas" (or ejemplo, analicemos la peticin: PLista las o#icinas en donde las ventas de la o#icina son in#eriores al 96W de la suma de las cuotas de los vendedores de la o#icinaQ" La peticin solicita una lista de o#icinas de la ta!la *0ICI/AS, en donde el valor de la columna .E/-AS satis#ace cierta condicin" (arece ra4ona!le que la sentencia SELEC- que expresa la consulta de!a ser semejante a esta:
SELECT ciudad !R"# oficinas %&ERE $entas?NNN

El valor P\\\Q necesita ser sustituido, y de!er?a ser igual a Pal 96W de la suma de las cuotas de los vendedores asignados a la o#icina en cuestinQ" Sa!emos que la menor de las cuotas para una o#icina espec?#ica puede o!tenerse como:
SELECT (.54SI#-cuota. !R"# rep$entas %&ERE oficina rep'LL

)onde PIIQ representa el nFmero de o#icina" (arece entonces ra4ona!le comen4ar con la primera consulta y reempla4ar los P\\\Q con la segunda consulta del modo siguiente:
SELECT ciudad !R"# oficinas %&ERE $entas?-SELECT (.54SI#-cuota. !R"# rep$entas %&ERE oficina rep'oficina.

Las su!consultas SQL aparecen siempre como parte de la cl3usula RAE+E o la cl3usula AA.I/E" En la cl3usula RAE+E, ayudan a seleccionar las #ilas individuales que aparecen en los resultados de la consulta" En la cl3usula AA.I/E, ayudan a seleccionar los grupos de #ilas que aparecen en los resultados de la consulta" El diagrama sint3ctico de una su!consulta puede verse en la #igura %"7"&" Como puede o!servarse en dic1o diagrama sint3ctico: ,na su!consulta de!e producir una Fnica columna de datos como resultados" Esto signi#ica que una su!consulta siempre tiene un Fnico elemento de seleccin de la cl3usula SELEC-" La cl3usula *+)E+ <H no puede ser especi#icada en una su!consulta" Los resultados de la su!consulta se utili4an internamente por parte de la consulta principal y nunca son visi!les al usuario, por lo que carece de sentido ordenarlos" ,na su!consulta no puede ser la ,/I*/ de varias sentencias SELECdi#erentesY slo se permite una Fnica SELEC-" Los nom!re de columna que aparecen en una su!consulta pueden re#erirse a columnas de ta!las en la consulta principal"

Ciencias y -@cnicas Estad?sticas

:6

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

$SELECALL )IS-I/C-

?tem seleccionado

0+*>

especi#icacin de ta!la

RAE+E

condicin de !Fsqueda

E+*,( <H

columna de agrupacin

AA.I/E

condicin de !Fsqueda

'

Figura 3.?.1: Diagrama si-t./ti/o de u-a sub/o-sulta. 3.B.1 Subconsultas en la clJusula %&ERE. Las su!consultas suelen ser utili4adas principalmente en la cl3usula RAE+E de una sentencia SQL" Cuando aparece una su!consulta en la cl3usula RAE+E, @sta #unciona como parte del proceso de seleccin de #ilas" (or ejemplo, la consulta anterior:
SELECT ciudad !R"# oficinas %&ERE $entas?-SELECT (.54SI#-cuota. !R"# rep$entas %&ERE oficina rep'oficina.
CIUDAD <arcelona

Tabla 3.?.1.1: Ciudades /o- 3e-tas i-0eriores al &59 de la suma de las /uotas de los 3e-dedores asig-ados a di/2a /iudad. Conceptualmente, SQL lleva a ca!o la consulta de la siguiente #orma: La consulta principal extrae sus datos de la ta!la *0ICI/AS, y la cl3usula RAE+E selecciona qu@ o#icinas ser3n incluidas en los resultados de la consulta" (ara ello SQL recorre las #ilas de la ta!la *0ICI/AS una a una, aplic3ndoles el test esta!lecido en la cl3usula RAE+E" La cl3usula RAE+E compara el valor de la columna .E/-AS de la #ila actual con el valor producido por la su!consulta" (ara examinar el valor .E/-AS, SQL lleva a ca!o la su!consulta, determinando la suma de las cuotas para los vendedores de la o#icina PactualQ" La su!consulta produce un nFmero, y la cl3usula RAE+E compara el nFmero con el valor .E/-AS, seleccionando o rec1a4ando la o#icina actual en !ase a la comparacin" )entro del cuerpo de una su!consulta, con #recuencia es necesario re#erirse al valor de una columna en la #ila PactualQ de la consulta principal, tal y como sucede en la
Ciencias y -@cnicas Estad?sticas :&

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

consulta anterior" En estos casos, la columna de la consulta principal que se utili4a en la su!consulta se conoce como re0ere-/ia e=ter-a" ,na re#erencia externa es un nom!re de columna que no se re#iere a ninguna de las ta!las designadas en la cl3usula 0+*> de la su!consulta en la cual aparece el nom!re de la columna" En ve4 de ello, el nom!re de columna se re#iere a una columna de una ta!la especi#icada en la ta!la 0+*> de la consulta principal" 3.B.2 Condiciones de b=s>ueda en subconsultas. ,na su!consulta #orma parte siempre de una condicin de !Fsqueda en la cl3usula RAE+E o AA.I/E" Adem3s de las condiciones de !Fsqueda simples que pueden ser utili4adas en estas cl3usulas, SQL o#rece la siguientes condiciones de !Fsqueda en su!consultas: -est de comparacin su!consulta" Compara el valor de una expresin con un valor Fnico por una su!consulta" Este test se asemeja al test de comparacin simple" -est de pertenencia a conjunto su!consulta" Comprue!a si el valor de una expresin coincide con uno del conjunto de valores producido por una su!consulta" Este test se asemeja al test de pertenencia a conjunto simple" -est de existencia" Examina si una su!consulta produce alguna #ila de resultados" -est de comparacin cuanti#icada" Compara el valor de una expresin con cada uno del conjunto de valores producido por una su!consulta"

-est de comparacin su!consulta" El test de comparacin su!consulta es una #orma modi#icada del test de comparacin simple" Compara el valor de una expresin con el valor producido por una su!consulta, y devuelve un resultado -+,E si la comparacin es cierta" Este test se utili4a para comparar un valor de la #ila que est3 siendo examinada con un valor Fnico producido por una su!consulta, como en el ejemplo:
SELECT nombre !R"# rep$entas %&ERE cuota/'-SELECT ob2eti$o !R"# oficinas %&ERE ciudad'8*licante8.
NO"BRE <elen Aguirre Loren4o 0ernande4 Soledad >artine4

Tabla 3.?.2.1: Lista los 3e-dedores /o- /uota igual o superior al objeti3o de Ali/a-te. El test de comparacin su!consulta o#rece los mismos seis operadores de comparacin $T, UV, U, UT, V, VT' disponi!les en el test de comparacin simple" .eamos algunos ejemplos adicionales:
SELECT empresa !R"# clientes %&ERE rep clie'-SELECT num empl !R"# rep$entas %&ERE nombre'8Delen *0uirre8.
Ciencias y -@cnicas Estad?sticas :5

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

E"$RE!A (ino S"L" D(0 S"L"

Tabla 3.?.2.2: Lista de los /lie-tes ate-didos por Aele- Aguirre.


SELECT descripcion,e3istencias !R"# productos %&ERE id fab'8*C:8 *6D e3istencias/-SELECT e3istencias !R"# productos %&ERE id fab'8*C:8 *6D id producto'891((98.
DE!CRI$CION Articulo -ipo & Articulo -ipo 5 Articulo -ipo % E%I!TENCIA! 588 &;8 568

Tabla 3.?.2.3: Lista de los produ/tos del 0abri/a-te ACI para los /uales las e=iste-/ias supera- a las e=iste-/ias del produ/to ACIM$155$. -est de pertenencia a conjunto" El test de pertenencia a conjunto su!consulta $I/' es una #orma modi#icada del test de pertenencia a conjunto simple" Compara un Fnico valor de datos, con una columna de valores producida por una su!consulta y devuelve un resultado -+,E si el valor coincide con uno de los valores de la columna" Este test se utili4a cuando se necesita comparar un valor de la #ila que est3 siendo examinada con un conjunto de valores producidos por una su!consulta, como se muestra en los ejemplos siguientes:
SELECT nombre !R"# rep$entas %&ERE oficina rep :6 -SELECT oficina !R"# oficinas %&ERE $entas/ob2eti$o.
NO"BRE <elen Aguirre Loren4o 0ernande4 Soledad >artine4 /atalia >artin

Tabla 3.?.2.$: Lista de los 3e-dedores 7ue trabaja- e- o0i/i-as 7ue supera- su objeti3o de 3e-tas.
SELECT nombre !R"# rep$entas %&ERE num empl 6"T :6 -SELECT rep clie !R"# clientes %&ERE limite credito?5((((.
NO"BRE Loren4o 0ernande4

Tabla 3.?.2.&: Lista de empleados 7ue tie-e- todos sus /lie-tes /o- limite de /redito igual o superior a &5555.
SELECT empresa !R"# clientes %&ERE num clie :6 -SELECT D:ST:6CT clie !R"# pedidos %&ERE fab'8*C:8 *6D producto L:FE E91((G8 *6D fecCa pedido DET%EE6 E(1@(1@2(((8 *6D E3(@(<@2(((8.
E"$RE!A E.<E S"A" (ino S"L" )istri!uciones Sur S"A" Capater Importaciones S"A" Ciencias y -@cnicas Estad?sticas :%

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

Tabla 3.?.2.;: Lista de los /lie-tes 7ue 2a- remitido pedidos del 0abri/a-te ACI /oprodu/tos 7ue empieHa- por $155 e-tre -ero 1 Nu-io de 2555. -est de existencia" El test de existencia $EIIS-S' comprue!a si una su!consulta produce alguna #ila de resultados" /o existe test de comparacin simple que se asemeje al de existenciaY solamente se utili4a con su!consultas" .eamos algunos ejemplos:
SELECT D:ST:6CT descripcion !R"# productos %&ERE EL:STS -SELECT num pedido !R"# pedidos %&ERE fab'id fab *6D producto'id producto *6D importe/'25(((.
DE!CRI$CION <isagra )c1a" <isagra I4qda" Extractor +iostra &K-m

Tabla 3.?.2.6: Lista de produ/tos para los /uales se 2a re/ibido u- pedido ma1or o igual a 2&555.
SELECT empresa !R"# clientes %&ERE rep clie'-SELECT num empl !R"# rep$entas %&ERE nombre'8Soledad #artineH8. *6D 6"T EL:STS -SELECT 4 !R"# pedidos %&ERE clie'num clie *6D importe/3(((.
E"$RE!A Anos" >artine4 S"A" Construcciones Leon S"A"

Tabla 3.?.2.?: Lista de los /lie-tes asig-ados a KSoledad 'arti-eHL 1 7ue -o 2aremitido -i-g4- pedido superior a 3555.
SELECT ciudad !R"# oficinas %&ERE EL:STS -SELECT 4 !R"# rep$entas %&ERE oficina rep'oficina *6D cuota/-(.554ob2eti$o..
CIUDAD -oledo Alicante

Tabla 3.?.2.>: O0i/i-as do-de la /uota de u- 3e-dedor represe-ta m.s del &&9 del objeti3o de la o0i/i-a. Como podemos ver, el test EIIS-S devuelve -+,E si la su!consulta produce #ilas o 0ALSE si no las produce" Como la condicin de !Fsqueda EIIS-S no utili4a realmente los resultados de la su!consulta, es posi!le relajar la regla de que Plas su!consultas de!en devolver una Fnica columna de datosQ y permitir utili4ar la #orma SELEC- S en la su!consulta de un test EIIS-S" -est cuanti#icados" La versin su!consulta del test I/ comprue!a si un valor de dato es igual a algFn valor en una columna de los resultados de la su!consulta" SQL proporciona otros dos test cuanti#icados, A/H y ALL, que extienden esta nocin a otros operadores de comparacin"
Ciencias y -@cnicas Estad?sticas ::

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

El test A/H se utili4a conjuntamente con uno de los seis operadores de comparacin de SQL $T, UV, U, UT, V, VT' para comparar un Fnico valor de test con una columna de valores producidos en una su!consulta" (ara e#ectuar el test, SQL utili4a el operador de comparacin especi#icado para comparar el valor de test con cada valor de datos en la columna, uno cada ve4" Si alguna de las comparaciones individuales produce un resultado -+,E, el test A/H devuelve un resultado -+,E" El test ALL se utili4a, al igual que el test A/H, conjuntamente con uno de los seis operadores de comparacin SQL $T, UV, U, UT, V, VT' para comparar un Fnico valor de test con una columna de valores de datos producidos por una su!consulta" (ara e#ectuar el test, SQL utili4a el operador de comparacin especi#icado para comparar el valor de test con todos y cada uno de los valores de datos de la columna" Si todas las comparaciones individuales producen -+,E, el test ALL devuelve un resultado -+,E" .eamos unos ejemplos de test A/H y ALL:
SELECT nombre !R"# rep$entas %&ERE cuota?*67 -SELECT importe !R"# pedidos %&ERE rep'num empl.
NO"BRE Dose >aldonado Loren4o 0ernande4 /atalia >artin

Tabla 3.?.2.15: Lista de los 3e-dedores 7ue 2a- a/eptado u- pedido 7ue represe-ta m.s de su /uota.
SELECT ciudad,ob2eti$o !R"# oficinas %&ERE ob2eti$o?*LL -SELECT $entas !R"# rep$entas %&ERE oficina rep'oficina.
CIUDAD -oledo Alicante OBJETI O 58"966 %6"666

Tabla 3.?.2.11: Lista de las o0i/i-as 1 sus objeti3os e- do-de todos los 3e-dedores tie-e- 3e-tas 7ue iguala- o supera- el objeti3o de la o0i/i-a. 3.B.3 Subconsultas anidadas. -odas las consultas descritas 1asta a1ora 1an sido consultas de Pdos nivelesQ, a#ectando a la consulta principal y una su!consulta" )el mismo modo que se puede utili4ar una su!consulta dentro de una consulta principal, se puede utili4ar una su!consulta dentro de otra su!consulta" Esto se puede extender 1asta el nivel de su!consulta que se desee" .eamos un ejemplo:
SELECT empresa !R"# clientes %&ERE rep clie :6 -SELECT num empl !R"# rep$entas %&ERE oficina rep :6 -SELECT oficina !R"# oficinas %&ERE re0ion'8Centro8..
E"$RE!A Anos" >artine4 S"A" Lope4 Asociados S"L" Componentes 0ernande4 S"A" )omingo S"L" )istri!uciones >ontiel S"L" Ciencias y -@cnicas Estad?sticas :9

Adquisicin y tratamiento de datos Construcciones Leon S"A" Exclusivas /orte S"A"

El lenguaje SQL I: Consulta de datos

Tabla 3.?.3.1: Lista de /lie-tes /u1os 3e-dedores est.- asig-ados a o0i/i-as de la regi8- de 3e-tas Ce-tro. En este ejemplo, la su!consulta m3s interna produce una columna que contiene los nFmeros de o#icina de las o#icinas de la regin Centro" La siguiente su!consulta produce una columna que contiene los nFmeros de empleado de los vendedores que tra!ajan en las o#icinas seleccionadas" 0inalmente la consulta externa encuentra los clientes cuyos vendedores tienen uno de los nFmeros de empleado seleccionados" 3.B.9 Subconsultas en la clJusula &*+:6,. Aunque las su!consultas suelen encontrarse so!re todo en la cl3usula RAE+E, tam!i@n pueden utili4arse en la cl3usula AA.I/E de una consulta" Cuando una su!consulta aparece en la cl3usula AA.I/E, #unciona como parte de la seleccin de grupo de #ilas e#ectuada por la cl3usula AA.I/E" Consideremos la siguiente consulta:
SELECT nombre,*+,-importe. !R"# rep$entas,pedidos %&ERE num empl'rep *6D fab'8*C:8 ,R"IM D7 nombre &*+:6, *+,-importe./-SELECT *+,-importe. !R"# pedidos.
NO"BRE Antonio .alle Soledad >artine4 A G'I"$ORTE* 55"966,66 &9"666,66

Tabla 3.?.$.1: Lista de los 3e-dedores /u1o tama:o de pedido medio para produ/tos 0abri/ados por OACIP es superior al tama:o de pedido medio global. La consulta #unciona calculando en primer lugar el Ptama o de pedido medio glo!alQ" Luego la cl3usula AA.I/E comprue!a cada grupo de #ilas para ver si el tama o medio pedido de ese grupo es superior al promedio de todos los pedidos" Si es as?, el grupo de #ilas es retenidoY si no, el grupo de #ilas es descartado" 0inalmente la cl3usula SELEC- produce una #ila sumaria por cada grupo, mostrando el nom!re del vendedor y el tama o de pedido medio para cada uno" 3." #$ercicios de consultas en !%&. )ado el siguiente diagrama de una !ase de datos y las relaciones mostradas a continuacin:

Ciencias y -@cnicas Estad?sticas

:;

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

*0ICI/AS )(-*0ICI/AS codi6o o#icina departamento tele#ono oficina ciudad region

)E(A+-A>E/-*S deptno nom!re CA-EE*+IAS cate6oria titulo salario trienio


CATEGORAS CA-EE*+IA -I-,L* SALA+I -+IE/I* * & )irector 96"666 &"666 5 De#e Seccin :6"666 766 % Administrativo %9"666 866 : Comercial %9"666 866 9 Empl" almac@n 59"666 966 DPTOFICINAS *0ICI/A )E(A+-A>E/-* -ELE0*/* && & =;%"=7&"666 && 5 =;%"=7&"&66 && % =;%"=7&"566 && : =;%"=7&"%66 && 9 =;%"=7&":66 &5 5 =%%"99&"666 &5 % =%%"99&"&66 &5 : =%%"99&"566 &% % =;&";8&"666 5& 5 =&%";:&"666 5& % =&%";:&"&66 5& : =&%";:&"566 55 % =59"78&"666

E>(LEA)*S num nom!re edad departamento categoria contrato


OFICINAS CI%DAD .alencia <arcelona Alicante >adrid -oledo

OFICINA && &5 &% 5& 55

! (ION Este Este Este Centro Centro

DEPARTAMENTOS D "TNO NO'A! & )ireccin 5 Administracin % Comercial : Almac@n 9 In#orm3tica

C*)IE* &66 &6& &65 &6% &6: &69 &6; &68 &67 &6= &&6 &&& &&5

N%' NO'A! &666 Antonio Eutierre4 &66& (aloma <lanco &665 Antonio (a4os &66% Ana Earcia &66: Amparo <eltran &669 Enrique Eome4 &66; /ieves Soler &668 Duan Dose .elasco &667 Isidro (ere4 &66= Ignacio Lope4 Ciencias y -@cnicas Estad?sticas

EMPLEADOS DAD D "A!TA' NTO CAT (O!QA CONT!ATO :9 &66 & &5G6&G&=7= 9; &66 5 &8G6%G&==5 95 &66 % &:G6%G&=7; 58 &6& 5 5%G&6G&==9 57 &6& % 6:G65G&==7 %; &6& % 69G68G5666 59 &69 5 &%G6%G&==; %: &69 % &:G65G&==8 55 &6= 5 6;G69G5666 %7 &6= % 68G6:G&==6 :8

Adquisicin y tratamiento de datos &6&6 &6&& &6&5 &6&% &6&: &6&9 &6&; &6&8 &6&7 &6&= &656 &65& &655 &65% &65: &659 &65; &658 &657 &65= &6%6 &6%& &6%5 .icente Salvador 5= Carmen Aernande4 :: Duan (ons 96 (edro 0ernande4 5% Silvia <lasco %% Dose Alegre 5; Cristina (rats :; Carlos Eimene4 %9 >aria Eon4ale4 %8 >anuel -orres 5: Dose (ere4 57 Alejandro >artos %: .eronica >uelas 59 Elena Lope4 5= Isa!el 0ernande4 55 Dose >ujica := (edro <ledos 5; (a!lo Costas %9 Ester Castro 58 Eregorio >as %% Dose >edina %: >aria ,trillas 58 >arina Eila!ert 5: &6= &65 &65 &65 &65 &6; &6; &6; &67 &67 &&6 &&6 &&6 &&5 &&5 &6% &6% &68 &&& &&& &6: &6: &6: % 5 : : : 5 : : : : 5 : : : : 5 9 9 5 9 5 % %

El lenguaje SQL I: Consulta de datos 67G68G&==9 &;G68G&==6 &:G6:G&==: &;G6=G&=== 5%G65G&==5 5;G67G&==8 &7G&&G&=7: &9G69G&==9 &;G6;G&==; &=G6&G&==7 55G6%G&==; &8G&6G&==: 69G68G&==8 6=G68G&==: &5G&6G5666 6:G6=G&=78 6;G65G&==7 6%G68G&==9 &7G68G&==; &:G6%G&==8 &:G6;G&==9 &=G67G&==8 6&G&5G&==7

Contestar a las siguientes preguntas, utili4ando para ello el lenguaje SQL" &' /om!re y edad de los empleados" 5' Salario y trienios de cada categor?a si suponemos un aumento del 5W" %' A o de contratacin de cada empleado" :' Edades de los empleados" 9' Categor?as pro#esionales que superan las %9"666 de salario" ;' )atos del empleado nFmero &6&:" 8' Empleados del departamento &6;" 7' Empleados cuya contratacin se produjo en el a o 5666" =' Empleados que no sean comerciales $cdigo de categor?a :'" &6' Empleados contratados entre los a os &==6 y &==:" &&' Categor?as que tienen un salario in#erior a %9"666 o superior a :6"666" &5' Empleados cuya categor?a es director o je#e de seccin $cdigos & y 5'" &%' Empleados de nom!re ]Dose]" &:' Empleados que pertenecen a la categor?a de administrativo $cdigo %' y que tienen una edad mayor de %9 a os"
Ciencias y -@cnicas Estad?sticas :7

Adquisicin y tratamiento de datos

El lenguaje SQL I: Consulta de datos

&9' Empleados que no pertenecen al departamento &&6"" &;' /om!re y edad de los empleados ordenados por edad" &8' /om!re y edad de los empleados ordenados por nom!re de #orma descendente" &7' /om!re del empleado y de la categor?a en el que tra!aja" &=' Cdigo y tel@#onos de los departamentos de las o#icinas de la regin ]Centro]" 56' /om!re del empleado y ciudad en la que tra!aja" 5&' Sueldo de cada empleado incluyendo trienios" 55' /om!re de los empleados y de sus je#es de seccin" 5%' Suma del sueldo de los empleados, sin contar trienios" 5:' (romedio del sueldo, sin contar trienios, de la o#icina de ]<arcelona]" 59' Salarios m3ximo y m?nimo de los empleados, incluyendo trienios" 5;' /Fmero de empleados que superan los :6 a os" 58' /Fmero de edades di#erentes que tienen los empleados" 57' Categor?a y suma de los sueldos de los empleados, contando trienios, de cada una de las categor?as" 5=' /om!re y suma de los sueldos de los empleados, contando trienios, de cada o#icina" %6' -itulo y suma de trienios de las categor?as cuya suma supera las &6666 %&' /om!re del departamento y nFmero de empleados de los departamentos que tienen m3s de 9 empleados" %5' /om!re y sueldo, contando trienios, de los empleados cuyos sueldos son in#eriores a la media de sueldos de la empresa" %%' -?tulo de las categor?as donde existe un empleado con contrato anterior a &==6" %:' /om!re de los empleados que tiene un contrato m3s antiguo que cualquier empleado del departamento de ]In#orm3tica]" %9' Ciudad y nFmero de empleados de la o#icina que tiene un nFmero de empleados superior a la media de la empresa"

Ciencias y -@cnicas Estad?sticas

:=