sql manual de consulta resúmen -...

54
SQL manual de consulta resúmen SQL Server 2000 ofrece el soporte de información para las tradicionales aplicaciones Cliente/Servidor, las cuales están conformadas por una interfaz a través de la cual los clientes acceden a los datos por medio de una LAN. SQL Server 2000 está diseñado para trabajar con dos tipos de bases de datos : • OLTP (OnLine Transaction Processing) Son bases de datos caracterizadas por mantener una gran cantidad de usuarios conectados concurrentemente realizando ingreso y/o modificación de datos. Por ejemplo : entrada de pedidos en línea, inventario, contabilidad o facturación. • OLAP (OnLine Analytical Processing) Son bases de datos que almacenan grandes cantidades de datos que sirven para la toma de decisiones, como por ejemplo las aplicaciones de análisis de ventas SQL Server incluye un conjunto de herramientas que facilitan la instalación y administración del servidor así como un conjunto de herramientas que facilitan el diseño e implementación de base de datos, entre ellos podemos mencionar: • SQL Server 2000 Database Engine, diseñado para almacenar detalladamente los registros de las operaciones transaccionales (OLTP), este motor es responsable de mantener la seguridad de los datos, proveer un adecuado nivel de tolerancia a fallos, optimizar las consultas, emplear adecuadamente los bloqueos de recursos para optimizar la concurrencia, etc. • SQL Server 2000 Analysis Services, provee herramientas para consultar información almacenada en data warehouses y data marts, como por ejemplo cuando se desea obtener información totalizada acerca de los niveles de ventas mensuales por regiones de ventas, etc Modos de autenticar las cuentas de los usuarios SQL Server valida a los usuarios en dos niveles de seguridad: una a través de un Inicio de sesión que establece el hecho de realizar la conexión a SQL Server y otro a partir de la validación de los permisos que tienen los usuarios sobre una base de datos. INICIO DE SESIÓN Todos los usuarios deben tener un Inicio de sesión para poder conectarse a SQL Server, para esto SQL Server reconoce 2 mecanismos de autentificación: SQL Server es cuando el usuario debe proveer de un usuario y una contraseña que serán validados por el propio SQL Server cuando el cliente intente conectarse. Windows NT es cuando una cuenta o grupo de Windows NT controla el acceso a SQL Server, el cliente no provee usuario y contraseña, ya que se empleará la cuenta con la que se ingresa al sistema operativo. Para modificar la autenticación realice los siguientes pasos: 1 Haga clic derecho sobre el servidor, en el menú contextual haga clic sobre la opción Properties. 2 En la caja de diálogo haga clic sobre la ficha Seguridad, se presentará la siguiente pantalla:

Upload: hathien

Post on 28-Apr-2018

225 views

Category:

Documents


1 download

TRANSCRIPT

SQL manual de consulta resúmen

SQL Server 2000 ofrece el soporte de información para las tradicionales aplicaciones Cliente/Servidor, las cuales están conformadas por una interfaz a través de la cual los clientes acceden a los datos por medio de una LAN.

SQL Server 2000 está diseñado para trabajar con dos tipos de bases de datos :

• OLTP (OnLine Transaction Processing) Son bases de datos caracterizadaspor mantener una gran cantidad de usuarios conectados concurrentementerealizando ingreso y/o modificación de datos. Por ejemplo : entrada de pedidosen línea, inventario, contabilidad o facturación.• OLAP (OnLine Analytical Processing) Son bases de datos que almacenangrandes cantidades de datos que sirven para la toma de decisiones, como porejemplo las aplicaciones de análisis de ventas

SQL Server incluye un conjunto de herramientas que facilitan la instalación yadministración del servidor así como un conjunto de herramientas que facilitan el diseño e implementación de base de datos, entre ellos podemos mencionar:

• SQL Server 2000 Database Engine, diseñado para almacenar detalladamente losregistros de las operaciones transaccionales (OLTP), este motor es responsable de mantener la seguridad de los datos, proveer un adecuado nivel de tolerancia afallos, optimizar las consultas, emplear adecuadamente los bloqueos de recursospara optimizar la concurrencia, etc.• SQL Server 2000 Analysis Services, provee herramientas para consultarinformación almacenada en data warehouses y data marts, como por ejemplocuando se desea obtener información totalizada acerca de los niveles de ventasmensuales por regiones de ventas, etc

Modos de autenticar las cuentas de los usuarios

SQL Server valida a los usuarios en dos niveles de seguridad: una a través de un Inicio de sesión que establece el hecho de realizar la conexión a SQL Server y otro a partir de la validación de los permisos que tienen los usuarios sobre una base de datos.

INICIO DE SESIÓN

Todos los usuarios deben tener un Inicio de sesión para poder conectarse a SQL Server, para esto SQL Server reconoce 2 mecanismos de autentificación:

SQL Server es cuando el usuario debe proveer de un usuario y una contraseña queserán validados por el propio SQL Server cuando el cliente intente conectarse.

Windows NT es cuando una cuenta o grupo de Windows NT controla el acceso aSQL Server, el cliente no provee usuario y contraseña, ya que se empleará la cuenta con la que se ingresa al sistema operativo.

Para modificar la autenticación realice los siguientes pasos:

1 Haga clic derecho sobre el servidor, en el menú contextual haga clic sobre laopción Properties.

2 En la caja de diálogo haga clic sobre la ficha Seguridad, se presentará lasiguiente pantalla:

Seleccione la opción “SQL Server y Windows” cuando desee brindar servicios deinformación a terceros por ejemplo a usuarios de internet. Seleccione “Sólo Windows” cuando los datos estarán disponibles sólo a los empleados de la organización. En cualquiera de los dos casos debe pulsar Aceptar, espere por un instante mientras SQL Server 2000 detiene los servicios y los vuelve a iniciar para hacer efectivos los cambios.

Hecho esto Ud. podrá definir sus Inicios de sesión de acceso a SQL Server, para ello realice la siguiente secuencia desde el Administrador Empresarial:Expanda la carpeta Seguridad del Administrador Empresarial y haga clic derecho sobre

Inicios de sesión

En la ficha Acceso a base de datos podrá especificar que el Inicio de sesión se definirá como usuario de alguna de las bases de datos existentes. Pulse Aceptar al finalizar.

La creación de Inicios de sesión también es posible desde el Analizador de Consultas, que es una herramienta a la cual accesamos a partir de la siguiente secuencia:

/* Activar Base de datos */Use MasterGO/* Crear nuevos login */Sp_Addlogin ‘mhidalgo’, ‘mhidalgo’GOSp_Addlogin ‘Usuario01’, ‘contraseña’GO/* Comprobar la creación del nuevo login */Select Name From SysloginsGO

Usuarios de Base de Datos

Expanda la base de datos donde desea definir al nuevo usuario y haga clic derecho sobrela carpeta Usuarios

Seleccione un Inicio de sesión de la lista y pulse Aceptar.

Además de los Inicios de sesión y usuarios SQL Server brinda un conjunto de roles porservidor y por base de datos que son derechos predefinidos que podrán especificarse porcada usuario de ser necesario. También es posible crear roles personalizados. Los roles son los siguientes:

Roles por ServidorRol Descripción Dbcreator Crea y modifica bases de datos.Diskadmin Administra los archivos de datos.Processadmin Administra los procesos de SQL Server.SecurityAdmin Administra los Inicios de sesión.Serveradmin Opciones de configuración del servidor.Setupadmin Instala la replicación.Sysadmin Realiza cualquier actividad.

Roles por Base de DatosRol Descripciónpublic Mantiene los permisos En formapredeterminada para todos los usuarios.db_owner Realiza cualquier actividad en la BDdb_accessadmin Agrega o retira usuarios y/o rolesdb_ddladmin Agrega, modifica o elimina objetosdb_SecurityAdmin Asigna permisos sobre objetos o sobresentenciasdb_backupoperator Backup y Restore de la base de datosdb_datareader Lee información desde cualquier tabladb_datawriter Agrega, modifica o elimina datos

db_denydatareader No puede leer la informacióndb_denydatawriter No puede modificar la información

Páginas y extensiones

