Вы находитесь на странице: 1из 59

INTRODUCCIN

El lenguaje SQL (Structured Query Language) es una herramienta para organizar, gestionar y recuperar datos almacenados en una base de datos relacional, por tanto, permite la comunicacin con el sistema de gestin de base de datos, para ello hace uso de una combinacin del algebra relacional y construcciones del calculo relacional. Entre las principales caractersticas del SQL podemos destacar las siguientes:

Es un lenguaje para todo tipo de usuarios (administradores, desarrolladores y usuarios normales).

El usuario que emplea SQL especifica qu quiere, no donde ni cmo, siguiendo la sintaxis de las instrucciones.

Permite hacer distintas consulta de datos. Es posible manejarlo para consultas, actualizaciones, definicin de datos y control (especificacin de restricciones de seguridad).

Se puede usar de forma interactiva (el usuario escribe las rdenes desde el teclado de un terminal y al instante obtiene los resultados en la pantalla) y de forma embebida (mezclando las instrucciones SQL con las instrucciones propias del lenguaje, tal es el caso del lenguaje PL/SQL), SQL se puede utilizar en la mayora de los sistemas manejadores de bases de datos comerciales y libres, claro con las variantes que cada fabricante le puede agregar al estandart de SQL.

El funcionamiento es bien simple. Por un lado, se dispone de una mquina servidora con una base de datos que contiene los datos. Por otro lado, tenemos una mquina cliente con un usuario que ejecuta queries (sentencias) y el motor acta en funcin de la peticin del usuario.

HISTORIA
El lenguaje SQL fue desarrollado sobre un prototipo de gestor de bases de datos relacionales denominado SYSTEM R y diseado por IBM a mediados de los aos setenta. Inclua lenguajes de consultas, entre ellos SEQUEL (Structured English Query Language). Ms tarde se renombr como SQL.

En 1979 Oracle Corporation present la primera implementacin comercial de SQL, que estuvo disponible antes que otros productos de IBM. Por su parte, IBM desarroll productos herederos del prototipo SYSTEM R, como DB2 y SQL/DS.

El instituto ANSI (American National Standard Institute) adopt el lenguaje SQL como estndar para la gestin de bases de datos relacionales en octubre de 1986.

En 1987 lo adopta ISO (International Standarization Organization). En 1989 el estndar ANSI/ISO, revisado y ampliado, se llam SQL-89 o estndar SQL1. Tres aos ms tarde se aprueba el estndar ANSI SQL2 o SQL-92. En 1999 se aprueba el estndar SQL:1999 que introduce mejoras respecto al anterior. SQL:2003 revisa todos los apartados de SQL:1999 y aade uno nuevo, el apartado 14: SQL/XML.

En fin como pequeo final, algunos estndares y novedades que se incorporaron:

SQL 86-87: Interseccin de implementaciones existentes 1986 ANSI SQL y 1987 ISO SQL ANSI/ISO.

SQL 89 SQL1: Aade integridad referencial bsica (modificacin y borrado restringidos, no proporciona borrado en cascada).

SQL 92 SQL2: Nuevos tipos de datos. Funciones internas. Nuevas constantes simblicas. Combinacin externa. SQL dinmico. Eliminacin de vistas. Definiciones de dominio. ALTER y DROP. Mejor tratamiento de las restricciones.

SQL 1999 SQL3: Orientacin a objetos. Tipos definidos por el usuario. Roles. Disparadores. Procedimientos, funciones y mtodos definidos por el usuario.

SQL 2003: Nuevos tipos de datos. Introduce algunas caractersticas de XML. Funciones SQL que devuelven tablas. Nuevas extensiones de CREATE TABLE. Sentencia MERGE. Generador de secuencias. Tipos nuevos de columnas.

SQL 2006: ISO/IEC 9075-14:2006 Define las maneras en las cuales el SQL se puede utilizar conjuntamente con XML. Define maneras importar y guardar datos XML en una base de datos SQL, manipulndolos dentro de la base de datos y publicando el XML y los datos SQL convencionales en forma XML. Adems, proporciona facilidades que permiten a las aplicaciones integrar dentro de su cdigo SQL el uso de XQuery, lenguaje de consulta XML publicado por el W3C (World Wide Web Consortium) para acceso concurrente a datos ordinarios SQL y documentos XML.

SISTEMAS DE GESTIN DE BASE DE DATOS


Los sistemas de gestin de base de datos con soporte SQL ms utilizados son, por orden alfabtico:

DB2 Firebird Informix Interbase MySQL Oracle PostgreSQL Pervasive SQLite SQL Server Sybase ASE

TIPOS DE SENTENCIAS SQL


El Lenguaje SQL proporciona un gran conjunto de sentencias que se utilizan en varias tareas: como consultar datos de la base de datos, crear, actualizar y eliminar objetos de la base de datos, crear, actualizar y eliminar datos de los objetos, controlar el acceso a la base de datos y a los objetos. Dependiendo de las tareas, podemos clasificar las sentencias SQL en varios tipos. Se dividen en tres partes:

DDL (Definicin de datos) CREATE TABLE -> Aade una nueva tabla a la base de datos. DROP TABLE -> Suprime una tabla de la base de datos. ALTER TABLE -> Modifica la estructura de una tabla existente. CREATE VIEW -> Aade una nueva vista a la base de datos. DROP VIEW -> Suprime una vista a la base de datos. CREATE INDEX -> Construye un ndice para una columna. DROP INDEX -> Suprime un ndice para una columna. CREATE SYNONYM -> Define un alias para un nombre de tabla. DROP SYNONYM -> Suprime un alias para un nombre de tabla.

DML (Manipulacin de datos) SELECT -> Recupera datos de la base de datos. INSERT -> Aade nuevas filas de datos a la base de datos. DELETE -> Suprime filas de datos en la base de datos. UPDATE -> Modifica datos existentes en la base de datos.

DCL (Control de acceso, Transacciones y SQL Programtico) GRANT -> Concede privilegios de acceso a usuarios. REVOKE -> Suprime privilegios de acceso a usuarios. COMMIT -> Finaliza la transaccin actual. ROLLBACK -> Aborta la transaccin actual.
4

DECLARE -> Define un cursor para una consulta. OPEN -> Abre un cursos para recuperar resultados de una consulta. FETCH -> Recupera una fila de resultados de consulta. CLOSE -> Cierra un cursor.

DML (LENGUAJE DE DEFINICIN DE DATOS)

Permite la especificacin no slo de un conjunto de relaciones e informacin relativa a esas relaciones. El esquema de cada relacin El dominio de valores asociado a cada atributo Las restricciones de integridad El conjunto de ndices que se deben mantener por cada relacin Informacin de seguridad y autorizacin para cada relacin La estructura de almacenamiento fsico de cada relacin en disco

CREATE DATABASE La sentencia CREATE DATABASE sirve para crear la estructura que contendr a todos los objetos de la base de datos, como son las tablas, las vistas, las interrelaciones. La sintaxis es la siguiente: CREATE DATABASE nombre_de_la_base_datos

Posteriormente para poder empezar a crear los objetos que contendr, se debe de especificar que se va a hacer uso de ella, a travs de la siguiente sintaxis. USE nombre_de_la_base_datos

Ahora si, a empezar a trabajar sobre la base de datos..

Si deseara borrar la base de datos utilice, DROP DATABASE nombre_de_la_base_de_datos

CREATE TABLE La sentencia CREATE TABLE sirve para crear la estructura de una tabla no para rellenarla con datos, nos permite definir las columnas que tiene y ciertas restricciones que deben cumplir esas columnas. La sintaxis es como se muestra a continuacin:

nbtabla: nombre de la tabla nbcol: nombre de la columna tipo: tipo de dato de la columna, todos los datos almacenados en la columna debern ser de ese tipo, los cuales se muestran a continuacin.

TIPOS DE DATOS DE SQL

Tipo de dato BINARY

Sinnimos

Tamao

Descripcin Se puede almacenar cualquier tipo de datos en un campo de este tipo. Los datos no se traducen (por ejemplo, a texto). La forma en que se introducen los datos en un campo binario indica cmo aparecern al mostrarlos. Valores S y No, y campos que contienen solamente uno de dos valores.

VARBINARY 1 byte BINARY VARYING por BIT VARYING carcter

BIT

BOOLEAN LOGICAL LOGICAL1 YESNO INTEGER1 BYTE AUTOINCREMENT

1 byte

TINYINT

1 byte

Un nmero entero entre 0 y 255.

COUNTER

Se utiliza para campos contadores cuyo valor se incrementa automticamente al crear un nuevo registro. 8 bytes Un nmero entero comprendido entre 922.337.203.685.477,5808 y 922.337.203.685.477,5807. Una valor de fecha u hora entre los aos 100 y 9999 Un nmero de identificacin nico utilizado con llamadas a procedimientos remotos.

