Sunteți pe pagina 1din 32

SQL for Dummies

Bases de Datos 2010-2 16 de Agosto del 2010


El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S. osvaldo.mena@usm.cl

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.

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

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

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

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

Analizando un poco lo anterior


Algunas cosas que podemos notar:
Maysculas: Necesarias? La correspondencia entre campo y valor es 1:1. Como puede verse, los campos numricos no van delimitados por apostrofes: '. Pregunta Extra: El cdigo postal lo hemos guardado como un campo no numrico Por qu?.

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?

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

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

Seleccin de tablas III (Order by)


Adems, podramos ordenar los resultados en funcin de uno o varios de sus campos:
SELECT * FROM clientes WHERE poblacion LIKE 'Madrid' ORDER BY nombre

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

Seleccin de Tablas IV (Distinct)


Una opcin interesante es la de efectuar selecciones sin coincidencia. Si por ejemplo buscsemos el saber en qu ciudades se encuentran nuestros clientes sin necesidad de que para ello aparezca varias veces la misma ciudad usaramos una sentencia de esta clase: SELECT DISTINCT poblacion FROM clientes ORDER BY poblacion asc As evitaramos ver repetido Madrid tantas veces como clientes tengamos en esa poblacin.

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

osvaldo.mena@usm.cl

Seleccin de Tablas V (Operadores)


Los siguientes operadores sern utilizados despus de la clusula WHERE y pueden ser combinados hbilmente para optimizar nuestra seleccin a muy altos niveles.

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

osvaldo.mena@usm.cl

Seleccin de Tablas VI (Operadores)

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

osvaldo.mena@usm.cl

Seleccin de Tablas VII (Ejemplos)


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 maysculas.
SELECT * FROM clientes WHERE poblacion LIKE madrid AND NOT (nombre LIKE Pepe)

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.

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

osvaldo.mena@usm.cl

Seleccin de Varias Tablas I


Una base de datos puede ser considerada como un conjunto de tablas. Estas tablas en muchos casos estn relacionadas entre ellas y se complementan unas con otras. Este tipo de organizacin basada en mltiples tablas conectadas nos permite trabajar con tablas mucho ms 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.

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

osvaldo.mena@usm.cl

Seleccin de Varias Tablas II

Alguien sabe qu significan las lneas (relaciones)?

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

osvaldo.mena@usm.cl

Seleccin de Varias Tablas III


Estas tablas pueden ser utilizadas simultneamente para extraer informacin de todo tipo. Supongamos que queremos enviar un correo masivo a todos aquellos que hayan realizado un pedido ese mismo da. Podramos escribir algo as:
SELECT DISTINCT clientes.apellidos, clientes.email FROM clientes , pedidos WHERE pedidos.fecha like 16/08/2010 AND pedidos.id_cliente= clientes.id_cliente

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

osvaldo.mena@usm.cl

Seleccin de Varias Tablas IV


Veamos otro ejemplo ms para consolidar estos nuevos conceptos. Esta vez queremos ver el ttulo del libro correspondiente a cada uno de los pedidos realizados:
SELECT pedidos.id_pedido, articulos.titulo FROM pedidos , articulos WHERE pedidos.id_articulo = articulos.id_articulo

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.

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

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

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

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

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

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.

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

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

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

osvaldo.mena@usm.cl

Creacin de Tablas III


La sintaxis de creacin puede variar ligeramente de una base de datos a otra ya que los tipos de campo aceptados no estn completamente estandarizados. La sintaxis para realizar la creacin de una tabla, suele ser algo como lo siguiente.
CREATE TABLE nombre_tabla ( nombre_campo_1 tipo_1 propiedades_1, nombre_campo_2 tipo_2 propiedades_2, nombre_campo_n tipo_n propiedades_n, PRIMARY KEY( nombre_campo_x , ... ) )

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

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 ) )

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

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

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

osvaldo.mena@usm.cl

Si es que nos queda tiempo

Caso prctico con una BD real (Una rplica de la BD utilizada por SIGA).

El Ayudante: Osvaldo Mena R. El Ex-Ayudante : Hctor Hidalgo S.

osvaldo.mena@usm.cl

S-ar putea să vă placă și