Antes de crear una base de datos con SQL Server 2000, debemos tomar en cuenta que unidad básica de almacenamiento en SQL Server es la página(data page), el tamaño de cada pade es de 8 KB, lo cual representa un total de 128 páginas por cada megabyte.

O sea 1 page es 8 kB entonces 1MB (1024 kB) = 128 paginas (porque 1024 / 8 = 128)

Archivos y grupos de archivos físicos de la base de datos

Un archivo de base de datos no es mas que un archivo del sistema operativo. Una base de datos se distribuye en por lo menos dos archivos, aunque es muy probable que sean varios los archivos de base de datos que se especifican al crear o al modificar una base de datos.

Principalmente SQL Server divide su trabajo en un archivo para datos y otro para el registro de las transacciones (log).

SQL Server 2000 permite los tres siguientes tipos de archivos:• Archivos de datos primariosToda base de datos tiene un archivo de datos primario que realiza el seguimientode todos los demás archivos, además de almacenar datos. Por convenio estearchivo tiene la extensión MDF.

• Archivos de datos secundariosUna base de datos puede tener cero o varios archivos de datos secundarios. Porconvenio la extensión recomendada para los archivos de datos secundarios esNDF.• Archivos de registro (LOG)Todas las bases de datos por lo menos tendrán un archivo de registro quecontiene la información necesaria para recuperar todas las transacciones quesuceden sobre la misma. Por convenio la extensión de este archivo es LDF.

Por lo tanto al crear una base de datos, debemos considerar los siguientes premisas y reglas para el almacenamiento de los datos:

1. Todas las Bases de Datos tienen un archivo de base de datos primario (.mdf) yuno para el Log de Transacciones (.ldf). Además puede tener archivos de datossecundarios (.ndf).2. Cuando se crea una Base de Datos, una copia de la Base de Datos Model, la cual incluye tablas del sistema, es copiada en la Nueva Base de Datos.3. La Data es almacenada en bloques de 8-kilobytes (KB) de espacio de discocontiguo llamado páginas.4. Las filas o registros no pueden atravesar páginas. Esto, es, que la máximacantidad de datos en una fila de datos simple es de 8060 bytes.5. Las tablas y los índices son almacenados en Extents. Un Extents consta de ocho páginas contiguas, o sea 64 KB.6. El Log de Transacciones lleva toda la información necesaria para la recuperación de la Base de Datos en una eventual caída del sistema. Por default, el tamaño del Log de Transacciones es del 25% del tamaño de los archivos de datos. Use esta configuración como punto de partida y ajuste de acuerdo a las necesidades de su aplicación.

Archivos de Registro (LOG de Transacciones)El LOG de transacciones archiva todas las modificaciones de los datos tal cual son ejecutados. El proceso es como sigue:1. Una modificación de datos es enviada por la aplicación cliente.2. Cuando una modificación es ejecutada, las páginas afectadas son leídas del disco a memoria (Buffer Cache), provista de las páginas que no están todavía en la Data Cache del query previo.3. Cada comando de modificación de datos es archivado en el LOG. El cambiosiempre es archivado en el LOG y es escrito en el disco antes que el cambio seahecho en la Base de Datos. Este tipo de LOG es llamado LOG de tipo write-ahead.4. Una vez que las páginas de datos residen en el Buffer Cache, y las páginas deLOG son archivadas sobre el disco en el archivo del LOG, el proceso deCHECKPOINT, escribe todas las transacciones completas a la Base de Datos enel disco. Si el sistema falla, automáticamente el proceso de recuperación usa el LOG de Transacciones para llevar hacia delante todas las transacciones comprometidas (COMMIT) y llevar hacia atrás alguna transacción incompleta (ROLLBACK).

Los marcadores de transacción en el LOG son usados durante la recuperaciónautomática para determinar los puntos de inicio y el fin de una transacción. Unatransacción es considerada completa cuando el marcador BEGIN TRANSACTIONtiene un marcador asociado COMMIT TRANSACTION. Las páginas de datos sonescritas al disco cuando ocurre el CHECKPOINT.

Creación de Base de Datos

Se puede crear una base de datos de distintas maneras, utilizando el Wizard, desde elAdministrador Empresarial o a través del Query Analizer.

Desde el Analizador de Consultas

Conteste que No, luego de lo cual en el Administrador Empresarial podrá observar lanueva base de datos.

Desde el Administrador Empresarial

En un servidor se puede especificar un máximo de 32,767 bases de datos.¿Quiénes pueden crear bases de datos?En forma predeterminada podrán hacerlos los usuarios que pertenecen al rol sysadminy dbcreator. Los miembros de las funciones fijas de servidor sysadmin y SecurityAdmin pueden conceder permisos CREATE DATABASE a otros inicios de sesión. Los miembros de las funciones fijas de servidor sysadmin y dbcreator pueden agregar otros inicios de sesión a la función dbcreator. El permiso CREATE DATABASE debe concederse explícitamente; no se concede mediante la instrucción GRANT ALL.Estos permisos se limitan a unos cuantos inicios de sesión para mantener el control de la utilización de los discos del equipo que ejecuta SQL Server.

Ejemplo 1Crear la base de datos Prueba1 con los parámetros En forma predeterminada.

Use MasterGOCreate Database Prueba1GO

Ejemplo 2Crear la base de datos Prueba2 con un archivo de datos de 10Mb, un tamaño máximo de20Mb y un crecimiento de 1Mb., el archivo de registro debe asumir los valores pordefault.Use MasterGOCreate Database Prueba2On Primary(NAME = ‘Prueba2_Data’,FILENAME = ‘C:\Program Files\Microsoft SQLServer\MSSQL\data\Prueba2 _Data.Mdf’,SIZE = 10Mb,MAXSIZE = 20Mb,FILEGROWTH= 1Mb)GO

Ejemplo 3Crear la base de datos Prueba3 especificando un archivo de datos con un tamaño inicialde 15Mb, un tamaño máximo de 30Mb y un crecimiento de 5Mb., el archivo de registrodebe tener un tamaño inicial de 5MB y uno máximo de 10MB, el crecimiento debe serde 1MB.Use MasterGOCreate Database Prueba3On Primary(NAME = ‘Prueba3_Data’,FILENAME = ‘C:\Program Files\Microsoft SQLServer\MSSQL\data\Prueba3 _Data.Mdf’SIZE = 15Mb,MAXSIZE = 30Mb,FILEGROWTH= 5Mb)Log On(NAME = ‘Prueba3_Log’,FILENAME = ‘C:\Program Files\Microsoft SQL

Server\MSSQL\data\Prueba3 _Log.Ldf’SIZE = 5Mb,MAXSIZE = 10Mb,FILEGROWTH= 1Mb)GO

Otra de las formas de comprobar la creación de las bases de datos es mostrando las filasde la tabla del sistema SysDatabases.

Use MasterGOSelect DbID, Name From SysDatabasesGO

MODIFICACION DE BASES DATAS MEDIANTE ALTER

Ejemplo 1Modificar la base de datos Prueba2, de tal manera que le debe agregar un archivo dedatos secundario de 5MB y un tamaño máximo de 10 MB. con un crecimiento de 1MB.Antes de ejecutar el siguiente comando utilice Sp_HelpDB Prueba2, para compararluego con los resultados después de ejecutar la sentencia.