MONEY

CURRENCY

DATETIME

DATE TIME

8 bytes

UNIQUEIDENTIFIER GUID DECIMAL NUMERIC DEC

128 bits

17 bytes Un tipo de datos numrico exacto con valores comprendidos entre 1028 - 1 y - 1028 - 1. Puede definir la precisin (1 - 28) y la escala (0 - precisin definida). La precisin y la escala predeterminadas son 18 y 0, respectivamente. 4 bytes Un valor de coma flotante de precisin simple con un intervalo comprendido entre 3,402823E38 y 1,401298E-45 para valores negativos, y desde 1,401298E-45 a 3,402823E38 para valores positivos, y 0. Un valor de coma flotante de precisin doble con un intervalo comprendido entre 1,79769313486232E308 y 4,94065645841247E-324 para valores negativos, y desde 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos, y 0.

REAL

SINGLE FLOAT4 IEEESINGLE

FLOAT

DOUBLE FLOAT8 IEEEDOUBLE NUMBER

8 bytes

SMALLINT

SHORT INTEGER2 LONG INT INTEGER4 LONGBINARY GENERAL OLEOBJECT LONGTEXT LONGCHAR MEMO NOTE NTEXT TEXT(n) ALPHANUMERIC CHARACTER STRING VARCHAR CHARACTER VARYING NCHAR NATIONAL CHARACTER NATIONAL CHAR NATIONAL CHARACTER VARYING NATIONAL CHAR VARYING

2 bytes

Un entero corto entre 32.768 y 32.767.

INTEGER

4 bytes

Un entero largo entre 2.147.483.648 y 2.147.483.647.

IMAGE

Lo que se requiera

Desde cero hasta un mximo de 2.14 gigabytes. Se utiliza para objetos OLE.

TEXT

2 bytes Desde cero hasta un mximo de 2.14 por gigabytes. carcter. (Consulte las notas). 2 bytes Desde cero a 255 caracteres. por carcter. (Consulte las notas).

CHAR

Una restriccin es una caracterstica adicional que tiene una columna o una combinacin de columnas, por ejemplo: valores no nulos (campo requerido), definicin de ndice sin duplicados, definicin de clave principal y definicin de clave fornea (clave ajena o externa, campo que sirve para relacionar dos tablas entre s).

restriccin1: una restriccin de tipo 1 aparece dentro de la definicin de la columna.

restriccin2: una restriccin de tipo 2 es una restriccin que se define despus de definir todas las columnas de la tabla y afecta a una columna o a una combinacin de columnas.

Para escribir una sentencia CREATE TABLE se empieza por indicar el nombre de la tabla que queremos crear y a continuacin entre parntesis indicamos separadas por comas las definiciones de cada columna de la tabla, la definicin de una columna consta de su nombre, el tipo de dato que tiene y podemos aadir si queremos una serie de especificaciones que debern cumplir los datos almacenados en la columna, despus de definir cada una de las columnas que compone la tabla se pueden aadir una serie de restricciones, esas restricciones son las mismas que se pueden indicar para cada columna pero ahora pueden afectar a ms de una columna por eso tienen una sintaxis ligeramente diferente.

Una restriccin de tipo 1 se utiliza para indicar una caracterstica de la columna que estamos definiendo, tiene la siguiente sintaxis:

La clusula NOT NULL indica que la columna no podr contener un valor nulo, es decir que se deber rellenar obligatoriamente y con un valor vlido (equivale a la propiedad requerido S de las propiedades del campo).

La clusula CONSTRAINT sirve para definir una restriccin que se podr eliminar cuando queramos sin tener que borrar la columna. A cada restriccin se le asigna

un nombre que se utiliza para identificarla y para poder eliminarla cuando se quiera.

Como restricciones tenemos la de clave primaria (clave principal), la de ndice nico (sin duplicados), la de valor no nulo, y la de clave fornea.

La clusula PRIMARY KEY se utiliza para definir la columna como clave principal de la tabla. Esto supone que la columna no puede contener valores nulos ni pueden haber valores duplicados en esa columna, es decir que dos filas no pueden tener el mismo valor en esa columna.

En una tabla no puede haber varias claves principales, por lo que no podemos incluir la clusula PRIMARY KEY ms de una vez, en caso contrario la sentencia da un error. No hay que confundir la definicin de varias claves principales con la definicin de una clave principal compuesta por varias columnas, esto ltimo s est permitido y se define con una restriccin de tipo 2.

La clusula UNIQUE sirve para definir un ndice nico sobre la columna. Un ndice nico es un ndice que no permite valores duplicados, es decir que si una columna tiene definida un restriccin de UNIQUE no podrn haber dos filas con el mismo valor en esa columna. Se suele emplear para que el sistema compruebe el mismo que no se aaden valores que ya existen, por ejemplo si en una tabla de clientes queremos asegurarnos que dos clientes no puedan tener el mismo D.N.I. y la tabla tiene como clave principal un cdigo de cliente, definiremos la columna dni con la restriccin de UNIQUE.

La clusula NOT NULL indica que la columna no puede contener valores nulos, cuando queremos indicar que una columna no puede contener el valor nulo lo podemos hacer sin poner la clusula CONSTRAINT, o utilizando una clusula CONSTRAINT.

10

La ltima restriccin que podemos definir sobre una columna es la de clave fornea, una clave fornea es una columna o conjunto de columnas que contiene un valor que hace referencia a una fila de otra tabla , en una restriccin de tipo 1 se puede definir con la clusula REFERENCES, despus de la palabra reservada indicamos a qu tabla hace referencia, opcionalmente podemos indicar entre parntesis el nombre de la columna donde tiene que buscar el valor de referencia, por defecto coge la clave principal de la tabla2, si el valor que tiene que buscar se encuentra en otra columna de tabla2, entonces debemos indicar el nombre de esta columna entre parntesis, adems slo podemos utilizar una columna que est definida con una restriccin de UNIQUE, si la columna2 que indicamos no est definida sin duplicados, la sentencia CREATE nos dar un error.

Ejemplo: CREATE TABLE tab1 ( col1 INTEGER CONSTRAINT pk PRIMARY KEY, col2 CHAR(25) NOT NULL, col3 CHAR(10) CONSTRAINT uni1 UNIQUE, col4 INTEGER, col5 INT CONSTRAINT fk5 REFERENCES tab2 ); Con este ejemplo estamos creando la tabla tab1 compuesta por: una columna llamada col1 de tipo entero definida como clave principal, una columna col2 que puede almacenar hasta 25 caracteres alfanumricos y no puede contener valores nulos, una columna col3 de hasta 10 caracteres que no podr contener valores repetidos, una columna col4 de tipo entero sin ninguna restriccin, y una columna col5 de tipo entero clave fornea que hace referencia a valores de la clave principal de la tabla tab2

Una restriccin de tipo 2 se utiliza para definir una caracterstica que afecta a una columna o a una combinacin de columnas de la tabla que estamos definiendo, se escribe despus de haber definido todas las columnas de la tabla.
11

Tiene la siguiente sintaxis:

La sintaxis de una restriccin de tipo 2 es muy similar a la CONSTRAINT de una restriccin 1 la diferencia es que ahora tenemos que indicar sobre qu columnas queremos definir la restriccin. Se utilizan obligatoriamente las restricciones de tipo 2 cuando la restriccin afecta a un grupo de columnas o cuando queremos definir ms de una CONSTRAINT para una columna (slo se puede definir una restriccin1 en cada columna).

La clusula PRIMARY KEY se utiliza para definir la clave principal de la tabla. Despus de las palabras PRIMARY KEY se indica entre parntesis el nombre de la columna o las columnas que forman la clave principal. Las columnas que forman la clave principal no pueden contener valores nulos ni pueden haber valores duplicados de la combinacin de columnas, por ejemplo la tabla pedidos de nuestros ejemplos tiene una clave principal formada por idfab e idproducto, pues no pueden haber dos filas con la misma combinacin de idfab con idproducto (aci,0001 por ejemplo) pero s pueden haber dos filas con el valor aci en la columna idfab si tienen valores diferentes en la columna idproducto, y pueden haber dos filas con el mismo idproducto pero distinto idfab.

En una tabla no pueden haber varias claves principales, por lo que no podemos indicar la clusula PRIMARY KEY ms de una vez, en caso contrario la sentencia da un error.
12

La clusula UNIQUE sirve para definir un ndice nico sobre una columna o sobre una combinacin de columnas. Un ndice nico es un ndice que no permite valores duplicados. Si el ndice es sobre varias columnas no se puede repetir la misma combinacin de valores en dos o ms filas. Se suele emplear para que el sistema compruebe el mismo que no se aaden valores que ya existen.

