SQL

7
SQL El lenguaje de consulta estructurado o SQL (por sus siglas en inglés Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas. Una de sus características es el manejo del álgebra y el cálculo relacional que permiten efectuar consultas con el fin de recuperar de forma sencilla información de interés de bases de datos, así como hacer cambios en ellas. 1 Orígenes y evolución Los orígenes del SQL están ligados a los de las bases de datos relacionales. En 1970 E. F. Codd propone el modelo relacional y asociado a este un sublenguaje de acceso a los datos basado en el cálculo de predicados. Basándose en estas ideas, los laboratorios de IBM definieron el lenguaje SEQUEL (Structured English Query Language) que más tarde fue ampliamente implementado por el sistema de gestión de bases de datos (SGBD) experimental System R, desarrollado en 1977 también por IBM. Sin embargo, fue Oracle quien lo introdujo por primera vez en 1979 en un producto comercial. El SEQUEL terminó siendo el predecesor de SQL, que es una versión evolucionada del primero. El SQL pasa a ser el lenguaje por excelencia de los diversos sistemas de gestión de bases de datos relacionales surgidos en los años siguientes y fue por fin estandarizado en 1986 por el ANSI, dando lugar a la primera versión estándar de este lenguaje, el “SQL-86” o “SQL1”. Al año siguiente este estándar es también adoptado por la ISO. Sin embargo, este primer estándar no cubría todas las ne- cesidades de los desarrolladores e incluía funcionalidades de definición de almacenamiento que se consideró supri- mirlas. Así que, en 1992, se lanzó un nuevo estándar am- pliado y revisado del SQL llamado “SQL-92” o “SQL2”. En la actualidad el SQL es el estándar de facto de la in- mensa mayoría de los SGBD comerciales. Y, aunque la diversidad de añadidos particulares que incluyen las dis- tintas implementaciones comerciales del lenguaje es am- plia, el soporte al estándar SQL-92 es general y muy am- plio. El ANSI SQL sufrió varias revisiones y agregados a lo largo del tiempo: 2 Características generales del SQL El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacio- nales y permite así gran variedad de operaciones. Es un lenguaje declarativo de "alto nivel" o “de no proce- dimiento” que, gracias a su fuerte base teórica y su orien- tación al manejo de conjuntos de registros —y no a re- gistros individuales— permite una alta productividad en codificación y la orientación a objetos. De esta forma, una sola sentencia puede equivaler a uno o más programas que se utilizarían en un lenguaje de bajo nivel orientado a re- gistros. SQL también tiene las siguientes características: Lenguaje de definición de datos: El LDD de SQL proporciona comandos para la definición de esque- mas de relación, borrado de relaciones y modifica- ciones de los esquemas de relación. Lenguaje interactivo de manipulación de datos: El LMD de SQL incluye lenguajes de consultas ba- sado tanto en álgebra relacional como en cálculo re- lacional de tuplas. Integridad: El LDD de SQL incluye comandos para especificar las restricciones de integridad que deben cumplir los datos almacenados en la base de datos. Definición de vistas: El LDD incluye comandos pa- ra definir las vistas. Control de transacciones: SQL tiene comandos para especificar el comienzo y el final de una transacción. SQL incorporado y dinámico: Esto quiere decir que se pueden incorporar instrucciones de SQL en lenguajes de programación como: C++, C, Java, PHP, Cobol, Pascal y Fortran. Autorización: El LDD incluye comandos para es- pecificar los derechos de acceso a las relaciones y a las vistas. 2.1 Tipos de Datos Algunos de los tipos de datos básicos de SQL son: Date: una fecha de calendario que contiene el año (de cuatro cifras), el mes y el día. 1

description

El lenguaje de consulta estructurado o SQL (por sus siglas en inglés Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas.

Transcript of SQL

Page 1: SQL

SQL

El lenguaje de consulta estructurado o SQL (por sussiglas en inglés Structured Query Language) es un lenguajedeclarativo de acceso a bases de datos relacionales quepermite especificar diversos tipos de operaciones en ellas.Una de sus características es el manejo del álgebra y elcálculo relacional que permiten efectuar consultas con elfin de recuperar de forma sencilla información de interésde bases de datos, así como hacer cambios en ellas.

1 Orígenes y evolución

Los orígenes del SQL están ligados a los de las bases dedatos relacionales. En 1970 E. F. Codd propone elmodelorelacional y asociado a este un sublenguaje de acceso a losdatos basado en el cálculo de predicados. Basándose enestas ideas, los laboratorios de IBM definieron el lenguajeSEQUEL (Structured English Query Language) que mástarde fue ampliamente implementado por el sistema degestión de bases de datos (SGBD) experimental SystemR, desarrollado en 1977 también por IBM. Sin embargo,fue Oracle quien lo introdujo por primera vez en 1979 enun producto comercial.El SEQUEL terminó siendo el predecesor de SQL, quees una versión evolucionada del primero. El SQL pasaa ser el lenguaje por excelencia de los diversos sistemasde gestión de bases de datos relacionales surgidos en losaños siguientes y fue por fin estandarizado en 1986 por elANSI, dando lugar a la primera versión estándar de estelenguaje, el “SQL-86” o “SQL1”. Al año siguiente esteestándar es también adoptado por la ISO.Sin embargo, este primer estándar no cubría todas las ne-cesidades de los desarrolladores e incluía funcionalidadesde definición de almacenamiento que se consideró supri-mirlas. Así que, en 1992, se lanzó un nuevo estándar am-pliado y revisado del SQL llamado “SQL-92” o “SQL2”.En la actualidad el SQL es el estándar de facto de la in-mensa mayoría de los SGBD comerciales. Y, aunque ladiversidad de añadidos particulares que incluyen las dis-tintas implementaciones comerciales del lenguaje es am-plia, el soporte al estándar SQL-92 es general y muy am-plio.El ANSI SQL sufrió varias revisiones y agregados a lolargo del tiempo:

2 Características generales delSQL

El SQL es un lenguaje de acceso a bases de datos queexplota la flexibilidad y potencia de los sistemas relacio-nales y permite así gran variedad de operaciones.Es un lenguaje declarativo de "alto nivel" o “de no proce-dimiento” que, gracias a su fuerte base teórica y su orien-tación al manejo de conjuntos de registros —y no a re-gistros individuales— permite una alta productividad encodificación y la orientación a objetos. De esta forma, unasola sentencia puede equivaler a uno omás programas quese utilizarían en un lenguaje de bajo nivel orientado a re-gistros. SQL también tiene las siguientes características:

• Lenguaje de definición de datos: El LDD de SQLproporciona comandos para la definición de esque-mas de relación, borrado de relaciones y modifica-ciones de los esquemas de relación.

• Lenguaje interactivo de manipulación de datos:El LMD de SQL incluye lenguajes de consultas ba-sado tanto en álgebra relacional como en cálculo re-lacional de tuplas.

• Integridad: El LDD de SQL incluye comandos paraespecificar las restricciones de integridad que debencumplir los datos almacenados en la base de datos.

• Definición de vistas: El LDD incluye comandos pa-ra definir las vistas.

• Control de transacciones: SQL tiene comandospara especificar el comienzo y el final de unatransacción.

• SQL incorporado y dinámico: Esto quiere decirque se pueden incorporar instrucciones de SQL enlenguajes de programación como: C++, C, Java,PHP, Cobol, Pascal y Fortran.

• Autorización: El LDD incluye comandos para es-pecificar los derechos de acceso a las relaciones y alas vistas.

2.1 Tipos de Datos

Algunos de los tipos de datos básicos de SQL son:

• Date: una fecha de calendario que contiene el año(de cuatro cifras), el mes y el día.

1

Page 2: SQL

2 4 LENGUAJE DE MANIPULACIÓN DE DATOS DML(DATA MANIPULATION LANGUAGE)

• Time: La hora del día en horas minutos segundos (elvalor predeterminado es 0).

• Timestamp: la combinación de Date y Time.

2.2 Optimización

Como ya se dijo antes, y suele ser común en los lenguajesde acceso a bases de datos de alto nivel, el SQL es unlenguaje declarativo. O sea, que especifica qué es lo quese quiere y no cómo conseguirlo, por lo que una sentenciano establece explícitamente un orden de ejecución.El orden de ejecución interno de una sentencia puedeafectar seriamente a la eficiencia del SGBD, por lo quese hace necesario que éste lleve a cabo una optimiza-ción antes de su ejecución. Muchas veces, el uso de ín-dices acelera una instrucción de consulta, pero ralentizala actualización de los datos. Dependiendo del uso de laaplicación, se priorizará el acceso indexado o una rápidaactualización de la información. La optimización difieresensiblemente en cada motor de base de datos y dependede muchos factores.Existe una ampliación de SQL conocida como FSQL(Fuzzy SQL, SQL difuso) que permite el acceso a basesde datos difusas, usando la lógica difusa. Este lenguajeha sido implementado a nivel experimental y está evolu-cionando rápidamente.

3 Lenguaje de definición de datos(DDL)

El lenguaje de definición de datos (en inglés Data Defini-tion Language, o DDL), es el que se encarga de la modifi-cación de la estructura de los objetos de la base de datos.Incluye órdenes para modificar, borrar o definir las tablasen las que se almacenan los datos de la base de datos.Existen cuatro operaciones básicas: CREATE, ALTER,DROP y TRUNCATE.

3.1 CREATE | CREAR

Este comando permite crear objetos de datos, como nue-vas bases de datos, tablas, vistas y procedimientos alma-cenados.

Ejemplo (crear una tabla)

CREATE TABLE 'CUSTOMERS';

3.2 ALTER | MODIFICAR

Este comando permite modificar la estructura de una ta-bla u objeto. Se pueden agregar/quitar campos a una ta-

bla, modificar el tipo de un campo, agregar/quitar índicesa una tabla, modificar un trigger, etc.

Ejemplo (agregar columna a una tabla)

ALTER TABLE 'ALUMNOS' ADD EDAD INTUNSIGNED;

3.3 DROP | ELIMINAR

Este comando elimina un objeto de la base de datos. Pue-de ser una tabla, vista, índice, trigger, función, procedi-miento o cualquier objeto que el motor de la base de datossoporte. Se puede combinar con la sentencia ALTER.

Ejemplo

DROP TABLE 'ALUMNOS';.

3.4 TRUNCATE | BORRAR TABLA

Este comando trunca todo el contenido de una tabla. Laventaja sobre el comando DROP, es que si se quiere bo-rrar todo el contenido de la tabla, es mucho más rápido,especialmente si la tabla es muy grande. La desventajaes que TRUNCATE sólo sirve cuando se quiere eliminarabsolutamente todos los registros, ya que no se permitela cláusula WHERE. Si bien, en un principio, esta sen-tencia parecería ser DML (Lenguaje de Manipulación deDatos), es en realidad una DDL, ya que internamente, elcomando TRUNCATE borra la tabla y la vuelve a creary no ejecuta ninguna transacción.

Ejemplo

TRUNCATE TABLE 'NOMBRE_TABLA';

4 Lenguaje de manipulación dedatos DML(Data ManipulationLanguage)

4.1 Definición

Un lenguaje de manipulación de datos (Data Manipula-tion Language, o DML en inglés) es un lenguaje propor-cionado por el sistema de gestión de base de datos quepermite a los usuarios llevar a cabo las tareas de consultao manipulación de los datos, organizados por el modelode datos adecuado.El lenguaje de manipulación de datos más popular hoydía es SQL, usado para recuperar y manipular datos enuna base de datos relacional.

Page 3: SQL

4.2 SELECT | SELECCIONAR 3

4.2 SELECT | SELECCIONAR

La sentencia SELECT nos permite consultar los datos al-macenados en una tabla de la base de datos.

4.2.1 Forma básica

SELECT [ALL | DISTINCT ]<nombre_campo> [{,<nombre_campo>}]FROM <nombre_tabla>|<nombre_vista>[{,<nombre_tabla>|<nombre_vista>}][WHERE <condición> [{ AND|OR <condición>}]][GROUP BY <nombre_campo> [{,<nombre_campo>}]][HAVING <condición>[{ AND|OR <condición>}]][ORDER BY <nombre_campo>|<indice_campo> [ASC| DESC][{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]Ejemplo:Para formular una consulta a la tabla Coches y recupe-rar los campos matricula, marca, modelo, color, nume-ro_kilometros, num_plazas debemos ejecutar la siguienteconsulta. Los datos serán devueltos ordenados por marcay por modelo en orden ascendente, de menor a mayor. Lapalabra clave FROM indica que los datos serán recupe-rados de la tabla Coches.SELECT matricula, marca, modelo, color, nume-ro_kilometros, num_plazas FROM Coches ORDERBY marca,modelo;Ejemplo de Consulta simplificada a través de un comodínde Campos (*):El uso del asterisco indica que queremos que la consultadevuelva todos los campos que existen en la tabla y losdatos serán devueltos ordenados por marca y por modelo.SELECT * FROM CochesORDER BYmarca, mode-lo;

4.2.2 Cláusula WHERE

La cláusulaWHERE es la instrucción que nos permite fil-trar el resultado de una sentencia SELECT. Habitualmen-te no deseamos obtener toda la información existente enla tabla, sino que queremos obtener sólo la informaciónque nos resulte útil en ese momento. La cláusula WHE-RE filtra los datos antes de ser devueltos por la consulta.Cuando en la Cláusula WHERE queremos incluir un tipotexto, debemos incluir el valor entre comillas simples.Ejemplos:En nuestro ejemplo, se desea consultar un coche en con-creto, para esto se agregó una cláusula WHERE. Estacláusula especifica una o varias condiciones que debencumplirse para que la sentencia SELECT devuelva losdatos. En este caso la consulta devolverá sólo los datosdel coche con matrícula para que la consulta devuelva só-

lo los datos del coche con matrícula MF-234-ZD o bienla matrícula FK-938-ZL . Se puede utilizar la cláusulaWHERE solamente, ó en combinación con tantas con-diciones como queramos.SELECT matricula, marca, modelo, color, nume-ro_kilometros, num_plazas FROM CochesWHERE matricula = 'MF-234-ZD' OR matricula ='FK-938-ZL' ;Una Condición WHERE puede ser negada a través delOperador Lógico NOT. La Siguiente consulta devolverátodos los datos de la tabla Coches, menos el que tenga laMatrícula MF-234-ZD .SELECT matricula,marca, modelo, color, nume-ro_kilometros, num_plazas FROM coches WHERENOT matricula = 'MF-234-ZD';La Siguiente consulta utiliza la condicional DISTINCT,la cual nos devolverá todos los valores distintos formadospor los Campos Marca y Modelo. de la tabla coches.SELECT DISTINCT marca, modelo FROM coches;

4.2.3 Cláusula ORDER BY

La cláusula ORDER BY es la instrucción que nos permiteespecificar el orden en el que serán devueltos los datos.Podemos especificar la ordenación ascendente o descen-dente a través de las palabras clave ASC y DESC. La or-denación depende del tipo de datos que este definido enla columna, de forma que un campo númerico será orde-nado como tal, y un alfanúmerico se ordenará de la A ala Z, aunque su contenido sea númerico. El valor prede-terminado es ASC si no se especifica al hacer la consulta.Ejemplos:SELECT matricula,marca,modelo,color,numero_kilometros,num_plazasFROM cochesORDER BY marca ASC,modelo DESC; Este ejemplo,selecciona todos los campos matricula, marca, modelo,color, numero_kilometros y num_plazas de la tabla co-ches, ordenándolos por los campos marca y modelo, mar-ca en forma ascendente y modelo en forma descendente.SELECT matricula,marca,modelo,color,numero_kilometros, num_plazasFROM cochesORDER BY 2;Este ejemplo, selecciona todos los campos matrícula,marca, modelo, color, numero_kilometros y num_plazasde la tabla coches, ordenándolos por el campo marca, ya

Page 4: SQL

4 4 LENGUAJE DE MANIPULACIÓN DE DATOS DML(DATA MANIPULATION LANGUAGE)

que aparece en segundo lugar dentro de la lista de camposque componen la SELECT.

4.3 INSERT | INSERTAR

Una sentencia INSERT de SQL agrega uno omás registrosa una (y sólo una) tabla en una base de datos relacional.

4.3.1 Forma básica

INSERT INTO 'tablatura' ('columna1',['columna2,... '])VALUES ('valor1', ['valor2,...'])

Las cantidades de columnas y valores deben ser iguales.Si una columna no se especifica, le será asignado el valorpor omisión. Los valores especificados (o implícitos) porla sentencia INSERT deberán satisfacer todas las restric-ciones aplicables. Si ocurre un error de sintaxis o si algu-na de las restricciones es violada, no se agrega la fila y sedevuelve un error.

4.3.2 Ejemplo

INSERT INTO agenda_telefonica (nombre, numero)VALUES ('Roberto Jeldrez', 4886850);

Cuando se especifican todos los valores de una tabla, sepuede utilizar la sentencia acortada:INSERT INTO nombreTabla VALUES ('valor1', ['va-lor2,...'])

Ejemplo (asumiendo que 'nombre' y 'número' son las úni-cas columnas de la tabla 'agenda_telefonica'):INSERT INTO agenda_telefonica VALUES ('JhonnyAguiar', 080473968);

4.3.3 Formas avanzadas

Una característica de SQL (desde SQL-92) es el uso deconstructores de filas para insertar múltiples filas a la vez,con una sola sentencia SQL:INSERT INTO ''tabla'' (''columna1'', [''columna2,...'']) VALUES (''valor1a'', [''valor1b,...'']), (''value2a'',[''value2b,...'']),...;

Esta característica es soportada por DB2, PostgreSQL(desde la versión 8.2), MySQL, y H2.Ejemplo (asumiendo que 'nombre' y 'número' son las úni-cas columnas en la tabla 'agenda_telefonica'):INSERT INTO agenda_telefonica VALUES ('RobertoFernández', '4886850'), ('Alejandro Sosa', '4556550');

Que podía haber sido realizado por las sentenciasINSERT INTO agenda_telefonica VALUES ('Ro-berto Fernández', '4886850'); INSERT INTO agen-da_telefonica VALUES ('Alejandro Sosa', '4556550');

Notar que las sentencias separadas pueden tener semán-tica diferente (especialmente con respecto a los triggers),y puede tener diferente rendimiento que la sentencia deinserción múltiple.Para insertar varias filas en MS SQL puede utilizar esaconstrucción:INSERT INTO phone_book SELECT 'John Doe', '555-1212' UNION ALL SELECT 'Peter Doe', '555-2323';

Tenga en cuenta que no se trata de una sentencia SQL vá-lida de acuerdo con el estándar SQL (SQL: 2003), debidoa la cláusula subselect incompleta.Para hacer lo mismo en Oracle se usa DUAL TABLE,siempre que se trate de solo una simple fila:INSERT INTO phone_book SELECT 'John Doe','555-1212' FROMDUAL UNION ALL SELECT 'PeterDoe','555-2323' FROM DUAL

Una implementación conforme al estándar de esta lógicase muestra el siguiente ejemplo, o como se muestra arriba(no aplica en Oracle):INSERT INTO phone_book SELECT 'John Doe','555-1212' FROM LATERAL ( VALUES (1) ) AS t(c)UNION ALL SELECT 'Peter Doe','555-2323' FROMLATERAL ( VALUES (1) ) AS t(c)

Copia de filas de otras tablas Un INSERT tambiénpuede utilizarse para recuperar datos de otros, modificar-la si es necesario e insertarla directamente en la tabla. To-do esto se hace en una sola sentencia SQL que no implicaningún procesamiento intermedio en la aplicación clien-te. Un SUBSELECT se utiliza en lugar de la cláusula VA-LUES. El SUBSELECT puede contener JOIN, llamadasa funciones, y puede incluso consultar en la misma TA-BLA los datos que se inserta. Lógicamente, el SELECTse evalúa antes que la operación INSERT esté iniciada.Un ejemplo se da a continuación.INSERT INTO phone_book2 SELECT * FROM pho-ne_book WHERE name IN ('John Doe', 'Peter Doe')

Una variación es necesaria cuando algunos de los datos dela tabla fuente se está insertando en la nueva tabla, perono todo el registro. (O cuando los esquemas de las tablasno son iguales.)INSERT INTO phone_book2 ( [name], [phoneNumber]

Page 5: SQL

5

) SELECT [name], [phoneNumber] FROM phone_bookWHERE name IN ('John Doe', 'Peter Doe')

El SELECT produce una tabla (temporal), y el esquemade la tabla temporal debe coincidir con el esquema de latabla donde los datos son insertados.

4.4 UPDATE

Una sentencia UPDATE de SQL es utilizada para modi-ficar los valores de un conjunto de registros existentes enuna tabla.

4.4.1 Ejemplo

UPDATE My_table SET field1 = 'updated value asd'WHERE field2 = 'N';

4.5 DELETE

Una sentenciaDELETE de SQL borra uno omás registrosexistentes en una tabla.

4.5.1 Forma básica

DELETE FROM tabla WHERE columna1 = 'valor1'

4.5.2 Ejemplo

DELETE FROM My_table WHERE field2 = 'N';

5 Recuperación de clave

Los diseñadores de base de datos que usan una clave su-plente como la clave principal para cada tabla, se ejecu-tará en el ocasional escenario en el que es necesario recu-perar automáticamente la base de datos, generando unaclave primaria de una sentencia SQL INSERT para suuso en otras sentencias SQL. La mayoría de los sistemasno permiten sentencias SQL INSERT para retornar filade datos. Por lo tanto, se hace necesario aplicar una solu-ción en tales escenarios.Implementaciones comunes incluyen:

• Utilizando un procedimiento almacenado específicode base de datos que genera la clave suplente, realicela operación INSERT, y finalmente devuelve la clavegenerada.

• Utilizando una sentencia SELECT específica de ba-se de datos, sobre una tabla temporal que contienela última fila insertada. DB2 implementa esta carac-terística de la siguiente manera:

SELECT * FROMNEW TABLE ( INSERT INTO pho-ne_book VALUES ( 'Cristobal Jeldrez','0426.817.10.30') ) AS t

• Utilizando una sentencia SELECT después de lasentencia INSERT con función específica de basede datos, que devuelve la clave primaria generadapor el registro insertado más recientemente.

• Utilizando una combinación única de elementos deloriginal SQL INSERT en una posterior sentenciaSELECT.

• Utilizando un GUID en la sentencia SQL INSERTy la recupera en una sentencia SELECT.

• Utilizando la función de PHP mysql_insert_id() deMySQL después de la sentencia INSERT.

• Utilizando un INSERT con la cláusula RETUR-NING para Oracle, que sólo se puede utilizar dentrode un PL/SQL bloque, en el caso de PostgreSQLse puede usar también tanto con SQL como conPL/SQL.

INSERT INTO phone_book VALUES ( 'Cristobal Jel-drez','0426.817.10.30' ) RETURNING phone_book_idINTO v_pb_id

• En el caso de MS SQL se puede utilizar la siguienteinstrucción:

SET NoCount ON; INSERT INTO phone_book VA-LUES ( 'Cristobal Jeldrez','0426.817.10.30' ); SELECT@@IDENTITY AS ID

6 Disparadores

Los disparadores, también conocidos como desencade-nantes (triggers en inglés) son definidos sobre la tabla enla que opera la sentencia INSERT, y son evaluados en elcontexto de la operación. Los desencadenantes BEFOREINSERT permiten la modificación de los valores que seinsertarán en la tabla. Los desencadenantes AFTER IN-SERT no puede modificar los datos de ahora en adelante,pero se puede utilizar para iniciar acciones en otras ta-blas, por ejemplo para aplicar mecanismos de auditoría.

Page 6: SQL

6 10 ENLACES EXTERNOS

7 Sistemas de gestión de base dedatos

Los sistemas de gestión de base de datos con soporte SQLmás utilizados son, por orden alfabético:

• DB2

• Firebird

• HSQL

• Informix

• Interbase

• MariaDB

• Microsoft SQL Server

• MySQL

• Oracle

• PostgreSQL

• Progress

• PervasiveSQL

• SQLite

• Sybase ASE

8 Referencias

9 Véase también• Lenguaje de definición de datos

• SQL injection

• FSQL

• AQL

• Modelo de base de datos

10 Enlaces externos• Tutorial de SQL usando MsSQLServer por JesúsAmbriz Meza.

Page 7: SQL

7

11 Text and image sources, contributors, and licenses

11.1 Text• SQL Fuente: http://es.wikipedia.org/wiki/SQL?oldid=80111930 Colaboradores: AstroNomo, Andre Engels, Subienkov, PACO, Joseape-

rez, Sabbut, Moriel, JorgeGG, Pieter, Lourdes Cardenal, Hashar, Vanbasten 23, Sanbec, Tony Rotondas, Dodo, Ejmeza, Triku, AdeVega,Sms, Elwikipedista, Murphy era un optimista, Valyag, Santiz, Jac, Rodrigouf, Cinabrium, Pipepupo, Porao, WingMaster, Juanenriquez,Baldur71, Balderai, Renabot, Boticario, Soulreaper, RobotJcb, Airunp, JMPerez, Edub, Yrithinnd, Rembiapo pohyiete (bot), Johnbojaen,Orgullobot, RobotQuistnix, Gcsantiago, Francosrodriguez, Alhen, Superzerocool, Yrbot, BOT-Superzerocool, Oscar ., BOTijo, YurikBot,Cameri, Icvav, GermanX, Zam, Beto29, The Photographer, R0MAN0, No sé qué nick poner, Eloy, Eskimbot, Götz, Kaser, Grimpi, Toma-tejc, Siabef, Guillefc, Calsbert, Jstitch, Nelson.cruz, CEM-bot, Damifb, Laura Fiorucci, -jem-, Alexav8, Osepu, Roberpl, Fache, Erodrigu-fer, Dorieo, Montgomery, FrancoGG, Ingenioso Hidalgo, Resped, Juank8041, Alvaro qc, Ty25, Mahadeva, Ñuño Martínez, RoyFocker,Farm74, Juancmartinezh, Clementito, Botones, Cratón, Isha, Jugones55, Hotpadrino, Mansoncc, Diegazo, Muro de Aguas, Aitormoreno,TXiKiBoT, Netito777, Qu3tzalc0atl5, Jvlivs, Chabbot, Pólux, Biasoli, Cinevoro, Warlockzero, VolkovBot, Technopat, Queninosta, Mat-drodes, Rosette, Synthebot, DJ Nietzsche, BlackBeast, Shooke, Lucien leGrey, AlleborgoBot, Muro Bot, Racso, Jesusosm, Rgfernandez,SieBot, Mushii, Loveless, MatiasAB, Siuto, Cobalttempest, Ofigue, Marcelo, Gurgut, Tirithel, Mutari, Jmmuguerza, Javierito92, StarBOT,McMalamute, Eduardosalg, Leonpolanco, Pan con queso, Botito777, LordT, Marcelomasci, Raulshc, Jmrubira, Rrupo, UA31, AVBOT,ElWiau, Louperibot, J.delanoy, MarcoAurelio, Diegusjaimes, Andreasmperu, Luckas-bot, Nallimbot, Jotterbot, Jorge 2701, Gacpro, Ra-faelRoblesL, SuperBraulio13, Xqbot, Jkbw, Magomaitin, Botarel, Stuffy, Rokemaster, AstaBOTh15, Juliandt, BOTirithel, Hprmedina,Dnog, TobeBot, Jsanchev, DixonDBot, ErKURITA, PatruBOT, CVBOT, KamikazeBot, Gustavo Girardelli, Humbefa, Waeswaes, Jorgec2010, Cosmico085, GrouchoBot, Carbosi, Bachi 2805, ZéroBot, HRoestBot, Jotagarzon, Grillitus, Hoo man, ChuispastonBot, Kevyn.ry2,Xerox 5B, Antonorsi, MerlIwBot, Jgcalderon37, Nagb1992, Renly, ChayitaBOT, Amolbot, Ileana n, Garett Omarx Díaz Guzmán, LlamaAl,Creosota, Juanitorreslp, Diegorb892, U-Alex, Camelotcam, Samuel nielsen, Lautaro 97, Dogoteacher, Addbot, Balles2601, Rodbrunneis,Dnajerag, Carocad, JSStenta, Jarould, Rodrigo Ronderos, Ing.aragon.ipn y Anónimos: 511

11.2 Images• Archivo:Check_mark.png Fuente: http://upload.wikimedia.org/wikipedia/commons/f/f0/Check_mark.png Licencia: ? Colaboradores:

Wikipedia Artista original:Wikipedia• Archivo:Commons-emblem-copyedit.svg Fuente: http://upload.wikimedia.org/wikipedia/commons/e/e8/Commons-emblem-copyedit.

svg Licencia: CC BY-SA 3.0 Colaboradores:• File:Gnome-emblem-important.svg Artista original: GNOME icon artists, Fitoschido• Archivo:Commons-emblem-question_book_orange.svg Fuente: http://upload.wikimedia.org/wikipedia/commons/1/1f/

Commons-emblem-question_book_orange.svg Licencia: CC BY-SA 3.0 Colaboradores: <a href='//commons.wikimedia.org/wiki/File:Commons-emblem-issue.svg' class='image'><img alt='Commons-emblem-issue.svg' src='//upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/25px-Commons-emblem-issue.svg.png' width='25' height='25'srcset='//upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/38px-Commons-emblem-issue.svg.png1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/50px-Commons-emblem-issue.svg.png 2x'data-file-width='48' data-file-height='48' /></a> + <a href='//commons.wikimedia.org/wiki/File:Question_book.svg' class='image'><imgalt='Question book.svg' src='//upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/25px-Question_book.svg.png'width='25' height='20' srcset='//upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/38px-Question_book.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/50px-Question_book.svg.png 2x' data-file-width='252' data-file-height='199' /></a> Artista original: GNOME icon artists, Jorge 2701

• Archivo:Yes_check.svg Fuente: http://upload.wikimedia.org/wikipedia/commons/f/fb/Yes_check.svg Licencia: Public domain Colabo-radores: Trabajo propio Artista original: SVG by Gregory Maxwell, simplified by Sarang

11.3 Content license• Creative Commons Attribution-Share Alike 3.0