USE masterGOALTER DATABASE Prueba2ADD FILE(NAME = Prueba2Sec_Data,FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL\data\Prue2Data.ndf',SIZE = 5MB,MAXSIZE = 10MB,FILEGROWTH = 1MB)GOSp_HelpDB Prueba2GO

Ejemplo 2Crear dos grupos de archivos en la base de datos Prueba2, el primer grupo se llamaráCONSULTORES y el otro se llamará OPERACIONES.ALTER DATABASE Prueba2ADD FILEGROUP ConsultoresGOALTER DATABASE Prueba2ADD FILEGROUP OperacionesGO

-- Verifique la información con las siguientes instrucciones:Use Prueba2GOSp_HelpFileGroupGOSe mostrará el siguiente resultado:

groupname groupid filecountConsultores 2 0Operaciones 3 0PRIMARY 1 2

Ejemplo 3A cada uno de los grupos creados anteriormente añadale dos archivos de datos, paraello considere lo siguiente: los archivos del grupo CONSULTORES deben tener untamaño de 10 MB. cada uno, con un tamaño máximo de 20 MB y un crecimiento de 2 MB., mientras que los del grupo OPERACIONES tendrán un tamaño inicial de 5 MBy un máximo de 30 MB. con un crecimiento de 5 Mb.

Use MasterGOALTER DATABASE Prueba2ADD FILE <----------- aquí agrega archivo(NAME = ‘DatCons01’,FILENAME = ‘C:\Program Files\Microsoft SQLServer\MSSQL\data\DatCons1.ndf’,SIZE = 10MB,MAXSIZE = 20MB,FILEGROWTH = 2MB),(NAME = ‘DatCons02’,FILENAME = ‘C:\Program Files\Microsoft SQLServer\MSSQL\data\DatCons2.ndf’,SIZE = 10MB,MAXSIZE = 20MB,FILEGROWTH = 2MB),TO FILEGROUP CONSULTORESGOALTER DATABASE Prueba2ADD FILE(NAME = ‘DatOper01’,FILENAME = ‘C:\Program Files\Microsoft SQLServer\MSSQL\data\DatOper1.ndf’,SIZE = 5MB,MAXSIZE = 30MB,FILEGROWTH = 5MB),(NAME = ‘DatOper02’,FILENAME = ‘C:\Program Files\Microsoft SQLServer\MSSQL\data\DatOper2.ndf’,SIZE = 5MB,MAXSIZE = 30MB,FILEGROWTH = 5MB),TO FILEGROUP OPERACIONESGO

Ejemplo 4Modificar el tamaño del DatOper01 asignándole como nuevo tamaño máximo 40 Mb.

Use MasterGOALTER DATABASE Prueba2MODIFY FILE <----------- aquí modifica archivo( NAME = ‘DatOper01’,MAXSIZE = 40Mb)GO

Ejemplo 5Eliminar el archivo DatOper01.Use MasterGOALTER DATABASE Prueba2REMOVE FILE ‘DatOper01’ <----------- aquí elimina archivoGO

Ejemplo 7Eliminar la base de datos Prueba2.

Use MasterGODROP DATABASE Prueba2GO

Ejemplo 8Eliminar la base de datos Prueba1 y NuevoNombreUse MasterGODROP DATABASE Prueba1, NuevoNombreGO

Renombrando Base de Datos

Para quitar una base de datos, utilice DROP DATABASE. Para cambiar el nombre deuna base de datos, utilice sp_renamedb, pero recuerde que para esto la base de datos arenombrar tiene que tener activa la opción ‘single user’, si desea comprobar el empleode esta sentencia realice la siguiente secuencia de instrucciones desde el Analizador deConsultas, verifique la base de datos Prueba3 (creada en el Ejemplo3) no esteseleccionada en el Administrador Empresarial, para asegurarse haga clic izquierdo enDatabases, luego ingrese al Analizador de Consultas con una cuenta de administrador(Windows authentication) o con la cuenta sa

/* Para renombrar active la opción Single User en la Base de datos arenombrar */Sp_DBOption ‘Prueba3’, ‘Single User’, ‘True’GO

El resultado sería:DBCC execution completed. If DBCC printed error messages, contact your systemadministrator.The database is now single usuario.

/* En este instante la base de datos puede ser renombrada */Sp_RenameDB ‘Prueba3’, ‘NuevoNombre’GO

/* Compruebe el correcto renombrado de la base de datos y luego retire laopción single usuario de la base de datos */Select Name From SysDatabasesGOSp_DBOption 'NuevoNombre', 'Single Usuario', ‘ False’GO

Creación de Tablas

Tipos de datos definidos por el usuario

Los tipos de datos definidos por el usuario están basados en los tipos de datosdisponibles a través de SQL Server 2000. Los tipos de datos definidos por el usuario sepueden emplear para asegurar que un dato tenga las mismas características sobremúltiples tablas.Para crear un tipo de dato puede emplear el Administrador Empresarial expandiendo labase de datos donde desea crear el dato, luego deberá hacer un clic derecho sobre Tiposde datos definidos por el Usuario y seleccionar “Nuevo tipo de datos definido por elusuario…”, tal como lo muestra la siguiente representación:

Complete la caja de diálogo, tal como lo muestra la siguiente representación:

Ejemplo 1En este ejemplo se creará la base de datos Ejemplo y en ella se definirá el tipo de datosRUC de tipo char(11) el cual no permitirá valores NULL.

USE masterGOCREATE DATABASE EjemploON PRIMARY(NAME = 'Ejem_Data',FILENAME = 'C:\Program Files\Microsoft SQLServer\MSSQL\data\EjemData.Mdf',SIZE = 20Mb,MAXSIZE = 40Mb,FILEGROWTH = 2Mb)LOG ON(NAME = 'Ejem_Log',FILENAME = 'C:\Program Files\Microsoft SQLServer\MSSQL\data\EjemLog.Ldf',SIZE = 5Mb,MAXSIZE = 10Mb,FILEGROWTH = 1Mb)GO

Use EjemploGOSp_Addtype RUC, 'CHAR(11)', 'NOT NULL'GO

Ejemplo 2En este ejemplo se creará el tipo de datos Onomástico de tipo datetime y que permitirávalores NULL.

EXEC sp_addtype Onomastico, datetime, 'NULL'GO

Los tipos de datos que se agregan son inscritos en la tabla systypes, estos tipos dedatos son eliminados con el procedimiento almacenado del sistema sp_droptype.

Ejemplo:Use EjemploGOSp_droptype ‘Onomastico’GOSelect * From SystypesGOSp_droptype ‘RUC’GOSelect * From SystypesGO

Empleo de Comandos DDLL (Data Definition Language)

Las tablas son objetos compuestos por una estructura (conjunto de columnas) quealmacenan información interrelacionada (filas) acerca de algún objeto en general.

Las tablas se definen para los objetos críticos de una base de datos, por ejemploCLIENTES y su estructura estaría conformada por cada uno de los atributos que serequieran de los clientes para poder obtener información de ellos, como por ejemplo:nombres, direcciones, teléfonos, celular, ruc, etc.

Cada uno de estos atributos tiene un tipo de dato definido y además la tabla debepermitir asegurar que cada código de producto es único en la misma, para asegurarse deno almacenar la información del mismo cliente dos veces.

Podemos distinguir los siguientes tipos de tablas:

• Tablas del SistemaLa información usada por SQL Server y sus componentes son almacenadas en tablasespeciales denominadas como tablas del sistema. Estas tablas no deben alterarsedirectamente por el usuario

Las tablas del sistema almacenan información, llamada Metadata, acerca del sistema yde los objetos de las bases de datos. Todas las tablas del sistema comienzan con elprefijo SYS.

• Tablas del Usuario

- Permanentes

Son las tablas donde se almacena la información que los usuarios utilizan para susoperaciones. Esta información existirá hasta que se elimine explícitamente.

- TemporalesEstas son tablas similares a las permanentes que se graban en tempdb, y son eliminadasautomáticamente cuando ya no son usadas.Hay dos tipos de tablas temporales, locales y globales, difieren una de la otra en susnombres, su visibilidad y su ámbito de vida.

Tablas Temporales Locales. El primer carácter del nombre de #, su visibilidades solamente para la conexión actual del usuario y son eliminadas cuando elusuario se desconecta.

Tablas Temporales Globales. Su nombre comienza con ##, su visibilidad espara cualquier usuario, y son eliminadas luego que todos los usuarios que la referencian se desconectan del SQL Server.

Creación de tablas

Consideraciones al crear tablas• billones de tablas por base de datos• 1024 columnas por tabla• 8060 es el tamaño máximo de registro (sin considerar datos image, text y ntext)• Al momento de definir una columna se puede especificar si la columna soporta ono valores NULL.Para crear tablas debe utilizar la sentencia CREATE TABLE,

Ejercicios:

En la base de datos Ejemplo, crear las siguientes tablas:

CLIENTES

Nombre de Columna Tipo de dato Permite NULLnum_clie integer NOT NULLempresa varchar(20) NOT NULLrep_clie Integer NULLlimite_credito Money NULL

Agregar los siguientes registros a la tabla Clientes:

RepVentas

Nombre de Columna Tipo de dato Permite NULLnum_empl integer NOT NULLnombre varchar(15) NOT NULLedad integeroficina_rep integertitulo varchar(10)contrato date NOT NULLdirector integercuota moneyventas money NOT NULL

También podemos crear tablas a partir de sentencias del Transact para ingrese alAnalizador de Consultas y ejecute las siguientes instrucciones:

Use EjemploGOCREATE TABLE Oficinas( oficina integer not null,ciudad varchar(15) not null,region varchar(10) not null,

dir integer,objetivo money,ventas money not null)

CREATE TABLE pedidos(num_pedido integer not null,fecha_pedido datetime not null,clie integer not null,rep integer,fab char(3)not null,producto char(5) not null,cant integer not null,importe money not null)

CREATE TABLE productos(id_fab char(3) not null,id_producto char(5) not null,descripcion varchar(20) not null,precio money not null, existencias integer not null)

Modificación de la estructura de las tablas

Con SQL Server 2000 se puede modificar la estructura de las tablas, se podrá agregar,eliminar o modificar las características de las columnas de la tabla.

Create Table Prueba( cod char(1) NOT NULL,nom char(20) NULL,pat varchar(20) NOT NULL,mat varchar(20) NOT NULL)GO

Ahora modificaremos el campo nom para asignarle como tipo de datos varchar con lamisma longitud y que no permita valores NULL

ALTER TABLE PruebaALTER COLUMN nom varchar(20) NOT NULLGO

Luego agregaremos un campo llamado Sueldo de tipo money:ALTER TABLE PruebaADD Sueldo moneyGO

Agregar la columna fecha_nac, de tipo datetime:ALTER TABLE PruebaADD fecha_nac datetime

Ahora eliminaremos la columna sueldo:ALTER TABLE PruebaDROP COLUMN sueldoGO

Valores autogenerados para las columnas

En SQL Server 2000 se puede definir columnas que obtengan valores generados por elsistema, para ello podemos hacer uso de:

Propiedad Identity

Permite generar valores secuenciales del sistema, este tipo de valores pueden serutilizados en columnas que serán empleadas como primary key.Para emplear esta propiedad debe especificar un valor de inicio y uno de incremento.Recuerde que este tipo de columnas no son editable.

Se puede definir una columna de valor incremental al momento de crear su tabla o alterar su estructura.

Adicionalmente, se puede definir una "semilla" que se utilizara como valor inicial, en la primera fila, mientras que se utilizara el valor "incremento" para ir calculando los siguientes.

Para realizar esta tarea desde el Administrador Corporativo, bien en la creación o en la modificación de una tabla, tenemos los campos: identidad (identity), iniciación de identidad, e incremento de identidad.

Podemos utilizar cualquier tipo de dato numérico, en la figura anterior hemos utilizado un int, cuyo valor inicial es 100, y su incremento 1.

En el siguiente ejemplo, crea la misma tabla "alumnos" con un campo que representaun código de identificación que tendrá valores a partir de 100:

CREATE TABLE alumnos (Nombre char(20), ident int IDENTITY (100,1), curso char(5), edad int null)

En el siguiente ejemplo, se altera una tabla para agregar una columna autoincremental:ALTER TABLE ex_alumnos ADD ex_alumno_Id INT IDENTITY (100,1)

Ejemplo:USE EJEMPLOGOALTER TABLE PruebaADD cod integer Identity(1,1) NOT NULLGO

Para comprobar la generación de los valores ejecute la siguiente secuencia de comandos:

USE EJEMPLOGOINSERT PRUEBA VALUES ('JOSE', 'ROJAS', 'CALDERON',1000)GOINSERT PRUEBA VALUES ('ANA MARIA', 'SALAS', 'GUILLEN',1000)GOSELECT COD, NOM, PAT, MAT, SUELDO FROM PRUEBAGO

Para ver información sobre la columna IDENTITY puede utilizar las funciones:

Select Ident_Seed('Prueba') /* Retorna el valor de inicio de la columnaidentity */GOSelect Ident_Incr('Prueba') /* Retorna el valor de incremento de la columnaidentity */

Función NEWID y Datos de tipo UNIQUEIDENTIFIER

El tipo de dato uniqueidentifier y la función NEWID trabajan unidas para poder generarvalores en el formato GUID (Global Unique Identifier).Este tipo de datos no genera valores automáticamente, sino que por el contrario hay quedefinirle un valor En forma predeterminada que especifique el empleo de la funciónNEWID.

GUID en SQL Server es bueno o malo?Desde la version 7.0 (o 2000, la verdad no recuerdo), SQL Server incorpora el campo Uniqueidentifier, que es un campo computado, que suele generar un GUID (Global Unique Identifier). La caracteristica de este campo, que mediante la funcion NEWID, genera un codigo de 128 bits unico en todo el espacio y universo conocido por el hombre.La pregunta del millon, es para que demonio queremos hacer algo asi?Principalmente para identificar uniquivocamente un registro de otro, o sea, ser la clave primaria de la tabla.El problema que este tipo de campos, es cuando se usa mal. El GUID es ideal en un Datawharehousing, con tablas enormes de mas de 4 mil millones de registros, donde el campo Identity no nos sirve mas, o en replicaciones de tablas con un volumen enorme. En estos casos, GUID puede ser la mejor opcion (y tal vez, la unica).

El tema pasa cuando se quiere reemplazar en bases "normales" el uso de Identity por GUID para solucionar los problemas de replicacion que tienen los Identity.Bueno, es una PESIMA idea.Y voy a enumerar los motivos:

• Costo de I/O: En primer lugar, un campo Uniqueidentifier ocupa 16 bytes contra 4 bytes de un int. En una base de datos de 10 millones de registros, esto significa 8 megas de diferencia. Y como 95% probable que este campo sea tambien la PK de la tabla, el indice tambien ocuparia 8 megas mas. Con lo cual, tendriamos 16 megas de diferencia entre una tabla con un campo GUID y otra con un Identity. El problema no pasa por el espacio en disco, que hoy en dia es baratisimo, sino por el costo de I/O que representa esto. Recordemos que las operaciones de I/O son las mas lentas en una base de datos.

• Costo de Insercion: Generalmente los campos GUID e Identity son PK y en su mayoria son un clustered index. La caracteristica de este tipo de indice, es que orden fisicamente la pagina de datos segun el valor del indice. Si tenemos un indice que se incrementa secuencialmente esto no es ningun problema, ya que el orden es automatico. Ahora, si tenemos valores aleatorios, que es el caso del GUID, estamos fritos. Porque cada vez que insertamos un registro, el SQL tiene que insertar de manera ordenada este registro, lo que genera un overhead y page spliting impresionante. Insertar un campo cuyo cluster index es un GUID tiene un costo ALTISIMO. Una solucion que que se incorporo recien en el SQL2005 es la funcion NEWSEQUENTIALID, que lo que hace es generar GUID secuenciales (en realidad no son secuenciales, sino mayores al ultimo generado), lo que nos evita los page spliting. Con lo cual, si vas a usar GUID y SQLServer 2005, USA ESTA FUNCION!!!

• Debugueo: Bueno, esto no es un problema tanto a nivel performance, sino logico. Si tenemos que debuguear con un campo Identity, en el peor de los casos, nos tenemos que acordar 10 numeros, pero en la enorme mayoria de los casos, cuando debugueamos lidiamos con campos identity menores a 1.000.000 (generalmente), que es mas facil de recordar. En cambio, con un campo GUID SIEMPRE vamos a estar lidiando con una secuencia de numeros y letras enorme que nunca vamos a recordar.

Utilizar NEWID en una instrucción CREATE TABLE

Este ejemplo crea una tabla cust con el tipo de datos uniqueidentifier y utiliza NEWID para llenarla con un valor predeterminado. Al asignar como valor predeterminado NEWID(), cada fila nueva y existente tendrá un valor único en la columna cust_id.

-- Creating a table using NEWID for uniqueidentifier data type. CREATE TABLE cust( cust_id uniqueidentifier NOT NULL DEFAULT newid(), company varchar(30) NOT NULL, contact_name varchar(60) NOT NULL, address varchar(30) NOT NULL, city varchar(30) NOT NULL, state_province varchar(10) NULL, postal_code varchar(10) NOT NULL, country varchar(20) NOT NULL, telephone varchar(15) NOT NULL, fax varchar(15) NULL)GO-- Inserting data into cust table.INSERT cust(cust_id, company, contact_name, address, city, state_province, postal_code, country, telephone, fax)VALUES(newid(), 'Wartian Herkku', 'Pirkko Koskitalo', 'Torikatu 38', 'Oulu', NULL, '90110', 'Finland', '981-443655', '981-443655')INSERT cust(cust_id, company, contact_name, address, city, state_province,postal_code, country, telephone, fax)

VALUES (newid(), 'Wellington Importadora', 'Paula Parente', 'Rua do Mercado, 12', 'Resende', 'SP', '08737-363', 'Brazil', '(14) 555-8122', '')INSERT cust(cust_id, company, contact_name, address, city, state_province, postal_code, country, telephone, fax)VALUES(newid(), 'Cactus Comidas para Ilevar', 'Patricio Simpson', 'Cerrito 333', 'Buenos Aires', NULL, '1010', 'Argentina', '(1) 135-5555', '(1) 135-4892')INSERT cust(cust_id, company, contact_name, address, city, state_province, postal_code, country, telephone, fax)VALUES (newid(), 'Ernst Handel', 'Roland Mendel', 'Kirchgasse 6', 'Graz', NULL, '8010', 'Austria', '7675-3425', '7675-3426')INSERT cust(cust_id, company, contact_name, address, city, state_province, postal_code, country, telephone, fax)VALUES (newid(), 'Maison Dewey', 'Catherine Dewey', 'Rue Joseph-Bens 532', 'Bruxelles', NULL, 'B-1180', 'Belgium', '(02) 201 24 67', '(02) 201 24 68')GO

Para poder observar un ejemplo de lo antes explicado, ejecute la siguiente secuencia decomandos:

CREATE TABLE Prueba2( código uniqueidentifier NOT NULL DEFAULT NEWID(),nombre char(20) NOT NULL)GO

INSERT Prueba2 (nombre) VALUES (‘Mauricio’)GOINSERT Prueba2 (nombre) VALUES (‘Gina’)GOINSERT Prueba2 (nombre) VALUES (‘Cristina’)

SELECT * FROM Prueba2

CODIGO NOMBRE23D504F6-601B-4A6D-8AE1-68D767F61944 Mauricio AA3D6F36-9E46-45B0-83F1-12A2733280D2 Gina 4CF889FE-E4E8-4D50-9BA9-6115E0FB1A29 Cristina

Eliminación de tablas

Para probar el empleo de esta instrucción utilice la siguiente sentencia:DROP TABLE Prueba2GOCompruebe que las tablas Prueba y Prueba2 están eliminadas, con la siguienteinstrucción:

SELECT NAME FROM SYSOBJECTS WHERE TYPE='U'GO

Implementar Restricciones

Uno de los principales objetivos de una base de datos relacional es cuidar y controlar laintegridad de datos, la cual podría perderse ante operaciones que modifican lainformación como: INSERT, UPDATE y DELETE.Por ejemplo se puede perder la integridad de datos ante alguna de las siguientessituaciones:• Se puede registrar un pedido de un producto no existente• Podría modificarse los datos existentes con valores incorrectos• Los cambios a la base de datos podrían aplicarse parcialmente, por ejemplo si seregistra un pedido sin actualizar el stock del producto requerido.

SQL Server provee de múltiples medios para controlar la integridad de datos, como porejemplo:• Datos Requeridos, es una de las restricciones mas sencillas que especifican quecolumnas permiten valores nulos y que columnas no. Al momento de definir lascolumnas de una tabla podrá asignar a cada columna la especificación NULL oNOT NULL.• Control de validez, permite controlar los valores que se le asignarán a unacolumna. Por ejemplo en una columna que guarde promedios de estudiantes sepodría controlar que el rango de valores se encuentre entre 0 y 10.• Integridad de entidad, referido a que una clave principal asegura la unicidad decada registro.• Integridad referencial, asegura las relaciones entre las claves primarias y clavesforáneas, por ejemplo al agregar un pedido controlar que el código de productoque se especifica en el pedido exista en la tabla de productos.• Reglas comerciales, las modificaciones en la base de datos deben cumplir conciertos requisitos para poder mantener la información íntegra, por ejemplo en elcaso anteriormente mencionado, el producto podría existir pero el stockencontrarse en 0, de tal manera que no debería registrarse el pedido.

SQL Server para poder forzar la integridad de datos propone dos modalidades:• Integridad DeclarativaSe debe definir el criterio de consistencia como criterio de la definición delobjeto.Para utilizar integridad declarativa se puede emplear constraints, defaults y rules.• Integridad por ProcedimientosSe pueden escribir procedimientos almacenados y desencadenadores (Triggers)para poder forzar la integridad de datos. Aunque las restricciones muy complejaspodrían implementarse a través de lenguajes de programación y otrasherramientas clientes.En esta parte del capítulo revisaremos la integridad declarativa definiéndola a partir delos CONSTRAINTS.

Los CONSTRAINTS son un método estándar de forzar la integridad de datos, Son validaciones a Nivel Base

de DATOS aseguran que los datos ingresados a las columnas sean válidos y que las relaciones entre las tablas se mantendrá.Los constraints pueden definirse al momento de crear la tabla, aunque también esposible hacerlo después de que las tablas se han creado.

Los CONSTRAINTS se ejecutan antes que la información se registre en el log.

O sea...

NOT NULL = Obliga a contener un dato.PRIMARY KEY = No permite valores duplicados no nulos. Permite acceder rápido a los datos.FOREIGN KEY = es un índice que hace referencia al PK de otra tabla con el fin de validar la existencia del dato ingresado.LA PK QUE SE HACE MEDIANTE RELACION ESTIRANDO UNA TABLA A OTRA

CHECK = Restricción sobre el dominio, entendiendo dominio por los valores válidos para el tipo de dato especificado.PONER RESTRICCION TIPO CONDICION edad >= 18 and edad <=65

UNIQUE = Impide la asignación de valores repetidos, cuando un índice para la columna o las columnas especificadas.DEFAULT = Asigna valores por omisión en caso que no le asigne algún dato.

Ejercicio.

Crear una tabla personas Nombre verchar (30)Edad tinyint

Sexo char (1)ciPadre intciMadre int

Pasos:

1- Crear la tabla2- Ir a diseñar tabla3- Ir a administración de Restricciones (aparece

propiedades)4- Cuadro de propiedades Nueva5- Restricción CHECK, (poner condición en campo)

edad >= 18 and edad <=65Cerrar6- Cuadro de propiedades, Restricción CHECK nueva

sexo ='M' or sexo = 'F'cerrar7- Ir a administración de Restricciones (aparece

propiedades)8- Índices y Claves/ nueva 9- Desplegar nombre de columna/ elegir nombre/

marcar crear con UNIQUE y cerrar10- En CI darle como clave primaria PRIMARY KEY (La

llavecita)11- NOT NULL en ci, nombre, ciPadre y ciMadre12- DEFAULT (en valor predeterminado)en ci,

ciPadre, ciMadre con oooooooo y nombre con ‘VACIO’

13- Para el FOREIGN KEY se realiza un diagrama de relación donde se asigna al campo FK de referencia a la otra tabla donde esta el valor FK

SECUENCIA SQL EN ANALIZADOR

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_personas_personas]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)ALTER TABLE [dbo].[personas] DROP CONSTRAINT FK_personas_personasGO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_personas_personas1]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)ALTER TABLE [dbo].[personas] DROP CONSTRAINT FK_personas_personas1GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[personas]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[personas]GO