La clusula FOREIGN KEY sirve para definir una clave fornea sobre una columna o una combinacin de columnas. Una clave fornea es una columna o conjunto de columnas que contiene un valor que hace referencia a una fila de otra tabla, en una restriccin 1 se puede definir con la clusula REFERENCES. Para definir una clave fornea en una restriccin de tipo 2 debemos empezar por las palabras FOREIGN KEY despus indicamos entre parntesis la/s columna/s que es clave fornea, a continuacin la palabra reservada REFERENCES seguida del nombre de la tabla a la que hace referencia, opcionalmente podemos indicar entre parntesis el nombre de la/s columna/s donde tiene que buscar el valor de referencia, por defecto coge la clave principal de la tabla2, si el valor que tiene que buscar se encuentra en otra/s columna/s de tabla2, entonces debemos escribir el nombre de esta/s columna/s entre parntesis, adems slo podemos utilizar una columna (o combinacin de columnas) que est definida con una restriccin de UNIQUE, de lo contrario la sentencia CREATE TABLE nos dar un error.

Ejemplo: CREATE TABLE tab1 (col1 INTEGER, col2 CHAR(25) NOT NULL, col3 CHAR(10), col4 INTEGER, col5 INT, CONSTRAINT pk PRIMARY KEY (col1), CONSTRAINT uni1 UNIQUE (col3), CONSTRAINT fk5 FOREIGN KEY (col5) REFERENCES tab2 );

13

ALTER TABLE

La sentencia ALTER TABLE sirve para modificar la estructura de una tabla que ya existe. Mediante esta instruccin podemos aadir columnas nuevas, eliminar columnas. Ten cuenta que cuando eliminamos una columna se pierden todos los datos almacenados en ella.

Tambin nos permite crear nuevas restricciones o borrar algunas existentes. La sintaxis puede parecer algo complicada pero sabiendo el significado de las palabras reservadas la sentencia se aclara bastante; ADD (aade), ALTER (modifica), DROP (elimina), COLUMN (columna), CONSTRAINT (restriccin).

La sintaxis es la siguiente:

La sintaxis de restriccion1 es idntica a la restriccin1 de la sentencia CREATE TABLE, te la describimos a continuacin.

14

La sintaxis de restriccion2 es idntica a la restriccin2 de la sentencia CREATE TABLE.

La clusula ADD COLUMN (la palabra COLUMN es opcional) permite aadir una columna nueva a la tabla. Como en la creacin de tabla, hay que definir la columna indicando su nombre, tipo de datos que puede contener, y si lo queremos alguna restriccin de valor no nulo, clave primario, clave fornea, e ndice nico, restriccion1 es opcional e indica una restriccin de tipo 1 que afecta a la columna que estamos definiendo.

Ejemplo: ALTER TABLE tab1 ADD COLUMN col3 integer NOT NULL CONSTRAINT c1 UNIQUE Con este ejemplo estamos aadiendo a la tabla tab1 una columna llamada col3 de tipo entero, requerida (no admite nulos) y con un ndice sin duplicados llamado c1.

Cuando aadimos una columna lo mnimo que se puede poner sera: ALTER TABLE tab1 ADD col3 integer En este caso la nueva columna admite valores nulos y duplicados.

15

Para aadir una nueva restriccin en la tabla podemos utilizar la clusula ADD restriccion2 (ADD CONSTRAINT...).

Ejemplo: ALTER TABLE tab1 ADD CONSTRAINT c1 UNIQUE (col3) Con este ejemplo estamos aadiendo a la tabla tab1 un ndice nico (sin duplicados) llamado c1 sobre la columna col3.

Para borrar una columna basta con utilizar la clusula DROP COLUMN (COLUMN es opcional) y el nombre de la columna que queremos borrar, se perdern todos los datos almacenados en la columna.

Ejemplo: ALTER TABLE tab1 DROP COLUMN col3

Tambin podemos escribir: ALTER TABLE tab1 DROP col3

El resultado es el mismo, la columna col3 desaparece de la tabla tab1. Para borrar una restriccin basta con utilizar la clusula DROP CONSTRAINT y el nombre de la restriccin que queremos borrar, en este caso slo se elimina la definicin de la restriccin pero los datos almacenados no se modifican ni se pierden.

Ejemplo: ALTER TABLE tab1 DROP CONSTRAINT c1

Con esta sentencia borramos el ndice c1 creado anteriormente pero los datos de la columna col3 no se ven afectados por el cambio.

16

DROP TABLE

La sentencia DROP TABLE sirve para eliminar una tabla. No se puede eliminar una tabla si est abierta, tampoco la podemos eliminar si el borrado infringe las reglas de integridad referencial (si interviene como tabla padre en una relacin y tiene registros relacionados, La integridad referencial es un sistema de reglas que utilizan la mayora de las bases de datos relacionales para asegurarse que los registros de tablas relacionadas son vlidos y que no se borren o cambien datos relacionados de forma accidental produciendo errores de integridad).

La sintaxis es la siguiente:

Ejemplo: DROP TABLE tab1 Elimina de la base de datos la tabla tab1.

CREATE INDEX

La sentencia CREATE INDEX sirve para crear un ndice sobre una o varias columnas de una tabla.

La sintaxis es la siguiente:

17

nbindi: nombre del ndice que estamos definiendo. En una tabla no pueden haber dos ndices con el mismo nombre de lo contrario da error.

nbtabla: nombre de la tabla donde definimos el ndice. A continuacin entre parntesis se indica la composicin del ndice (las columnas que lo forman). nbcol: nombre de la columna que indexamos. Despus del nombre de la columna podemos indicar cmo queremos que se ordenen las filas segn el ndice mediante las clusulas ASC/DESC.

ASC: la clusula ASC es la que se asume por defecto e indica que el orden elegido para el ndice es ascendente (en orden alfabtico si la columna es de tipo texto, de menor a mayor si es de tipo numrico, en orden cronolgico si es de tipo fecha).

DESC: indica orden descendente, es decir el orden inverso al ascendente. Podemos formar un ndice basado en varias columnas, en este caso despus de indicar la primera columna con su orden, se escribe una coma y la segunda columna tambin con su orden, as sucesivamente hasta indicar todas las columnas que forman el ndice.

Opcionalmente se pueden indicar las clusulas:

WITH PRIMARY indica que el ndice define la clave principal de la tabla, si la tabla ya tiene una clave principal, la sentencia CREATE INDEX dar error.

WITH DISALLOW NULL indica que no permite valores nulos en las columnas que forman el ndice.

WITH IGNORE NULL indica que las filas que tengan valores nulos en las columnas que forman el ndice se ignoran, no aparecen cuando recuperamos las filas de la tabla utilizando ese ndice.
18

Ejemplo: CREATE UNIQUE INDEX ind1 ON clientes (provincia, poblacion ASC, fecha_nacimiento ASC) Crea un ndice llamado ind1 sobre la tabla clientes formado por las columnas provincia, poblacin y fecha_nacimiento. Este ndice permite tener ordenadas las filas de la tabla clientes de forma que aparezcan los clientes ordenados por provincia, dentro de la misma provincia por poblacin y dentro de la misma poblacin por edad y del ms joven al ms mayor.

