Documente Academic
Documente Profesional
Documente Cultură
Qu es SQL?
Structured Query Language que no es ms que un lenguaje estndar de comunicacin con bases de datos. OJO: Estndar (con varias comillas), dado que vara levemente de un DBMS a otro. Ejemplos:
Oracle: Con su infinidad de funciones de soporte. Microsoft: Con su infinidad de mejoras.
Aparte de esta pseudo-universalidad, SQL posee otras dos caractersticas muy apreciadas.
Muy potente y verstil. Relativamente fcil de aprender.
osvaldo.mena@usm.cl
Tipos de Datos I
Como sabemos una BD est compuesta de tablas donde almacenamos registros catalogados en funcin de distintos campos (caractersticas). Un aspecto previo a considerar es la naturaleza de los valores que introducimos en esos campos.
La importancia de la Naturaleza del dato. Facilitar bsquedas posteriores. Optimizar los recursos de memoria.
Cada base de datos introduce tipos de valores de campo que no necesariamente estn presentes en otras. Sin embargo, existe un conjunto de tipos (de datos) que estn representados en la totalidad de estas bases. Estos tipos comunes son los siguientes:
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S. osvaldo.mena@usm.cl
Tipos de Datos II
osvaldo.mena@usm.cl
Insertar un Registro
Los registros pueden ser introducidos en una tabla 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 (ver pizarra) es la introduccin de un nuevo cliente, lo cual se hara con una instruccin de este tipo:
INSERT INTO clientes (nombre, apellidos, direccion, poblacion, codigopostal, email, pedidos) VALUES ('Perico', 'Palotes', 'Percebe n13', 'Lepe', '123456', 'perico@usm.cl', 33)
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S. osvaldo.mena@usm.cl
Para pensar: Por qu sera interesante el introducir en la creacin de nuestra tabla un campo auto-incremental que nos permita asignar un nico nmero a cada uno de los registros?
osvaldo.mena@usm.cl
Borrar un registro I
Para borrar un registro nos servimos de la instruccin DELETE.
Debemos especificar cul o cules son los registros que queremos borrar. Lo anterior se puede lograr mediante condiciones al utilizar la clusula WHERE.
La forma de seleccionar se ver detalladamente en captulos posteriores. Por ahora nos contentaremos de mostrar cul es el tipo de sintaxis utilizado para efectuar estas supresiones: DELETE FROM tabla WHERE condiciones
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S. osvaldo.mena@usm.cl
Borrar un registro II
Si queremos borrar todos los registros de los clientes que se llamen Perico:
DELETE FROM clientes WHERE nombre = 'Perico'
WARNING: Si no especificamos una condicin, lo que estamos haciendo es borrar todo el contenido de la tabla (lo cual generalmente no es bueno):
DELETE FROM clientes
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S. osvaldo.mena@usm.cl
Actualizar un registro I
UPDATE es la instruccin que nos sirve para modificar nuestros registros. Al igual que con DELETE, necesitamos especificar por medio de WHERE cules son los registros que queremos modificar. Adems, tendremos que especificar cules 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_seleccin
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S. osvaldo.mena@usm.cl
Actualizar un registro II
Un ejemplo: UPDATE clientes SET nombre=Jos WHERE nombre = Pepe
Qu hicimos? Mediante esta sentencia cambiamos el nombre Pepe por el de Jos en todos los registros cuyo nombre sea Pepe.
WARNING: No olvidar la clusula WHERE, de lo contrario, modificaramos todos los registros de nuestra tabla.
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S. osvaldo.mena@usm.cl
Seleccin de Tablas I
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 seleccin En nuestra tabla modelo de clientes podramos hacer por ejemplo una seleccin del nombre y direccin de los clientes con una instruccin de este tipo: SELECT nombre, direccin FROM clientes
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.
osvaldo.mena@usm.cl
Seleccin de Tablas II
Si quisisemos seleccionar todos los campos, podramos utilizar el comodn * del siguiente modo:
SELECT * FROM clientes
Resulta 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 'Madrid'
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.
osvaldo.mena@usm.cl
Teniendo en cuenta que puede haber ms de un cliente con el mismo nombre, podramos dar un segundo criterio que podra ser el apellido:
SELECT * FROM clientes WHERE poblacion LIKE 'Madrid' ORDER BY nombre,apellido
Si invirtisemos el orden nombre,apellido por apellido, nombre , el resultado sera distinto. Tendramos los clientes 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 pedidos realizados teniendo a los mayores en primer lugar escribiramos algo as:
SELECT * FROM clientes WHERE ORDER BY pedidos desc
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S. osvaldo.mena@usm.cl
osvaldo.mena@usm.cl
osvaldo.mena@usm.cl
osvaldo.mena@usm.cl
Si quisiramos recoger en una seleccin a los clientes de nuestra tabla cuyo apellido comienza por A y cuyo nmero 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 ms adelante, es muy prctico 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.
osvaldo.mena@usm.cl
osvaldo.mena@usm.cl
osvaldo.mena@usm.cl
osvaldo.mena@usm.cl
En realidad la filosofa continua siendo la misma que para la consulta de una nica tabla.
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.
osvaldo.mena@usm.cl
Funciones
El empleo de funciones es til para la explotacin de los campos numricos y otras utilidades. Adems de los criterios hasta ahora explicados para realizar las consultas en tablas, SQL permite tambin aplicar un conjunto de funciones predefinidas. Estas funciones, aunque bsicas, pueden ayudarnos en algunos momentos a expresar nuestra seleccin de una manera ms simple.
osvaldo.mena@usm.cl
Funciones
Se recomienda utilizar un alias para recuperar los valores de las funciones. Esto se puede lograr especificando en la sentencia SQL un alias utilizando la instruccin AS. La cosa podra quedar as: SELECT Sum(total) AS suma_pedidos FROM pedidos
osvaldo.mena@usm.cl
Funciones
Por supuesto, todo lo visto hasta ahora puede ser aplicado en este tipo de funciones de modo que, por ejemplo, podemos establecer condiciones con la clusula WHERE construyendo sentencias como esta: SELECT Sum(cantidad) AS suma FROM pedidos WHERE id_articulo = 6 Esto nos proporcionara la cantidad de ejemplares de un determinado libro que han sido vendidos.
Otra propiedad interesante de estas funciones es que permiten realizar operaciones con varios campos dentro de un mismo parntesis:
SELECT Avg(total/cantidad) FROM pedidos Esta sentencia da como resultado el precio medio al que se estn vendiendo los libros. Este resultado no tiene por qu coincidir con el del precio medio de los libros presentes en el inventario, ya que, puede ser que la gente tenga tendencia a comprar los libros caros o los baratos: SELECT Avg(precio) AS precio_venta FROM articulos
osvaldo.mena@usm.cl
Funciones
Una clusula interesante en el uso de funciones es Group By. Esta clusula nos permite agrupar registros a los cuales vamos a aplicar la funcin. Podemos por ejemplo calcular el dinero gastado por cada cliente: SELECT id_cliente, Sum(total) AS suma_pedidos FROM pedidos Group By id_cliente O saber el numero de pedidos que han realizado: SELECT id_cliente, Count(*) AS numero_pedidos FROM pedidos Group By id_cliente Como podemos apreciar, las posibilidades son prcticamente infinitas, y son realmente tiles para la obtencin de informacin. Ahora, slo falta aplicar nuestra imaginacin.
osvaldo.mena@usm.cl
Creacin de Tablas I
En general, la mayora de los DBMS poseen potentes editores de modelos de datos que permiten la creacin rpida y sencilla de cualquier tipo de tabla con cualquier tipo de formato (Ver siguiente slide). Sin embargo, existen razones para crear nuevas tablas en un modelo existente:
De carcter temporal (para gestionar un carrito de compra, o para procedimientos almacenados). De carcter permanente (por necesidades concretas de nuestra aplicacin).
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S. osvaldo.mena@usm.cl
Creacin de Tablas II
osvaldo.mena@usm.cl
osvaldo.mena@usm.cl
Creacin de Tablas IV
Pongamos ahora como ejemplo la creacin de la tabla pedidos que hemos empleado en slides anteriores:
CREATE TABLE pedido ( ped_id INT(4) NOT NULL AUTO_INCREMENT, cli_id INT(4) NOT NULL, art_id INT(4) NOT NULL, ped_fecha DATE, ped_cantidad INT(4), ped_total INT(4), KEY( ped_id ) )
El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S. osvaldo.mena@usm.cl
Creacin de Tablas V
Del mismo modo podramos crear la tabla de artculos con una sentencia como sta:
CREATE TABLE articulo ( art_id INT(4) NOT NULL AUTO_INCREMENT, art_titulo VARCHAR(50), art_autor VARCHAR(25), art_editorial VARCHAR(25), art_recio REAL, PRIMARY KEY( art_id ) )
osvaldo.mena@usm.cl
Agradecimientos
Hctor Hidalgo S. (hector.hidalgo@usm.cl), ya que el presente tutorial fue basado en un tutorial anterior realizado por hhidalgo. Consultas?
Hable fuerte y claro ahora. osvaldo.mena@usm.cl
osvaldo.mena@usm.cl
Caso prctico con una BD real (Una rplica de la BD utilizada por SIGA).
osvaldo.mena@usm.cl