CREATE TABLE [dbo].[personas] ([ci] [int] NOT NULL ,[nombre] [varchar] (30) COLLATE Modern_Spanish_CI_AS NOT NULL ,[edad] [tinyint] NULL ,[sexo] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,[cipadre] [int] NOT NULL ,[cimadre] [int] NOT NULL

) ON [PRIMARY]GO

ALTER TABLE [dbo].[personas] WITH NOCHECK ADD CONSTRAINT [PK_personas] PRIMARY KEY CLUSTERED (

[ci]) ON [PRIMARY]

GO

ALTER TABLE [dbo].[personas] WITH NOCHECK ADD CONSTRAINT [DF_personas_sexo] DEFAULT ('M') FOR [sexo],CONSTRAINT [IX_personas] UNIQUE NONCLUSTERED (

[nombre]) ON [PRIMARY] ,CONSTRAINT [CK_personas] CHECK ([edad] >= 18 and [edad] <= 65),CONSTRAINT [CK_personas_1] CHECK ([sexo] = 'M' or [sexo] = 'F')

GO

ALTER TABLE [dbo].[personas] ADD CONSTRAINT [FK_personas_personas] FOREIGN KEY (

[cipadre]) REFERENCES [dbo].[personas] (

[ci]),CONSTRAINT [FK_personas_personas1] FOREIGN KEY

