Sunteți pe pagina 1din 64

Carrera Tcnica: Tcnico Universitario en Computacin

Asignatura: Base de Datos




Udelmar Digital
UNIDAD III

RECUPERACIN DE DATOS CON LA INSTRUCCIN SELECT


Introduccin
Ahora que tiene informacin en su base de datos, es tiempo de aprender a extraer
slo los datos que desee y de hacer modificaciones a esos datos. Empezaremos la leccin
con una instruccin de ejemplo, y aprender cmo elegir columnas especficas. Luego
expandiremos esta instruccin SELECT simple con tcnicas de manipulacin y conversin
de datos. Despus de eso, aprender a seleccionar informacin de filas especficas en tablas
y a eliminar datos duplicados. Terminar la leccin aprendiendo temas de consulta
avanzados tales como subconsultas, uniones y correlacin de datos.
SQL es un lenguaje fundamental utilizado con casi cualquier sistema de
administracin de bases de datos relacionales. En otras palabras, en cualquier base de datos
puede utilizar la mayora de las instrucciones presentadas aqu con muy pocas
modificaciones, y en algunos casos sin modificacin alguna.


OBJETIVOS UNIDAD III

Objetivos Generales
a) Aprender a extraer la informacin de una bases de datos de sus tablas relacionadas
mediante el uso de instrucciones T-SQL.

b) Aplicar el conocimiento previo de las herramientas de la suite de SQL Server, para las
acciones de extraccin y actualizacin de la informacin.


Objetivos Especficos
a) Relacionar diversas tablas de una o varias bases de datos, para la obtencin de
informacin que permita apoyar la gestin de una institucin.

b) Aplicar funciones de tipo carcter, matemticas, fechas, para la resolucin de
problemas generados por requerimientos de usuarios.

c) Practicar el uso de toda la gama de instrucciones T-SQL relacionadas con la instruccin
Select, para el logro de informes necesarios.




Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital


Ahora que tiene informacin en su base de datos, es tiempo de aprender a extraer
slo los datos que desee y de hacer modificaciones a esos datos. Empezaremos la leccin
con una instruccin de ejemplo, y aprender cmo elegir columnas especficas. Luego
expandiremos esta instruccin SELECT simple con tcnicas de manipulacin y conversin
de datos. Despus de eso, aprender a seleccionar informacin de filas especficas en tablas
y a eliminar datos duplicados. Terminar la leccin aprendiendo temas de consulta
avanzados tales como subconsultas, uniones y correlacin de datos.
SQL es un lenguaje fundamental utilizado con casi cualquier sistema de
administracin de bases de datos relacionales. En otras palabras, en cualquier base de datos
puede utilizar la mayora de las instrucciones presentadas aqu con muy pocas
modificaciones, y en algunos casos sin modificacin alguna. Empecemos con una
instruccin SELECT simple.
Cmo escribir instrucciones SELECT simples
Puede crear consultas para recuperar informacin de su base de datos, utilizando el
Analizador de consultas de SQL Server dentro o fuera del Administrador corporativo de
SQL Server, o utilizando herramientas de la lnea de comandos tales como osql. Tambin
puede utilizar otras herramientas, incluyendo el programa MSQuery y la herramienta
English Query de SQL Server. Adems, estn disponibles otras herramientas y utileras
desarrolladas por terceros.
La instruccin SELECT tiene tres componentes bsicos: SELECT, FROM
YQHERE. Su sintaxis bsica es la siguiente:
SELECT lista_columnas
FROM lista_tablas
WHERE criterio_bsqueda