Al aadir la clusula UNIQUE el ndice no permitir duplicados por lo que no podra tener dos clientes con la misma fecha de nacimiento en la misma poblacin y misma provincia, para evitar el poblema sera mejor utilizar: CREATE INDEX ind1 ON fecha_nacimiento DESC) DROP INDEX clientes (provincia, poblacion ASC,

La sentencia DROP INDEX sirve para eliminar un ndice de una tabla. Se elimina el ndice pero no las columnas que lo forman. La sintaxis es la siguiente:

Ejemplo: DROP INDEX ind1 ON clientes Elimina el ndice que habamos creado en el ejemplo anterior.

19

DML (LENGUAJE DE MANIPULACION DE DATOS)

Veamos como utilizar las principales acciones para insertar, borrar y actualizar registros en una base de datos utilizando consultas SQL. INSERT. Para insertar datos en una relacin, o bien se especifica la tupla que se desea insertar o se formula una consulta cuyo resultado sea el conjunto de tuplas que se desean insertar DELETE. Un borrado se expresa de igual modo que una consulta. Solo se pueden borrar tuplas completas. UPDATE. En determinadas situaciones puede ser deseable cambiar un valor dentro de una tupla, sin cambiar todos los valores de la misma. INSERTAR REGISTROS MEDIANTE INSERT Para realizar esta operacin se debe tener en cuenta dos puntos importantes. El primero es que el dato que se inserte debe ser del mismo tipo que el campo, y el segundo punto a tener en cuenta que este dato a insertar no debe ser ms grande que el campo. Ejemplos de uso... Tabla profesor
34345 45456 457012 720117 12345 ABEL JAZMIN MAURO OMAR BLANCA INES MORENO JIMENEZ CASTRO BELLO VALENCIA BASILIO RIVERA RODRIGUEZ CAMACHO VAZQUEZ 459FDRTERT 4235ERWE MAURID123 1738DFDFSDS 1234UFG

20

Ej. Inserta en la tabla profesor la tupla siguiente use tres; insert into profesor values(5555,'alejandro','bello','camacho','eeee3444'); La tabla resultante ser:
5555 34345 45456 457012 720117 alejandro ABEL JAZMIN MAURO OMAR bello MORENO JIMENEZ CASTRO BELLO camacho BASILIO RIVERA RODRIGUEZ CAMACHO eeee3444 459FDRTERT 4235ERWE MAURID123 1738DFDFSDS

Use tres; Insert into alumno values(4444,daniel,bello,camacho,11111,historia,90) ; Tabla alumno


4343 3456 1234 4444 CARLOS AMADO MARIA JOSE OLMO ENCARNA NADA SECO HUESO camacho 3434345 5423565 5467779 11111 INGLES INGLES MATE historia 100 95 100 90

daniel bello

INSERT INTO clientes(nombre, direccion, ciudad, telefono, codempresa) VALUES ('Omar Bello', 'Mina 86', 'Tlapa, Gro.', '48485825', 23)

Tambin se podra haber evitado poner los nombres de los campos. Cabe aclarar que va a tomar SQL la primera columna como inicio. INSERT Gro.', INSERT VALUES INSERT 10) INTO clientes VALUES ('Omar Bello', 'Mina 86', 'Tlapa, '48485825', 23) INTO NombreTabla (Id, Nombre, Fecha, Descripcin) (1, Juan, 2006/05/02, 10) INTO NombreTabla VALUES (1, Juan, 2006/05/02,

21

INSERT INTO NombreTabla (Id, Nombre, Fecha, Descripcin) SELECT Id, Nombre, Fecha, Descripcin FROM NombreTabla2 Inserta el resultado dentro de una tabla siempre y cuando tenga los mismos campos.. MODIFICAR O ACTUALIZA REGISTROS MEDIANTE UPDATE SQL al encontrar un UPDATE checa la condicin WHERE, si esta es verdadera se realiza la actualizacin. Un ejemplo de UPDATE, donde se corregir un nombre que se insert de manera incorrecta:
Ejemplo
4343 4444 CARLOS AMADO daniel bello NADA camacho 3434345 11111 INGLES 100 historia 90

Ejemplo.

Use tres; Update alumno set nombre=daniela where nombre=daniel La tabla resultante ser.
4343 4444 CARLOS AMADO daniela bello NADA camacho 3434345 INGLES 100 11111 historia 90

Ejemplo

use tres; update alumno set calficacion = calficacion * 1.05 where calficacion=90; la tabla resultante sera:
4343 4444 CARLOS daniela AMADO bello NADA camacho 3434345 INGLES 100 11111 historia 94,5

UPDATE clientes SET nombre= 'Carlos Rios' WHERE nombre= 'Carlos Rioso' UPDATE NombreTabla SET WHERE Id=21 nombre=Jess, Fecha=2006/05/02

22

BORRAR REGISTROS MEDIANTE DELETE


La sentencia DELETE puede borrar un solo registro como tambin puede borrar varios registros a la vez, como tambin puede borrar todos los registros de la base de datos.

Tabla profesor
34345 45456 457012 720117 12345 ABEL JAZMIN MAURO OMAR BLANCA INES MORENO JIMENEZ CASTRO BELLO VALENCIA BASILIO RIVERA RODRIGUEZ CAMACHO VAZQUEZ 459FDRTERT 4235ERWE MAURID123 1738DFDFSDS 1234UFG

use tres; DELETE FROM profesor where nombre='BLANCA INES';

La tabla resultante ser.


34345 45456 457012 720117 ABEL JAZMIN MAURO OMAR MORENO JIMENEZ CASTRO BELLO BASILIO RIVERA RODRIGUEZ CAMACHO 459FDRTERT 4235ERWE MAURID123 1738DFDFSDS

Tabla alumno
4343 3456 1234 CARLOS AMADO MARIA OLMO JOSE ENCARNA NADA SECO HUESO 3434345 INGLES 5423565 INGLES 5467779 MATE 100 95 100

use tres; DELETE FROM alumno where id_alumno between 1234 and 3456;
La tabla resultante sera: 4343 CARLOS AMADO NADA 3434345 INGLES 100

Si quiero borrar todos los clientes que son de la ciudad de Chilpancingo:

DELETE FROM clientes WHERE ciudad= 'Chilpancingo' DELETE FROM clientes WHERE Id=21

23

Si quiero borrar un registro en especial podra utilizar el campo clave de la tabla, seria de la siguiente manera. DELETE FROM clientes WHERE id_cliente = 501

SENTENCIA SELECT
La sentencia select es la ms importante dentro del SQL, por el potencial que tiene ya que en realidad en una base de datos las operaciones que ms se realizan son las consultas.

SELECT: o Corresponde a la operacin de Proyeccin o Permite listar los atributos que se desean en el resultado de la consulta

FROM: o Especifica los nombres de la(s) tabla(s) de donde los datos sern seleccionados o Cuando son varias tablas las que aparecen en el FROM el sistema ejecuta una operacin de Producto Cartesiano o de join

WHERE: o Corresponde a la operacin de Seleccin o La condicin se hace sobre los atributos de las tablas del FROM

24

Ejemplo: Realizar una consulta que muestre el nombre y la fecha de nacimiento de todos los clientes que tengan como nombre Raul. select nombre, fecha_registro from CLIENTE where nombre= Raul nombre Raul Raul Raul Raul fecha_registro 28/04/09 30/04/09 03/05/09 14/05/09

Usar un alias en los atributos nos permite cambiar el nombre de los atributos de la respuesta a la consulta.

Cuando asociamos un alias con una relacin decimos que creamos una variable de tupla. Estas variables de tuplas se definen en la clusula FROM despus del nombre de la relacin. select P.titulo from PELICULA P where titulo = Arrncame la vida titulo Arrncame la vida

Operadores lgicos AND Evala dos condiciones y devuelve un valor de verdad solo si ambas son ciertas. Evala dos condiciones y devuelve un valor de si alguna de las dos es cierta. Devuelve el valor contrario de la expresin.

OR

NOT

25

Ejemplo: Realizar una consulta que enliste el nombre y la calle de los clientes cuyo nombre es Ral y que vivan en la calle San francisco select nombre, calle from CLIENTE where. nombre=Ral AND calle=San francisco nombre Ral calle San francisco

Ejemplo: Mostrar el nombre del cliente y la calle en donde vive, de la relacin cliente cuyo nombre sea Ral o que la calle sea San Francisco'.

select nombre, calle from CLIENTE where. nombre=Ral OR calle=San francisco nombre Ral Ral Ral Ral calle San francisco Galeana Allende Hidalgo

La consulta mostrar todos los nombres de los clientes y calle cuyos valores sean Raul, que no vivan en la calle San francisco select nombre, calle from CLIENTE where nombre=Raul and nombre Raul Raul Raul calle Galeana Allende Hidalgo

NOT (calle=San francisco)

26

Operadores de comparacin

<, >, <=, >=,= Y <>

En la consulta se mostraran los ttulos de las pelculas que se estrenaron en el 2008 y cuyo pas de produccin es diferente de Espaa. select titulo, pais_produccion from PELICULA where ao_estreno = 2008 AND pais_produccion <> Espaa Titulo Piratas del Caribe el fin del mundo Soy leyenda Batman El caballero de la noche Arrncame la vida Las crnicas de narnia Quieres ser millonario El juego del miedo pais_produccion Estados unidos Estados unidos Estados unidos Mxico Estados unidos y reino unido Reino unido Estados unidos

La consulta muestra el id_cliente, su nombre del cliente y su apellido, pero que el id del cliente sea mayor que 15. select id_cliente, nombre, a_paterno from CLIENTE where id_cliente > 15 id_cliente 16 17 18 19 20 21 22 23 Nombre Manuel Oscar Shania Jorge Adalid Lourdes Viviana Israel a_paterno Ramirez Rivera Ortiz Ruiz Mancilla Ponce Navarrete Rosas

La consulta muestra el id_cliente, su nombre del cliente y su apellido, pero que el id del cliente sea menor que 15. select id_cliente, nombre, a_paterno from CLIENTE where id_cliente < 15

27

id_cliente 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Nombre Abel Mauricio Socrates Dhamar Rogelio Luisa Yuri Osmar Julio Ignacio Eugenio Rosario Roselia Piedad

a_paterno Cantu Islas Ortiz Vazquez Juarez Romero Melchor Martinez Zaragoza Narvaes Larios Huerta Pereda Manzano

La consulta muestra el nombre del cliente, pero que el id del cliente sea mayor o igual que 10 y menor o igual que 20. select id_cliente, nombre, a_paterno from CLIENTE where id_cliente >= 10 AND id_cliente <= 20 id_cliente 10 11 12 13 14 15 20 Nombre Ignacio Eugenio Rosario Roselia Piedad Celina Adalid a_paterno Narvaes Larios Huerta Pereda Manzano Chavez Mancilla

Tambin incluye el operador de comparacin BETWEEN, que se utiliza para valores comprendidos. La consulta muestra el nombre del cliente, pero que el id del cliente sea mayor o igual que 10 y menor o igual que 20. select nombre from CLIENTE where id_cliente BETWEEN 10 and 20 id_cliente 10 11 12 13 14 15 20 nombre Ignacio Eugenio Rosario Roselia Piedad Celina Adalid a_paterno Narvaes Larios Huerta Pereda Manzano Chavez Mancilla
28

FUNCIONES DE AGREGACIN Funcin SUM Devuelve la suma del conjunto de valores contenido en un campo especfico 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 un clculo 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 agregadas de SQL).