([cimadre]

) REFERENCES [dbo].[personas] ([ci]

)GO

EJERCICIO DEL MANUAL

Definir restricción PRIMARY KEY

ALTER TABLE <Nombre de la Tabla>ADD CONSTRAINT <Nombre del Constraint>PRIMARY KEY (columna1, ...)GO

Un constraint de tipo PRIMARY KEY asegura la unicidad de cada fila en la tabla, sólose podrá definir uno por tabla y debemos recordar que no permite valores NULL.En forma predeterminada crea un índice CLUSTERED.

Ejemplos:Implementar un PRIMARY KEY Constraint que asegure la unicidad de cada cliente.

Use EjemploGOSelect * From Clientes /* Note el orden de los códigos de clientes */GO

ALTER TABLE ClientesADD CONSTRAINT PK_num_cliePRIMARY KEY (num_clie)

GOSelect * From Clientes /* Note que las filas aparecen ordenadas */GO

Implementar un PRIMARY KEY Constraint que asegure la unicidad de cadarepresentante de ventas.

Select * From RepVentas /* Note el orden de los códigos de empleados */GO

ALTER TABLE RepVentasADD CONSTRAINT PK_num_emplPRIMARY KEY (num_empl)GO

Select * From RepVentas /* Note que las filas aparecen ordenadas */GO

