¡Descarga PROGRAMACION SQL - BASICO Y EJEMPLOS y más Monografías, Ensayos en PDF de Programación del Sistema solo en Docsity!
www.desarrolloweb.com
Tutorial de SQL Aprende a utilizar el estándar utilizado para la consulta de bases de datos. Seleccionar, crear, modificar y borrar registros. Todo lo que necesitas para la creación de tus páginas dinámicas. Autores del manual
Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com:
Rubén Alvarez
Redactor de DesarrolloWeb.com http://www.desarrolloweb.com (13 capítulos)
Miguel Angel Alvarez
Director de DesarrolloWeb.com http://www.desarrolloweb.com (1 capítulo)
Agustin Jareño
(1 capítulo)
Claudio
http://personal.lobocom.es/claudio/ (17 capítulos)
Pol Salvat
http://www.mistrucos.net (3 capítulos)
Jonathan Soriano Folch
(1 capítulo)
Sara Alvarez
Equipo DesarrolloWeb.com http://www.desarrolloweb.com (1 capítulo) Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
Parte 1:
Introducción
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 SQL
Qué es y para qué sirve el SQL
Las aplicaciones en red son cada día más numerosas y versátiles. En muchos casos, el esquema básico de operación es una
serie 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 sería realmente
complicada a gestionar de no ser por la existencia de estándares que nos permiten el realizar las operaciones básicas de una
forma universal.
Es de eso de lo que trata el Structured Query Language que no es mas que un lenguaje estándar de comunicación con bases
de datos. Hablamos por tanto de un lenguaje normalizado que nos permite trabajar con cualquier tipo de lenguaje (ASP o
PHP) en combinación con cualquier tipo de base de datos (MS Access, SQL Server, MySQL...).
El hecho de que sea estándar no quiere decir que sea idéntico para cada base de datos. En efecto, determinadas bases de
datos implementan funciones específicas que no tienen necesariamente que funcionar en otras.
Aparte de esta universalidad, el SQL posee otras dos características muy apreciadas. Por una parte, presenta una potencia y
versatilidad notables que contrasta, por otra, con su accesibilidad de aprendizaje.
El manual de SQL de desarrolloweb pretende dar a conocer las operaciones básicas que se pueden realizar con SQL y que
tienen una aplicación directa con la creación de aplicaciones en red sin profundizar más de lo estrictamente necesario.
Buscamos con ello ofrecer al webmaster un manual de referencia práctico y aplicado.
Artículo por Rubén Alvarez
1.2.- Tipos de campo
Diferentes tipos campos empleados en las bases de datos
Como sabemos una base de datos esta compuesta de tablas donde almacenamos registros catalogados en función de
distintos campos (características).
Un aspecto previo a considerar es la naturaleza de los valores que introducimos en esos campos. Dado que una base de
datos trabaja con todo tipo de informaciones, es importante especificarle qué tipo de valor le estamos introduciendo de
manera a, por un lado, facilitar la búsqueda posteriormente y por otro, optimizar los recursos de memoria.
Cada base de datos introduce tipos de valores de campo que no necesariamente están presentes en otras. Sin embargo, existe
un conjunto de tipos que están representados en la totalidad de estas bases. Estos tipos comunes son los siguientes:
Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
CURRENCY 8 bytes Un entero escalable entre 922.337.203.685.477,5808 y 922.337.203.685.477,5807. DATETIME 8 bytes Un valor de fecha u hora entre los años 100 y 9999. SINGLE 4 bytes Un valor en punto flotante de precisión simple con un rango de - 3.4028231038 a -1.40129810-45 para valores negativos, 1.40129810- 45 a 3.4028231038 para valores positivos, y 0. DOUBLE 8 bytes Un valor en punto flotante de doble precisión con un rango de - 1.7976931348623210308 a -4.9406564584124710-324 para valores negativos, 4.9406564584124710-324 a 1.7976931348623210308 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. LONGTEXT 1 byte por carácter De cero a un máximo de 1.2 gigabytes. LONGBINARY Según se necesite De cero 1 gigabyte. Utilizado para objetos OLE. TEXT 1 byte por carácter De cero a 255 caracteres.
La siguiente tabla recoge los sinónimos de los tipos de datos definidos:
Tipo de Dato Sinónimos BINARY VARBINARY BIT BOOLEAN LOGICAL LOGICAL YESNO BYTE INTEGER Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
COUNTER AUTOINCREMENT CURRENCY MONEY DATETIME DATE TIME TIMESTAMP SINGLE FLOAT IEEESINGLE REAL DOUBLE FLOAT FLOAT IEEEDOUBLE NUMBER NUMERIC SHORT INTEGER SMALLINT LONG INT INTEGER INTEGER LONGBINARY GENERAL OLEOBJECT LONGTEXT LONGCHAR MEMO NOTE TEXT ALPHANUMERIC CHAR - CHARACTER STRING - VARCHAR VARIANT (No Admitido) VALUE
Artículo por Claudio
Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
Concede privilegios de acceso a usuarios.
Suprime privilegios de acceso a usuarios
Finaliza la transacción actual.
Aborata la transacción actual.
PLSQL SQL Programático
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 sintácticos
La mayoría de sentencias SQL tienen la misma estructura.
Todas comienzan por un verbo (select, insert, update, create), a continuación le sigue una o más clausulas que nos dicen los
datos con los que vamos a operar (from, where), algunas de estas son opcionales y otras obligatorias como es el caso del
from.
Artículo por Sara Alvarez
Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
Parte 2:
Inserción y modificación
de datos
Vemos como insertar, modificar o borrar datos en nuestras tablas SQL. 2.1.- Creación de tablas
Explicamos la manera de crear tablas a partir de sentencias SQL. Definimos los tipo de campos
principales y la forma de especificar los índices.
En general, la mayoría de las bases de datos poseen potentes editores de bases que permiten la creación rápida y sencilla de
cualquier 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 nueva
tabla ya sea con carácter temporal (para gestionar un carrito de compra por ejemplo) o bien permanente por necesidades
concretas de nuestra aplicación.
En estos casos, podemos, a partir de una sentencia SQL, crear la tabla con el formato que deseemos lo cual nos puede
ahorrar más de un quebradero de cabeza.
Este tipo de sentencias son especialmente útiles para bases de datos como Mysql, las cuales trabajan directamente con
comandos 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 y
sus características. Además, puede ser necesario especificar cuáles de estos campos van a ser índices y de qué tipo van a
serlo.
La sintaxis de creación puede variar ligeramente de una base de datos a otra ya que los tipos de campo aceptados no están
completamente estandarizados.
A continuación os explicamos someramente la sintaxis de esta sentencia y os proponemos una serie de ejemplos prácticos:
2.1.1.- Sintaxis Create Table nombre_tabla ( nombre_campo_1 tipo_ nombre_campo_2 tipo_ nombre_campo_n tipo_n Key(campo_x,...) )
Pongamos ahora como ejemplo la creación de la tabla pedidos que hemos empleado en capítulos previos:
Create Table pedidos ( id_pedido INT(4) NOT NULL AUTO_INCREMENT, id_cliente INT(4) NOT NULL, id_articulo INT(4)NOT NULL, Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
BIT o BOOLEAN 1 Almacenan un bit de información (verdadero o falso)
Artículo por Rubén Alvarez
2.2.- Estructuras de las tablas en SQL
Una base de datos en un sistema relacional está compuesta por un conjunto de tablas, que corresponden
a las relaciones del modelo relacional.
En la terminología usada en SQL no se alude a las relaciones, del mismo modo que no se usa el término atributo, pero sí la
palabra columna, y no se habla de tupla, sino de línea.
2.2.1.- Creación de Tablas Nuevas CREATE TABLE tabla ( campo1 tipo (tamaño) índice1, campo2 tipo (tamaño) índice2,... , índice multicampo , ... )
En donde:
tabla Es el nombre de la tabla que se va a crear. campo campo Es el nombre del campo o de los campos que se van a crear en la nueva tabla. La nueva tabla debe contener, al menos, un campo. tipo Es el tipo de datos de campo en la nueva tabla. (Ver Tipos de Datos) tamaño Es el tamaño del campo sólo se aplica para campos de tipo texto. índice índice Es una cláusula CONSTRAINT que define el tipo de índice a crear. Esta cláusula en opcional. índice multicamp os Es una cláusula CONSTRAINT que define el tipo de índice multicampos a crear. Un índice multicampo es aquel que está indexado por el contenido de varios campos. Esta cláusula 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 llamado
apellidos con longitud 50).
CREATE TABLE
Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
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 Apellidos
de tipo texto y longitud predeterminada (50) y uno más llamado FechaNacimiento de tipo Fecha/Hora. También crea un
índice ú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 igual
llamado Apellidos, crea otro campo llamado FechaNacimiento de tipo Fecha/Hora y el campo IdEmpleado de tipo entero el
que establece como clave principal.)
2.2.2.- La cláusula CONSTRAINT
Se utiliza la cláusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminar índices.
Existen dos sintaxis para esta cláusula dependiendo si desea Crear ó Eliminar un índice de un único campo o si se trata de
un campo multiíndice. Si se utiliza el motor de datos de Microsoft, sólo podrá utilizar esta cláusula con las bases de datos
propias 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 múltiples:
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. refN Es el nombre del campo o de los campos que forman el índice externo (hacen referencia a campos de otra tabla). tabla externa Es el nombre de la tabla que contiene el campo o los campos referenciados en refN Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
(valor predeterminado) y DESC un orden descendente. UNIQUE Indica que el índice no puede contener valores duplicados. DISALLOW NULL Prohibe valores nulos en el índice IGNORE NULL Excluye del índice los valores nulos incluidos en los campos que lo componen. PRIMARY Asigna al índice la categoría de clave principal, en cada tabla sólo puede existir 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 una
fuente de datos ODBC tal como SQL Server que no tenga todavía un índice. No necesita permiso o tener acceso a un
servidor remoto para crear un pseudo índice, además la base de datos remota no es consciente y no es afectada por el
pseudo índice. Se utiliza la misma sintaxis para las tablas adjuntas que para las originales. Esto es especialmente útil para
crear un índice en una tabla que sería de sólo lectura debido a la falta de un índice.
CREATE INDEX
MiIndice ON Empleados (Prefijo, Telefono) (Crea un índice llamado MiIndice en la tabla empleados con los campos Prefijo y Teléfono.) CREATE UNIQUE INDEX MiIndice ON Empleados (IdEmpleado) WITH DISALLOW NULL
(Crea un índice en la tabla Empleados utilizando el campo IdEmpleado, obligando que el campo IdEmpleado no contenga
valores nulos ni repetidos.)
2.2.4.- Modificar el Diseño de una Tabla
Modifica el diseño 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[(tamaño)] [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 añadir o eliminar. tipo Es el tipo de campo que se va a añadir. Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
tamaño Es el tamaño del campo que se va a añadir (sólo para campos de texto). índice Es el nombre del índice del campo (cuando se crean campos) o el nombre del índice de la tabla que se desea eliminar. índice multicamp o Es el nombre del índice del campo multicampo (cuando se crean campos) o el nombre del índice de la tabla que se desea eliminar. Operación Descripción ADD COLUMN Se utiliza para añadir un nuevo campo a la tabla, indicando el nombre, el tipo de campo y opcionalmente el tamaño (para campos de tipo texto). ADD Se utiliza para agregar un índice de multicampos o de un único campo. DROP COLUMN Se utiliza para borrar un campo. Se especifica únicamente el nombre del campo. DROP Se utiliza para eliminar un índice. Se especifica únicamente el nombre del índice a continuación de la palabra reservada CONSTRAINT. ALTER TABLE Empleados ADD COLUMN Salario CURRENCY (Agrega un campo Salario de tipo Moneda a la tabla Empleados.) ALTER TABLE Empleados DROP COLUMN Salario (Elimina el campo Salario de la tabla Empleados.) ALTER TABLE Pedidos ADD CONSTRAINT RelacionPedidos FOREIGN KEY (IdEmpleado) REFERENCES Empleados (IdEmpleado) (Agrega un índice externo a la tabla Pedidos. El índice externo se basa en el campo IdEmpleado y se refiere al campo IdEmpleado de la tabla Empleados. En este ejemplo no es necesario indicar el campo junto al nombre de la tabla en la cláusula REFERENCES, pues ID_Empleado es la clave principal de la tabla Empleados.) ALTER TABLE Pedidos Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
2.4.- Borrar un registro
Sintaxis y ejemplos para borrar registros en una tabla
Para borrar un registro nos servimos de la instrucción Delete. En este caso debemos especificar cual o cuales son los
registros que queremos borrar. Es por ello necesario establecer una selección que se llevara a cabo mediante la cláusula
Where.
La forma de seleccionar se verá detalladamente en capítulos posteriores. Por ahora nos contentaremos de mostrar cuál es el
tipo de sintaxis utilizado para efectuar estas supresiones:
Delete From nombre_tabla Where condiciones_de_selección Nota: Si deseamos practicar con una base de datos que está vacía primero debemos crear las tablas que vamos a llenar. Las tablas también se crean con sentencias SQL y aprendemos a hacerlo en el último capítulo.
Si queremos por ejemplo borrar todos los registros de los clientes que se llamen Perico lo haríamos del siguiente modo:
Delete From clientes Where nombre='Perico'
Hay que tener cuidado con esta instrucción ya que si no especificamos una condición con Where, lo que estamos haciendo
es borrar toda la tabla :
Delete From clientes
Artículo por Rubén Alvarez
2.5.- Actualizar un registro
Sintaxis y ejemplos para editar registros en una tabla
Update es la instrucción que nos sirve para modificar nuestros registros. Como para el caso de Delete, necesitamos
especificar por medio de Where cuáles son los registros en los que queremos hacer efectivas nuestras modificaciones.
Además, obviamente, tendremos que especificar cuáles son los nuevos valores de los campos que deseamos actualizar. La
sintaxis es de este tipo:
Update nombre_tabla Set nombre_campo1 = valor_campo1, nombre_campo2 = valor_campo2,... Where condiciones_de_selección
Un ejemplo aplicado:
Update clientes Set nombre='José' Where nombre='Pepe'
Mediante esta sentencia cambiamos el nombre Pepe por el de José en todos los registros cuyo nombre sea Pepe.
Aquí también hay que ser cuidadoso de no olvidarse de usar Where, de lo contrario, modificaríamos todos los registros de
nuestra tabla.
Artículo por Rubén Alvarez
Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
Parte 3:
Búsqueda y selección de
datos en SQL
Estudiamos a fondo todo lo relacionado con la sentencia select dentro del lenguaja SQL. 3.1.- Selección de tablas I
Cómo realizar selecciones eficientemente. Ejemplos prácticos.
La selección total o parcial de una tabla se lleva a cabo mediante la instrucción Select. En dicha selección hay que especificar:
-Los campos que queremos seleccionar
-La tabla en la que hacemos la selección
En nuestra tabla modelo de clientes podríamos hacer por ejemplo una selección del nombre y dirección de los clientes con
una instrucción de este tipo:
Select nombre, dirección From clientes
Si quisiésemos seleccionar todos los campos, es decir, toda la tabla , podríamos utilizar el comodín * del siguiente modo:
Select * From clientes
Resulta también muy útil el filtrar los registros mediante condiciones que vienen expresadas después de la cláusula Where.
Si quisiésemos mostrar los clientes de una determinada ciudad usaríamos una expresión como esta:
Select * From clientes Where poblacion Like 'Madrid'
Además, podríamos ordenar los resultados en función de uno o varios de sus campos. Para este ultimo ejemplo los
podríamos ordenar por nombre así:
Select * From clientes Where poblacion Like 'Madrid' Order By nombre
Teniendo en cuenta que puede haber más de un cliente con el mismo nombre, podríamos dar un segundo criterio que
podría ser el apellido:
Select * From clientes Where poblacion Like 'Madrid' Order By nombre, apellido
Si invirtiésemos el orden « nombre,apellido » por « apellido, nombre », el resultado sería distinto. Tendríamos los
clientes ordenados por apellido y aquellos que tuviesen apellidos idénticos se subclasificarían por el nombre.
Es posible también clasificar por orden inverso. Si por ejemplo quisiésemos ver nuestros clientes por orden de pedidos
realizados teniendo a los mayores en primer lugar escribiríamos algo así:
Select * From clientes Order By pedidos Desc
Una opción interesante es la de efectuar selecciones sin coincidencia. Si por ejemplo buscásemos el saber en qué ciudades
se encuentran nuestros clientes sin necesidad de que para ello aparezca varias veces la misma ciudad usaríamos una sentencia
de esta clase:
Select Distinct poblacion From clientes Order By poblacion Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
Like Selecciona los registros cuyo valor de campo se asemeje, no teniendo en cuenta mayúsculas y minúsculas. In y Not In Da un conjunto de valores para un campo para los cuales la condición de selección es (o no) valida Is Null y Is Not Null Selecciona aquellos registros donde el campo especificado esta (o no) vacío. Between... And Selecciona los registros comprendidos en un intervalo Distinct Selecciona los registros no coincidentes Desc Clasifica los registros por orden inverso Comodines
- Sustituye a todos los campos % Sustituye a cualquier cosa o nada dentro de una cadena _ Sustituye un solo carácter dentro de una cadena
Veamos a continuación aplicaciones practicas de estos operadores.
En esta sentencia seleccionamos todos los clientes de Madrid cuyo nombre no es Pepe. Como puede verse, empleamos Like
en lugar de = simplemente para evitar inconvenientes debido al empleo o no de mayúsculas.
Select * From clientes Where poblacion Like 'madrid' And Not nombre Like 'Pepe'
Si quisiéramos recoger en una selección a los clientes de nuestra tabla cuyo apellido comienza por A y cuyo número de
pedidos esta comprendido entre 20 y 40 :
Select * From clientes Where apellidos like 'A%' And pedidos Between 20 And 40
El operador In , lo veremos más adelante, es muy práctico para consultas en varias tablas. Para casos en una sola tabla es
empleado del siguiente modo:
Select * From clientes Where poblacion In ('Madrid','Barcelona','Valencia')
De esta forma seleccionamos aquellos clientes que vivan en esas tres ciudades.
Artículo por Rubén Alvarez
Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/
www.desarrolloweb.com
3.3.- Selección de tablas III
Cómo realizar selecciones sobre varias tablas. Ejemplos prácticos basados en una aplicación de e-
comercio.
Una base de datos puede ser considerada como un conjunto de tablas. Estas tablas en muchos casos están relacionadas entre
ellas y se complementan unas con otras.
Refiriéndonos a nuestro clásico ejemplo de una base de datos para una aplicación de e-comercio, la tabla clientes de la que
hemos estado hablando puede estar perfectamente coordinada con una tabla donde almacenamos los pedidos realizados por
cada cliente. Esta tabla de pedidos puede a su vez estar conectada con una tabla donde almacenamos los datos
correspondientes a cada artículo del inventario.
De este modo podríamos fácilmente obtener informaciones contenidas en esas tres tablas como puede ser la designación del
artículo más popular en una determinada región donde la designación del artículo sería obtenida de la tabla de artículos, la
popularidad (cantidad de veces que ese artículo ha sido vendido) vendría de la tabla de pedidos y la región estaría
comprendida obviamente en la tabla clientes.
Este tipo de organización basada en múltiples tablas conectadas nos permite trabajar con tablas mucho más manejables a la
vez que nos evita copiar el mismo campo en varios sitios ya que podemos acceder a él a partir de una simple llamada a la
tabla que lo contiene.
En este capítulo veremos como, sirviéndonos de lo aprendido hasta ahora, podemos realizar fácilmente selecciones sobre
varias tablas. Definamos antes de nada las diferentes tablas y campos que vamos a utilizar en nuestros ejemplos:
Tabla de clientes Nombre campo Tipo campo id_cliente Numérico entero nombre Texto apellidos Texto direccion Texto poblacion Texto codigopostal Texto telefono Numérico entero email Texto Tuorial de SQL: http://www.desarrolloweb.com/manuales/9/