Ejemplo:

En la siguiente consulta obtendremos la suma de todos los precios de venta de las pelculas, pues sum realiza la suma de los valores que tiene cada tupla sobre la columna precio_venta, de la tabla pelculas

SELECT Sum(precio_venta) AS Total FROM pelcula

TABLA pelicula Idpelicula 0010A titulo King Kong 0500A 0100A Barnye Matrix A B 55 88 199 250 clasificacion B precio_renta 70 precio_venta 215

Resultado: 664 La suma del conjunto de valores de la columna precio venta es 664

29

Funcin AVG Propsito: Devuelve el promedio de los valores de un grupo definido por AVG o por GROUP BY. Sintaxis: AVG (expresin) Argumentos: Por lo general expresin es el nombre de una columna, pero puede ser una expresin ms compleja. Se usa ALL o DISTINCT para modificar la expresin. El valor que devuelve coincide con el tipo de datos de expresin. Ejemplo: Se desea calcular el promedio de adeudos todos los adeudos mayores a 500 pesos.

TABLA renta Idrenta 009 010 011 012 Respuesta SELECT AVG (adeudos) FROM renta WHERE adeudos >500 Solo tomamos los valores mayores a 500, y calculamos el promedio con la funcin AVG. fecha_renta 12-nov-2008 14-nov-2008 15-nov-2008 16-nov-2008 fecha_devolucion 15-nov-2008 18-nov-2008 19-nov-2009 20-nov-2009 Adeudos 300 700 600 800

Resultado: 700

30

Funcin COUNT Calcula el nmero de registros devueltos por una consulta. Su sintaxis es la siguiente: Count(expr)

En donde expr contiene el nombre del campo que desea contar. 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 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 en cuenta qu valores se almacenan cuenta los registros que tienen campos null a menos que expr sea el carcter comodn asterisco (*). Si utiliza un asterisco, Count calcula el nmero total de registros, incluyendo aquellos que contienen campos null. Count(*) es

considerablemente ms rpida que Count(Campo). No se debe poner el asterisco entre dobles comillas ('*'). Ejemplo: Se desea saber la cantidad de pelculas registradas.

TABLA pelicula idpelicula 001A titulo King Kong 5000A 1800A Barnye Matrix A B 55 88 199 250 clasificacion B precio_renta 70 precio_venta 215
3 registros

Respuesta: SELECT Count(*) AS Total FROM pelicula

Resultado:

3
31

Si expr identifica a mltiples campos, la funcin Count cuenta un registro slo si al menos uno de los campos no es Null. Si todos los campos especificados son Null, no se cuenta el registro. Hay que separar los nombres de los campos con ampersand (&).

Ejemplo: Se desea conocer la cantidad de clientes que tienen al menos un nmero telefnico de casa o de celular TABLA clientes

id_cliente 001A 002A 003A

nombre ABEL JUAN KAIN

ciudad TLAPA PUEBLA ALPOYECA

tel_casa 59900023 89922543 NULL

tel_cel 573390222 NULL NULL

001 y 002 si se cuentan por que existe ms de un valor diferente a NULL en las columnas referidas en la siguiente consulta.

Respuesta: SELECT Count(tel_casa & tel_cel) AS Total FROM clientes

Resultado: 2

Funciones MAX, MIN

Devuelven el mnimo o el mximo de un conjunto de valores contenidos en un campo especifico de una consulta. Su sintaxis es: Min(expr) Y Max(expr)

32

En donde expr es el campo sobre el que se desea realizar el clculo. Expr puede 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 agregadas de SQL).

Ejemplo: Se desea obtener la pelcula con mayor y con menor costo en su precio de renta de la tabla pelculas.

TABLA pelicula Idpelicula 0010A 0500A 0100A titulo King Kong Barnye Matrix clasificacion B A B precio_renta precio_venta 70 55 88 215 199 250

Respuesta: Para la pelcula que tiene el costo ms bajo. SELECT Min(precio_renta) AS ElMin FROM peliculas

Resultado: 55

Para la pelcula que tiene el costo ms alto. SELECT Max(precio_renta) AS ElMax FROM peliculas

Resultado: 70

33

La clusula GROUP BY La clusula GROUP BY en SQL permite realizar agrupaciones de registros de una tabla. Examinemos la siguiente tabla que contiene datos de los empleados de una empresa.

Si en esta tabla deseramos calcular el salario medio de los empleados agrupados por oficio, deberamos escribir una sentencia SQL que agrupara las filas con un mismo nombre de oficio. De cada uno de los grupos que se formen se aplicara la funcin AVG sobre el campo salario. De la misma forma, si quisiramos contar el nmero de empleados de cada departamento deberamos realizar un agrupamiento de los empleados por el campo departamento. De cada uno de los grupos formados se aplicara la funcin COUNT. La sintaxis bsica de la clusula GROUP BY en una sentencia SELECT es la siguiente: SELECT campos FROM tablas WHERE condiciones GROUP BY campo1, campo2, campo3... ORDER BY campo1, campo2, campo3... La clusula GROUP BY siempre va detrs de la clusula WHERE (si es que la hay), y delante siempre de ORDER BY (si es que realizamos la ordenacin de acuerdo un campo determinado). select oficio,avg(salario) from emple group by oficio;

34

Se quiere calcular a continuacin el nmero de empleados de cada departamento. En esta ocasin debemos realizar un agrupamiento de registros por el campo dept_no. De cada grupo que se forme debemos contar el nmero de registros que forman cada grupo. La sentencia SQL quedara: select dept_no, count(*) from emple group by dept_no order by dept_no;

Hemos empleado la clusula ORDER BY para mostrar el resultado ordenado por nmero de departamento. La clusula GROUP BY DEPT_NO obliga a COUNT a contar las filas que se han agrupado por cada departamento. Veamos otro ejemplo ms. Queremos obtener por cada agrupamiento de departamento y oficio el salario medio. Es decir, por cada departamento queremos calcular el salario medio agrupado por oficio. En este caso debemos agrupar los registros por nmero de departamento, y dentro de cada departamento por oficio. select dept_no,oficio,avg(salario) from emple group by dept_no,oficio;

35

En una sentencia SELECT pueden aparecer juntos tanto la clusula WHERE como la clusula GROUP BY. Si quisiramos calcular, por ejemplo, el salario medio de cada departamento sin tener en cuenta aquellos empleados que cobren menos de 1000 euros, la sentencia correcta en SQL sera: select dept_no,avg(salario) from emple where salario>=1000 group by dept_no; En este caso no se tiene en cuenta el empleado 1005 para realizar la media de salarios.

La clusula HAVING La clusula HAVING permite especificar condiciones a los agrupamientos realizados con GROUP BY. Del mismo modo que existe la clusula WHERE para filas individuales en la sentencia SELECT, tambin se puede especificar una condicin para grupos de registros. Al utilizar la clusula HAVING no se incluyen aquellos grupos que no cumplan una determinada condicin. La clusula HAVING siempre va detrs de la clusula GROUP BY y no puede existir sin sta. Si queremos visualizar, por ejemplo, el salario medio de cada departamento pero slo de aquellos cuyo salario medio sea mayor de 1200, la sentencia en SQL sera: select dept_no,avg(salario) from emple group by dept_no having avg(salario)>1200;

36

Si, por ejemplo, queremos obtener el nmero de empleados de cada departamento pero slo de aquellos que tengan ms de 2 empleados, la manera correcta sera: select dept_no,count(*) from emple group by dept_no having count(*)>2; Si queremos ordenar la salida ordenada descendentemente por nmero de empleados emplearamos la clusula ORDER BY. select dept_no,count(*) from emple group by dept_no having count(*)>2 order by count(*) desc; La clusula WHERE y la clusula HAVING pueden aparecer juntas en la misma sentencia SQL. La clusula HAVING es similar a la clusula WHERE, pero trabaja con grupos de filas en vez que con filas individuales de una tabla. Si quisiramos calcular, por ejemplo, el salario medio de cada departamento sin tener en cuenta aquellos empleados que cobren menos de 1000 euros, y adems no queremos que en resultado se visualicen aquellos departamentos cuyo salario sea menor que 1200, la sentencia correcta en SQL sera: select dept_no,avg(salario) from emple where salario>1000 group by dept_no having avg(salario)>1200;

