Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ISTEMAS
UNI
Pag.1
ISTEMAS
UNI
SQL Server es un Sistema de Gestin de Bases de Datos Relacinales (SGBDR), desarrollado por Microsoft, que permite, como su propio nombre indica, la gestin de un entorno de bases de datos relacional. SQL Server abarca, tanto el rea de diseo, como la de administracin, proporcionando un interfaz bastante amigable con el usuario. Por qu se llama SQL Server?. Pues bien, se llama SQL porque utiliza este lenguaje para la definicin y manejo de los datos, y se llama Server porque dispone de una parte servidora que se encarga de atender a los procesos clientes, que son los que realizan las peticiones a ste; es decir, sigue una arquitectura cliente/servidor. SQL Server utiliza una extensin al SQL estndar, que se denomina Transact SQL. Esto quiere decir que soporta el SQL de ANSI, pero adems se le han aadido ciertas funciones adicionales, no contempladas en el estndar, y que son especficas para este producto, es decir, si ejecutamos una sentencia del conjunto adicional (Transact SQL) en otro SGBRD, ste no la entendera. El Transact SQL, soporta la definicin, modificacin y eliminacin de bases de datos, tablas, atributos, ndices, etc., es decir, el lenguaje de definicin de datos (DDL), as como la consulta, actualizacin y borrado de Tuplas o Registros de tablas, es decir, el lenguaje de manipulacin de datos (DML).
El curso sera totalmente practico con bastantes ejercicios para que puedes aprender y dominar los comandos esenciales para que puedas aplicarlos en distintas necesidades que el mercado laboral como Administrador de bases de datos o como desarrollador de sistemas Cliente / Servidor o para aplicaciones en un entorno WEB.
Pag.2
S
LO NUEVO EN SQL-SERVER 2000
ISTEMAS
UNI
Veremos en esta sesion las mejoras que ha sufrido esta versin 2000, con respecto a las anteriores, mejoras que pasamos a detallar a continuacin.
NUEVAS CARACTERSTICAS
Entre las nuevas caractersticas que ofrece SQL-Server 2000, cabe destacar las siguientes: Soporte para XML. Funciones de usuario. Indexacin de vistas. Nuevos tipos de datos. Nuevos triggers. Reglas de integridad referencial en cascada. Nuevas caractersticas de indexacin. Soporte para consultas distribuidas. Caractersticas de seguridad y cifrado de datos.
Pag.3
S
FUNCIONES DE USUARIO
ISTEMAS
UNI
Una funcionalidad nueva que aparece en esta versin del SGBD es la de permitir al usuario definir sus propias funciones. De esta forma se pueden definir funciones que oculten parte de la complejidad que puede entraar una consulta, no slo para la posterior reutilizacin de la misma, sino tambin teniendo en cuenta la abstraccin para otros programadores que puedan precisar su uso.
INDEXACIN DE VISTAS
Esta funcionalidad permite optimizar la ejecucin de vistas que actan sobre la base de datos, creando ndices sobre los resultados de ejecucin de la misma, que son almacenados en la base de datos. El usuario no debe preocuparse de la actualizacin de los datos, sino que stos son indexados automticamente cada vez que se actualicen.
NUEVOS TRIGGERS
Un trigger o desencadenador es un cdigo especial que se ejecuta cuando se cumple una determinad a condicin, como por ejemplo al modificar o borrar datos (se ver en detalle en un captulo posterior). SQL-Server 2000 soporta dos nuevos tipos de triggers, que son INSTEAD OF y que sustituye el comportamiento de ciertos comandos, como por ejemplo insert, update o delete, y AFTER, que se ejecuta una vez concluida la accin que lo ha desencadenado.
Pag.4
ISTEMAS
UNI
PERSONAL EDITION
La versin Personal Edition de SQL Server est diseada para pequeas bases de datos a las que se accede localmente en un sistema cliente. SQL Server 2000 Personal Edition no permite que otros equipos obtengan acceso a la base de datos.
STANDARD EDITION
SQL Server 2000 Standar Edition es una de las dos ediciones servidoras de SQL Server 2000. La versin Standar Edition funciona de la misma forma que la versin Enterprise Edition, excepto que slo se puede acceder a un mximo de cuatro CPUs y 4 GB de memoria con la versin Standar Edition.
Pag.5
S
ENTERPRISE EDITION
ISTEMAS
UNI
La versin Enterprise Edition de SQL Server soporta todas las caractersticas y la funcionalidad de todas las versiones de Windows 2000. SQL Server 2000 Enterprise Edition requiere Windows 2000 Advanced Server o Windows 2000 Datacenter. Adems, SQL Server 2000 Enterprise Edition soporta clsteres de conmutacin por error y vistas distribuidas actualizables.
Pag.6
ISTEMAS
UNI
Pag.7
S
INSTALACIN DE SQL SERVER 2000
ISTEMAS
UNI
En este captulo, veremos como instalar SQL Server 2000, y las distintas opciones que plantea. 1. Para empezar, introduzca el CD-ROM que contiene el programa. Si no arranca automticamente, utilice el explorador para ejecutar el fichero autorun contenido en el CD-ROM. a. Tenemos dos opciones, la STANDARD o la PERSONAL. i. La primera de ellas realiza una instalacin completa, incluyendo los componentes servidor, mientras que la segunda es til en el caso de que no dispongamos de un servidor. La primera pantalla que aparece es la que se muestra en la Figura
En nuestro caso instalaremos la opcin STANDARD (si no disponemos de un servidor, nicamente se instalarn los componentes cliente). 2. En principio, el nico requisito que se necesita es disponer de un equipo con al menos 64 Mb de memoria RAM (recomendable 128 Mb) y sistema operativo Windows 98/NT/2000, en el cual se haya instalado la versin 5.5 del navegador WEB Microsoft Internet Explorer.
Pag.8
S
. 3. Para proseguir la instalacin, pulsamos la opcin SQL Server 2000 Components, aparecindonos la pantalla que muestra la Figura
ISTEMAS
UNI
En este caso, puesto que queremos instalar los componentes cliente en nuestro equipo local, slo nos permite la seleccin de esta opcin. 5. Si pulsamos el botn Next (Siguiente), visualizaremos la siguiente pantalla que muestra la Figura
Nuevamente, al estar instalando la versin standard en un equipo con Windows 98, slo se nos permite seleccionar la opcin de crear una nueva instancia de SQL Server. 6. Pulsando el botn Next (Siguiente), obtendremos la pantalla que se muestra en la Figura, donde se nos insta a poner nuestro nombre y compaa.
Pag.9
ISTEMAS
UNI
7. Si pulsamos nuevamente el botn Next (Siguiente), podremos visualizar la pantalla que se muestra en la Figura, cuyo cometido es el de mostrarnos las condiciones de uso de la licencia; pulsamos Yes (si) para pasar a la siguiente pantalla que se indica en la Figura
8. Seleccionando la opcin de instalacin de las herramientas cliente y pulsando el botn Next, accederemos a la pantalla de la Figura, en la que podemos seleccionar los componentes y subcomponentes a instalar.
Pag.10
ISTEMAS
UNI
9. Dejamos marcados los que vienen por defecto y pulsamos el botn Next (siguiente), para acceder a la pgina de la Figura, tras la cual el sistema empezar a instalar los componentes seleccionados y, tras unos minutos, mostrar la pantalla final en la cual se nos informa de la conclusin del proceso de instalacin, como muestra la Figura
Pag.11
ISTEMAS
UNI
Pag.12
ISTEMAS
UNI
Pag.13
S
SERVICIOS DE SQL SERVER
ISTEMAS
UNI
Normalmente, los servicios disponibles son el servidor de bases de datos en s mismo (MSSQLServer), el coordinador de transacciones distribuidas (MSDTC) y el agente de SQL Server (SQLServerAgent). Basta con iniciar el servicio MSSQLServer para que estn disponibles todas las bases del servidor.
Microsoft Search.
Pag.14
S
EL ADMINISTRADOR DE SERVICIOS
ISTEMAS
UNI
El Administrador de servicios es una pequea aplicacin que permanece activa en la Bandeja de conos de la barra de Tareas de Windows de la computadora donde est instalado SQL Server. Haciendo doble clic en este icono aparece la ventana del Administrador de servicios. En ella es posible seleccionar cualquiera de los servicios de SQLServer para ver su estado o para iniciarlo, detenerlo o ponerlo en pausa
Mediante el cono del Administrador de servicios en la barra de Tareas se activa la ventana del mismo. Una vez abierta, se puede utilizar para ver el estado de los servicios de SQL Server, as como iniciarlos, detenerlos o ponerlos en pausa.
Normalmente, los servicios disponibles son el servidor de bases de datos en s mismo (MSSQLServer), el coordinador de transacciones distribuidas (MSDTC) y el agente de SQL Server (SQLServerAgent).Basta con iniciar el servicio MSSQLServer para que estn disponibles todas las bases del servidor
SERVICIO MSSQLSERVER
Este servicio es el motor de la Base de Datos. Este es el componente que procesa todas las declaraciones de Transact-SQL y administra todos los archivos que definen a la Base de Datos dentro del Servidor. Sus caractersticas son: Asignar los recursos de la computadora a mltiples usuarios simultneos. Previene problemas lgicos, tales como sincronizacin de peticiones de usuarios que desean actualizar la misma informacin al mismo tiempo. Garantiza la integridad y consistencia de datos.
Pag.15
S
SERVICIO SQLSERVERAGENT
ISTEMAS
UNI
El Agente SQL Server admite funciones que permiten programar trabajos para ejecutarse en forma peridica en Microsoft SQL Server 2000 o notificar a los administradores de sistemas acerca de los problemas que han tenido lugar con el servidor. Los componentes del Agente SQL Server que implementan dichas funciones son:
Trabajos Objetos definidos que constan de uno o ms pasos para llevarse a cabo. Los pasos son las instrucciones Transact-SQL que se van a ejecutar. Por ejemplo, se pueden programar trabajos como crear copias de seguridad para que se ejecuten a horas especficas o a intervalos regulares.
Alertas Acciones que se realizan cuando se producen sucesos especficos, como un error concreto o errores de cierta gravedad, o cuando se alcanza el lmite de espacio libre disponible definido en una base de datos. Se puede definir que la alerta realice acciones como el envo de mensajes de correo electrnico, mensajes de localizacin a un operador o la ejecucin de un trabajo que resuelva el problema.
Operadores Personas identificadas mediante sus cuentas de red o de correo electrnico, quienes pueden resolver los problemas del servidor. Pueden ser destinos de las alertas, a travs de correo electrnico, un localizador o comandos de red envo de red.
Pag.16
S
SERVICIO MICROSOFT SEARCH
ISTEMAS
UNI
El Servicio Microsoft Search es un motor de indexacin(ordenacion) y de bsqueda de texto que permite al SQL Server realizar consultas de texto eficaces y sofisticadas sobre columnas que almacenan datos basados en caracteres(textos) Pero antes de utilizar este servicio tenemos que instalarlo. El motor de texto se ejecuta como un servicio denominado Microsoft Search en Windows NT Server, Windows 2000 y Windows 2003 Server y tambin se puede instalar durante la instalacin del SQL Server (No est disponible para la versin SQL Server Personal) Para saber si este servicio est instalado en nuestro equipo la manera ms sencilla es recurrir al Administrador de Servicios del SQL Server Entre las diferencias existentes entre este servicio y las bsquedas que utilizan el operador LIKE podemos citar las siguientes: 1. Se almacenan en el sistema de archivos y no en la base de datos, aunque es la base de datos quien los administra. 2. Slo se permite un ndice de texto por cada tabla. 3. Si se desea agregar datos a los ndices de texto hay que realizar un llenado manual o programado (Tambin se pueden llenar automticamente en la insercin de datos). Son ms rpidos y flexibles. La utilizacin del servicio Microsoft Search tendr dos vertientes. En primer lugar tenemos que crear los ndices de texto en las tablas deseadas y llenarlos, y en segundo lugar el servicio realizar las bsquedas y devolver conjuntos de resultados adecuados al criterio de bsqueda.
Pag.17
ISTEMAS
UNI
SQL Server incluye una variedad de software para administrar y mantener al servidor, encontrando ayuda acerca de temas especficos, diseando y creando Bases de Datos y buscando informacin.
Pag.18
ISTEMAS
UNI
El Administrador corporativo presenta una interfase de usuario dividida en dos paneles: a la izquierda muestra un rbol que contiene todos los elementos que puede manejar el Administrador, y a la derecha contiene el detalle del objeto seleccionado en el frame de la izquierda.
Pag.19
ISTEMAS
UNI
Pag.20
ISTEMAS
UNI
El Administrador corporativo permite iniciar y detener un servidor, y tambin capacita para realizar las siguientes tareas: Registrar el servidor. Configurar servidores locales y remotos. Configurar y administrar una instalacin de mltiples servidores. Ajustar la seguridad de inicio de sesin y aadir usuarios, administradores de sistema y operadores. Asignar una contrasea de administrador de sistema (system administrator, sa). Crear y programar trabajos. Crear alertas y configurar SQL Server para que se comunique con los administradores de sistema a travs de correo electrnico. Configurar y administrar bases de datos, tablas, ndices, vistas, procedimientos almacenados, reglas, desencadenadores, definiciones DEFAULT, dispositivos de copia de seguridad y registros de error. Acceder al servidor: Una vez que se ha registrado el servidor, se pueden ver y configurar varias propiedades. Si se tiene un entorno multiservidor, se puede utilizar el Administrador corporativo para administrar y configurar los servidores desde un nico lugar. Cambiar la contrasea de administrador de sistema predeterminada Al instalar SQL Server, la cuenta de administrador de sistema predeterminada se configura sin contrasea. Se debe especificar una contrasea antes de comenzar a usar SQL Server
Pag.21
ISTEMAS
UNI
2. Pulse clic en el botn Siguiente de la primera pantalla del asistente aparece otra pantalla en la cual se debe ingresar el nombre del servidor que se desea registrar. Suponiendo que vamos a registrar un servidor denominado ADMINSUELDOS, en el cuadro de texto que encabeza la lista titulada Servidores disponibles deberamos ingresar este nombre si es que no figura en la lista y luego pulsar el boton Agregar para que pase a la lista de Servidores agregados Si hubiera ms de un servidor disponible, se podran registrar varios de una sola vez, pasndolos a la lista de la derecha antes de cliquear en Siguiente.
Pag.22
ISTEMAS
UNI
Ahora el asistente solicita el modo de autenticacin que se utilizar cada vez que se deba conectar al servidor. La eleccin en este caso depende de las polticas de seguridad que se hayan establecido en la red. Pero generalmente (incluso en el caso de que el servidor corra localmente) se debe seleccionar la segunda opcin, que indica que se utilice Autenticacin SQL Server, o sea, que el nombre de usuario y password que se empleen para conectarse a la base se validarn contra la lista de usuarios habilitados por SQL Server (la otra opcin determina que se validen contra los usuarios habilitados por Windows NT). 3. Hecho esto, se puede pulsar click en Siguiente y pasar al prximo paso,en el cual se debe determinar si la conexin se har automticamente con un nombre de usuario y password especficos o si stos se solicitarn cada vez que se haga la conexin.
En caso de que se elija la primera opcin, se puede optar por seleccionar el usuario SApor system administrator, se supone, sin password, que se define por defecto en las instalaciones nuevas de SQL Server .Lgicamente, si la base de datos requiere un mnimo de seguridad para evitar el acceso de usuarios no autorizados, la primera medida a tomar consiste en crear un nuevo usuario con los mismos derechos que SA, pero con otro nombre y otra password, e inmediatamente eliminar el usuario SA. 4. En el paso siguiente hay que seleccionar un grupo de servidores bajo el cual se colocar el nuevo registro de servidor. Esta agrupacin es til en empresas que cuentan con gran cantidad de servidores reunidos por sectores (por ejemplo, Produccin, Ventas, Administracin, etc.). Salvo estos casos, se puede registrar el nuevo servidor bajo el grupo que se crea por defecto; si no aparece ninguno, se puede crear un grupo dndole el nombre que uno desee
Pag.23
ISTEMAS
UNI
5. En la ltima pantalla del asistente se muestra la lista de servidores a agregar y el botn Finalizar. Al cliquear en l, el asistente intentar registrar el o los servidores seleccionados. Puede que se produzca un error durante el proceso de registracin. En la mayora de los casos,el origen de la falla ser un problema en la especificacin de las direcciones de red y los protocolos a utilizar, y dems parmetros de comunicacin. Para solucionarlo, hay que recurrir a la Herramienta de red de cliente y examinar la configuracin de la misma con ayuda del administrador de la red. Una vez registrado el servidor, se puede cliquear en el + a la izquierda del icono que lo representa en el rbol de la consola para desplegar todos sus elementos. Luego, haciendo clic en el botn + a la izquierda de la carpeta Bases de datos aparecen todas las bases definidas dentro de este servidor.
Pag.24
ISTEMAS
UNI
Pag.25
S
ACCEDER AL SERVIDOR EN EL ADMINISTRADOR CORPORATIVO
ISTEMAS
UNI
Una vez que se haya registrado con xito el servidor utilizando Administrador corporativo, se puede acceder a todas sus propiedades, bases de datos y objetos. Para ver las propiedades y objetos del servidor recin registrado, en primer lugar hay que expandir el grupo de servidores en el panel izquierdo de la ventana de Administrador corporativo. Aparece una lista de todos los servidores del grupo. A continuacin expandir el nombre del servidor para que se muestren todas sus propiedades y objetos.
Pag.26
S
CONFIGURACIN DEL SERVIDOR
ISTEMAS
UNI
A travs del Administrador corporativo se puede realizar la configuracin del servidor, redefiniendo los parmetros de memoria, las conexiones de usuario o los bloqueos establecidos. Cada una de las pestaas de la pantalla anterior tienen las siguientes funciones:
General: Permite establecer parmetros de arranque, y proporciona informacin general sobre la instalacin Memoria: Reservar memoria fsica o configurar la gestin dinmica de la memoria del servidor. Procesador: Gestionar el entorno multiprocesador.(Varios procesadores) Seguridad: Autenticacin, auditora, y arranque. Conexiones: Gestin de usuarios concurrentes y atributos. Parmetros de Servidor: Soporte ao 2000, lenguaje, etc. Parmetros de Base de datos: ndices, periodo de recuperacin y gestin de salvaguardas.
En el siguiente ejemplo definiremos la configuracin de memoria para que utilice de forma dinmica entre 8MB y 14MB: 1. Ejecute el Administrador corporativo y seleccione el servidor que desea configurar. 2. En la barra de men seleccione Herramientas, Propiedades de configuracin de SQL SErver. 3. Acceda a la pestaa Memoria. 4. Cambie el valor mnimo del parmetro Configurar dinmicamente la memoria a 8Mb. Haga clic en Aceptar La cantidad mxima de memoria que se puede asignar a SQL Server es la cantidad total de RAM disponible en su servidor. Si la cantidad de carga flucta, establezca que la memoria se configure dinmicamente.
Pag.27
ISTEMAS
UNI
Pag.28
ISTEMAS
UNI
MASTER
La base de datos Master registra toda la informacin de nivel de sistema para el servidor SQL Server. Esto incluye: 1. Las cuentas de inicio de sesin, 2. parmetros de configuracin del servidor, 3. Registrar la existencia de otras bases de datos, etc. La base de datos Master es absolutamente crtica para los datos, por le que debera mantener siempre una copia de seguridad de la misma. La mayor parte de los procedimientos almacenados del sistema tambin se guardan en esta base de datos, junto a los mensajes de error.
Pag.29
S
MSBD
ISTEMAS
UNI
Su uso principal es el almacenamiento de la informacin que emplea el agente SQL Server, como programacin de trabajos, definicin de operadores y alertas. La informacin de la copia de seguridad tambin se almacena en esta base de datos, y se emplea en la restauracin de la base de datos.
MODEL
Es una base de datos plantilla, que se emplea cada vez que se crea una nueva base de datos. Los contenidos de la base Model se copian a la nueva base. Si se desea que determinados objetos, permisos, usuarios se creen automticamente cada vez que se crea una base de datos, pueden incluirse en esta base.
TEMP
Algunas veces SQL Server necesita crear tablas temporales internas (o tablas de trabajo) para determinadas operaciones. Entre dichas operaciones se incluye la ordenacin, las operaciones multitabla, el tratamiento de cursores, etc. Estas tablas temporales se borran tan pronto como el conjunto de resultados se devuelve a la aplicacin cliente, o cuando se cierra el cursor. Almacena todas las tablas y procedimientos almacenados temporales. Esta base de crea de nuevo cada vez que se inicia SQL Server, por lo que no tiene sentido crear copias de seguridad de esta. Cada base de datos dispone de un conjunto de tablas que la describen. Estas tablas se denominan Catlogo de la base de datos. La base de datos MASTER tiene un conjunto adicional de tablas que describen la instalacin de SQL Server. Este conjunto se denomina Catlogo del sistema.
Pag.30
ISTEMAS
UNI
La informacin de configuracin utilizada por el Agente SQL Server. Incluye informacin acerca de trabajos, pasos de trabajo, alertas, operadores, etc. Informacin histrica de copia de seguridad. Se conserva para que el Administrador Corporativo pueda ayudar en la restauracin de la base de datos.
Adems de tablas, tambin hay Vistas del Sistema, y Procedimientos almacenados del Sistema. Un procedimiento almacenado del sistema es un procedimiento almacenado con algunas caractersticas especiales. Estos procedimientos, creados cuando SQL Server se instala, se usan para administrar el Servidor. Evitan al administrador tener que acceder directamente a las tablas del sistema
El nombre del procedimiento almacenado empieza por sp_. El procedimiento se almacena en la base de datos Master. El procedimiento es propiedad del dbo, es decir ha sido creado por el administrador del sistema.
Pag.31
ISTEMAS
UNI
Una Base de Datos se crea sobre un conjunto de archivos de base de datos. La forma en la que se almacene va a afectar en gran media al rendimiento (velocidad) de respuesta ante consultas y actualizaciones. La pgina es el nivel inferior de entrada/salida de SQL Server, y es la unidad de almacenamiento fundamental. Las pginas contienen los propios datos o bien informacin acerca de la disposicin fsica de los datos. Existen seis tipos de pgina en SQL Server: Tipo de Pgina Datos ndice VarChar e imagen Mapa de Asignacin Global Pgina de Espacio Libre Mapa de Asignacin de ndices Almacena Las filas reales (registros) que forman las tablas de datos. Los elementos de ndice y punteros. Los datos de VarChar o e imgenes Informacin acerca de las extensiones empleadas Informacin acerca del espacio libre en las pginas. Informacin acerca de las extensiones usadas por una tabla o ndice.
Todas las pginas tienen una disposicin similar. Todas tienen una cabecera de pgina de 96 bytes, y un cuerpo que, en consecuencia, ocupa 8.096 bytes. La informacin almacenada en la cabecera y en el cuerpo depende del tipo de pgina.
El administrador de una base de datos, con sus privilegios, puede examinar el contenido de una pgina mediante el comando DBCC PAGE.
Pag.32
ISTEMAS
UNI
Un archivo de base de datos puede configurarse para crecer automticamente, si se desea, o se puede limitar en su crecimiento. La unidad ms pequea de entrada/salida y la estructura bsica de almacenamiento es una pgina de 8 KB. Las pginas de una tabla o ndice se agrupan de ocho en ocho, en extensiones. Las extensiones pueden compartirse entre tablas, lo que hace que se desperdicie menos espacio de almacenamiento entre tablas pequeas. Utilizando grupos de archivos, se puede especificar el archivo (o conjunto de archivos) en el que se debera almacenar una tabla o ndice.
Un ndice agrupado ordena la tabla de acuerdo a la clave del ndice. Los ndices no agrupados (tambin llamados rboles binarios) apuntan a las filas de datos. El tamao mximo de un nico archivo de base de datos es de 32 TB (treinta y dos billones de bytes), y el tamao mximo de una base de datos es de 1.048.516 TB.
Pag.33
S
ARCHIVOS DE BASES DE DATOS
ISTEMAS
UNI
Como ya se ha mencionado, una base de datos de SQL Server est compuesta de un conjunto de archivos del sistema operativo. Un archivo de base de datos puede ser un archivo de datos o bien un archivo de registro. Los archivos de datos se usan para almacenar datos y objetos como tablas, ndices, vistas, desencadenadores y procedimientos almacenados. Hay dos tipos de archivos de datos: principales y secundarios. Los archivos de registro sirven para almacenar solamente informacin del registro de transacciones. El espacio de registro se gestiona siempre de manera separada del espacio de datos y nunca puede formar parte de un archivos de datos.
Todas las bases de datos deben crearse con, al menos, un archivos de datos y un archivo de registro, y los archivos no pueden ser utilizados por ms de una base de datos, esto es, las bases de datos no pueden compartir archivos. La lista siguiente describe los tres tipos de archivos que puede usar una base de datos: 1. ARCHIVO DE DATOS PRINCIPAL: Un archivo de datos principal contiene toda la informacin de inicio para la base de datos y sus tablas y objetos de sistema. Apunta al resto de archivo creados en la base de datos. Tambin puede almacenar tablas y objetos definidos por el usuario, pero no tiene por qu hacerlo. Cada base de datos debe tener exactamente un archivo principal. La extensin de archivo recomendada es mdf. 2. ARCHIVOS DE DATOS SECUNDARIOS: Los archivos de datos secundarios son opcionales. Pueden contener datos y objetos que no se encuentren en el archivo principal. Una base de datos podra no tener ningn archivo secundario si todos sus datos se encuentran en el archivo principal. Se pueden tener cero, uno, o mltiples archivos secundarios. Algunas bases de datos necesitan archivos secundarios mltiples para poder repartir los datos entre discos separados. La extensin de archivo recomendada es ndf. 3. ARCHIVOS DE REGISTRO DE TRANSACCIONES: Un archivo de registro de transacciones contiene toda la informacin de registro de transacciones utilizada para recuperar la base de datos. Toda base de datos debe tener al menos un archivo de registro y puede tener mltiples archivos de registro. La extensin de archivo recomendada es ldf. Una base de datos simple podra tener un archivo de datos principal, que sea suficientemente grande corno para contener todos los datos y objetos y un archivo de registro de transacciones. Una base de datos ms compleja podra tener un archivo de datos principal, cinco archivos de datos secundarios y dos archivos de registro de transacciones. Entonces, cmo podran estar los datos repartidos entre todos los archivos de datos? La respuesta es que se pueden utilizar grupos de archivos para ordenar los datos.
Pag.34
S
GRUPOS DE ARCHIVOS
ISTEMAS
UNI
Los grupos de archivos permiten agrupar archivos con propsitos administrativos y de emplazamiento de datos. Los grupos de archivos pueden mejorar el rendimiento de la base de datos permitiendo que se cree una base de datos repartida entre mltiples discos o servidores .Se pueden crear tablas e ndices en discos especficos mediante el uso de grupos de archivos, permitiendo de esta manera dirigir la E/S de una cierta tabla o ndice a los discos de uno o varios servidores. Hay tres tipos de grupos de archivos. Las caractersticas principales de estos grupos de archivos se resumen en la siguiente lista: 1. Grupo de archivos principal: Contiene el archivo de datos principal y todos los otros archivos que no se hayan puesto en otro grupo de archivos. Las tablas del sistema -que definen usuarios, objetos y permisos para una base de datos- estn asignadas al grupo de archivos principal de esa base de datos. SQL Server crea automticamente las tablas de sistema al crearse una base de datos. 2. Grupos de archivos definidos por el usuario: Incluyen cualquier grupo de archivos creado por el usuario mientras dura el proceso de creacin (o cambio posterior) de una base de datos. Una tabla o un ndice puede ser creado para ser colocado en un grupo de archivos definido por el usuario especfico. 3. Grupo de archivos predeterminado: Guarda todas las pginas para las tablas e ndices que no tienen un grupo de archivos especificado al crearse. El grupo de archivos predeterminado es, de manera predeterminada, el grupo de archivos principal. Ejemplo de un Caso de aplicacion Para mejorar el rendimiento se puede controlar la ubicacin de los datos mediante la creacin de tablas e ndices en grupos de archivos diferentes. Por ejemplo, podra desearse poner una tabla que es utilizada intensivamente en un grupo de archivos de un grupo grande de discos (compuesto de 10 unidades de disco, por ejemplo) y poner otra tabla que se utiliza de una manera menos intensiva en otro grupo de archivos creado en un grupo de discos distinto, ms pequeo (compuesto de 4 unidades de disco, por ejemplo). As, la tabla a la que se accede ms frecuentemente estar repartida en el nmero mayor de discos, permitiendo una E/S de disco con mayor eficiencia
Pag.35
S
REGLAS Y RECOMENDACIONES
ISTEMAS
UNI
Se debe tener una estrategia bien desarrollada para el uso de archivos y grupos de archivos antes de crear la base de datos. Para ello se deben conocer las siguientes reglas de SQL Server 2000: 1. Los archivos y grupos de archivos no pueden ser usados por ms de una base de datos. 2. Un archivo slo puede ser miembro de un grupo de archivos. 3. Los datos y la informacin del registro de transacciones no pueden formar parte del mismo archivo.El espacio de registro siempre se gestiona de manera separada del espacio de datos. Los archivos de registro de transacciones no son nunca parte de un grupo de archivos. 4. Una vez se crea un archivo como parte de una base de datos, no puede moverse a otro Grupo de archivos. Si se quiere mover un archivo, hay que borrarlo y volverlo a crear. Adems de estas reglas, hay modos especficos de uso de archivos y grupos de archivos que ayudan a disear la base de datos: 5. La mayora de las bases de datos funcionarn correctamente con slo un archivo de datos principal y un archivo de registro de transacciones. Este es el diseo recomendado para bases de datos que no hacen un uso particularmente intenso de la E/S. Si se tiene un sistema con una utilizacin intensiva de la E/S que requiera muchas unidades de disco, probablemente se desee utilizar grupos de archivos definidos por el usuario que repartan los datos entre discos o disposiciones de discos para mejorar el rendimiento de la E/S paralela. 6. Colocar los archivos de registro siempre en discos distintos de los discos que contengan archivos de datos, tal y como mencion anteriormente. 7. Si se necesita usar archivos de datos mltiples, utilizar el archivo de datos principal solamente para las tablas y objetos del sistema, y crear uno o ms archivos de datos secundarios para los datos y objetos del usuario. 8. Crear los archivos y grupos de archivos entre tantos discos fsicos como haya disponibles para permitir una mayor cantidad de E/S de disco paralela y maximizar el rendimiento. 9. Poner las tablas diferentes que se usen en una misma consulta en discos fsicos diferentes, si es posible, para permitir E/S paralela de disco mientras el motor de bsqueda encuentra los datos.
Pag.36
S
CREACIN DE BASES DE DATOS
ISTEMAS
UNI
SQL Server proporciona tres mtodos para la creacin de una base de datos: el Asistente para creacin de bases de datos, el Administrador corporativo de SQL Server y comandos T-SQL que pueden guardarse en un archivo y ejecutarse como un archivo de comandos: El asistente coloca todos los archivos de datos que crea en una sola unidad de disco en la carpeta que se le especifique. No se puede poner archivos de datos en posiciones fsicas diferentes (ni en unidades diferentes ni en carpetas diferentes) si se utiliza el asistente .Debido a estas limitaciones, el Asistente para creacin de bases de datos es la mejor eleccin si slo se necesita un archivo de datos principal y un archivo de registro de transacciones en la base de datos. (Por otra parte, siempre se pueden aadir archivos y grupos de archivos a la base de datos posteriormente si se necesitan.)
Pag.37
S
3. Pulsar dos veces en el Asistente para creacin de bases de datos para iniciar el Asistente para creacin de bases de datos.
ISTEMAS
UNI
4. Pulsar Siguiente para pasar a la pantalla Dar nombre a la base de datos y especificar su ubicacin. Escribir el nombre de la base de datos que se quiere crear y las rutas de las posiciones donde se quieren almacenar los archivos de datos y los archivos de registro.
5. Una vez se haya nombrado la base de datos y localizado la ruta en que deben estar los archivos de datos y registro, pulsar Siguiente para continuar.
Se muestra la pantalla Dar nombre a los archivos de base de datos. En esta pantalla se puede escribir el nombre y tamao inicial para cada uno de los archivos de base de datos. El archivo principal de la base de datos se crea automticamente y se le da el nombre de la base de datos como prefijo en su nombre. Se puede aceptar este nombre o escribir uno diferente 5. Pulsar Siguiente para continuar se muestra la pantalla Definir el crecimiento del archivo de base de datos.
Pag.38
ISTEMAS
UNI
6. SQL Server puede aumentar automticamente el tamao de la base de datos segn se necesite, lo cual ayuda a reducir la sobrecarga de mantenimiento En general, se debera seleccionar la caracterstica de crecimiento automtico (Crecimiento automtico de archivos de base de datos) porque implica poca sobrecarga de rendimiento de otra forma, se necesitar ajustar manualmente el tamao de la base de datos segn sea necesario. Si se pulsa Crecimiento automtico de archivos de base de datos se puede especificar la manera en que el archivo de base de datos deber aumentar: bien en un nmero fijo de megabytes o segn un porcentaje del tamao actual. Debe tenerse en cuenta que el archivo de base de datos crecer slo segn se necesite. Tambin se puede restringir la base de datos a un tamao mximo o dejarla crecer sin restricciones. Las configuraciones de esta pantalla se aplicarn a cada archivo de base de datos que se creara en el paso 4.
Pag.39
ISTEMAS
UNI
7. Pulsar Siguiente para continuar.Aparece la pantalla Dar nombre a los archivos del registro de transacciones. Esta pantalla parece igual a la pantalla Dar nombre a los archivos de base de datos, pero esta versin es para el archivo de registro. Ha de tenerse cuidado de no confundir las pantallas. Tal y como se hizo en el paso 4 para los archivos de base de datos, escribir el nombre y tamao inicial para el registro de transacciones. (Recurdese que un registro de transacciones contiene una grabacin de todas las modificaciones de la base de datos para posibilitar la recuperacin en caso de un fallo de sistema.) 8. Pulsar Siguiente para continuar.Se muestra la pantalla Definir el crecimiento del archivo de registro de transacciones
9. Aparece la pantalla Completando el Asistente para creacin de bases de datos. Finalizar para terminar la creacin de la base de datos Una vez se ha creado la base de datos, aparece un cuadro de mensaje Asistente para creacin de bases de datos para informar que la base de datos se ha creado correctamente. Pulsar Aceptar para cerrar este cuadro de mensaje.Aparece otro cuadro de mensaje, que pregunta si se quiere crear un plan de mantenimiento para la nueva base de datos. Se recomienda crear un plan de mantenimiento para asegurarse de que la base de datos tenga un comportamiento correcto, se haga copia de seguridad regularmente por si hay fallo del sistema y sea verificada contra inconsistencias.
Pag.40
ISTEMAS
UNI
2. Se abre la ventana Propiedades de la base de datos, con la pestaa General en primer plano, como se ve en la figura siguiente. Escribir el nombre de la base de datos en el cuadro Nombre.
Pag.41
ISTEMAS
UNI
3. Pulsar la pestaa Archivos de datos. Como se muestra en la figura siguiente, el Administrador corporativo crea automticamente el archivo de datos principal, con el nombre de la base de datos como prefijo y PRIMARY como grupo de archivos.
4. Se puede cambiar el nombre, posicin y tamao del archivo principal, pero no se puede cambiar el grupo de archivos del archivo de datos principal. Escribir el nombre de archivo (nombre lgico), ubicacin (nombre fsico), tamao y grupo de archivos de cada archivo que se desee crear. Para cada archivo distinto del archivo principal se puede escribir un nombre de grupo de archivos definido por el usuario, y dicho grupo de archivos ser creado
Una vez se hayan definido tantos archivos como se desee, pulsar Aceptar. SQL Server crear la base de datos. Volver al Administrador corporativo y pulsar la carpeta Bases de datos del servidor al que se ha aadido la base de datos. En el panel derecho del Administrador corporativo se ver que SQL Server ha aadido un icono para esa base de datos.
Pag.42
S
EXAMINAR BASES DE DATOS
ISTEMAS
UNI
Tras crear una base de datos se puede utilizar el Administrador corporativo para explorar y ver objetos en ella.
Pag.43
S
TABLAS EN LAS BASES DE DATOS
ISTEMAS
UNI
Una vez se haya creado una base de datos (con archivos y grupos de archivos), el siguiente paso es crear los objetos, denominados tablas, que permiten organizar y almacenar los datos. Para crear una tabla considere la siguiente lista da un esquema de estas decisiones de diseo: 1. Qu datos contendr cada tabla? 2. Qu columnas deben crearse para albergar los datos y cmo deben llamarse? 3. Cules son los requisitos del rango de los datos que se permitira contener a una columna qu tipo de datos Microsoft SQL Server 2000 debe utilizarse para cada columna? 4. Hay alguna columna a la que se deba permitir contener valores NULL o pueden utilizarse valores predeterminados en su lugar? (Permitir valores NULL provoca mayor carga de procesamiento que la utilizacin de valores predeterminados.) 5. Qu columnas sern claves principales y cules sern claves foraneas? 6. Qu tipo de ndices (agrupados o no agrupados) debe tener la tabla y en qu columna columnas deben definirse dichos ndices? 7. Qu usuarios deben tener acceso a qu tablas?
Para definir una tabla se debe decidir qu columnas definir y qu tipo de datos, como por ejemplo datos de caracteres o numricos, se permite que haya en cada columna. Tambin se debe decidir sobre un rango permisible a esos datos -por ejemplo, podra decidirse permitir hasta 30 caracteres o nmeros.
Pag.44
S
Tipos de Datos SQl server
ISTEMAS
UNI
Pag.45
ISTEMAS
UNI
Pag.46
ISTEMAS
UNI
CREACIN DE TIPOS DE DATOS DEFINIDOS POR EL USUARIO MEDIANTE EL USO DEL ADMINISTRADOR CORPORATIVO
Podra desearse crear tipos de datos para datos como nmeros de telfono, cdigos postales, nmeros de la Seguridad Social y cualesquiera otros datos que se puedan definir claramente y que se vayan a utilizar en ms de una tabla de base de datos. 1. En el Administrador corporativo, expandir un grupo SQL Server (pulsando en el signo ms al lado de la carpeta) y a continuacin expandir un servidor. 2. Expandir la carpeta Bases de datos y luego expandir una base de datos. . 3. Pulsar con el botn derecho del ratn en Tipos de datos definidos por el usuario y elegir Nuevo tipo de datos definido por el usuario en el men de contexto. Aparece la ventana Propiedades del tipo de datos definido por el usuario.
3. Escribir el nombre del nuevo tipo de datos en el cuadro de texto Nombre, como se muestra en la siguiente figura. A continuacin se debe especificar el tipo de datos SQL Server y la longitud que de describen el campo definido por el usuario. En el ejemplo de la figura anterior se est definiendo un tipo de datos para la columna Telefono, as que se elegir el tipo nVarchar, con un valor de longitud predeterminado de 7. 4. Si el tipo de datos debe permitir valores NULL, seleccionar la casilla de verificacin Permitir valores NULL. 5. Si el tipo de datos debe utilizar alguna regla predefinida o valor predeterminado, seleccionarlo en su respectivo cuadro de lista. 6. Pulsar Aceptar para guardar el nuevo tipo de datos.
Pag.47
ISTEMAS
UNI
Para crear una tabla de base de datos utilizando el Administrador corporativo hay que seguir estos pasos: 1. En el Administrador corporativo, desplegar un grupo SQL Server y a continuacin expandir un servidor. 2. Desplegar la carpeta Bases de datos para ver las bases de datos disponibles. 3. Expandir la base de datos en que se desee trabajar 4. Pulsar con el botn derecho del ratn la carpeta Tablas y elegir Nueva tabla en el men de contexto que aparece. Aparece la ventana Tabla nueva, como se muestra (maximizada) en la figura siguiente.
Pag.48
ISTEMAS
UNI
5. Definir cada una de las columnas de la tabla de la base de datos -trabajando fila por fila - escribiendo el nombre en la columna Nombre de columna, eligiendo el tipo de datos del men desplegable de la columna Tipo de datos, eligiendo la longitud cuando sea aplicable (como para tipos de datos de caracteres) y presionando la tecla Maysculas (o la barra espaciadora) o pulsando en la columna Permitir valores nulos si el dato no es obligatorio.
Pag.49
ISTEMAS
UNI
IDENTIDAD Muestra si SQL Server utiliza la columna como una columna de identificador. Los valores posibles son: No La columna no se utiliza como una columna de identidad. S La columna se utiliza como una columna de identidad. S (no disponible para duplicacin) La columna se utiliza como una columna de identidad, salvo si un agente de duplicacin est insertando datos en la tabla. INICIALIZACIN DE IDENTIDAD Muestra el valor de inicializacin de una columna de identidad. Esta opcin slo se aplica a las columnas cuya opcin Identidad se ha establecido como S o S (no disponible para duplicacin). INCREMENTO DE IDENTIDAD Muestra el valor de incremento de una columna de identidad. Esta opcin slo se aplica a las columnas cuya opcin Identidad se ha establecido como S o S (no disponible para duplicacin). ES ROWGUID Muestra si SQL Server utiliza la columna como una columna ROWGUID. Este valor se puede establecer como S slo para una columna de identidad. ROWGUIDCOL es una propiedad que puede asignar a una columna con valores uniqueidentifier, un tipo de datos de SQL Server 2000 que define un entero de 128 bits garantizado como nico. Como tal, el uso de una columna rowguid como clave principal es una alternativa segura al uso de una columna de identidad para garantizar la exclusividad. FRMULA Muestra la frmula para una columna calculada. INDIZADO Muestra si existe un ndice en la columna. Los valores posibles son: No No existe un ndice en la columna. S (con duplicados) Existe un ndice no nico en la columna. S (sin duplicados) Existe un ndice nico en la columna.
Pag.50
S
CREAR KEY) UNA CLAVE
ISTEMAS
UNI
PRINCIPAL(PRIMARY
En el ejemplo de la tabla Productos, se configurar la columna ID_Producto como la columna clave principal pulsando con el botn derecho del ratn el nombre de columna ID_Producto y eligiendo Establecer clave principal en el men de contexto. Aparecer un icono de una llave junto al nombre de la columna.
6. En la parte inferior de la ventana hay una ficha etiquetada Columnas. Esta ficha permite cambiar algunos atributos de la columna seleccionada en la parte superior. Por ejemplo, se ha seleccionado la columna IdProducto y a continuacin se ha asignado una descripcin y un valor predeterminado de 0 para ella en la ficha Columnas de debajo, como se muestra en la figura anterior.
Se pueden crear otras restricciones e ndices sobre la tabla pulsando con el botn derecho del ratn sobre cualquier nombre de columna y eligiendo ndices y claves, Relaciones, Restricciones CHECK o Propiedades en el men de contexto, o pulsando en el icono Propiedades de tabla e ndice junto al icono Guardar en la barra de herramientas. Cualquiera de estos mtodos lleva a la ventana Propiedades, que se muestra en la siguiente figura.
Pag.51
ISTEMAS
UNI
El nombre de la tabla aparecer como Tabla1, Tabla2 o algo por el estilo. En este caso se llama Tabla1. Se puede cambiar este nombre, como se ensea en el siguiente paso, al guardar la tabla
2. Aparecer una venta de dilogo en donde se puede escribir el nombre de la tabla. Escribir el nombre por ejemplo Productos o el nombre que se desee y pulsar Aceptar
3. La tabla que se ha diseado ser creada y su informacin guardada. Ahora se puede cerrar la ventana Tabla nueva y se ver aparecer al nombre de la tabla en el panel de la derecha de Administrador corporativo.
Pag.52
S
USO DE VALORES NULL
ISTEMAS
UNI
Un valor NULL es un valor desconocido al que se le refiere como NULL. La admisin de nulos de una columna se refiere a la posibilidad de la columna de aceptar o rechazar valores NULL. Un valor NULL en una columna indica normalmente que no se ha introducido nada para una fila particular de datos porque el valor es desconocido, no son ni valores vacos ni valores 0; sus valores verdaderos son desconocidos Podra necesitarse una columna con nulos si la informacin que se necesita no es un dato obligatorio por ejemplo el dato numero de celular en una tabla Alumnos no seria obligatorio llenarlo.
SQL Server genera automticamente un valor de fila para esa columna, basndose en un valor inicial y un valor de incremento. Cada vez que se inserte una fila, SQL Server asigna el valor de identidad actual a la columna de identidad de la fila. La siguiente fila que se inserte recibir un valor identidad que sea un incremento mayor que el valor identidad actual ms alto. De esta forma, cada fila que se inserte recibe un valor de identidad nico. La propiedad de identidad es til para columnas en las que cada fila de esa columna deba tener un ID nico, como la columna IdProducto. Por ejemplo, si se especifica IDENTITY (0,10), la primera fila que se inserte tomar un valor de columna de identidad de 0, la segunda fila tomar 10, la tercera fila tomar 20, y as sucesivamente.
Pag.53
S
VALORES PREDETERMINADOS
ISTEMAS
UNI
Utilice un valor prederminado para asignar un valor por defecto a un campo de una tabla por ejemplo Si tiene un campo llamado sexo su tabla Empleados puede predeteminar su campo Sexo en el valor Masculino.
Microsoft SQL Server 2000 permite definir un valor predeterminado para cada columna de tabla. No se puede definir un valor predeterminado para las columnas que tengan el tipo de timestamp o las propiedades IDENTITY o ROWGUIDCOL, ya que dichas columnas deben tener valores nicos.
Pag.54
S
MODIFICAR EL DISEO DE UNA TABLA
Para modificar el diseo de una tabla como por ejemplo para :
ISTEMAS
UNI
Aadir o Eliminar campos a una tabla Cambiar el tipo de datos a los campos Cambiar el nombre a los campos Modificar la longitud o tamao de un campo numerico o texto Agregar o modificar sus propiedades de campos por ejemplo aplicar un valor predeterminado
Para ello haga lo siguiente: 1. Seleccione con clic derecho la tabla que desea modificar 2. Elija la opcion Disear tabla
Pag.55
ISTEMAS
UNI
1. Expandir su base de datos en el panel izquierdo del Administrador corporativo y entonces pulsar con el botn derecho del ratn sobre Diagramas. Elegir Nuevo diagrama de base de datos del men contextual para mostrar la pantalla de bienvenida del Asistente para creacin de diagramas de bases de datos.
2. Pulsar Siguiente para visualizar la pantalla Seleccionar tablas para agregar mostrada en la siguiente figura. Hay que seleccionar las tablas que se desean incluir en el
Pag.56
ISTEMAS
UNI
diagrama de la lista Tablas disponibles y despus pulsar Agregar. En este ejemplo hemos agregado las tablas Productos,Categorias y Proveedores
3. Pulsar Siguiente para visualizar la pantalla Completando el Asistente para creacin de diagramas de bases de datos. Pulsar Finalizar si las tablas seleccionadas son las correctas o pulsar Atrs y hacer los cambios necesarios.
4. Despus de pulsar Finalizar se puede ver el diagrama de base de datos, como se muestra en la figura siguiente.
Pag.57
S
PARA CREAR UNA RELACIN EN UN DIAGRAMA DE BASE DE DATOS
ISTEMAS
UNI
En el diagrama de base de datos, haga clic en el selector de fila de la columna o combinacin de columnas de base de datos que desea relacionar con una columna de otra tabla. 1. Con el puntero situado sobre el selector de fila, haga clic y arrstrelo hasta la tabla relacionada.
2. Suelte el botn del mouse. Aparece el cuadro de dilogo Crear relacin y se intenta hacer coincidir las columnas seleccionadas con las columnas de los mismos nombre y tipo de datos de la tabla relacionada.
3. En el cuadro de dilogo Crear relacin, confirme que las columnas que desee relacionar se muestran en las listas Tabla de claves principales y Tabla de claves externas.
Pag.58
S
COMPROBAR DATOS EXISTENTES
ISTEMAS
UNI
Seleccione la opcin para comprobar los datos existentes al crear una relacin si la restriccin de FOREIGN KEY se debe aplicar tanto a los datos existentes como a los datos nuevos Aparecen varias casillas de verificacin en la parte inferior de la ventana. Seleccionar la opcin Comprobar datos existentes al crear cuando se quiere que SQL Server compruebe si los datos existentes cumplen la relacin de clave externa. Por ejemplo solo sera posible relacionar las tablas Productos y Categorias si en la tabla Productos existen idCategoria que esten registradas en la tabla Categorias .Si hubiera un idcategoria en la tabla Productos desconocida para la tabla Categorias la relacion seria rechazada.
3. Elija Aceptar para crear la relacin. 4. Guardar el diagrama con un nombre descriptivo pulsando el botn Guardar e introduciendo un nombre cuando se solicite.
Pag.59
ISTEMAS
UNI
Pag.60
S
USO DE NDICES
QU ES UN NDICE?
ISTEMAS
UNI
Los ndices son una de las herramientas disponibles ms potentes para el diseador de bases de datos. Cuando se utiliza un ndice de una tabla de la base de datos para buscar una fila de datos, SQL Server puede determinar rpidamente dnde se almacenan los datos y recuperarlos inmediatamente. As, los ndices de tabla de la base de datos son muy parecidos a los ndices de los libros (ambos proporcionan un acceso rpido a grandes cantidades de informacin). CLAVES DE LOS NDICES Una clave de ndice designa la columna o columnas que se utilizan para generar el ndice. La clave del ndice es el valor que permite buscar rpidamente la fila que contiene los datos que se estn buscando, de igual forma a como una entrada del ndice en un libro apunta a un tema concreto del texto. Por ejemplo el campo NombreProducto de la tabla Productos es candidato a ser indice de esta tabla o el campo Apellidos y Nombres de la tabla Empleados
NDICES SIMPLES
Un ndice simple es un ndice que se define en una sola columna de la tabla. Un ndice simple puede ser efectivo dependiendo del tipo de datos que se estn ordenando, del nmero de elementos nicos de la columna .En otros casos se necesita un ndice compuesto. Por ejemplo, si se est indexando una libreta de direcciones con miles de nombres y direcciones, la columna Distrito no es una buena candidata para un ndice simple ya que podra haber muchas entradas del mismo Distrito.Sin embargo, al aadir las columnas Direccin y Distrito al ndice, por tanto creando un ndice compuesto, se puede hacer que cada entrada sea casi nica. Este paso puede ser til si se usan consultas que buscan filas a travs de la direccin.
NDICES COMPUESTOS
Un ndice compuesto es un ndice que se define en ms de una columna. Se puede acceder a un ndice compuesto usando una o ms claves de ndice. Con SQL Server 2000, un ndice puede abarcar hasta 16 columnas y sus columnas clave pueden ser de hasta 900 bytes
Pag.61
S
NDICES NICOS
ISTEMAS
UNI
Un ndice nico contiene solamente una fila de datos por cada clave del ndice (en otras palabras, los valores de la clave del ndice no pueden aparecer en el ndice ms de una vez) SQL Server obliga a que se cumpla la propiedad de unicidad (UNIQUE) de un ndice de una columna o combinacin de columnas que constituyen la clave del ndice. SQL no permite que se inserte en la base de datos un valor de clave duplicado. Si se intenta hacer, se produce un error. SQL Server crea ndices nicos cuando se crea o una restriccin PRIMARY KEY (clave Primaria) o una restriccin UNIQUE en la tabla. Por ejemplo el campo NumeroRuc podria ser un indice UNICO ya que el numero de RUC es unico para cada cliente
NDICES NO NICOS
Un ndice no nico trabaja de la misma forma que un ndice nico, salvo que puede contener valores duplicados en los valores que los conforman. Todos los valores duplicados se recuperan si cumplen los criterios especificados en la instruccin de consulta Por ejemplo el campo Apellidos en una tabla Clientes podria ser un INDICE NOUNICO ya que muchos clientes podrian tener el mismo apellido y hasta el mismo Nombre Un ndice no nico no es tan eficiente como un ndice nico debido a que necesita procesamiento adicional (operaciones adicionales de entrada/salida) para recuperar los datos requeridos. Pero debido a que algunas aplicaciones necesitan utilizar claves duplicadas, algunas veces es imposible crear un ndice nico. En estos casos, un ndice no nico frecuentemente es mejor que no tener ningn ndice.
TIPOS DE NDICES
Hay dos tipos de ndices ndices agrupados e ndices no agrupados. NDICES AGRUPADOS Como se ha mencionado, un ndice agrupado es un ndice que almacena los datos de la fila actual de la tabla en sus nodos hoja, de forma ordenada, como se muestra en la figura siguiente.
Orden Fisico
Pag.62
ISTEMAS
UNI
ESTE SISTEMA OFRECE ALGUNAS VENTAJAS Y ALGUNAS DESVENTAJAS Debido a que los datos de un ndice agrupado se almacenan ORDENADOS,los datos estn disponibles, lo que puede resultar en un nmero menor de operaciones de entrada/salida. Cualquier reduccin de estas operaciones produce un mayor rendimiento, para las operaciones individuales y un mejor rendimiento medio para el sistema. Otra ventaja de los ndices agrupados es que los datos recuperados estn ordenados segn el orden del ndice. Por ejemplo, si se crea un ndice agrupado a partir de las columnas Direccion, Distrito y Pais y una consulta que selecciona todos los valores para los que Distrito es San isidro, la salida resultante est ordenada segn Pais y Distrito en el orden en que se haya definido en el ndice Una desventaja del uso de un ndice agrupado es que el acceso a la tabla siempre es a travs del ndice, lo que puede provocar una sobrecarga adicional. Debido a que los datos reales se almacenan en el ndice agrupado, no se puede crear ms de un ndice agrupado en una tabla
INDICES NO AGRUPADOS A diferencia de los ndices agrupados, los ndices no agrupados no contienen los datos reales de la tabla en sus datos. Los indices pueden contener uno o dos tipos de informacin de ubicacin de filas de datos .
Orden Logico
Pag.63
S
CREACIN DE NDICES
ISTEMAS
UNI
La creacin de ndices no es difcil. Se pueden crear ndices agrupados o no agrupados casi del mismo modo usando los asistentes que suministra el Administrador corporativo Para crear un ndice 1. Abra el Diseador de tablas para la tabla que desee indizar, haga clic con el botn secundario del mouse en el Diseador de tablas y elija ndices y claves en el men contextual.
2. Elija Nuevo. El cuadro ndice seleccionado muestra el nombre asignado por el sistema al ndice nuevo. 3. En Nombre de columna seleccione las columnas que desea indizar. Puede seleccionar hasta 16 columnas. seleccione slo una o dos columnas. Para cada columna seleccionada, puede indicar si el ndice ordena los valores en orden ascendente o descendente. 4. Especifique otros valores que desee para el ndice y, a continuacin, haga clic en Aceptar
Define un indice Agrupado
Pag.64
S
IMPORTAR UNA BASE DE DATOS
ISTEMAS
UNI
Otra opcin consiste en usar el servicio de transformacin de datos.Con esta herramienta podr crear una nueva base en el servidor con la misma estructura y los mismos datos de una base preexistente,que puede provenir de otro servidor SQL Server o de un servidor de otra marca (DB/2, Informix, Oracle o Sybase), de una MDB de Access,de una base de datos Paradox, de un conjunto de archivos DBF,de un archivo de Excel o de archivos de texto plano, entre otras opciones.
El servicio de transformacin de datos figura entre las opciones del men de SQL Server como Importar y exportar datos.
Pag.65
ISTEMAS
UNI
2. En la segunda ventana del Asistente se debe definir cul es el origen de los datos para
la transformacin. En la lista desplegable titulada Origen seleccionamos la opcin Microsoft Access.Al hacer esto, el frame inferior de la ventana cambia para mostrar el conjunto de datos requeridos para acceder a la base de Access;o sea: Nombre de archivo, Nombre de usuario y Contrasea(Figura 19). Dado que vamos a utilizar la base del ejercicio anterior, en el campo Nombre de archivo ingresamos C:\EjerVB\Videoclub\Videoclub.mdb, y dejamos vacos los campos Nombre de usuario y Contrasea. Hecho esto, estamos en condiciones de cliquear en Siguiente.
3. En el tercer paso se nos solicita el destino de los datos. Dado que la opcin por
defecto Microsoft OLE DB Provider for SQL Server es la que usaremos, vamos a ingresar directamente la informacin solicitada en la parte inferior de la ventana; los consabidos nombre de servidor y datos de autenticacin. La diferencia con las ocasiones anteriores en las que establecimos una conexin con el servidor consiste en que esta vez le pediremos que nos conecte con una base nueva, no con una preexistente. Para hacer esto, en la lista desplegable titulada Base de datos seleccionamos la opcin <nuevo>
Pag.66
ISTEMAS
UNI
4. Inmediatamente se abrir una ventana titulada Crear base de datos En ella al igual
que en las opciones vistas antes para crear bases en el servidor se solicita el nombre para la nueva base y los tamaos iniciales de los archivos de datos y de registro. Si bien estos tamaos son flexibles (es decir, SQL Server expandir los archivos a medida que le vayan quedando chicos), es bueno hacer una estimacin del tamao requerido en funcin de la suma de los tamaos de cada tabla, calculando el tamao de registro y multiplicndolo por el nmero de registros en la tabla. A eso hay que agregarle un espacio prudencial para almacenar ndices. Para el ejemplo que nos ocupa, ingrese NeptunoBD como nombre para la nueva base, y asgnele un espacio de 5 MB para el archivo de datos y 1 MB para el archivo de registro. Es habitual asignar al archivo de registro (que contiene las transacciones en curso hasta el momento en que se les hace un commit) un 20 por ciento del tamao establecido para los datos. El paso siguiente consiste, simplemente, en decidir si se van a copiar las tablas ntegras de la base de datos de origen o si se utilizarn instrucciones SQL para definir los conjuntos de datos a migrar .En el primer caso, seleccione Copiar las tablas de la base de datos de origen.
En este punto, el Asistente muestra las tablas existentes en la base de origen, y brinda la opcin de seleccionar aquellas que se desee migrar. Seleccinelas todas. Ver que al hacerlo, se completan las otras dos columnas de la grilla: Tabla de destino y Transformar. En la primera, el Asistente coloca nombres de tabla que coinciden con los de la base de origen. Tambin muestra un cono para cada tabla, que, si tiene una estrella en la esquina superior izquierda, indica que la tabla se crear durante la migracin
Pag.67
ISTEMAS
UNI
En la columna Transformar aparecen botones con puntos suspensivos para cada tabla seleccionada. Si presiona cualquiera de ellos, tendr la oportunidad de modificar la forma en que el asistente migrar los datos de la tabla correspondiente. Por ejemplo, puede deseleccionar ciertas columnas de ciertas tablas para que no se incluyan en la migracin, o hacer que se aplique una conversin a un tipo de datos diferente para alguna columna. Pero en este ejemplo dejaremos las opciones de transformacin tal como las infiere el Asistente.
El asistente presenta, en esta anteltima pantalla, una serie de opciones referidas a qu hacer con la operacin de migracin. Se muestran dos frames, titulados Cuando y Guardar. En el primero se ofrece la opcin de ejecutar la migracin inmediatamente o programarla en un paquete DTS (data transformation service, servicio de transformacin de datos) para una ejecucin posterior. En el segundo
Pag.68
ISTEMAS
UNI
frame se da la opcin de crear el paquete DTS, independientemente de que la ejecucin sea inmediata o diferida En este caso, optaremos por ejecutar la operacin inmediatamente.
Pag.69
ISTEMAS
UNI
3. En el cuadro Nombre, escriba el nombre del conjunto de copias de seguridad. Opcionalmente, en Descripcin, escriba una descripcin del conjunto de copias de seguridad. 4. En Copia de seguridad, haga clic en Base de datos: completa. 5. En Destino, haga clic en Cinta o Disco y especifique el destino de la copia de seguridad.
Pag.70
ISTEMAS
UNI
Si no aparece ningn destino de copia de seguridad, haga clic en Agregar para agregar un destino existente o crear uno nuevo. 6. En Sobrescribir, realice una de las siguientes operaciones:
Haga clic en Anexar al medio para agregar la copia de seguridad a cualquier copia de seguridad existente en el dispositivo. Haga clic en Sobrescribir medio existente para sobrescribir las copias de seguridad existentes en el dispositivo.
7. Opcionalmente, seleccione la casilla de verificacin Programar para programar la operacin de copia de seguridad destinada a una ejecucin posterior o peridica. 8. Finalmente pulse el boton Aceptar
Pag.71
S
CMO RESTAURAR UNA COPIA DE SEGURIDAD DE UNA BASE DE DATOS
1. Expanda un grupo de servidores y, a continuacin, un servidor.
ISTEMAS
UNI
2. Expanda Bases de datos, haga clic con el botn secundario del mouse en la base de datos, seleccione Todas las tareas y, a continuacin, haga clic en Restaurar base de datos.
3. En el cuadro Restaurar como base de datos, escriba o seleccione el nombre de la base de datos que se desea restaurar, si no es el nombre predeterminado. Para restaurar la base de datos con un nombre nuevo, escriba el nuevo nombre de la base de datos. 4. Haga clic en Base de datos.
5. En la lista Primera copia que restaurar, haga clic en el conjunto de copias de seguridad que desea restaurar.
6. En la lista Restaurar, haga clic en la copia de seguridad de base de datos que desea restaurar
Pag.72
ISTEMAS
UNI
Pag.73
S
LA CAPACIDAD DE SQL SERVER
ISTEMAS
UNI
1. El tamao mximo de un nico archivo de base de datos es de 32 TB (treinta y dos billones de bytes), y el tamao mximo de una base de datos es de 1.048.516 TB. 2. SQL Server puede tener hasta dos mil millones de tablas por cada base de datos 3. Cada Tabla puede tener hasta 1.024 columnas 4. El nmero de filas y el tamao total de la tabla est limitado solamente por el espacio de almacenamiento disponible. 5. El nmero mximo de bytes por fila es de 8.060. Si se crean tablas con columnas varchar, nvarchar o varbinary en las que el ancho total definido excede de 8.060 bytes, se crea la tabla, pero aparece un mensaje de advertencia. Al intentar insertar ms de 8.060 bytes en tal fila o actualizar una fila de tal forma que su tamao total de fila exceda de 8.060, se genera un mensaje de error y no se puede realizar la instruccin 6. Cada tabla puede contener un mximo de 249 ndices no agrupados y 1 ndice agrupado. stos incluyen los ndices generados para admitir las restricciones PRIMARY KEY y UNIQUE definidas para la tabla.
Pag.74
ISTEMAS
UNI
Transact-SQL es fundamental para trabajar con Microsoft SQL Server Todas las aplicaciones que se comunican con SQL Server lo hacen enviando instrucciones Transact-SQL al servidor, independientemente de la interfaz de usuario de la aplicacin.
En este captulo se introducirn conceptos bsicos del lenguaje de consulta estructurado (SQL, Structured Query Language) y TransacTSQL (T-SQL) y se mostrarn las diferencias entre los dos lenguajes. Este capitulo explica el lenguaje de definicin de datos (DDL, Data Definition Language) y el lenguaje de tratamiento de datos (DML, Data Manipulation Language) y se incluyen ejemplos de cada uno.
Pag.75
S
EL LENGUAJE SQL
ISTEMAS
UNI
SQL es un lenguaje de consulta y programacin de bases de datos utilizado para acceder a los datos y para consultar, actualizar y gestionar sistemas de bases de datos relacionales El lenguaje SQL contiene instrucciones que se ajustan las dos principales categoras de programacin: DDL y DML. Se vern estas categoras de lenguaje en las siguientes secciones.
DDL
DDL se utiliza para definir y administrar objetos bases de datos tales como bases de datos, tablas y vistas. Las instrucciones DDL usualmente incluyen instrucciones CREATE, ALTER y DROP para cada objeto. Por ejemplo, las instrucciones CREATE TABLE, ALTER TABLE y DROP TABLE se utilizan para crear una tabla, modificar sus propiedades (agregar o borrar columnas, por ejemplo) y eliminar una tabla, respectivamente. CREATE TABLE PRODUCTOS(IDPRODUCTO INT NOT NULL PRIMARY KEY , NOMBREPRODUCTO VARCHAR(15))
DML
DML se utiliza para manipular los datos contenidos en los objetos base de datos. Para ello se utilizan instrucciones tales como INSERT, SELECT, UPDATE y DELETE. Estas instrucciones permiten seleccionar filas de datos mediante la realizacin de consultas, insertar nuevas filas de datos, modificar las filas de datos existentes y borrar filas de datos no deseadas, respectivamente. DELETE PRODUCTOS WHERE NOMBREPRODUCTO LIKE A%
T-SQL
SQL es una mejora del lenguaje de programacin SQL estndar. Es el lenguaje principal utilizado para comunicaciones entre aplicaciones y SQL Server. T-SQL proporciona las posibilidades DDL y DML de SQL estndar adems de funciones extendidas, procedimientos almacenados del sistema y con construcciones de programacin (tales como IF y WHILE) con el fin de permitir mayor flexibilidad en la programacin. Las capacidades de T-SQL continan creciendo con las versiones nuevas de SQL Server CREATE PROCEDURE LISTAR PRODUCTOS @ORDEN AS IF @ORDEN=ASC BEGIN SELECT * FROM PRODUCTOS ORDER BY NOMBREPRODUCTO END
Pag.76
S
COMANDOS SQL
ISTEMAS
UNI
Pag.77
ISTEMAS
UNI
Pag.78
ISTEMAS
UNI
Pag.79
ISTEMAS
UNI
Pag.80
S
EL ANALIZADOR DE CONSULTAS
ISTEMAS
UNI
El Analizador de consultas es una aplicacion desde la cual podr ejecutar directamente cualquier instruccin o secuencia de instrucciones SQL contra una base de datos existente en cualquier servidor disponible. Al entrar en el Analizador, se abre una pantalla previa que brindala posibilidad de establecer una conexin con un servidor (Se puede utilizar el Analizador de consultas SQL para mostrar una herramienta basada en una interfaz grfica de usuario donde se pueden ejecutar instrucciones T-SQL. Para ejecutar el Analizador de consultas SQL hay que seguir los siguientes pasos: 1. En el Menu Inicio elija Programas y luego Elija Microsoft SQL SERVER y Analizador de Consultas
2. Seleccione el servidor y luego ingrese el nombre de usuario y contrasea para este Ejemplo ingrese en el nombre de usuario sa y deje la contrasea en blanco 3. A continuacion pulse el boton Aceptar
Pag.81
ISTEMAS
UNI
Pag.82
ISTEMAS
UNI
( NAME = ventas_data, FILENAME = 'c:\program files\microsoft sql server\mssql\data\ventas_data.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )
/*Generando el archivo de registro*/
LOG ON ( NAME = Pruebas_log', FILENAME = 'c:\program files\microsoft sql server\mssql\data\ventas_log.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) ----------------------------------------------------------------------------------3. Seleccione todas las instrucciones y pulse F5
Pag.83
S
Sintaxis del comando Create Database:
ISTEMAS
UNI
NAME = Nombre_del_archivo_lgico, FILENAME = Nombre_del_archivo_en_el_sistema (path completo) SIZE = TAMAO (inicial) MAXSIZE = (tamao_mximo | UNLIMITED) (Tamao mximo que puede tener la base de datos, UNLIMITED = tamao ilimitado) FILEGROWTH = Incremento del archivo (crecimiento en MB)
Pag.84
ISTEMAS
UNI
( NAME =ventas_dat4, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\Ventas_dat4.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB) TO FILEGROUP GP_VENTAS ALTER DATABASE BDEMPRESA MODIFY FILEGROUP GPVENTAS DEFAULT -----------------------------------------------------------------------------------------------------------------------------
Pag.85
S
USE master GO ALTER DATABASE BDEMPRESA MODIFY FILEGROUP GPVENTAS DEFAULT GO
ISTEMAS
UNI
El archivo de datos que tiene extensin mdf. El archivo de transacciones que tiene extensin ldf.
Estos dos archivos se encuentran en "C:\Archivos de Progama\Microsoft SQL Server\MSSQL\Data". Si por algn motivo necesitamos cambiar la ubicacin de estos archivos a otra carpeta o a otro disco tenemos que realizar un proceso sencillo pero laborioso. Vamos a ver paso a paso como realizar este cambio de ubicacin de los ficheros de las bases de datos. 1. Para mover la ubicacin de los archivos de nuestras bases de datos vamos a suponer que hemos realizado una instalacin por defecto del SQL Server, es decir, las bases de datos se encuentran en la carpeta "C:\Archivos de Progama\Microsoft SQL Server\MSSQL\Data", y queremos llevarlas a un disco distinto, por ejemplo a "D:\" 2. El primer paso es realizar una copia de seguridad de TODOS los datos y TODAS las bases de datos del servidor (master incluida por supuesto) puesto que estos cambios entraan peligro para el propio servidor. 3. Ahora veamos como mover todas las bases de datos una por una.
Pag.86
S
USE MASTER GO SP_DETACH_DB 'PRUEBAS' GO
ISTEMAS
UNI
5. Lo siguiente es mover los archivos de esta base de datos (pruebas.mdf y pruebas.ldf) a la carpeta destino ("D:\") Y por ltimo volvemos a adjuntar la base de datos en su ubicacin actual. USE MASTER GO SP_ATTACH_DB 'PRUEBAS','D:\PRUEBAS.MDF','D:\PRUEBAS.LDF' GO Y para ver que todo ha ido bien. SP_HELPDB 'PRUEBAS' Ahora hay que repetir este procedimiento para todas las bases de datos de usuario que tengamos
MOVER MASTER 1. Abrimos el Administrador Corporativo 2. Pulsamos con el botn derecho en el servidor y sacamos la ventana de propiedades 3. Pulsamos clic en parmetros de inicio y vemos que hay las siguientes entradas -----------------------------------------------------------------------------------------------------------------------4. -dC:\Archivos de Progama\Microsoft SQL Server\MSSQL\Data\master.mdf 5. -eC:\Archivos de Progama\Microsoft SQL Server\MSSQL\log\ErrorLog 6. -lC:\Archivos de Progama\Microsoft SQL Server\MSSQL\Data\mastlog.ldf -----------------------------------------------------------------------------------------------------------------------7. Y podemos cambiar los relacionados con master por -----------------------------------------------------------------------------------------------------------------------8. -dD:\master.mdf 9. -lD:\mastlog.ldf -----------------------------------------------------------------------------------------------------------------------10. Tambin podemos cambiar de la misma manera la ubicacin de los registros de error 11. Detenemos el SQL Server 12. Copiamos "master.mdf" y "masterlog.ldf" a la nueva localizacin 13. Reiniciamos el SQL Server Con esto debera estar todo listo y nuestro servidor debera funcionar perfectamente pero ahora con todos los ficheros de bases de datos en "D:\" como queramos. Slo recordar una cosa ms. Estos cambios son una operacin de alto riesgo y tener copias de seguridad de TODO antes de empezar es imprescindible.
Pag.87
S
CREACIN DE TABLAS
Para crear una tabla en su base de datos utilice el comando CREATE TABLE
ISTEMAS
UNI
Nombre
FechaNacimiento
(Crea una nueva tabla llamada Empleados con un campo Nombre de tipo texto (Varchar) y longitud 10, otro con llamado Apellidos de tipo texto (Varchar) y longitud predeterminada (50) y uno ms llamado FechaNacimiento de tipo Fecha/Hora.(Datetime) Tambin crea un ndice nico - no permite valores repetidos - formado por los tres campos.)
Pag.88
S
EJEMPLOS DEL COMANDO CREATE TABLE GENERAR UNA TABLA CON UN CAMPO AUTONUMERICO
ISTEMAS
UNI
El valor IDENTITY define que el campo Idalumno es autonumerico y empieza en el valor 100 y se incrementara de 1 en 1 PRIMARY KEY que el campo IDALUMNO es Clave Primaria de la tabla NOT NULL El ingreso de este dato es obligatorio CREATE TABLE ALUMNOS (IDALUMNO INT NOT NULL IDENTITY(100,1) PRIMARY KEY, NOMBRE VARCHAR(40) NOT NULL, APELLIDOS VARCHAR(40) NOT NULL, SEXO BIT NOT NULL, FECHANACIMIENTO DATETIME NOT NULL)
GENERAR UN CAMPO AUTOGENERADO Se puede generar un campo que sera el producto de una operacin entre otros campos Por ejemplo PROMEDIO es el producto del calculo de la suma de N1+N2+N3 CREATE TABLE NOTAS (IDREGISTRO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, IDALUMNO INT NOT NULL, CURSO VARCHAR(40) NOT NULL, N1 DECIMAL NOT NULL, N2 DECIMAL NOT NULL, N3 DECIMAL NOT NULL, PROMEDIO AS N1+N2+N3, APROBADO BIT NOT NULL) GENERAR UN VALOR PREDETERMINADO PARA UN CAMPO CREATE TABLE CURSOS (IDCURSO INT NOT NULL IDENTITY(1,1) PRIMARY KEY, NOMBRECURSO VARCHAR(35) NOT NULL, COSTO MONEY DEFAULT(200)) GENERAR UNA REGLA PARA UN CAMPO DE UNA TABLA CREATE TABLE MATRICULAS (IDMATRICULA INT NOT NULL PRIMARY KEY , FECHAMATRICULA DATETIME NOT NULL, PAGO MONEY CHECK (PAGO>100))
Pag.89
S
UTILIZAR EL TIPO DE DATOS UNIQUEIDENTIFIER EN UNA COLUMNA
ISTEMAS
UNI
Este ejemplo crea una tabla con una columna UNIQUEIDENTIFIER. Utiliza una restriccin PRIMARY KEY para impedir que los usuarios inserten valores duplicados y utiliza la funcin NEWID() de la restriccin DEFAULT para proporcionar valores para las nuevas filas. CREATE TABLE PROFESORES (IDPROFESOR UNIQUEIDENTIFIER CONSTRAINT Guid_Default DEFAULT NEWID(), NOMBRES VARCHAR(60), CONSTRAINT Guid_PK PRIMARY KEY (IDPROFESOR)
Pag.90
ISTEMAS
UNI
-----------------------------------------------------------------------------------------------------------------CREATE TABLE PRODUCTOS (IDPRODUCTO INT IDENTITY NOT NULL PRIMARY KEY,NOMBREPRODUCTO VARCHAR(50), IDPROVEEDOR INT REFERENCES PROVEEDORES(IDPROVEEDOR) ON UPDATE CASCADE ON DELETE CASCADE, IDCATEGORIA INT REFERENCES CATEGORIAS(IDCATEGORA) ON UPDATE CASCADE ON DELETE CASCADE, CANTIDADPORUNIDAD INT,PRECIOUNIDAD MONEY,UNIDADESENEXISTENCIA INT, UNIDADESENPEDIDO INT,NIVELNUEVOPEDIDO TINYNT,SUSPENDIDO BIT) ------------------------------------------------------------------------------------------------------------------------2. En este segundo ejemplo se crea una tabla PEDIDOS la cual se relaciona con las tablas CLIENTES y EMPLEADOS que ya existen CREATE TABLE PEDIDOS (IDPEDIDO INT IDENTITY NOT NULL PRIMARY KEY,FECHAPEDIDO, IDCLIENTE INT REFERENCES CLIENTES(IDCLIENTE) ON UPDATE CASCADE ON DELETE CASCADE, IDEMPLEADO INT REFERENCES EMPLEADOS(IDEMPLEADO) ON UPDATE CASCADE ON DELETE CASCADE, FECHAENVIO DATETIME,CARGO MONEY,UNIDADESENEXISTENCIA INT, UNIDADESENPEDIDO INT,NIVELNUEVOPEDIDO TINYNT,SUSPENDIDO BIT)
Pag.91
S
PARA COMPROBAR LA ESTRUCTURA DE LA NUEVA TABLA UTILICE EL PROCEDIMIENTO ALMACENADO SP_HELP EJEMPLO : /*CURSOS es el nombrede la tabla*/ SP_HELP CURSOS
ISTEMAS
UNI
Pag.92
ISTEMAS
UNI
Pag.93
S
ADD FECHAESTRENO smalldatetime NULL CONSTRAINT FECHA_C1 DEFAULT getdate() WITH VALUES Deshabilitar y habilitar una restriccin CREATE TABLE empleado (id INT NOT NULL, nombre VARCHAR(10) NOT NULL, salario MONEY NOT NULL CONSTRAINT salario CHECK (salario < 100000) ) -- Inserciones validas INSERT INTO empleado VALUES (1,"Joe Brown",65000) INSERT INTO empleado VALUES (2,"Mary Smith",75000) -- Insercin que viola la restriccin INSERT INTO empleado VALUES (3,"Pat Jones",105000) -- Deshabilitar la restriccin ALTER TABLE empleado NOCHECK CONSTRAINT salario INSERT INTO empleado VALUES (3,"Pat Jones",105000) -- Habilitar la restriccin ALTER TABLE empleado CHECK CONSTRAINT salario INSERT INTO empleado VALUES (4,"Eric James",110000)
ISTEMAS
UNI
Pag.94
S
CREACIN DE NDICES
ISTEMAS
UNI
La creacin de ndices en SQL Server, as como en la mayora de los SGBDR existentes, se debe realizar junto con la creacin de la estructura de las tablas. De este modo se evitan posibles colisiones que pueden surgir al crear ndices cuando la tabla ya tiene datos. Por ejemplo, si creamos un ndice nico por un campo, esto es no puede admitir duplicados, y se encuentran valores no nicos, la generacin del ndice dara un error. Sin embargo, SQL Server permite la creacin de ndices, aunque la base de datos est cargada. ALTER TABLE TABLA ADD CONSTRAINT K1 PRIMARY KEY (COD1, COD2) Esta sentencia permite aadir una clave primaria en tabla, por los campos cod1 y cod2. Para crear un ndice en la tabla todos, denominado Cdigo, por el campo cod_cliente, se debe especificar el Cdigo fuente CREATE INDEX CODIGO ON TODOS (COD_CLIENTE) S adems queremos que el ndice no admita valores nulos, se debe ejecutar el Cdigo fuente CREATE UNIQUE INDEX codigo ON todos (cod) WITH IGNORE_DUP_KEY La sentencia que se encarga de borrar un ndice, se muestra en el Cdigo fuente Esta sentencia se encarga de borrar el ndice cdigo creado anteriormente. DROP INDEX codigo Mas Ejemplos de indices con la siguiente tabla La tabla EMPLEADOS ya dispone de un indice que se genera automaticamente cuando se crea la clave Primaria vamos a aadir dos indices mas. 1. CREATE INDEX IDX_NOMB ON EMPLEADOS(NOMBRE) 2. CREATE INDEX IDX_APE ON EMPLEADOS(APELLIDOS) Si desea hacer una seleccin de los registros de la tabla Empleados utilizando uno de sus indices creados en el ejemplo anterior haga lo siguiente: SELECT IDEMPLEADO,NOMBRE,APELLIDOS FROM EMPLEADOS(INDEX=2) SELECT IDEMPLEADO,NOMBRE,APELLIDOS FROM EMPLEADOS(INDEX=3) El numero 2 hace referencia al indice por el campo NOMBRE y el numero 3 por el campo APELLIDOS .El numero 1 esta reservado para el IDPRODUCTO que es la clave primaria Para obtener informacion acerca de los indices que tiene su tabla ejecute el procedimiento almacenado SP_HELPINDEX Ejemplo: SP_HELPINDEX empleados /*empleados es el nombre de la tabla
Pag.95
ISTEMAS
Ya se ha visto en un captulo anterior el lenguaje de definicin de datos (DDL), que es el que permite definir y modificar la estructura de un esquema. Veremos a continuacin el otro lenguaje, el de manipulacin de datos, que nos permite, como su propio nombre indica, manejar los datos contenidos en el esquema.
LA SENTENCIA INSERT
La otra gran sentencia de manipulacin de datos es INSERT. Si SELECT nos permita recuperar datos, INSERT nos va a permitir aadirlos al esquema, es decir, con esta sentencia podemos aadir informacin a la base de datos. Recordemos que estamos en el modelo relacional, por lo que la informacin se aadir a una tabla en forma de filas. Si slo queremos insertar un valor para un atributo, el resto de los de la tabla deber contener el valor nulo (NULL). Sin embargo, habr ciertas ocasiones en que esto no ser posible, cuando el atributo est definido como NO NULO, en cuyo caso deberemos especificar un valor para ste. La sintaxis de esta sentencia es:
LA SENTENCIA UPDATE
Pag.96
S
UPDATE tabla SET atributo1 = valor1 , atributo2 = valor2, ...
ISTEMAS
UNI
El objetivo de la sentencia UPDATE es actualizar los valores de una o varias filas de una tabla, sin necesidad de borrarla e insertarla de nuevo. La sintaxis es la siguiente:
WHERE condicin donde tabla especifica la tabla donde se encuentran las filas que queremos actualizar, condicin especifica la condicin que se debe cumplir para actualizar las filas, y lo que viene a continuacin de SET especifica la asignacin de los nuevos valores a los atributos. Por lo tanto se actualizarn todas las filas que cumplan la condicin especificada. Si queremos cambiar el nombre al cliente que hemos insertado en el anterior apartado, deberemos escribir el Cdigo fuente : Elevar los precios de los productos en 10% pero solo aquellos que pertenezcan a la Categoria 2 (Bebidas)
LA SENTENCIA DELETE
El objeto de la sentencia DELETE es el de borrar filas de una tabla. Para poder borrar filas en una tabla se deben cumplir las condiciones de seguridad determinadas por el administrador y deben de cumplirse tambin las reglas de integridad referencial. La sintaxis es la siguiente: DELETE FROM tabla WHERE condicin Donde tabla especifica la tabla sobre la cual queremos borrar las filas, y condicin especifica la condicin que se debe cumplir para que se borren las filas. Si omitimos la condicin, se borrarn todas las filas de la tabla, es decir, la sentencia que aparece en el Cdigo fuente borra todas las filas de la tabla Pedidos
Pag.97
S
(1 row(s) affected)
ISTEMAS
UNI
lo que viene a decir que la fila se ha borrado. Para comprobarlo, ejecutamos la sentencia que muestra el Cdigo fuente. cuyo resultado es: (0 row(s) affected), lo que quiere decir que la fila no se encuentra en la tabla, es decir, ha sido borrada.
Pag.98
ISTEMAS
UNI
Pag.99
ISTEMAS
UNI
BASE DE DATOS SUPERMERCADOSNEPTUNO Para seguir con los ejemplos del uso del Transact SQL utilizaremos la siguiente base de
datos a la cual llamaremos SUPERMERCADOSNEPTUNO una base de datos creada como ejemplo que es muy similar a la base de datos Northwind que viene con SQL SERVER pero que utiliza los campos en nombre en espaol para hacer que los ejemplos que se desarrollen en este manual sean mas ilustrativos y didacticos a continucion presentamos el diseo en el siguiente diagrama
Pag.100
ISTEMAS
UNI
CREATE TABLE Empleados (IdEmpleado [int] NOT NULL IDENTITY PRIMARY KEY,Apellidos varchar(20),Nombre varchar (10) Cargo varchar(30),FechaNacimiento smalldatetime, FechaContratacion smalldatetime ,Direccion varchar(60),Ciudad varchar(15),Pais varchar(15),Fono varchar(24),Foto image NULL
CREATE TABLE Clientes(IdCliente varchar(5)INT NOT NULL PRIMARY KEY, NombreCompaa varchar(40),NombreContacto varchar(30), CargoContacto varchar(30),Direccin varchar(60), Ciudad varchar(15), Pas varchar(15), Telfono varchar(24), Fax varchar (24))
CREATE TABLE Categoras (IdCategora int NOT NULL IDENTITY Primary key,NombreCategora varchar(15),Descripcin text)
CREATE TABLE Proveedores(IdProveedor int NOT NULL IDENTITY PRIMARY KEY,NombreCompaa varchar(40),Direccin varchar(60),Ciudad varchar(15),Telfono varchar(24)
CREATE TABLE Productos(IdProducto int not null identity primary key,NombreProducto varchar(35), idproveedor REFERENCES Proveedores(idProveedor) ON UPDATE CASCADE ON DELETE CASCADE, idCategoria REFERENCES Categorias(idcategoria) ON UPDATE CASCADE ON DELETE CASCADE
Pag.101
ISTEMAS
UNI
CREATE TABLE Pedidos(idpedido int not null identity primary key, idcliente varchar(6) REFERENCES Clientes(idcliente) ON UPDATE CASCADE ON DELETE CASCADE, idempleado int REFERENCES Empleados(idempleado) ON UPDATE CASCADE ON DELETE CASCADE, fechaPedido smallDatetime,FechaEnvio smallDatetime,FechaEntrega smallDatetime,cargo as varchar(25),Destinatario varchar(35),DireccionDestinatario varchar(50),PaisDestinatario varchar(35))
CREATE TABLE [Detalles de pedidos] (IDPEDIDO INT NOT NULL REFERENCES PEDIDOS(IDPEDIDO) ON UPDATE CASCADE ON DELETE CASCADE, IDPRODUCTO INT NOT NULL REFERENCES PRODUCTOS(IDPRODUCTO) ON UPDATE CASCADE ON DELETE CASCADE,PRECIOUNIDAD MONEY,CANTIDAD INT PRIMARY KEY(IDPEDIDO,IDPRODUCTO))
Pag.102
ISTEMAS
EMPLEADOS
CATEGORIAS
CLIENTES
PROVEEDORES
Pag.103
S
PRODUCTOS
ISTEMAS
UNI
PEDIDOS
DETALLES DE PEDIDOS
Pag.104
ISTEMAS
UNI
Pag.105
S
LA SENTENCIA SELECT
ISTEMAS
UNI
La sentencia Select es una sentencia SQL, que pertenece al conjunto del Lenguaje de Manipulacin de Datos, y que sirve para recuperar registros de una o varias tablas, de una o varias bases de datos. Su sintaxis es la siguiente:
SELECT <atributos> FROM <tablas> [WHERE <condicion>] [GROUP BY <atributos>] [HAVING <condicin>] [ORDER BY <atributos>]
Donde las maysculas representan palabras reservadas, y lo encerrado entre corchetes es opcional, puede ser omitido. Una vez vista la anterior forma de representacin, vamos a detenernos en la sintaxis de la sentencia Select. Se compone de tres partes: SELECT <atributos>: permite hacer una proyeccin de las tablas, es decir, seleccionar los campos que deseamos recuperar de la base de datos, separados por comas. Si se especifica el smbolo *, se obtendrn todos los campos de la tabla. FROM <tablas>: permite especificar la tabla de la cual se desean obtener los datos. Si se especifica ms de una tabla, stas irn separadas por comas. WHERE <condicin>: permite establecer una condicin de recuperacin de las filas de la/s tabla/s. Slo se obtendrn aquellas Registros que verifiquen dicha condicin, que ser opcional. En el caso de que se omita esta parte, se recuperarn todas las filas.
GROUP BY <atributos>: permite establecer una seleccin de campos cuando se utilizan funciones escalares o de conteo (ya se ver ms adelante lo que significa. HAVING <condicin>: establece una condicin para los atributos obtenidos como resultado de la aplicacin de funciones escalares. ORDER BY <atributos>: permite obtener el resultado de la consulta ordenado por los atributos especificados.
En el caso de que se especifiquen varias tablas, en la clusula FROM, ser conveniente denotar los campos de la clusula SELECT precedidos por el nombre de la tabla donde se encuentra y un punto, para que, en el caso de que dicho campo exista en ms de una tabla, se sepa en cada momento a cual de ellos nos estamos refiriendo, evitando en este caso el problema de ambigedad.
Pag.106
S
1. Mostrar todos los registros de la tabla Productos SELECT * FROM PRODUCTOS
ISTEMAS
UNI
2. Mostrar nombre,apellidos y cargo de todos los empleados SELECT NOMBRE,APELLIDOS,CARGO FROM EMPLEADOS
3. Mostrar los nombreproducto,preciounidad,stock de los productos que tengan un precio mayor a 20 SELECT NOMBREPRODUCTO,PRECIOUNIDAD,STOCK FROM PRODUCTOS WHERE PRECIOUNIDAD>20
4. Mostrar nombreproducto,preciounidad,idcategoria de los productos que tengan un precio entre 25 y 35 soles SELECT NOMBREPRODUCTO,PRECIOUNIDAD,IDCATEGORIA FROM PRODUCTOS WHERE PRECIOUNIDAD BETWEEN 25 AND 35
Pag.107
S
5. Mostrar los pedidos entregados entre el 18/6/95 y el 25/12/97
ISTEMAS
UNI
SELECT IDPEDIDO,IDCLIENTE,FECHAPEDIDO,FECHAENTREGA,CARGO FROM PEDIDOS WHERE FECHAPEDIDO BETWEEN 18/06/95 AND 25/12/97 6. Mostrar a los clientes que no tengan numero de fax SELECT NOMBRECOMPAA,DIRECCIN,CIUDAD,PAIS,FAX FROM CLIENTES WHERE FAX IS NULL 7. Mostrar a los clientes que si tengan numero de fax SELECT NOMBRECOMPAA,DIRECCIN,CIUDAD,PAIS,FAX FROM CLIENTES WHERE FAX IS NOT NULL 8. Mostrar los productos cuyo nombre empiezen con las letras Que SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS WHERE NOMBREPRODUCTO LIKE Que% 9. Mostrar los productos que empiezen con las letras A,B,C,D SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS WHERE NOMBREPRODUCTO LIKE [A-D]% 10. Mostrar los clientes cuyo nombre termine en en la letra S SELECT IDCLIENTE,NOMBRECOMPAIA,DIRECCIN FROM CLIENTES WHERE NOMBRECOMPAIA LIKE %S 11. Mostrar un listado de productos ordenado por precio en forma Ascendente SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS ORDER BY NOMBREPRODUCTO 12. Mostrar un listado de productos ordenado por precio en forma Descendente SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS ORDER BY NOMBREPRODUCTO DESC 13. Mostrar los 3 productos mas Caros SELECT TOP 3 IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD,STOCK FROM PRODUCTOS ORDER BY PRECIOUNIDAD DESC 14. Mostrar los 3 productos mas Baratos SELECT TOP 3 IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD,STOCK FROM PRODUCTOS ORDER BY PRECIOUNIDAD DESC
15. Mostrar los productos que tengan un precio menor o igual a 50 y su stock se encuentre entre 60 y 80
Pag.108
S
16. Mostrar los clientes cuyo pais sea igual alemania o francia SELECT NOMBRECOMPAIA,PAIS FROM CLIENTES WHERE PAIS=ALEMANIA OR PAIS=FRANCIA
ISTEMAS
UNI
SELECT NOMBREPRODUCTO,PRECIOUNIDAD,STOCK FROM PRODUCTOS WHERE (PRECIOUNIDAD <=50) AND (STOCK>=60 AND STOCK<=80)
17. Mostrar los clientes cuyo pais sea Italia,brasil,francia,irlanda,espaa y suecia SELECT NOMBRECOMPAIA,PAIS FROM CLIENTES WHERE PAIS IN(ITALIA,BRASIL,FRANCIA,IRLANDA,ESPAA,SUECIA) 18. Mostrar los pedidos del cliente cuyo codigo es Anton o bonap y la fecha de los pedidos sea mayor a 11/5/95 SELECT IDPEDIDO,IDCLIENTE,FECHAPEDIDO FROM PEDIDOS WHERE (IDCLIENTE=ANTON OR IDCLIENTE=BONAP) AND (FECHAPEDIDO>11/5/95)
Pag.109
ISTEMAS
UNI
Pag.110
S
CONSULTAS MULTITABLA
ISTEMAS
UNI
En este tema vamos a estudiar las consultas multitabla llamadas as porque estn basadas en ms de una tabla. El SQL de Microsoft Jet 4.x soporta dos grupos de consultas multitabla: la unin de tablas la composicin de tablas
LA UNIN DE TABLAS
Esta operacin se utiliza cuando tenemos dos tablas con las mismas columnas y queremos obtener una nueva tabla con las filas de la primera y las filas de la segunda. En este caso la tabla resultante tiene las mismas columnas que la primera tabla (que son las mismas que las de la segunda tabla). Por ejemplo tenemos una tabla de libros nuevos y una tabla de libros antiguos y queremos una lista con todos los libros que tenemos. En este caso las dos tablas tienen las mismas columnas, lo nico que vara son las filas, adems queremos obtener una lista de libros (las columnas de una de las tablas) con las filas que estn tanto en libros nuevos como las que estn en libros antiguos, en este caso utilizaremos este tipo de operacin. Cuando hablamos de tablas pueden ser tablas reales almacenadas en la base de datos o tablas lgicas (resultados de una consulta), esto nos permite utilizar la operacin con ms frecuencia ya que pocas veces tenemos en una base de datos tablas idnticas en cuanto a columnas. El resultado es siempre una tabla lgica. Por ejemplo queremos en un slo listado los productos cuyas existencias sean iguales a cero y tambin los productos que aparecen en pedidos del ao 90. En este caso tenemos unos productos en la tabla de productos y los otros en la tabla de pedidos, las tablas no tienen las mismas columnas no se puede hacer una union de ellas pero lo que interesa realmente es el identificador del producto (idfab,idproducto), luego por una parte sacamos los cdigos de los productos con existencias cero (con una consulta), por otra parte los cdigos de los productos que aparecen en pedidos del ao 90 (con otra consulta), y luego unimos estas dos tablas lgicas. El operador que permite realizar esta operacin es el operador UNION.
Pag.111
S
LA COMPOSICIN DE TABLAS
ISTEMAS
UNI
La composicin de tablas consiste en concatenar filas de una tabla con filas de otra. En este caso obtenemos una tabla con las columnas de la primera tabla unidas a las columnas de la segunda tabla, y las filas de la tabla resultante son concatenaciones de filas de la primera tabla con filas de la segunda tabla El ejemplo anterior quedara de la siguiente forma con la composicin:
A diferencia de la unin la composicin permite obtener una fila con datos de las dos tablas, esto es muy til cuando queremos visualizar filas cuyos datos se encuentran en dos tablas. Por ejemplo queremos listar los pedidos con el nombre del representante que ha hecho el pedido, pues los datos del pedido los tenemos en la tabla de pedidos pero el nombre del representante est en la tabla de empleados y adems queremos que aparezcan en la misma lnea; en este caso necesitamos componer las dos tablas (Nota: en el ejemplo expuesto a continuacin, hemos seleccionado las filas que nos interesan).
Existen distintos tipos de composicin, aprenderemos a utilizarlos todos y a elegir el tipo ms apropiado a cada caso. Los tipos de composicin de tablas son: El INNER JOIN El LEFT / RIGHT JOIN SELECT * FROM PEDIDOS,CLIENTES WHERE PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE
Pag.112
ISTEMAS
UNI
Combinamos todos los pedidos con todos los clientes pero luego seleccionamos los que cumplan que el cdigo de cliente de la tabla de pedidos sea igual al cdigo de cliente de la tabla de clientes, por lo tanto nos quedamos con los pedidos combinados con los datos del cliente correspondiente. Las columnas que aparecen en la clusula WHERE de nuestra consulta anterior se denominan columnas de emparejamiento ya que permiten emparejar las filas de las dos tablas. Las columnas de emparejamiento no tienen por qu estar incluidas en la lista de seleccin. Normalmente emparejamos tablas que estn relacionadas entre s y una de las columnas de emparejamiento es clave principal, pues en este caso, cuando una de las columnas de emparejamiento tienen un ndice definido es ms eficiente utilizar otro tipo de composicin, el INNER JOIN.
EL INNER JOIN
El INNER JOIN es otro tipo de composicin de tablas, permite emparejar filas de distintas tablas de forma ms eficiente que con el producto cartesiano cuando una de las columnas de emparejamiento est indexada. Ya que en vez de hacer el producto cartesiano completo y luego seleccionar la filas que cumplen la condicin de emparejamiento, para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condicin, con lo cual se emparejan slo las filas que luego aparecen en el resultado. La sintaxis es la siguiente:
Ejem: SELECT * FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE = CLIENTES.IDCLIENTE tabla1 y tabla2 son especificaciones de tabla (nombre de tabla con alias o no, nombre de consulta guardada), de las tablas cuyos registros se van a combinar. Pueden ser las dos la misma tabla, en este caso es obligatorio definir al menos un alias de tabla. col1, col2 son las columnas de emparejamiento. Observar que dentro de la clusula ON los nombres de columna deben ser nombres cualificados (llevan delante el nombre de la tabla y un punto). Las columnas de emparejamiento deben contener la misma clase de datos, las dos de tipo texto, de tipo fecha etc... los campos numricos deben ser de tipos similares. Por ejemplo, se puede combinar campos AutoNumrico(IDENTIDAD) y INT puesto que son tipos similares, sin embargo, no se puede combinar campos de tipo INT y FLOAT. Adems las columnas no pueden ser de tipo TEXT ni IMAGE COMP representa cualquier operador de comparacin ( =, <, >, <=, >=, o <> ) y se utiliza para establecer la condicin de emparejamiento. Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condicin entre parntesis. Ejemplo: SELECT * FROM PROVEEDORES INNER JOIN PRODUCTOS ON PRODUCTOS PROVEEDORES.IDPROVEEDOR AND PROVEEDORES.IDPROVEEDOR = PRODUCTOS.IDPROVEEDOR
SQL SERVER Implementacion
Pag.113
ISTEMAS
UNI
Se pueden combinar ms de dos tablas En este caso hay que sustituir en la sintaxis una tabla por un INNER JOIN completo. Por ejemplo: SELECT * FROM (PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE = CLIENTES.IDCLIENTE) INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO = EMPLEADOS.IDEMPLEADO En vez de tabla1 hemos escrito un INNER JOIN completo, tambin podemos escribir: SELECT * FROM CLIENTES INNER JOIN (PEDIDOS INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO = EMPLEADOS.IDEMPLEADO) ON PEDIDOS.IDCLIENTE = CLIENTES.IDCLIENTE En este caso hemos sustituido tabla2 por un INNER JOIN completo.
Clientes
Productos
Clientes
Pag.114
ISTEMAS
UNI
El LEFT JOIN y RIGHT JOIN son otro tipo de composicin de tablas, tambin denominada composicin externa. Son una extensin del INNER JOIN. INNER JOIN) es una composicion interna ya que todos los valores de las filas del resultado son valores que estn en las tablas que se combinan. Con una composicin interna slo se obtienen las filas que tienen al menos una fila de la otra tabla que cumpla la condicin, veamos un ejemplo: Queremos combinar los empleados con las oficinas para saber la ciudad de la oficina donde trabaja cada empleado, si utilizamos un producto cartesiano tenemos: SELECT EMPLEADOS.*,CIUDAD FROM EMPLEADOS, OFICINAS WHERE EMPLEADOS.OFICINA = OFICINAS.OFICINA Observar que hemos cualificado el nombre de columna oficina ya que ese nombre aparece en las dos tablas de la FROM. Con esta sentencia los empleados que no tienen una oficina asignada (un valor nulo en el campo oficina de la tabla empleados) no aparecen en el resultado ya que la condicin empleados.oficina = oficinas.oficina ser siempre nula para esos empleados.
Si utilizamos el INNER JOIN SELECT EMPLEADOS.*, CIUDAD FROM EMPLEADOS INNER JOIN OFICINAS ON EMPLEADOS.OFICINA = OFICINAS.OFICINA Nos pasa lo mismo, el empleado 110 tiene un valor nulo en el campo oficina y no aparecer en el resultado. Pues en los casos en que queremos que tambin aparezcan las filas que no tienen una fila coincidente en la otra tabla, utilizaremos el LEFT o RIGHT JOIN. La sintaxis del LEFT JOIN es la siguiente:
La descripcin de la sintaxis es la misma que la del INNER JOIN (ver pgina anterior), lo nico que cambia es la palabra INNER por LEFT (izquierda en ingls).
Esta operacin consiste en aadir al resultado del INNER JOIN las filas de la tabla de la izquierda que no tienen correspondencia en la otra tabla, y rellenar en esas filas los campos de la tabla de la derecha con valores nulos. Ejemplo: SELECT * FROM EMPLEADOS LEFT JOIN OFICINAS ON EMPLEADOS.OFICINA = OFICINAS.OFICINA Con el ejemplo anterior obtenemos una lista de los empleados con los datos de su oficina, y el empleado 110 que no tiene oficina aparece con sus datos normales y los datos de su oficina a nulos. La sintaxis del RIGHT JOIN es la siguiente:
Pag.115
ISTEMAS
UNI
La sintaxis es la misma que la del INNER JOIN (ver pgina anterior), lo nico que cambia es la palabra INNER por RIGHT (derecha en ingls).
Esta operacin consiste en aadir al resultado del INNER JOIN las filas de la tabla de la derecha que no tienen correspondencia en la otra tabla, y rellenar en esas filas los campos de la tabla de la izquierda con valores nulos. Ejemplo: SELECT * FROM empleados RIGHT JOIN oficinas ON empleados.oficina = oficinas.oficina Con el ejemplo anterior obtenemos una lista de los empleados con los datos de su oficina, y adems aparece una fila por cada oficina que no est asignada a ningn empleado con los datos del empleado a nulos. Una operacin LEFT JOIN o RIGHT JOIN se puede anidar dentro de una operacin INNER JOIN, pero una operacin INNER JOIN no se puede anidar dentro de LEFT JOIN o RIGHT JOIN. Los anidamientos de JOIN de distinta naturaleza no funcionan siempre, a veces depende del orden en que colocamos las tablas, en estos casos lo mejor es probar y si no permite el anudamiento, cambiar el orden de las tablas ( y por tanto de los JOINs) dentro de la clusula FROM. Por ejemplo podemos tener: SELECT * FROM CLIENTES INNER JOIN (EMPLEADOS LEFT JOIN OFICINAS ON EMPLEADOS.OFICINA = OFICINAS.OFICINA) ON CLIENTES.REPCLIE = EMPLEADOS.NUMCLIE Combinamos empleados con oficinas para obtener los datos de la oficina de cada empleado, y luego aadimos los clientes de cada representante, as obtenemos los clientes que tienen un representante asignado y los datos de la oficina del representante asignado. Si hubiramos puesto INNER en vez de LEFT no saldran los clientes que tienen el empleado 110 (porque no tiene oficina y por tanto no aparece en el resultado del LEFT JOIN y por tanto no entrar en el clculo del INNER JOIN con clientes).
Pag.116
S
EJEMPLOS DE CONSULTAS MULTITABLA CON SUPERMERCADOSNEPTUNO
1. Mostrar Nombre del Producto,Precio Unidad del producto,Nombre de la Categoria,Nombre del Proveedor y stock de los productos
ISTEMAS
UNI
CON WHERE SELECT PRODUCTOS.NOMBREPRODUCTO,PRODUCTOS.PRECIOUNIDAD,CATEGORIAS .NOMBRECATEGORIA,PROVEEDORES.NOMBRECOMPAIA,STOCK FROM PRODUCTOS,CATEGORAS,PROVEEDORES WHERE PRODUCTOS.IDCATEGORIA=CATEGORIAS.IDCATEGORIA AND PRODUCTOS.IDPROVEEDOR=PROVEEDORES.IDPROVEEDOR CON INNER JOIN SELECT PRODUCTOS.NOMBREPRODUCTO,PRODUCTOS.PRECIOUNIDAD,CATEGORIAS .NOMBRECATEGORIA,PROVEEDORES.NOMBRECOMPAIA,STOCK FROM PRODUCTOS INNER JOIN CATEGORIAS ON PRODUCTOS.IDCATEGORIA=CATEGORIAS.IDCATEGORIA INNER JOIN PROVEEDORES ON PRODUCTOS.IDPROVEEDOR=PROVEEDORES.IDPROVEEDOR
2. Mostrar los pedidos con los siguientes datos idpedido,fechapedido,nombre del cliente,el nombre del empleado y el cargo de pedido SELECT PEDIDOS.IDPEDIDO,PEDIDOS.FECHAPEDIDO,CLIENTES.NOMBRECOMPAIA,E MPLEADOS.APELLIDOS+ + EMPLEADOS.NOMBRE,PEDIDOS.CARGO FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO
Pag.117
ISTEMAS
UNI
Pag.118
S
FUNCIONES DE SQL SERVER FUNCIONES DE TIPO FECHA
ISTEMAS
UNI
Estas funciones escalares realizan una operacin sobre un valor de fecha y hora de entrada, y devuelven un valor de cadena, numrico o de fecha y hora.
DATEADD
Devuelve un valor datetime nuevo que se basa en la suma de un intervalo a la fecha especificada. Sintaxis DATEADD ( partedeFecha , numero, Fecha ) Parte de fecha Year quarter Month dayofyear Day Week Hour minute second millisecond Abreviaturas yy, yyyy qq, q mm, m dy, y dd, d wk, ww hh mi, n ss, s ms
Mostrar la fecha de pago de los pedidos incrementando en 21 dias la fecha de pedido SELECT DATEADD(day, 21, FechaPedido) AS FechaPago FROM pedidos
DATEDIFF
Devuelve el nmero de dias,meses o aos que han transcurrido entre dos fechas especificadas. Sintaxis DATEDIFF ( parteFecha , Fechainicial , fechafinal ) SELECT NOMBRE,APELLIDOS, DATEDIFF(YEAR,FECHANACIMIENTO,GETDATE()) AS EDAD FROM EMPLEADOS
Pag.119
S
DATENAME
ISTEMAS
UNI
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la fecha especificada. Sintaxis DATENAME (parteFecha , fecha ) En este ejemplo se extrae el nombre del mes de la fecha devuelta por GETDATE. SELECT IDPEDIDO,FECHAPEDIDO,FECHAENVIO,FECHAENTREGA,DATENAME(MONTH, FECHAPEDIDO) AS MESPEDIDO FROM PEDIDOS El siguiente es el conjunto de resultados:
DATEPART
Devuelve un entero que representa la parte de la fecha especificada de la fecha indicada. Sintaxis DATEPART ( parteFecha , fecha ) La funcin GETDATE devuelve la fecha actual; sin embargo, la fecha completa no es siempre la informacin que se necesita para la comparacin (a menudo, slo se compara una parte de la fecha). En este ejemplo se muestra la salida de GETDATE y la de DATEPART. SELECT GETDATE() AS 'FechaActual' GO El siguiente es el conjunto de resultados: FechaActual --------------------------Feb 18 1998 11:46PM En este ejemplo se supone que la fecha es el 29 de mayo. SELECT DATEPART(month, GETDATE()) GO El siguiente es el conjunto de resultados: ----------5
Pag.120
S
DAY
Devuelve un entero que representa la parte del da de la fecha especificada. Sintaxis DAY ( fecha ) En este ejemplo se devuelve el nmero del da de la fecha 12/03/1998. SELECT DAY('03/12/1998') AS 'NumeroDia' GO El siguiente es el conjunto de resultados: NumeroDia -----------12
ISTEMAS
UNI
MONTH
Devuelve un entero que representa el mes de una fecha especificada. Sintaxis MONTH ( Fecha ) Este ejemplo devuelve el nmero del mes de la fecha 03/12/1998. SELECT "NumeroMes" = MONTH('03/12/1998') GO El siguiente es el conjunto de resultados: NumeroMes -----------3
YEAR
Devuelve un entero que representa la parte de ao de la fecha especificada. Sintaxis YEAR ( Fecha ) Este ejemplo devuelve el nmero del ao de la fecha 03/12/1998. SELECT "NumeroAo" = YEAR('03/12/1998') GO El siguiente es el conjunto de resultados: NumeroAo -----------1998
Pag.121
S
UTILIZAR FUNCIONES MATEMTICAS
ISTEMAS
UNI
Una funcin matemtica realiza una operacin matemtica en expresiones numricas y devuelve el resultado de la operacin. Las funciones matemticas operan sobre datos numricos suministrados por el sistema Microsoft SQL Server (decimal, integer, float, real, money, smallmoney, smallint y tinyint). La precisin de las operaciones integradas para el tipo de datos float es, de forma predeterminada, de seis lugares decimales.
ROUND
Devuelve una expresin numrica, redondeada a la longitud o precisin especificada. Sintaxis ROUND ( numero , longitud ) Ejemplos ROUND(748.58, -1) ROUND(748.58, -2) ROUND(748.58, -3) ROUND(123.4545, 2) ROUND(123.45, -2) Resultado 750.00 700.00 1000.00 123.4500 100.00
CEILING
Devuelve un numero entero ms pequeo mayor o igual que la expresin numrica dada. Sintaxis CEILING ( expressionNumerica ) Este ejemplo muestra valores numricos positivos, negativos y cero con la funcin CEILING. SELECT CEILING($123.45), CEILING($-123.45), CEILING($0.0) El siguiente es el conjunto de resultados: --------- --------- ------------------------124.00 -123.00 0.00
FLOOR
Devuelve el numero entero ms grande menor o igual que la expresin numrica dada. Sintaxis FLOOR ( expresionNumerica ) Este ejemplo muestra valores numricos positivos, negativos y valores de moneda con la funcin FLOOR. SELECT FLOOR(123.45), FLOOR(-123.45), FLOOR($123.45) El resultado es la parte entera del valor calculado en el tipo de datos correspondiente a expresionNumerica ----------------- ----------123 -124 123.0000
POWER
Devuelve el valor de la expresin indicada elevada a la potencia especificada.
SQL SERVER Implementacion
Pag.122
S
Sintaxis POWER ( expression numerica, EXPONENTE ) Ejemplo elevar el valor 2 al cubo SELECT POWER(2,3) Resultado es igual a 8
ISTEMAS
UNI
SQRT
Devuelve la raz cuadrada de la expresin especificada. Sintaxis SQRT ( expressionNumerica ) DECLARE @myvalue float SET @myvalue = 16 SELECT SQRT(@myvalue) Devuelve 4
UPPER
Convierte de minsculas a maysculas Sintaxis UPPER (expressionTexto) Ejemplos En este ejemplo se utiliza la funcion UPPER para devolver el primer apellido del empleado concatenado con el nombre. SELECT UPPER(NOMBRE) + ', ' + APELLIDOS AS NAME FROM EMPLEADOS ORDER BY APELLIDOS
LOWER
Convierte de maysculas a minusculas Sintaxis LOWER ( expressionTexto ) Muestra los nombres de los clientes en minusculas SELECT LOWER(NOMBRECOMPAIA) FROM CLIENTES
Pag.123
S
LEFT
ISTEMAS
UNI
Extrae caracteres empezando por el lado izquierdo de la cadena especificada como expresion de texto Sintaxis LEFT ( expressionTexto,numeroCaracteres ) Este ejemplo devuelve los cinco caracteres situados ms a la izquierda de cada nombre del producto SELECT LEFT(NOMBREPRODUCTO, 5) FROM PRODUCTOS
RIGHT
Extrae caracteres empezando por el lado derecho de la cadena de caracteres Sintaxis RIGHT ( expressionTexto , numeroCaracteres) Este ejemplo devuelve los cinco caracteres situados ms a la derecha de cada nombre del producto. SELECT RIGHT(NOMBREPRODUCTO, 5) FROM PRODUCTOS
LEN
Devuelve el nmero de caracteres de la expresin de cadena dada, excluidos los espacios finales en blanco. Sintaxis LEN ( expressionTexto ) Ejemplo : SELECT NOMBREPRODUCTO,LEN(NOMBREPRODUCTO) AS TOTALCARACTERES FROM PRODUCTOS
Pag.124
S
SUBSTRING
Devuelve una parte de una expresin de caracteres Sintaxis SUBSTRING ( expressionTexto , Posicion inicial , numeroCaracteres)
ISTEMAS
UNI
En el ejemplo siguiente se muestra cmo obtener parte de una cadena de caracteres. En la tabla Empleados, esta consulta obtiene los apellidos en una columna y slo la primera inicial en la segunda columna. SELECT nombre, SUBSTRING(Apellidos, 1, 1) FROM authors ORDER BY Apellidos
REPLACE
Reemplaza por una tercera expresin todas las apariciones de la segunda expresin de cadena proporcionada en la primera expresin de cadena. Sintaxis REPLACE ( 'expressionTexto1' , 'expressionTexto2' , expressionTexto3' ) En este ejemplo se reemplaza la cadena "cde" de "abcdefghi" por "xxx". SELECT REPLACE('abcdefghicde','cde','xxx')
PATINDEX
Devuelve la posicin inicial de la primera aparicin de un patrn en la expresin especificada o ceros si el patrn no se encuentra, con todos los tipos de datos de texto y caracteres. Sintaxis PATINDEX ( '%pattern%' , expression ) En este ejemplo se busca la posicin en que comienza el patrn "secas" en una fila especfica de la columna NombreProducto de la tabla Productos SELECT PATINDEX('%secas%', nombreProducto) FROM Productos WHERE idProducto = 7 El siguiente es el conjunto de resultados: ----------7
STUFF
Elimina el nmero de caracteres especificado e inserta otro conjunto de caracteres en un punto de inicio indicado. Sintaxis STUFF (expressionTexto , PosInicial , longitud , expressiontexto ) En el ejemplo siguiente se obtiene una cadena de caracteres creada al eliminar tres caracteres de la primera cadena (abcdef) a partir de la posicin 2 (la letra b) e insertar la segunda cadena en el punto de eliminacin. SELECT STUFF('abcdef', 2, 3, 'ijklmn')
Pag.125
S
El siguiente es el conjunto de resultados: --------aijklmnef
ISTEMAS
UNI
STR
Devuelve datos de tipo carcter obtenidos a partir de datos numricos. Sintaxis STR ( expressionNumerica ) En el ejemplo siguiente se convierte una expresin formada por cinco dgitos y un separador decimal en una cadena de caracteres de seis posiciones. La parte fraccionaria del nmero se redondea a un lugar decimal. SELECT STR(123.45, 6, 1) El siguiente es el conjunto de resultados: -----123.5
SPACE
Devuelve una cadena de espacios repetidos. Sintaxis SPACE ( expressionNumero ) En el ejemplo siguiente se corta el apellido de cada cliente y se concatena una coma, dos espacios y su nombre. SELECT RTRIM(Nombre) + ',' + SPACE(2) + LTRIM(apellidos) FROM Empleados ORDER BY Nombre, Apellidos El siguiente es el conjunto de resultados:
CHAR
Una funcin de cadena que convierte un cdigo ASCII int en un carcter. Sintaxis CHAR ( expresionNumerica ) Este ejemplo utiliza CHAR(13) para imprimir la informacin de nombre, direccin y ciudad en lneas separadas, cuando los resultados se devuelven en texto. SELECT Nombre + ' ' + Apellidos, + CHAR(13) + Direccion, + CHAR(13) + Ciudad + Pais FROM Empleados WHERE IdEmpleado = 1 El siguiente es el conjunto de resultados: Nancy Davolio 507 - 20th Ave. E. Apt. 2A
SQL SERVER Implementacion
Pag.126
S
Seattle WA
ISTEMAS
UNI
ASCII
Devuelve el cdigo ASCII del carcter ms a la izquierda de una expresin de caracteres. Sintaxis ASCII ( expressionTexto ) SELECT ASCII(A) Devuelve 65
REPLICATE
Repite una expresin de caracteres un nmero especificado de veces. Sintaxis REPLICATE ( expressionTexto , numeroVeces ) En este ejemplo se duplica el nombre de cada Empleado dos veces. SELECT REPLICATE(Nombre, 2) FROM Empleados ORDER BY nombre
Pag.127
S
FUNCIONES DE CONVERSION CAST y CONVERT
ISTEMAS
UNI
Convierten una expresin de un tipo de datos en otro. CAST y CONVERT proporcionan funciones similares. Este ejemplo concatena expresiones mediante la funcin de conversin de tipos de datos CAST. SELECT 'EL PRECIO ES ' + CAST(PRECIOUNIDAD AS VARCHAR(12)) FROM PRODUCTOS WHERE PRECIOUNIDAD > 10.00 El siguiente es el conjunto de resultados: --------------------------The precio es 19.99 The precio es 11.95 Este ejemplo convierte una columna de tipo int (la columna idPedido) en una columna de tipo char(20) para poder utilizarla en una clusula LIKE. Mostrar los pedidos cuyo el mes de la fechaPedido sea igual Agosto y el numero de pedido empieze en los numeros 12 SELECT IDPEDIDO,FECHAPEDIDO FROM PEDIDOS WHERE CAST(IDPEDIDO AS CHAR(20)) LIKE '12%' AND MONTH(FECHAPEDIDO) = 8 GO La function GetDate() devuelve la Fecha y la hora Actual en este formato
Si desea obtener solo la fecha en formato Dia Mes Ao sin incluir la hora actual haga lo siguiente SELECT CONVERT(VARCHAR(8),GETDATE(),3)
SELECT CONVERT(VARCHAR(10),GETDATE(),103)
Pag.128
S
COMANDOS SET
ISTEMAS
UNI
El lenguaje de programacin Transact-SQL ofrece varias instrucciones SET que alteran el tratamiento de informacin de SQL SERVER.. Las instrucciones SET se dividen en las siguientes categoras: Categora Fecha y hora Bloqueo Varias Ejecucin de consultas Valores de SQL-92 Estadsticas Transacciones Altera la configuracin de la sesin actual para Tratar datos de fecha y hora. Tratar el bloqueo en Microsoft SQL Server Diversa funcionalidad de SQL Server. Ejecutar y procesar consultas. Utilizar la configuracin predeterminada de SQL92. Presentar informacin estadstica. Tratar transacciones de SQL Server.
SET DATEFIRST
Establece como primer da de la semana un nmero del 1 al 7. Sintaxis SET DATEFIRST { number | @number_var } Es un entero que indica el primer da de la semana y puede tener uno de los valores siguientes.
Valor 1 2 3 4 5 6 7 (predeterminado, Ingls EE.UU.) Primer da de la semana: Lunes Martes Mircoles Jueves Viernes Sbado Domingo
Puede utilizar la funcin @@DATEFIRST para conocer el valor actual de SET DATEFIRST. SELECT @@DATEFIRST En este ejemplo se indica el da de la semana correspondiente a un valor de fecha y se muestra el efecto de cambiar la opcin DATEFIRST. SET DATEFIRST 7 GO SELECT CAST('1/1/99' AS DATETIME), DATEPART(DW, '1/1/99')
Pag.129
S
SET DATEFORMAT
ISTEMAS
UNI
Determina el orden de las partes de la fecha (mes/da/ao) para escribir datos de tipo datetime o smalldatetime. Sintaxis SET DATEFORMAT { format | @format_var } Este valor slo se utiliza en la interpretacin de las cadenas de caracteres cuando se convierten en valores de fecha. No tiene ningn efecto en la presentacin de los valores de fecha. En este ejemplo se usan distintos formatos de fecha para tratar cadenas de fecha con formatos diferentes. /*Establecemos el formato en Mes Dia Ao SET DATEFORMAT MDY GO /*DECLARAMOS UNA VARIABLE LLAMADA @DATEVAR DE TIPO FECHA DECLARE @DATEVAR DATETIME /*ASIGNAMOS EL VALOR A LA VARIABLE SET @DATEVAR = '12/31/98' /*MOSTRAMOS EL VALOR DE LA VARIABLE SELECT @DATEVAR GO /* Establecemos el formato en Ao Dia mes y hacemos lo mismo que el Ejemplo Anterior SET DATEFORMAT DMY GO DECLARE @DATEVAR DATETIME SET @DATEVAR = '31/12/98' SELECT @DATEVAR GO
SET IDENTITY_INSERT
Permite insertar valores explcitos en la columna identidad(Autonumerica) de una tabla.Por ejemplo la tabla PRODUCTOS tiene el campo idproducto como clave primaria y es una columna con la propiedad identidad establecida en si Ejemplos En este ejemplo se crea una tabla con una columna de identidad y se muestra cmo se puede usar la opcin SET IDENTITY_INSERT para llenar un hueco en los valores de identidad causado por una instruccin DELETE.
Pag.130
S
1. Tenemos la siguiente tabla
ISTEMAS
UNI
2. Eliminamos la categoria de codigo 7 DELETE FROM CATEGORAS WHERE IDCATEGORA = 7 GO SELECT * FROM CATEGORAS GO
Ahora si queremos insertar un nuevo registro con el codigo numero 7 que fue eliminado no sera posible porque SQL SERVER nos enviara el sgte error Servidor: mensaje 544, nivel 16, estado 1, lnea 1 No se puede insertar un valor explcito en la columna de identidad de la tabla 'Categoras' cuando IDENTITY_INSERT es OFF Para solucionar este problema usaremos la siguiente instruccin SET IDENTITY_INSERT CATEGORAS ON GO INSERT INTO CATEGORAS(IDCATEGORA, NOMBRECATEGORA) VALUES(7, 'FRUTAS/VERDURAS') GO /*EXAMINE LOS RESULTADOS*/ SELECT * FROM CATEGORIAS
SET LANGUAGE
Especifica el idioma de entorno de la sesin. El idioma de la sesin determina los formatos de datetime y los mensajes del sistema.utilice la funcion @@LANGUAGE Para averiguar el nombre del idioma en uso. En este ejemplo se establece como idioma predeterminado en espaol SET LANGUAGE spanish GO
Pag.131
S
SET NOCOUNT
ISTEMAS
UNI
Hace que deje de devolverse como parte de los resultados el mensaje que indica el nmero de filas afectado por una instruccin Transact-SQL. Sintaxis SET NOCOUNT { ON | OFF } Cuando SET NOCOUNT es ON, no se devuelve el nmero de filas afectado por una instruccin Transact-SQL. Cuando SET NOCOUNT es OFF, s se devuelve ese nmero. La funcin @@ROWCOUNT se actualiza incluso cuando SET NOCOUNT es ON. Este ejemplo en el Analizador de consultas de SQLse impide que aparezca el mensaje con el nmero de filas afectadas. GO SELECT IDPEDIDO FROM PEDIDOS GO SET NOCOUNT ON GO SELECT IDPEDIDO FROM PEDIDOS GO /*PARA REESTABLECERLO DESACTIVE EL COMANDO EN OFF*/ SET NOCOUNT OFF GO
SET ROWCOUNT
Hace que Microsoft SQL Server deje de procesar la consulta cuando se haya devuelto el nmero de filas especificado. SET ROWCOUNT detiene el procesamiento cuando se alcanza el nmero de filas especificado. En este ejemplo, observe que hay x filas que cumplen el criterio de anticipo inferior o igual a 10 $; aunque por el nmero de filas que devuelve la actualizacin se puede ver que no se procesaron todas. ROWCOUNT afecta a todas las instrucciones de TransactSQL. SELECT COUNT(*) AS Contador FROM Pedidos WHERE Cargo >= 10 GO
A continuacin se establece 4 en ROWCOUNT y se actualizan todas las filas con anticipos de 10 $ o ms. SET ROWCOUNT 4 GO UPDATE PEDIDOS SET CARGO = 7.5 WHERE CARGO >= 10 GO
Pag.132
S
VARIABLES GLOBALES
ISTEMAS
UNI
Existe un conjunto de variables globales, que informan en cada momento del estado del sistema, o del resultado de una consulta, etc. Esta variables se pueden distinguir porque comienzan por dos arrobas@@. La Tabla muestra un resumen con las variables globales que nos pueden resultar de utilidad:
Pag.133
ISTEMAS
UNI
Pag.134
ISTEMAS
UNI
Pag.135
S
FUNCIONES ESCALARES PARA SELECT
ISTEMAS
UNI
Entendemos por funciones escalares, todas aquellas que permiten realizar operaciones de conteo de filas, suma de atributos, obtencin de medias, etc. Dichas funciones se especifican a continuacin de la palabra reservada SELECT. Las funciones que soporta la sentencia SELECT en el Transact SQL son las siguientes:
FUNCION SUM
Realiza una suma de toda una columna para todas las filas accedidas mediante una consulta SQL.
FUNCION COUNT
Cuenta todas las filas de las tablas accedidas mediante una consulta SQL. Por ejemplo, si tenemos una tabla cliente, con todos los clientes de una empresa de servicios, con los atributos idCliente, nombre, apellidos, direccin, y queremos saber todos los clientes que tenemos, deberemos realizar un count, para obtener todas el nmero de filas de la tabla ejecutamos el Cdigo fuente
Pag.136
S
FUNCION AVG
ISTEMAS
UNI
Realiza una media aritmtica de los atributos para todas las filas accedidas mediante la consulta SQL. Si por ejemplo tenemos una tabla de materiales, con los atributos cod_material, descripcin, precio y cantidad _ pedida, y queremos saber la cantidad media pedida de todos los materiales, deberemos realizar una media aritmtica, teniendo en cuenta todas las filas de la tabla:
FUNCION MAX
Obtiene el mximo valor del atributo especificado, de entre todas las filas seleccionadas mediante la sentencia SQL. Supngase, por ejemplo, que tenemos la tabla de materiales descrita anteriormente. Si queremos saber el material mas caro, deberemos realizar un SELECT con la clusula Max, que obtenga el mayor valor para el atributo precio de todas las filas. Para nuestro ejemplo, si queremos saber cual es el libro ms caro, ejecutaremos el Cdigo fuente
FUNCION MIN
Obtiene el mnimo valor del atributo especificado, de entre todas las filas seleccionadas mediante la sentencia SQL. Si queremos saber cual es el PRODUCTOS ms barato de nuestra base de datos, deberemos ejecutar el Cdigo fuente
Pag.137
S
LA CLAUSULA COMPUTE
ISTEMAS
UNI
Esta clausula aade una fila en el conjunto de datos que se esta recuperando,se utiliza para realizar calculos en campos numericos.COMPUTE actua siempre sobre un campo o expresion del conjunto de resultados y esta expresion debe figurar exactamente igual en la clausula SELECT y siempre se debe ordenar el resultado por la misma o al menos agrupar el resultado.Esta expresion no puede utilizar ningun ALIAS SELECT IDPEDIDO,CANTIDAD,NOMBREPRODUCTO,[DETALLES DE PEDIDOS].PRECIOUNIDAD,CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD AS TOTAL FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON [DETALLES DE PEDIDOS].IDPRODUCTO=PRODUCTOS.IDPRODUCTO ORDER BY IDPEDIDO COMPUTE SUM(CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD) BY IDPEDIDO
SELECT IDPEDIDO,CANTIDAD,NOMBREPRODUCTO,[DETALLES DE PEDIDOS].PRECIOUNIDAD,CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD AS TOTAL FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON [DETALLES DE PEDIDOS].IDPRODUCTO=PRODUCTOS.IDPRODUCTO WHERE IDPEDIDO=10250 COMPUTE SUM(CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD)
Pag.138
S
LA CLAUSULA GROUP BY
ISTEMAS
UNI
Se pueden obtener subtotales con la clusula GROUP BY. Una consulta con una clusula GROUP BY se denomina consulta agrupada ya que agrupa los datos de la tabla origen y produce una nica fila resumen por cada grupo formado. Las columnas indicadas en el GROUP BY se llaman columnas de agrupacin. Ejemplos 1. Mostrar el total de clientes que tiene la empresa en cada pais SELECT PAS,COUNT(IDCLIENTE) AS [TOTAL CLIENTES] FROM CLIENTES GROUP BY PAS ORDER BY COUNT(IDCLIENTE) DESC
2. Mostrar el precio del producto mas caro de cada categoria SELECT NOMBRECATEGORA,MAX(PRECIOUNIDAD) AS [Mas Caros] FROM CATEGORAS INNER JOIN PRODUCTOS ON CATEGORAS.IDCATEGORA=PRODUCTOS.IDCATEGORA GROUP BY NOMBRECATEGORA
3. Mostrar el Monto total de cada Pedido SELECT IDPEDIDO,SUM(CANTIDAD*PRECIOUNIDAD) AS [TOTAL PEDIDO] FROM [DETALLES DE PEDIDOS] GROUP BY IDPEDIDO
Pag.139
S
4. Mostrar el total de compras por cliente en el ao 1995
ISTEMAS
UNI
SELECT NOMBRECOMPAA, YEAR(FECHAPEDIDO) AS AO, SUM(CANTIDAD*PRECIOUNIDAD) AS [TOTAL COMPRAS] FROM CLIENTES INNER JOIN PEDIDOS ON CLIENTES.IDCLIENTE=PEDIDOS.IDCLIENTE INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE YEAR(FECHAPEDIDO)=1995 GROUP BY NOMBRECOMPAA,YEAR(FECHAPEDIDO)
5. Mostrar los tres mejores empleados tomando en cuenta la cantidad de pedidos despachados SELECT TOP 3 NOMBRE+' '+APELLIDOS AS EMPLEADO, COUNT(IDPEDIDO) AS [TOTAL DESPACHADOS] FROM EMPLEADOS INNER JOIN PEDIDOS ON EMPLEADOS.IDEMPLEADO=PEDIDOS.IDEMPLEADO GROUP BY NOMBRE+' '+APELLIDOS ORDER BY COUNT(IDPEDIDO) DESC
6. Mostrar el total de ventas del dia actual SELECT FECHAPEDIDO,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE FECHAPEDIDO= CONVERT(CHAR(10),GETDATE(),103) GROUP BY FECHAPEDIDO
Pag.140
S
7. Mostrar el total de ventas del MES actual del AO Actual
ISTEMAS
UNI
SELECT MONTH(FECHAPEDIDO)AS MES,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE MONTH(FECHAPEDIDO)=MONTH(GETDATE()) AND YEAR(FECHAPEDIDO)=YEAR(GETDATE()) GROUP BY MONTH(FECHAPEDIDO) 8. Mostrar el total de ventas del AO Actual SELECT YEAR(FECHAPEDIDO) AS AO,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO WHERE YEAR(FECHAPEDIDO)= YEAR(GETDATE()) GROUP BY YEAR(FECHAPEDIDO) 8. Mostrar los tres productos menos vendidos SELECT TOP 3 NOMBREPRODUCTO,SUM(CANTIDAD) AS [TOTAL VENDIDOS] FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON [DETALLES DE PEDIDOS].IDPRODUCTO=PRODUCTOS.IDPRODUCTO GROUP BY NOMBREPRODUCTO ORDER BY SUM(CANTIDAD)
9. Mostrar el total de ventas en cada pais SELECT PASDESTINATARIO,SUM(CANTIDAD*CANTIDAD) AS TOTAL FROM PEDIDOS INNER JOIN [DETALLES DE PEDIDOS] ON PEDIDOS.IDPEDIDO=[DETALLES DE PEDIDOS].IDPEDIDO GROUP BY PASDESTINATARIO ORDER BY SUM(CANTIDAD*CANTIDAD)DESC
Pag.141
ISTEMAS
UNI
Pag.142
S
USO DE SUBCONSULTAS
ISTEMAS
UNI
Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT que llamaremos consulta principal. Se puede encontrar en la lista de seleccin, en la clusula WHERE o en la clusula HAVING de la consulta principal. Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre parntesis, no puede contener la clusula ORDER BY, ni puede ser la UNION de varias sentencias SELECT, adems tiene algunas restricciones en cuanto a nmero de columnas segn el lugar donde aparece en la consulta principal. Estas restricciones las iremos describiendo en cada caso. Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta por cada fila de la consulta principal. Se aconseja no utilizar campos calculados en las subconsultas, ralentizan la consulta. Las consultas que utilizan subconsultas suelen ser ms fciles de interpretar por el usuario
Ejemplo:usando SUPERMERCADOSNEPTUNO Mostrar los productos que tengan un precio mayor al precio promedio de todos los productos SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD FROM PRODUCTOS WHERE PRECIOUNIDAD>(SELECT AVG(PRECIOUNIDAD) FROM PRODUCTOS)
Ejemplo:usando BDVENTAS
Pag.143
ISTEMAS
UNI
SELECT OFICINA, CIUDAD FROM OFICINAS WHERE OBJETIVO > ANY (SELECT SUM(CUOTA) FROM EMPLEADOS GROUP BY OFICINA) En este caso la subconsulta devuelve una nica columna con las sumas de las cuotas de los empleados de cada oficina. Y luego se Lista las oficinas cuyo objetivo sea superior a alguna de las sumas obtenidas.
Ejemplo con BDVENTAS: SELECT OFICINA, CIUDAD FROM OFICINAS WHERE OBJETIVO > ALL (SELECT SUM(CUOTA) FROM EMPLEADOS GROUP BY OFICINA) En este caso se listan las oficinas cuyo objetivo sea superior A TODAS las sumas
Tiene la siguiente sintaxis: Ejemplo con BDVENTAS SELECT NUMEMP, NOMBRE, OFICINA FROM EMPLEADOS WHERE OFICINA IN (SELECT OFICINA FROM OFICINAS WHERE REGION = 'ESTE') Con la subconsulta se obtiene la lista de los nmeros de oficina del este y la consulta principal obtiene los empleados cuyo nmero de oficina sea uno de los nmeros de oficina del este. Por lo tanto lista los empleados de las oficinas del este
Pag.144
S
EL TEST DE EXISTENCIA EXISTS
Examina si la subconsulta produce alguna fila de resultados.
ISTEMAS
UNI
Si la subconsulta contiene filas, el test adopta el valor verdadero, si la subconsulta no contiene ninguna fila, el test toma el valor falso, nunca puede tomar el valor nulo Con este test la subconsulta puede tener varias columnas, no importa ya que el test se fija no en los valores devueltos sino en si hay o no fila en la tabla resultado de la subconsulta. Cuando se utiliza el test de existencia en la mayora de los casos habr que utilizar una referencia externa. Si no se utiliza una referencia externa la subconsulta devuelta siempre ser la misma para todas las filas de la consulta principal y en este caso se seleccionan todas las filas de la consulta principal (si la subconsulta genera filas) o ninguna (si la subconsulta no devuelve ninguna fila)
Ejemplo con BDVENTAS SELECT numemp, nombre, oficina FROM empleados WHERE EXISTS (SELECT * FROM oficinas WHERE region = 'este' AND empleados.oficina = oficinas.oficina) Este ejemplo obtiene lo mismo que el ejemplo del test IN.Observa que delante de EXISTS no va ningn nombre de columna. En la subconsulta se pueden poner las columnas que queramos en la lista de seleccin (hemos utilizado el *).Hemos aadido una condicin adicional al WHERE, la de la referencia externa para que la oficina que se compare sea la oficina del empleado
NOTA. Cuando se trabaja con tablas muy voluminosas el test EXISTS suele dar mejor rendimiento que el test IN.
Pag.145
S
MAS EJEMPLOS CON SUBCONSULTAS
ISTEMAS
UNI
1. Mostrar el nombre de la categoria ,el nombre del producto y el precio del producto mas caro de cada categoria SELECT NOMBRECATEGORA, NOMBREPRODUCTO, PRECIOUNIDAD FROM PRODUCTOS INNER JOIN CATEGORAS ON PRODUCTOS.IDCATEGORA=CATEGORAS.IDCATEGORA WHERE PRECIOUNIDAD IN (SELECT MAX(PRECIOUNIDAD) FROM PRODUCTOS WHERE PRODUCTOS.IDCATEGORA=CATEGORAS.IDCATEGORA)
2. Mostrar la lista de los 3 mejores vendedores en base a su total de pedidos despachados SELECT TOP 3 NOMBRE,APELLIDOS,COUNT(PEDIDOS.IDPEDIDO)AS TOTALPEDIDOS FROM EMPLEADOS INNER JOIN PEDIDOS ON EMPLEADOS.IDEMPLEADO=PEDIDOS.IDEMPLEADO WHERE EMPLEADOS.IDEMPLEADO IN (SELECT PEDIDOS.IDEMPLEADO FROM PEDIDOS GROUP BY PEDIDOS.IDEMPLEADO) GROUP BY NOMBRE,APELLIDOS ORDER BY COUNT(PEDIDOS.IDPEDIDO) DESC
3. Mostrar los productos que se hayan vendido con un descuento igual al 25% SELECT * FROM PRODUCTOS WHERE PRECIOUNIDAD ANY(SELECT PRECIOUNIDAD FROM [DETALLES DE PEDIDOS] WHERE DESCUENTO=0.25) 4. Mostrar a los clientes que por lo menos hayan realizado un pedido SELECT CLIENTES.NOMBRECOMPAA,CLIENTES.TELFONO FROM CLIENTES WHERE EXISTS (SELECT FROM PEDIDOS WHERE PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE) 5. Mostrar a los empleados que tengan un salario igual al salario promedio de todos los empleados SELECT APELLIDOS,NOMBRE,TITULO,SALARIO
SQL SERVER Implementacion
Pag.146
S
FROM EMPLEADOS AS T1 WHERE SALARIO= (SELECT AVG(SALARIO) FROM EMPLEADOS WHERE T1.TITULO=EMPLEADOS.TITULO) ORDER BY TITULO
ISTEMAS
UNI
6. Obtiene una lista con el nombre,cargo y salario de todos los agentes de ventascuyo salario es mayor que el de todos los jefes y directores SELECT APELLIDOS,NOMBRE,CARGO,SALARIO FROM EMPLEADOS WHERE CARGO LIKE AGENTE VENT* AND SALARIO ALL(SELECT SALARIO FROM EMPLEADOS WHERE CARGO LIKE JEFE*) OR CARGO LIKE *DIRECTOR*) 7. Obtiene una lista de las compaas y los contactos de todos los clientes que han realizado un pedido en el segundo trimestre de 1995 SELECT DISTINCT NOMBRECONTACTO,NOMBRECOMPAIA,CARGOCONTACTO,TELEFONO FROM CLIENTES WHERE IDCLIENTE IN(SELECT DISTINCT IDCLIENTE FROM PEDIDOS WHERE FECHAPEDIDO<07/01/95) 8. Recupera el codigo del producto y la cantidad y la cantidad pedida de la tabla Detalles de pedidos,extrayendo el nombre del producto de la tabla Productos SELECT DISTINCT [DETALLES DE PEDIDOS].IDPRODUCTO, [DETALLES DE PEDIDOS].CANTIDAD, (SELECT PRODUCTOS.NOMBREPRODUCTO FROM PRODUCTOS WHERE PRODUCTOS.IDPRODUCTO=[DETALLES DE PEDIDOS].IDPRODUCTO) AS ELPRODUCTO FROM [DETALLES DE PEDIDOS] WHERE [DETALLES DE PEDIDOS].CANTIDAD=15 ORDER BY [DETALLES DE PEDIDOS].IDPRODUCTO 9. Recupera numeros de vuelos y capacidades de aquellos vuelos con destino a madrid y plazas libres SELECT NUMVUELO,PLAZAS FROM VUELOS WHERE ORIGEN=MADRID AND EXISTS(SELECT T1.NUMVUELO FROM VUELOS AS T1 WHERE T1.PLAZASLIBRES>0 AND T1.NUMVUELO=VUELOS.NUMVUELO)
Pag.147
ISTEMAS
UNI
Pag.148
S
USO DE CREATE FUNCTION
ISTEMAS
UNI
Microsoft agreg nuevas caractersticas a su producto SQL SERVER 2000, y lo ms interesante para los programadores del SQL es la posibilidad de hacer funciones definidas por el usuario. La adicin de funciones al lenguaje del SQL solucionara los problemas de reutilizacin del cdigo y dara mayor flexibilidad al programar las consultas de SQL.
TIPOS DE FUNCIONES
El servidor 2000 del SQL utiliza estos tipos de funciones: 1. Las funciones escalares, 2. Tabla en linea Los tres tipos de funciones aceptan parmetros de cualquier tipo. Las funciones escalares devuelven un solo valor, tabla en linea y Multisentencias devuelben un tipo de dato tabla.
I. FUNCIONES ESCALARES
Las funciones escalares vuelven un tipo de los datos tal como int, money, varchar, real, etc. Pueden ser utilizadas en cualquier lugar incluso incorporada dentro de sentencias SQL. La sintaxis para una funcin escalar es la siguiente:
CREATE FUNCTION NombreFuncion ( [@nombreParameterparameterN]) RETURNS tipoValorRetorno [AS] BEGIN <instrucciones> RETURN expresionEscalar END EJEMPLO: 1. Escriba esto en el analizador de consultas CREATE FUNCTION SUMA (@VALOR1 INT,@VALOR2 INT) RETURNS INT AS BEGIN RETURN(@VALOR1+@VALOR2) END
Pag.149
ISTEMAS
UNI
3. Para confirmar la creacion de la funcion revise el panel izquierdo del analizador de consultas en su base de datos SUPERMERCADOSNEPTUNO
4. Probemos la funcion ahora 5. SELECT DBO.SUMA(100,500) AS TOTAL 6. Tambien podemos usarla utilizando una tabla: SELECT IDPRODUCTO,NOMBREPRODUCTO,PRECIOUNIDAD, DBO.SUMA(PRECIOUNIDAD,10) AS PRECIOINCREMENTADO FROM PRODUCTOS
CREATE FUNCTION ClientesPorPais(@Pais varchar(25) ) RETURNS TABLE AS RETURN (SELECT * FROM Clientes WHERE Pas = @pais)
Creamos la funcion y luego invocaremos a la funcion de esta forma: SELECT * FROM DBO.CLIENTESPORPAIS('ALEMANIA')
Pag.150
S
ALTER FUNCTION
ISTEMAS
UNI
Modifica una funcin existente definida por el usuario, creada anteriormente por la ejecucin de la instruccin CREATE FUNCTION, sin cambiar los permisos y sin que afecte a ninguna otra funcin, procedimiento almacenado o desencadenador dependientes. EJEMPLO :Modificando la funcion SUMA. Para que acepte valores con decimales vamos a cambiar los tipos INT por FLOAT
ALTER FUNCTION SUMA (@VALOR1 FLOAT,@VALOR2 FLOAT) RETURNS FLOAT AS BEGIN RETURN(@VALOR1+@VALOR2) END
Invocando a la FUNCION SUMA: SELECT DBO.SUMA(12.5,2.7)
EJEMPLOS DE FUNCIONES
CREATE FUNCTION EDAD( @FECHANACIMIENTO DATETIME, @FECHAACTUAL DATETIME) RETURNS TINYINT AS BEGIN DECLARE @EDAD TINYINT SET @EDAD=DATEDIFF(YEAR,@FECHANAC,@FECHAACT) RETURN @EDAD END Invocando la funcion :SELECT DBO.EDAD(22/09/71,GETDATE()) CREATE FUNCTION PAGOCUOTA(@MONTO MONEY,@CUOTA INT,@INTERES FLOAT) RETURNS MONEY AS BEGIN DECLARE @PAGOINTERES FLOAT DECLARE @MONTOCUOTA FLOAT SET @INTERES=@MONTO*@INTERES SET @MONTOCUOTA=@MONTO/@CUOTA RETURN (@MONTOCUOTA+@PAGOINTERES) END Invocando la funcion :SELECT DBO.PAGOCUOTA(5000,10,0.06)
Pag.151
S
RETURNS TABLE AS RETURN
ISTEMAS
UNI
SELECT IDPEDIDO, FECHAPEDIDO, NOMBRECOMPAA, NOMBRE, APELLIDOS, PEDIDOS.CARGO FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO WHERE YEAR(FECHAPEDIDO)=@AO
Pag.152
ISTEMAS
UNI
Pag.153
S
CREACION DE VISTAS CON CREATE VIEW
ISTEMAS
UNI
Una vista es una tabla virtual que est definida por una consulta que consiste en una instruccin SELECT. Esta tabla virtual est creada con datos de una o ms tablas reales y, para los usuarios, una vista parece una tabla real. De hecho, una vista puede ser tratada del mismo modo que una tabla normal. Los usuarios pueden hacer referencia a estas tablas virtuales con instrucciones Transact-SQL (T-SQL) del mismo modo que se hace con las tablas. En una vista se pueden realizar las operaciones SELECT, INSERT UPDATE y DELETE. En realidad, una vista se almacena simplemente como una instruccin SQL previamente definida. Cuando se accede a la vista, el optimizador de consultas de SQL Server une la instruccin SQL que se ejecuta en ese momento con la consulta que se use para definir la vista. EJEMPLO
CREATE VIEW ProductosMasCaros AS BEGIN SELECT TOP 5 NOMBREPRODUCTO,PRECIOUNIDAD,UNIDADESENEXISTENCIA FROM PRODUCTOS ORDER BY PRECIOUNIDAD DESC END Invocando la vista: SELECT * FROM ProductosMasCaros
Pag.154
ISTEMAS
UNI
SQL Server asigna una serie de restricciones en la creacin y el uso de las vistas. Estas restricciones incluyen las siguientes: Limitacin de columnas: Una vista puede hacer referencia hasta a 1024 columnas de una tabla. Si se necesita hacer referencia a un nmero mayor de columnas, se tendrn que usar otros mtodos. Limitacin de la base de datos: Solamente se puede crear una vista de una tabla en la base de datos a la que el creador de la vista est accediendo. Limitacin de seguridad: El creador de la vista debe tener acceso a todas las columnas a las que se haga referencia en la vista. Reglas de integridad de los datos: Cualquier actualizacin, modificacin, etc., que se haga en la vista, no puede romper las reglas de integridad de los datos. Por ejemplo, si la tabla subyacente de la vista no admite los valores nulos, la vista tampoco los admitir Limitacin de niveles en las vistas anidadas: Las vistas se pueden crear sobre otras vistas (en otras palabras, se puede crear una vista que acceda a otras vistas). Las vistas se pueden anidar hasta 32 niveles. Limitacin de la orden SELECT: La orden SELECT de una vista no puede contener una clusula ORDER BY ni la palabra clave INTO.
Pag.155
S
EJEMPLOS DE VISTAS
1. Mostrar el nombre y precio del producto mas caro de cada categoria
ISTEMAS
UNI
CREATE VIEW MasCaroCategoria AS SELECT NOMBREPRODUCTO,PRECIOUNIDAD,NOMBRECATEGORA FROM PRODUCTOS INNER JOIN CATEGORAS ON PRODUCTOS.IDCATEGORA=CATEGORAS.IDCATEGORA WHERE PRECIOUNIDAD =(SELECT MAX(PRECIOUNIDAD) FROM PRODUCTOS WHERE PRODUCTOS.IDCATEGORA=CATEGORAS.IDCATEGORA)
2. Mostrar a los 3 vendedores que hayan realizado la menor cantidad de ventas en SUPERMERCADOSNEPTUNO CREATE VIEW LOS3PEORESVENDEDORES AS SELECT TOP 3 NOMBRE,APELLIDOS,COUNT(PEDIDOS.IDPEDIDO)AS TOTAL FROM EMPLEADOS INNER JOIN PEDIDOS ON EMPLEADOS.IDEMPLEADO=PEDIDOS.IDEMPLEADO WHERE EMPLEADOS.IDEMPLEADO IN (SELECT PEDIDOS.IDEMPLEADO FROM PEDIDOS GROUP BY PEDIDOS.IDEMPLEADO HAVING COUNT(PEDIDOS.IDPEDIDO)>100) GROUP BY NOMBRE,APELLIDOS ORDER BY COUNT(PEDIDOS.IDPEDIDO)
Pag.156
ISTEMAS
UNI
3. Se desea obtener un reporte de los mejores cliente por ao para ello utilizaremos 2 vistas la primera nos permitira obtener el total de pedidos por ao de cada cliente y la segunda vista nos mostrara el resultado final mostrandonos el mejor cliente de cada ao en base a a la mayor cantidad de pedidos comprados en cada ao Primera Vista: CREATE VIEW TOTALPEDIDOSANUALES AS SELECT NOMBRECOMPAA, YEAR(FECHAPEDIDO) AS AO, COUNT(IDPEDIDO) AS TOTAL FROM CLIENTES INNER JOIN PEDIDOS ON CLIENTES.IDCLIENTE=PEDIDOS.IDCLIENTE GROUP BY NOMBRECOMPAA, YEAR(FECHAPEDIDO)
Segunda Vista: CREATE VIEW MEJORCLIENTEAO AS SELECT AO AS FECHA, NOMBRECOMPAA, TOTAL FROM TOTALPEDIDOSANUALES WHERE STR(AO) + STR(TOTAL) IN (SELECT STR(AO) + STR(MAX(TOTAL)) FROM TOTALPEDIDOSANUALES GROUP BY AO )
Pag.157
S
LAS SENTENCIAS CONDICIONALES
ISTEMAS
UNI
Las sentencias condicionales son aquellas que permiten discriminar entre diversas sentencias, segn se cumpla el valor de una expresin lgica. Existen dos tipos de sentencias condicionales. La primera de ellas tiene la siguiente sintaxis:
Pag.158
S
SENTENCIAS ITERATIVAS
ISTEMAS
UNI
Una sentencia iterativa es aquella que permite ejecutar una o varias sentencias de manera repetida, mientras se cumpla una condicin lgica. La sentencia que permite realizarlo es WHILE, y su sintaxis WHILE expresion_logica Sentencia [BREAK] [CONTINUE] La sentencia especificada se ejecuta de forma iterativa, mientras se cumpla la expresin lgica. La clusula BREAK, permite romper el bucle, y abandonarlo, aunque se cumpla la expresin lgica, mientras que CONTINUE permite ejecutar de nuevo las sentencias desde el comienzo del bucle, ignorando aquellas que vienen a continuacin del CONTINUE. EJEMPLO En este ejemplo, si el promedio de precio es menor de 30 $, el bucle WHILE dobla los precios y, a continuacin, selecciona el precio mximo. Si el precio mximo es menor o igual que 50 $, el bucle WHILE se reinicia y dobla los precios de nuevo. Este bucle contina la duplicacin de precios hasta que el precio mximo sea mayor que 50 $ y, a continuacin, sale del bucle WHILE e imprime un mensaje WHILE (SELECT AVG(PrecioUnidad) FROM Productos) < $30 BEGIN UPDATE Productos SET PrecioUnidad = PrecioUnidad * 2 SELECT MAX(PrecioUnidad) FROM Productos IF (SELECT MAX(PrecioUnidad) FROM Productos) > $50 BREAK ELSE CONTINUE END PRINT '!!!Registros actualizados con exito!!!'
Pag.159
ISTEMAS
UNI
Pag.160
S
PROCEDIMIENTOS ALMACENADOS
ISTEMAS
UNI
Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor. Los procedimientos almacenados de SQL Server, son ms potentes, porque permiten almacenar funciones y procedimientos compuestos por varias instrucciones, introducir saltos, bucles, etc. Tambin se pueden compilar procedimiento escritos en lenguaje C, para ampliar su potencia modularmente. Por ejemplo, podemos crear un procedimiento para recuperar el nombre de un Cliente, cuyo cdigo se pasa por parmetro. CREATE PROCEDURE ObtenerNombre @IDCLIENTE varchar(11) AS SELECT NOMBRECOMPAA FROM CLIENTES WHERE IDCLIENTE = @IDCLIENTE Con esta sentencia, se crea un procedimiento almacenado, de nombre ObtenerNombre, al que se le pasa un parmetro, llamado @idcliente, de tipo varchar(11), que realiza una consulta para obtener el nombre de la tabla clientes, cuyo cdigo coincida con el parmetro. De esta forma, si queremos obtener el nombre del cliente cuyo cdigo sea 'anton', deberemos ejecutar el procedimiento pasndole como argumento este valor: Las llamadas a procedimientos almacenados se pueden realizar de las siguientes formas: Pasando los argumentos en el mismo orden que en el que se han declarado. Exec ObtenerNombre 'anton' esta sentencia produce la siguiente la salida:
Pasando los argumentos nombrados. En este caso no hace falta que los parmetros vayan en el mismo orden. OBTENERNOMBRE @AU_ID = 'ANTON' Ejemplo 2:
CREATE PROCEDURE LISTARPEDIDOS ( @IDCLIENTE VARCHAR(7), @FECHAINICIAL SMALLDATETIME, @FECHAFINAL SMALLDATETIME ) AS SELECT PEDIDOS.IDPEDIDO,CLIENTES.NOMBRECOMPAA,EMPLEADOS.NOMBRE + EMPLEADOS.APELLIDOS AS EMPLEADO,PEDIDOS.CARGO,PEDIDOS.FECHAPEDIDO, PEDIDOS.FECHAENVIO,PEDIDOS.FECHAENTREGA FROM PEDIDOS INNER JOIN CLIENTES ON PEDIDOS.IDCLIENTE=CLIENTES.IDCLIENTE INNER JOIN EMPLEADOS ON PEDIDOS.IDEMPLEADO=EMPLEADOS.IDEMPLEADO WHERE PEDIDOS.IDCLIENTE=@IDCLIENTE AND FECHAPEDIDO
SQL SERVER Implementacion
Pag.161
S
BETWEEN @FECHAINICIAL AND @FECHAFINAL Ejecutando el procedimiento almacenado EXEC LISTARPEDIDOS 'ANTON','12/05/95','22/12/96'
ISTEMAS
UNI
Pag.162
S
SELECT @productos = (SELECT COUNT(*) FROM Productos) RETURN (0) Para ejecutar el anterior procedimiento, seguiremos los siguientes pasos:
ISTEMAS
UNI
Declarar las variables que vamos a utilizar para llamar al procedimiento. La sintaxis para declarar una variable es utilizar la palabra reservada DECLARE, seguido del nombre de la variable y el tipo. DECLARE @num_clientes int DECLARE @num_Productos int Ejecutar el procedimiento. La sintaxis es utilizar la palabra reservada EXEC, seguida del nombre del procedimiento, y los parmetros, separados por comas, especificando si son de retorno. EXEC num_clientes_productos @num_clientes OUTPUT, @num_productos OUTPUT Mostrar los resultados SELECT clientes = @num_clientes, productos = @num_productos Tras ejecutar las anteriores sentencias, obtendremos como resultado el siguiente listado:
EXECUTE
Ejecuta una funcin definida por el usuario que devuelve valores escalares, un procedimiento del sistema, un procedimiento almacenado definido por el usuario o un procedimiento almacenado extendido. Admite tambin la ejecucin de una cadena de caracteres. Ejemplo: DECLARE @TABLE VARCHAR(25) SET @TABLE='CLIENTES' EXEC ('SELECT * FROM ' + @TABLE)
Pag.163
ISTEMAS
UNI
SELECT @productos = (SELECT COUNT(*) FROM productos where preciounidad>10) RETURN (0)
Pag.164
ISTEMAS
UNI
todos los atributos de una tabla, deberemos ejecutar sp_columns seguido del nombre de la tabla. Por ejemplo, para listar los atributos de la tabla Categorias ejecutamos sp_columns Categorias, y obtenemos el resultado de la Figura
UTILIZAR EXECUTE CON UN PROCEDIMIENTO ALMACENADO EXTENDIDO El ejemplo siguiente utiliza el procedimiento almacenado extendido XP_CMDSHELL para Enumerar un directorio de todos los archivos con una extensin de nombre de archivo .exe.
XP_CMDSHELL
Ejecuta una cadena de comandos como comando del sistema operativo y devuelve el resultado como filas de texto. USE MASTER EXECUTE XP_CMDSHELL 'DIR C: *.EXE'
Pag.165
ISTEMAS
UNI
MAS EJEMPLOS
1. Este procedimiento permite insertar un registro a la tabla empleados pero antes verifica si existe algun empleado con el mismo nombre y apellido en ese caso lo rechaza no se toma en cuenta el campo idempleado porque es autonumerico CREATE PROCEDURE INSERTAEMPLEADO(
@NOMBRE VARCHAR(50), @APELLIDOS VARCHAR(50), @CARGO VARCHAR(25), @FECHACONTRATACION SMALLDATETIME, @FECHANACIMIENTO SMALLDATETIME, @DIRECCION VARCHAR(50), @CIUDAD VARCHAR(50), @PAIS VARCHAR(50), @FONO VARCHAR(7)) AS IF (SELECT COUNT(*) FROM EMPLEADOS WHERE APELLIDOS=@APELLIDOS AND NOMBRE=@NOMBRE)>0 BEGIN PRINT EL EMPLEADO CON ESE NOMBRE YA EXISTE END ELSE BEGIN INSERT INTO EMPLEADOS(APELLIDOS,NOMBRE,CARGO,FECHANACIMIENTO,FECHACONTRATACIN,DIRECCION, CIUDAD,PAS,FONO) VALUES(@APELLIDOS,@NOMBRE,@CARGO,@FECHANACIMIENTO,@FECHACONTRATACION,@DIRECCION,@CIUDA D, @PAIS,@FONO) END
GO
EXECUTE INSERTAEMPLEADO CHAVEZ VIERA,HENRY,DOCENTE,22/09/71,23/09/98,JR.NAPOLES 300 URB.FIORI SMP,LIMA,PERU,5340806
Pag.166
S
CREATE PROCEDURE ELIMINAEMPLEADO(@IDEMPLEADO INT) AS DELETE FROM EMPLEADOS WHERE IDEMPLEADO=@IDEMPLEADO Go EXEC ELIMINAEMPLEADO 2
ISTEMAS
UNI
4. Procedimiento que permite visualizar los detalles de un pedido espcificando el numero de pedido ALTER PROCEDURE VERDETALLES @NUMPED INT AS SELECT [DETALLES DE PEDIDOS].IDPEDIDO,PRODUCTOS.NOMBREPRODUCTO,[DETALLES DE PEDIDOS].PRECIOUNIDAD, [DETALLES DE PEDIDOS].CANTIDAD, CANTIDAD*[DETALLES DE PEDIDOS].PRECIOUNIDAD AS TOTAL FROM [DETALLES DE PEDIDOS] INNER JOIN PRODUCTOS ON PRODUCTOS.IDPRODUCTO=[DETALLES DE PEDIDOS].IDPRODUCTO WHERE [DETALLES DE PEDIDOS].IDPEDIDO=@NUMPED GO EXEC VERDETALLES 10248 CREATE PROCEDURE INSERTADETALLE @IDPEDIDO INT, @IDPRODUCTO INT, @CANT INT, @PRECIO MONEY, @DESC REAL AS SET NOCOUNT ON IF NOT EXISTS(SELECT * FROM PEDIDOS WHERE IDPEDIDO=@IDPEDIDO) BEGIN PRINT 'NO EXISTE EL NUMERO DE PEDIDO PARA EL DETALLE DE PEDIDO ESPECIFICADO' END ELSE BEGIN INSERT INTO [DETALLES DE PEDIDOS] VALUES(@IDPEDIDO,@IDPRODUCTO,@PRECIO,@CANT,@DESC) PRINT 'SE HA INSERTADO EL DETALLE DE PEDIDO' UPDATE PRODUCTOS SET UNIDADESENEXISTENCIA=UNIDADESENEXISTENCIA-1 PRINT 'SE HA DESCARGADO EL STOCK END
Pag.167
S
LAS TRANSACCIONES EN SQL SERVER
ISTEMAS
UNI
Entre las habilidades de todo Sistema Gestor de Bases de Datos Relaciones tiene que estar la de permitir al programador crear transacciones. El SQL Server nos permite trabajar con transacciones de manera sencilla y eficaz. Una transaccin es un conjunto de operaciones que van a ser tratadas como una nica unidad. La transaccin ms simple en SQL Server es una nica sentencia SQL. Por ejemplo una sentencia como esta: UPDATE PRODUCTOS SET PRECIOUNIDAD=20 WHERE NOMBREPRODUCTO =QUESO LAIVE Esta es una transaccin autocommit, una transaccin autocompletada. Cuando enviamos esta sentencia al SQL Server se escribe en el fichero de transacciones lo que va a ocurrir y a continuacin realiza los cambios necesarios en la base de datos. Si hay algn tipo de problema al hacer esta operacin el SQL Server puede leer en el fichero de transacciones lo que se estaba haciendo y si es necesario puede devolver la base de datos al estado en el que se encontraba antes de recibir la sentencia. Por supuesto este tipo de transacciones no requieren de nuestra intervencin puesto que el sistema se encarga de todo. Sin embargo si hay que realizar varias operaciones y queremos que sean tratadas como una unidad tenemos que crear esas transacciones de manera explcita. La sentencia que se utiliza para indicar el comienzo de una transaccin es BEGIN TRAN. Si alguna de las operaciones de una transaccin falla hay que deshacer la transaccin en su totalidad para volver al estado inicial en el que estaba la base de datos antes de empezar. Esto se consigue con la sentencia ROLLBACK TRAN. Si todas las operaciones de una transaccin se completan con xito hay que marcar el fin de una transaccin para que la base de datos vuelva a estar en un estado consistente con la sentencia COMMIT TRAN. Un ejemplo Trabajaremos con la base de datos SUPERMERCADOSNEPTUNO en nuestros ejemplos.Vamos a realizar una transaccin que modifica el precio de dos productos de la base de datos. USE SUPERMERCADOSNEPTUNO DECLARE @Error int --Declaramos una variable que utilizaremos para almacenar un posible cdigo de error BEGIN TRAN --Iniciamos la transaccin UPDATE Productos SET PrecioUnidad=2.5 WHERE NombreProducto =Queso de cabra --Ejecutamos la primera sentencia SET @Error=@@ERROR --Si ocurre un error almacenamos su cdigo en @Error --y saltamos al trozo de cdigo que deshara la transaccin. Si, eso de ah es un --GOTO, el demonio de los programadores, pero no pasa nada por usarlo --cuando es necesario IF (@Error<>0) GOTO TratarError --Si la primera sentencia se ejecuta con xito, pasamos a la segunda UPDATE Productos SET PrecioUnidad=2.5 WHERE NombreProducto=Queso de cabra SET @Error=@@ERROR
SQL SERVER Implementacion
Pag.168
S
--Y si hay un error hacemos como antes IF (@Error<>0) GOTO TratarError --Si llegamos hasta aqu es que los dos UPDATE se han completado con --xito y podemos guardar la transaccin en la base de datos COMMIT TRAN TratarError: --Si ha ocurrido algn error llegamos hasta aqu If @@Error<>0 THEN BEGIN PRINT Ha ecorrido un error. Abortamos la transaccin --Se lo comunicamos al usuario y deshacemos la transaccin --todo volver a estar como si nada hubiera ocurrido ROLLBACK TRAN END
ISTEMAS
UNI
Como se puede ver para cada sentencia que se ejecuta miramos si se ha producido o no un error, y si detectamos un error ejecutamos el bloque de cdigo que deshace la transaccin. Hay una interpretacin incorrecta en cuanto al funcionamiento de las transacciones que esta bastante extendida. Mucha gente cree que si tenemos varias sentencias dentro de una transaccin y una de ellas falla, la transaccin se aborta en su totalidad. Nada ms lejos de la realidad! Si tenemos dos sentencias dentro de una transaccin. USE SUPERMERCADOSNEPTUNO BEGIN TRAN UPDATE PRODUCTOS SET PRECIOUNIDAD=2.5 WHERE NOMBREPRODUCTO=QUESO CABRA UPDATE PRODUCTOS SET PRECIOUNIDAD=2.5 WHERE NOMBREPRODUCTO=QUESO CABRA COMMIT TRAN Estas dos sentencias se ejecutarn como una sola. Si por ejemplo en medio de la transaccin (despus del primer update y antes del segundo) hay un corte de electricidad, cuando el SQL Server se recupere se encontrar en medio de una transaccin y, o bien la termina o bien la deshace, pero no se quedar a medias.El error est en pensar que si la ejecucin de la primera sentencia da un error se cancelar la transaccin. El SQL Server slo se preocupa de ejecutar las sentencias, no de averiguar si lo hacen correctamente o si la lgica de la transaccin es correcta. Eso es cosa nuestra. Por eso en el ejemplo que tenemos ms arriba para cada sentencia de nuestro conjunto averiguamos si se ha producido un error y si es as actuamos en consecuencia cancelando toda la operacin. CREATE PROCEDURE INSERTADETALLE
@IDPEDIDO INT, @IDPRODUCTO INT, @CANT INT, @PRECIO MONEY AS DECLARE @ERROR INT SET NOCOUNT ON IF NOT EXISTS(SELECT * FROM PEDIDOS WHERE IDPEDIDO=@IDPEDIDO) PRINT 'NO EXISTE EL NUMERO DE PEDIDO PARA EL DETALLE DE PEDIDO ESPECIFICADO' ELSE BEGIN BEGIN TRANSACTION INSERT INTO [DETALLES DE PEDIDOS](IDPEDIDO,IDPRODUCTO,PRECIOUNIDAD,CANTIDAD) VALUES(@IDPEDIDO,@IDPRODUCTO,@PRECIO,@CANT) PRINT 'SE HA INSERTADO EL DETALLE DE PEDIDO' SET @ERROR=@@ERROR IF (@ERROR<>0) GOTO TRATARERROR UPDATE PRODUCTOS SET UNIDADESENEXISTENCIA=UNIDADESENEXISTENCIA-@CANT
Pag.169
S
PRINT 'SE HA DESCARGADO EL STOCK' SET @ERROR=@@ERROR IF (@ERROR<>0) GOTO TRATARERROR COMMIT TRANSACTION TRATARERROR: IF (@@ERROR<>0) BEGIN PRINT 'NO ES POSIBLE LA ACTUALIZACION' ROLLBACK TRANSACTION END END GO INSERTADETALLE 20572,2,10,3
ISTEMAS
UNI
Pag.170
ISTEMAS
UNI
Pag.171
S
CREACION DE TRIGGERS
ISTEMAS
UNI
Los disparadores de procedimiento, ms comnmente conocidos como triggers, son una especie de procedimientos almacenados, a diferencia que se ejecutan cuando ocurre un evento sobre alguna tabla. Entendemos por evento, cualquier accin del tipo: INSERCIN BORRADO ACTUALIZACIN
Por ejemplo, si queremos crear un trigger llamado modificacin_cliente, sobre la tabla Authors, que muestre un mensaje cada vez que se actualiza una fila de la tabla, deberemos escribir el Cdigo fuente
CREATE TRIGGER modificacion_Pedidos ON Pedidos FOR UPDATE AS print "Han actualizado la tabla Pedidos"
Para comprobar el funcionamiento de este trigger, podemos actualizar cualquier fila de la tabla de clientes, por ejemplo con la sentencia que aparece en el Cdigo fuente
Pag.172
S
ELIMINAR UN TRIGGER
Para borrar un trigger, deberemos ejecutar la sentencia DROP TRIGGER
ISTEMAS
UNI
Por ejemplo, si queremos borrar el trigger anteriormente creado, ejecutaremos el Cdigo fuente
MODIFICAR UN TRIGGER
Para modificar un trigger, deberemos ejecutar la sentencia ALTER TRIGGER Por ejemplo, si queremos modificar el trigger anteriormente creado, ejecutaremos el Cdigo fuente
ALTER TRIGGER modificacion_Pedidos ON Pedidos FOR UPDATE AS print "Los registros de la tabla Pedidos han sido actualizados"
Como ya se ha comentado, los triggers o desencadenadores son una especie de procedimientos almacenados, que se ejecutan cuando ocurre una accin dentro de la base de datos. As, si por ejemplo se ejecuta una insercin, una actualizacin, o un borrado de una tabla, se ejecutaran las sentencias definidas para el trigger en concreto de esa tabla especfica. Recordamos cual es su sintaxis: CREATE TRIGGER nombre ON tabla FOR [DELETE | INSERT | UPDATE] AS Sentencias Las palabras reservadas DELETE, INSERT y UPDATE corresponden a cada una de las acciones para las cuales se puede definir un desencadenador dentro de la tabla especificada. El bloque de sentencias permite prcticamente cualquier tipo de ellas dentro del lenguaje TSQL, pero con ciertas limitaciones. Por ejemplo, no se podr utilizar la sentencia select, ya que un trigger no puede devolver datos al usuario, sino que simplemente se ejecuta para cambiar o comprobar los datos que se van a insertar, actualizar o borrar.
Pag.173
ISTEMAS
UNI
La utilidad de estas dos tablas es la de realizar comprobaciones entre los datos antiguos y los nuevos.As, por ejemplo, si queremos recuperar los datos de la tabla que estamos borrando, dentro del trigger,se deber ejecutar el siguiente cdigo: SELECT * FROM DELETED
TIPOS DE DESENCADENADORES
SQL-Server permite la definicin de varios tipos de triggers, entre los cuales cabe destacar los siguientes: DESENCADENADORES MLTIPLES: Para una misma tabla, se pueden definir distintos triggers para la misma accin, es decir, si definimos un trigger para insert, y resulta que dicha tabla ya tena definido un trigger para esa misma accin, se ejecutarn ambos triggers cuando ocurra dicho evento sobre la tabla. DESENCADENADORES RECURSIVOS: Se permite la recursividad entre las llamadas a los triggers, es decir, un trigger puede llamar a su vez a otro, bien de forma directa, bien de forma indirecta. DESENCADENADORES ANIDADOS: si un trigger cambia una tabla en la que se encuentra definido otro trigger, se provoca la llamada de este ltimo que, si a su vez vuelve a modificar otra tabla, puede provocar la ejecucin de otro trigger, y as sucesivamente. Si se supera el nivel de anidamiento permitido, se cancelar la ejecucin de los triggers.
Pag.174
S
FROM CLIENTES A INNER JOIN X ON A.IDCLIENTE = X.IDCLIENTE
ISTEMAS
UNI
EJEMPLOS
1. Veamos a continuacin algunos ejemplos que complementen lo visto hasta ahora. El siguiente cdigo, muestra la forma de enviar un mensaje de correo electrnico a una persona, cuando se aade una nueva oferta. CREATE TRIGGER ENVIAR_CORREO ON OFERTA FOR INSERT AS EXEC MASTER..XP_SENDMAIL 'PEPE','Tenemos una nueva oferta en nuestra base de datos' GO 2. Sin embargo, si queremos que se enve el mensaje cada vez que se cambia algo en la tabla de ofertas, deberemos reescribir el trigger para las acciones update y delete, como se muestra en el siguiente cdigo. DROP TRIGGER ENVIAR_CORREO GO CREATE TRIGGER ENVIAR_CORREO ON OFERTA FOR INSERT, UPDATE, DELETE AS EXEC MASTER..XP_SENDMAIL 'PEPE','LA TABLA DE OFERTAS HA CAMBIADO' GO CREATE TRIGGER TR_ACTUALIZASTOCK ON [DETALLES DE PEDIDOS] FOR INSERT AS BEGIN DECLARE @IDPROD INT DECLARE @CANTIDAD INT DECLARE @STOCK INT SET @IDPROD=(SELECT IDPRODUCTO FROM INSERTED) SET @CANTIDAD=(SELECT CANTIDAD FROM INSERTED) SET @STOCK= (SELECT STOCK FROM PRODUCTOS WHERE IDPRODUCTO=@IDPROD) IF @STOCK>@CANTIDAD BEGIN UPDATE PRODUCTOS SET STOCK=STOCK-@CANTIDAD WHERE IDPRODUCTO=@IDPROD PRINT 'SE DESCARGO EL STOCK' END ELSE BEGIN ROLLBACK PRINT 'LA CANTIDAD DEBE SER MENOR AL STOCK' ENDEND
Pag.175
ISTEMAS
UNI
3. Crear un trigger que no permita registrar un detalle de pedido con un idpedido que no exista en la tabla pedidos CREATE TRIGGER VALIDADETALLE ON DETALLES FOR INSERT AS BEGIN DECLARE @IDPEDIDO INT SET @IDPEDIDO= ISNULL((SELECT IDPEDIDO
FROM PEDIDOS WHERE IDPEDIDO=(SELECT IDPEDIDO FROM INSERTED)),0)
IF @IDPEDIDO=0 BEGIN PRINT 'NO SE PUEDE INSERTAR UN PEDIDO' ROLLBACK END END 4. Crear un triger ue no permita la venta de condimentos CREATE TRIGGER PROHIBECONDIMENTOS ON [DETALLES DE PEDIDOS] FOR INSERT AS BEGIN DECLARE @COD INT DECLARE @EXISTE INT SET @COD=(SELECT C.IDCATEGORA FROM CATEGORAS C WHERE C.NOMBRECATEGORA LIKE 'CONDIMENTO%') SET @EXISTE=ISNULL(( SELECT IDPRODUCTO FROM PRODUCTOS WHERE IDCATEGORA=@COD AND IDPRODUCTO= (SELECT IDPRODUCTO FROM INSERTED) ),0) IF @EXISTE<>0 BEGIN PRINT 'NO SE PUEDE VENDER UN CONDIMENTO ESTA SUSPENDIDO' ROLLBACK END END
DESHABILITAR UN TRIGGER
Para DESHABILITAR un triger se hace de la siguiente manera ALTER TABLE DETALLES DISABLE TRIGGER PROHIBECONDIMENTOS Para HABILITAR un triger se hace de la siguiente manera ALTER TABLE DETALLES ENABLE TRIGGER PROHIBECONDIMENTOS
Pag.176
ISTEMAS
UNI
Pag.177
S
CURSORES EN SQL SERVER
ISTEMAS
UNI
Todas las instrucciones SQL operan sobre un conjunto de filas. Una instruccin SELECT devuelve un conjunto completo de resultados que contiene todas las filas que cumplen los requisitos incluidos en la instruccin SELECT. Las aplicaciones necesitan procesar el conjunto de resultados de una fila o bloque de filas de una vez. Los cursores son una extensin lgica para conjuntos de resultados que permiten a las aplicaciones trabajar con el conjunto de resultados fila por fila. Microsoft SQL Server 2000 admite varios mecanismos para especificar cursores:
Transact-SQL admite las instrucciones DECLARE CURSOR, OPEN, FETCH y CLOSE para administrar cursores. Transact-SQL tambin admite extensiones como: Una instruccin DEALLOCATE para permitir optimizaciones al volver a utilizar cursores.
Definir una variable Transact-SQL de forma que contenga un tipo de datos cursor y utilizarla para hacer referencia a un cursor. Definir un cursor para que tenga alcance local o global. Especificar los tipos de cursores de las especificaciones OLE DB y ODBC (FORWARD_ONLY, STATIC, KEYSET y DYNAMIC) en una instruccin DECLARE CURSOR.
FORWARD_ONLY
Especifica que el cursor slo se puede desplazar desde la primera a la ltima fila. FETCH NEXT es la nica opcin de recuperacin aceptada. Si se especifica FORWARD_ONLY sin las palabras clave STATIC, KEYSET o DYNAMIC, el cursor funciona como un cursor DYNAMIC. Cuando no se especifica FORWARD_ONLY ni tampoco SCROLL, FORWARD_ONLY es la opcin predeterminada
STATIC
Define un cursor que hace una copia temporal de los datos que utiliza. Todas las peticiones al cursor se responden desde esta tabla temporal de tempdb; por ello, las modificaciones realizadas en las tablas base no se reflejarn en los datos obtenidos en las recuperaciones realizadas en el cursor y adems este cursor no admite modificaciones.
KEYSET
Especifica que la pertenencia y el orden de las filas del cursor se fijan al abrir ste. El conjunto de claves que identifica de forma nica las filas est integrado en una tabla de tempdb conocida como KEYSET. Los cambios en valores que no sean claves de las tablas base, ya sean realizados por el propietario del cursor o confirmados por otros usuarios, son visibles cuando el propietario se desplaza por el cursor. Las inserciones realizadas por otros usuarios no son visibles (no es posible hacer inserciones a travs de un cursor de servidor Transact-SQL). Si se elimina una fila, el intento de recuperarla obtendr un valor de -2 en @@FETCH_STATUS. Las actualizaciones de los valores de claves desde fuera del cursor se asemejan a la eliminacin de la fila antigua seguida de la insercin de la nueva. La fila con los
SQL SERVER Implementacion
Pag.178
ISTEMAS
UNI
nuevos valores no es visible y los intentos de recuperar la de los valores antiguos devuelven el valor -2 en @@FETCH_STATUS. Los nuevos valores son visibles si la actualizacin se realiza a travs del cursor, al especificar la clusula WHERE CURRENT OF.
DYNAMIC
Define un cursor que, al desplazarse por l, refleja en su conjunto de resultados todos los cambios realizados en los datos de las filas.
EJEMPLOS CURSORES
El conjunto de resultados generado al abrir este cursor contiene todas las filas y todas las columnas de la tabla EMPLEADOS de la base de datos SUPERMERCADOSNEPTUNO. Este cursor se puede actualizar, y todas las actualizaciones y eliminaciones se representan en las recuperaciones realizadas contra el cursor. FETCH NEXT es la nica recuperacin disponible debido a que no se ha especificado la opcin SCROLL. DECLARE CUR_CLIENTES CURSOR FOR SELECT * FROM CLIENTES OPEN CUR_CLIENTES FETCH NEXT FROM CUR_CLIENTES
Para desplazarse de registro en registro ejecute esta instruccin varias veces FETCH NEXT FROM CUR_CLIENTES
Pag.179
S
FETCH RELATIVE 3 FROM CUR_EMPLEADOS Te ubica directamente en el registro con la posicion 2 FETCH ABSOLUTE 2 FROM CUR_EMPLEADOS Cierra temporalmente el cursor para ser reabierto con una instruccin OPEN CLOSE CUR_EMPLEADOS Lo cierra definitamente al borrarlo de memoria DEALLOCATE CUR_EMPLEADOS
ISTEMAS
UNI
Para avanzar o retroceder desde la posicion actual segn si el numero especificado es un numero positivo o negativo
UN CURSOR ACTUALIZABLE
DECLARE CUR_CLIENTES CURSOR FOR SELECT * FROM CLIENTES OPEN CUR_CLIENTES FETCH NEXT FROM CUR_CLIENTES Actualiza el registro actual del cursor UPDATE CLIENTES SET NOMBRECOMPAA='SISTEMAS UNI' WHERE CURRENT OF CUR_CLIENTES Elimina el registro actual del cursor DELETE CLIENTES WHERE CURRENT OF CUR_CLIENTES Cerrar y eliminar el cursor CLOSE CUR_CLIENTES DEALLOCATE CUR_CLIENTES
Pag.180
ISTEMAS
UNI
Pag.181
ISTEMAS
UNI
3. En el cuadro de dilogo Archivo nueva base de datos, haga clic en una ubicacin en el cuadro Guardar en y especifique un nombre en el cuadro Nombre de archivo. Compruebe que aparece Proyectos de Microsoft Access en el cuadro Guardar como tipo y, finalmente, haga clic en Crear.
4. En la ficha Conexin del cuadro de dilogo vinculos de datos, especifique un nombre de servidor y la informacin necesaria para iniciar una sesin en el servidor
Pag.182
S
5. A continuacin, seleccione la base de datos en el servidor.
ISTEMAS
UNI
Pag.183
UNI CREAR UN FORMULARIO CON UNA BASE DATOS DE UNA BASE DE SQL SERVER CON ACCESS
ISTEMAS
2. A continuacion Autoformulario
abrir el
Menu
Insertar y
elija la
opcion
Pag.184
UNI CREAR UN INFORME CON UNA BASE DATOS DE UNA BASE DE SQL SERVER CON ACCESS
ISTEMAS
Pag.185
ISTEMAS
UNI
Pag.186
S
SQL SERVER 2000
ISTEMAS
UNI
PRACTICA 1
1. Crear la tabla empleados y definir su clave principal en la misma instruccin de creacin. ______________________________________________________________________ 2. Crear la tabla oficinas con su clave principal y su clave fornea ( la columna dir contiene el cdigo de empleado del director de la oficina luego es un campo que hace referencia a un empleado luego es clave fornea y hace referencia a la tabla empleados). ______________________________________________________________________ 3. Crear la tabla productos con su clave principal. ______________________________________________________________________ 4. Crear la tabla clientes tambin con todas sus claves y sin la columna limitecredito. ______________________________________________________________________ 4. Crear la tabla pedidos sin clave principal, con la clave fornea que hace referencia a los productos, la que hace referencia a clientes y la que indica el representante (empleado) que ha realizado el pedido. ______________________________________________________________________ 5 Aadir a la definicin de clientes la columna limitecredito. ______________________________________________________________________ 6 Aadir a la tabla empleados las claves forneas que le faltan. (Si no tienes claro cuales son te lo decimos ahora: la columna oficina indica la oficina donde trabaja el empleado y la columna director indica quin dirige al empleado, su jefe inmediato). ______________________________________________________________________ 7 Hacer que no puedan haber dos empleados con el mismo nombre. ______________________________________________________________________ 8 Aadir a la tabla de pedidos la definicin de clave principal. ______________________________________________________________________ 9 Definir un ndice sobre la columna region de la tabla de oficinas. ______________________________________________________________________ 10 Eliminar el ndice creado. ______________________________________________________________________
Pag.187
S
SQL SERVER 2000
ISTEMAS
UNI
PRACTICA 2
Debes crear una consulta por cada ejercicio, no se pueden escribir varias sentencias SQL en una misma consulta. Si quieres puedes guardar cada consulta con un nombre que permita identificarla por ejemplo: consulta_2_1 siendo 2 el nmero del tema y 1 el nmero del ejercicio dentro del tema. Ahora puedes empezar a redactar las sentencias SQL para obtener lo que se pide en cada ejercicio.
CONSULTAS SIMPLES
1. Obtener una lista de todos los productos indicando para cada uno su idfab, idproducto, descripcin, precio y precio con I.G.V. incluido (es el precio anterior aumentado en un 16%). 2. De cada pedido queremos saber su nmero de pedido, fab, producto, cantidad, precio unitario e importe. 3. Listar de cada empleado su nombre, n de das que lleva trabajando en la empresa y su ao de nacimiento (suponiendo que este ao ya ha cumplido aos). 4. Obtener la lista de los clientes agrupados por cdigo de representante asignado, visualizar todas la columnas de la tabla. 5. Obtener las oficinas ordenadas por orden alfabtico de regin y dentro de cada regin por ciudad, si hay ms de una oficina en la misma ciudad, aparecer primero la que tenga el nmero de oficina mayor. 6. Obtener los pedidos ordenados por fecha de pedido. 7. Listar las cuatro lneas de pedido ms caras (las de mayor importe). 8. Obtener las mismas columnas que en el ejercicio 2 pero sacando unicamente las 5 lneas de pedido de menor precio unitario. 9. Listar toda la informacin de los pedidos de marzo. 9. Listar los nmeros de los empleados que tienen una oficina asignada. 10. Listar los nmeros de las oficinas que no tienen director. 11. Listar los datos de las oficinas de las regiones del norte y del este (tienen que aparecer primero las del norte y despus las del este). 12. Listar los empleados de nombre Julia. 13. Listar los productos cuyo idproducto acabe en x.
SQL SERVER Implementacion
Pag.188
S
SQL SERVER 2000
ISTEMAS
UNI
PRACTICA 3
13. Listar los cdigos de los empleados que tienen una lnea de pedido superior a 10.000 ptas
o que tengan una cuota inferior a 10.000 pts. ______________________________________________________________________
Pag.189
S
SQL SERVER 2000
ISTEMAS
UNI
PRACTICA 4
EJERCICIOS DE SUBCONSULTAS
Los ejercicios que te proponemos a continuacin se pueden resolver de varias maneras, intenta resolverlos utilizando subconsultas ya que de eso trata el tema, adems un mismo ejercicio lo puedes intentar resolver de diferentes maneras utilizandos distintos tipos de condiciones, as un ejercicio se puede convertir en dos o tres ejercicios. 1. Listar los nombres de los clientes que tienen asignado el representante Alvaro Jaumes (suponiendo que no pueden haber representantes con el mismo nombre). _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ 2. Listar los vendedores (numemp, nombre, y n de oficina) que trabajan en oficinas "buenas" (las que tienen ventas superiores a su objetivo). _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ 3. Listar los vendedores que no trabajan en oficinas dirigidas por el empleado 108. _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ 4. Listar los productos (idfab, idproducto y descripcin) para los cuales no se ha recibido ningn pedido de 25000 o ms. _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ 5. Listar los clientes asignados a Ana Bustamante que no han remitido un pedido superior a 3000 _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ 6. Listar las oficinas en donde haya un vendedor cuyas ventas representen ms del 55% del objetivo de su oficina. _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ 7. Listar las oficinas en donde todos los vendedores tienen ventas que superan al 50% del objetivo de la oficina. _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ 8. Listar las oficinas que tengan un objetivo mayor que la suma de las cuotas de sus vendedores.
Pag.190
S
SQL SERVER 2000
ISTEMAS
UNI
PRACTICA 5
CONSULTAS DE RESUMEN
1. Cul es la cuota media y las ventas medias de todos los empleados? ______________________________________________________________________ 2. Hallar el importe medio de pedidos, el importe total de pedidos y el precio medio de venta (el precio de venta es el precio unitario en cada pedido). ______________________________________________________________________ 3. Hallar el precio medio de los productos del fabricante ACI. ______________________________________________________________________ 4. Cul es el importe total de los pedidos realizados por el empleado Vicente Pantalla? ______________________________________________________________________ 5. Hallar en qu fecha se realiz el primer pedido (suponiendo que en la tabla de pedidos tenemos todos los pedidos realizados hasta la fecha). ______________________________________________________________________ 6. Hallar cuntos pedidos hay de ms de 25000 ptas. ______________________________________________________________________ 7. Listar cuntos empleados estn asignados a cada oficina, indicar el nmero de oficina y cuntos hay asignados. ______________________________________________________________________ 8. Para cada empleado, obtener su nmero, nombre, e importe vendido por ese empleado a cada cliente indicando el nmero de cliente. ______________________________________________________________________ 9. Para cada empleado cuyos pedidos suman ms de 30.000 ptas, hallar su importe medio de pedidos. En el resultado indicar el nmero de empleado y su importe medio de pedidos. ______________________________________________________________________
Pag.191
ISTEMAS
UNI
10. Listar de cada producto, su descripcin, precio y cantidad total pedida, incluyendo slo los productos cuya cantidad total pedida sea superior al 75% del stock; y ordenado por cantidad total pedida. ______________________________________________________________________ 11. Saber cuntas oficinas tienen empleados con ventas superiores a su cuota, no queremos saber cuales sino cuntas hay.
13. Aadir una nueva oficina para la ciudad de Madrid, con el nmero de oficina 30, con un objetivo de 100000 y regin Centro.
______________________________________________________________________
17. Recuperar los precios originales de los productos a partir de la tabla nuevosproductos.
______________________________________________________________________
Pag.192