La porcin SELECT de la instruccin especifica las columnas que desea recuperar.
La clusula FROM especifica las tablas de las que se van a recuperar las columnas. La
clusula WHERE limita las filas devueltas por su consulta.
La sintaxis completa para la instruccin SELECT es la siguiente:
SELECT [ ALL | DISTINCT ] [ TOP n [PERCENT] [ WITH TIES] ]
lista_seleccin
[ INTO nueva_tabla ]
[ FROM origen_tabla ]
[ WHERE condicin_bsqueda ]
[ GROUP BY [ ALL] agrupar_por_expresin [,n]
[ WITH { CUBE | ROLLUP } ] ]
[ HAVING condicin_bsqueda ]
[ ORDER BY { nombre_columna [ ASC | DESC ] } [,n] ]
[ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } (expresin) }
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
[, . . . n] [ BY expresin [,n] ]
[ FOR BROWSE ] [ OPTION (sugerencia_consulta [,n) ]

SELECT * FROM nombre_tabla es la consulta ms bsica de todas las consultas.
Si se utiliza un asterisco (*) en lista_colunnas, se recuperan todas las columnas de la tabla.
Dentro de SQL Server, el * se convierte en una lista de todas las columnas de la tabla.
En la base de datos pubs, puede ejecutar la siguiente consulta para seleccionar todas
las columnas y filas de la tabla employe:
Entrada/
Salida SELEC *
FROM employee

Emp_id fname minit lname job_id job_lvl
. . .. .
PMA42628M Paolo M Accorti
PSA 89086M Pedro S Afonso
VPA30890F Victoria P Ashworth
H-B39728F Helen Bennett
L-B31947F Lesley Brown
F-C16315M Francisco Chang
[] []
GHT20241M Gary H Thomas
DBT39435M Daniel S Tonini

(43 filas afectadas)

Para seleccionar columnas especficas, debe separar cada columna con una coma (,). Sin
embargo, no debe colocar una coma despus de laltima columna:
SELECT nombre_columna [, nombre_columna ]
FROM nombre_tabla
La siguieente consulta selecciona el nombre, apellido y el ID de empelado de la tabla
employee:
Entrada/ SELECT fname, lname, emp_id
Salida FROM employee

Fname lname em_ip
.. . .
Paolo Accorti PMA42628M
Pedro Afonso PSA89086M
Victoria Ashworth VPA30890F
Helen Bennett H-B39728F
Lesley Brown L-B31947F
Francisco Chang F-C16315M .
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
[] [] []
Gary Thomas GHT50241M
Daniel Tonini DBT39435M

Al ejecutar una consulta con SELECT *, el orden de las columnas es el mismo que el
orden de las columnas especificado en la instruccin CREATE TABLE. Al seleccionar
columnas de una tabla, el orden de lista_columnas no tiene que ser el mismo orden de las
columnas de la tabla. Puede cambiar el orden de las columnas en la salida de su consulta si
cambia de orden de las columnas en lista_columnas.
Tambin puede cambiar el orden de las columnas de la consulta anterior. Se devuelve
la misma informacin, pero las columnas se muestran en diferente orden:

Entrada/
Salida SELECT emp_id, lname, fname
FROM employee

Emp_id lname fname
.
PMA42628M Accorti Paolo
PSA89086M Afonso Pedro
VPA30890F Ashworth Victoria
H-B39728F Bennett Hellen
L-C16315M Brown Lesley
F-C16315M Chang Francisco
[] [] []
GHT50241M Thomas Gary
DBT39435M Tonini Daniel

(43 filas afectadas)

Cmo cambiar los encabezados de las columnas
Al mostrarse los resultados de la consulta, los encabezados de las columnas son los
nombres utilizados en lista_columnas. En lugar de utilizar encabezados de columna, como
lname y fname, puede hacer que las columnas tengan encabezados ms legibles, como
Nombre y ApellidoPaterno, mediante el uso de alias. Puede usar ya sea la sintaxis de SQL
Server 2000 o la del SQL (Lenguaje de Consultas Estructurado) del ANSI (Instituto
Estadounidense de Estndares Nacionales).
En SQL Server hay dos maneras para utilizar alias en columnas. El primer ejemplo
utiliza la sintaxis de SQL Server 2000:
SELECT encabezado_columna = nombre_columna
FROM nombre_tabla
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
El siguiente ejemplo se utiliza el estndar ANSI:
SELECT nombre_columna encabezado_columna
FROM nombre_tabla

Puede volver a escribir su consulta utilizando la siguiente instruccin de SQL Server
2000:
SELECT IDEmpleado =emp_id, ApellidoPaterno =lname, Nombre =fname
FROM empoyee

Tambin puede volver a escribirla utilizando SQL del ANSI:
SELECT emp_id AS IDEmpleado, lname AS ApellidoPaterno, fname AS Nombre
FROM employee


SALIDA
IDEmpleado ApellidoPaterno Nombre
. .
PMA42628M Accorti Paolo
PSA89086M Afonso Pedro
VPA30890F Ashworth Victoria
H-B39728F Bennett Hellen
L-C16315M Brown Lesley
F-C16315M Chang Francisco
[] [] []
GHT50241M Thomas Gary
DBT39435M Tonini Daniel

(43 filas afectadas)


Uso de literales
Tambin puede utilizar literales para mejorar la legibilidad de la salida. Una literal es
una cadena de caracteres encerrada entre comillas sencillas o dobles, la cual se incluye en la
lista_columnas y se muestra como otra columna en el resultado de la consulta. En los
resultados, se coloca una etiqueta en la columna al lado de sus resultados.
La sintaxis para incluir un valor literal se muestra a continuacin:
SELECT literal [, literal ]
La siguiente consulta devuelve el nombre, el apellido, una columna que contiene la
cadena literal ID Empleado, y los IDs de empelado de todos los empelados de la tabla
employee:
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Entrada/
Salida SELECT fname, lname, ID Empleado: , emp_id
FROM employee

Fname lname emp_id
Paolo Accorti ID Empleado: PMA42628M
Pedro Afonso ID Empleado: PSA89086M
Victoria Ashworth ID Empleado: VPA30890F
Helen Bennett ID Empleado: H-B39728F
[. . . ] [. . . ] [. . . ] [. . . ]
Gary Thomas ID Empleado: GHT50241M
Daniel Tonini ID Empleado: DBT39435M


Manipulacin de datos
Puede manipular datos en los resultados de su consulta para producir nuevas columnas
que muestren valores calculados, nuevos valores de cadena, fechas convertidas, y ms.
Puede manipular los resultados de su consulta utilizando operadores aritmticos, funciones
matemticas, funciones de cadena, funciones de fecha y hora, y funciones del sistema.
Tambin puede utilizar la funcin CONVERT para convertir un tipo de datos en otro, para
facilitar la manipulacin de los datos.
Operadores aritmticos
Puede utilizar operadores aritmticos con los siguientes tipos de datos: bigint, int,
smallint, tinyint, numeric, decimal, float, real, money y smallmoney. La tabla 3.1 muestra
los operadores aritmticos y los tipos de datos que puede utilizar con ellos.
Tabla 3.1 Tipos de datos y operaciones aritmticas.

Tipo Suma Resta Divisin Multiplicacin Mdulo
de datos + - / * %

bigint S S S S S
decimal S S S S No
float S S S S No
int S S S S S
money S S S S No
numeric S S S S No
real S S S S No
smallint S S S S S
smallmoney S S S S No
tinyint S S S S S


Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Precedencia de operadores
En las operaciones aritmticas, existen dos niveles de precedencia: precedencia de tipos
de datos y precedencia de operadores.
La precedencia de tipos de datos se utiliza cuando se realizan operaciones
aritmticas en distintos tipos de datos. Al utilizar tipos de datos distintos, el tipo de
datos con menor precedencia se convierte al tipo de datos con mayor precedencia.
Por ejemplo, si multiplica un smallint por un int, el resultado es un int. La nica
excepcin a esta regla ocurre cuando se utiliza el tipo de datos Money, en cuyo caso
el resultado siempre es un tipo de datos Money.
La precedencia de operadores se utiliza cuando se emplean varios operadores, los
cuales siguen las reglas normales de precedencia de operadores, en donde el
operador de mdulo siempre se evala primer, seguido de la multiplicacin y la
divisin, y despus por la suma y la resta como se lee de izquierda a derecha.

Al igual que con las aritmticas normales, puede cambiar el orden de precedencia
colocando expresiones entre parntesis. Las expresiones ms internas (las ms
anidadas) se evalan primero. Tambin puede utilizar parntesis para facilitar la
legibilidad de la operacin aritmtica. Por ejemplo,
5 +5 * 5 =30 (La multiplicacin se realiza primero.)
pero
(5 +5) * =50 (La expresin anidada se realiza primero.)

En general, al encerrar entre parntesis sus operaciones aritmticas se mejora la legibilidad
y claridad de su cdigo de Transcat-SQL.

Funciones matemticas
Las funciones matemticas le permiten realizar operaciones comnmente necesarias con
datos matemticos. Puede devolver datos matemticos utilizando la siguiente sintaxis:
SELECT nombre_funcin (parmetros)
La tabla 3.2 muestra las funciones matemticas, con sus parmetros y resultados. En
estos ejemplos se incluyen operaciones tales como encontrar el valor absoluto, encontrar
valores de funciones trigonomtricas, derivar races cuadradas y elevar valores a una
potencia exponencial. La tabla 2.3 muestra algunos ejemplos adicionales.
Tabla 3.2 Funciones matemticas
Funcin Resultado
ABS (expr_numrica) Valor absoluto
ACOS | ASIN | ngulo en radianes cuyo coseno, seno
ATAN (expr_float) o tangente sea un valor de punto flotante
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
ATN2 (expr_float1, ngulo en radianes cuya tangente est
Expr_float2) entre expr_float1 y expr_float2
COS | SIN | COT | Coseno, seno o tangente del ngulo
TAN (expr_float) (en radiantes)
CEILING (expr_numrica) El entero ms pequeo mayor o igual que el
valor especificado
DEGREES (expr_numrica) Conversin de radianes a grados
EXP (expr_float) Valor exponencial de valor especificado
FLOOR (expr_numrica) El entero ms grande menor o igual que el
valor especificado
LOG (expr_float) Logaritmo natural
LOG10 (expr_float) Logaritmo base-10
PI ( ) Constante 3.141592653589793
POWER (expr_numrica, y) Valor de expr_numrica elevado a la potencia
de y
RADIANS (expr_numrica) Conversin de grados a radianes
RAND ( [inicializacin] ) Nmero aleatorio de punto flotante entre 0 y 1
ROUND (expr_numrcia, len) expr_numrica redondeada a la longitud
especfica en un valor entero
SIGN (expr_numrica) Positivo, negativo o cero
SQUARE (expr_float) Cuadrado del valor especificado
SQRT (expr_float) Raz cuadrada del valor especificado



Tabla 3.3 Funciones matemticas y sus resultados

Instruccin Resultado
SELECT SQRT (9) 3.0
SELECT ROUND (1234.56, 0) 1235
SELECT ROUND (1234.56, 1) 1234.60
SELECT ROUND ($1234.56, 1) 1,234.60
SELECT POWER (2,8) 256.0
SELECT FLOOR (1332.39) 1332
SELECT ABS (-365) 365

Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Funciones de cadena
Al tratar con informacin en forma de caracteres, puede utilizar varias funciones
de cadena para manipular los datos (vea la tabla 3.4). Como la mayora de las
funciones de cadena manipulan slo tipos de datos char, nchar, varchar y
nvarchar, los dems tipos de datos debe convertirse primero. Puede devolver datos
de tipo carcter utilizando la siguiente sintaxis:
SELECT nombre_funcin (parmetros)

Tabla 3.4 Funciones de cadena

Funcin Resultado
expresin + Concatena dos o mas cadenas de caracteres
expresin
ASCII (expr_char) Devuelve el valor de cdigo ASCII del carcter que
est ms a la izquierda
CHAR (expr_integer) Devuelve el equivalente en carcter del valor de
cdigo ASCII
CHARINDEX (patrn, expresin) Devuelve la posicin de inicio del patrn
especificado
DIFFERENCE (expr_char1, expr_char2) Compara dos cadenas y evala su
similitud; devuelve un valor que puede estar entre 0 y 4, en donde 4 indica que los valores
son idnticos
LEFT (expr_char, expr_integer) Devuelve una cadena de caracteres que comienza en un
nmero especificado de caracteres especificado por expr_integer a partir de la izquierda
LOWER (expre-char) Convierte la expresin a minsculas
LTRIM (expr-char) Devuelve los datos quitando los espacios en blanco a
la izquierda
NCHAR (expr_integer) Devuelve el carcter Unicode correspondiente a
expr_integer
PATINDEX (%patrn% , expresin) Devuelve la posicin inicial de la
primera ocurrencia del patrn en expresin
QUOTENAME (cadena1 delimitador_char) Devuelve una cadena Unicode
(nvarchar (1299) con delimitadores de SQL Server vlidos
RELACE (cadena 1 cadena2, cadena3) Reemplaza todas las ocurrencias de
cadena 2 con cadena 3 en cadena 1
REPLICATE (expre_char, expre_integer) Repite expr_char, expr_inter veces
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
REVERSE (expr_char) Devuelve la expresin expr_char
invertida
RIGHT (expr_char, expr_integer) Devuelve una cadena de caracteres empezando
expr_integer caracteres a partir de la derecha
RTRIM (expr_char) Devuelve los datos quitando los espacios en blanco a
la derecha
SOUNDEX (expre_char) Devuelve un cdigo de cuatro dgitos (SOUNDEX)
para evaluar la semejanza de dos cadenas de caracteres
SPACE (expr_integer) Devuelve una cadena de espacios repetidos
expr_integer veces
STR (expr_float) Convierte nmeros en caracteres; longitud es
[, longitud[, decimal] ] ) la longitud total y decimal es el nmero de espacios a la
derecha del punto decimal
STUFF(expr_char1,inicio, longitud, expr_char2) Elimina longitud
caracteres de expr_char1 empezando el inicio e inserta exprchar2 en inicio
SUBSTRING (expresin, inicio, longitud) Devuelve parte de una cadena de
caracteres o binaria
UNICODE (cadena_nchar) Devuelve el valor entero Unicode del
primer carcter en cadena_nchar
UPPER (expr_char) Convierte a mausculas


Por ejemplo, podra ejecutar lo siguiente para devolver una columna llamada Nombre, la
cual es una concatenacin del apellido, la primera inicial del nombre y el ID de empleado:
Entrada/ SELECT lname +, +SUBSTRING (fname, 1,1) + ,
Salida AS Nombre, emp_id as IDEmpleado
FROM employee

Nombre IDEmpleado
.
Accorti, P. PMA42628M
Afonso, P. PSA89086M
Ashworth, V. VPA30890F
Bennett, H. H- B39728F
[. . .] [. . . ]
Sommer, M. MDS52347M
Thomas, G. GHT50241M
Tonini, D. DBT39435M

(43 filas afectadas)
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Universidad del Mar


La tabla 3.5 muestra algunos ejemplos ms de las funciones de cadena.

Tabla 3.5 Ms funciones de cadena

Instruccin Resultado
SELECT ASCII (G) 71
SELECT LOWER (ABCDE) abcde
SELECT PATINDEX (%BC%,ABCD) 2
SELECT RIGHT (ABCDE,3) CDE
SELECT REVERSE (ABCDE) EDCBA


Funciones de fecha
Puede manipular valores de tipo datetime por medio de las funciones de fecha. Puede
utilizar funciones de fecha en la lista_columnas, en la clusula WHERE o en cualquier
lugar en donde pueda utilizarse una expresin. Para ello, utilice la siguiente sintaxis:
SELECT funcin_fecha (parmetros)
Debe encerrar entre comillas simples o dobles los valores de datetime pasados como
parmetro. Algunas funciones toman un parmetro llamado datepart. La tabla 3.6 muestra
los valores de datepart y sus abreviaciones.
Tabla 3.6 Valores de datepart
Datepart Abreviacin Valores
day dd 1-31
day of year dy 1-366
hour hh 0-23
millisecond ms 0-999
minute mi 0-59
month mm 1-12
quarter qq 1-4
second ss 0-59
week wk 0-53
weekday dw 1-7 (Dom-Sab)
year yy 1753-9999
Udelmar Digital
Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
La tabla 3.7 muestra las funciones de fecha, sus parmetros y sus resultados. La tabla 3.8
muestra algunos ejemplos de las funciones de fecha.

Tabla 3.7 Funciones de fecha
Funcin Resultado
DATEADD Agrega el nmero de dateparts a la fecha
(datepart, nmero,fecha)
DATEDIFF
(datepart, fecha1, fecha2) Devuelve el nmero de dateparts entre dos fechas
DATENAME Devuelve el valor ASCII de una datepart especifica
para (datepart, fecha) la fecha mostrada.
DATEPART Devuelve el valor entero de una datepart especificada
para (datepart, fecha) la fecha mostrada
DAY (fecha) Devuelve un valor entero que representa el da
GETDATE ( ) Devuelve la fecha y hora actuales en formato interno
MONTH (fecha) Devuelve un valor entero que representa el mes
YEAR (fecha) Devuelve un valor entero que representa el ao


Tabla 3.8 Ejemplos de funciones de fecha

Funcin Resultado

SELECT DATEDIFF (mm, 1/1/00, 12/31/02) 35
SELECT GETDATE ( ) Abr 29, 2000 2:10AM
SELECT DATEADD (mm, 6, 1/1/00) J ul 1, 2000 2:10AM
SELECT DATEADD (mm -5, 10/6/00) May 6, 2000 2:10 AM


Ahora veamos una consulta ms compleja que utiliza muchas de las distintas piezas que
hemos visto hasta ahora:
Entrada/Salida SLECT emp_id AS IDEmpleado, lname + , +SUBSTRING (fname,
1, 1) +
Ha trabajado durante , DATEDIFF (year, hire_date, getdate ()), aos.
FROM employee
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

IDEmpleado Nombre
.. .. ..

PMA42628M Accorti, P. Ha trabajado durante 8 aos.
PSA89086M Afonso, P. Ha trabajado durante 10 aos.
VPA30890F Ashworth, V. Ha trabajado durante 10 aos.
H-B39728F Bennett, H. Ha trabajado durante 11 aos.
[ . . .] [. . . ] [. . . ]
MFS52347M Sommer, M. Ha trabajado durante 10 aos.
GHT50241M Thomar, G. Ha trabajado durante 12 aos.
DBT39435M Tonini, D. Ha trabajado durante 10 aos.

(43 filas afectadas)


Funciones del sistema

Puede utilizar varias funciones del sistema integradas para obtener informacin de las
tablas del sistema. Para devolver datos, puede utilizar la siguiente sintaxis:
SELECT nombre_funcin (parmetros)
Puede utilizar funciones del sistema en la lista_columnas, en la clusula WHERE y en
cualquier otro lugar en donde pueda utilizarse una expresin.
La tabla 3.9 muestra algunas funciones del sistema, sus parmetros y sus resultados.


Tabla 3.9 Funciones del sistema

Funcin Resultado
COALESCE (expresin1, expresin2, expresinN) Devuelve la primera expresin que
no sea NULL
COL_NAME (id_tabla, id_columna) Devuelve el nombre de la columna
COL_LENGTH (nombre_tabla Devuelve la longitud de la columna
nombre_columna)
DATALENGTH (expresin) Devuelve la longitud actual de una expresin
de cualquier tipo de datos
DB_ID ( [nombre_basededatos] ) Devuelve el ID de una base de datos
DB_NAME ( [ id_basededatos] ) Devuelve el nombre de una base de datos
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
GETANSINULL ([ nombre_basededatos]) Devuelve la nulidad predeterminada de la base
de datos
HOST_ID ( ) Devuelve el ID de la estacin de trabajo host
HOST_NAME ( ) Devuelve el nombre del equipo host
IDENT_INCR( `nombre_tabla`) Devuelve el valor del incremento especificado
durante la creacin de la columna de identidad
IDENT_SEED (nombre_tabla) Devuelve el valor de inicializacin
especificado durante la creacin de la columna
de identidad
IDEX_COL (nombre_tabla, id_ndice, id_clave) Devuelve el nombre de una columna
indizada
ISDATE (variable | nombre_columna) Comprueba que el formato de fecha sea vlido;
devuelve 1 s es vlido, o 0 en caso contrario
ISNULL (expresin, valor) Devuelve el valor especificado en lugar de
NULL
ISNUMERIC (variable | nombre_columna) Comprueba que el formato numrico sea
vlido; devuelve 1 si es vlido, o 0 en caso
contrario
NULLIF (expresin1, expresin2) Devuelve NULL si expresin1 =expresin2
OBJ ECT_ID (nombre_objeto) Devuelve el ID de un objeto de base de datos
OBJ ECT_NAME (id_objeto) Devuelve el nombre de un objeto de base de
datos
STATES_DATE (id_tabla.id_indice) Devuelve la fecha en que se actualizaron por
ltima vez las estadsticas del ndice
especificado
SUSER_ID Devuelve el ID del usuario de un servidor
( [nombreusuario_servidor] )
SUSER_NAME ( [id_sevidor[ ) Devuelve el nombre del usuario de un servidor
USER_ID ( [ nombreusuario] ) Devuelve el ID del usuario de una base de
datos
USER_NAME ([id_usuario]) Devuelve el nombre del usuario de una base de
datos

La siguiente consulta utiliza dos funciones de sistema para devolver el nombre de la
segunda columna de la tabla employee:
Entrada/Salida SELECT COL_NAME (OBJ ECT_ID (employee), 2)
Fname (1 filas afectadas)
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Conversin de datos
Como muchas funciones requieren los datos en un cierto formato o tipo de datos, tal vez
necesita realizar conversiones de un tipo de datos a otro. Para modificar los tipos de datos
utilice las funciones CONVERT ( ) o CAST ( ). Puede utilizar la funcin CONVERT ( ).
Puede utilizar la funcin CONVERT ( ) en cualquier lugar en donde se permita el uso de
expresiones; tiene la siguiente sintaxis: CONVERT (tipodatos [ (longitud) ], expresin [,
estilo[ )
La tabla 3.10 muestra el parmetro de estilo asociado con su estndar y el formato de la
salida

Tabla 3.10 Uso de la funcin CONVERT ( ) para el tipo de datos DATETIME

Estilo sin Estilo con Estndar Salida en formato de fecha
siglo (aa) siglo (aaaa)

- 0 o 100 Valor predeterminado mes dd aaaa hh:mi AM o
(PM)
1 101 USA mm/dd/aa
2 102 ANSI aa.mm.dd
3 103 Britnico /Francs dd/mm/aa
4 104 Alemn dd.mm.aa
5 105 Italiano dd-mm-aa
6 106 - dd mes aa
7 107 - mes dd, aa
8 108 - hh:mi:ss
9 o 109 Predeterminado + mes dd, aaaa hh:mi:ss AM o PM milisegundos
10 110 USA mm-dd-aa
11 111 J apn aa/mm/dd
12 112 ISO aammdd
13 o 113 Europeo predeterminado dd mes aaaa hh:mi:ss:ms 24h)
+milisegundos
14 114 - hh:mi:ss:ms (24h)



Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Puede ejecutar la siguiente consulta para convertir la fecha actual a una cadena de ocho
caracteres, con estilo de fecha ANSI:
Entrada/Salida SELECT C ONVERT (CHAR (8), GETDATE ( ), 2)

00.17.06

(1 filas afectadas)
SELECT emp_id AS IDEempleado, lname + , +SUBSTRING (fname, 1, 1) + . AS
Nombre, Ha trabajado durante +CONVERT (CHAR (2), (DATEDIFF (year, hire_date,
getdate ( )))) + aos.

IDEmpleado Nombre
.. .. ..

PMA42628M Accorti, P. Ha trabajado durante 8 aos.
PSA89086M Afonso, P. Ha trabajado durante 10 aos.
VPA30890F Ashworth, V. Ha trabajado durante 10 aos.
H-B39728F Bennett, H. Ha trabajado durante 11 aos.
[ . . .] [. . . ] [. . . ]
MFS52347M Sommer, M. Ha trabajado durante 10 aos.
GHT50241M Thomar, G. Ha trabajado durante 12 aos.
DBT39435M Tonini, D. Ha trabajado durante 10 aos.

(43 filas afectadas)
Este ejemplo se basa en la consulta ejecutada anteriormente en la seccin Funciones de
fecha. En este ejemplo puede combinar las ltimas tres columnas en una sola, utilizando
la funcin CONVERT ( ) y la concatenacin de cadenas.

Seleccin de filas
Hemos visto varias maneras de recuperar, manipulas y dar formato a las columnas del
conjunto de resultados de una consulta. Ahora aprender a especificar cules filas desea
recuperar, con base en las condiciones de bsqueda para esto se utiliza la clusula WHERE
de la instruccin SELECT. En las condiciones de bsqueda se incluyen operadores de
comparacin, intervalos, listas, coincidencia de cadenas, valores desconocidos,
combinaciones y negaciones de estas condiciones.
La sintaxis bsica para especificar las filas a recuperar se muestra a continuacin:
SELECT lista_columnas
FROM lista_tablas
WHERE condiciones_bsqueda



Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Operadores de comparacin

Puede implementar condiciones de bsqueda utilizando operadores de comparacin
(vea la tabla 3.11). As mismo, puede seleccionar filas comparando valores de columnas
con una expresin o valor dados. Las expresiones pueden contener constantes, nombres de
columnas, funciones o subconsultas anidadas. Si compara dos tipos de datos de carcter
distintos (como char y varchar) o compara tipos de datos de fecha (como datetime y
smalldatetime), debe encerrarlos entre comillas sencillas. Se permite el uso de comillas
dobles, pero las comillas sencillas mantienen la compatibilidad con ANSI.

Tabla 3.11 Operadores de comparacin disponibles

Operador Descripcin

= Igual a
> Mayor que
< Menor que
>= Mayor que o igual a
<= Menor que o igual a
<> No es igualo a (preferido)
!= No es igual a
!> No mayor que
!< No menor que
( ) Orden de precedencia

La sintaxis para clusula WHERE que utiliza operadores de comparacin es la
siguiente:

SELECT lista_columnas
FROM lista_tablas
WHERE nombre_columnas operador_comparacin expresin

La siguiente consulta devuelve el ID de empleado, apellido paterno y nombre de
todos los empelados que trabajan para la editorial que tiene un pub_id de 0877:
Entrada/ SELECT emp_id, lname, fname
Salida FROM employee
WHERE pub_id =0877

Emp_id lname fname
.
PMA42628M Accorti Paolo
VPA30890F Ashworth Victoria
H-B39728F Bennett Helen
[. . .] [. . .] [. . .]
M-R38834 Rance Martine
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
DBT39435M Tonini Daniel

Intervalos

Puede recuperar filas con base en un intervalo de valores, utilizando la palabra clave
BETWEEN. Al igual que con el operador de comparacin, si especifica intervalos con
base en tipos de datos de caracteres (como char y varchar) o tipos de datos de fecha (como
datetime y smalldatetime), debe encerrarlos entre comillas sencillas.

La sintaxis para la clusula WHERE que utiliza comparaciones es la siguiente:

SELECT lista_columnas
FROM lista_tabals
WHERE nombre_columna [NOT] BETWEEN expresin AND expresin

La siguiente consulta devuelve el nombre y el ID de empelado de todos los
empleados con tratados entre 10/1/92 y 12/31/92:

Entrada/ Salida SELECT lname, emp_id
FROM employee
WHERE hire_date BETWEEN 10/1/92 AND 12/31/92

Lname emp_id

J osephs KFJ 64308F
Paolino MAP77183M

(2 filas afectadas)

En este ejemplo, la clusula BETWEEN es inclusiva. Esto significa que tambin se
incluyen las fechas 10/1/92 y 12/31/92 como fechas potenciales de contratacin. Observe
que el valor ms pequeo debe ir primero en la clusula BETWEEN.



Listas

Puede recuperar filas con valores que concuerden con los valores incluidos en una
lista, utilizando la palabra clave IN. Si especifica intervalos con base en tipos de datos de
caracteres (char y varchar) o tipos de datos de fecha (como datetime y smalldatetime), debe
encerrarlos entre comilla sencillas.

La sintaxis para la clusula WHERE que utiliza comparaciones es la siguiente:

SELECT lista_columna
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
FROM lista_tablas
WHERE nombre_columna [NOT] IN (lista_valores)

Si desea buscar empleados que trabajen para editoriales que tengan un pub_id de
0877 o de 9999, ejecute la siguiente consulta:
Entrada / Salida SELECT emp_id, lname, fname
FROM employee
WHERE pub_id IN ( 0877 , 9999 )

emp_id lname fname
.
PMA42628M Accordi Paolo
VPA30890F Ashworth Victoria
H-B39728F Bennett Helen
[. . .] [. . .] [. . .]
A-R89858F Roulet Annette
DBT39435M Tonini Daniel

(26 filas afectadas)



Cadenas de caracteres

Puede recuperar filas con base en porciones de cadenas de caracteres, utilizando la
palabra clave LIKE. sta se utiliza con datos char, varchar, nchar, nvarchar text, datetime y
smalldatetime. Tambin puede utilizar cuatro caracteres comodn en forma de expresiones
regulares.

La sintaxis para la clusula WHERE que utiliza la palabra clave LIKE es la siguiente:

SELECT lista_columnas
FROM lista_tablas
WHERE nombre_columna [NOT] LIKE cadena

Los comodines disponibles son:

% Cadena de cero o ms caracteres
_ Un carcter
[ ] Un carcter dentro del rango especificado
[ ^] Un carcter que no se encuentre dentro del rango especificado


Al utilizar la clusula LIKE, asegrese de encerrar los caracteres comodn entre
comillas sencillas.
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Puede ejecutar la siguiente consulta para devolver el ID del ttulo (title_id) y el
ttulo (title) de todos los libros que contengan la palabra compute en cualquier lugar en el
ttulo, de tabla titles:


Entrada/ SELECT title_id, title
Salida FROM titles
WHERE title LIKE %computer%

title_id title
..
BU1111 Cooking with Computers: Surreptitious Balance Sheets
BU2075 You Can Combat Computer Stress!
BU7832 Straight Talk About Computers
MC3026 The Psychology of Computer Cooking
PS1372 Computer Phobic AND Non-Phobic Individuals: Behavior
Variations

(5 filas afectadas)

Puede ejecutar la siguiente consulta para devolver el ID de autor (au_id), apellido
paterno (au_lname) y nombre (au_fname) de todos los autores cuyos nombres empiecen
con B o con M, de la tabla authors. Para mostrar los nombres que empiecen con una B o
con una M, utilice la clusula LIKE con ambas letras dentro de los corchetes:

Entrada
/Salida SELECT au_id, au_lname, su_fname
FROM authors
WHERE au_lname LIKE [BM] %


au_id au_lname au_fname
.. . ..
409-56-7008 Bennet Abraham
648-92-1872 Blotchet-Halls Reginald
724-80-9391 MacFeather Stearns
893-72-1158 McBadden Heather

(4 filas afectadas)


Valores desconocidos

Un valor nulo no es lo mismo que una cadena de caracteres en blanco, ni es lo
mismo Queen 0, cuando se trata de datos numricos. Un valor NULL ocurre cuando no se
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
asigna un valor a un campo. sta es la otra manera de decir que NULL es equivalente al
valor desconocido. En tales casos, fallan todas las comparaciones entre NULL y los
espacios en blanco, los ceros e incluso otros valores NULL (cuando se utilizan los
operadores de comparacin >o <). Por lo tanto, cmo se buscan filas con base de valores
NULL? Puede hacer distinciones entre filas de sus tablas que contengan valores NULL
utilizando las palabras clave IS NULL e IS NOT NULL.
La sintaxis para la clusula WHERE que utiliza los operadores IS NULL e IS NOT
NULL es la siguiente:

SELECT lista_columnas
FROM lista_tablas
WHERE nombre_columna IS [ NOT ] NULL

Por ejemplo, puede ejecutar la siguiente consulta para buscar todos los libros que no
se hayan vendido:

Entrada/
Salida SELECT title_id, title
FROM titles
WHERE ytd_sales IS NULL


title_id title
. ..
MC3026 The Psychology of Computer Cooking
PC9999 Net Etiquette

(2 filas afectadas)


En contraste a la consulta anterior, puede utilizar la clusula IS NOT NULL para
buscar todos los libros que tengan valores en ytd_sales, ejecutando las siguiente consulta:

Entrada/
Salida SELECT title_id, title
FROM titles
WHERE ytd_sales IS NOT NULL

title_id title
.. .
BU1032 The Busy Executives Database Guide
BU1111 Cooking with Computers: Surreptitious Balance Sheets
BU7832 Straight Talk About Computers
[. . .] [. . .]
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
TC3218 Onions, Leeks, and Garlic: Cooking Secrets of the
Mediterranean
TC4203 Fifty Years in Buckingham Palace Kitchens
TC7777 Sushi, Anyone?

(16 filas afectadas)



Uso de varios criterios para recuperar filas


Hemos visto cmo seleccionar filas con base de valores especficos, intervalos,
listas, comparaciones de cadenas y valores desconocidos, Ahora veremos cmo recuperar
filas utilizando varios criterios de bsqueda.
Puede combinar varios criterios de bsqueda por medio de los operadores lgicos
AND, OR y NOT. El uso de AND y OR le permite unir dos o ms expresiones. AND
devuelve resultados cuando todas las condiciones son verdaderas; OR devuelve resultados
cuando alguna de las condiciones es verdadera.
Cuando utiliza ms de un operador lgico en la clusula WHERE, debe tener en
cuanta el orden de precedencia. Not va primero, despus AND y por ltimo OR.

La sintaxis para clusula WHERE que utiliza varios criterios es la siguiente:

SELECT lista_columnas
FROM lista_tablas
WHERE [NOT] expresin {AND | OR} [NOT ] expresin


Consulta 1

Considere lo siguiente: se quiere recuperar el ID de ttulo, el ttulo y el precio para
todos los libros que tengan un pub_id de 0877 o la palabra computer en ttulo, ya para los
cuales el precios sea NOT NULL.

Entrada/
Salida SELECT title_id, title, price, pub_id
FROM titles
WHERE title LIKE %computer% OR pub_id = 0877 AND price IS
NOT NULL


title_id title price pub_id
.. . .......
BU1111 Cooking with Computers: Surreptitious Balance 11.95 1389
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
BU2075 You Can Combat Computer Stress! 2.99 736
BU7832 Straight Talk About Computers 19.99 1389
MC2222 Silicon Valley Gastronomic Treats 19.99 877
MC3021 The Gourmet Microwave 2.99 877
MC3026 The Psychology of Computer Cooking NULL 877
PS1372 Computer Phobic ANS Non-Phobic Individuals: Be 21.59 877
TC3218 Onions, Leeks, and Garlic: Cooking Secrets of 20.95 877
TC4203 Fifty Years in Buckingham Palace Kitchens 11.95 877
TC7777 Sushi, Anyone? 14.99 877

(10 filas afectadas)
Consulta 2

Ahora ejecute de nuevo la consulta y vea si puede deshacerse de ese valor NULL en
el campo del precio:

Entrada/
Salida SELECT title_id, title, price, pub_id
FROM titles
WHERE title LIKE %computer% OR pub_id =0877) AND price IS NOT
NULL

title_id title price pub_id
.. . .......
BU1111 Cooking with Computers: Surreptitious Balance 11.95 1389
BU2075 You Can Combat Computer Stress! 2.99 736
BU7832 Straight Talk About Computers 19.99 1389
MC2222 Silicon Valley Gastronomic Treats 19.99 877
MC3021 The Gourmet Microwave 2.99 877
PS1372 Computer Phobic ANS Non-Phobic Individuals: Be 21.59 877
TC3218 Onions, Leeks, and Garlic: Cooking Secrets of 20.95 877
TC4203 Fifty Years in Buckingham Palace Kitchens 11.95 877
TC7777 Sushi, Anyone? 14.99 877

(9 filas afectadas)

Observe que esta consulta devuelve los resultados deseados al cambiar el orden de
precedencia.

Eliminacin de informacin duplicada

Al seleccionar cierta informacin de una tabla, tal vez reciba filas de informacin
duplicadas. Puede eliminar los duplicados utilizando la clusula DISTINCT en la porcin
SELECT de la instruccin SELECT. Si no especifica la clusula DISTINCT, se devuelven
todas las filas que cumplan con el criterio de la clusula WHERE.
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

La sintaxis para la clusula DISTINC es la siguiente:

SELECT DISTINCT lista_columnas
FROM nombre_tablas
WHERE condiciones_bsqueda

La diferencia se determina al combinar todas las columnas incluidas en
lista_columnas. Como los valores NULL se tratan como duplicados entre s, slo se
devuelve un NULL.

La tabla 3.12 muestra algunas instrucciones SELECT con la clusula DISTINCT.
La consulta 1 muestra los estados en los que viven los autores, sin mostrar duplicados. La
consulta 2 muestra las ciudades en las que viven los autores, sin mostrar duplicados. La
consulta 3 muestra varias combinaciones de ciudades y estados.

Tabla 3.12 Cada consulta muestra resultados distintos

Consulta1 Consulta2 Consulta3

SELECT DISTINCT state SELECT DISTINCT city SELECT DISTINC city,
FROM authors FROM authors state FROM authors
CA Ann Arbor Ann Arbor, MI
IN Berkeley Berkeley, CA
KS Corvallis Corvallis, OR
MD Covelo Covelo, CA
MI Gary Gary, IN
OR Lawrence Lawrence, KS
TN Menlo Park Menlo Park, KS
UT Nashville Nashville, TN
Oakland Oakland, CA
Palo Alto Palo Alto, CA
Rockville Rockville, MD
Salt Lake City Salt Lake City, UT
San Francisco San Francisco, CA
San J ose San J ose, CA
Vacaville Vacaville, CA
Walnut Creek Walnut Creek, CA



Si slo desea mostrar las ciudades distintas en las que viven los autores, por qu no
simplemente utilizar la Consulta1, ya que le muestra las mismas ciudades que la Consulta3?
Para responder esta pregunta, suponga que dos autores de su base de datos viven en
Portland. Si un autor vive en Portland, Oregon; el otro, en Portland, Maine, Obviamente,
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
son dos ubicaciones distintas. Por lo tanto, si ejecuta la Consulta3 que utiliza la
combinacin DISTINCT de ciudad y estado, se devuelven ambas ubicaciones: Portland,
Oregon y Portland, Maine.
Observe que los resultados de las tres consultas estn ordenados. Esto podr ser por
casualidad. Las versiones anteriores de SQL Server ordenaban primero los valores, de
manera que el primer valor pudiera compararse con el siguiente para facilitar la eliminacin
de valores duplicados. SQL Server 2000 utiliza un algoritmo de hash ms complejo para
recopilar su informacin. Este algoritmo incrementa la velocidad y la eficiencia, pero
podra perderse el orden. Para garantizar que sus datos estn ordenados, incluya una
clusula ORDER B en sus consultas.
Ahora d un vistazo ms detallado a la Columna3:

Entrada SELECT DISTINCT city, state
FROM authors

Los resultados en donde se devuelve Portland, OR Portland, ME, deberan verse
as:

Salida city state
. .....
Portland ME
Portland OR

(2 filas afectadas)

Cmo ordenar datos utilizando la clusula ORDER BY

Puede utilizar la clusula ORDER BY en su instruccin SELECT para ordenar los
resultados de su consulta. La sintaxis bsica para utilizar la clusula ORDER BY es la
siguiente:

SELECT lista_columnas
FROM lista_tablas
[ ORDER BY nombre_columna | nmero_lista_columnas [ASC | DESC] ]

Puede tener cualquier nmero de columnas en su lista ORDER BY, siempre y
cuando no tengan un ancho mayor a 900 bytes. Tambin puede especificar nombres de
columnas o utilizar el nmero ordinal de las columnas en la lista_columnas.
Estas consultas devuelven los mismos conjuntos de resultados ordenados:

Consulta 1
SELECT title_id, au_id
FROM titleauthor
ORDER BY title_id, au_id

Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Consulta 2
SELECT title_id, au_id
FROM titleauthor
ORDER BY 1 , 2

Puede combinar nombres de columnas y nmeros ordinales en la clusula ORDER
BY. Tambin puede especificar si desea los resultados ordenados en forma ascendente
(ASC) o descendente (DESC). Si no especifica ASC o DESC, se utiliza ASC.
Si ordena los resultados con base en una columna que contenga valores NULL y se
utiliza el orden ASC, se muestran primero las filas que contengan valores NULL.
Al utilizar la clusula ORDER BY, el orden de su servidor SQL Server puede hacer
una diferencia en sus conjuntos de resultados. El orden predeterminado para SQL Server es
orden de diccionario y distinguir maysculas de minsculas. El orden predeterminado para
SQL Server es orden de diccionario y distinguir maysculas de minsculas. El orden con
distincin de maysculas puede afectar el ordenamiento de sus conjuntos de resultados, ya
que una A mayscula no se considera igual que una a minscula.
Para averiguar el orden actual de su servidor, puede ejecutar el procedimiento
almacenado de sistema sp_helpsort.


Repaso de medio da

Ha tenido que asimilar bastante informacin hasta este momento, por lo que vamos
a hacer una pausa para repasar lo que se ha cubierto hasta ahora.
Durante esta leccin se han venido formando las bases acerca de la recuperacin de
datos por medio de la instruccin SELECT. Aprendi a cambiar los encabezados de las
columnas y a agregar literales de cadenas de texto a su salida, utilizando:

SELECT nombre_col AS nuevo_nombre_col

para cambiar un encabezado de columna, y

SELECT literal_cadena, nombre_col

para agregar una literal de cadena. Luego expandi su comprensin de la instruccin
SELECT por medio del uso de los operadores aritmticos, las funciones matemticas, de
cadena y de fecha y hora. Luego aprendi acerca de las funciones del sistema tales como
GETDATE para manipular sus datos todava ms.
A menudo, los datos con los que desea trabajar no estn expresados en el formato y
el tipo de datos que debe utilizar. Aprendi a utilizar el comando CONVERT para
convertir sus datos de un tipo de datos a otro.
Luego continu expandiendo la instruccin SELECT con ejemplos y una
descripcin de cmo seleccionar distintas filas de informacin al aplicar operadores de
comparacin, intervalos de valores, listas y cadenas de caracteres.
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Aprendi a eliminar filas con valores NULL. Tambin aprendi a seleccionar
distintas filas de informacin.
Lo ltimo que aprendi fue cmo ordenar sus resultados por medio de la clusula
ORDER BY.
Ahora que ha tomado un respiro, puede seguir aprendiendo a trabajar con algunas
instrucciones SELECT ms avanzadas. Ahora veremos caractersticas avanzadas tales
como producir informacin de resumen con las funciones de agregado GROUP B y
HAVING, as como con las instrucciones COMPUTE y COMPUTE BY. Tambin
aprender a correlacionar datos y a ejecutar subconsultas. Terminaremos dando un vistazo
a algunas otras consultas avanzadas que involucran la seleccin de datos de ms de una
tabla.
Slo porque estas consultas sean avanzadas, no significa necesariamente que sern
muy difciles para usted. Simplemente se requiere de un poco ms de prctica para
dominarla, a comparacin de las instrucciones SELECT simples con las que ha estado
trabajando.

Funciones de agregado

Las funciones de agregado pueden devolver valores de resumen para toda la tabla o
para grupos de filas de una tabla. Las funciones de agregado se utilizan normalmente con
la clusula GROUP BY y en la clusula HAVING o en la lista_columnas. Esta
informacin podra parecer algo abrumadora al principio, pero no se desespere. Ver cada
pieza en su forma bsica, y luego aprender a agregar piezas adicionales, una a la vez. La
tabla 3.13 muestra las funciones de agregado con sus parmetros y resultados.

Tabla 3.13 Funciones de agregado

Funcin Resultado

AVG ( [ ALL | DISTINCT] Devuelve el promedio de los valores en la expresin numrica, ya sea
nombre_columna) all o distinct
COUNT ( * ) Devuelve el nmero de filas seleccionadas
COUNT ( [ ALL | DISTINCT] Devuelve el nmero de valores en la expresin, ya sea all o ditinct
nombre_columna)
MAX (nombre_columna) Devuelve el valor mayor de la expresin
MIN (nombre_columna) Devuelve el valor menor de la expresin
STDEV (nombre_columna) Devuelve la desviacin estndar estadstica de todos los valores en el
nombre de columna o expresin
STDEVP (nombre_columna) Devuelve la desviacin estndar estadstica para la poblacin de todos los
valores en el nombre de columna o expresin dada
SUM ( [ ALL | DISTINCT] Devuelve el total de los valores de la expresin numrica, ya sea all
(nombre_columna) o distinct
TOP n [PERCENT] Devuelve los primero n valores o el n% de valores en su conjunto de
resultados
VAR (nombre_columna) Devuelve la varianza estadstica de los valores mostrados en el nombre
de columna o expresin
VARP (nombre_columna) Devuelve la varianza estadistica de una poblacin de valores mostrados
en el nombre de columna o expresin

Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Por ejemplo, esta consulta devuelve el nmero total de filas en la tabla employee:

Entrada/
Salida SELECT COUNT ( * )
FROM employee

..
43

(1 filas afectadas)



Esta consulta selecciona el valor mximo encontrado en la columna ytd_sales de la
tabla titles:

Entrada/
Salida SELECT MAX (ytd_sales)
FROM titles
.
22246

(1 fila afectadas)

Esta consulta selecciona todos los valores de la columna qty de la tabal sales y los
agrega:

Entrada/
Salida SELECT SUM (qty)
FROM sales

493

(1 fila afectadas)

Group by y having

La clusula GROUP BY agrupa datos de resumen que cumplen con los criterios de
la clusula WHERE para devolver dichos datos como filas individuales. La clusula
HAVING establece los criterios para determinar cules filas sern devueltas por la clusula
GROUP BY. Por ejemplo, podra averiguar cules libros tienen ms de un autor y luego
devolver el ttulo del libro y los autores de cada libro.



Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
La sintaxis para las clusulas GROUP BY y HAVING es la siguiente:

SELECT lista_columnas
FROM lista_tablas
WHERE criterios_bsqueda
[GROUP BY [ALL] expresin (es)_noagregado (s)
[HAVING] criterios_bsqueda]

La clusula HAVING tiene el mismo efecto sobre la clusula GROUP BY que el
que tiene la clusula WHERE en la instruccin SELECT. Por ejemplo, la siguiente
consulta busca todos los libros que tengan ms de un autor y devuelve el title_id y el
nmero de autores de cada libro:
Entrada/
Salida SELECT title_id, count (title_id) AS Numero_De_Autores
FROM titleauthor
GROUP BY title_id
HAVING count (title_id) > 1
title_id Numero_de_Autores
.
BU1032 2
BU1111 2
MC3021 2
PC8888 2
PS1372 2
PS2091 2
TC7777 3

La clusula GROUP BY ALL devuelve todos los agrupamientos, incluyendo los
que no cumplan con los criterios de la clusula WHERE

Si desea buscar todos los libros con ventas anuales del ao en curso (ytd_sales) de
$4,000 o ms y mostrar todos los IDs de ttulo (title_ID), puede ejecutar la siguiente
consulta:

Entrada/
Salida SELECT title_id , ytd_sales
FROM titles
WHERE (ytd_sales>=4000)
GROUP BY ALL title_id, ytd_sales

Title_id ytd_sales
...
BU1032 4095
BU1111 3876
BU2075 18722
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
BU7832 4095
MC2222 2032
MC3021 22246
MC3026 NULL
PC1035 8780
PC8888 4095
PC9999 NULL
PS1372 375
PS2091 2045
PS2106 111
PS3333 4072
PS7777 3336
TC3218 375
TC4203 15096
TC7777 4095

Observe que tambin se muestran todos los libros que no cumplen los criterios de la
clusula WHERE.


Compute y compute by

Las clusulas COMPUTE y COMPUTE BY producen nuevas filas de datos de
resumen y detalles, Utilizan las funciones de agregado especificadas anteriormente. La
clusula COMPUTE devuelve filas de detalles y una fila de resumen de total general. La
clusula COMPUTE BY devuelve nuevas filas de datos de resumen, en forma muy
parecida a la clusula GROUP BY, pero devuelve las filas como subgrupos con valores de
resumen.

La sintaxis para las clusulas COMPUTE y COMPUTE BY es la siguiente:

SELECT lista_columnas
FROM lista_tablas
WHERE criterios_bsqueda
[COMPUTE] expresin (es)_agregado(s)
[BY] lista_columnas

En los siguientes ejemplos se comparan las clusulas COMPUTE BY y GROUP
BY:






Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Entrada/
Salida SELECT type, SUM (ytd_sales)
FROM titles
GROUP BY type

Type ytd_sales
.. ..
business 30788
mod_cook 24278
popular_comp 12875
psychology 9939
trad_cook 15471
UNDECIDED NULL

Si utiliza la clusula COMPUTE BY, tambin debe incluir la clusula ORDER BY.
Si su clusula ORDER BY es:
ORDER BY title_id, pub_id, au_id

Entonces su clusula COMPUTE BY puede ser una de las siguientes:
COMPUTE funcin_agregado (nombre_columna)
By title_id, pub_id, au_id
COMPUTE funcin_agregado (nombre_columna)
By title_id, pub_id
COMPUTE funcin_agregado (nombre_columna)
By title_id

Como puede ver, las columnas mostradas en la clusula COMPUTE BY deben ser
iguales que, o un subconjunto de, las columnas de la clusula ORDER BYE. El orden de
las columnas en COMPUTE BY debe ser el mismo que las de ORDER BYE, y no puede
saltarse columnas. Ahora escriba lo siguiente y vea los resultados:

Entrada/
Salida SELECT type, ytd_sales
FROM titles
ORDER BY type
COMPUTE SUM (ytd_sales) BY type


type ytd_sales
..
business 4095
business 3876
business 18722
business 4095

Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
sum
========
30788


type ytd_sales
..
mod_cook 2032
mod_cook 22246

sum
========
24278


type ytd_sales
..
Popular_comp 8780
Popular_comp 4095
Popular_comp NULL


sum
========
12875


type ytd_sales
..
Psychology 375
Psychology 2045
Psychology 111
Psychology 4072
Psychology 3336

sum
========
9939


type ytd_sales
..
trad_cook 375
trad_cook 15096
trad_cook 4095
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

sum
========
19566


type ytd_sales
..
UNDECIDED NULL

sum
========
19566

(24 filas afectadas)


Superagregados (rollup y cube)

Para producir filas de resumen adicionales, conocidas como superagregados, utilice
los operadores ROLLUP y CUBE. Estos operadores se utilizan con la clusula GROUP
BY.
A continuacin se muestra la sintaxis para los operadores ROLLUP y CUBE:

SELECT lista_columna
FROM lista_tablas
WHERE criterios_bsqueda
[GROUP BY [ALL] extresi (es)_noagregado (s)
[WITH {ROLLUP | CUBE} ] ]

El operador ROLLUP se utiliza comnmente para producir promedios o sumas
consecutivos. Esto se hace aplicando la funcin de agregado en la instruccin SELECT
lista_columnas a cada columna de la clusula GROUP BY, avanzando de izquierda a
derecha. Qu significa eso? Lo comprender ms fcilmente viendo un ejemplo:

Entrada/
Salida SELECT type, pub_id
SUM (ytd_sales) AS ytd_sales
FROM titles
GROUP BY type, pub_id
WITH ROLLUP



Type pub_id ytd_sales
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
. .. ..
Business 736 18722
Business 1389 12066
Business NULL 30788
Mod_cook 877 24278
Mod_cook NULL 24278
Popular_comp 1389 12875
Popular_comp NULL 12875
Psychology 736 9564
Psychology 877 375
Psychology NULL 9939
Trad_cook 877 19566
Trad_cook NULL 19566
UNDECIDED 877 NULL
UNDECIDED NULL NULL
NULL NULL 97446

(15 filas afectadas)

El operador ROLLUP produce una fila en la salida por cada fila de la tabla titles con
un solo tipo (type) y pub_id. Luego muestra las ventas anuales del ao en curso (ytd_sales)
para cada elemento y produce una fila adicional para cada tipo con informacin de
resumen. En este ejemplo, las filas con NULL en el campo pub_id muestran la suma de
todas las ventas del campo y td_sales para ese grupo de tipos.
Ahora deje que se lo explique en espaol. La tabla titles contiene dos filas que
tienen tanto un tipo Business como un pub_id nico (la tabla verdadera contiene un total de
cuatro libros de tipo Business, en donde un autor [pub_id] escribe tres libros y otro autor
escribe el cuarto). Cada autor que escribe libros de negocios tiene ventas anuales
(ytd_sales) de 18,722 y de 12,066, respectivamente.
Luego, el operador ROLLUP crea un campo de subtotal que suma todos los libros
de tipo Business (18,722 +12,066=30,788). Despus, la consulta hace lo mismo para cada
grupo de tipos de libros y de autores en la tabla, y muestra un total (97,446) indicado con
un valor NULL en los campos type y pub_id.
El operador CUBE produce filas de superagregados al utilizar todas las
combinaciones posibles de las columnas de la clusula GROUP BY. Al igual que el
operador ROLUUP, el operador CUBE produce los promedios consecutivos y las sumas
consecutivas, pero tambin hace referencia cruzada en las columnas para devolver filas de
resumen adicionales. Ahora considere este ejemplo:

Entrada
/Salida SELECT type, pub_id,
SUM (ytd_sales) AS ytd_sales
FROM titles
GROUP BY type, pub_id
WITH CUBE
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital





Type pub_id ytd_sales
. .. ..
Business 736 18722
Business 1389 12066
Business NULL 30788
Mod_cook 877 24278
Mod_cook NULL 24278
Popular_comp 1389 12875
Popular_comp NULL 12875
Psychology 736 9564
Psychology 877 375
Psychology NULL 9939
Trad_cook 877 19566
Trad_cook NULL 19566
UNDECIDED 877 NULL
UNDECIDED NULL NULL
NULL NULL 97446
NULL 736 28286
NULL 877 44219
NULL 1389 24941

(18 filas afectadas)


El operador CUBE produce una fila en la salida por cada fila de la tabla titles que
tenga un solo tipo (type) y pub_id. Luego muestra las ventas del campo ytd_sales para
cada elemento, y produce una fila adicional por cada tipo con formacin de resumen, y otra
fila por cada pub_id. En este ejemplo, las filas con NULL en el campo pub_id muestran la
suma de todos los valores del campo ytd_sales para ese grupo de tipos las filas con NULL
en el campo type muestran la suma de todos los valores del campo y td_sales para ese
grupo de valores de pub_id.
Al utilizar ROLLUP o CUBE, se colocan algunas restricciones en la clusula
GROUP BY. Puede tener un mximo de 10 columnas en la clusula GROUP BY, la suma
de lo tamaos de esas columnas no puede ser mayor de 900 bytes en tamao, y no puede
utilizar la clusula GROUP BY ALL.





Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Implementacin de combinaciones

Para combinar tablas, debe comparar una o ms columnas de una tabla con una o
ms columnas de una o ms tablas. El resultado de la comparacin produce nuevas filas al
combinar las columnas incluidas en SELECT lista_columnas provenientes de las tablas
combinadas que cumplen con las condiciones de combinacin. Al combinar tablas, puede
utilizar ya se ala sintaxis anterior de SQL del ANSI 1989, o la sintaxis de combinaciones
ms reciente, la de 1999.

Sintaxis de combinaciones de SQL del ANSI de 1999

Las instrucciones de combinaciones para la sintaxis ANSI ms reciente aparecen en
la clusula FROM de la instruccin SELECT:


SELECT nombre_tabla.nombre columna [, ]
FROM {nombre_tabla [tipo_combinacin] J OIN nombre_tabla
ON criterios_bsqueda} [, ]
WHERE criterios_bsqueda

La clusula WHERE selecciona filas a devolver de las filas combinadas. Puede
elegir de entre tres tipos de instrucciones de combinacin ANSI: INNER J OIN, OUTER
J OIN Y CROSS J OIN.

Sintaxis de combinaciones SQL de 1989

Aunque SQL Server 2000 an ofrece soporte para la sintaxis SQL de 1989, le
sugerimos utilizar mejor la sintaxis ms reciente del estndar ANSI:

SELECT nombre_tabla.nombre columna [, ]
FROM lista_tablas
WHERE } nombre_tabla.nombre_columna
Operador_combinacin nombre_tabla.nombre_columna [, ]


Si utiliza versiones anteriores de la sintaxis, la clusula FROM muestra las tablas
involucradas en la combinacin. La clusula WHERE incluye las columnas que van a
combinarse y puede incluir criterios de bsqueda adicionales que determinan las filas que
van a devolverse. Los operadores de combinacin para la sintaxis de SQL Server son los
siguientes: =,>,<,>=<=,><,!>y <.

Combinaciones internas

Las combinaciones conectan dos tablas con base en una condicin de combinacin
que produce resultados en forma de una tabla nueva, con las filas que satisfacen la
condicin de combinacin. Las combinaciones internas producen informacin cuando se
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
encuentra informacin que concuerda en ambas tablas. Los tipos ms comunes de
combinaciones internas son las combinaciones equivalentes y las naturales. En una
combinacin equivalente, los valores de las columnas se comparan para ver si son iguales,
y las columnas redundantes se muestran como columnas en el conjunto de resultados. En
una combinacin natural, las columnas redundantes no se muestran dos veces.

Vea el siguiente ejemplo para que comprenda mejor esta explicacin. En este
ejemplo, la instruccin SELECT selecciona todas las columnas de las tablas publishers y
pub_info cuando las columnas pub_id de las tablas combinadas son iguales. Observe la
columna pub_id redundante.

Instruccin ANSI anterior

Entrada SELECT pub_id, pub name, pr_info
FROM publishers, pub info
WHERE publishers.pub_id =pub_infor.pub_id

Instruccin ANSI preferida

Entrada/ SELECT pub_id, pub_name, pr_info
Salida FROM publishers
INNER J OIN pub_info ON publishers.pub_id =pub:info.pub_id


pub_id pub_name pr_info
----------- ------------------------------- -------------------
736 New Moon Books This is sample text data for New Moon
877 Binent & Hardley This is sample text data for Binnet &
1389 Algodata Infosystems This is sample text data for Algodata
1622 Five Lakes Publishing This is sample text data for Five Lakes
1756 Ramona Publishers This is sample text data for Ramona
9901 GGG&G This is sample text data for GGG&G
9952 Scootney Books This is sample text data for Scootney
9999 Lucerne Publishing This is sample text data for Lucerne
(8 filas afectadas)










Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Combinaciones naturales


En una combinacin natural, los valores de las columnas se comparan par aver si
son iguales, pero las columnas redundantes se eliminan en el conjunto de resultados. En el
siguiente ejemplo, la instruccin SELECT selecciona todas las columnas de la tabla
publishers y todas las columnas excepto pub_ id de la tabla pub_infor.

Instruccin ANSI anterior



Entrada
SELECT publishers.*, pub_infor.logo, pub:infor.pr_info
FROM publishers, pub_info
WHERE publishers.pub_id =pub_info.pub_id

Instruccin ANSI preferida

Entrada
SELECT publishers.*, pub_infor.logo, pub_info.pr_info
FROM publishers
INNER J OIN pub_info ON publishers.pub_id =pub_info.pub_id

Pu_id pub_name city state country
------------- ------------------------------ --------------------------------------------
736 New Moon Books Boston MA USA
877 Binent & Hardley Washington DC USA
1389 Algodata Infosystems Berkely CA USA
1622 Five Lakes Publishing Chigago IL USA
1756 Ramona Publishers Dallas TX USA
9901 GGG&G Mnchen NULL GER
9952 Scootney Books New York NY USA
9999 Lucerne Publishing Paris NULL FRA

(8 filas afectadas)

Combinaciones cruzadas o no restringidas

Las combinaciones cruzadas o no restringidas devuelven una combinacin de todas
las filas de todas las tablas en la combinacin como el conjunto de resultadas. Para crear
una combinacin cruzada o no restringida, utilice la clusula WHERE en la combinacin
de SQL Server de dos o ms tablas, pero en la combinacin ANSI utilice la palabra clave
CROSS J OIN.
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Al combinar todas las filas de todas las tablas involucradas en la combinacin se
produce un Producto cartesiano. En la mayora de los casos, este tipo de conjunto de
resultados no puede utilizarse a menos que su intencin sea encontrar todas las
combinaciones posibles, como en algn tipo de anlisis estadsticos o matemticos.
Vindolo de otra forma, si considera a cada tabla como una matriz y luego multiplica las
matrices, obtiene una nueva matriz con todas las combinaciones (vea la figura 3.1) Cada
fila de la Tabla1 se suma a cada fila de la Tabla 2. Si suma el nmero de columnas de
ambas tablas, obtendr el nmero resultante de columnas. Si multiplica el nmero de filas
de la Tabla1 por el nmero de filas de la Tabla2, obtendr el nmero total de filas devueltas
por su consulta.

Figura 3.1 Creacin de un producto cartesiano

La tabla 1 es de 2 x 3



A B
C D
E F

La tabla 2 de de 3 x 3
1 2 3
4 5 6
7 8 9



A B 1 2 3
C D 1 2 3
E F 1 2 3
A B 4 5 6
C D 4 5 6
E F 4 5 6
A B 7 8 9
C D 7 8 9
E F 7 8 9

Al realizar una combinacin cruzada, obtendr un conjunto de resultados de 5 x 9

Como ejemplo de la creacin de un Producto cartesiano por medio del uso de una
combinacin no restringida, supongamos que desea mostrar los ttulos de todos los libros y
sus IDs de autor. Para hacerlo, ejecute la siguiente consulta:

Sintaxis ANSI anterior
Entrada SELECT titles.title, titleauthor.au_id
FROM titles, titleauthor.aud_id
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Sintaxis ANSI preferida
Entrada SELECT titles.title, titleauthor.au_id
FROM titles CROSS J OIN titleauthor

Salida
Title aud_id
---------- ------------------------------------------------------
The Busy Executives Database Guide 172-321176
The Busy Executives Database Guide 213-46-8915
[] []
Sushi, Anyone? 998-72-3567
Sushi, Anyone? 998-72-3567
Los resultados de la consulta producen 450 filas, con 18 filas en tabla titles y 25
filas en tabla titleauthor. Puesto que una combinacin no restringida o cruzada devuelve
todas las combinaciones posibles, obtiene 18 x 25 =450 fila algo distinto al resultado
deseado, no es as?

Para evitar la ejecucin de una combinacin no restringida, debe restar 1 al nmero
de tablas que va a combinar. N -1 indica el nmero de clusulas de combinacin necesarias,
en donde N es el nmero de tablas involucradas en la combinacin (por decir, tres tablas, 3
1=2, dos clusulas de combinacin). Puede tener ms clusulas de combinacin si va a
realizar la combinacin con base en una clave compuesta.

Combinaciones externas

Mediante el uso de combinaciones externas puede restringir filas de una tabla
mientras permite todas las filas de otra tabla como su conjunto de resultados. Uno de los
usos ms comunes para este tipo de combinacin es la bsqueda de registros hurfanos.
Los operadores de combinacin externa y las palabras clave para la sintaxis de NSI se
muestran a continuacin:

LEFT OUTER J OIN Incluye todas las filas de la primera tabla y slo las filas que
concuerden de la segunda tabla

RIGHT OUTER J OIN Incluye todas las filas de la segunda tabla y slo las filas que
concuerden de la primera tabla

FULL OUTER J OIN Incluye todas las filas que no concuerden de ambas tablas, as
Como las que concuerden

Suponga que tiene una tabla de clientes, y una de pedidos. Estas dos tablas estn
relacionadas mediante el campo IDCliente. Con una combinacin equivalente o natural, se
devuelven registros slo cuando el campo IDCliente tiene una coincidencia en ambas
tablas. Las combinaciones externas pueden ser tiles para obtener una lista de clientes, y si
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
ocurre la casualidad de que un cliente tenga un pedido, esa informacin del pedido tambin
aparece. Si el cliente no tiene un pedido, la informacin de la tabla de pedidos se muestra
como NULL.

Si realiza una combinacin externa izquierda en estas tablas y especifica primero la
tabla de clientes, se devuelven los resultados deseados. Si especifica una combinacin
externa derecha, sus resultados muestran todos los pedidos. Si un pedido llega a tener un
IDCliente que no coincida con un IDCliente en la tabla de clientes, la informacin del
cliente es NULL. (Si sigue las reglas de integridad referencial, nunca debe tener un pedido
sin un IDCliente vlido. Si ste es el caso, su combinacin externa derecha tendr los
mismos resultados que una combinacin equivalente o una natural todos los pedidos y
clientes cuando ocurra una coincidencia en el IDCliente)

Las combinaciones externas izquierda y derecha pueden devolver los mismos
resultados, dependiendo del orden de las tablas. Por ejemplo, estas dos combinaciones
devuelven la misma informacin:

Clientes.IDCliente *= Pedidos.IDCliente

Y

Pedidos.IDCliente =* Clientes.IDCliente

Si desea buscar todos los ttulos, se hayan vendido copias o no, y el nmero de
copias vendidas, puede enviar la siguiente consulta utilizando la sintaxis SQL ms
reciente:
Entrada SELECT titles.title_id, titles.title, sales.qty
FROM titles LEFT OUTER J OIN sales
ON titles.title_id =sales.title_id

Salida

Title_id title qty
------------- --------------------------------------------------
BU1032 The Busy Executivs D 5
BU1032 The Busy executives D 10
BU1111 Cooking with Computers 25
BU2075 You Can Combat Compute 35
BU7832 Straight Talk About Co 15
MC2222 Silicon Valley Gastron 10
MC3021 The Gourmet Microwave 25
[] [] []
TC4203 Fifty Years in Bucking 20
TC7777 Sushi, Anyone? 20

Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
(23 filas afectadas)

Autocombinaciones

Como el nombre lo sugiere, una autocombinacin correlaciona filas de una tabla
con otras filas de la misma tabla. Las consultas de comparacin para la misma informacin
se utilizan principalmente para las autocombinaciones. Por ejemplo, si desea mostrar
todos los autores que vivan en la misma ciudad y tenga el mismo cdigo posta, puede
comparar la ciudad y el cdigo postal ejecutando la siguiente consulta:


Sintaxis ANSI anterior

Entrada SELECT au1.au_fname, au1.au:lname,
au2.au_fname, au2.au_lname,
au1.city, au1.zip
FROM uthors au1, authors au2
WHERE au1,city =au2.city
AND au1.zip =au2.zip
AND au1_id <au2-au_id
ORDER BY au1.city, au1.zip

Sintaxis ANSI preferida

Entrada

SELECT au1.au_fname, au1.au_lname,
Au2.au_fname, au2.au_lname,
Au1.city, au1.zip
FROM authors au1
INNER J OIN authors au2 ON au1.city =ay2.city
AND au1.zip =au2.zip
WHERE au1au_id <au2.au_id
OIRDER BY au1.city, au1.zip


Salida

Au_fname au_lname au_fname au_lname city zip
Cheryl Carson Abraham Bennet Berkeley 94705
Dean Straight Dirk Stringer Oakland 94609
Dean Straight Livia Karsen Oakland 94609
Dirk Stringer Livia Karsen Oakland 94609
Ann Dull Sheryl Hunter Palo Alto 94301
Anne Ringer Albert Ringer Salt Lake City 84152
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

(6 filas afectadas)

Observe que al realizar una autocombinacin en una tabla, se crea un alias para el
nombre de la tabla. El alias se utiliza para que una tabla se trate en forma lgica como dos
tablas.





Trabajo con subconsultas

Una instruccin SELECT anidada dentro de otra instruccin SELECT se conoce
comnmente como una subconsulta. Las subconsultas pueden producir los mismos
resultados que una operacin de combinacin.

Como utilizar una subconsulta

Una instruccin SELECT puede anidarse dentro de otra instruccin SELECT,
INSERT, UPDATE o delete. Si la subconsulta devuelve un solo valor, como un agregado,
ste puede utilizarse en cualquier lugar en donde pueda utilizarse un solo valor. Si la
subconsulta devuelve una lista, como una sola columna con muchos valores, puede
utilizarse slo en la clusula WHERE.

En muchos casos puede utilizarse una operacin de combinacin en lugar de una
subconsulta; no obstante, algunas instancias pueden procesarse slo como subconsulta. En
algunos casos, una operacin de combinacin puede producir un mejor rendimiento que
una subconsulta, pero por lo general se observa muy poco diferencia en el rendimiento.

La subconsulta siempre est encerrada entre parntesis y, a menos que vaya a
ejecutar una subconsulta correlacionada, termina antes de que se procese la consulta
externa. Una subconsulta puede contener otra subconsulta, y esa subconsulta puede
contener una subconsulta, y as sucesivamente. No existe un lmite prctica para el nmero
de subconsultas que pueden procesarse, esto slo depende de los recursos del sistema.


La sintaxis para una instruccin SELECT anidada es la siguiente:

(SELECT [ALL | DISTINCT] lista_columnas_subconsulta
[FROM lista_tablas]
[WHERE clsula]
[GROUP BY clusula]
[HAVING clusula])

Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Tipos de subconsultas

Una subconsulta puede devolver una sola columna o un solo valor en cualquier
lugar en donde pueda utilizarse una expresin de un solo valor, y puede compararse
utilizando los siguientes operadores =,<,>,<=,>=, <>, !>y!<. Puede devolver una sola
columna o muchos valores que se pueden utilizar con el operador de comparacin de listas
IN en la clusula WHERE. Una subconsulta tambin puede devolver muchas filas que
pueden utilizarse para comprobar la existencia, utilizando la palabra clave EXIST en la
clusula WHERE.

Para buscar todos los autores que vivan en el mismo estado que la librera que vende
los libros de sus editoriales, puede ejecutar cualquiera de las siguientes consultas:

Entrada SELECT DISTINCT au_fname, au_lname, state
FROM authors
WHERE state IN
(SELECT state FROM.stores)

Entrada SELECT DISTINCT au_fname, au_lname, state
FROM authors
WHERE EXISTS
(SELECT * FROM stores
WHERE state =authors.state)

Salida au_fname au_lname state
-------------------------- --------------------------------------------

Abraham Bennet CA
Akiko Yokomoto CA
Ann Dull CA
Burt Gringlesby CA
[] [] []
Sheryl Hunter CA
Stearns MacFeather CA

(16 Filas afectadas)

Existen algunas restricciones en relacin con lo que se puede hacer con las
subconsultas. Puede crear y utilizar una subconsulta si sigue estas reglas:

Debe estar encerrada entre parntesis.
Si se utiliza cuando se emplea una expresin de un solo valor, debe devolver un solo
valor.
No puede utilizarse en la clusula ORDER BY
No puede contener una clusula ORDER BY, COMPUTE ni SELECT INTO
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
No puede tener ms de una columna en la lista_columnas si se utiliza con la
clusula IN.
Debe tener SELECT * si se utiliza con la clusula EXISTS.
Los tipos de datos text e image no se permiten en la lista de seleccin (excepto por
el uso de *)
No puede incluir las clusulas GROUP BY Y HAVING si se utiliza con un
operador de comparacin sin modificaciones uno (sin la palabra clave ANY u
ALL).


Subconsultas correlacionadas

Una subconsulta correlacionada hace referencia a una tabla de la consulta externa y
evala cada fila de la columna externa. En este aspecto, una subconsulta correlacionada es
distinta a una subconsulta normal, ya que la subconsulta depende de los valores de la
consulta exterior. Una subconsulta normal se ejecuta de manera independiente de la
consulta externa.

En el siguiente ejemplo, la consulta de combinacin se vuelve a escribir como
subconsulta correlacionada. Las consultas devuelven la misma informacin y responde a la
siguiente instruccin: Mustrame los autores (authors) que vivan en la misma ciudad (city)
y cdigo postal (ZIP).

Utilizando J OIN

Entrada SELECT au1.au.fname, au1.au.lname,
Au2.au.fname, au2.au_lname,
Au1,city, au1.zip
FROM authors au1, authors au2
WHERE au1.city =au2.city
AND au1.zip =au2.zip
AND au1.au_id <au2.au_id
ORDER BY au1.city, au1.zip

Salida
Au.fname au_lname au_fname au_lname city zip
-----------------------------------------------------------------------------------------
Cheryl Carson Abrham Bennet Berkeley 94705
Dean Straight Dirk Stringer Oakland 94609
Dean Straight Livia Karsen Oakland 94609
Dirk Stringer Livia Karsen Oakland 94609
Ann Dull Sheryl Hunter Palo Alto 94301
Anne Ringer Albert Ringer Salt Lake City 84152

(6 filas afectadas)
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Utilizando una subconsulta correlacionada


Entrada SELECT au1.au_fname, au1.au_lname, au1.city, au1.zip
FROM authors au1
WHERE zip IN
(SELECT zip
FROM authors au2
WHERE au1.city =au2.city
AND au1.au_id <>au.au_id)
ORDER BY au1.city, au.zip
Salida

au_fname au_lname city zip
---------------------------------------------------------------------------

Abraham Bennet Berkeley 94705
Cheryl Carson Berkeley 94705
Livia Karsen Oakland 94609
Dirk Stringer Oakland 94609
Dean Straight Oakland 94609
Sheryl Hunter Palo Alto 94301
Ann Dull Palo Alto 94301
Albert Ringer Salt Lake City 84152
Anne Ringer Salt Lake City 84152

(9 filas afectadas)


Observe que se devuelven los mismos datos; slo tiene un formato distinto y son ms
legibles.

SELECT INTO

La instruccin SELECT INTO le permite crear una nueva tabla con base en los
resultados de la consulta. La nueva tabla se basa en las columnas especificadas en la lista
de seleccin, en las tablas incluidas en la clusula FROM y en las filas que selecciones en
la clusula WHERE. Puede crear dos tipos de tablas con una instruccin SELECT INTO:
permanentes y temporales. La sintaxis para instruccin SELECT INTO es la siguiente:

SELECT lista_columnas
INTO nuevo_nombre_tabla
FROM lista_tablas
WHERE criterios_bsqueda
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Al crear una tabla permanente, debe establecer la opcin SELECT
INTO/BULKCOPY. Al utilizar la instruccin SELECT INTO puede definir una tabla y
colocar datos en ella sin tener que pasar por el proceso usual de definicin de datos. El
nombre de la nueva tabla debe ser nico dentro de la base de datos, y debe estar en
conformidad con las reglas para las convenciones de nomenclatura de SQL Server.

Si las columnas de la lista_columnas de su instruccin SELECT no tienen ttulos,
como por ejemplo las columnas derivadas como funciones de agregado, las columnas de la
nueva tabla no tendrn nombres. Este resultado presenta dos problemas:

Los nombres de las columnas dentro de una tabla deben ser nicos, por lo tanto, si
ms de una columna no tiene encabezado, la instruccin SELECT INTO falla.
Si la nueva tabla contiene una columna sin encabezado, la nica manera de
recuperar esa columna es utilizando SELECT *.

Por estas razones, es una buena prctica crear alias de columnas para las columnas
derivadas. Adems como el uso de SELECT INTO es una operacin no registrada, debe
realizar una copia de seguridad de su base de datos inmediatamente despus de realizar esta
operacin. tAmbin puede utilizar la instruccin SELECT INTO para crear tablas
temporales.

Existen dos tipos de tablas temporales_

Una tabla temporal local est disponible slo durante la sesin actual del usuario
con SQL Server, y se quitan al terminar la sesin. Para crear una tabla temporal
local se antepone el smbolo #al nombre de la nueva tabla.
Una tabla temporal global est disponible en todas las sesiones de usuario con SQL
Server, y se quita cuando termina la ltima sesin de usuario que tenga acceso a la
tabla. Para crear una tabla global temporal se anteponen dos smbolos ##al nombre
de la nueva tabla.

Entrada SELECT title_id, title, price
INTO #tmpTitulos
FROM titles
GO
SELECT * FROM #tmpTitulos
GO

Salida title_id title price
------------------------------------------------------------------------------

BU1032 The Bsy Executives Database Guide 19.99
BU1111 Cooking with computers: Surreptitious 11.95
BU2075 You Can Combat Computer Stress! 2.99
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
[] [] []
TC3218 Onions, Leeks, and Garlic: Cooking Secrets 20.95
TC4203 Fifty Years in Buckinghham Palacio Kitchens 11.95
TC7777 Sushi, Anyone? 14.99

(18 filas afectadas)

Operador UNION

Puede combiner los resultados de dos o ms consultas en un solo conjunto de
resultados, utilizando el operador UNION. Las filas duplicadas se eliminan de manera
predeterminada; no obstante, al utilizar UNIO con la palabra clave. ALL se devuelven
todas las filas, incluyendo las duplicadas. La sintaxis del operador UNION es la siguiente:

SELECT lsita_columnas [INTO clusula]
[FROM clusula]
[WHERE CLUSULA]
[GROPU BY clusula]
[HAVING clusula]
[UNION [ALL]
SELECT lista_columnas
[FROM clusula]
[WHERE clusula]
[GROPU BY clusula]
[HAVING clusula]
[ORDER BY clusula]
[COMPUTE clusula]


A continuacin se describen las reglas para utilizar el operador UNION:

Todas las listas_lista_columnas deben tener el mismo nmero de columnas, mismo
orden de columnas y tipos de datos similares.
Si utiliza clusula INTO en una de las consultas, debe utilizarla en la primera
consulta.
Puede utilizar clusulas GROPU BY y HAVING slo dentro de consultas
individuales.
Las clusulas ORDER BY Y COMPUTE se permiten slo al final de la instruccin
UNIO, para definir el orden de los resultados finales, o para calcular valores de
resumen.
Los nombres de las columnas vienen de la primera instruccin SELECT
lista_columnas.

En el siguiente ejemplo puede utilizar el operador UNION para extraer datos de dos
consultas separadas y combinar los dos conjuntos de resultados en uno solo.
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Entrada

SELECT title, stro_name, ord_date, qty
FROM title, sales, stores
WHERE titles.title_id =slaes.title_id
AND stores.stor_id =sales.stor_id
UNION
SELECT title, Sin ventas?, NULL, NULL
FROM titles
WHERE TITLES_ID NOT IN
(SELECT title_id FROM sales)
ORDER BY qty



Salida

Title stor_name ord_date qty

Net Etiquette No Sales NULL NULL
The Psychology No Sales NULL NULL
Is Anger The Enemy ? Eric The Read Books Sept 13 1994 3
[] [] [] []
Onions, Leeks, and Garlic NewsBrews J un 15 19.. 40
Secrets of Silicon Valley Barnums May 24 1993 50
Is Anger the enemy? Barnums Sept 13 1994 75

(23 filas afectadas).

Modificacin de datos

Esta leccin est enfocada en la modificacin de los datos de sus tablas de SQL
Server utilizando las instrucciones INSERT, UPDATE Y DELETE. Si embargo, antes de
poder aprender acerca de las instrucciones en s, veremos la relacin existente entre las
modificaciones de datos y el registro de transacciones.

Registro de transacciones

SQL Server mantiene el registro de los cambios en una base de datos registrando
casi cualquier cambio realizado en la base de datos, y colocndolo en el registro de
transacciones. A medida que modifique sus datos, tenga en cuenta que todos los cambios
se escriben en el registro de transacciones. Al realizar una operacin INSERT, se escribe
una copia de la nueva fila completa en el registro de transacciones; al ejecutar una
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
instruccin DELETE se escribe una copia de la fila eliminada completa en el registro de
transacciones.

Con la operacin UPDATE el resultado no es tan simple. Para algunas operaciones
UPDATE, SQL Server slo registra los bytes que se estn modificando. Para muchas otras
operaciones UPDATE, SQL Server debe crear dos entradas en el registro: la versin
anterior completa (eliminada) de la fila y luego la versin nueva completa (insertada) de la
fila.

Se aplican algunas excepciones a los requerimientos de registro antes mencionados,
como la herramienta BCP (programa de copia masiva), la cual es equivalente a varios
comandos INSERT. Si ejecuta la versin rpida de BCP, las filas individuales no se
escriben al registro de transacciones al insertarse en la tabla; sin embargo, en las tablas con
ndices, cada nueva fila individual se escribe en el registro de transacciones al grabar el
espacio que est siendo asignado durante la operacin BCP, sin importar si es una BCP
rpida. Ahora aprender acerca de TRUNCATE TABLE, que es equivalente a una
instruccin DELETE sin el registro de cada una de las filas eliminadas.

Ahora que se ha familiarizado un poco con la manera en que funciona el proceso de
registro de transacciones, es tiempo de ver ms de cerca las instrucciones que hacen que
ocurra el registro. Empezaremos con una inspeccin de la instruccin INSERT.

Antes de avanzar ms, tome unos minutos para copiar algo de sus datos en tablas de
respaldo para que despus pueda actualizar las tablas con las que est trabajando. Ejecute
las siguientes consultas para crear copias de sus tablas publishers y sales. Asegrese de
activar la opcin de base de datos Select Into o copia masiva antes de tratar de ejecutar
estas instrucciones.

Entrada
USE pubs
GO
EXEC sp_dboption pubs, Select into/bulkcopy, TRUE
SELECT * INTO tmpEditoriales FROM publishers
SELECT * INTO tmpTiendas FROM stores
SELECT * INTO TMPTitulos FROM titles
SELECT * INTO tmpVentas FROM sales
GO
EXEC sp_dboption pubs, Select into/bulkcopy, FALSE
GO

Insercin de Datos

La instruccin INSERT bsica agrega una fila a la vez en una tabla, variable de
tabla por medio de una vista en una tabla base. Al utilizar variaciones de la instruccin
INSERT bsica, puede agregar varias filas seleccionando datos de otra tabla o vista, o
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
ejecutando un procedimiento almacenado o funcin. En cualquiera de estos casos, debe
saber algo acerca de la estructura de la tabla en la que va a realizar las inserciones. Es til
conocer la siguiente informacin:

El nmero de columnas de la tabla
El tipo de datos de cada columna
El nombre de las columnas para algunas instrucciones INSERT
Restricciones y propiedades de columna tales como identity, y uiqueidentifier o
quantity >20

A continuacin se muestra la sintaxis para la instruccin INSERT:

INSERT [INTO]
{tabla_o_vista}
{{[(lista_columnas)]
VALUES
(DEFAULT |
expresin_constante } [,n] ) |
instruccin_select |
instruccin_execute } |
DEFAULT VALUES}
Tabla_o_vista ::=
{ nombre_tabla | nombre_vista
| funcin _rowset
}[,n]

El mtodo ms simple para averiguar el nmero de columnas, junto con sus
nombres y tipos de datos, es utilizar el cuadro de dilogo Propiedades de la tabla del
Administrador corporativo. Para abrir este cuadro de dilogo, siga los pasos descritos a
continuacin:

1. Seleccione una base de datos de la carpeta Base de datos.
2. Selecciones una tabla del objeto Tablas.
3. Haga clic con el botn derecho del ratn en la tabla y selecciones la opcin
Propiedades.

Si no tiene disponible el Administrador corporativo de SQL Server en estos
momentos, puede ejecutar el procedimiento almacenado de sistema sp_help para obtener la
misma informacin:

Entrada
USE pubs
Go
EXEC sp_help publishers
Go
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital


Parte de los resultados deben ser similares a los siguientes:


Salida
Column_name Type Computed Length
------------------ ------------ ------------------ -------------
Pub_id char no 4
Pub_name varchar no 40
City varchar no 20
State char no 2
Country varchar no 30

Esta salida le muestra el nombre de la columna, el tipo de datos y la posicin de
cada columna. Esta informacin es necesaria al crear sus instrucciones INSERT.

Tambin puede utilizar las vistas INFORMATION_SCHEMA para recopilar
informacin. Por ejemplo, para averiguar los nombres de las columnas y los tipos de datos
del ejemplo anterior, podra ejecutar la siguiente consulta:

Entrada
USE pubs
GO
SELECT * FROM INFORMATION_SCHEMA.Columns
WHERE TABLA_NAME =publishers
GO

Uso de la instruccin INSERT VALUES

La forma ms simple de la instruccin INSERT requiere de un valor para cada
columna de la tabla, en el orden en que dichas columnas fueron definidas. Este orden se
mostr en los ejemplos anteriores. Para insertar una fila individual en la tabla
tmpEditoriales, puede ejecutar el siguiente comando:

Entrada
USE pubs
GO
INSERT INTO tmpEditoriales
VALUES (9956, Una nueva editorial, Poulsbo, WA, USA)

Si tiene permiso para realizar una operacin INSERT en esta tabla y no est
violando ninguna restriccin, deber recibir el siguiente mensaje de SQL Server:


Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Salida
(1 filas afectadas)

La forma ms simple de la instruccin INSERT rquiere que se proporcione
explcitamente un valor para cada columna, y cada valor debe estar en la secuencia
correcta. Si desea proporcionar los valores en un orden distinto, o si no desea proporcionar
un valor explcito para una columna, puede utilizar otra variante de la instruccin INSERT.

La siguiente instruccin INSERT tiene una lista de nombres de columnas antes de la
clusula VALUES, y esa lista incluye slo un subconjunto de los nombres de las columnas
de la tabla. La lista de valores necesita entonces tener valores slo para las columnas de la
lista.

INSERT INTO tmpEditoriales (state, pub_id)
VALUES (AK, 9932)

Qu ocurre con las columnas que no se mencionan en la lista de columnas?. Si
inserta una nueva fila, cada columna debe tener algn valor. Si no proporciona un valor,
SQL Server debe ser capaz de determinar uno. Para que SQL Server pueda determinar un
valor, cada columna que no se mencione en la lista de columnas debe cumplir uno de los
siguientes criterios:

La columna cuenta con un valor predeterminado
La columna es una columna de identidad.
La columna permite valores nulos
La columna es del tipo rowversion (conocida como timestamp en versiones
anteriores de SQL Server).

En la instruccin INSERT anterior, no se proporciona un valor para el nombre de la
editorial, la ciudad ni el pas. En la tabla publishers, las columnas del nombre de la
editorial y de la ciudad permiten valores nulo, y el pas tiene un valor predeterminado de
USA. Despus de ejecutar la instruccin INSERT, puede ejecutar la siguiente consulta
para ver la fila que acaba de insertar:

Entrada
SELCT / FROM tmpEditoriales
WHERE pub_id =9932

Observe los valores nulos y el valor predeterminado para el pas (country):

Salida
Pub_id pub_name city state country
---------------------------------------------------------------------------------
9932 NULL NULL AK USA

Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Si rata de ejecutar una instruccin INSERT, pero omite los valores para las
columnas que no cumplen con uno de los criterios mencionados, obtendr un error.

Esta instruccin ISNERT no proporciona un valor para la columna pub_id:

Entrada/Salida
INSERT INTO tmpEditoriales(pub_name, city, state)
VALUES (Los mejores libros, New Orleans, LA)

Servidor: mensaje 515, nivel 16, estado 2, lnea 1
No se puede insertar el valor NULL en la columna pub_id,
tabla pubs_dbo.tmpEditoriales,
La columna no admite valores NULL. INSERT falla.
Se termin la instruccin

Observe que el mensaje de error no est totalmente completo. El problema no es
que la columna pub_id no permita valores NULL, sino que no tiene un valor
predeterminado, ni es una columna de identidad.

DEFAUL VALUES

Puede utilizar una o ms variaciones de la instruccin INSERT simple y una fila
individual, cuando no quiera incluir una lista de nombres de columnas, pero quiera que
SQL Server utilice valores predeterminados, cuando stos existan (tambin se incluyen los
valores nulos y de identidad). Puede utilizar la palabra clave DEFAULT en la lista de
valores como forma de indicar a SQL Server que debe determinar el valor que va a
utilizarse. Considere este ejemplo:

INSER INTO tmpEditoriales
VALUES (9950, DEFAULT, DEFAULT, AK, DEFAULT)

Si todas las columnas de una tabla tienen algn tipo de valor predeterminado que
SQL Server pueda determinar, puede utilizar una variacin ms. Simplemente puede
indicar a SQL Server que utilice todos los valores predeterminados por medio de las
palabras clave DEFAULT VALUES, como en la siguiente instruccin INSERT:

INSERT INTO tmpEditoirales DEFAULT VALUES

Insercin de datos por medio de SELECT

Todas las instrucciones INSERT anteriores insertan una fila individual en una tabla.
Si desea insertar ms de una fila a la vez, debe tener un origen en donde ya existan esas
filas. Ese origen es por lo general otra tabla o una combinacin entre dos o ms tablas, o
una vista. En esta forma de la instruccin INSERT, se utiliza una subconsulta para
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
determinar las filas de datos que van a insertarse. El conjunto de resultados de la
subconsulta se convierte en el conjunto de filas que van a insertarse. El nmero de
columnas en el conjunto de resultados de la subconsulta debe concordar con el nmero de
columnas en la tabla, y las columnas deben tener tipos de datos compatibles. En este
primer ejemplo crear una tabla para mantener el registro de las direcciones.

Entrada/Salida

INSERT INTO tblListaDirecciones
SELECT stor_name, stor_address, city, state
FROM tmpTiendas

(6 filas afectadas)

Los nombres de las columnas utilizadas en la subconsutla se ignoran; la tabla ya
tiene nombres de columnas asociados con cada campo.

Puede ejecutar otra instruccin ISNERT para agregar ms filas a su tabla
tblListaDirecciones. Suponga que desea agregar nombres y direcciones de la tabla authors.
En vez de un solo nombre, la tabla authors tiene una columna de nombre (au_fname) y una
columna de apellido (au_lname). La tabla tblListaDirecciones est esperando slo un valor
individual para su columna de nombre, por lo que puede concatenar el nombre y apellido
paterno para forma r uno solo. Puede incluir una coma y un espacio en el resultado
concatenado.


Entrada/Salida

INSERT INTO tblListaDirecciones
SELECT au_lname +, +au_fname, address, city, state
FROM authors
(23 filas afectadas)

Este ultimo ejemplo crea una tabla para mantener el registro de los nombres de
todas las editoriales y los ttulos de todos los libros que cada editorial haya publicado:

Entrada
CREATE TABLE TblListaEditoriales
SELECT pub_name, tigle
FROM TmpEditoriales LEFT OUTER J OIN tmpTitulos
ON tmpEditoriales.pub_id =tmpTitulos.pub_id



Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
SQL Server cuenta con una opcin ms para insertar filas en una tabla. Si un
procedimiento almacenado devuelve un solo conjunto de resultados, y si usted conoce el
nmero y el tipo de columnas que contiene ese conjunto de resultados, puede realizar una
operacin INSERT en una tabla, utilizando los resultados devueltos como resultado de
llamar a ese procedimiento almacenado.

El procedimiento almacenado de sistema sp_spaceused devuelve informacin acerca
de la manera en que una tabla individual utiliza el espacio. Puede crear una tabla para
guardar los resultados producidos al ejecutar este procedimiento e insertar (INSERT) una
fila en esta tabla, en intervalos regulares. Al hacer esto, con el tiempo puede vigilar el
crecimiento de la tabla.

Veamos la salida del procedimiento almacenado de sistema sp_spaceused (sus
resultados podran variar ligeramente):

Entrada/Salida
EXEC sp_spaceused tmpEditoriales

Name rows reserved data indez_size unused
-------------------------------------------------------------------------------------------------
TmpEditoriales 11 32KB 2 KB 4 KB 26 KB

Este procedimiento devuelve seis columnas, y todas son cadenas de caracteres. Aunque la
segunda columna parece numrica, en realidad no lo es, Puede determinar el tipo de
cualquier columna analizando el cdigo del procedimiento almacenado de sistema
s_spaceused o tratando de crear la tabla con una columna de tipo entero. Observer el
mensaje de error que obtiene al tratar de insertar una fila

Entrada

CREATE TABLE tblUsoDeEspacio
(strNombreTabla varchar (30) not null,
strReservado varchar (10),
StrDatos varchar (10),
StrTamaoIndice varchar (10),
strNoUtilizado varchar (10) )

Para realizar inserciones en esta tabla, puede ejecutar el procedimiento almacenado
de sistema sp_spaceused tmpEditoriales

Una muy buena extensin de esta capacidad de insertar filas desde un procedimiento
almacenado de sistema es la capacidad de insertar filas desde un procedimiento almacenado
remoto. Si tiene un procedimiento almacenado en un servidor remoto (vinculado) que
devuelva filas de una tabla, puede ejecutar ese procedimiento remoto para copiar todas las
filas del servidor remoto al servidor local. Para ejecutar un procedimiento remoto, debe
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
especificar lo siguiente en su llamada al procedimiento remoto: nombre del servidor,
nombre de la base de datos, nombre del propietario del procedimiento y nombre del
procedimiento.

Por ejemplo, si tiene un servidor SQL Server llamado VidaSalvaje con una base de
datos llamada Agua, y un procedimiento llamado Pez que tenga al dbo como su propietario,
puede ejecutar la siguiente consulta:

INSERT INTO tblTablaLocal
EXEC VidaSalvaje.Agua.dbo.Pez

Debe tomar en cuenta unas cuantas consideraciones adicionales al insertar datos en
una tabla con una columna de identidad.

Eliminacin de datos


Al utilizar el comando DELETE puede quitar una o ms filas de una tabla:

DELETE [FROM] {nombre_tabla | nombre_vista}
WHERE clusula]

La siguiente instruccin DELETE elimina todas las filas de la tabla tmpVentas:

Entrada/Saida

DELETE tmpVentas

(21 filas afectadas)

Para eliminar slo un subconjunto de filas en una tabla, de utilizar la clusula
WHERE, la cual le permite calificar las filas que van a eliminarse. La siguiente
instruccin DELETE elimina todos los libros que tengan la cadena NEW Moon Books en
la columna pub_name de la tabla tmpEditoriales:



Entrada
tmpEditoriales
WHERE pub_name =New Moon Books





Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Cmo realizar una operacin DELETE por medio de una tabla de bsqueda

Una slo instruccin DELETE slo puede eliminar filas de una tabla. No obstante,
SQL Server le permite incluir otra tabla en su instruccin DELETE para utilizarla como
tabla de bsqueda. A menudo, la tabla de bsqueda aparece en una subconsulta. En este
siguiente ejemplo, eliminaremos todos los ttulos publicados por New Moon Books. La
tabla tmpTitulos es la que se va a modificar, pero contiene slo el ID de la editorial, no su
nombre. Debe buscar en la tabla publishers para encontrar el ID de editorial de New Moon
Books (ya eliminaremos el ID de la tabla tmpEditoriales), lo cual a su vez determina las
filas a eliminar de la tabla tmpTitulos.

Entrada/Salida

DELETE FROM tblListaEditoriales
WHERE strNombreEditorial =
(SELECT pub_name FROM tmpEditoriales
WHERE pub_id =9956)
(1 filas afectadas)

La subconsulta tiene acceso a la tabla tmpEditoriales y devuelve un solo valor para
pub_name. Ese valor se utiliza entonces para determinar cules filas de tblListaEditoriales
se van a eliminar es decir, todas las filas que tengan un pub_name igual al valor devuelto.
Debe tener en cuenta que se devolver slo una fila, ya que pub_id es la clave primaria de
la talba publishers. Si la subconsulta pudiera devolver ms de una fila, tendra que utilizar
la palabra clave IN en vez del signo igual (=).

La consulta anterior podra haber sido escrita ms eficientemente como operacin
J OIN. Cuando utiliza J OIN con un comando DELETE, debe especificar dos palabras clave
FROM: una para especificar la tabla en la que se va a eliminar los registros, y una para
especificar la tabla de combinacin. Este ejemplo realiza la misma eliminacin mostrada
anteriormente:

DELTE tblListaEditoriales
FROM tblListaEditoriales le J OIN tmpEditoriales p
ON le.strNombreEditorial =p.pub_name
NAD p.pub_id =9956.
En el siguiente ejemplo se utiliza una tabla de bsqueda que devuelve ms de un
valor. Se eliminarn todas las filas de la tabla tmpVentas que indiquen la venta de libros de
negocios (business). La tabla tmpVentas guarda el campo title_id que indica el ID del
ttulo del libro vendido, pero no su tipo. Debe tener acceso a la tabla tmpTitulos para
averiguar cules valores del campo title_id corresponden a libros de negocios. Como
elimin la informacin de la tabla tmpVentas hace unos instantes, necesita volver a probar
la talba. Recuerde que, al iniciar esta leccin, se copi toda la informacin de ventas a otra
tabla. Ahora quiete la tabla tmpVentas y luego vuelva a crearla y a probarla por medio de
una instruccin SELECT INTO:
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Entrada
USE pubs
GO
DROP TABLE tmpVentas
GO
SELECT *INTO tmpVentas
FROM Sales
GO

Ahora elimine todas las filas de la tabla tmpVentas que sean de tipo business:

Entrada/Salida

DELETE tmpVentas
WHERE title_id IN
(SELECT title_id FROM tmpTitulos
WHERE type =business)
(5 filas afectadas)

La subconsulta accede la tabla tmpTitulos y devuelve una lista de valores del campo
title_id. Luego esos valores se utilizan para determinar qu filas de tmpVentas se van a
eliminar-es decir, todas las filas con un valor en el campo title_id que sea igual a cualquiera
de los valores devueltos.

Puede utilizar una extensin de Transact-SQL para escribir instrucciones DELETE
mediante una clusula FROM que contenga varias tablas. Este mtodo hace que la
instruccin DELETE parezca operacin de combinacin aunque slo una tabla tiene filas
eliminadas. La funcionalidad que se proporciona es la misma que con el uso de
subconsultas. La segunda tala se utiliza slo como tabla de bsqueda.

En el siguiente ejemplo se muestra la manera en que la instrucciones DELETE
utilizan varias tablas en una clusula FROM:

DELETE tmpVentas
From tmpVentas v J OIN tmpTitulos
ON v.title_id =t.title_id
WHERE t.type =business
La eleccin de utilizar la subconsutla o el mtodo de combinacin depende
principalmente de las preferencias de cada cual. Por lo general se prefiere utilizar el
mtodo de la subconsutla, ya que no hay confusin en relacin con cul tabla se est
modificando y cual se utiliza slo como tabla de bsqueda. Tambin debe tener en cuenta
que el mtodo de combinacin no es estndar ANSI. La ventaja del mtodo de
combinacine s que SQL Server por lo general proceso las combinaciones con ms
eficiencia que las subconsutlas.
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital

Uso de TRUNCATE TABLE

Hace unos momentos vimos un ejemplo de una instruccin DELETE sin clusula
WHERE que elimina todas las filas de la tabla. Si realmente desea eliminar todos los datos
de una tabla y dejar la estructura de la tabla intacta, puede recurrir a otra alternativa:

TRUNCATE TABLE tmpVentas
A diferencia de la instruccin DELETE, esta instruccin no devuelve un mensaje en
relacin con el numero de filas afectadas. A continuacin se muestran ms diferencias
entre la instruccin DELETE sin clusula WHERE y la instruccin TRUNCATE TALBE:

DELTE registra cada eliminacin de fila; TRUCNATE TABLE slo registra la
cancelacin de la asignacin de pginas completas de datos en el registro de
transacciones.
DELETE mantiene los ndices eliminando apuntadores uno a la vez y registrando
cada ajuste del ndice; TRUCNATE TABLE reduce los ndices en un solo paso y de
nuevo slo escribe la cancelacin de la asignacin de pginas en el registro de
transacciones.
TRUNCATE TABLE puede ser ejecutado slo por el propietario de la tabla, por un
miembro de la funcin de base de datos db_owner, o por la funcin de servidor
sysadmin; DELETE puede ser ejecutada por cualquier usuario que tenga los
permisos apropiados en la tabla.
Un desencadenador DELETE no se activa cuando se trunca una tabla, pero se activa
cuando se eliminan filas.
TRUNCATE TABLE vuelve a establecer cualquier valor de identidad al valor de
inicializacin: DELETLE no afecta al siguiente valor de identidad que se va a
utilizar.

Actualizacin de datos

La tercera instruccin de modificacin de datos que veremos hoy es UPDATE, la
cual le permite cambiar valores de columnas dentro de una fila existente.

Antes de seguir con la leccin, es un buen momento de asegurarse de tener datos
actualizados. Ejecute las siguientes consultas para actualizar las tablas tmpVentas,
tmpEditoriales,tmpTiendas y tmpTitulos:

Entrada

ENTRADA USE pubs
GO
DROP TABLE tmpVentas
DROP TABLE tmpEditoriales
DROP TABLE tmpTiendas
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
DROP TABLE tmpTiulos
GO
SELECT * INTO TmpEditoriales FROM publishers
SELECT * INTO TmpeVentas FROM sales
SELECT * INTO TmpTiendas FROM stores
SELECT * INTO TmpTitulos FROM titles
GO

Uso de la instruccin UPDATE

La instruccin UPDATE utilize la siguiente sintaxis:

UPDATE
{nombre_tabla | nombre_vista}

SET

Nombre_columna1 ={expresin1 | NULL |
(instruccin_select)}

[WHERE condiciones_bsqueda]

La clusula SET especifica las columnas que se van a actualizar. Aqu, al igual que
en la instruccin DELETE, la clusula WHERE es opcional.

La siguiente instruccin UPDATE modifica la columna y td_sales de la tabla
tmpTitulos, asignando un 0 a cada fila. Tal vez quiera actualizar esta columna al principio
de cada ao.
Entrada/Salida UPDATE tmpTitulos
SET ytd_sales =0
(18 filas afectadas)

Sin una clusula WHERE, esta instruccin modifica el valor de la columna y
td_sales, asignando un 0 a cada fila de la tabla

En el siguiente ejemplo se actualiza la columna de ciudad (city) para la editorial
Algodata Infosystems:

Entrada/Salida UPDATE tmpEditoriales
SET city = El Cerrito
WHERE pub_name =Algodata Infosystems?

(1 filas afectadas)

Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
Una instruccin UPDATE puede hacer que el Nuevo valor de la columna dependa
del valor original. En el siguiente ejemplo se cambia el precio de todos los libros de
psicologa (psychology) a un 10 por ciento menos que el precio actual:
Entrada/Salida
Update TmpTitulos
SET price =price * 0.90
WHERE type =psychology

(5 filas afectadas)

Una instruccin UPDATE puede modificar ms de una columna. La palabra SET
ocurre slo una vez, y las distintas columnas que van a modificarse se separan por comas.
La siguiente instruccin UPDATE incrementa el precio de todos los libros populares de
computacin (popular_comp) en un 20 por ciento, y anexa la cadena (incremento en el
precio) al campo de anotaciones (notes de las mismas filas:

Entrada/Salida
UPDATE tmpTitulos
SET price =price * 1.2, notes =notes + (incremento en el precio)
WHERE type =popular_comp

(3 filas afectadas)

Realizar una operacin UPDATE por medio de una tabla de bsqueda

Una sola instruccin UPDATE nicamente puede cambiar filas de una tabla. No
obstante, SQL Server le permite incluir otra tabla en su instruccin UPDATE para ser
utilizada como tabla de bsqueda. Por lo general, la tabla de bsqueda aparece en una
subconsulta, la cual puede aparecer en la clusula WHERE o en la clusula SET de la
instruccin UPDATE. En este siguiente ejemplo, modificaremos la editorial de todos los
libros de negocios para que sea New Moon Books:

Entrada/Salida

UPDATE tmpTitulos
SET pub_id =
(SELECT pub_id FROM tmpEditoriales
WHERE pub name =New Moon Books)
WHERE type =business

(4 filas afectadas)

El nombre de la editorial aparece slo en la tabla tmpEdiotirales, pero debe
modificarse la tabla tmpTitulos. La subconsulta accede tmpEditoriales y devuelve el ID de
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
editorial para New Moon Books. Este valor se utiliza como el nuevo valor en la columna
pub_id de la tabla tmpTitulos.

Al igual que con la instruccin DELETE, puede utilizar una extensin de Transact
SQK para escribir instrucciones UPDATE que utilicen una clusula FROM que contenga
varias tablas. Este mtodo hace la instruccin UPDATE aparezca como operacin de
combinacin, aunque slo se modifican las filas de una tabla. La funcionalidad que se
proporciona es la misma que la de las subconsultas: la segunda tabla se utiliza slo como
tabla de bsqueda.

En el siguiente ejemplo se muestra cmo reescribir la instruccin UPDATE anterior,
utilizando varias tablas en una clusula FROM:

UPDATE tmpTitulos
SET tmpTitulos.pub_id =e.pub_id
FROM tmpTitulos t J OIN tmpEditoriales e
ON t.pub_id =e.pub_id
WHERE e.pub_name =New Moon Books
AND type =business

La eleccin de utilizar el mtodo de la subconsulta o el mtodo de la combinacin
depende principalmente de la preferencia de cada cual. Al igual que la instruccin
DELETE, el mtodo de subconsutla se ve mucho ms claro en cuanto a saber cul tabla se
va a modificar, cul va a ser el nuevo valor de pub_id, y qu filas se van a modificar.
Adems recuerde que el mtodo de combinacin no es estndar ANSI.

Algunas instrucciones UPDATE tambin son un poco ms complicadas de escribir
si se utiliza el mtodo de combinacin. Uno de estos casos es cuando la instruccin
UDATE utiliza subconsultas tanto para la clusula SET como para la clusula WHERE.
En este ejemplo se cambia la editorial de todos los libros de psicologa (psychology)
publicados por New Moon books, para que sean Binnet &Hardley:

Entrada/Salida
UPDATE tmpTitulos
SET pub_id
(SELECT pub_id FROM tmpEditoriales
WHERE pub_name =Binnet & Hardley)
WHERE type =psychology AND pub_id =
(SELECT pub_id FROM tmpEditoriales
WHERE pub_name =New Moon Books)

(4 filas afectadas)

De Nuevo, el nombre de la editorial aparece slo en la tabla tmpEditoriales, pero la
tabla tmpTitulos es la que necesita modificarse. La primera subconsulta accesa la tabla
Universidad del Mar

Carrera Tcnica: Tcnico Universitario en Computacin
Asignatura: Base de Datos


Udelmar Digital
tmpEdiotirales y devuelve el ID de editorial para Binnet & Hardley. Este valor de pub_id
se utiliza como el nuevo valor en la columna pub_id de tmpTitulos. La segunda
subconsutla accede de nuevo la tabla tmpEditoriales para devolver el valor de pub_id para
New Moon Books. Este pub_id se utiliza para determinar cules filas de la tabla
tmpTitulos necesitan actualizarse.
Esta instruccin UPDATE sera mucho ms difcil de escribir utilizando el mtodo
de combinacin, ya que la tabla tmpEditoriales tendra que aparecer dos veces: una para
determinar el nuevo valor de pub_id y otra para determinar el pub_ id de las filas a ser
modificadas. Esta es slo otra razn por la que se prefiere el mtodo de subconsulta, en
lugar del mtodo de combinacin.
Universidad del Mar

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