37

SUBCONSULTAS Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT que llamaremos consulta principal. Se puede encontrar en la lista de seleccin, en la clusula WHERE o en la clusula HAVING de la consulta principal. Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre parntesis, no puede contener la clusula ORDER BY, ni puede ser la UNION de varias sentencias SELECT, adems tiene algunas restricciones en cuanto a nmero de columnas segn el lugar donde aparece en la consulta principal. Estas restricciones las iremos describiendo en cada caso. Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta por cada fila de la consulta principal. Se aconseja no utilizar campos calculados en las subconsultas, ya que ralentizan la consulta. Las consultas que utilizan subconsultas suelen ser ms fciles de interpretar por el usuario. Referencias externas A menudo, es necesario, dentro del cuerpo de una subconsulta, hacer referencia al valor de una columna en la fila actual de la consulta principal, ese nombre de columna se denomina referencia externa. Una referencia externa es un nombre de columna que estando en la subconsulta, no se refiere a ninguna columna de las tablas designadas en la FROM de la subconsulta sino a una columna de las tablas designadas en la FROM de la consulta principal. Como la subconsulta se ejecuta por cada fila de la consulta principal, el valor de la referencia externa ir cambiando.
38

Ejemplo: SELECT idejemplar, disponibilidad, (SELECT MIN(precio_renta) FROM pelicula WHERE precio_renta > 60) FROM ejemplar WHERE disponibilidad=true; En este ejemplo la consulta principal es SELECT... FROM ejemplar. La subconsulta es ( SELECT MIN(precio_renta) FROM pelicula WHERE precio_renta >60 ). En esta subconsulta tenemos una referencia externa (disponibilidad) es un campo de la tabla ejemplar (origen de la consulta principal). Anidar subconsultas Las subconsultas pueden anidarse de forma que una subconsulta aparezca en la clusula WHERE (por ejemplo) de otra subconsulta que a su vez forma parte de otra consulta principal. En la prctica, una consulta consume mucho ms tiempo y memoria cuando se incrementa el nmero de niveles de anidamiento. La consulta resulta tambin ms difcil de leer, comprender y mantener cuando contiene ms de uno o dos niveles de subconsultas. Ejemplo: SELECT numemp, nombre FROM empleados WHERE numemp = (SELECT rep FROM pedidos WHERE clie = (SELECT numclie FROM clientes WHERE nombre = 'Julia Antequera'))

En este ejemplo, por cada lnea de pedido se calcula la subconsulta de clientes, y esto se repite por cada empleado, en el caso de tener 10 filas de empleados y 200 filas de pedidos (tablas realmente pequeas), la subconsulta ms interna se ejecutara 2000 veces (10 x 200).

39

Subconsulta en la lista de seleccin Cuando la subconsulta aparece en la lista de seleccin de la consulta principal, en este caso la subconsulta, no puede devolver varias filas ni varias columnas, de lo contrario se da un mensaje de error. Muchos SQLs no permiten que una subconsulta aparezca en la lista de seleccin de la consulta principal pero eso no es ningn problema ya que normalmente se puede obtener lo mismo utilizando como origen de datos las dos tablas. El ejemplo anterior se puede obtener de la siguiente forma: SELECT numemp, nombre, MIN(fechapedido)FROM empleados LEFT JOIN pedidos ON empleados.numemp = pedidos.rep GROUP BY numemp, nombre En la clusula FROM En la clusula FROM se puede encontrar una sentencia SELECT encerrada entre parntesis pero ms que subconsulta sera una consulta ya que no se ejecuta para cada fila de la tabla origen sino que se ejecuta una sola vez al principio, su resultado se combina con las filas de la otra tabla para formar las filas origen de la SELECT primera y no admite referencias externas. En la clusula FROM vimos que se poda poner un nombre de tabla o un nombre de consulta, pues en vez de poner un nombre de consulta se puede poner directamente la sentencia SELECT correspondiente a esa consulta encerrada entre parntesis.

40

FUNCIONES DE CADENAS DE CARACTERES


Funcin CHR(n) ASCII(cad) CONCAT(cad1,ca d2) LOWER(cad) Cometido Devuelve el carcter cuyo valor codificado es n. Devuelve el valor ascii de cad. Devuelve cad1 concatenada con cad2. Esta funcin es esquivalente al operador ||. Devuelve la cadena cad con todas sus letras convertidas a minsculas. Devuelve la cadena cad con todas sus letras convertidas a maysculas. Devuelve cad con el primer caracter en maysculas. Devuelve cad1 con longitud n, y ajustada a la derecha, rellenando por la izquierda con cad2. Devuelve cad1 con longitud n, y ajustada a la izquierda, rellenando por la derecha con cad2. Devuelve cad en la que cada ocurrencia de la cadena ant ha sido sustituida por la cadena nue. Devuelve la sudcadena de cad compuesta por n caracteres a partir de la posicion m. Devuelve la longitud de cad. Ejemplo select chr(65) from dual; select ascii('A') from dual; select concat(concat(nombre,' es '),oficio) from emp; select lower('MinUsCulAs') from dual; Resultado A 65 Cano es Presidente, etc. minusculas

UPPER(cad)

select upper('maYuSCulAs') from dual;

MAYUSCULAS

INITCAP(cad) LPAD(cad1,n,cad2 ) RPAD(cad1,n,cad2 ) REPLACE(cad,ant, nue) SUBSTR(cad,m,n)

select initcap('isabel') from dual; select lpad('P',5,'*') from dual;

Isabel ****P

select rpad('P',5,'*') from dual;

P****

select replace('digo','i','ie') from dual;

diego

select substr('ABCDEFG',3,2) from dual;

CD

LENGTH(cad)

select length('cadena') from dual;

REUNIN DE RELACIONES

Las consultas multitabla o JOINS, tambin denominadas combinaciones o composiciones, permiten recuperar datos de dos o mas tablas segn las relaciones lgicas entre ellas. Las combinaciones indican como deber utilizar SQL Server los datos de una tabla para seleccionar las filas de otra tabla.

Una condicin de combinacin define la forma en la que dos tablas se relacionan en una consulta al:

a)

Especificar la columna de cada tabla que debe usarse para la combinacin. Una condicin de combinacin tpica especifica una clave externa de una tabla y su clave asociada en otra tabla.

41

b)

Especificar un operador lgico (=, <>, etc.) para usarlo en los valores de comparacin de las columnas.

Por ejemplo la siguiente consulta combina dos tablas cliente y cuenta que se separan por comas en la clausula FROM. Select nomcli, nrocuenta, monto from cliente,cuenta where codcli=codcliente; Tambin la siguiente expresin genera lo mismo. Select clientes.nomcli, cuenta.nrocuenta, cuenta.monto from cliente, cuenta where codcli=codcliente; Tabla cliente
codcli 1 2 3 Nomcli Juan Penas Rosas Pepe Lpez Caste Luz Mara y Jos Dircli Calle Mina # 2 Calle Revolucin S/N Calle Cuauhtmoc S/N telcli 7574715203 7574715203 7574715203 sexo Masculino Masculino Femenino

Tabla cuenta
nrocuenta 123456780 123456782 123456783 codcliente 1 2 3 Codigocuenta X1 X2 x3 Fechareg 2008-01-15 2008-03-15 2008-03-01 monto 1500 15250 100 codigomoneda dlar Pesos euros

Tabla resultante
nomcli Juan Penas Rosas Pepe Lpez Caste Luz Mara y Jos nrocuenta 123456780 123456782 123456783 monto 1500 15250 100

42

Join de tres o ms tablas Un JOIN de tres o ms tablas es una composicin entre las mismas basada en la coincidencia exacta de tres o ms columnas relacionadas.

Por ejemplo, en la siguiente consulta se relacionan las tablas PEDIDOS, CLIENTES y VENTAS, para obtener los pedidos superiores a los 25000,

incluyendo el nombre del vendedor que tomo el pedido incluyendo el nombre del cliente que lo solicito. Select numpedido,importe, empresa, nombre from pedidos,

clientes, ventas Where clie=numclie and rep=numempreado and importe >25000;

Inner join Combina registros de dos tablas siempre que existan valores coincidentes en un campo comn.

Su sintaxis es: SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 comp tabla2.campo2

En donde:

Tabla1 y tabla2. Son los nombres de las tablas desde las que se combinan los registros.

Campo1 y campo2. Son los nombres de los campos que se combinan. Si no son numricos, los campos deben ser del mismo tipo de datos y contener el mismo tipo de datos, pero no tienen que tener el mismo nombre.