Implementar un PRIMARY KEY Constraint que asegure la unicidad de cada oficina.Select * From Oficinas /* Note el orden de los códigos de oficinas */GO

ALTER TABLE OficinasADD CONSTRAINT PK_OficinaPRIMARY KEY (Oficina)GO

Select * From Oficinas /* Note que las filas aparecen ordenadas */GOImplementar un PRIMARY KEY Constraint que asegure la unicidad de cada pedido.

Select * From Pedidos /* Note el orden de los códigos de pedidos */GO

ALTER TABLE PedidosADD CONSTRAINT PK_num_pedidoPRIMARY KEY (num_pedido)GO

Select * From Pedidos /* Note que las filas aparecen ordenadas */GO

Implementar un PRIMARY KEY Constraint que asegure la unicidad de cada producto.Select * From Productos /* Note el orden de los códigos de producto */GO

ALTER TABLE ProductosADD CONSTRAINT PK_fab_prodPRIMARY KEY (id_fab, id_producto)GO

Select * From Productos /* Note que las filas aparecen ordenadas */

Definir FOREIGN KEY Constraint

ALTER TABLE <Nombre de la Tabla>ADD CONSTRAINT <Nombre del Constraint>FOREIGN KEY (columna1, ...)REFERENCES Tabla(columna, …)GO

Un foreign key constraint permjite forzar la integridad de datos manteniendo la relaciónentre una llave primaria y una llave secundaria.Para implementar este tipo de característica debemos recordar que el número decolumnas y el tipo de datos referenciados en la cláusula FOREIGN KEY debe ser elmismo que el mencionado en la cláusula REFERENCES

Ejemplos:Implementar un foreign key constraint que asegure que cada vez que asigne unrepresentante de ventas a un cliente este exista.

USE EjemploGOALTER TABLE ClientesADD CONSTRAINT FK_Cli_RepVentasFOREIGN KEY (Rep_Clie)REFERENCES RepVentas(Num_Empl)GO

Se realiza el alter sobre la tabla clientes en la columna rep_clie que seria la clave foránea haciendo referencia o sea uniéndose a la tabla repVentas en la columna Num_empl

Implementar un foreign key constraint que asegure que cada vez que a un representantede ventas se le asigne un director, esté se encuentre registrado.

ALTER TABLE RepVentasADD CONSTRAINT FK_Dir_RepVentasFOREIGN KEY (Director)REFERENCES RepVentas(Num_Empl)GO

Implementar un foreign key constraint que asegure que la oficina asignada alrepresentante de ventas se encuentre en la tabla oficinas.

ALTER TABLE RepVentasADD CONSTRAINT FK_Ofi_OficinasFOREIGN KEY (oficina_rep)REFERENCES Oficinas(Oficina)GO

Implementar un foreign key constraint que verifique el código de director de la oficina.

ALTER TABLE OficinasADD CONSTRAINT FK_Direc_RepVentaFOREIGN KEY (dir)REFERENCES RepVenta(num_empl)GO

Implementar un foreign key constraint que verifique la existencia del representante deventas que toma un pedido.

ALTER TABLE PedidosADD CONSTRAINT FK_Rep_RepVentasFOREIGN KEY (rep)REFERENCES RepVentas(num_empl)GO

Implementar un foreign key constraint que verifique la existencia de los productos quese indican al momento de tomar un pedido.

ALTER TABLE PedidosADD CONSTRAINT FK_FabPro_ProductosFOREIGN KEY (fab, producto)REFERENCES Productos(id_fab, id_producto)GO

Definir CHECK CONSTRAINT

ALTER TABLE <Nombre de la tabla>ADD CONSTRAINT <Nombre del Constraint>CHECK <Regla a validar>GOUn Check Constraint restringe a los usuarios la posibilidad de ingresar valoresinapropiados a una columna. Este constraint actúa cuando el usuario emplea unainstrucción INSERT o UPDATE.

Ejemplos:Implementar un check constraint que verifique que los códigos de los representantes deventas sean mayores que 100.

ALTER TABLE RepVentasADD CONSTRAINT CK_RV_100CHECK (Num_Empl > 100)GOImplementar un check constraint que verifique que los códigos de los pedidos seanmayores que 100000.

ALTER TABLE PedidosADD CONSTRAINT CK_PedidosCHECK (num_pedido > 100000)GO

Implementar DEFAULT CONSTRAINTSALTER TABLE <Nombre de la tabla>ADD CONSTRAINT <Nombre del constraint>DEFAULT <Valor En forma predeterminada>FOR <columna>GOEstos constraints trabajan al momento de utilizar la función INSERT y asignan un valorautomáticamente a la columna que no se le asignó.

Ejemplo:Asignar un valor en forma predeterminada a la columna DIRECTOR de la tabla quealmacena los datos de los representantes de ventas haciendo que el código En formapredeterminada sea 106.

ALTER TABLE RepVentasADD CONSTRAINT DF_RV_DirectorDEFAULT 106FOR DirectorGOComo parte final de esta implementación emplearemos un conjunto de instruccionespara tratar de modificar la información de las distintas tablas y veremos como losconstraints implementados realizan su trabajo.Para ello ejecute las siguientes instrucciones desde el Analizador de Consultas

Diagrama de Base de Datos

Una vez que hemos terminado de implementar las restricciones especificadasanteriormente y luego que ya tenemos las restricciones funcionando podríamos dar unvistazo al diagrama de la base de datos: Los diagramas representan gráficamente la estructura de la Base de Datos, podemos versus tablas y diseño, además de las relaciones entre ellas. También se convierte en unaherramienta gráfica para crear, modificar e implementar integridad y constancia dedatos.

Recuperar Información

Objetivos:Conocer los comandos DMLRealizar JOINSConocer la funcionalidad de los Desencadenadores

Temas:• Sentencia SELECT• Sentencia INSERT• Sentencia UPDATE• Sentencia DELETE• Recuperar información de dos o más tablas• Desencadenadores

