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
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.
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] %
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
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
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
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
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
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:
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:
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:
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
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:
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