43

Comp. Es cualquier operando 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 registros de dos tablas siempre que haya concordancia de valores en un campo comn en ambas tablas. Se puede utilizar INNER JOIN con las tablas Departamentos y Empleados para seleccionar todos los empleados de cada departamento. El ejemplo siguiente muestra como podra combinar las tablas clientes y cuenta basndose en el campo cod_cli: SELECT nomcli, nrocuenta,monto FROM clientes INNER JOIN

cuenta ON clientes.codcli=cuenta.codclie;
Tabla clientes Codcli 1 2 3 Nomcli Juan Penas Rosas Pepe Lpez Caste Luz Mara y Jos Dircli Calle Mina # 2 Calle Revolucin S/N Calle Cuauhtmoc S/N telcli 7574715203 7574715203 7574715203 sexo Masculino Masculino Femenino

Tabla cuenta
nrocuenta 123456780 123456782 123456783 codclie 1 2 3 codigocue nta X1 X2 x3 Fechareg 2008-01-15 2008-03-15 2008-03-01 monto 1500 15250 100 codigomoneda dolar Pesos euros

44

El resultado de la siguiente reunin natural es como se muestra a continuacin:


Nomcli Juan Penas Rosas Pepe Lpez Caste Luz Mara y Jos nrocuenta 123456780 123456782 123456783 monto 1500 15250 100

Unin La clausula unin permite combinar los resultados de dos o ms consultas en una nica tabla. La operacin UNION combina las filas de dos conjuntos de resultados, podran aparecer filas duplicadas; sin embargo, la clausula UNION elimina las filas duplicadas. Ejemplo: Select idfab, idproducto UNION select distinct importe >3000; from productos where precio >2000 fab, producto from pedidos where

45

VISTAS (VIEW) Definicin: Una vista (VIEW) es una tabla lgica (no fsica) que se basa en otras tablas o vistas, cuyo contenido est definido por una consulta.

Funciona como una ventana a travs de la cual pueden visualizarse o modificarse datos de las tablas. Una vista no contiene datos en si misma. Las tablas sobre las que se define una vista se llaman tablas base. Al igual que una tabla real, una vista consta de un conjunto de columnas y filas de datos con un nombre. La nica diferencia es que slo se almacena de ellas la definicin, no los datos. Las vistas son una especie de tablas virtuales; es decir, no existen fsicamente sino que se forman mediante la seleccin y/o filtrado de los componentes de otras tablas, una vista puede ser definida en base a una lista previa. Esto significa que pueden crearse dependencia entre las vistas. Los datos que se recuperan mediante una consulta a una vista se presentarn igual que los de una tabla. Al igual que sucede con una tabla, se pueden insertar, actualizar, borrar y seleccionar datos en una vista. Aunque siempre es posible seleccionar datos de una vista, en algunas condiciones existen restricciones para realizar el resto de las operaciones sobre vistas. Una vista se especifica a travs de una expresin de consulta (una sentencia SELECT) que la calcula y que puede realizarse sobre una o ms tablas. Sobre un conjunto de tablas relacionales se puede trabajar con un nmero cualquiera de vistas.

46

Ventajas: Conseguir un acceso restringido a la base de datos, ya que la vista puede mostrar slo una porcin especfica. Sustituir consultas complejas por varias consultas ms simples que emplean vistas. Por ejemplo, una seleccin sobre una vista definida sobre varias tablas ser ms fcil de realizar que si tuviramos que utilizar la combinacin (JOIN) de esas tablas para realizarla. Proveer independencia de datos. Proveer distintas maneras de ver los mismos datos, adaptados a cada usuario o aplicacin. Permitir el acceso a grupos de usuarios de acuerdo con unos criterios concretos.

Desventajas: Slo puede crear vistas en la base de datos actual. Si se elimina la tabla base, se alteran las vistas. No puede asociar con las vistas reglas ni definiciones DEFAULT. Los desencadenadores AFTER no se pueden asociar con las vistas; slo se pueden asociar los desencadenadores INSTEAD OF. La consulta que define la vista no puede incluir las clusulas COMPUTE ni COMPUTE BY, y tampoco puede incluir la palabra clave INTO. La consulta que define la vista no puede incluir la clusula ORDER BY, a menos que tambin haya una clusula TOP en la lista de seleccin de la instruccin SELECT. La consulta que define la vista no puede incluir la clusula OPTION que especifica una sugerencia de consulta. La consulta que define la vista no puede incluir la clusula TABLESAMPLE.

47

No se pueden definir definiciones de ndice de texto completo en las vistas. No se pueden crear vistas temporales, ni vistas dentro de tablas temporales.

Vistas simples y complejas En funcin de las operaciones de manipulacin de datos (DML), es decir, INSERT, UPDATE y DELETE, que se pueden realizar a travs de ellas, existen dos categoras de vistas: Simples: Extraen los datos de una sola tabla. No contienen funciones ni grupos de datos (GROUP BY). Siempre pueden realizarse operaciones DML a travs de ellas. Complejas: Extraen los datos de mltiples tablas. Contienen funciones o grupos de datos (GROUP BY). Es frecuente que no permitan operaciones DML.

CREAR UNA VISTA Se emplea la sentencia CREATE VIEW, que incluye una subconsulta (subquery) para determinar los datos a ser mostrados a travs de la vista. Sintaxis: CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW <vista> [(<alias>[, <alias>] )] AS <subconsulta> [WITH CHECK OPTION [CONSTRAINT <restriccin>]] [WITH READ ONLY [CONSTRAINT <restriccin>]];

48

OR REPLACE

Se utiliza por si la vista ya estuviera creada anteriormente. En ese caso, la sustituye por la nueva definicin.

FORCE NO FORCE

Crea la vista sin comprobar si las tablas base existen. Crea la vista slo si las tablas base de donde se extraen los datos existen realmente (es la opcin por defecto).

<vista> <alias>

Es el nombre de la vista (debe ser diferente al de la tabla base). Especifica alias para las expresiones/columnas seleccionadas por la subconsulta. El nmero de alias debe coincidir con el nmero de expresiones seleccionadas por la vista.

<subconsulta>

Es una sentencia SELECT completa. Se pueden emplear alias para las columnas en la lista que sigue al SELECT.

WITH CHECK OPTION <restriccin>

Especifica que solo las filas accesibles para la vista pueden ser insertadas o modificadas.

Nombre asignado a la restriccin CHECK OPTION o a la restriccin READ ONLY.

WITH READ ONLY

Asegura que no podrn ejecutarse operaciones de DML a travs de la vista. La vista slo permite consultas.

Ejemplo: Crear una vista que contiene los apellidos y nombre de los clientes del departamento Ventas. Asegurarse que a travs de ella slo pueden modificarse, eliminarse o aadirse los ms clientes de dicho departamento.

49

CREATE VIEW ClientesDepVentas AS SELECT apellidos, nombre FROM clientes WHERE dep=Ventas WITH CHECK OPTION;

apellidos Gaspar Garca

nombre Martha

Lpez Caste Mario Tabla Morales resultante deMara la vista Gonzalez

Visualizar la estructura de una vista DESCRIBE <vista>;


Donde:

<vista> Es el nombre de la vista.

Listar las vistas existentes: SELECT * FROM USER_VIEWS; Indicaciones y restricciones de uso: La subconsulta puede contener una sentencia SELECT de sintaxis compleja, incluyendo combinaciones (JOIN), agrupamientos (GROUP BY), y subconsultas internas. Pero no puede incluir una clusula ORDER BY. Si se desea ordenar, esto deber hacerse mediante una consulta posterior que utilice la vista.

Empleo de Alias Los alias se pueden definir dentro de la subconsulta o fuera de ella, justo despus del nombre la vista.

Ejemplo: Crear una vista que contiene los apellidos y nombre de los clientes del departamento Ventas renombrando dichas propiedades como Last_name y First_name.

50

Opcin a) Alias dentro de la subconsulta CREATE VIEW ClientesDepVentas AS SELECT apellidos Last_name, nombre First_name FROM clientes WHERE dep=Ventas;
Last_Name Gaspar Garca Lpez Caste Gonzalez Morales First_name Martha Mario Mara

Tabla resultante opcin a).

Opcin b) Alias fuera de la subconsulta CREATE VIEW clientesDepVentas (Last_name, First_name) AS SELECT apellidos, nombre FROM clientes WHERE dep=Ventas;
Last_name Gaspar Garca Lpez Caste Gonzalez Morales First_name Martha Mario Mara

Tabla resultante opcin b).

RECUPERANDO DATOS DESDE UNA VISTA

Una Vista se puede emplear exactamente igual que una tabla base para recuperar datos de ella mediante consultas SELECT. Ejemplo: Listar los apellidos y nombre de los empleados del departamento Ventas ordenados alfabticamente. SELECT apellidos, nombre FROM clientesDepVentas ORDER BY apellidos, nombre;