Uno de los principales motivos por el cual se guarda información, es por queposteriormente la vamos a consultar, una de las principales razones por las cuales lasbases de datos relacionales lograron gran aceptación fue por la forma tan sencilla delograr acceder a los datos.Y como parte de estas facilidades para poder realizar consultas, encontramos a lasentencia SELECT.

SelectRecupera información de la Base de Datos y permite la selección de una o más filas ocolumnas de una o muchas tablas. La sintaxis completa de la instrucción SELECT escompleja, sus cláusulas principales pueden ser resumidas de la siguiente manera.

SELECT lista_cols[INTO nueva_tabla]FROM tabla_origen[WHERE condición][GROUP BY columna1,…][HAVING condición][ORDER BY columna1, … [ASC][DESC]]

lista_cols Específica las columnas a ser devueltas por el query.

Tener en cuenta las siguientes consideraciones:• La lista de select recupera y muestra las columnas en el orden especificado.• Separar los nombres de columnas con comas, excepto la última columna.• Usar un asterisco en la lista de select para recuperar todas las columnas de latabla.

INTO nueva_tabla Define la creación de una nueva tabla a partir de la respuesta a laconsulta especificada. Esta operación no es registrada en el log.FROM Determina la tabla o tablas de donde se muestra la información.WHERE Establece un criterio de selección de filasGROUP BY Establece la lista de columna por las cuales se agrupara lainformación.HAVING Permite filtrar los grupos generados por GROUP BYORDER BY Permite ordenar la información de acuerdo a los requerimientos.

EjemplosPAGINA 98· REPASO DE CONSULTAS SOBRE BASE DE DATOS(SELECT, CLAUSULA WHERE,GROUP BY HAVING Y ORDER BY )· COPIAR REGISTROS A OTRA TABLA NUEVA Y MODIFICANDO REGISTRO A LA VEZ (UPDATE)

Insert

INSERT [INTO] <Nombre de la Tabla> VALUES (Valor1, ....)GO

PAGINA 105

********************** Comandos útiles **************************************• sp_helpdb = Para mostrar un informe de una base de datos o de todas las bases de datos de un servidor con SQL Server.

• sp_spaceused = para obtener un informe acerca del espacio utilizado en una base de datos

• sp_helpfilegroup = Para obtener un informe de los grupos de archivos de una base de datos

Use MasterGOCreate Database Prueba1GO

• Si desea ver las características sólo del archivo que agrego utilice la siguientesentencia:Sp_HelpFile Prueba2Sec_DataGO

• Para verificar archivos en grupos creadosUse Prueba2GOSp_HelpFileGroupGO

• Otra forma verificar bases de datos en el sistemaUse MasterGOSelect Name From SysDatabasesGO

• Tipo de datos definidos por el usuario . ejemplo

Otra observación que cuando definimos un tipo de dato primero copiar en Model para que al crear nuevas bases de datos se copien ahí todos los tipos de datos para tener accesibilidad a ellos en la definición de tipos de datos en el modo diseño de tablas.Use EjemploGOSp_Addtype RUC, 'CHAR(11)', 'NOT NULL'GO

• borrar tipo de datos con este comando Ejemplo:Use EjemploGOSp_droptype ‘Onomastico’GO

Sp_droptype RUC

• Generar secuencia de comandos sqlSirve para sacar código de tablas o tipos de datos útil para tener info de códigos • CODIGO PARA CREAR TABLASUse EjemploGOCREATE TABLE Oficinas( oficina integer not null,ciudad varchar(15) not null,region varchar(10) not null,dir integer,objetivo money,ventas money not null)

• CODIGO PARA MODIFICAR ATRIBUTOS DE UNA TABLA

ALTER TABLE PruebaALTER COLUMN nom varchar(20) NOT NULL (nom tiene null)GO

• CODIGO PARA AGREGAR ATRIBUTOS DE UNA TABLA

ALTER TABLE PruebaADD Sueldo moneyGO

• CODIGO PARA ELIMINAR ATRIBUTOS DE UNA TABLA

ALTER TABLE PruebaDROP COLUMN sueldoGO

· Propiedad IdentityPermite generar valores secuenciales del sistema utilizados en columnas que serán empleadas como primary key.

ALTER TABLE PruebaADD cod integer Identity(1,1) NOT NULL

• PARA INSERTAR VALORES EN UNA TABLA EN EL ANALIZADOR

INSERT PRUEBA VALUES ('JOSE', 'ROJAS', 'CALDERON',1000)

• PARA CONSULTAR INFO SOBRE TABLAS SELECT COD, NOM, PAT, MAT, SUELDO FROM PRUEBA

· Para ver información sobre la columna IDENTITY puede utilizar las funciones:

Select Ident_Seed('Prueba') /* Retorna el valor de inicio de la columnaidentity */GOSelect Ident_Incr('Prueba') /* Retorna el valor de incremento de la columnaidentity */

· Función NEWID y Datos de tipo UNIQUEIDENTIFIERCREATE TABLE Prueba2( código uniqueidentifier NOT NULL DEFAULT NEWID(),nombre char(20) NOT NULL)GO>>> Cuando se carga valores se genera caracteres varios en el campo código mediante la definición uniqueidentifier con la función newind()

· Eliminación de tablasDROP TABLE Prueba2GO

· PARA VERIFICAR TABLAS EXISTENTES COMANDO:SELECT NAME FROM SYSOBJECTS WHERE TYPE='U'

• CODIGO PARA AGREGAR CLAVE PRIMARIA A UNA TABLA CREADA

ALTER TABLE ClientesADD CONSTRAINT PK_num_cliePRIMARY KEY (num_clie)GO

• CODIGO PARA AGREGAR CLAVE PRIMARIA EN CREACION DE TABLACreate table director(codd char PRIMARY KEY, nombre varchar (50) not null unique)

• CODIGO PARA CAMBIAR DE NULL A NOT NULL

PRIMERO AGREGAR POR EJEMPLO UN ALTER:alter table loginalter column tipo varchar (10) not null default (" ")

luego entrar en el administrador corporativo ir a diseñar tabla y borrar valor predeterminado (“”)ir al analizador de consultas y ejecutar el codigo:

alter table loginalter column tipo varchar (10) not null

• CODIGO PARA ASIGNAR CLAVE FORANEAUSE EjemploGOALTER TABLE ClientesADD CONSTRAINT FK_Cli_RepVentasFOREIGN KEY (Rep_Clie)REFERENCES RepVentas(Num_Empl)GO

• CODIGO PARA AGREGAR CLAVE FORÁNEA EN CREACION DE TABLACreate table pelicula(codP int, titulo varchar (50) not null unique, codD char, primary key(codP), FOREIGN KEY(codD) REFERENCES Director);

• CODIGO PARA AGREGAR CHECK MODIFICANDO VALORES

ALTER TABLE PedidosADD CONSTRAINT CK_PedidosCHECK (num_pedido > 100000)GO

• CODIGO UPDATE PARA ACTUALIZAR DATOS

UPDATE ClientesSET empresa = 'Cristina Hidalgo'WHERE num_clie = 502GOSe le puede agregar valores al cambio y condicionalesUPDATE ClientesSET num_clie = num_clie + 500WHERE num_clie < 1000GO

METODO DE COPIAR REGISTROS CON MODIFICACION MEDIANTE UPDATE DE REGISTROSCrear una tabla llamada MejoresCli, con los registros de los clientes con un limite decrédito mayor que 60000, en esta nueva tabla incremente el límite de crédito en un 20%SP_DBOPTION 'EJEMPLO', 'SELECT INTO/BULKCOPY', 'TRUE'GOSELECT *INTO MEJORESCLIFROM CLIENTESWHERE LIMITE_CREDITO > 60000GOUPDATE MEJORESCLISET LIMITE_CREDITO = LIMITE_CREDITO * 1.2GOSELECT * FROM MEJORESCLIGOSP_DBOPTION 'EJEMPLO', 'SELECT INTO/BULKCOPY', 'FALSE'GOEjemplo de PruebaSP_DBOPTION 'parfums', 'SELECT INTO/BULKCOPY', 'TRUE'SELECT *INTO mejoresclientesFROM datos_clienteswhere nombrecliente like 'Rosana%'UPDATE mejoresclientesSET nombrecliente='Rosanita'

select * from mejoresclientes

