Click here to load reader

Manual tutorial-sql

  • View
    8.862

  • Download
    3

Embed Size (px)

DESCRIPTION

 

Text of Manual tutorial-sql

  • 1. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Tutorial de SQLAprende a utilizar el estndar utilizado para la consulta de bases de datos. Seleccionar, crear,modificar y borrar registros. Todo lo que necesitas para la creacin de tus pginas dinmicas. Autores del manualEste manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com:Rubn Alvarez Miguel Angel Alvarez Agustin JareoRedactor de DesarrolloWeb.com Director de DesarrolloWeb.com (1 captulo)http://www.desarrolloweb.com http://www.desarrolloweb.com(13 captulos) (1 captulo)Claudio Pol Salvat Jonathan Soriano Folchhttp://personal.lobocom.es/claudio/ http://www.mistrucos.net (1 captulo)(17 captulos) (3 captulos)Sara AlvarezEquipo DesarrolloWeb.comhttp://www.desarrolloweb.com(1 captulo)Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 1 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 2. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Parte 1: Introduccin Mostramos que es el lenguaje SQL, y los tipos de datos y sentencias que podemos encontrarnos a lo largo de este manual.1.1.- Qu es SQLQu es y para qu sirve el SQLLas aplicaciones en red son cada da ms numerosas y verstiles. En muchos casos, el esquema bsico de operacin es unaserie de scripts que rigen el comportamiento de una base de datos.Debido a la diversidad de lenguajes y de bases de datos existentes, la manera de comunicar entre unos y otras sera realmentecomplicada a gestionar de no ser por la existencia de estndares que nos permiten el realizar las operaciones bsicas de unaforma universal.Es de eso de lo que trata el Structured Query Language que no es mas que un lenguaje estndar de comunicacin con basesde datos. Hablamos por tanto de un lenguaje normalizado que nos permite trabajar con cualquier tipo de lenguaje (ASP oPHP) en combinacin con cualquier tipo de base de datos (MS Access, SQL Server, MySQL...).El hecho de que sea estndar no quiere decir que sea idntico para cada base de datos. En efecto, determinadas bases dedatos implementan funciones especficas que no tienen necesariamente que funcionar en otras.Aparte de esta universalidad, el SQL posee otras dos caractersticas muy apreciadas. Por una parte, presenta una potencia yversatilidad notables que contrasta, por otra, con su accesibilidad de aprendizaje.El manual de SQL de desarrolloweb pretende dar a conocer las operaciones bsicas que se pueden realizar con SQL y quetienen una aplicacin directa con la creacin de aplicaciones en red sin profundizar ms de lo estrictamente necesario.Buscamos con ello ofrecer al webmaster un manual de referencia prctico y aplicado.Artculo por Rubn Alvarez1.2.- Tipos de campoDiferentes tipos campos empleados en las bases de datosComo sabemos una base de datos esta compuesta de tablas donde almacenamos registros catalogados en funcin dedistintos campos (caractersticas).Un aspecto previo a considerar es la naturaleza de los valores que introducimos en esos campos. Dado que una base dedatos trabaja con todo tipo de informaciones, es importante especificarle qu tipo de valor le estamos introduciendo demanera a, por un lado, facilitar la bsqueda posteriormente y por otro, optimizar los recursos de memoria.Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 2 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 3. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comCada base de datos introduce tipos de valores de campo que no necesariamente estn presentes en otras. Sin embargo, existeun conjunto de tipos que estn representados en la totalidad de estas bases. Estos tipos comunes son los siguientes: Contienen cifras y letras. Presentan una longitud limitada (255 Alfanumricos caracteres) Existen de varios tipos, principalmente, enteros (sin decimales) y Numricos reales (con decimales). Booleanos Poseen dos formas: Verdadero y falso (S o No) Almacenan fechas facilitando posteriormente su explotacin. Fechas Almacenar fechas de esta forma posibilita ordenar los registros por fechas o calcular los das entre una fecha y otra... Son campos alfanumricos de longitud ilimitada. Presentan el Memos inconveniente de no poder ser indexados (veremos ms adelante lo que esto quiere decir). Son campos numricos enteros que incrementan en una unidad su valor para cada registro incorporado. Su utilidad resulta ms que Autoincrementables evidente: Servir de identificador ya que resultan exclusivos de un registro.Artculo por Rubn Alvarez1.3.- Tipos de datos SQLMostramos unas tablas con todos los tipos de datos que hay en SQL.Los tipos de datos SQL se clasifican en 13 tipos de datos primarios y de varios sinnimos vlidos reconocidos por dichostipos de datos. Los tipos de datos primarios son: Tipo de Datos Longitud Descripcin Para consultas sobre tabla adjunta de productos de bases de BINARY 1 byte datos que definen un tipo de datos Binario. BIT 1 byte Valores Si/No True/False BYTE 1 byte Un valor entero entre 0 y 255. COUNTER 4 bytes Un nmero incrementado automticamente (de tipo Long)Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 3 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 4. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Un entero escalable entre 922.337.203.685.477,5808 y CURRENCY 8 bytes 922.337.203.685.477,5807. DATETIME 8 bytes Un valor de fecha u hora entre los aos 100 y 9999. Un valor en punto flotante de precisin simple con un rango de - SINGLE 4 bytes 3.402823*1038 a -1.401298*10-45 para valores negativos, 1.401298*10- 45 a 3.402823*1038 para valores positivos, y 0. Un valor en punto flotante de doble precisin con un rango de - 1.79769313486232*10308 a -4.94065645841247*10-324 para DOUBLE 8 bytes valores negativos, 4.94065645841247*10-324 a 1.79769313486232*10308 para valores positivos, y 0. SHORT 2 bytes Un entero corto entre -32,768 y 32,767. LONG 4 bytes Un entero largo entre -2,147,483,648 y 2,147,483,647. 1 byte por LONGTEXT De cero a un mximo de 1.2 gigabytes. carcter Segn se LONGBINARY De cero 1 gigabyte. Utilizado para objetos OLE. necesite 1 byte por TEXT De cero a 255 caracteres. carcterLa siguiente tabla recoge los sinnimos de los tipos de datos definidos: Tipo de Dato Sinnimos BINARY VARBINARY BOOLEAN LOGICAL BIT LOGICAL1 YESNO BYTE INTEGER1Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 4 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 5. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com COUNTER AUTOINCREMENT CURRENCY MONEY DATE DATETIME TIME TIMESTAMP FLOAT4 SINGLE IEEESINGLE REAL FLOAT FLOAT8 DOUBLE IEEEDOUBLE NUMBER NUMERIC INTEGER2 SHORT SMALLINT INT LONG INTEGER INTEGER4 GENERAL LONGBINARY OLEOBJECT LONGCHAR LONGTEXT MEMO NOTE ALPHANUMERIC TEXT CHAR - CHARACTER STRING - VARCHAR VARIANT (No Admitido) VALUEArtculo por ClaudioTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 5 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 6. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com1.4.- Tipos de sentencias SQL y sus componentes sintcticosPasamos a describir los tipos de sentencias sql que podemos encontrarnos y sus componentes sintcticos.En SQL tenemos bastantes sentencias que se pueden utilizar para realizar diversas tareas.Dependiendo de las tareas, estas sentencias se pueden clasificar en tres grupos principales (DML, DDL,DCL), aunque nosquedara otro grupo que a mi entender no est dentro del lenguaje SQL sino del PLSQL. DESCRIPCIN DML Manipulacin de datos SELECT INSERT SENTENCIA DELETE UPDATE Recupera datos de la base de datos. Aade nuevas filas de datos a la base de datos. Suprime filas de datos de la base de datos. Modifica datos existentes en la base de datos. DDL Definicin de datos CREATE TABLE DROP TABLE ALTER TABLE CREATE VIEW DROP VIEW CREATE INDEX DROP INDEX CREATE SYNOYM DROP SYNONYM Aade una nueva tabla a la base de datos. Suprime una tabla de la base de datos. Modifica la estructura de una tabla existente. Aade una nueva vista a la base de datos. Suprime una vista de la base de datos. Construye un ndice para una columna. Suprime el ndice para una columna. Define un alias para un nombre de tabla. Suprime un alias para un nombre de tabla. DCL Control de acceso GRANT REVOKE Control de transacciones COMMIT ROLLBACKTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 6 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 7. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Concede privilegios de acceso a usuarios. Suprime privilegios de acceso a usuarios Finaliza la transaccin actual. Aborata la transaccin actual. PLSQL SQL Programtico DECLARE OPEN FETCH CLOSE Define un cursor para una consulta. Abre un cursor para recuperar resultados de consulta. Recupera una fila de resultados de consulta. Cierra un cursor.1.4.1.- Componentes sintcticosLa mayora de sentencias SQL tienen la misma estructura.Todas comienzan por un verbo (select, insert, update, create), a continuacin le sigue una o ms clausulas que nos dicen losdatos con los que vamos a operar (from, where), algunas de estas son opcionales y otras obligatorias como es el caso delfrom.Artculo por Sara AlvarezTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 7 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 8. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Parte 2: Insercin y modificacin de datos Vemos como insertar, modificar o borrar datos en nuestras tablas SQL.2.1.- Creacin de tablasExplicamos la manera de crear tablas a partir de sentencias SQL. Definimos los tipo de camposprincipales y la forma de especificar los ndices.En general, la mayora de las bases de datos poseen potentes editores de bases que permiten la creacin rpida y sencilla decualquier tipo de tabla con cualquier tipo de formato.Sin embargo, una vez la base de datos est alojada en el servidor, puede darse el caso de que queramos introducir una nuevatabla ya sea con carcter temporal (para gestionar un carrito de compra por ejemplo) o bien permanente por necesidadesconcretas de nuestra aplicacin.En estos casos, podemos, a partir de una sentencia SQL, crear la tabla con el formato que deseemos lo cual nos puedeahorrar ms de un quebradero de cabeza.Este tipo de sentencias son especialmente tiles para bases de datos como Mysql, las cuales trabajan directamente concomandos SQL y no por medio de editores.Para crear una tabla debemos especificar diversos datos: El nombre que le queremos asignar, los nombres de los campos ysus caractersticas. Adems, puede ser necesario especificar cules de estos campos van a ser ndices y de qu tipo van aserlo.La sintaxis de creacin puede variar ligeramente de una base de datos a otra ya que los tipos de campo aceptados no estncompletamente estandarizados.A continuacin os explicamos someramente la sintaxis de esta sentencia y os proponemos una serie de ejemplos prcticos:2.1.1.- SintaxisCreate Table nombre_tabla(nombre_campo_1 tipo_1nombre_campo_2 tipo_2nombre_campo_n tipo_nKey(campo_x,...))Pongamos ahora como ejemplo la creacin de la tabla pedidos que hemos empleado en captulos previos:Create Table pedidos(id_pedido INT(4) NOT NULL AUTO_INCREMENT,id_cliente INT(4) NOT NULL,id_articulo INT(4)NOT NULL,Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 8 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 9. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comfecha DATE,cantidad INT(4),total INT(4), KEY(id_pedido,id_cliente,id_articulo))En este caso creamos los campos id los cuales son considerados de tipo entero de una longitud especificada por el nmeroentre parntesis. Para id_pedido requerimos que dicho campo se incremente automticamente (AUTO_INCREMENT) deuna unidad a cada introduccin de un nuevo registro para, de esta forma, automatizar su creacin. Por otra parte, para evitarun mensaje de error, es necesario requerir que los campos que van a ser definidos como ndices no puedan ser nulos (NOTNULL).El campo fecha es almacenado con formato de fecha (DATE) para permitir su correcta explotacin a partir de las funcionesprevistas a tal efecto.Finalmente, definimos los ndices enumerndolos entre parntesis precedidos de la palabra KEY o INDEX.Del mismo modo podramos crear la tabla de artculos con una sentencia como sta:Create Table articulos(id_articulo INT(4) NOT NULL AUTO_INCREMENT,titulo VARCHAR(50),autor VARCHAR(25),editorial VARCHAR(25),precio REAL,KEY(id_articulo))En este caso puede verse que los campos alfanumricos son introducidos de la misma forma que los numricos. Volvemos arecordar que en tablas que tienen campos comunes es de vital importancia definir estos campos de la misma forma para elbuen funcionamiento de la base.Muchas son las opciones que se ofrecen al generar tablas. No vamos a tratarlas detalladamente pues sale de lo estrictamenteprctico. Tan slo mostraremos algunos de los tipos de campos que pueden ser empleados en la creacin de tablas con suscaractersticas: Tipo Bytes Descripcin INT o Nmeros enteros. Existen otros tipos de mayor o menor longitud 4 INTEGER especficos de cada base de datos. DOUBLE o Nmeros reales (grandes y con decimales). Permiten almacenar 8 REAL todo tipo de nmero no entero. CHAR 1/caracter Alfanumricos de longitud fija predefinida 1/caracter+ VARCHAR Alfanumricos de longitud variable 1 Fechas, existen multiples formatos especficos de cada base de DATE 3 datos 1/caracter+ BLOB Grandes textos no indexables 2Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 9 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 10. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com BIT o 1 Almacenan un bit de informacin (verdadero o falso) BOOLEANArtculo por Rubn Alvarez2.2.- Estructuras de las tablas en SQLUna base de datos en un sistema relacional est compuesta por un conjunto de tablas, que correspondena las relaciones del modelo relacional.En la terminologa usada en SQL no se alude a las relaciones, del mismo modo que no se usa el trmino atributo, pero s lapalabra columna, y no se habla de tupla, sino de lnea.2.2.1.- Creacin de Tablas NuevasCREATE TABLE tabla (campo1 tipo (tamao) ndice1,campo2 tipo (tamao) ndice2,... ,ndice multicampo , ... )En donde: tabla Es el nombre de la tabla que se va a crear. campo1 Es el nombre del campo o de los campos que se van a crear en la nueva tabla. La campo2 nueva tabla debe contener, al menos, un campo. tipo Es el tipo de datos de campo en la nueva tabla. (Ver Tipos de Datos) tamao Es el tamao del campo slo se aplica para campos de tipo texto. ndice1 Es una clusula CONSTRAINT que define el tipo de ndice a crear. Esta clusula en ndice2 opcional. ndice Es una clusula CONSTRAINT que define el tipo de ndice multicampos a crear. Un multicamp ndice multicampo es aquel que est indexado por el contenido de varios os campos. Esta clusula en opcional.CREATE TABLE Empleados ( Nombre TEXT (25), Apellidos TEXT (50) )(Crea una nueva tabla llamada Empleados con dos campos, uno llamado Nombre de tipo texto y longitud 25 y otro llamadoapellidos con longitud 50).CREATE TABLETutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 10 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 11. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Empleados ( Nombre TEXT (10), Apellidos TEXT, FechaNacimiento DATETIME )CONSTRAINT IndiceGeneral UNIQUE ( Nombre, Apellidos, FechaNacimiento )(Crea una nueva tabla llamada Empleados con un campo Nombre de tipo texto y longitud 10, otro con llamado Apellidosde tipo texto y longitud predeterminada (50) y uno ms llamado FechaNacimiento de tipo Fecha/Hora. Tambin crea unndice nico - no permite valores repetidos - formado por los tres campos.)CREATE TABLE Empleados ( IdEmpleado INTEGER CONSTRAINT IndicePrimario PRIMARY, Nombre TEXT, Apellidos TEXT, FechaNacimiento DATETIME )(Crea una tabla llamada Empleados con un campo Texto de longitud predeterminada (50) llamado Nombre y otro igualllamado Apellidos, crea otro campo llamado FechaNacimiento de tipo Fecha/Hora y el campo IdEmpleado de tipo entero elque establece como clave principal.)2.2.2.- La clusula CONSTRAINTSe utiliza la clusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminar ndices.Existen dos sintaxis para esta clusula dependiendo si desea Crear Eliminar un ndice de un nico campo o si se trata deun campo multindice. Si se utiliza el motor de datos de Microsoft, slo podr utilizar esta clusula con las bases de datospropias de dicho motor. Para los ndices de campos nicos:CONSTRAINT nombre {PRIMARY KEY | UNIQUE | REFERENCES tabla externa[(campo externo1, campo externo2)]}Para los ndices de campos mltiples:CONSTRAINT nombre {PRIMARY KEY (primario1[, primario2 [,...]]) |UNIQUE (nico1[, nico2 [, ...]]) |FOREIGN KEY (ref1[, ref2 [,...]]) REFERENCES tabla externa[(campo externo1 ,campo externo2 [,...])]}En donde: nombre Es el nombre del ndice que se va a crear. primarioN Es el nombre del campo o de los campos que forman el ndice primario. nicoN Es el nombre del campo o de los campos que forman el ndice de clave nica. Es el nombre del campo o de los campos que forman el ndice externo (hacen refN referencia a campos de otra tabla). tabla Es el nombre de la tabla que contiene el campo o los campos referenciados en externa refNTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 11 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 12. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com campos Es el nombre del campo o de los campos de la tabla externa especificados por externos ref1, ref2,... , refNSi se desea crear un ndice para un campo cuando se esta utilizando las instrucciones ALTER TABLE o CREATE TABLEla clusula CONTRAINT debe aparecer inmediatamente despus de la especificacin del campo indexado.Si se desea crear un ndice con mltiples campos cuando se est utilizando las instrucciones ALTER TABLE o CREATETABLE la clusula CONSTRAINT debe aparecer fuera de la clusula de creacin de tabla. Indice Descripcin Genera un ndice de clave nica. Lo que implica que los registros de la tabla no UNIQUE pueden contener el mismo valor en los campos indexados. Genera un ndice primario el campo o los campos especificados. Todos los campos de PRIMARY la clave principal deben ser nicos y no nulos, cada tabla slo puede contener una KEY nica clave principal. Genera un ndice externo (toma como valor del ndice campos contenidos en otras tablas). Si la clave principal de la tabla externa consta de ms de un campo, se debe utilizar una definicin de ndice de mltiples campos, listando todos los campos de referencia, el nombre de la tabla externa, y los nombres de los campos referenciados FOREIGN en la tabla externa en el mismo orden que los campos de referencia listados. Si los KEY campos referenciados son la clave principal de la tabla externa, no tiene que especificar los campos referenciados, predeterminado por valor, el motor Jet se comporta como si la clave principal de la tabla externa estuviera formada por los campos referenciados.2.2.3.- Creacin de ndicesSi se utiliza el motor de datos Jet de Microsoft slo se pueden crear ndices en bases de datos del mismo motor. La sintaxispara crear un ndice en ua tabla ya definida en la siguiente:CREATE [ UNIQUE ] INDEX ndiceON Tabla (campo [ASC|DESC][, campo [ASC|DESC], ...])[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]En donde: ndice Es el nombre del ndice a crear. tabla Es el nombre de una tabla existente en la que se crear el ndice. campo Es el nombre del campo o lista de campos que constituyen el ndice. ASC|DESC Indica el orden de los valores de los campos ASC indica un orden ascendente (valor predeterminado) y DESC un orden descendente.Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 12 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 13. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com UNIQUE Indica que el ndice no puede contener valores duplicados. DISALLOW Prohibe valores nulos en el ndice NULL IGNORE Excluye del ndice los valores nulos incluidos en los campos que lo componen. NULL Asigna al ndice la categora de clave principal, en cada tabla slo puede existir PRIMARY un nico ndice que sea "Clave Principal". Si un ndice es clave principal implica que no puede contener valores nulos ni duplicados.En el caso de ACCESS, se puede utilizar CREATE INDEX para crear un pseudo ndice sobre una tabla adjunta en unafuente de datos ODBC tal como SQL Server que no tenga todava un ndice. No necesita permiso o tener acceso a unservidor remoto para crear un pseudo ndice, adems la base de datos remota no es consciente y no es afectada por elpseudo ndice. Se utiliza la misma sintaxis para las tablas adjuntas que para las originales. Esto es especialmente til paracrear un ndice en una tabla que sera de slo lectura debido a la falta de un ndice.CREATE INDEX MiIndiceON Empleados (Prefijo, Telefono)(Crea un ndice llamado MiIndice en la tabla empleados con los campos Prefijo y Telfono.)CREATE UNIQUE INDEX MiIndiceON Empleados (IdEmpleado) WITH DISALLOW NULL(Crea un ndice en la tabla Empleados utilizando el campo IdEmpleado, obligando que el campo IdEmpleado no contengavalores nulos ni repetidos.)2.2.4.- Modificar el Diseo de una TablaModifica el diseo de una tabla ya existente, se pueden modificar los campos o los ndices existentes. Su sintaxis es:ALTER TABLE tabla {ADD {COLUMN tipo de campo[(tamao)][CONSTRAINT ndice]CONSTRAINT ndice multicampo} |DROP {COLUMN campo I CONSTRAINT nombre del ndice}}En donde: tabla Es el nombre de la tabla que se desea modificar. campo Es el nombre del campo que se va a aadir o eliminar. tipo Es el tipo de campo que se va a aadir.Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 13 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 14. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com tamao Es el tamao del campo que se va a aadir (slo para campos de texto). Es el nombre del ndice del campo (cuando se crean campos) o el nombre del ndice ndice de la tabla que se desea eliminar. ndice Es el nombre del ndice del campo multicampo (cuando se crean campos) o el multicampo nombre del ndice de la tabla que se desea eliminar. Operacin Descripcin ADD Se utiliza para aadir un nuevo campo a la tabla, indicando el nombre, el tipo de COLUMN campo y opcionalmente el tamao (para campos de tipo texto). ADD Se utiliza para agregar un ndice de multicampos o de un nico campo. DROP Se utiliza para borrar un campo. Se especifica nicamente el nombre del campo. COLUMN Se utiliza para eliminar un ndice. Se especifica nicamente el nombre del ndice DROP a continuacin de la palabra reservada CONSTRAINT.ALTER TABLEEmpleadosADD COLUMNSalario CURRENCY(Agrega un campo Salario de tipo Moneda a la tabla Empleados.)ALTER TABLE EmpleadosDROP COLUMN Salario(Elimina el campo Salario de la tabla Empleados.)ALTER TABLE PedidosADD CONSTRAINT RelacionPedidosFOREIGN KEY (IdEmpleado)REFERENCES Empleados (IdEmpleado)(Agrega un ndice externo a la tabla Pedidos. El ndice externo se basa en el campo IdEmpleado y serefiere al campo IdEmpleado de la tabla Empleados. En este ejemplo no es necesario indicar el campojunto al nombre de la tabla en la clusula REFERENCES, pues ID_Empleado es la clave principal de latabla Empleados.)ALTER TABLE PedidosDROP CONSTRAINT RelacionPedidos(Elimina el ndice de la tabla Pedidos.)Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 14 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 15. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comArtculo por Claudio2.3.- Aadir un nuevo registroSintaxis y ejemplos para introducir registros en una tablaLos registros pueden ser introducidos a partir de sentencias que emplean la instruccin Insert.La sintaxis utilizada es la siguiente:Insert Into nombre_tabla (nombre_campo1, nombre_campo2,...) Values (valor_campo1, valor_campo2...)Un ejemplo sencillo a partir de nuestra tabla modelo es la introduccin de un nuevo cliente lo cual se hara con unainstruccin de este tipo:Insert Into clientes (nombre, apellidos, direccion, poblacion, codigopostal, email, pedidos) Values(Perico, Palotes, Percebe n13, Lepe, 123456, [email protected], 33)Como puede verse, los campos no numricos o booleanos van delimitados por apostrofes: . Tambin resulta interesante verque el cdigo postal lo hemos guardado como un campo no numrico. Esto es debido a que en determinados paises(Inglaterra,como no) los codigos postales contienen tambin letras. Nota: Si deseamos practicar con una base de datos que est vaca primero debemos crear las tablas que vamos a llenar. Las tablas tambin se crean con sentencias SQL y aprendemos a hacerlo en el ltimo captulo. Aunque, de todos modos, puede que sea ms cmodo utilizar un programa con interfaz grfica, como Access, que nos puede servir para crear las tablas en bases de datos del propio Access o por ODBC a otras bases de datos como SQL Server o MySQL, por poner dos ejemplos. Otra posibilidad en una base de datos como MySQL, sera crear las tablas utilizando un software como PhpMyAdmin. Por supuesto, no es imprescindible rellenar todos los campos del registro. Eso s, puede ser que determinados campos sean necesarios. Estos campos necesarios pueden ser definidos cuando construimos nuestra tabla mediante la base de datos. Nota: Si no insertamos uno de los campos en la base de datos se inicializar con el valor por defecto que hayamos definido a la hora de crear la tabla. Si no hay valor por defecto, probablemente se inicialice como NULL (vaco), en caso de que este campo permita valores nulos. Si ese campo no permite valores nulos (eso se define tambin al crear la tabla) lo ms seguro es que la ejecucin de la sentenca SQL nos de un error.Resulta muy interesante, ya veremos ms adelante el por qu, el introducir durante la creacin de nuestra tabla un campoautoincrementable que nos permita asignar un nico nmero a cada uno de los registros. De este modo, nuestra tablaclientes presentara para cada registro un nmero exclusivo del cliente el cual nos ser muy util cuando consultemos variastablas simultneamente.Artculo por Rubn Alvarez2.4.- Borrar un registroSintaxis y ejemplos para borrar registros en una tablaPara borrar un registro nos servimos de la instruccin Delete. En este caso debemos especificar cual o cuales son losregistros que queremos borrar. Es por ello necesario establecer una seleccin que se llevara a cabo mediante la clusulaWhere.Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 15 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 16. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comLa forma de seleccionar se ver detalladamente en captulos posteriores. Por ahora nos contentaremos de mostrar cul es eltipo de sintaxis utilizado para efectuar estas supresiones:Delete From nombre_tabla Where condiciones_de_seleccin Nota: Si deseamos practicar con una base de datos que est vaca primero debemos crear las tablas que vamos a llenar. Las tablas tambin se crean con sentencias SQL y aprendemos a hacerlo en el ltimo captulo.Si queremos por ejemplo borrar todos los registros de los clientes que se llamen Perico lo haramos del siguiente modo:Delete From clientes Where nombre=PericoHay que tener cuidado con esta instruccin ya que si no especificamos una condicin con Where, lo que estamos haciendoes borrar toda la tabla:Delete From clientesArtculo por Rubn Alvarez2.5.- Actualizar un registroSintaxis y ejemplos para editar registros en una tablaUpdate es la instruccin que nos sirve para modificar nuestros registros. Como para el caso de Delete, necesitamosespecificar por medio de Where cules son los registros en los que queremos hacer efectivas nuestras modificaciones.Adems, obviamente, tendremos que especificar cules son los nuevos valores de los campos que deseamos actualizar. Lasintaxis es de este tipo:Update nombre_tabla Set nombre_campo1 = valor_campo1, nombre_campo2 = valor_campo2,... Wherecondiciones_de_seleccinUn ejemplo aplicado:Update clientes Set nombre=Jos Where nombre=PepeMediante esta sentencia cambiamos el nombre Pepe por el de Jos en todos los registros cuyo nombre sea Pepe.Aqu tambin hay que ser cuidadoso de no olvidarse de usar Where, de lo contrario, modificaramos todos los registros denuestra tabla.Artculo por Rubn AlvarezTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 16 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 17. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Parte 3: Bsqueda y seleccin de datos en SQL Estudiamos a fondo todo lo relacionado con la sentencia select dentro del lenguaja SQL.3.1.- Seleccin de tablas ICmo realizar selecciones eficientemente. Ejemplos prcticos.La seleccin total o parcial de una tabla se lleva a cabo mediante la instruccin Select. En dicha seleccin hay que especificar:-Los campos que queremos seleccionar-La tabla en la que hacemos la seleccinEn nuestra tabla modelo de clientes podramos hacer por ejemplo una seleccin del nombre y direccin de los clientes conuna instruccin de este tipo:Select nombre, direccin From clientesSi quisisemos seleccionar todos los campos, es decir, toda la tabla, podramos utilizar el comodn * del siguiente modo:Select * From clientesResulta tambin muy til el filtrar los registros mediante condiciones que vienen expresadas despus de la clusula Where.Si quisisemos mostrar los clientes de una determinada ciudad usaramos una expresin como esta:Select * From clientes Where poblacion Like MadridAdems, podramos ordenar los resultados en funcin de uno o varios de sus campos. Para este ultimo ejemplo lospodramos ordenar por nombre as:Select * From clientes Where poblacion Like Madrid Order By nombreTeniendo en cuenta que puede haber ms de un cliente con el mismo nombre, podramos dar un segundo criterio quepodra ser el apellido:Select * From clientes Where poblacion Like Madrid Order By nombre, apellidoSi invirtisemos el orden nombre,apellido por apellido, nombre , el resultado ser&iacutea distinto. Tendramos losclientes ordenados por apellido y aquellos que tuviesen apellidos idnticos se subclasificaran por el nombre.Es posible tambin clasificar por orden inverso. Si por ejemplo quisisemos ver nuestros clientes por orden de pedidosrealizados teniendo a los mayores en primer lugar escribiramos algo as:Select * From clientes Order By pedidos DescUna opcin interesante es la de efectuar selecciones sin coincidencia. Si por ejemplo buscsemos el saber en qu ciudadesse encuentran nuestros clientes sin necesidad de que para ello aparezca varias veces la misma ciudad usaramos una sentenciade esta clase:Select Distinct poblacion From clientes Order By poblacionTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 17 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 18. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comAs evitaramos ver repetido Madrid tantas veces como clientes tengamos en esa poblacin.Artculo por Rubn Alvarez3.2.- Seleccin de tablas IILista de operadores y ejemplos prcticos para realizar selecciones.Hemos querido compilar a modo de tabla ciertos operadores que pueden resultar tiles en determinados casos. Estosoperadores sern utilizados despus de la clusula Where y pueden ser combinados hbilmente mediante parntesispara optimizar nuestra seleccin a muy altos niveles. Operadores matemticos: > Mayor que < Menor que >= Mayor o igual que Verdad AND Falso Falso Verdad AND Verdad Verdad Falso AND Verdad Falso Falso AND Falso Falso Verdad OR Falso Verdad Verdad OR Verdad Verdad Falso OR Verdad Verdad Falso OR Falso Falso Verdad XOR Verdad Falso Verdad XOR Falso Verdad Falso XOR Verdad Verdad Falso XOR Falso Falso Verdad Eqv Verdad VerdadTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 28 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 29. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Verdad Eqv Falso Falso Falso Eqv Verdad Falso Falso Eqv Falso Verdad Verdad Imp Verdad Verdad Verdad Imp Falso Falso Verdad Imp Null Null Falso Imp Verdad Verdad Falso Imp Falso Verdad Falso Imp Null Verdad Null Imp Verdad Verdad Null Imp Falso Null Null Imp Null NullSi a cualquiera de las anteriores condiciones le anteponemos el operador NOT el resultado de la operacin ser el contrarioal devuelto sin el operador NOT.El ltimo operador denominado Is se emplea para comparar dos variables de tipo objeto Is . esteoperador devuelve verdad si los dos objetos son iguales.SELECT *FROM EmpleadosWHERE Edad > 25 AND Edad < 50SELECT *FROM EmpleadosWHERE (Edad > 25 AND Edad < 50) OR Sueldo = 100SELECT *FROM Empleados WHERE NOT Estado = SolteroSELECT *FROM EmpleadosTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 29 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 30. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comWHERE (Sueldo >100 AND Sueldo < 500) OR (Provincia = Madrid AND Estado = Casado)3.6.2.- Intervalos de ValoresPara indicar que deseamos recuperar los registros segn el intervalo de valores de un campo emplearemos el operadorBetween cuya sintaxis es: campo [Not] Between valor1 And valor2 (la condicin Not es opcional)En este caso la consulta devolvera los registros que contengan en "campo" un valor incluido en el intervalo valor1, valor2(ambos inclusive). Si anteponemos la condicin Not devolver aquellos valores no incluidos en el intervalo.SELECT *FROM PedidosWHERE CodPostal Between 28000 And 28999(Devuelve los pedidos realizados en la provincia de Madrid)3.6.3.- El Operador LikeSe utiliza para comparar una expresin de cadena con un modelo en una expresin SQL. Su sintaxis es: expresin Like modeloEn donde expresin es una cadena modelo o campo contra el que se compara expresin. Se puede utilizar el operador Likepara encontrar valores en los campos que coincidan con el modelo especificado. Por modelo puede especificar un valorcompleto (Ana Mara), o se puede utilizar una cadena de caracteres comodn como los reconocidos por el sistema operativopara encontrar un rango de valores (Like An*).El operador Like se puede utilizar en una expresin para comparar un valor de un campo con una expresin de cadena. Porejemplo, si introduce Like C* en una consulta SQL, la consulta devuelve todos los valores de campo que comiencen por laletra C. En una consulta con parmetros, puede hacer que el usuario escriba el modelo que se va a utilizar.El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de cualquier letra entre A y F y de tres dgitos: Like P[A-F]###Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A a la D seguidas de cualquier cadena. Like [A-D]*En la tabla siguiente se muestra cmo utilizar el operador Like para comprobar expresiones con diferentes modelos. ACCESS Tipo de Modelo Planteado Coincide No coincide coincidencia Varios caracteres a*a aa, aBa, aBBBa aBC Carcter especial a[*]a a*a aaa Varios caracteres ab* abcdefg, abc cab, aab Un solo carcter a?a aaa, a3a, aBa aBBBa Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 30 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 31. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Un solo dgito a#a a0a, a1a, a2a aaa, a10a Rango de [a-z] f, p, j 2, & caracteres Fuera de un rango [!a-z] 9, &, % b, a Distinto de un [!0-9] A, a, &, ~ 0, 1, 9 dgito Combinada a[!b-m]# An9, az0, a99 abc, aj0 SQL-SERVER Ejemplo Descripcin LIKE A% Todo lo que comience por A LIKE _NG Todo lo que comience por cualquier carcter y luego siga NG LIKE [AF]% Todo lo que comience por A F Todo lo que comience por cualquier letra comprendida entre la A y la LIKE [A-F]% F LIKE [A^B]% Todo lo que comience por A y la segunda letra no sea una BEn determinado motores de bases de datos, esta clusula, no reconoce el asterisco como carcter comodn y hay quesustituirlo por el carcter tanto por ciento (%).3.6.4.- El Operador InEste operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los en una lista. Su sintaxis es:expresin [Not] In(valor1, valor2, . . .)SELECT *FROM PedidosWHERE Provincia In (Madrid, Barcelona, Sevilla)3.6.5.- La clusula WHERELa clusula WHERE puede usarse para determinar qu registros de las tablas enumeradas en la clusula FROM aparecernen los resultados de la instruccin SELECT. Despus de escribir esta clusula se deben especificar las condiciones expuestasTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 31 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 32. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comen los apartados anteriores. Si no se emplea esta clusula, la consulta devolver todas las filas de la tabla. WHERE esopcional, pero cuando aparece debe ir a continuacin de FROM.SELECT Apellidos, SalarioFROM EmpleadosWHERE Salario = 21000SELECT IdProducto, ExistenciasFROM ProductosWHERE Existencias 100 AND NombreProducto Like BOS*3.7.1.- AVGCalcula la media aritmtica de un conjunto de valores contenidos en un campo especificado de una consulta. Su sintaxis es lasiguienteAvg(expr)En donde expr representa el campo que contiene los datos numricos para los que se desea calcular la media o unaexpresin que realiza un clculo utilizando los datos de dicho campo. La media calculada por Avg es la media aritmtica (lasuma de los valores dividido por el nmero de valores). La funcin Avg no incluye ningn campo Null en el clculo.SELECT Avg(Gastos) AS PromedioFROM PedidosWHERE Gastos > 100Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 33 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 34. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com3.7.2.- CountCalcula el nmero de registros devueltos por una consulta. Su sintaxis es la siguienteCount(expr)En donde expr contiene el nombre del campo que desea contar. Los operandos de expr pueden incluir el nombre de uncampo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de lasfunciones agregadas de SQL). Puede contar cualquier tipo de datos incluso texto.Aunque expr puede realizar un clculo sobre un campo, Count simplemente cuenta el nmero de registros sin tener encuenta qu valores se almacenan en los registros. La funcin Count no cuenta los registros que tienen campos null a menosque expr sea el carcter comodn asterisco (*). Si utiliza un asterisco, Count calcula el nmero total de registros, incluyendoaquellos que contienen campos null. Count(*) es considerablemente ms rpida que Count(Campo). No se debe poner elasterisco entre dobles comillas (*).SELECT Count(*) AS TotalFROM PedidosSi expr identifica a mltiples campos, la funcin Count cuenta un registro slo si al menos uno de los campos no es Null. Sitodos los campos especificados son Null, no se cuenta el registro. Hay que separar los nombres de los campos conampersand (&).SELECT Count(FechaEnvo & Transporte) AS TotalFROM PedidosPodemos hacer que el gestor cuente los datos diferentes de un determinado campoSELECT Count(DISTINCT Localidad) AS TotalFROM Pedidos3.7.3.- Max, MinDevuelven el mnimo o el mximo de un conjunto de valores contenidos en un campo especifico de una consulta. Susintaxis es:Min(expr)Max(expr)En donde expr es el campo sobre el que se desea realizar el clculo. Expr pueden incluir el nombre de un campo de unatabla, una constante o una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de las funcionesagregadas de SQL).SELECTMin(Gastos) AS ElMinFROM PedidosWHERE Pais = EspaaSELECT Max(Gastos) AS ElMaxFROM PedidosWHERE Pais = Espaa3.7.4.- StDev, StDevPDevuelve estimaciones de la desviacin estndar para la poblacin (el total de los registros de la tabla) o una muestra de laTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 34 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 35. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.compoblacin representada (muestra aleatoria). Su sintaxis es:StDev(expr)StDevP(expr)En donde expr representa el nombre del campo que contiene los datos que desean evaluarse o una expresin que realiza unclculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla,una constante o una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadasde SQL).StDevP evala una poblacin, y StDev evala una muestra de la poblacin. Si la consulta contiene menos de dos registros (oningn registro para StDevP), estas funciones devuelven un valor Null (el cual indica que la desviacin estndar no puedecalcularse).SELECT StDev(Gastos) AS DesviacinFROM PedidosWHERE Pas = EspaaSELECT StDevP(Gastos) AS DesviacinFROM PedidosWHERE Pas = Espaa3.7.5.- SumDevuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su sintaxis es:Sum(expr)En donde expr representa el nombre del campo que contiene los datos que desean sumarse o una expresin que realiza unclculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla,una constante o una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadasde SQL).SELECT Sum(PrecioUnidad * Cantidad) AS TotalFROM DetallePedido3.7.6.- Var, VarPDevuelve una estimacin de la varianza de una poblacin (sobre el total de los registros) o una muestra de la poblacin(muestra aleatoria de registros) sobre los valores de un campo. Su sintaxis es:Var(expr)VarP(expr)VarP evala una poblacin, y Var evala una muestra de la poblacin. Expr el nombre del campo que contiene los datos quedesean evaluarse o una expresin que realiza un clculo utilizando los datos de dichos campos. Los operandos de exprpueden incluir el nombre de un campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida porel usuario pero no otras de las funciones agregadas de SQL)Si la consulta contiene menos de dos registros, Var y VarP devuelven Null (esto indica que la varianza no puede calcularse).Puede utilizar Var y VarP en una expresin de consulta o en una Instruccin SQL.SELECT Var(Gastos) AS VarianzaFROM PedidosWHERETutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 35 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 36. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Pas = EspaaSELECT VarP(Gastos) AS VarianzaFROM PedidosWHERE Pas = Espaa3.7.7.- COMPUTE de SQL-SERVEREsta clusula aade una fila en el conjunto de datos que se est recuperando, se utiliza para realizar clculos en camposnumricos. COMPUTE acta siempre sobre un campo o expresin del conjunto de resultados y esta expresin debe figurarexactamente igual en la clusula SELECT y siempre se debe ordenar el resultado por la misma o al memos agrupar elresultado. Esta expresin no puede utilizar ningn ALIAS.SELECT IdCliente, Count(IdPedido)FROM PedidosGROUP BY IdPedidoHAVING Count(IdPedido) > 20COMPUTE Sum(Count(IdPedido))SELECT IdPedido, (PrecioUnidad * Cantidad - Descuento)FROM [Detalles de Pedidos]ORDER BY IdPedidoCOMPUTE Sum((PrecioUnidad * Cantidad - Descuento)) // Calcula el Total BY IdPedido // Calcula el SubtotalArtculo por Claudio3.8.- Subconsultas en SQLDefenimos lo que significa subconsulta y mostramos las diferentes subconsultas que se pueden hacer.Una subconsulta es una instruccin SELECT anidada dentro de una instruccin SELECT, SELECT...INTO,INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta. Puede utilizar tres formas de sintaxis para crear unasubconsulta: comparacin [ANY | ALL | SOME] (instruccin sql) expresin [NOT] IN (instruccin sql) [NOT]EXISTS (instruccin sql)En donde: Es una expresin y un operador de comparacin que compara la expresin con comparacin el resultado de la subconsulta. expresin Es una expresin por la que se busca el conjunto resultante de la subconsulta.Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 36 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 37. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com instruccin Es una instruccin SELECT, que sigue el mismo formato y reglas que cualquier SQL otra instruccin SELECT. Debe ir entre parntesis.Se puede utilizar una subconsulta en lugar de una expresin en la lista de campos de una instruccin SELECT o en unaclusula WHERE o HAVING. En una subconsulta, se utiliza una instruccin SELECT para proporcionar un conjunto deuno o ms valores especificados para evaluar en la expresin de la clusula WHERE o HAVING.Se puede utilizar el predicado ANY o SOME, los cuales son sinnimos, para recuperar registros de la consulta principal, quesatisfagan la comparacin con cualquier otro registro recuperado en la subconsulta. El ejemplo siguiente devuelve todos losproductos cuyo precio unitario es mayor que el de cualquier producto vendido con un descuento igual o mayor al 25 porciento:SELECT *FROM ProductosWHERE PrecioUnidad ANY ( SELECT PrecioUnidad FROM DetallePedido WHERE Descuento = 0 .25)El predicado ALL se utiliza para recuperar nicamente aquellos registros de la consulta principal que satisfacen lacomparacin con todos los registros recuperados en la subconsulta. Si se cambia ANY por ALL en el ejemplo anterior, laconsulta devolver nicamente aquellos productos cuyo precio unitario sea mayor que el de todos los productos vendidoscon un descuento igual o mayor al 25 por ciento. Esto es mucho ms restrictivo.El predicado IN se emplea para recuperar nicamente aquellos registros de la consulta principal para los que algunosregistros de la subconsulta contienen un valor igual. El ejemplo siguiente devuelve todos los productos vendidos con undescuento igual o mayor al 25 por ciento:SELECT *FROM ProductosWHERE IDProducto IN ( SELECT IDProducto FROM DetallePedido WHERE Descuento = 0.25)Inversamente se puede utilizar NOT IN para recuperar nicamente aquellos registros de la consulta principal para los queno hay ningn registro de la subconsulta que contenga un valor igual.El predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en comparaciones de verdad/falso para determinarsi la subconsulta devuelve algn registro. Supongamos que deseamos recuperar todos aquellos clientes que hayan realizado almenos un pedido:SELECTClientes.Compaa, Clientes.TelfonoFROM ClientesWHERE EXISTS ( SELECT FROMTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 37 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 38. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Pedidos WHERE Pedidos.IdPedido = Clientes.IdCliente)Esta consulta es equivalente a esta otra:SELECT Clientes.Compaa, Clientes.TelfonoFROM ClientesWHERE IdClientes IN ( SELECT Pedidos.IdCliente FROM Pedidos)Se puede utilizar tambin alias del nombre de la tabla en una subconsulta para referirse a tablas listadas en la clusula FROMfuera de la subconsulta. El ejemplo siguiente devuelve los nombres de los empleados cuyo salario es igual o mayor que elsalario medio de todos los empleados con el mismo ttulo. A la tabla Empleados se le ha dado el alias T1:SELECT Apellido, Nombre, Titulo, SalarioFROM Empleados AS T1WHERE Salario = ( SELECT Avg(Salario) FROM Empleados WHERE T1.Titulo = Empleados.Titulo )ORDER BY TituloEn el ejemplo anterior, la palabra reservada AS es opcional.SELECT Apellidos, Nombre, Cargo, SalarioFROM EmpleadosWHERE Cargo LIKE Agente Ven* AND Salario ALL ( SELECT Salario FROM Empleados WHERE Cargo LIKE *Jefe* OR Cargo LIKE *Director*)(Obtiene una lista con el nombre, cargo y salario de todos los agentes de ventas cuyo salario es mayor que el de todos losjefes y directores.)SELECT DISTINCT NombreProducto, Precio_UnidadFROM ProductosWHERE PrecioUnidad =Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 38 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 39. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com( SELECT PrecioUnidad FROM Productos WHERE NombreProducto = Almbar anisado)(Obtiene una lista con el nombre y el precio unitario de todos los productos con el mismo precio que el almbar anisado.)SELECT DISTINCT NombreContacto, NombreCompania, CargoContacto, TelefonoFROM ClientesWHERE IdCliente IN ( SELECT DISTINCT IdCliente FROM Pedidos WHERE FechaPedido 0 AND T1.NumVuelo=Vuelos.NumVuelo)(Recupera nmeros de vuelo y capacidades de aquellos vuelos con destino Madrid y plazas libresTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 39 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 40. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comSupongamos ahora que tenemos una tabla con los identificadores de todos nuestros productos y el stock de cada uno deellos. En otra tabla se encuentran todos los pedidos que tenemos pendientes de servir. Se trata de averiguar que productosno se podemos servir por falta de stock.SELECT PedidosPendientes.NombreFROM PedidosPendientesGROUP BY PedidosPendientes.NombreHAVING SUM(PedidosPendientes.Cantidad < ( SELECT Productos.Stock FROM Productos WHERE Productos.IdProducto = PedidosPendientes.IdProducto ))Supongamos que en nuestra tabla de empleados deseamos buscar todas las mujeres cuya edad sea mayor a la de cualquierhombre:SELECT Empleados.NombreFROM EmpleadosWHERE Sexo = M AND Edad > ANY (SELECT Empleados.Edad FROM Empleados WHERE Sexo =H) lo que sera lo mismo:SELECT Empleados.NombreFROM EmpleadosWHERE Sexo = M AND Edad > (SELECT Max( Empleados.Edad )FROM Empleados WHERE Sexo =H)La siguiente tabla muestra algn ejemplo del operador ANY y ALL Valor Operador Valor 2 Resultado 1 3 > ANY (2,5,7) Cierto 3 = ANY (2,5,7) Falso (2,3,5,7 3 = ANY Cierto ) 3 > ALL (2,5,7) Falso 3 < ALL (5,6,7) FalsoEl operacion =ANY es equivalente al operador IN, ambos devuelven el mismo resultado.Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 40 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 41. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comArtculo por Claudio3.9.- Consultas SQL de Unin InternasDetallamos estas consultas del lenguaje SQL tan importantes para el buen desarrollo de una base dedatos.Consultas de Combinacin entre tablas Las vinculaciones entre tablas se realizan mediante la clusula INNER que combinaregistros de dos tablas siempre que haya concordancia de valores en un campo comn. Su sintaxis es:SELECT campos FROM tb1 INNER JOIN tb2 ONtb1.campo1 comp tb2.campo2En donde: tb1, tb2 Son los nombres de las tablas desde las que se combinan los registros. Son los nombres de los campos que se combinan. Si no son numricos, los campo1, campos deben ser del mismo tipo de datos y contener el mismo tipo de datos, campo2 pero no tienen que tener el mismo nombre. comp Es cualquier operador de comparacin relacional: =, .Se puede utilizar una operacin INNER JOIN en cualquier clusula FROM. Esto crea una combinacin por equivalencia,conocida tambin como unin interna. Las combinaciones equivalentes son las ms comunes; stas combinan los registrosde dos tablas siempre que haya concordancia de valores en un campo comn a ambas tablas. Se puede utilizar INNERJOIN con las tablas Departamentos y Empleados para seleccionar todos los empleados de cada departamento. Por elcontrario, para seleccionar todos los departamentos (incluso si alguno de ellos no tiene ningn empleado asignado) seemplea LEFT JOIN o todos los empleados (incluso si alguno no est asignado a ningn departamento), en este casoRIGHT JOIN.Si se intenta combinar campos que contengan datos Memo u Objeto OLE, se produce un error. Se pueden combinar doscampos numricos cualesquiera, incluso si son de diferente tipo de datos. Por ejemplo, puede combinar un campo Numricopara el que la propiedad Size de su objeto Field est establecida como Entero, y un campo Contador.El ejemplo siguiente muestra cmo podra combinar las tablas Categoras y Productos basndose en el campo IDCategoria:SELECT NombreCategoria, NombreProductoFROM CategoriasINNER JOIN ProductosON Categorias.IDCategoria = Productos.IDCategoriaEn el ejemplo anterior, IDCategoria es el campo combinado, pero no est incluido en la salida de la consulta ya que no estincluido en la instruccin SELECT. Para incluir el campo combinado, incluir el nombre del campo en la instruccinSELECT, en este caso, Categorias.IDCategoria.Tambin se pueden enlazar varias clusulas ON en una instruccin JOIN, utilizando la sintaxis siguiente:SELECT campos FROM tabla1 INNER JOIN tabla2ON (tb1.campo1 comp tb2.campo1 AND ON tb1.campo2 comp tb2.campo2)OR ON (tb1.campo3 comp tb2.campo3)Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 41 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 42. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comTambin puede anidar instrucciones JOIN utilizando la siguiente sintaxis:SELECT campos FROM tb1 INNER JOIN (tb2 INNER JOIN [( ]tb3[INNER JOIN [( ]tablax [INNER JOIN ...)]ON tb3.campo3 comp tbx.campox)]ON tb2.campo2 comp tb3.campo3)ON tb1.campo1 comp tb2.campo2Un LEFT JOIN o un RIGHT JOIN puede anidarse dentro de un INNER JOIN, pero un INNER JOIN no puede anidarsedentro de un LEFT JOIN o un RIGHT JOIN.Ejemplo:SELECT DISTINCT Sum(PrecioUnitario * Cantidad) AS Sales,(Nombre + + Apellido) AS NameFROM EmpleadosINNER JOIN( PedidosINNER JOIN DetallesPedidos ON Pedidos.IdPedido = DetallesPedidos.IdPedido) ON Empleados.IdEmpleado = Pedidos.IdEmpleadoGROUP BY Nombre + + Apellido(Crea dos combinaciones equivalentes: una entre las tablas Detalles de pedidos y Pedidos, y la otra entre las tablas Pedidos yEmpleados. Esto es necesario ya que la tabla Empleados no contiene datos de ventas y la tabla Detalles de pedidos nocontiene datos de los empleados. La consulta produce una lista de empleados y sus ventas totales.)Si empleamos la clusula INNER en la consulta se seleccionarn slo aquellos registros de la tabla de la que hayamos escritoa la izquierda de INNER JOIN que contengan al menos un registro de la tabla que hayamos escrito a la derecha. Parasolucionar esto tenemos dos clusulas que sustituyen a la palabra clave INNER, estas clusulas son LEFT y RIGHT. LEFTtoma todos los registros de la tabla de la izquierda aunque no tengan ningn registro en la tabla de la izquierda. RIGHTrealiza la misma operacin pero al contrario, toma todos los registros de la tabla de la derecha aunque no tenga ningnregistro en la tabla de la izquierda.La sintaxis expuesta anteriormente pertenece a ACCESS, en donde todas las sentencias con la sintaxis funcionancorrectamente. Los manuales de SQL-SERVER dicen que esta sintaxis es incorrecta y que hay que aadir la palabrareservada OUTER: LEFT OUTER JOIN y RIGHT OUTER JOIN. En la prctica funciona correctamente de una u otraforma.No obstante, los INNER JOIN ORACLE no es capaz de interpretarlos, pero existe una sintaxis en formato ANSI para losINNER JOIN que funcionan en todos los sistemas. Tomando como referencia la siguiente sentencia:SELECT Facturas.*, Albaranes.*FROM FacturasINNER JOIN AlbaranesON Facturas.IdAlbaran = Albaranes.IdAlbaranWHERE Facturas.IdCliente = 325La transformacin de esta sentencia a formato ANSI sera la siguiente:SELECTFacturas.*,Albaranes.*FROMFacturas, AlbaranesWHEREFacturas.IdAlbaran = Albaranes.IdAlbaranTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 42 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 43. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comANDFacturas.IdCliente = 325Como se puede observar los cambios realizados han sido los siguientes: 1. Todas las tablas que intervienen en la consulta se especifican en la clusula FROM. 2. Las condiciones que vinculan a las tablas se especifican en la clusula WHERE y se vinculan mediante el operador lgico AND.Referente a los OUTER JOIN, no funcionan en ORACLE y adems conozco una sintaxis que funcione en los tres sistemas.La sintaxis en ORACLE es igual a la sentencia anterior pero aadiendo los caracteres (+) detrs del nombre de la tabla en laque deseamos aceptar valores nulos, esto equivale a un LEFT JOIN:SELECT Facturas.*, Albaranes.*FROM Facturas, AlbaranesWHERE Facturas.IdAlbaran = Albaranes.IdAlbaran (+) AND Facturas.IdCliente = 325Y esto a un RIGHT JOIN:SELECT Facturas.*, Albaranes.*FROM Facturas, AlbaranesWHERE Facturas.IdAlbaran (+) = Albaranes.IdAlbaran AND Facturas.IdCliente = 325En SQL-SERVER se puede utilizar una sintaxis parecida, en este caso no se utiliza los caracteres (+) sino los caracteres =*para el LEFT JOIN y *= para el RIGHT JOIN.3.9.1.- Consultas de AutocombinacinLa autocombinacin se utiliza para unir una tabla consigo misma, comparando valores de dos columnas con el mismo tipode datos. La sintaxis en la siguiente:SELECT alias1.columna, alias2.columna, ...FROM tabla1 as alias1, tabla2 as alias2WHERE alias1.columna = alias2.columnaAND otras condicionesPor ejemplo, para visualizar el nmero, nombre y puesto de cada empleado, junto con el nmero, nombre y puesto delsupervisor de cada uno de ellos se utilizara la siguiente sentencia:SELECT t.num_emp, t.nombre, t.puesto, t.num_sup,s.nombre, s.puestoFROM empleados AS t, empleados AS sWHERE t.num_sup = s.num_emp3.9.2.- Consultas de Combinaciones no ComunesLa mayora de las combinaciones estn basadas en la igualdad de valores de las columnas que son el criterio de lacombinacin. Las no comunes se basan en otros operadores de combinacin, tales como NOT, BETWEEN, , etc.Tutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 43 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 44. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.comPor ejemplo, para listar el grado salarial, nombre, salario y puesto de cada empleado ordenando el resultado por grado ysalario habra que ejecutar la siguiente sentencia:SELECT grados.grado,empleados.nombre, empleados.salario, empleados.puestoFROM empleados, gradosWHERE empleados.salario BETWEEN grados.salarioinferior And grados.salariosuperiorORDER BY grados.grado, empleados.salarioPara listar el salario medio dentro de cada grado salarial habra que lanzar esta otra sentencia:SELECT grados.grado, AVG(empleados.salario)FROM empleados, gradosWHERE empleados.salario BETWEEN grados.salarioinferior And grados.salariosuperiorGROUP BY grados.grado3.9.3.- CROSS JOIN (SQL-SERVER)Se utiliza en SQL-SERVER para realizar consultas de unin. Supongamos que tenemos una tabla con todos los autores yotra con todos los libros. Si deseramos obtener un listado combinar ambas tablas de tal forma que cada autor aparecierajunto a cada ttulo, utilizaramos la siguiente sintaxis:SELECT Autores.Nombre, Libros.TituloFROM Autores CROSS JOIN Libros3.9.4.- SELF JOINSELF JOIN es una tcnica empleada para conseguir el producto cartesiano de una tabla consigo misma. Su utilizacin no esmuy frecuente, pero pongamos algn ejemplo de su utilizacin.Supongamos la siguiente tabla (El campo autor es numrico, aunque para ilustrar el ejemplo utilice el nombre): Autores Cdigo (Cdigo del Autor (Nombre del Autor) libro) B0012 1. Francisco Lpez B0012 2. Javier Alonso B0012 3. Marta Rebolledo C0014 1. Francisco Lpez C0014 2. Javier AlonsoTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 44 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 45. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com D0120 2. Javier Alonso D0120 3. Marta RebolledoQueremos obtener, para cada libro, parejas de autores:SELECT A.Codigo, A.Autor, B.AutorFROM Autores A, Autores BWHERE A.Codigo = B.CodigoEl resultado es el siguiente: Cdig Autor Autor o B0012 1. Francisco Lpez 1. Francisco Lpez B0012 1. Francisco Lpez 2. Javier Alonso B0012 1. Francisco Lpez 3. Marta Rebolledo B0012 2. Javier Alonso 2. Javier Alonso B0012 2. Javier Alonso 1. Francisco Lpez B0012 2. Javier Alonso 3. Marta Rebolledo B0012 3. Marta Rebolledo 3. Marta Rebolledo B0012 3. Marta Rebolledo 2. Javier Alonso B0012 3. Marta Rebolledo 1. Francisco Lpez C0014 1. Francisco Lpez 1. Francisco Lpez C0014 1. Francisco Lpez 2. Javier Alonso C0014 2. Javier Alonso 2. Javier Alonso C0014 2. Javier Alonso 1. Francisco LpezTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 45 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 46. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com D0120 2. Javier Alonso 2. Javier Alonso D0120 2. Javier Alonso 3. Marta Rebolledo D0120 3. Marta Rebolledo 3. Marta Rebolledo D0120 3. Marta Rebolledo 2. Javier AlonsoComo podemos observar, las parejas de autores se repiten en cada uno de los libros, podemos omitir estas repeticiones de lasiguiente formaSELECT A.Codigo, A.Autor, B.AutorFROM Autores A, Autores BWHERE A.Codigo = B.Codigo AND A.Autor < B.AutorEl resultado ahora es el siguiente: Cdigo Autor Autor B0012 1. Francisco Lpez 2. Javier Alonso B0012 1. Francisco Lpez 3. Marta Rebolledo C0014 1. Francisco Lpez 2. Javier Alonso D0120 2. Javier Alonso 3. Marta RebolledoAhora tenemos un conjunto de resultados en formato Autor - CoAutor.Si en la tabla de empleados quisiramos extraer todas las posibles parejas que podemos realizar, utilizaramos la siguientesentencia:SELECT Hombres.Nombre, Mujeres.NombreFROM Empleados Hombre, Empleados MujeresWHERE Hombre.Sexo = Hombre AND Mujeres.Sexo = Mujer AND Hombres.Id Mujeres.IdPara concluir supongamos la tabla siguiente: EmpleadosTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 46 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 47. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com I Nombre SuJefe d 1 Marcos 6 2 Lucas 1 3 Ana 2 4 Eva 1 5 Juan 6 6 AntonioQueremos obtener un conjunto de resultados con el nombre del empleado y el nombre de su jefe:SELECT Emple.Nombre, Jefes.NombreFROM Empleados Emple, Empleados JefeWHERE Emple.SuJefe = Jefes.IdArtculo por Claudio3.10.- Consultas SQL de Unin ExternasCmo funcionan y cmo se crean estas consultas en SQL.Se utiliza la operacin UNION para crear una consulta de unin, combinando los resultados de dos o ms consultas o tablasindependientes. Su sintaxis es:[TABLE] consulta1 UNION [ALL] [TABLE]consulta2 [UNION [ALL] [TABLE] consultan [ ... ]]En donde: consulta 1,consulta Son instrucciones SELECT, el nombre de una consulta almacenada o el 2, consulta n nombre de una tabla almacenada precedido por la palabra clave TABLE.Puede combinar los resultados de dos o ms consultas, tablas e instrucciones SELECT, en cualquier orden, en una nicaoperacin UNION. El ejemplo siguiente combina una tabla existente llamada Nuevas Cuentas y una instruccin SELECT:TABLE NuevasCuentasUNION ALLSELECT *FROMTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 47 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 48. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ClientesWHERE CantidadPedidos > 1000Si no se indica lo contrario, no se devuelven registros duplicados cuando se utiliza la operacin UNION, no obstante puedeincluir el predicado ALL para asegurar que se devuelven todos los registros. Esto hace que la consulta se ejecute msrpidamente. Todas las consultas en una operacin UNION deben pedir el mismo nmero de campos, no obstante loscampos no tienen porqu tener el mismo tamao o el mismo tipo de datos.Se puede utilizar una clusula GROUP BY y/o HAVING en cada argumento consulta para agrupar los datos devueltos.Puede utilizar una clusula ORDER BY al final del ltimo argumento consulta para visualizar los datos devueltos en unorden especfico.SELECT NombreCompania, CiudadFROM ProveedoresWHERE Pais = BrasilUNION SELECT NombreCompania, Ciudad FROM Clientes WHERE Pais = Brasil(Recupera los nombres y las ciudades de todos proveedores y clientes de Brasil)SELECT NombreCompania, CiudadFROM ProveedoresWHERE Pais = BrasilUNION SELECT NombreCompania, Ciudad FROM Clientes WHERE Pais = Brasil ORDER BY Ciudad(Recupera los nombres y las ciudades de todos proveedores y clientes radicados en Brasil, ordenados por el nombre de laciudad)SELECT NombreCompania, CiudadFROM ProveedoresWHERE Pais = BrasilUNION SELECT NombreCompania, Ciudad FROM Clientes WHERE Pais = BrasilUNION SELECT Apellidos, Ciudad FROM Empleados WHERE Region = Amrica del Sur(Recupera los nombres y las ciudades de todos los proveedores y clientes de brasil y los apellidos y las ciudades de todos losempleados de Amrica del Sur)TABLE Lista_ClientesUNION TABLE ListaProveedores(Recupera los nombres y cdigos de todos los proveedores y clientes)Artculo por ClaudioTutorial de SQL: http://www.desarrolloweb.com/manuales/9/ 48 Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorizacin.
  • 49. Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com3.11.- Consultas de accinExplicamos detenidamente las sentencias delete, insert into y update, para la realizacin de consultas enlas bases de datos.Las consultas de accin son aquellas que no devuelven ningn registro, son las encargadas de acciones como aadir y borrary modificar registros. Tanto las sentencias de actualizacin como las de borrado desencadern (segn el motor de datos) lasactualizaciones en cascada, borrados en cascada, restricciones y valores por defecto definidos para los diferentes campos otablas afectadas por la consulta.3.11.1.- DELETECrea una consulta de eliminacin que elimina los registros de una o ms de las tablas listadas en la clusula FROM quesatisfagan la clusula WHERE. Esta consulta elimina los registros completos, no es posible eliminar el contenido de algncampo en concreto. Su sintaxis es: DELETE FROM Tabla WHERE criterioUna vez que se han eliminado los registros utilizando una consulta de borrado, no puede deshacer la operacin. Si deseasaber qu registros se eliminarn, primero examine los resultados de una consulta de seleccin que utilice el mismo criterio ydespus ejecute la consulta de borrado. Mantenga copias de seguridad de sus datos en todo momento. Si elimina losregistros equivocados podr recuperarlos desde las copias de seguridad.DELETEFROM EmpleadosWHERE Cargo = Vendedor3.11.2.- INSERT INTOAgrega un registro en una tabla. Se la conoce como una consulta de datos aadidos. Esta consulta puede ser de dos tipo:Insertar un nico registro Insertar en una tabla los registros contenidos en otra tabla.Para insertar un nico Registro:En este caso la sintaxis es la siguiente: INSERT INTO Tabla (campo1, campo2, ..., campoN) VALUES (valor1, valor2, ..., valorN)Esta consulta graba en el campo1 el valor1, en el campo2 y valor2 y as sucesivamente.Para seleccionar registros e insertarlos en una tabla nuevaEn este caso la sintaxis es la siguiente: SELECT campo1, campo2, ..., campoN INTO nuevatabla FROM tablaorigen [WHERE criterios]Se pueden utilizar las consultas de creacin de tabla para archivar registros, hacer copias de seguridad