Creando Vistas en varias tablas base Al igual que las consultas normales, el las vistas se pueden recuperar datos de ms de una tabla base.

51

Ejemplo: Crear una vista que recupere datos de las tablas clientes y cuenta. De la tabla base clientes recuperar nombre del cliente y de la tabla cuenta numero de cuenta, fecha de registro y monto que tiene. create view ClientesCuenta as(select nomcli, nrocuenta, fechareg, monto from clientes, cuenta where clientes.codcli=cuenta.codcli); El resultado queda como a continuacin se muestra:
Tabla clientes
codcli 1 2 3 nomcli Juan Penas Rosas Pepe Lpez Caste Luz Mara y Jos dircli Calle Mina # 2 Calle Revolucin S/N Calle Cuauhtmoc S/N telcli 7574715203 7574715203 7574715203 sexo Masculino Masculino Femenino coddis 12 13 21

nomcli Juan Penas Rosas Pepe Lpez Caste Luz Mara y Jos

nrocuenta 123456780 123456782 123456783

fechareg 2008-01-15 2008-03-15 2008-03-01

monto 1500 15250 100

Tabla cuenta
nrocuenta 123456780 123456782 123456783 codcli 1 2 3 codigocuenta X1 X2 x3 Fechareg 2008-01-15 2008-03-15 2008-03-01 monto 1500 15250 100 codigomoneda dolar Pesos euros

52

Alterar vistas Al igual que una tabla, una vista tambin se puede alterar: Ejemplo: Alter view prueba as select nomcli,nrocuenta,fechareg from clientes,cuenta where clientes.codcli=cuenta.codcli;
Nomcli Juan Penas Rosas Pepe Lpez Caste Luz Mara y Jos Nrocuenta 123456780 123456782 123456783 fechareg 2008-01-15 2008-03-15 2008-03-01

CREANDO VISTAS COMPLEJAS En las vistas complejas es necesario emplear alias cuando alguna columna de la vista se deriva de una funcin o una expresin. Ejemplo: Crear una vista que muestre los montos mnimo, mximo y medio de las cuentas de cada cliente. CREATE VIEW montos (nrocuenta, Minimo, Maximo, Medio) AS SELECT cli.nomcli, MIN(cue.monto), MAX(cue.monto), AVG(cue.monto) FROM clientes cli, cuenta cue WHERE cli.nomcli=cue.nrocuenta Order by cli.nomcli; Operaciones DML sobre una Vista Las vistas son una especie de ventanas que permiten ver los datos almacenados en las tablas base, pero estructurados, organizados o formateados de otra manera.

53

Para poder modificar datos (de las tablas base) a travs de una vista es necesario que cada dato individual obtenido mediante la vista corresponda a un nico dato real de una tabla base y que dicha correspondencia no se haya perdido a travs de la
definicin de la subconsulta de la vista.

Las reglas que resumen esta situacin son: 1. Las vistas simples siempre permiten operaciones DML (INSERT, UPDATE y DELETE). 2. No es posible eliminar filas de una vista (sentencia DELETE) si su subconsulta tiene alguna de las siguientes caractersticas: Funciones de agrupamiento (SUM, AVG, etc.). Clusula GROUP BY. La palabra clave DISTINCT. La pseudocolumna ROWNUM.

3. No es posible modificar datos en una vista (sentencia UPDATE) si su subconsulta contiene: Alguna de las opciones indicadas antes para restringir la operacin DELETE, o Columnas formadas por expresiones (ej: salario*12).

4. No es posible aadir datos a travs de una vista (sentencia INSERT) si su subconsulta contiene: Alguna de las opciones indicadas antes para restringir las operaciones DELETE y UPDATE, o Columnas con la restriccin NOT NULL en su tabla base, y sin valor por defecto, que no son seleccionadas por la vista.

Empleo de la clusula WITH CHECK OPTION A travs de las vistas es posible realizar controles de la integridad referencial. Por tanto, una vista puede servir de mecanismo para proteger la integridad de los datos.
54

La clusula WITH CHECK OPTION garantiza que las operaciones INSERT y UPDATE realizadas a travs de una vista no pueden crear filas que no seran seleccionadas por la propia vista. Ejemplo: Empleando la siguiente vista: CREATE OR REPLACE VIEW clientesDepVentas AS SELECT *FROM Empleados WHERE dep=Ventas WITH CHECK OPTION CONSTRAINT control_depVentas; Se generar un error si se intenta una operacin INSERT o UPDATE a travs de ella con un departamento que no sea Ventas, por ejemplo, la siguiente: UPDATE EmpDepVentas SET dep=Compras WHERE id=123; ELIMINANDO UNA VISTA Cuando ya no se va a emplear ms, una vista puede ser eliminada del esquema de la base de datos mediante la siguiente orden: DROP VIEW <vista>; donde: <vista> Es el nombre de la vista. Ejemplo: DROP VIEW clientesDepVentas; Restricciones de uso:Solo el creador o un usuario con el privilegio DROP ANY VIEW puede eliminar una vista.

55

CONCLUSIN SQL en espaol es algo como Lenguaje estructurado de consultas, un nombre no apto para lo que es capaz de hacer, pues realiza mucho ms que consultas, tal vez porque en sus inicios esa era la necesidad y su desarrollo ha sido tan

exponencial que puede proporcionar herramientas a los usuarios de los diferentes DBMS para realizar operaciones como definicin, recuperacin, manipulacin,

comparticin e integridad de datos as como control de acceso.

Cada una de las partes en las que se divide tiene funciones especificas, en el caso del lenguaje de definicin de datos, se encarga de crear todos los objetos que contendr la base de datos; el lenguaje de manipulacin de datos, trabajar con los datos que se pueden almacenar o que ya estn almacenados en la estructura ya creada; finalmente, el lenguaje de control de datos se encarga de las cuestiones de seguridad como es el control de acceso a y sobre los objetos de la base de datos.

Dentro del DML se encuentran las instrucciones INSERT que permita ingresar datos, UPDATE modificar o actualizar datos, DELETE borrar datos y la instruccin SELECT la ms poderosa de este lenguaje debido a las muy diversas formas de uso por ejemplo con las consultas con funciones de agregacin que utilizamos para ejemplificar la obtencin resultados generalmente estadsticos, con funciones de cadena, subconsultas.

SQL proporciona mecanismos para reunir relaciones, incluyendo reuniones condicionales, reuniones naturales, as como varias formas de reunin externa. Las consultas multitabla o JOINS, tambin denominadas combinaciones o composiciones, permiten recuperar datos de dos o ms tablas segn las relaciones lgicas entre ellas.
56

Con inner join obtenemos una reunin externa. Con el operador natural join obtenemos una reunin natural y con la clausula unin tambin podemos reunir dos relaciones. Al igual que una tabla real, una vista consta de un conjunto de columnas y filas de datos con un nombre. La nica diferencia es que slo se almacena de ellas la definicin, no los datos. Una vista es una tabla lgica que se basa en otras tablas o vistas, cuyo contenido est definido por una consulta, que funciona como una ventana a travs de la cual pueden visualizarse o modificarse datos de las tablas. Las tablas sobre las que se define una vista se llaman tablas base.

57

BIBLIOGRAFA

1. E. Codd, A Relational Model of Data for Large Shared Databanks, 1970 2. F. Pascal, The Dangerous Illusion: Denormalization, Performance and Integrity, June 2002 3. J. H. Orallo, La disciplina de los sistemas de bases de datos. Historia, situacin actual y perspectivas; mayo 2002 4. Silberschatz, Abraham. Fundamentos de bases de datos. Cuarta edicin. Editorial: McGraw Hill.2002. 5. Shapiro R.,Jeffrey. Microsoft SQL Server 2005: The Complete Reference. McGraw-Hill/Osborne 2007. 6. Daniel Jueri, Mariano. Consultas de Accion: INSERT, DELETE, UPDATE fecha de consulta: 14 de mayo del 2009. http://www.elguruprogramador.com.ar/articulos/consultas-de-accion-insertdelete-update.html 7. Mendoza, Alberto. Programacin con SQL Aspecto terico prctico bsico, fecha de consulta: 12 de mayo del 2009. http://www.monografias.com/trabajos11/prosq/prosq.shtml

8. Free Computer tutorials, curso de SQL, fecha de consulta: 12 de mayo del 2009. http://www.aulaclic.es/sql/

9. Microsoft Corporation , SELECT - SQL (Comando), fecha consulta: 14 de mayo 2009 http://msdn.microsoft.com/es-es/library/cc467240(VS.71).aspx 10. Casares, Claudio, Agrupamiento de Registros. Fecha de consulta: 12 de mayo del 2009.http://www.maestrosdelweb.com/editorial/tutsql4/

58

ANEXOS

59

Вам также может понравиться