DBCC CHECKIDENT (datos_clientes, RESEED,0)Comprobación de información de identidad: valor de identidad actual '11', valor de columna actual '0'.Ejecución de DBCC completada. Si hay mensajes de error, consulte al administrador del sistema.

***************************************************************************************************************************EJEMPLO CODIGO DE CREACION DE TABLAS EN BASE DE DATOS MANUAL

CREATE TABLE Oficinas( oficina integer primary key,ciudad varchar(15) not null,region varchar(10) not null,dir integer,objetivo money,ventas money not null)

CREATE TABLE pedidos(num_pedido integer primary key,fecha_pedido datetime not null,clie integer not null,rep integer,fab char(3)not null,producto char(5) not null,cant integer not null,importe money not null)

CREATE TABLE productos(id_fab char(3) not null,id_producto char(5) not null,descripcion varchar(20) not null,precio money not null, existencias integer not null,primary key(id_fab,id_producto))

create table clientes(num_clie integer primary key,empresa varchar(20)NOT NULL,rep_clie Integer NULL,limite_credito Money NULL)

create table repventa(num_empl integer primary key,nombre varchar(15) NOT NULL,edad integer,oficina_rep integer,titulo varchar(10),contrato datetime NOT NULL,director integer,cuota money,ventas money NOT NULL)

OBS: UTILIZAR DISTINCT EN SELECT PARA ELIMINAR DUPLICACIONESSelect distinct empleados from empl

USO DEL DECODE PARA Descifra una expresión después de compararla con cada valor debúsqueda. Si la expresión es la misma que la búsqueda, se devuelve el resultado. Si se omite el valor por defecto, se devolverá un valor nulo donde una búsqueda no coincida con ninguno de los valores resultantes.

SELECT job, sal, DECODE (job, ‘ANALYST’, sal*1.1, ‘CLERK’, sal*1.15, ‘MANAGER’,sal*1.20, sal) AS “Nuevo salario” FROM emp;

• Si job = ‘ANALYST ‘ entonces el salario se incrementa en un 10%• Si job = ‘CLERK’ entonces se incrementa en un 15%• Si jog = ‘MANAGER’ entonces se incrementa en un 20%• Para otro caso, entones no hay incremento de salario

EJEMPLO CREACION DE TABLAS PARA BASE DE DATOS PARFUMS

OBS: SE CREA PRIMERO TABLAS PRINCIPALES QUE LUEGO SE CREAN LAS OTRAS TABLAS QUE TIENEN RELACION CON LAS PRINCIPALES (SIN RELACION SE CREA PRIMERO)PARA EVITAR PROBLEMAS CUANDO SE HAGA REFERENCIA POR FOREIGN KEY (CLAVE FORANEA)EJEMPLOcreate table tamañoproducto(id_tamañoproducto int primary key , tamaño varchar (8) not null)

create table producto (idproducto int primary key, nombre_producto varchar(30) not null, id_tamañoproducto int foreign key(id_tamañoproducto)references tamañoproducto, costo money not null, venta money not null, precio_credito money not null)

TABLA CLIENTES PARFUMS VERSION CORREGIDA Y COMPLETA create table datocliente(idcliente int identity(1,1) primary key, nombreapesocio varchar(30) not null,numtel varchar(20) not null, direccion varchar(40), observa varchar(50))

create table tamañoproducto(id_tamañoproducto int primary key , tamaño varchar (8) not null)

create table estadocuenta(idestadocuenta int primary key, nombrecuenta varchar (8))

create table producto (idproducto int primary key, nombre_producto varchar(30) not null, id_tamañoproducto int foreign key(id_tamañoproducto)references tamañoproducto, costo money not null, venta money not null, precio_credito money not null)

create table micompra(idcompra int primary key, fechacompra datetime not null,idproducto int, foreign key (idproducto) references producto,cantidad int not null, montounitario money not null,fechapagar datetime not null,idtipocuenta int foreign key(idtipocuenta) references estadocuenta, fechapago datetime)

create table compradecliente(idcompracliente int primary key, idcliente int,idtipocuenta int foreign key(idtipocuenta) references estadocuenta ,idproducto int, id_tamañoproducto int,costoproducto money not null ,fecha_entregaproducto datetime not null,montoabonado money, fechacobro datetime, observa varchar (50) , foreign key(idcliente)references datocliente,foreign key (idproducto) references producto, foreign key (id_tamañoproducto) references tamañoproducto)

create table clientecomprapago(idcliente int, foreign key (idcliente) references datocliente, fechapago datetime not null, montopago money not null)

create table saldocliente(idsaldo int primary key, idcliente int, foreign key(idcliente) references datocliente, saldo money not null)

………………………………………………………………………………………………………………………………………………………………………………………………………………….

hola qtal te cuento que mi pareja y yo estamos a tu disposicion ambos somos atleticos jovenes de 25 años de gym fuertes escribime, te vamos a estar esperando...

Las correcciones concretas realizadas en el valor de identidad actual dependen de las especificaciones de los parámetros.

Comando DBCC CHECKIDENT Corrección o correcciones de identidad realizadas

DBCC CHECKIDENT (table_name, NORESEED)

No se restablece el valor de identidad actual. DBCC CHECKIDENT devuelve el valor de identidad actual y el valor máximo actual de la columna de identidad. Si los dos valores no coinciden, debe restablecer el valor de identidad para evitar posibles errores o espacios en la secuencia de valores.

DBCC CHECKIDENT (table_name)O bien:DBCC CHECKIDENT (table_name, RESEED)

Si el valor de identidad actual de una tabla es menor que el valor de identidad máximo almacenado en la columna de identidad, se restablece con el valor máximo de la columna de identidad.

DBCC CHECKIDENT (table_name, RESEED,new_reseed_value)

El valor de identidad actual se establece en new_reseed_value. Si no se han insertado filas en la tabla desde su creación, o su todas las filas se han quitado con la instrucción TRUNCATE TABLE, la primera fila insertada después de ejecutar DBCC CHECKIDENT utiliza new_reseed_value como identidad. De lo contrario, la siguiente fila insertada utilizanew_reseed_value + el valor de incremento actual.Si la tabla no está vacía y se establece el valor de identidad en un número menor que el valor máximo de la columna de identidad, puede darse una de las siguientes condiciones:

• Si existe una restricción PRIMARY KEY o UNIQUE en la columna de identidad, se generará el mensaje de error 2627 en operaciones de inserción en la tabla posteriores ya que el valor de identidad generado provocará un conflicto con los valores existentes.

• Si no existe una restricción PRIMARY KEY o UNIQUE, las operaciones de inserción posteriores provocarán la duplicación de los valores de identidad.

PARA CORREGIR EL VALOR DE LA COLUMNA IDENTITY E IGUALAR EL VALOR DEL REGISTRO EN UN INSERT REFREZCAR LA BASE DE DATOS CON ESTOS COMANDOS (EN EL MOMENTO DE AGREGAR UN REGISTRO Y ELIMINARLO)

DBCC CHECKIDENT (datos_clientes, reseed,0)DBCC CHECKIDENT (datos_clientes, reseed)

En este caso se ejecuta sobre la tabla datos_clientes teniendo estos resultados

Comprobación de información de identidad: valor de identidad actual '1', valor de columna actual '0'.Ejecución de DBCC completada. Si hay mensajes de error, consulte al administrador del sistema.Comprobación de información de identidad: valor de identidad actual '0', valor de columna actual '1'.Ejecución de DBCC completada. Si hay mensajes de error, consulte al administrador del sistema.

Condición Métodos para restablecer

El valor de identidad actual es mayor que el valor máximo de la tabla.

• Ejecute DBCC CHECKIDENT (table_name, NORESEED) para determinar el valor máximo actual de la columna y, a continuación, especifíquelo como new_reseed_value en un comando DBCC CHECKIDENT (table_name, RESEED, new_reseed_value).

O bien:

• Ejecute DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) con new_reseed_valueestablecido en un valor muy bajo y, a continuación, ejecute DBCC CHECKIDENT (table_name, RESEED) para corregir el valor.

Se eliminan todas las filas de la tabla.

Ejecute DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) con new_reseed_value establecido en el valor de inicio que desee.