34
Tutorial de SQL por Claudio INDIC 1. Introducción 1.1 Componentes del SQL 1.2 Comandos 1.3 Cláusulas 1.4 Operadores Lógicos 1.5 Operadores de Comparación 1.6 Funciones de Agregado . Consultas de Selección 2.1 Consultas Básicas 2.2 Ordenar los Registros 2.3 Consultas con Predicado 2.4 Alias 2.5 Bases de Datos Externas . Criterios de Selección 3.1 Operadores Lógicos 3.2 Intervalos de Valores 3.3 El Operrador Like 3.4 El Operador In 3.5 La cláusula WHERE . Agrupamiento de Registro 4.1 El cláusula GROUP BY 4.2 AVG (Media Aritmética) u Agregadas 4.3 Count (Contar Registros) 4.4 Max y Min (Valores Máximos y Mínimos) 4.5 StDev y StDevP (Desviación Estándar) 4.6 Sum (Sumar Valores) 4.7 Var y VarP (Varianza) . Consultas de Actualización 5.1 Consultas de Eliminación 5.2 Consultas de Datos Añadidos 5.3 Consultas de Actualización 6. Tipos de Datos . SubConsultas . Consultas de Referencias Cruzada 9. Consultas de Unión Internas 10. Consultas de Unión Externas ASP-ADO Tutoriales de Pedro http.//

Tutorial SQL

Embed Size (px)

DESCRIPTION

te ayuda en saber como usar las capsulas los codigos

Citation preview

  • 1. Tutorial de SQL por Claudio CasaresINDICE1. Introduccin1.1 Componentes del SQL1.2 Comandos1.3 Clusulas1.4 Operadores Lgicos1.5 Operadores de Comparacin1.6 Funciones de Agregado. Consultas de Seleccin2.1 Consultas Bsicas2.2 Ordenar los Registros2.3 Consultas con Predicado2.4 Alias2.5 Bases de Datos Externas. Criterios de Seleccin3.1 Operadores Lgicos3.2 Intervalos de Valores3.3 El Operrador Like 3.4El Operador In3.5 La clusula WHERE. Agrupamiento de Registro4.1 El clusula GROUP BY4.2 AVG (Media Aritmtica)u Agregadas4.3 Count (Contar Registros)4.4 Max y Min (Valores Mximos y Mnimos)4.5 StDev y StDevP (Desviacin Estndar)4.6 Sum (Sumar Valores)4.7 Var y VarP (Varianza). Consultas de Actualizacin5.1 Consultas de Eliminacin5.2 Consultas de Datos Aadidos5.3 Consultas de Actualizacin6. Tipos de Datos. SubConsultas. Consultas de Referencias Cruzadas9. Consultas de Unin Internas10. Consultas de Unin ExternasASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug

2. 11. Estructuras de las Tablas11.1 Creacin de Tablas11.2 La clusula CONSTRAINT11.3 Creacin de Indices11.4 Eliminar y Aadir Campos e Indices12. Consultas con Parmetros13. Acceso a Bases de Datos Externas14. Omitir los Permisos de Ejecucin15. La Clusula Procedure16. Anexos16.1 Resolucin de Problemas16.1.1 Informacin Duplicada16.1.2 Registros no16.2 Utilizar SQL desde VisualBasic 16.3 Funciones utilizables16.4 La funcin iif16.5 Manual de Estilo1.- INTRODUCCIONEl lenguaje de consulta estructurado (SQL) es un lenguaje de base de datosnormalizado, utilizado por el motor de base de datos de Microsoft Jet. SQL se utilizapara crear objetos QueryDef, como el argumento de origen del mtodoOpenRecordSet y como la propiedad RecordSource del control de datos. Tambin sepuede utilizar con el mtodo Execute para crear y manipular directamente las basesde datos Jet y crear consultas SQL de paso a travs para manipular bases de datosremotas cliente - servidor.1.1. Componentes del SQLASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 3. lenguaje SQL est compuesto por comandos, clusulas, operadores y funcionesde agregado. Estos elementos se combinan en las instrucciones para crear,actualizar y manipular las bases de datos.1.2 ComandosExisten dos tipos de comandos SQL:los DLL que permiten crear y def inir nuevas bases de datos, campos endices.los DML que permiten generar consultas para ordenar, filtrar y extraer datosde la base de datos.Comandos DLLComando DescripcinCREATE Utilizado para crear nuevas tablas, campos e ndicesDROP Empleado para eliminar tablas e ndicesLTERUtilizado para modif icar las tablas agregando campos o cambiando ladefinicin de los campos.Comandos DMLComando DescripcinSELECTUtilizado para consultar registros de la base de datos que satisfagan uncriterio determinadoINSERTUtilizado para cargar lotes de datos en la base de datos en una nicaoperacin.UPDATEUtilizado para modif icar los valores de los campos y registrosespecificadosDELETE Utilizado para eliminar registros de una tabla de una base de datos1.3 ClusulasLas clusulas son condiciones de modificacin utilizadas para definir los datos quedesea seleccionar o manipular.Clusula DescripcinFROMUtilizada para especificar la tabla de la cual se van a seleccionar losregistrosWHEREUtilizada para especificar las condiciones que deben reunir los registrosue se van a seleccionarGROUPUtilizada para separar los registros seleccionados en grupos especficosBYASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 4. HAVING Utilizada para expresar la condicin que debe satisfacer cada grupoORDERBYUtilizada para ordenar los registros seleccionados de acuerdo con unorden especfico1.4 Operadores LgicosOperador UsoND Es el ""y lgico. Evalua dos condiciones y devuelve un valor de verdadslo si ambas son ciertas.OREs el ""o lgico. Evala dos condiciones y devuelve un valor de verdar sialguna de las dos es cierta.NOT Negacin lgica. Devuelve el valor contrario de la expresin.1.5 Operadores de ComparacinOperador Uso< Menor que> Mayor queDistinto deMenor Igual que>= Mayor Igual que= Igual queBETWEEN Utilizado para especificar un intervalo de valores.LIKE Utilizado en la comparacin de un modeloInUtilizado para especificar registros de una base de datos1.6 Funciones de AgregadoLas funciones de agregado se usan dentro de una clusula SELECT en grupos deregistros para devolver un nico valor que se aplica a un grupo de registros.Funcin DescripcinVGUtilizada para calcular el promedio de los valores de un campodeterminadoCOUNT Utilizada para devolver el nmero de registros de la seleccinSUMUtiliza da para devolver la suma de todos los valores de un campodeterminadoMAX Utilizada para devolver el valor ms alto de un campo especificadoMIN Utilizada para devolver el valor ms bajo de un campo especificado2. Consultas de SeleccinLas consultas de seleccin se utilizan para indicar al motor de datos que devuelvainformacin de las bases de datos, esta informacin es devuelta en forma deconjunto de registros que se pueden almacenar en un objeto recordset. Esteconjunto de registros es modificable.ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 5. 2.1 Consultas bsicasLa sintaxis bsica de una consulta de seleccin es la siguiente:SELECT Campos FROM Tabla;En donde campos es la lista de campos que se deseen recuperar y tabla es elorigen de los mismos, por ejemplo:SELECT Nombre, Telefono FROM Clientes;Esta consulta devuelve un recordset con el campo nombre y telfono de la tablaclientes.2.2 Ordenar los registrosAdicionalmente se puede especificar el orden en que se desean recuperar losregistros de las tablas mediante la clasula ORDER BY Lista de Campos. En dondeLista de campos representa los campos a ordenar. Ejemplo:SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY Nombre;Esta consulta devuelve los campos CodigoPostal, Nombre, Telefono de la tablaClientes ordenados por el campo Nombre.Se pueden ordenar los registros por mas de un campo, como por ejemplo:SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BYCodigoPostal, Nombre;Incluso se puede especificar el orden de los registros: ascendente mediante laclasula (ASC -se toma este valor por defecto) descendente (DESC)SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BYCodigoPostal DESC , Nombre ASC;2.3 Consultas con PredicadoEl predicado se incluye entre la clasula y el primer nombre del campo a recuperar,los posibles predicados son:Predicado DescripcinALLDevuelve todos los campos de la tablaDevuelve un determinado nmero de registros dela tablaTOPDISTINCTOmite los registros cuyos campos seleccionadoscoincidan totalmenteDISTINCTROWlos registros duplicados basandose en latotalidad del registro y no slo en los camposseleccionados.ALLSi no se incluye ninguno de los predicados se asume ALL. Motor de base dedatos selecciona todos los registros que cumplen las condiciones de la instruccinASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 6. SQL. No se conveniente abusar de este predicado ya que obligamos al motor de labase de datos a analizar la estructura de la tabla para averiguar los campos quecontiene, es mucho ms rpido indicar el listado de campos deseados.SELECT ALL FROM Empleados;SELECT * FROM Empleados;TOPDevuelve un cierto nmero de registros que entran entre al principio o al final de unrango especificado por una clusula ORDER BY. Supongamos que queremosrecuperar los nombres de los 25 primeros estudiantes del curso 1994:SELECT TOP 25 Nombre, Apellido FROM EstudiantesORDER BY Nota DESC;Si no se incluye la clusula ORDER BY, la consulta devolver un conjunto arbitrariode 25 registros de la tabla Estudiantes .El predicado TOP no elige entre valoresiguales. En el ejemplo anterior, si la nota media nmero 25 y la 26 son iguales, laconsulta devolver 26 registros. Se puede utilizar la palabra reservada PERCENTpara devolver un cierto porcentaje de registros que caen al principio o al final de unrango especificado por la clusula ORDER BY. Supongamos que en lugar de los 25primeros estudiantes deseamos el 10 por ciento del curso:SELECT TOP 10 PERCENT Nombre, Apellido FROM EstudiantesORDER BY Nota DESC;El valor que va a continuacin de TOP debe ser un Integer sin signo.TOP no afectaa la posible actualizacin de la consulta.DISTINCTOmite los registros que contienen datos duplicados en los campos seleccionados.Para que los valores de cada campo listado en la instruccin SELECT se incluyan enla consulta deben ser nicos.Por ejemplo, varios empleados listados en la tabla Empleados pueden tener elmismo apellido. Si dos registros contienen Lpez en el campo Apellido, la siguienteinstruccin SQL devuelve un nico registro:SELECT DISTINCT Apellido FROM Empleados;Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyoscampos indicados en la clusula SELECT posean un contenido diferente. Elresultado de una consulta que utiliza DISTINCT no es actualizable y no refleja loscambios subsiguientes realizados por otros usuarios.DISTINCTROWDevuelve los registros diferentes de una tabla; a diferencia del predicado anteriorque slo se fijaba en el contenido de los campos seleccionados, ste lo hace en elcontenido del registro completo independientemente de los campo indicados en laclusula SELECT.SELECT DISTINCTROW Apellido FROM Empleados;ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 7. Si la tabla empleados contiene dos registros: Antonio Lpez y Marta Lpez elejemplo del predicado DISTINCT devuleve un nico registro con el valor Lpez en elcampo Apellido ya que busca no duplicados en dicho campo. Este ltimo ejemplodevuelve dos registros con el valor Lpez en el apellido ya que se buscan noduplicados en el registro completo.2.4 AliasEn determinadas circunstancias es necesario asignar un nombre a alguna columnadeterminada de un conjunto devuelto, otras veces por simple capricho o por otrascircunstancias. Para resolver todas ellas tenemos la palabra reservada AS que seencarga de asignar el nombre que deseamos a la columna deseada. Tomado comoreferencia el ejemplo anterior podemos hacer que la columna devuelta por laconsulta, en lugar de llamarse apellido (igual que el campo devuelto) se llameEmpleado. En este caso procederamos de la siguiente forma:SELECT DISTINCTROW Apellido AS Empleado FROM Empleados;2.5 Recuperar Informacin de una base de Datos ExternaPara concluir este captulo se debe hacer referencia a la recuperacin de registrosde bases de datos externa. Es ocasiones es necesario la recuperacin deinformacin que se encuentra contenida en una tabla que no se encuentra en labase de datos que ejecutar la consulta o que en ese momento no se encuentraabierta, esta situacin la podemos salvar con la palabra reservada IN de lasiguiente forma:SELECT DISTINCTROW Apellido AS Empleado FROM EmpleadosIN 'c:databasesgestion.mdb';En donde c:databasesgestion.mdb es la base de datos que contiene la tablaEmpleados.3. Criterios de SeleccinEn el captulo anterior se vio la forma de recuperar los registros de las tablas, lasformas empleadas devolvan todos los registros de la mencionada tabla. A lo largode este captulo se estudiarn las posibilidades de filtrar los registros con el fin derecuperar solamente aquellos que cumplan una condiciones preestablecidas.Antes de comenzar el desarrollo de este captulo hay que recalcar tres detalles devital importancia. primero de ellos es que cada vez que se desee establecer unacondicin referida a un campo de texto la condicin de bsqueda debe ir encerradaentre comillas simples; la segunda es que no se posible establecer condiciones debsqueda en los campos memo y; la tercera y ltima hace referencia a las fechas.Las fechas se deben escribir siempre en formato mm-dd-aa en donde mmrepresenta el mes, dd el da y aa el ao, hay que prestar atencin a los separadores-no sirve la separacin habitual de la barra (/), hay que utilizar el guin (-) yadems la fecha debe ir encerrada entre almohadillas (#). Por ejemplo si deseamosreferirnos al da 3 de Septiembre de 1995 deberemos hacerlo de la siguente forma;#09-03-95# #9-3-95#.3.1 Operadores LgicosLos operadores lgicos soportados por SQL son: AND, OR, XOR, Eqv, Imp, Is y Not.A excepcin de los dos ltimos todos poseen la siguiente sintaxis: operador ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 8. En donde expresin1 y expresin2 son las condiciones a evaluar, el resultado de laoperacin vara en funcin del operador lgico. La tabla adjunta muestra losdiferentes posibles resultados: Operador ResultadoVerdad AND Falso FalsoVerdad AND Verdad VerdadFalso AND Verdad FalsoFalso ANDFalso FalsoVerdad OR FalsoVerdadVerdad OR Verdad VerdadFalso OR Verdad VerdadFalso OR Falso FalsoVerdad XOR Verdad FalsoVerdad XOR Falso VerdadFalso XOR Verdad VerdadFalso XOR Falso FalsoVerdad Eqv Verdad VerdadVerdad Eqv Falso FalsoFalso Eqv VerdadFalsoFalso FalsoEqv VerdadVerdad Imp Verdad VerdadVerdad Imp Falso FalsoVerdad Imp Null NullFalso Imp Verdad VerdadFalso Imp Falso VerdadFalso Imp Null VerdadNull Imp Verdad VerdadASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 9. Null Imp Falso NullNull Imp Null NullSi a cualquiera de las anteriores condiciones le anteponemos el operador NOT elresultado de la operacin ser el contrario al devuelto sin el operador NOT.ltimo operador denominado Is se emplea para comparar dos variables de tipoobjeto Is . este operador devuelve verdad si los dos objetosson igualesSELECT * FROM Empleados WHERE Edad > 25 AND Edad < 50;SELECT * FROM Empleados WHERE (Edad > 25 AND Edad < 50) OR Sueldo100;SELECT * FROM Empleados WHERE NOT Estado = 'Soltero';SELECT * FROM Empleados WHERE (Sueldo > 100 AND Sueldo < 500) OR(Provincia = 'Madrid' AND Estado = 'Casado');3.2 Intervalos de ValoresPara indicar que deseamos recuperar los registros segn el intervalo de valores deun campo emplearemos el operador Between cuya sintaxis es:campo [Not] Between valor1 And valor2 (la condicin Not es opcional)En este caso la consulta devolvera los registros que contengan en "campo" unvalor incluido en el intervalo valor1, valor2 (ambos inclusive). Si anteponemos lacondicin Not devolver aquellos valores no incluidos en el intervalo.SELECT * FROM Pedidos WHERE CodPostal Between 28000 And 28999;(Devuelve los pedidos realizados en la provincia de Madrid)SELECT IIf(CodPostal Between 28000 And 28999, 'Provincial', 'Nacional')FROM Editores;(Devuelve el valor 'Provincial' si el cdigo postal se encuentra en el intervalo,'Nacional' en caso contrario)3.3 Operador LikeSe utiliza para comparar una expresin de cadena con un modelo en una expresinSQL. Su sintaxis es:expresin Like modeloEn donde expresin es una cadena modelo o campo contra el que se comparaexpresin. Se puede utilizar el operador Like para encontrar valores en los camposque coincidan con el modelo especificado. Por modelo puede especificar un valorcompleto (Ana Mara), o se pueden utilizar caracteres comodn como losreconocidos por el sistema operativo para encontrar un rango de valores (LikeAn*).El operador Like se puede utilizar en una expresin para comparar un valor de uncampo con una expresin de cadena. Por ejemplo, si introduce Like C* en unaconsulta SQL, la consulta devuelve todos los valores de campo que comiencen porla letra C. En una consulta con parmetros, puede hacer que el usuario escriba elmodelo que se va a utilizar.ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 10. El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido decualquier letra entre A y F y de tres dgitos:Like 'P[A-F]###'Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A ala D seguidas de cualquier cadena.Like '[A-D]*'En la tabla siguiente se muestra cmo utilizar el operador Like para comprobarexpresiones con diferentes modelos.Tipo de coincidencia Modelo Planteado Coincide No coincideVarios caracteres 'a*a' 'aa', 'aBa', 'aBBBa' 'aBC'Carcter especial 'a[*]a' 'a*a' 'aaa'Varios caracteres 'ab*' 'abcdefg', 'abc' 'cab', 'aab'Un solo carcter 'a?a' 'aaa', 'a3a', 'aBa' 'aBBBa'Un solo dgito 'a#a' 'a0a', 'a1a', 'a2a' 'aaa', 'a10a'Rango de caracteres '[a-z]' 'f', '' 'j'p, '2', '&'Fuera de un rango '[!a-z]' 'b', 'aDistinto de un dgito '[!0-9]' 'A', 'a', '&', ~ '0', '1', '9'Combinada 'a[!b-m]#' 'An9', 'az0', 'a99' 'abc', 'aj0'3.4 El Operador InEste operador devuelve aquellos registros cuyo campo indicado coincide con algunode los en una lista. Su sintaxis es:expresin [Not] In(valor1, valor2, . . . )SELECT * FROM Pedidos WHERE Provincia In ('Madrid', 'Barcelona', 'Sevilla');3.5 La clusula WHERELa clusula WHERE puede usarse para determinar qu registros de las tablasenumeradas en la clusula FROM aparecern en los resultados de la instruccinSELECT. Depus de escribir esta clusula se deben especificar las condicionesexpuestas en los partados 3.1 y 3.2. Si no se emplea esta clusula, la consultadevolver todas las filas de la tabla. WHERE es opcional, pero cuando aparece debeir a continuacin de FROM.SELECT Apellidos, Salario FROM Empleados WHERE Salario > 21000;SELECT Id_Producto, Existencias FROM ProductosWHERE Existencias 100 AND NombreProducto Like BOS*;4.2 AVGCalcula la media aritmtica de un conjunto de valores contenidos en un campo especificado de unaconsulta. Su sintaxis es la siguienteAvg(expr)En donde expr representa el campo que contiene los datos numricos para los que se desea calcular lamedia o una expresin que realiza un clculo utilizando los datos de dicho campo. La media calculada por Avges la media aritmtica (la suma de los valores dividido por el nmero de valores). La funcin Avg no incluyeningn campo Null en el clculo.SELECT Avg(Gastos) AS Promedio FROM Pedidos WHERE Gastos > 100;4.3 CountCalcula el nmero de registros devueltos por una consulta. Su sintaxis es lasiguiente Count(expr)En donde expr contiene el nombre del campo que desea contar. Los operandos de expr pueden incluir elnombre de un campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida por elusuario pero no otras de las funciones agregadas de SQL). Puede contar cualquier tipo de datos incluso texto.Aunque expr puede realizar un clculo sobre un campo, Count simplemente cuenta el nmero de registros sintener en cuenta qu valores se almacenan en los registros. La funcin Count no cuenta los registros que tienencampos null a menos que expr sea el carcter comodn asterisco (*). Si utiliza un asterisco, Count calcula elASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 12. nmero total de registros, incluyendo aquellos que contienen campos null. Count(*) es considerablemente msrpida que Count(Campo). No se debe poner el asterisco entre dobles comillas ('*').SELECT Count(*) AS Total FROM Pedidos;Si expr identifica a mltiples campos, la funcin Count cuenta un registro slo si al menos uno de los camposno es Null. Si todos los campos especificados son Null, no se cuenta el registro. Hay que separar los nombresde los campos con ampersand (&).SELECT Count(FechaEnvo & Transporte) AS Total FROM Pedidos;4.4 Max, MinDevuelven el mnimo o el mximo de un conjunto de valores contenidos en un campo especificode una consulta. Su sintaxis es:Min(expr)Max(expr)En donde expr es el campo sobre el que se desea realizar el clculo. Expr pueden incluir el nombre de uncampo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida por el usuariopero no otras de las funciones agregadas de SQL).SELECT Min(Gastos) AS ElMin FROM Pedidos WHERE PaisSELECT Max(Gastos) AS ElMax FROM Pedidos WHERE Pais'Espaa';'Espaa';4.5 StDev, StDevPDevuelve estimaciones de la desviacin estndar para la poblacin (el total de los registros de latabla) o una muestra de la poblacin representada (muestra aleatoria) . Su sintaxis es:StDev(expr)StDevP(expr)En donde expr representa el nombre del campo que contiene los datos que desean evaluarse o una expresinque realiza un clculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre deun campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida por el usuario perono otras de las funciones agregadas de SQL)StDevP evala una poblacin, y StDev evala una muestra de la poblacin. Si la consulta contiene menos dedos registros (o ningn registro para StDevP), estas funciones devuelven un valor Null (el cual indica que ladesviacin estndar no puede calcularse).SELECT StDev(Gastos) AS Desviacion FROM Pedidos WHERE Pais = 'Espaa';SELECT StDevP(Gastos) AS Desviacion FROM Pedidos WHERE Pais= 'Espaa';4.6 SumDevuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Susintaxis es: Sum(expr)En donde expr respresenta el nombre del campo que contiene los datos que desean sumarse o una expresinque realiza un clculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre deun campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida por el usuario perono otras de las funciones agregadas de SQL).SELECT Sum(PrecioUnidad * Cantidad) AS Total FROM DetallePedido;4.7 Var, VarPDevuelve una estimacin de la varianza de una poblacin (sobre el total de los registros) o una muestra de lapoblacin (muestra aleatoria de registros) sobre los valores de un campo. Su sintaxis es:Var(expr)VarP(expr)VarP evala una poblacin, y Var evala una muestra de la poblacin. Expr el nombre del campo que contienelos datos que desean evaluarse o una expresin que realiza un clculo utilizando los datos de dichos campos.Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una funcin (lacual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadas de SQL)ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 13. Si la consulta contiene menos de dos registros, Var y VarP devuelven Null (esto indica que la varianza nopuede calcularse). Puede utilizar Var y VarP en una expresin de consulta o en una Instruccin SQL.SELECT Var(Gastos) AS Varianza FROM Pedidos WHERE PaisSELECT VarP(Gastos) AS Varianza FROM Pedidos WHERE Pais'Espaa';'Espaa';5. Consultas de AccinLas consultas de accin son aquellas que no devuelven ningn registro, son las encargadas deacciones como aadir y borrar y modificar registros.5.1 DELETECrea una consulta de eliminacin que elimina los registros de una o ms de las tablas listadas en la clusulaFROM que satisfagan la clusula WHERE. Esta consulta elimina los registros completos, no es posible eliminar elcontenido de algn campo en concreto. Su sintaxis es:DELETE Tabla.* FROM Tabla WHERE criterioDELETE es especialmente til cuando se desea eliminar varios registros. En una instruccin DELETE conmltiples tablas, debe incluir el nombre de tabla (Tabla.*). Si especifica ms de una tabla desde la queeliminar registros, todas deben ser tablas de muchos a uno. Si desea eliminar todos los registros de unatabla, eliminar la propia tabla es ms eficiente que ejecutar una consulta de borrado.Se puede utilizar DELETE para eliminar registros de una nica tabla o desde varios lados de una relacin uno amuchos. Las operaciones de eliminacin en cascada en una consulta nicamente eliminan desde varios lados deuna relacin. Por ejemplo, en la relacin entre las tablas Clientes y Pedidos, la tabla Pedidos es la parte demuchos por lo que las operaciones en cascada solo afectaran a la tabla Pedidos. Una consulta de borrado eliminalos registros completos, no nicamente los datos en campos especficos. Si desea eliminar valores en un campoespecificado, crear una consulta de actualizacin que cambie los valores a Null.Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede deshacer la operacin.Si desea saber qu registros se eliminarn, primero examine los resultados de una consulta de seleccin queutilice el mismo criterio y despus ejecute la consulta de borrado. Mantenga copias de seguridad de sus datos entodo momento. Si elimina los registros equivocados podr recuperarlos desde las copias de seguridad.DELETE * FROM Empleados WHERE Cargo 'Vendedor';5.2 INSERT INTOAgrega un registro en una tabla. Se la conoce como una consulta de datos aadidos. Esta consulta puede ser dedos tipo: Insertar un nico registro Insertar en una tabla los registros contenidos en otra tabla.5.2.1 Para insertar un nico Registro:En este caso la sintaxis es la siguiente:INSERT INTO Tabla (campo1, campo2, .., campoN)VALUES (valor1, valor2, ..., valorN)Esta consulta graba en el campo1 el valor1, en el campo2 y valor2 y as sucesivamente. Hay que prestarespecial atencin a acotar entre comillas simples (') los valores literales (cadenas de caracteres) y las fechasindicarlas en formato mm-dd-aa y entre caracteres de almohadillas (#).5.2.2 Para insertar Registros de otra Tabla:En este caso la sintaxis es:INSERT INTO Tabla [IN base_externa] (campo1, campo2, ..., campoN)SELECT TablaOrigen.campo1, TablaOrigen.campo2, ...,TablaOrigen.campoN FROM TablaOrigenEn este caso se seleccionarn los campos 1,2, ..., n dela tabla origen y se grabarn en los campos 1,2,.., n dela Tabla. La condicin SELECT puede incluir la clusula WHERE para filtrar los registros a copiar. Si Tabla yTablaOrigen poseen la misma estrucutra podemos simplificar la sintaxis a:INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigenDe esta forma los campos de TablaOrigen se grabarn en Tabla, para realizar esta operacin es necesario quetodos los campos de TablaOrigen estn contenidos con igual nombre en Tabla. Con otras palabras que Tablaposea todos los campos de TablaOrigen (igual nombre e igual tipo).ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 14. En este tipo de consulta hay que tener especial atencin con los campos contadores o autonumricospuesto que al insertar un valor en un campo de este tipo se escribe el valor que contenga su campohomlogo en la tabla origen, no incrementandose como le corresponde.Se puede utilizar la instruccin INSERT INTO para agregar un registro nico a una tabla, utilizando la sintaxisde la consulta de adicin de registro nico tal y como se mostr anteriormente. En este caso, su cdigoespecfica el nombre y el valor de cada campo del registro. Debe especificar cada uno de los campos delregistro al que se le va a asignar un valor as como el valor para dicho campo. Cuando no se especifica dichocampo, se inserta el valor predeterminado o Null. Los registros se agregan al final de la tabla.Tambin se puede utilizar INSERT INTO para agregar un conjunto de registros pertenecientes a otra tabla oconsulta utilizando la clusula SELECT ... FROM como se mostr anteriormente en la sintaxis de la consulta deadicin de mltiples registros. En este caso la clusula SELECT especifica los campos que se van a agregar en latabla destino especificada.La tabla destino u origen puede especificar una tabla o una consulta.Si la tabla destino contiene una clave principal, hay que segurarse que es nica, y con valores no-Null ; si no esas, no se agregarn los registros. Si se agregan registros a una tabla con un campo Contador , no se debeincluir el campo Contador en la consulta. Se puede emplear la clusula IN para agregar registros a una tabla enotra base de datos.Se pueden averiguar los registros que se agregarn en la consulta ejecutando primero una consulta de seleccinque utilice el mismo criterio de seleccin y ver el resultado. Una consulta de adicin copia los registros de una oms tablas en otra. Las tablas que contienen los registros que se van a agregar no se vern afectadas por laconsulta de adicin. En lugar de agregar registros existentes en otra tabla, se puede especificar los valores decada campo en un nuevo registro utilizando la clusula VALUES. Si se omite la lista de campos, la clusulaVALUES debe incluir un valor para cada campo de la tabla, de otra forma fallar INSERT.INSERT INTO Clientes SELECT Clientes_Viejos.* FROM Clientes_Nuevos;INSERT INTO Empleados (Nombre, Apellido, Cargo)VALUES ('Luis', 'Snchez', 'Becario');INSERT INTO Empleados SELECT Vendedores.* FROM VendedoresWHERE FechaContratacion _ < Now() - 30;5.3 UPDATECrea una consulta de actualizacin que cambia los valores de los campos de una tabla especificadabasndose en un criterio especfico. Su sintaxis es:UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2,WHERE Criterio;... CampoN=ValorNUPDATE es especialmente til cuando se desea cambiar un gran nmero de registros o cuando stos seencuentran en mltiples tablas. Puede cambiar varios campos a la vez. ejemplo siguiente incrementa losvalores Cantidad pedidos en un 10 por ciento y los valores Transporte en un 3 por ciento para aquellosque se hayan enviado al Reino Unido.:UPDATE Pedidos SET PedidoWHERE PaisEnvo = 'ES';Pedidos * 1.1, Transporte = Transporte * 1.03UPDATE no genera ningn resultado. Para saber qu registros se van a cambiar, hay que examinarprimero el resultado de una consulta de seleccin que utilice el mismo criterio y despus ejecutar laconsulta de actualizacin.UPDATE Empleados SET Grado = 5 WHERE Grado = 2;UPDATE Productos SET Precio = Precio * 1.1 WHERE Proveedor = 8 AND Familia 3;Si en una consulta de actualizacin suprimimos la clusula WHERE todos los registros de la tablasealada sern actualizados.UPDATE Empleados SET Salario Salario * 1.1ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 15. 6. Tipos de DatosLos tipos de datos SQL se clasifican en 13 tipos de datos primarios y de varios sinnimos vlidosreconocidos por dichos tipos de datos.Tipos de datos primarios:Tipo deDatosLongitudBIT 1 byte Valores Si/No True/FalseBYTE 1 byte Un valor entero entre 0 y 255.COUNTER 4 bytes Un nmero incrementado automticamente (de tipo Long)CURRENCY 8 bytesUn entero escalable entre 922.337.203.685.477,5808 y922.337.203.685.477,5807.DATETIME __ 8 bytes Un valor de fecha u hora entre los aos 100 y 9999.Un valor en punto flotante de precisin simple con un45rango de -3.402823*1038 a -1.401298*10- para valoresSINGLE 4 bytes 45 3.402823*1038 para valores negativos, 1.401298*10-apositivos, y 0.ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaugBINARY 1 byteDescripcinPara consultas sobre tabla adjunta de productos de bases dedatos que definen un tipo de datos Binario. 16. Un valor en punto flotante de doble precisin con un rangode -1.79769313486232*10308 a -4.94065645841247*10- 324DOUBLE 8 bytes324para valores negativos, 4.94065645841247*10- a1.79769313486232*10308 para valores positivos, y 0.Un entero corto entre -32,768 y 32,767.SHORT 2 bytesLONG 4 bytes Un entero largo entre -2,147,483,648 y 2,147,483,647.1 byte porLONGTEXTcarcterDe cero a un mximo de 1.2 gigabytes.seLONGBINARY necesiteDe cero 1 gigabyte. Utilizado para objetos OLE.TEXT1 byte porcaracterDe cero a 255 caracteres.La siguiente tabla recoge los sinonimos de los tipos de datos definidos:Tipo de Dato SinnimosBINARY VARBINARYBOOLEANBITLOGICALLOGICAL1YESNOBYTE INTEGER1COUNTER AUTOINCREMENTCURRENCY MONEYDATEDATETIME TIMETIMESTAMPFLOAT4SINGLERIEEEAELSINGLEDOUBLELOAT8EEEDOUBLENUMBERNUMERICSHORTINTEGER2SMALLINTASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 17. INTLONG INTEGERINTEGER4LONGBINARYGENERALOLEOBJECTLONGTEXTLONGCHARMEMONOTEALPHANUMERICCHARTEXT CHARACTERSTRINGVARCHARVARIANT (No Admitido) VALUE7. SubConsultasUna subconsulta es una instruccin SELECT anidada dentro de una instruccin SELECT, SELECT...INTO,INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta.Puede utilizar tres formas de sintaxis para crear una subconsulta:comparacin [ANY | ALL | SOME] (instruccinsql) expresin [NOT] IN (instruccin sql)[NOT] EXISTS (instruccin sql)En donde:comparacinEs una expresin y un operador de comparacin que compara la expresin con el resultado de la subconsulta.expresinEs una expresin por la que se busca el conjunto resultante de lasubconsulta. instruccin sqlEs una instruccin SELECT, que sigue el mismo formato y reglas que cualquier otra instruccin SELECT.Debe ir entre parntesis.Se puede utilizar una subconsulta en lugar de una expresin en la lista de campos de una instruccin SELECT oen una clusula WHERE o HAVING. En una subconsulta, se utiliza una instruccin SELECT para proporcionar unconjunto de uno o ms valores especificados para evaluar en la expresin de la clusula WHERE o HAVING.Se puede utilizar el predicado ANY o SOME, los cuales son sinnimos, para recuperar registros de la consultaprincipal, que satisfagan la comparacin con cualquier otro registro recuperado en la subconsulta. ejemplosiguiente devuelve todos los productos cuyo precio unitario es mayor que el de cualquier productovendido con un descuento igual o mayor al 25 por ciento.:SELECT * FROM Productos WHERE PrecioUnidad > ANY(SELECT PrecioUnidad FROM DetallePedido WHERE Descuento >= 0 .25);ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 18. predicado ALL se utiliza para recuperar nicamente aquellos registros de la consulta principal que satisfacenla comparacin con todos los registros recuperados en la subconsulta. Si se cambia ANY por ALL en el ejemploanterior, la consulta devolver nicamente aquellos productos cuyo precio unitario sea mayor que el de todos losproductos vendidos con un descuento igual o mayor al 25 por ciento. Esto es mucho ms restrictivo.predicado IN se emplea para recuperar nicamente aquellos registros de la consulta principal para los quealgunos registros de la subconsulta contienen un valor igual.vendidos con un descuento igual o mayor al 25 por ciento.:ejemplo siguiente devuelve todos los productosSELECT * FROM Productos WHERE IDProducto IN(SELECT IDProducto FROM DetallePedido WHERE Descuento >= 0.25);Inversamente se puede utilizar NOT IN para recuperar nicamente aquellos registros de la consultaprincipal para los que no hay ningn registro de la subconsulta que contenga un valor igual.predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en comparaciones de verdad/falso paradeterminar si la subconsulta devuelve algn registro.Se puede utilizar tambin alias del nombre de la tabla en una subconsulta para referirse a tablas listadas en laclusula FROM fuera de la subconsulta. ejemplo siguiente devuelve los nombres de los empleados cuyosalario es igual o mayor que el salario medio de todos los empleados con el mismo ttulo. A la tablaEmpleados se le ha dado el alias T1::SELECT Apellido, Nombre, Titulo, Salario FROM Empleados AS T1WHERE Salario >= (SELECT Avg(Salario) FROM EmpleadosWHERE T1.Titulo = Empleados.Titulo) ORDER BY Titulo;En el ejemplo anterior , la palabra reservada AS es opcional.SELECT Apellidos, Nombre, Cargo, Salario FROM EmpleadosWHERE Cargo LIKE "Agente Ven*" AND Salario > ALL (SELECT Salario FROMEmpleados WHERE (Cargo LIKE "*Jefe*") OR (Cargo LIKE "*Director*"));Obtiene una lista con el nombre, cargo y salario de todos los agentes de ventas cuyo salario esmayor que el de todos los jefes y directores.SELECT DISTINCTROW NombreProducto, Precio_Unidad FROM ProductosWHERE (Precio_Unidad = (SELECT Precio_Unidad FROM Productos WHERENombreProducto _ = "Almbar anisado");Obtiene una lista con el nombre y el precio unitario de todos los productos con el mismo precioque el almbar anisado.SELECT DISTINCTROW Nombre_Contacto, Nombre_Compaia, Cargo_Contacto,Telefono FROM Clientes WHERE (ID_Cliente IN (SELECT DISTINCTROW_ IMWD PCedHidliEeR FoetnR OsEe Fc h#aP0e4d1/i9od/ 3>#= #< ;)#071/9/3 Obtiene una lista de las compa_ as y los contactos de todos los clientes que han realizado unpedido en el segundo trimestre de 1993.SELECT Nombre, Apellidos FROM Empleados AS E WHERE EXISTS(SELECT * FROM Pedidos AS O WHERE O.ID_Empleado = E.ID_Empleado);Selecciona el nombre de todos los empleados que han reservado al menos un pedido.SELECT DISTINCTROW Pedidos.Id_Producto, Pedidos.Cantidad,(SELECT DISTINCTROW Productos.Nombre FROM Productos WHEREProductos.Id_Producto = Pedidos.Id_Producto) AS ElProducto FROMPedidos WHERE Pedidos.Cantidad > 150 ORDER BY Pedidos.Id_Producto;Recupera el Cdigo del Producto y la Cantidad pedida de la tabla pedidos, extrayendo elnombre del producto de la tabla de productos.ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 19. 8. Consultas de Referencias CruzadasUna consulta de referencias cruzadas es aquella que nos permite visualizar los datos en filas y encolumnas, estilo tabla, por ejemplo:Producto / Ao 1996 1997Pantalones 1 .2503.000Camisas 8.5601.253Zapatos 4.369 2.563Si tenemos una tabla de productos y otra tabla de pedidos, podemos visualizar en total de productospedidos por ao para un artculo determinado, tal y como se visualiza en la tabla anterior.La sintaxis para este tipo de consulta es la siguiente:TRANSFORM funcin agregada instruccin select PIVOT campopivot [IN (valor1[, valor2[, ...]])]En donde:funcin agregadaEs una funcin SQL agregada que opera sobre los datos seleccionados.instruccin selectEs una instruccin SELECT.campo pivotEs el campo o expresin que desea utilizar para crear las cabeceras de la columna en el resultado de laconsulta.valor1, valor2Son valores fijos utilizados para crear las cabeceras de la columna.Para resumir datos utilizando una consulta de referencia cruzada, se seleccionan los valores de los campos oexpresiones especificadas como cabeceras de columnas de tal forma que pueden verse los datos en un formatoms compacto que con una consulta de seleccin.ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 20. TRANSFORM es opcional pero si se incluye es la primera instruccin de una cadena SQL. Precede a lainstruccin SELECT que especifica los campos utilizados como encabezados de fila y una clusula GROUP BYque especifica el agrupamiento de las filas. Opcionalmente puede incluir otras clusulas como por ejemploWHERE, que especifica una seleccin adicional o un criterio de ordenacinLos valores devueltos en campo pivot se utilizan como encabezados de columna en el resultado de la consulta.Por ejemplo, al utilizar las cifras de ventas en el mes de la venta como pivot en una consulta de referenciacruzada se crearan 12 columnas. Puede restringir el campo pivot para crear encabezados a partir de los valoresfijos (valor1, valor2) listados en la clusula opcional IN.Tambin puede incluir valores fijos, para los que no existen datos, para crear columnas adicionales.EjemplosTRANSFORM Sum(Cantidad) AS Ventas SELECT Producto, CantidadPedidos WHERE Fecha Between #01-01-98# And #12-31-98# GROUP BY ProductoFROM ORDER BY Producto PIVOT DatePart("m", Fecha);Crea una consulta de tabla de referencias cruzadas que muestra las ventas de productos por mes paraun ao especfico. Los meses aparecen de izquierda a derecha como columnas y los nombres de losproductos aparecen de arriba hacia abajo como filas.TRANSFORM Sum(Cantidad) AS Ventas SELECT Compania FROM PedidosWHERE Fecha Between #01-01-98# And #12-31-98# GROUP BY CompaniaORDER BY Compania PIVOT "Trimestre " & DatePart("q", Fecha) In ('Trimestre1','Trimestre2', 'Trimestre 3', 'Trimestre 4');Crea una consulta de tabla de referencias cruzadas que muestra las ventas de productos por trimestrede cada proveedor en el ao indicado. Los trimestres aparecen de izquierda a derecha como columnasy los nombres de los proveedores aparecen de arriba hacia abajo como filas.Un caso prctico:Se trata de resolver el siguiente problema: tenemos una tabla de productos con dos campos, el cdigoy el nombre del producto, tenemos otra tabla de pedidos en la que anotamos el cdigo del producto, lafecha del pedido y la cantidad pedida. Deseamos consultar los totales de producto por ao, calculandola media anual de ventas.Estructura y datos de las tablas:1. Artculos:ID Nombre1 Zapatos2 Pantalones3 Blusas2. Pedidos:Id Fecha Cantidad1 11/11/1996 2502 11/11/1996 1253 11/11/1996 5201 12/10/1996 502 04/05/1996 2503 05/08/1996 1001 01/01/1997 402 02/08/1997 603 05/10/1997 70ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 21. 1 12/12/1997 82 15/12/1997 5203 17/10/1997 1250Para resolver la consulta planteamos la siguiente consulta:TRANSFORM Sum(Pedidos.Cantidad) AS Resultado SELECT Nombre AS Producto,Pedidos.Id AS Cdigo, Sum(Pedidos.Cantidad) AS TOTAL, Avg(Pedidos.Cantidad)AS Media FROM Pedidos INNER JOIN Artculos ON Pedidos.Id = Artculos.IdGROUP BY Pedidos.Id, Artculos.Nombre PIVOT Year(Fecha);y obtenemos el siguiente resultado:Producto Cdigo TOTAL Media 1996 19971 348 87 300_____ 48 ______2 955 238,75 375 5803 1940ZapatatosPantalonesBlusas 485Comentarios a la consulta:6201320La clsula TRANSFORM indica el valor que deseamos visualizar en las columnas que realmente pertenecen a laconsulta, en este caso 1996 y 1997, puesto que las dems columnas son opcionales.SELECT especifica el nombre de las columnas opcionales que deseamos visualizar, en este caso Producto,Cdigo, Total y Media, indicando el nombre del campo que deseamos mostrar en cada columna o el valor de lamisma. Si incluimos una funcin de clculo el resultado se har en base a los datos de la fila actual y no al totalde los datos.FROM especifica el origen de los datos. La primera tabla que debe figurar es aquella de donde deseamosextraer los datos, esta tabla debe contener al menos tres campos, uno para los ttulos de la fila, otrospara los ttulos de la columna y otro para calcular el valor de las celdas.En este caso en concreto se deseaba visualizar el nombre del producto, como el tabla de pedidos slo figurabael cdigo del mismo se aadi una nueva columna en la clusula select llamada Producto que se correspondacon el campo Nombre de la tabla de artculos. Para vincular el cdigo del artculo de la tabla de pedidos con elnombre del misma de la tabla artculos se insert la clusula INNER JOIN.La clusula GROUP BY especifica el agrupamiento de los registros, contrariamente a los manuales de instruccinesta clusula no es opcional ya que debe figurar siempre y debemos agrupar los registros por el campo del cualextraemos la informacin. En este caso existen dos campos del cual extraemos la informacin:pedidos.cantidad y artculos.nombre, por ellos agrupamos por los campos.Para finalizar la clusula PIVOT indica el nombre de las columnas no opcionales, en este caso 1996 y1997 y como vamos a el dato que aparecer en las columnas, en este caso empleamos el ao en quese produjo el pedido, extrayndolo del campo pedidos.fecha.Otras posibilidades de fecha de la clusula pivot son las siguientes:1. Para agrupamiento por TrimestresPIVOT "Tri " & DatePart("q",[Fecha]);2. Para agrupamiento por meses (sin tener en cuenta el ao)PIVOT Format([Fecha],"mmm") In ("Ene", "Feb", "Mar", "Abr", "May","Jun" "Dic");, "Jul", "Ago", "Sep", "Oct", "Nov",3. Para agrupar por dasPIVOT Format([Fecha],"Short Date");ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 22. 9. Consultas de Unin InternasLas vinculaciones entre tablas se realiza mediante la clusula INNER que combina registros de dostablas siempre que haya concordancia de valores en un campo comn. Su sintaxis es:SELECT campos FROM tb1 INNER JOIN tb2 ON tb1.campo1 comptb2.campo2 En donde:tb1, tb2Son los nombres de las tablas desde las que se combinan losregistros. campo1, campo2Son los nombres de los campos que se combinan. Si no son numricos, los campos deben ser delmismo tipo de datos y contener el mismo tipo de datos, pero no tienen que tener el mismo nombre.compEs cualquier operador de comparacin relacional :< =>, , = o, .Se puede utilizar una operacin INNER JOIN en cualquier clusula FROM. Esto crea una combinacin porequivalencia, conocida tambin como unin interna. Las combinaciones Equi son las ms comunes; stascombinan los registros de dos tablas siempre que haya concordancia de valores en un campo comn a ambastablas. Se puede utilizar INNER JOIN con las tablas Departamentos y Empleados para seleccionar todos losempleados de cada departamento. Por el contrario, para seleccionar todos los departamentos (incluso si algunode ellos no tiene ningn empleado asignado) se emplea LEFT JOIN o todos los empleados (incluso si alguno noest asignado a ningn departamento), en este caso RIGHT JOIN.Si se intenta combinar campos que contengan datos Memo u Objeto OLE, se produce un error. Se puedencombinar dos campos numricos cualesquiera, incluso si son de diferente tipo de datos. Por ejemplo,puede combinar un campo Numrico para el que la propiedad Size de su objeto Field est establecidacomo Entero, y un campo Contador.ejemplo siguiente muestra cmo podra combinar las tablas Categoras y Productos basndose en el campoIDCategoria:SELECT Nombre_Categora, NombreProductoFROM Categorias INNER JOIN ProductosON Categorias.IDCategoria = Productos.IDCategoria;En el ejemplo anterior, IDCategoria es el campo combinado, pero no est incluido en la salida de la consultaya que no est incluido en la instruccin SELECT. Para incluir el campo combinado, incluir el nombre delcampo en la instruccin SELECT, en este caso, Categorias.IDCategoria.Tambin se pueden enlazar varias clusulas ON en una instruccin JOIN, utilizando la sintaxis siguiente:SELECT camposFROM tabla1 INNER JOIN tabla2 ONtb1.campo1 comp tb2.campo1 AND ONtb1.campo2 comp tb2.campo2) OR ONtb1.campo3 comp tb2.campo3)];Tambin puede anidar instrucciones JOIN utilizando la siguiente sintaxis:SELECT camposFROM tb1 INNER JOIN(tb2 INNER JOIN [( ]tb3[INNER JOIN [( ]tablax [INNER JOIN...)] ON tb3.campo3 comp tbx.campox)]ON tb2.campo2 comp tb3.campo3) ONtb1.campo1 comp tb2.campo2;Un LEFT JOIN o un RIGHT JOIN puede anidarse dentro de un INNER JOIN, pero un INNER JOIN nopuede anidarse dentro de un LEFT JOIN o un RIGHT JOIN.EjemploSELECT DISTINCTROW Sum([Precio unidad] * [Cantidad]) AS [Ventas],[Nombre] & " " & [Apellidos] AS [Nombre completo] FROM [Detalles de pedidos],Pedidos, Empleados, Pedidos INNER JOIN [Detalles de pedidos] ON Pedidos.[ID de pedido] = [Detalles de pedidos].[ID de pedido], Empleados INNER JOINASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 23. Pedidos ON Empleados.[ID de empleado][Nombre] & " " & [Apellidos];Pedidos.[ID de empleado] GROUP BYCrea dos combinaciones equivalentes: una entre las tablas Detalles de pedidos y Pedidos, y la otraentre las tablas Pedidos y Empleados. Esto es necesario ya que la tabla Empleados no contienedatos de ventas y la tabla Detalles de pedidos no contiene datos de los empleados. La consultaproduce una lista de empleados y sus ventas totales.Si empleamos la clusula INNER en la consulta se seleccionarn slo aquellos registros de la tabla de la quehayamos escrito a la izquierda de INNER JOIN que contengan al menos un registro de la tabla que hayamosescrito a la derecha. Para solucionar esto tenemos dos clusulas que sustituyen a la palabra clave INNER, estasclusulas son LEFT y RIGHT. LEFT toma todos los registros de la tabla de la izquierda aunque no tengan ningnregistro en la tabla de la izquierda. RIGHT realiza la misma operacin pero al contrario, toma todos los registrosde la tabla de la derecha aunque no tenga ningn registro en la tabla de la izquierda.10. Consultas de Unin ExternasSe utiliza la operacin UNION para crear una consulta de unin, combinando los resultados de doso ms consultas o tablas independientes. Su sintaxis es:[TABLE] consulta1 UNION [ALL] [TABLE]consulta2 [UNION [ALL] [TABLE] consultan [ ... ]]En donde:consulta1, consulta2, consultanASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 24. Son instrucciones SELECT, el nombre de una consulta almacenada o el nombre de una tablaalmacenada precedido por la palabra clave TABLE.Puede combinar los resultados de dos o ms consultas, tablas e instrucciones SELECT, en cualquier orden, enuna nica operacin UNION.instruccin SELECT:ejemplo siguiente combina una tabla existente llamada Nuevas Cuentas y unaTABLE [Nuevas Cuentas] UNION ALL SELECT * FROMClientes WHERE [Cantidad pedidos] > 1000;Si no se indica lo contrario, no se devuelven registros duplicados cuando se utiliza la operacin UNION, noobstante puede incluir el predicado ALL para asegurar que se devuelven todos los registros. Esto hace que laconsulta se ejecute ms rpidamente. Todas las consultas en una operacin UNION deben pedir el mismo nmerode campos, no obstante los campos no tienen porqu tener el mismo tamao o el mismo tipo de datos.Se puede utilizar una clusula GROUP BY y/o HAVING en cada argumento consulta para agrupar los datosdevueltos. Puede utilizar una clusula ORDER BY al final del ltimo argumento consulta para visualizar los datosdevueltos en un orden especfico.SELECT [Nombre de compaa], Ciudad FROM ProveedoresPas = 'Brasil' UNION SELECT [Nombre de compaa], Ciudad FROM ClientesWHERE WHERE Pas = "Brasil"Recupera los nombres y las ciudades de todos proveedores y clientes de BrasilSELECT [Nombre de compaa], Ciudad FROM Proveedores WHERE Pas = 'Brasil'UNION SELECT [Nombre de compaa], Ciudad FROM Clientes WHERE Pas'Brasil' ORDER BY CiudadRecupera los nombres y las ciudades de todos proveedores y clientes radicados en Brasil,ordenados por el nombre de la ciudadSELECT [Nombre de compaa], Ciudad FROM Proveedores WHERE Pas = 'Brasil'UNION SELECT [Nombre de compaa], Ciudad FROM Clientes WHERE Pas'Brasil' UNION SELECT [Apellidos], Ciudad FROM Empleados WHERERegin 'Amrica del Sur'Recupera los nombres y las ciudades de todos los proveedores y clientes de brasil y losapellidos y las ciudades de todos los empleados de Amrica del SurTABLE [Lista de clientes] UNION TABLE [Lista de proveedores]Recupera los nombres y cdigos de todos los proveedores y clientes11. Estructuras de las Tablas11.1 Creacin de Tablas NuevasSi se est utilizando el motor de datos de Microsoft para acceder a bases de datos access, slo sepuede emplear esta instruccin para crear bases de datos propias de access. Su sintaxis es:CREATE TABLE tabla (campo1 tipo (tamao) ndice1, campo2 tipo (tamao) ndice2 , ...,ndice multicampo , ... )En donde:Parte Descripcintabla Es el nombre de la tabla que se va a crear.ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 25. campo1 Es el nombre del campo o de los campos que se van a crear en la nuevatabla. La nueva tabla debe contener, campo2 al menos, un campo.tipo Es el tipo de datos de campo en la nueva tabla. (Ver Tipos de Datos)tamao Es el tamao del campo slo se aplica para campos de tipo texto.ndice1 Es una clusula CONSTRAINT que define el tipo de indice a crear. Estandice2 clusula en opcional.ndicemulticamposEs una clusula CONSTRAINT que define el tipo de indicemulticampos a crear. Un ndice multi campo es aquel que est indexadopor el contenido de varios campos. Esta clusula en opcional.CREATE TABLE Empleados (Nombre TEXT (25) , Apellidos TEXT (50));Crea una nueva tabla llamada Empleados con dos campos, uno llamado Nombre de tipotexto y longutid 25 y otro llamado apellidos con longitud 50.CREATE TABLE Empleados (Nombre TEXT (10), Apellidos TEXT,Fecha_Nacimiento DATETIME) CONSTRAINT IndiceGeneralUNIQUE ([Nombre], [Apellidos], [Fecha_Nacimiento]);Crea una nueva tabla llamada Empleados con un campo Nombre de tipo texto y longitud 10, otro conllamado Apellidos de tipo texto y longitud predeterminada (50) y uno ms llamado Fecha_Nacimientode tipo Fecha/Hora. Tambin crea un ndice nico (no permite valores repetidos) formado por los trescampos.CREATE TABLE Empleados (ID INTEGER CONSTRAINT IndicePrimario PRIMARY,Nombre TEXT, Apellidos TEXT, Fecha_N acimiento DATETIME);Crea una tabla llamada Empleados con un campo Texto de longitud predeterminada (50) llamadoNombre y otro igual llamado Apellidos, crea otro campo llamado FechaNacimiento _de tipo Fecha/Horay el campo ID de tipo entero el que establece como clave principal.11.2 La clusula CONSTRAINTSe utiliza la clusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminarndices. Existen dos sintaxis para esta clusula dependiendo si desea Crear Eliminar un ndice de un nicocampo o si se trata de un campo multindice. Si se utiliza el motor de datos de Microsoft, slo podr utilizaresta clusula con las bases de datos propias de dicho motor.Para los ndices de campos nicos:CONSTRAINT nombre {PRIMARY KEY | UNIQUE | REFERENCES tablaexterna [(campo externo1, campo externo2)]}Para los ndices de campos mltiples:CONSTRAINT nombre {PRIMARY KEY (primario1[, primario2 [, ...]]) |UNIQUE (nico1[, nico2 [, ...]]) |FOREIGN KEY (ref1[, ref2 [, ...]]) REFERENCES tabla externa [(campo externo1[,campo externo2 [, ...]])]}Parte escripcinnombre Es el nombre del ndice que se va a crear.primarioN Es el nombre del campo o de los campos que forman el ndice primario.Es el nombre del campo o de los campos que forman el ndice de clavenicoNnica.refNEs el nombre del campo o de los campos que forman el ndice externo(hacen referencia a campos de otra tabla).tabla externa Es el nombre de la tabla que contiene el campo o los camposASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 26. referenciados en refNEs el nombre del campo o de los campos de la tabla externa especificadospor ref1, ref2, ..., refNcamposexternosSi se desea crear un ndice para un campo cuando se esta utilizando las instrucciones ALTER TABLE oCREATE TABLE la clusula CONTRAINT debe aparecer inmediatamente despus de la especificacin delcampo indexeado.Si se desea crear un ndice con mltiples campos cuando se est utilizando las instrucciones ALTER TABLE oCREATE TABLE la clusula CONSTRAINT debe aparecer fuera de la clusula de creacin de tabla.Tipo deIndiceDescripcinUNIQUEGenera un ndece de clave nica. Lo que implica que los registros de latabla no pueden contener el mismo valor en los campos indexados.PRIMARYGenera un ndice primario el campo o los campos especificados. Todos loscampos de la clave principal deben ser nicos y no nulos, cada tabla slopuede contener una nica clave principal.KEYFOREIGNGenera un ndice externo (toma como valor del ndice campos contenidos enotras tablas). Si la clave principal de la tabla externa consta de ms de uncampo, se debe utilizar una definicin de ndice de mltiples campos,listando todos los campos de referencia, el nombre de la tabla externa, y losnombres de los campos referenciados en la tabla externa en el mismo ordenque los campos de referencia listados. Si los campos referenciados son laclave principal de la tabla externa, no tiene que especificar los camposreferenciados, predeterminado por valor, el motor Jet se comporta como sila clave principal de la tabla externa fueran los campos referenciadosKEY11.3 Creacin de ndicesSi se utiliza el motor de datos Jet de Microsoft slo se pueden crear ndices en bases de datos del mismomotor. La sintaxis para crear un ndice en ua tabla ya definida en la siguiente:CREATE [ UNIQUE ] INDEX ndiceON tabla (campo [ASC|DESC][, campo [ASC|DESC], ...])[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]En donde:Parte Descripcinndice Es el nombre del ndice a crear.tabla Es el nombre de una tabla existentes en la que se crear el ndice. Es elnombre del campo o lista de campos que consituyen campo el ndice.ASC|DESCUNIQUEDISALLOWNULLIndica el orden de los valores de lso campos ASC indica un ordenascendente (valor predeterminado) y DESC un orden descendente.Indica que el indice no puede contener valores duplicados.Prohibe valores nulos en el ndiceIGNORE Excluye del ndice los valores nulos incluidos en los campos que loNULL componen.ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 27. PRIMARYAsigna al ndice la categora de clave principal, en cada tabla slo puedeexistir un nico indice que sea "Clave Principal". Si un ndice es claveprincipal implica que que no puede contener valores nulos ni duplicados.Se puede utilizar CREATE INDEX para crear un pseudo ndice sobre una tabla adjunta en una fuente de datosODBC tal como SQL Server que no tenga todava un ndice. No necesita permiso o tener acceso a un servidorremoto para crear un pseudo ndice, adems la base de datos remota no es consciente y no es afectada por elpseudo ndice. Se utiliza la misma sintaxis para las tabla adjunta que para las originales. Esto es especialmentetil para crear un ndice en una tabla que sera de slo lectura debido a la falta de un ndice.CREATE INDEX MiIndice ON Empleados (Prefijo, Telefono);Crea un ndice llamado MiIndice en la tabla empleados con los campos Prefijo y Telefono.CREATE UNIQUE INDEX MiIndice ON Empleados (ID) WITH DISALLOW NULL;Crea un ndice en la tabla Empleados utilizando el campo ID, obligando que que el campoID no contenga valores nulos ni repetidos.11.4 Modificar el Diseo de una TablaModifica el diseo de una tabla ya existente, se puden modificar los campos o los ndices existentes. Su sintaxises:ALTER TABLE tabla {ADD {COLUMN tipo de campo[(tamao)] [CONSTRAINT ndice]CONSTRAINT ndice multicampo} |DROP {COLUMN campo I CONSTRAINT nombre del ndice} }En donde:Partetabla Es el nombre de la tabla que se desea modificar.campo Es el nombre del campo que se va a aadir o eliminar.tipo Es el tipo de campo que se va a aadir.tamao El el tamao del campo que se va a aadir (slo para campos de texto).Es el nombre del ndice del campo (cuando se crean campos) o elnombre del ndice de la tabla que se desea eliminar.ndicendice Es el nombre del ndice del campo multicampo (cuando se creancampos) o el nombre del ndice de la tabla multicampo que se desea eliminar.Operacin DescripcinADD Se utiliza para aadir un nuevo campo a la tabla, indicando el nombre, elCOLUMN tipo de campo y opcionalmente el tamao (para campos de tipo texto).ADD Se utliza para agregar un ndice de multicampos o de un nico campo.DROP Se utliza para borrar un campo. Se especifica nicamente el nombre delCOLUMN campo.Se utiliza para eliminar un ndice. Se especifica nicamente el nombredel ndice a continuacin de la palabra reservada CONSTRAINT.DROPALTER TABLE Empleados ADD COLUMN Salario CURRENCY;Agrega un campo Salario de tipo Moneda a la tabla Empleados.ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 28. ALTER TABLE Empleados DROP COLUMN Salario;Elimina el campo Salario de la tabla Empleados.ALTER TABLE Pedidos ADD CONSTRAINT RelacionPedidos FOREIGN KEY(ID_Empleado) REFERENCES Empleados (ID_Empleado);Agrega un indice externo a la tabla Pedidos. El ndice externo se basa en el campo ID_Empleado yse refiere al campo ID_Empleado de la tabla Empleados. En este ejemplo no es necesario indicar elcampo junto al nombre de la tabla en la clusula REFERENCES, pues ID_Empleado es la claveprincipal de la tabla Empleados.ALTER TABLE Pedidos DROP CONSTRAINT RelacionPedidos;Elimina el ndide de la tabla Pedidos.12 Consultas con ParmetrosLas consultas con parmetros son aquellas cuyas condiciones de bsqueda se definen mediante parmetros. Sise ejecutan directamente desde la base de datos donde han sido definidas aparecer un mensaje solicitando elvalor de cada uno de los parmetros. Si deseamos ejecutarlas desde una aplicacin hay que asignar primero elvalor de los parmetros y despus ejecutarlas. Su sintaxis es la siguiente:PARAMETERS nombre1 tipo1, nombre2tipo2, En donde:... , nombreN tipoN ConsultaParte Descripcinnombre Es el nombre del parmetrotipo Es el tipo de datos del parmetroconsulta Una consulta SQLPuede utilizar nombre pero no tipo de datos en una clusula WHERE o HAVING.PARAMETERS Precio_Minimo Currency, Fecha_Inicio DateTime;SELECT IDPedido, Cantidad FROM Pedidos WHERE Precio > PrecioMinimo_AND FechaPedido >= Fecha_Inicio;ejemplo siguiente muestra como utilizar los parmetros en el programa de Visual Basic:Public Sub GeneraConsulta()Dim SQL As StringDim Qd As QueryDefDim Rs As RecordsetSQL = "PARAMETERS Precio_Minimo Currency, Fecha_Inicio DateTime; "SQL = SQL & "SELECT IDPedido, Cantidad FROM Pedidos WHERE Precio > "SQL = SQL & "PrecioMinimo AND FechaPedido _ >= Fecha_Inicio; "Set Qd = BaseDatos.CreateQueryDef(MiConsulta, SQL)Qd.Parameters!Precio_MinimoQd.Parameters!FechaInicio2#31/12/95#Set Rs = Qd.OpenRecordset()ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 29. End SubEjemplo:PARAMETERS [Escriba los Apellidos:] Text; SELECT * FROM EmpleadosWHERE [Escriba los Apellidos:] = [Apellidos];La ejecucin desde la base de datos solicita al usuario los apellidos del empleado y despusmuestra los resultados.13. Bases de Datos ExternasPara el acceso a bases de datos externas se utiliza la clusula IN. Se puede acceder a base de datos dBase,Paradox o Btrieve. Esta clusula slo permite la conexin de una base de datos externa a la vez. Una base dedatos externa es una base de datos que no sea la activa. Aunque para mejorar los rendimientos es mejoradjuntarlas a la base de datos actual y trabajar con ellas.Para especificar una base de datos que no pertenece a Access Basic, se agrega un punto y coma (;) al nombrey se encierra entre comillas simples. Tambin puede utilizar la palabra reservada DATABASE paraespecificar la base de datos externa. Por ejemplo, las lneas siguientes especifican la misma tabla:FROM Tabla IN '[dBASE IV; DATABASE=C:DBASEDATOSVENTAS;]';FROM Tabla IN 'C:DBASEDATOSVENTAS' 'dBASE IV;'Acceso a una base de datos externa de Microsoft Access:SELECT IDCliente FROM Clientes IN MISDATOS.MDB WHERE IDCliente Like 'A*';En donde MISDATOS.MDB es el nombre de una base de datos de Microsoft Access quecontiene la tabla Clientes.Acceso a una base de datos externa de dBASE III o IV:SELECT IDCliente FROM Clientes IN 'C:DBASEDATOSVENTAS''dBASE IV'; WHERE IDCliente Like 'A*';Para recuperar datos de una tabla de dBASE III+ hay que utilizar 'dBASE III+;' en lugar de 'dBASEIV;'.Acceso a una base de datos de Paradox 3.x o 4.x:SELECT IDCliente FROM Clientes IN 'C:PARADOXDATOSVENTAS''Paradox 4.x;' WHERE IDCliente Like 'A*';Para recuperar datos de una tabla de Paradox versin 3.x, hay que sustituir 'Paradox4.x;' por 'Paradox 3.x;'.Acceso a una base de datos de Btrieve:SELECT IDCliente FROM Clientes IN 'C:BTRIEVEDATOSVENTASFILE.DDF''Btrieve;' WHERE IDCliente Like 'A*';C:BTRIEVEDATOSVENTASFILE.DDF es la ruta de acceso y nombre de archivo delarchivo de definicin de datos de Btrieve.ASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 30. 14. Omitir los Permisos de EjecucinEn entornos de bases de datos con permisos de seguridad para grupos de trabajo se puede utilizar laclusula WITH OWNERACCESS OPTION para que el usuario actual adquiera los derechos de propietarioa la hora de ejecutar la consulta. Su sintaxis es:instruccin sql WITH OWNERACCESS OPTIONSELECT Apellido, Nombre, Salario FROM Empleados ORDER BYApellido WITH OWNERACCESS OPTION;Esta opcin requiere que est declarado15 La Clusula PROCEDUREEsta clusula es poco usual y se utiliza para crear una consulta a la misma vez que se ejecuta,opcionalmente define los parmetros de la misma. Su sintaxis es la siguiente:PROCEDURE NombreConsulta Parmetro1 tipo1, , ParmetroN tipon ConsultaSQLEn donde:Parte DescripcinNombreConsulta Es el nombre con se guardar la consulta en la base de datos.Parmetro Es el nombre de parmetro o de los parmetros de dicha consulta.tipo Es el tipo de datos del parmetroConsultaSQL Es la consulta que se desea grabar y ejecutar.PROCEDURE Lista_Categorias; SELECT DISTINCTROW Nombre_Categoria,ID_Categora FROM Categorias ORDER BY Nombre_Categoria;Asigna el nombre Listade_categoras a la consulta _ y la ejecuta.PROCEDURE Resumen Fecha_Inicio DateTime, Fecha_Final DateTime; SELECTDISTINCTROW Fecha_Envio, ID_Pedido, Importe_Pedido, Format(Fecha_Envio, "yyyy")AS Ao FROM Pedidos WHERE Fecha_En vio Between FechaIn_ic io And Fecha_Final;Asigna el nombre Resumen a la consulta e incluye dos parmetros.16 ANEXOSASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 31. 16.1 Resolucin de Problemas16.1.1 Buscar Informacin duplicada en un campo de una tabla.Para generar este tipo de consultas lo ms sencillo es utilizar el asistente de consultas de Access,editar la sentencia SQL de la consulta y pegarla en nuestro cdigo. No obstante este tipo de consultase consigue de la siguiente forma:SELECT DISTINCTROW Lista de Campos a Visualizar FROM TablaWHERE CampoDeBusqueda In (SELECT CampoDeBusqueda FROM Tabla As psudnimoGROUP BY CampoDeBusqueda HAVING Count(*)>1 ) ORDER BY CampoDeBusqueda;Un caso prctico, si deseamos localizar aquellos empleados con igual nombre y visualizar sucdigo correspondiente, la consulta sera la siguiente:SELECT DISTINCTROW Empleados.Nombre, Empleados.IdEmpleadoFROM Empleados WHERE Empleados.Nombre In (SELECT Nombre FROMEmpleados As Tmp GROUP BY Nombre HAVING Count(*)>1)ORDER BY Empleados.Nombre;16.1.2 Recuperar Registros de una tabla que no contengan registros relacionados en otra.Este tipo de consulta se emplea en situaciones tales como saber que productos no se han vendidoen un determinado periodo de tiempo,SELECT DISTINCTROW Productos.IdProducto, Productos.Nombre FROM ProductosLEFT JOIN Pedidos ON Productos.IdProducto = Pedidos.IdProduct WHERE(Pedidos.IdProducto Is Null) AND (Pedidos.Fecha Between #01-01-98#And #01-30-98#);La sintaxis es sencilla, se trata de realizar una unin interna entre dos tablas seleccionadas medianteun LEFT JOIN, establecimiendo como condicin que el campo relacionado de la segunda sea Null.16.2 Utlizar SQL desde Visual BasicExisten dos tipos de consultas SQL: las consultas de seleccin (nos devuelven datos) y las consultas deaccin (aquellas que no devuelven ningn registro). Ambas pueden ser tratadas en Visual Basic perode forma diferente.Las consultas de seleccin se ejecutan recogiendo la informacin en un recordset previamentedefinido mediante la instruccin openrecordset(), por ejemplo:Dim SQL as StringDim RS as recordsetSQL = "SELECT * FROM Empleados;"Set RS=MiBaseDatos.OpenRecordSet(SQL)Si la consula de seleccin se encuentra almacenada en una consulta de la base dedatos: Set RS=MiBaseDatos.OpenRecordset("MiConsulta")Las consultas de accin, al no devolver ningn registro, no las podemos asignar a ningn recordset, en estecaso la forma de ejecutarlas es mediante los mtodos Execute y ExecuteSQL (para bases de datos ODBC), porejemplo:Dim SQL as stringSQL = "DELETE * FROM Empleados WHERE CategoriaMiBaseDatos.Execute SQL'Ordenanza';"16.3 Funciones de Visual Basic utilizables en una Instruccin SQLFuncin Sintaxis DescripcinNow Variable= Now Devuelve la fecha y la hora actual del sistemaDate Variable=Date Devuelve la fecha actual del sistemaime Variable=Time Devuelve la hora actual del sistemaASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 32. VariableWeekday(Fecha) =oVar) aiarble=MinuteH(Devuelve los cuatro dgitos correspondientes alao de FechaYear Variable=Year(Fecha)Month Variable=Month(Fecha) Devuelve el nmero del mes del parmetro fecha.DayDevuelve el nmero del da del mes del parmetroVariable=Day(Fecha)fecha.Devuelve un nmero entero que representa el dade la semana del parmetro fecha.WeekdayDevuelve un nmero entre 0 y 23 que representala hora del parmetro Hora.Hour Variable=Hour(Hora)SecondDevuelve un nmero entre 0 y 59 que representalos minutos del parmetro hora.MinuteDevuelve un nmero entre 0 y 59 que representalos segundos del parmetro hora.Variable=Second(Hora)DatePartEsta funcin devuelve una parte sealada de una fecha concreta. Su sintaxis es:DatePart(Parte, Fecha, ComienzoSemana, ComienzoAo)Parte representa a la porcin de fecha que se desea obtener, los posibles valores son:Valor Descripcinyyyy Aoq Trimestrem Mesy D a del aod D a del mesw D a de la semanaww Semana del aoh Horam Minutoss SegundosComienzoSemana indica el primer da de la semana. Los posibles valores son:Valor Descripcin0 Utiliza el valor pode efecto del sistema1 Domingo (Valor predeterminado)2 Lunes3 Martes4 Mircoles5 Jueves6 ViernesASP-ADO Tutoriales de la CuevaPedro Rufohttp.//usuarios.tripod.es/smaug 33. 7 SbadoComienzoAo indica cual es la primera semana del ao; los posibles valores son:Valor Descripcin0 Valor del sistema1 Comienza el ao el 1 de enero (valor predeterminado).2 Empieza con la semana que tenga al memos cuatro das en el nuevo ao.3 Empieza con la semana que est contenida completamente en el nuevo ao.16.4 Evaluar valores antes de ejecutar la Consuta.Dentro de una sentencia SQL podemos emplear la funcin iif para indicar las condiciones debsqueda. La sintaxis de la funcin iif es la siguiente:iif(Expresion,Valor1,Valor2)En donde Expresin es la sentencia que evaluamos; si Expresin es verdadera entonces se devuelveValor1, si Expresin es falsa se devuelve Valor2.SELECT * Total FROM Empleados WHERE Apellidoiff(TXApellido.Text " , TX_Apellido.Text, *) ;Supongamos que en un formulario tenemos una casilla de texto llamanda TX_Apellido. Si cuandoejecutamos esta consulta la casilla contiene algn valor se devuelven todos los empleados cuyoapellido coincida con el texto de la casilla, en caso contrario se devuelven todos los empleados.SELECT Fecha, Producto, Cantidad, (iif(CodigoPostal>=28000 AndCodigoPostal