qué es y para qué sirve el sql

Upload: eymard-ramos-lopez

Post on 08-Jul-2015

49 views

Category:

Documents


0 download

TRANSCRIPT

Qu es y para qu sirve el SQLPor Rubn AlvarezAtencin: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

Las aplicaciones en red son cada da ms numerosas y verstiles. En muchos casos, el esquema bsico de operacin 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 sera realmente complicada a gestionar de no ser por la existencia de estndares que nos permiten el realizar las operaciones bsicas de una forma universal. Es de eso de lo que trata el Structured Query Language que no es mas que un lenguaje estndar de comunicacin con bases de datos. Hablamos por tanto de un lenguaje normalizado que nos permite trabajar con cualquier tipo de lenguaje (ASP o PHP) en combinacin con cualquier tipo de base de datos (MS Access, SQL Server, MySQL...). El hecho de que sea estndar no quiere decir que sea idntico para cada base de datos. En efecto, determinadas bases de datos implementan funciones especficas que no tienen necesariamente que funcionar en otras. Aparte de esta universalidad, el SQL posee otras dos caractersticas muy apreciadas. Por una parte, presenta una potencia y versatilidad notables que contrasta, por otra, con su accesibilidad de aprendizaje.

Diferentes tipos campos empleados en las bases de datosPor Rubn AlvarezAtencin: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

Como sabemos una base de datos esta 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. 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 bsqueda posteriormente y por otro, 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 que estn representados en la totalidad de estas bases. Estos tipos comunes son los siguientes:

Alfanumricos Numricos Booleanos Fechas

Contienen cifras y letras. Presentan una longitud limitada (255 caracteres) Existen de varios tipos, principalmente, enteros (sin decimales) y reales (con decimales). Poseen dos formas: Verdadero y falso (S o No) Almacenan fechas facilitando posteriormente su explotacin. Almacenar fechas de esta forma posibilita ordenar los registros por fechas o calcular los das entre una fecha y otra... Son campos alfanumricos de longitud ilimitada. Presentan el inconveniente de no poder ser indexados (veremos ms adelante lo que esto quiere decir).

Memos

Son campos numricos enteros que incrementan en una unidad su valor para cada registro incorporado. Su utilidad resulta ms Autoincrementables que evidente: Servir de identificador ya que resultan exclusivos de un registro.Mostramos unas tablas con todos los tipos de datos que hay en SQL.Por Claudio

Atencin: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.Los tipos de datos SQL se clasifican en 13 tipos de datos primarios y de varios sinnimos vlidos reconocidos por dichos tipos de datos. Los tipos de datos primarios son:

Tipo de Datos Longitud Descripcin Para consultas sobre tabla adjunta de productos de bases de BINARY 1 byte datos que definen un tipo de datos Binario. BIT 1 byte Valores Si/No True/False BYTE 1 byte Un valor entero entre 0 y 255. COUNTER 4 bytes Un nmero incrementado automticamente (de tipo Long) Un entero escalable entre 922.337.203.685.477,5808 y CURRENCY 8 bytes 922.337.203.685.477,5807. DATETIME 8 bytes Un valor de fecha u hora entre los aos 100 y 9999. Un valor en punto flotante de precisin simple con un rango de - 3.402823*1038 a -1.401298*10-45 para valores SINGLE 4 bytes negativos, 1.401298*10- 45 a 3.402823*1038 para valores positivos, y 0. Un valor en punto flotante de doble precisin con un rango de - 1.79769313486232*10308 a -4.94065645841247*10-324 DOUBLE 8 bytes para valores negativos, 4.94065645841247*10-324 a 1.79769313486232*10308 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. 1 byte por LONGTEXT De cero a un mximo de 1.2 gigabytes. carcter Segn se LONGBINARY De cero 1 gigabyte. Utilizado para objetos OLE. necesite

TEXT

1 byte por De cero a 255 caracteres. carcter

La siguiente tabla recoge los sinnimos de los tipos de datos definidos:

Tipo de Dato BINARY

Sinnimos VARBINARY BOOLEAN LOGICAL BIT LOGICAL1 YESNO BYTE INTEGER1 COUNTER AUTOINCREMENT CURRENCY MONEY DATE DATETIME TIME TIMESTAMP FLOAT4 SINGLE IEEESINGLE REAL FLOAT FLOAT8 DOUBLE IEEEDOUBLE NUMBER NUMERIC INTEGER2 SHORT SMALLINT INT LONG INTEGER INTEGER4 GENERAL LONGBINARY OLEOBJECT LONGCHAR LONGTEXT MEMO NOTE ALPHANUMERIC TEXT CHAR - CHARACTER STRING - VARCHAR VARIANT (No Admitido) VALUEPasamos a describir los tipos de sentencias sql que podemos encontrarnos y sus componentes sintcticos.Por Sara Alvarez

Atencin: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

En SQL tenemos bastantes sentencias que se pueden utilizar para realizar diversas tareas. Dependiendo de las tareas, estas sentencias se pueden clasificar en tres grupos principales (DML, DDL,DCL), aunque nos quedara otro grupo que a mi entender no est dentro del lenguaje SQL sino del PLSQL.SENTENCIA DESCRIPCIN

DML

Manipulacin de datos SELECT INSERT DELETE UPDATE

Recupera datos de la base de datos. Aade nuevas filas de datos a la base de datos. Suprime filas de datos de la base de datos. Modifica datos existentes en la base de datos.

DDL

Definicin de datos CREATE TABLE DROP TABLE ALTER TABLE CREATE VIEW DROP VIEW CREATE INDEX DROP INDEX CREATE SYNOYM DROP SYNONYM

Aade una nueva tabla a la base de datos. Suprime una tabla de la base de datos. Modifica la estructura de una tabla existente. Aade una nueva vista a la base de datos. Suprime una vista de la base de datos. Construye un ndice para una columna. Suprime el ndice para una columna. Define un alias para un nombre de tabla. Suprime un alias para un nombre de tabla.

DCL

Control de acceso GRANT REVOKE Control de transacciones COMMIT ROLLBACK

Concede privilegios de acceso a usuarios. Suprime privilegios de acceso a usuarios Finaliza la transaccin actual. Aborata la transaccin actual.

PLSQL

SQL Programtico 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.

Componentes sintcticosLa mayora de sentencias SQL tienen la misma estructura. Todas comienzan por un verbo (select, insert, update, create), a continuacin le sigue una o ms 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.

Explicamos la manera de crear tablas a partir de sentencias SQL. Definimos los tipo de campos principales y la forma de especificar los ndices.Por Rubn AlvarezAtencin: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

En general, la mayora de las bases de datos poseen potentes editores de bases que permiten la creacin rpida 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 carcter temporal (para gestionar un carrito de compra por ejemplo) o bien permanente por necesidades concretas de nuestra aplicacin. En estos casos, podemos, a partir de una sentencia SQL, crear la tabla con el formato que deseemos lo cual nos puede ahorrar ms 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 caractersticas. Adems, puede ser necesario especificar cules de estos campos van a ser ndices y de qu tipo van a serlo. 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. A continuacin os explicamos someramente la sintaxis de esta sentencia y os proponemos una serie de ejemplos prcticos:

Sintaxis

Create Table nombre_tabla ( nombre_campo_1 tipo_1 nombre_campo_2 tipo_2 nombre_campo_n tipo_n Key(campo_x,...) )

Pongamos ahora como ejemplo la creacin de la tabla pedidos que hemos empleado en captulos previos:

Create Table pedidos ( id_pedido INT(4) NOT NULL AUTO_INCREMENT, id_cliente INT(4) NOT NULL, id_articulo INT(4)NOT NULL, fecha DATE, cantidad INT(4), total INT(4), KEY(id_pedido,id_cliente,id_articulo) )

En este caso creamos los campos id los cuales son considerados de tipo entero de una longitud especificada por el nmero entre parntesis. Para id_pedido requerimos que dicho campo se incremente automticamente (AUTO_INCREMENT) de una unidad a cada introduccin de un nuevo registro para, de esta forma, automatizar su creacin. Por otra parte, para evitar un mensaje de error, es necesario requerir que los campos que van a ser definidos como ndices no puedan ser nulos (NOT NULL). El campo fecha es almacenado con formato de fecha (DATE) para permitir su correcta explotacin a partir de las funciones previstas a tal efecto. Finalmente, definimos los ndices enumerndolos entre parntesis precedidos de la palabra KEY o INDEX. Del mismo modo podramos crear la tabla de artculos con una sentencia como sta:

Create Table articulos ( id_articulo INT(4) NOT NULL AUTO_INCREMENT, titulo VARCHAR(50), autor VARCHAR(25), editorial VARCHAR(25), precio REAL, KEY(id_articulo) )

En este caso puede verse que los campos alfanumricos son introducidos de la misma forma que los numricos. Volvemos a recordar que en tablas que tienen campos comunes es de vital importancia definir estos campos de la misma forma para el buen funcionamiento de la base. Muchas son las opciones que se ofrecen al generar tablas. No vamos a tratarlas detalladamente pues sale de lo estrictamente prctico. Tan slo mostraremos algunos de los tipos de campos que pueden ser empleados en la creacin de tablas con sus caractersticas:

Tipo INT o INTEGER DOUBLE o REAL CHAR VARCHAR DATE BLOB BIT o BOOLEAN

Bytes 4 8 1/caracter

Descripcin Nmeros enteros. Existen otros tipos de mayor o menor longitud especficos de cada base de datos. Nmeros reales (grandes y con decimales). Permiten almacenar todo tipo de nmero no entero. Alfanumricos de longitud fija predefinida Fechas, existen multiples formatos especficos de cada base de datos

1/caracter+1 Alfanumricos de longitud variable 3

1/caracter+2 Grandes textos no indexables 1 Almacenan un bit de informacin (verdadero o falso)

ELECCIONAR Fundamentos DeclaracinLa instruccin SELECT de SQL las consultas de datos de las tablas en la base de datos. La declaracin comienza con la palabra clave SELECT. La instruccin SELECT bsica tiene tres clusulas:

SELECCIONAR DE DONDE

La clusula SELECT especifica las columnas de la tabla que se recuperan. La clusula FROM especifica las tablas de acceso. La clusula WHERE especifica qu filas de tabla se utilizan. La clusula WHERE es opcional, si falta, todas las filas de la tabla se utilizan. Por ejemplo,Seleccione un nombre en s WHERE ciudad = 'Roma'

Esta consulta tiene acceso a las filas de la tabla - s. A continuacin, los filtros de las filas en las que la columna contiene la ciudad de Roma. Por ltimo, la consulta recupera el nombre de la columna de cada fila se filtra. Utilizando el ejemplo s de mesa, esta consulta produce:nombre Mario

Una descripcin detallada de las acciones de consulta:

Los accesos clusula FROM de la mesa s. Contenido:sno nombre de la ciudad S1 Pierre S2 John S3 Mario Pars Londres Roma

La clusula WHERE filtra las filas de la tabla de utilizar aquellos cuya columna contiene la ciudad de Roma. Este elige una nica fila de s:sno nombre de la ciudad

S3 Mario

Roma

La clusula SELECT recupera el nombre de la columna de las filas filtradas por la clusula WHERE:nombre Mario

El resto de este apartado se examinan las tres clusulas principales de la instruccin SELECT, detallando su sintaxis y la semntica:

SELECCIONAR Clusula - especifica las columnas de tabla recuperada Clusula FROM - especifica las tablas para acceder a Clusula WHERE - especifica que las filas de las tablas de usar

consulta de las capacidades de extensin estn cubiertos en la siguiente subseccin .Clusula SELECT

La clusula SELECT es obligatoria. Se especifica una lista de columnas que se recuperan de las tablas en la clusula FROM. Tiene el siguiente formato general:SELECT [ALL | DISTINCT] lista de seleccin

seleccionar la lista es una lista de nombres de columnas separadas por comas. El TODO y especificadores DISTINCT son opcionales. DISTINCT se especifica que las filas duplicadas se eliminan. Una fila duplicado es que cada lista de seleccin correspondiente columna tiene el mismo valor. El valor predeterminado es ALL, que conserva las filas duplicadas. Por ejemplo,descr SELECT, color p DE

Los nombres de columna en la lista de seleccin puede ser calificado por el nombre de la tabla correspondiente:p.descr SELECT, p.color p DE

Una columna en la lista de seleccin puede cambiar el nombre, siguiendo el nombre de la columna con el nuevo nombre. Por ejemplo:

proveedor SELECT nombre, ciudad ubicacin DE s

Esto produce:proveedor ubicacin Pierre John Mario Pars Londres Roma

La lista de seleccin puede contener expresiones. Ver las expresiones . Una lista especial que consiste en seleccionar las solicitudes de un nico '*' todas las columnas de todas las tablas en la clusula FROM. Por ejemplo,SELECT * FROM sp

sno pno Qty S1 P1 NULL S2 P1 S3 P1 S3 P2 200 1000 200

El delimitador * recuperar slo las columnas de una tabla nica que se indique por el nombre de la tabla. Por ejemplo:SELECCIN DE sp sp .*

Esto produce el mismo resultado que el anterior ejemplo . * Un calificado no puede ser combinado con otros elementos en la lista de seleccin, debe ser independiente. Sin embargo, a * calificado puede ser combinado con otros elementos. Por ejemplo,SELECCIONAR sp .*, de la ciudad DE sp, s DONDE sp.sno = s.sno

sno pno Qty de la ciudad

S1 P1 NULL Pars S2 P1 S3 P1 S3 P2 200 Londres 1000 Roma 200 Roma

Nota: este es un ejemplo de una consulta uniendo dos tablas. Ver unin de tablas .Clusula FROM

La clusula FROM siempre sigue a la clusula SELECT. En l se enumeran las tablas de acceder a la consulta. Por ejemplo,SELECT * FROM s

Cuando los de la lista contiene varias tablas, las comas separan los nombres de tabla. Por ejemplo,SELECCIONAR sp .*, de la ciudad DE sp, s DONDE sp.sno = s.sno

Cuando los de la lista tiene varias tablas, deben unirse entre s. Ver unin de tablas .Correlacin de los nombres

Al igual que las columnas de la lista de seleccin, las tablas de la de la lista puede cambiar el nombre, siguiendo el nombre de la tabla con el nuevo nombre. Por ejemplo,SELECCIN DE supplier.name s proveedor

El nuevo nombre que se conoce como la correlacin (o rango) nombre de la tabla. Auto se une requieren nombres de correlacin.Clusula WHERE

La clusula WHERE es opcional. Cuando se especifica, que siempre sigue a la clusula FROM. La clusula WHERE filtra las filas de las tablas de la clusula FROM. La omisin de la clusula WHERE especifica que todas las filas que se utilizan.

A raz de la palabra clave WHERE es una expresin lgica, tambin conocido como un predicado. El predicado se evala como un valor lgico SQL - verdadera, falsa o desconocida. El predicado ms bsica es una comparacin:color = 'rojo'

Esto devuelve el predicado:

verdad - si la columna de color contiene el valor de cadena - 'Rojo', falsa - si la columna de color contiene otro valor de cadena (no 'Rojo'), o desconocidos - si la columna de color contiene nulo.

En general, una expresin de comparacin compara el contenido de una columna de la tabla a un literal, que el anterior. Una expresin de comparacin tambin puede comparar dos columnas entre s. Tabla une a utilizar este tipo de comparacin. Ver unin de tablas . El = (igual) operador de comparacin compara dos valores de la igualdad. los operadores de comparacin adicional son:

> - Mayor que = - Mayor o igual a = 200

Por ejemplo,sno pno Qty S2 P1 200

S3 P1 1000 S3 P2 200

Nota: En la tabla sp, la columna qty para una de las filas contiene nulo. La comparacin - cant> = 200, se evala como desconocido para esta fila. En el

resultado final de una consulta, las filas con una clusula WHERE a la evaluacin de desconocidos (o falsa) se eliminan (filtrado). Ambos operandos de una comparacin debe ser el mismo tipo de datos, conversiones automticas sin embargo se llevan a cabo entre los tipos numricos, fecha y hora y el intervalo. La expresin CAST proporciona tipo de conversiones explcitas, ver las expresiones .Extendido comparaciones

Adems de las comparaciones bsicas descritas anteriormente, compatible con SQL extendido operadores de comparacin - ENTRE EL , EN , COMO y IS NULL .

Entre el operador El operador ENTRE implementa una comparacin de rangos, es decir, se comprueba si un valor est entre dos valores. ENTRE las comparaciones tienen el siguiente formato:valor-1 [NO] entre el valor-2 Y el valor de 3

comparacin si las pruebas Este valor-1 es mayor o igual al valor2 y menor o igual al valor-3. Es equivalente a los siguientes determinantes:valor-1> = valor 2 y valor-1 = valor 2 y valor de 1 5Usted puede tener WHERE y HAVING en un comando SELECT. Por ejemplo, usted desea seleccionar todos los clientes que han pasado ms de 1000, despus de 10/01/2005. La sentencia de SQL que incluye tanto las clusulas HAVING y WHERE se ver as:

CustomerName SELECT SUM (orderprice) de las ventas DONDE OrderDate> '10 / 01/2005 ' GROUP BY CustomerName TENIENDO EN SUMA (orderprice)> 1000Aqu hay algo muy importante a tener en cuenta. La clusula WHERE condicin de bsqueda se aplica a cada fila individual en la tabla de ventas. Despus de que la clusula HAVING se aplica a las filas en el resultado final, que son un producto de la agrupacin. Lo importante a recordar es que la agrupacin se hace slo en las filas que cumplen la condicin de la clusula WHERE.

Defenimos lo que significa subconsulta y mostramos las diferentes subconsultas que se pueden hacer.Por ClaudioAtencin: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

Una subconsulta es una instruccin SELECT anidada dentro de una instruccin SELECT, SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta. Puede utilizar tres formas de sintaxis para crear una subconsulta:

comparacin [ANY | ALL | SOME] (instruccin sql) [NOT] EXISTS (instruccin sql)

expresin [NOT] IN (instruccin sql)

En donde:

comparacin

Es una expresin y un operador de comparacin que compara la expresin con el resultado de la subconsulta.

expresin instruccin SQL

Es una expresin por la que se busca el conjunto resultante de la subconsulta. Es una instruccin SELECT, que sigue el mismo formato y reglas que cualquier otra instruccin SELECT. Debe ir entre parntesis.

Se puede utilizar una subconsulta en lugar de una expresin en la lista de campos de una instruccin SELECT o en una clusula WHERE o HAVING. En una subconsulta, se utiliza una instruccin SELECT para proporcionar un conjunto de uno o ms valores especificados para evaluar en la expresin de la clusula WHERE o HAVING. Se puede utilizar el predicado ANY o SOME, los cuales son sinnimos, para recuperar registros de la consulta principal, que satisfagan la comparacin con cualquier otro registro recuperado en la subconsulta. El ejemplo siguiente devuelve todos los productos cuyo precio unitario es mayor que el de cualquier producto vendido con un descuento igual o mayor al 25 por ciento:

SELECT * FROM Productos WHERE PrecioUnidad ANY ( SELECT PrecioUnidad FROM DetallePedido WHERE Descuento = 0 .25 )

El predicado ALL se utiliza para recuperar nicamente aquellos registros de la consulta principal que satisfacen la comparacin con todos los registros recuperados en la subconsulta. Si se cambia ANY por ALL en el ejemplo anterior, la consulta devolver nicamente aquellos productos cuyo precio unitario sea mayor que el de todos los productos vendidos con un descuento igual o mayor al 25 por ciento. Esto es mucho ms restrictivo.

El predicado IN se emplea para recuperar nicamente aquellos registros de la consulta principal para los que algunos registros de la subconsulta contienen un valor igual. El ejemplo siguiente devuelve todos los productos vendidos con un descuento igual o mayor al 25 por ciento:

SELECT * FROM Productos WHERE IDProducto IN ( SELECT IDProducto FROM DetallePedido WHERE Descuento = 0.25 )

Inversamente se puede utilizar NOT IN para recuperar nicamente aquellos registros de la consulta principal para los que no hay ningn registro de la subconsulta que contenga un valor igual. El predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en comparaciones de verdad/falso para determinar si la subconsulta devuelve algn registro. Supongamos que deseamos recuperar todos aquellos clientes que hayan realizado al menos un pedido:

SELECT Clientes.Compaa, Clientes.Telfono FROM Clientes WHERE EXISTS ( SELECT FROM Pedidos WHERE

Pedidos.IdPedido = Clientes.IdCliente )

Esta consulta es equivalente a esta otra:

SELECT Clientes.Compaa, Clientes.Telfono FROM Clientes WHERE IdClientes IN ( SELECT Pedidos.IdCliente FROM Pedidos )

Se puede utilizar tambin alias del nombre de la tabla en una subconsulta para referirse a tablas listadas en la clusula FROM fuera de la subconsulta. El ejemplo siguiente devuelve los nombres de los empleados cuyo salario es igual o mayor que el salario medio de todos los empleados con el mismo ttulo. A la tabla Empleados se le ha dado el alias T1:

SELECT Apellido, Nombre, Titulo, Salario FROM Empleados AS T1 WHERE Salario = ( SELECT Avg(Salario) FROM Empleados WHERE T1.Titulo = Empleados.Titulo

) ORDER BY Titulo

En el ejemplo anterior, la palabra reservada AS es opcional.

SELECT Apellidos, Nombre, Cargo, Salario FROM Empleados WHERE Cargo LIKE 'Agente Ven*' AND Salario ALL ( SELECT Salario FROM Empleados WHERE Cargo LIKE '*Jefe*' OR Cargo LIKE '*Director*' )

(Obtiene una lista con el nombre, cargo y salario de todos los agentes de ventas cuyo salario es mayor que el de todos los jefes y directores.)

SELECT DISTINCT NombreProducto, Precio_Unidad FROM Productos WHERE PrecioUnidad = ( SELECT PrecioUnidad FROM

Productos WHERE NombreProducto = 'Almbar anisado' )

(Obtiene una lista con el nombre y el precio unitario de todos los productos con el mismo precio que el almbar anisado.)

SELECT DISTINCT NombreContacto, NombreCompania, CargoContacto, Telefono FROM Clientes WHERE IdCliente IN ( SELECT DISTINCT IdCliente FROM Pedidos WHERE FechaPedido 0 AND T1.NumVuelo=Vuelos.NumVuelo)

(Recupera nmeros de vuelo y capacidades de aquellos vuelos con destino Madrid y plazas libres Supongamos ahora que tenemos una tabla con los identificadores de todos nuestros productos y el stock de cada uno de ellos. En otra tabla se encuentran todos los pedidos que tenemos pendientes de servir. Se trata de averiguar que productos no se podemos servir por falta de stock.

SELECT PedidosPendientes.Nombre FROM PedidosPendientes GROUP BY PedidosPendientes.Nombre HAVING SUM(PedidosPendientes.Cantidad < ( SELECT Productos.Stock FROM Productos WHERE Productos.IdProducto = PedidosPendientes.IdProducto ) )

Supongamos que en nuestra tabla de empleados deseamos buscar todas las mujeres cuya edad sea mayor a la de cualquier hombre:

SELECT Empleados.Nombre FROM Empleados WHERE Sexo = 'M' AND Edad > ANY (SELECT Empleados.Edad FROM Empleados WHERE Sexo ='H')

lo que sera lo mismo: SELECT Empleados.Nombre FROM Empleados WHERE

Sexo = 'M' AND Edad > (SELECT Max( Empleados.Edad )FROM Empleados WHERE Sexo ='H') La siguiente tabla muestra algn ejemplo del operador ANY y ALL

Valor 1 Operador Valor 2 Resultado 3 > ANY (2,5,7) Cierto 3 = ANY (2,5,7) Falso 3 = ANY (2,3,5,7) Cierto 3 > ALL (2,5,7) Falso 3 < ALL (5,6,7) FalsoEl operacion =ANY es equivalente al operador IN, ambos devuelven el mismo resultado.

Subconsultas SubconsultasDefinicin de subconsultas.Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT. Normalmente se utilizan para filtrar una clausula WHERE o HAVING con el conjunto de resultados de la subconsulta, aunque tambin pueden utilizarse en la lista de seleccin. Por ejemplo podriamos consultar el alquirer ltimo de un cliente.

SELECT CO_CLIENTE, NOMBRE, MARCA, MODDELO FROM ALQUILERES WHERE CO_CLIENTE = 1 AND FECHA_ALQUILER = (SELECT MAX(FECHA_ALQUILER) FROM ALQUILERES WHERE CO_CLIENTE = 1)

En este caso, la subconsulta se ejecuta en primer lugar, obteniendo el valor de la mxima fecha de alquier, y posteriormente se obtienen los datos de la consulta principal. Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre parntesis. La subconsulta se puede encontrar en la lista de seleccin, en la clusula WHERE o en la clusula HAVINGde la consulta principal.

Tiene las siguientes reestricciones: No puede contener la clusula ORDER BY No puede ser la UNION de varias sentencias SELECT Si la subconsulta aparece en la lista de seleccin,o esta asociada a un operador igual "=" solo puede devolver un nico registro.

Referencias externasA menudo, es necesario, dentro del cuerpo de una subconsulta, hacer referencia al valor de una columna de la fila actual en la consulta principal, ese nombre de columna se denomina referencia externa. Una referencia externa es un campo que aparece en la subconsulta pero se refiere a la una de las tablas designadas en la consulta principal. Cuando se ejecuta una consulta que contiene una subconsulta con referencias externas, la subconsulta se ejecuta por cada fila de la consulta principal. En este ejemplo la subconsulta aparece en la lista de seleccin, ejecutandose una vez por cada fila que devuelve la consulta principal.

SELECT CO_EMPLEADO, NOMBRE, (SELECT MIN(FECHA_NOMINA) FROM NOMINAS WHERE CO_EMPLEADO = EMPLEADOS.CO_EMPLEADO) PRIMERA_NOMINA FROM EMPLEADOS;

Anidar subconsultasLas 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.

SELECT CO_EMPLEADO, EMPLEADOS FROM EMPLEADOS WHERE CO_EMPLEADO IN (SELECT CO_EMPLEADO FROM NOMINAS WHERE ESTADO IN ( SELECT ESTADO FROM ESTADOS_NOMINAS WHERE EMITIDO = 'S' AND PAGADO = 'N') ) Los resultados que se obtienen con subconsultas normalmente pueden conseguirse a travs de consultas combinadas ( JOIN ).

SELECT CO_EMPLEADO, NOMBRE FROM EMPLEADOS WHERE ESTADO IN (SELECT ESTADO FROM ESTADOS WHERE ACTIVO = 'S') Podr escribirse como :

SELECT CO_EMPLEADO, NOMBRE FROM EMPLEADOS, ESTADOS WHERE EMPLEADOS.ESTADO = ESTADOS.ESTADO AND ESTADOS.ACTIVO = 'S' Normalmente es ms rpido utilizar un JOIN en lugar de una subconsulta, aunque esto depende sobre todo del diseo de la base de datos y del volumen de datos que tenga.

Utilizacion de subconsultas con UPDATEPodemos utilizar subconsultas tambin en consultas de actualizacin conjuntamente con UPDATE. Normalmente se utilizan para "copiar" el valor de otra tabla.

UPDATE EMPLEADOS SET SALARIO_BRUTO = (SELECT SUM(SALIRO_BRUTO) FROM NOMINAS WHERE NOMINAS.CO_EMPLEADO = EMPLEADOS.CO_EMPLEADO) WHERE SALARIO_BRUTO IS NULL

La funcin EXISTSEXISTS es una funcin SQL que devuelve veradero cuando una subconsulta retorna al menos una fila.

SELECT CO_CLIENTE, NOMBRE FROM CLIENTES WHERE EXISTS ( SELECT * FROM MOROSOS WHERE CO_CLIENTE = CLIENTES.CO_CLIENTE AND PAGADO = 'N') La funcin EXISTS puede ser utilizada en cualquier sentencia SQL vida, SELECT, UPDATE, INSERT o DELETE.

oin (Clusula, Visual Basic)Visual Studio 2010 Otras versiones

Combina dos colecciones en una sola. La operacin de combinacin se basa en claves coincidentes y usa el operadorEquals. Join element In collection _ [ joinClause _ ] [ groupJoinClause ... _ ] On key1 Equals key2 [ And key3 Equals key4 [... ]

Partes

elementObligatorio. Variable de control de la coleccin que se va a combinar.

collectionObligatorio. Coleccin que se va a combinar con la coleccin identificada a la izquierda del operador Join.Una clusula Join puede estar anidada en otra clusula Join o en una clusula Group Join.

joinClauseEs opcional. Una o varias clusulas Join adicionales para delimitar ms la consulta.

groupJoinClauseEs opcional. Una o varias clusulas Group Join adicionales para delimitar ms la consulta.

key1 Equals key2Obligatorio. Identifica las claves de las colecciones que se van a combinar. Debe usar el operador Equalspara comparar las claves de las colecciones que se van a combinar. Puede combinar las condiciones de combinacin mediante el operador And para identificar varias

claves. El parmetro key1 debe proceder de la coleccin de la izquierda del operador Join. key2 debe proceder de la coleccin de la derecha del operadorJoin. Las claves que se usan en la condicin de combinacin pueden ser expresiones que incluyen ms de un elemento de la coleccin. Sin embargo, cada expresin de clave solamente puede contener elementos de su coleccin respectiva.

Comentarios

La clusula Join combina dos colecciones basndose en los valores de clave coincidentes de las colecciones que se van a combinar. La coleccin resultante puede contener cualquier combinacin de valores de la coleccin identificada a la izquierda del operador Join y de la coleccin identificada en la clusula Join. La consulta solamente devolver los resultados para los que se cumpla la condicin especificada en el operador Equals. Esto es equivalente a INNER JOIN en SQL. Puede usar varias clusulas Join en una consulta para combinar dos o ms colecciones en una sola coleccin. Puede realizar una combinacin implcita para combinar las colecciones sin la clusula Join. Para ello, incluya varias clusulas In en la clusula From y especifique una clusula Where que identifique las claves que desee usar para la combinacin. Puede usar la clusula Group Join para combinar colecciones en una sola coleccin jerrquica. Esto equivale a LEFT OUTER JOIN en SQL.

Ejemplo

En el ejemplo de cdigo siguiente se realiza una combinacin implcita para combinar una lista de clientes con sus pedidos.

VB C# C++

F# JScript

Dim customerIDs() = {"ALFKI", "VICTE", "BLAUS", "TRAIH"} Dim customerList = From cust In customers, custID In customerIDs Where cust.CustomerID = custID Select cust.CompanyName For Each companyName In customerList Console.WriteLine(companyName) Next

En el ejemplo de cdigo siguiente se combinan dos colecciones mediante la clusula Join.

VB C# C++ F# JScript

Imports System.Diagnostics Imports System.Security.Permissions

Public Class JoinSample Public Sub ListProcesses() Dim processDescriptions As New List(Of ProcessDescription) processDescriptions.Add(New ProcessDescription With { .ProcessName = "explorer", .Description = "Windows Explorer"}) processDescriptions.Add(New ProcessDescription With { .ProcessName = "winlogon", .Description = "Windows Logon"}) processDescriptions.Add(New ProcessDescription With { .ProcessName = "cmd", .Description = "Command Window"}) processDescriptions.Add(New ProcessDescription With { .ProcessName = "iexplore", .Description = "Internet Explorer"}) Dim processes = From proc In Process.GetProcesses Join desc In processDescriptions On proc.ProcessName Equals desc.ProcessName Select proc.ProcessName, proc.Id, desc.Description For Each proc In processes Console.WriteLine("{0} ({1}), {2}", proc.ProcessName, proc.Id, proc.Description) Next End Sub End Class Public Class ProcessDescription Public ProcessName As String Public Description As String End Class

Este ejemplo generar un resultado similar al siguiente: winlogon (968), Windows Logon explorer (2424), Windows Explorer cmd (5136), Command Window En el ejemplo de cdigo siguiente se combinan dos colecciones mediante la clusula Join con dos columnas de clave.

VB C# C++ F# JScript

Imports System.Diagnostics Imports System.Security.Permissions Public Class JoinSample2 Public Sub ListProcesses() Dim processDescriptions As New List(Of ProcessDescription2) ' 8 = Normal priority, 13 = High priority processDescriptions.Add(New ProcessDescription2 With { .ProcessName = "explorer", .Description = "Windows Explorer", .Priority = 8}) processDescriptions.Add(New ProcessDescription2 With { .ProcessName = "winlogon", .Description = "Windows Logon", .Priority = 13}) processDescriptions.Add(New ProcessDescription2 With { .ProcessName = "cmd", .Description = "Command Window", .Priority = 8}) processDescriptions.Add(New ProcessDescription2 With { .ProcessName = "iexplore", .Description = "Internet Explorer", .Priority = 8}) Dim processes = From proc In Process.GetProcesses Join desc In processDescriptions

On proc.ProcessName Equals desc.ProcessName And proc.BasePriority Equals desc.Priority Select proc.ProcessName, proc.Id, desc.Description, desc.Priority For Each proc In processes Console.WriteLine("{0} ({1}), {2}, Priority = {3}", proc.ProcessName, proc.Id, proc.Description, proc.Priority) Next End Sub End Class Public Class ProcessDescription2 Public ProcessName As String Public Description As String Public Priority As Integer End Class

El ejemplo generar un resultado similar al siguiente: winlogon (968), Windows Logon, Priority = 13 cmd (700), Command Window, Priority = 8 explorer (2424), Windows Explorer, Priority = 8

Vea tambinManipulacion de Bases de Datos - Presentation Transcript 1. SQL: MANIPULACION DE DATOS Herramienta: Oracle

2.

5.3.5 Subconsultas

o o

Se trata de utilizar una instruccin SELECT completa incluida dentro de otra instruccin SELECT.

Se pueden utilizar SELECT internos como subconsultas en:

o 3. 5.3.5 Subconsultas

Clausulas WHERE y HAVING

INSERT, UPDATE y DELETE

Existen tres tipos de subconsultas:

Subconsulta escalar

Subconsulta de fila

Subconsulta de tabla

o

Las reglas aplicables a las subconsultas son las siguientes:

4. 5.3.6 ANY y ALL

No puede utilizarse la clusula ORDER BY dentro de una subconsulta.

La lista SELECT de la subconsulta debe estar compuesta por un nico nombre de columna o expresin.

De manera predeterminada, los nombres de columna de una subconsulta hacen referencia al nombre de tabla incluido en la clausula FROM de la subconsulta

Cuando una subconsulta acta como uno de los operandos implicados en una comparacin. La subconsulta debe aparecer en el lado derecho de la comparacin.

o o o5.

Las palabras clave ANY y ALL pueden utilizarse con aquellas subconsultas que generan una nica columna de nmeros.

La clave ALL solo ser cierta si se ve satisfecha por todos los valores generados por la subconsulta.

Si una subconsulta esta precedidad por la clave ANY, la condicin slo ser cierta si se va satisfecha por alguno (uno o ms) de los valores generados por la subconsulta.

Las palabras clave exist y no exist estan diseadas para utilizarlas unicamente dentro de una subconsulta. Estas palabras clave producen un simple resultado de tipo verdadero / falso. Exist es verdadera si y solo si existe una fila en la tabla de resultados y Es falsa si la subconsulta devuelve una tabla de resultados vacia. No exist es la condicion opuesta a exist. Exist y no exist solo comprueban la existencia o no existencia de filas en la tabla de resultados de la subconsulta, la subconsulta puede tener cualquier numero columnas.

6.

SELECT hotelname, city FROM hotel a WHERE EXISTS (select * FROM room b WHERE a.hotelno = b.hotelno AND type = doble'); MUESTRA TODOS LOS HOTELES DONDE EXISTE RESERVACIONES EN HABITACIONES DOBLES

7.

SELECT notelname, city FROM hotel a WHERE NO EXISTS (select * FROM room b WHERE a.hotelno = b.hotelno AND type = 'simple'); MUESTRA TODOS LOS HOTELES DONDE NO EXISTE RESERVACIONES EN HABITACIONES SIMPLES

8.

En sql podemos utilizar las operaciones normales de conjuntos union, interseccion y diferencia para combinar los resultados de dos o mas consultas en una unica tabla de resultados. Union de dos tablas a y b, es una tabla que contiene todas las filas que estan incluidas en a, en b o en ambas. Intercepcion de dos tablas es una tabla que contiene todas las filas que son comunes tanto en a como en b. Diferencia de dos tablas es una tabla que contiene todas las filas que estn contenidas en a pero no en b.

9.

SELECT * FROM hotel WHERE (hotelno = 10001) UNION SELECT * FROM hotel WHERE (hotelno = 10003); Existen restricciones sobre las tablas que pueden combinarse mediante estas operaciones de conjuntos, siendo la mas importante aquella que explica que las tablas deben ser compatibles respecto a la union Deben tener la misma estructura, esto implica que las dos tablas pueden contener el mismo numero de columnas y que sus correspondentes columnas deben tener el mismo tipo de dato y longitudes.

10.

RESULTADO DE LA UNION DE LOS ELEMENTOS DE LA TABLA HOTEL

11.

(SELECT hotelno FROM room WHERE (roomno = 20001) INTERSECT SELECT hotelno FROM booking WHERE (roomno = 20001); Al realizar la consulta utilizando intersect, se ejecutan las sentencias generando una tabla de resultados para la primera consulta y otra tabla a partir de la segunda consulta y luego creando una unica tabla de resultados compuesta por todas las filas que sean comunes a ambas tablas.

12.

RESULTADO DE LA INTERCEPCION DE LOS ELEMENTOS DE LAS TABLAS ROOM Y BOOKING

13.

SELECT DISTINCT hotelno FROM Hotel WHERE hotelno NOT IN (SELECT hotelno FROM Room WHERE type = 'Doble'); Al realizar la consulta utilizando except se produce una tabla de resultados a partir de la primera consutla y otra tabla de la segunda, luego se crea una tabla compuesta por las flas que aparecen en la primera tabla de resultados, pero no en la segunda

14.

RESULTADO DE LA DISTINCION DEL NUMERO DE HOTEL EN DONDE EN CUARTOS DOBLES HAY RESERVACIONES Todos excepto estas condiciones

15.

5.3.10 ACTUALIZACIONES DE LA BASE DE DATOS

16.

o 17.

SQL nos ofrece tres instrucciones para modificar los contenidos de las tablas de la base de datos.

INSERT: aade nuevas filas de datos a una tabla.

UPDATE: modifica los datos existentes en una tabla.

DELETE: elimina filas de datos de una tabla

o o o o o18.

Existen dos formas de instrucciones INSERT.

La primera permite insertar una nica fila en una tabla especificada, y su formato es el siguiente:

INSERT INTO Nombre Tabla [(Lista Columnas)] VALUES (lista_valores_datos)

La segunda forma de la instruccin INSERT permite copiar mltiples filas de una o ms tablas en otra tabla, su formato es:

INSERT INTO nombre [(ListaColumnas)] SELECT

INSTRUCCIN INSERT

o o19.

Ejemplos:

Insertar una nueva fila en la tabla Hotel.

o o o o o20.

Permite modificar el contenido de filas ya existentes en una tabla especificada, su formato es:

UPDATE NombreTabla

SET NombreColumna1= valorDatos1[,NombreColumna2=valorDatos2]

[WHERE condicinBsqueda]

La clusula SET especifica los nombre de una o ms columnas que hay que actualizar.

INSTRUCCIN UPDATE

o o

Ejemplos:

Incrementar un 2% el precio de las habitaciones dobles y cambiar el tipo de la habitacin doble a simple.

21.

INSTRUCCIN DELETE

o o o o22.

Permite borrar filas de una tabla especificada. El formato del comando es:

DELETE FROM NombreTabla [WHERE CondicionBsqueda]

De igual manera la condicin de bsqueda es opcional; si se la omite, todas las filas sern borradas de la tabla

Si necesitamos borrar una tabla, debemos utilizar la instruccin DROP TABLE.

o o

Ejemplos:

Borrar una fila de la tabla Hotel donde RoomNo=10005.

white> (:htend:) 4.5 Manipulacin de la base de datos (INSERT,UPDATE,DELETE). Operaciones de actualizacin Borrado: se expresa igual que una consulta, pudindose borrar solamente tuplas enteras. Su forma es

delete from r where P

donde P representa una condicin y r una relacin. Una orden delete opera sobre una nica relacin, aunque puede contener un select anidado que use una relacin de la cual se van a borrar las tuplas. Insercin: para insertar datos, o se especifica la tupla que se desea insertar o se formula una consulta cuyo resultado sea el conjunto de tuplas que se desee insertar. Para la insercin de una tupla, los valores se especifican en el mismo orden que los atributos de la relacin, aunque SQL permite especificar tambin los atributos. Por ejemplo,insert into cuenta (nombre-sucursal, nmero-cuenta, saldo) values (Navacerrada,C-9732,240000)

La insercin tras una consulta se realiza igual que la anterior, pero en vez de values se pone la consulta. Actualizaciones: update se utiliza para cambiar un valor dentro de una tupla, sin cambiar todos los valores de la misma. Por ejemplo, para pagar un inters de 5% a las cuentas con saldo menor que 2000000 ptsupdate cuenta set saldo = saldo * 1.05 where saldo 3 TABLA: CURSO Requerimiento Mostrar el nombre y numero de horas de los Cursos donde su numero de crditos sea mayor a 3. Resultado Como se puede observar solo se visualiza los campos nombre y horas de los cursos donde su numero de crditos es mayor a 3. 4 4 Simulacin C05 2 2 Filosofa C04 4 3 Algebra C03 4 4 Fsica I C02 4 4 Matemtica C01 Horas Crditos Nombre CursoID 4 Simulacin 4 Fsica I 4 Matemtica Horas Nombre

6.

Sentencia INSERT (1)

o o 7.

La sentencia INSERT para agregar registros a una tabla

Sintaxis

INSERT [INTO] [()]

VALUES (Valor1, ....)

Sentencia INSERT(2) TABLA: CURSO Sentencia Insert into Curso (CursoID, nombre, creditos, horas) Values( C05,Simulacin,3,4 ) Luego de ejecutar la sentencia se agrega al final de la tabla. Resultado Requerimiento Registrar los datos del siguiente curso: Cdigo: C05, Nombre: Simulacin, Crditos: 3 y Horas: 4. 2 2 Filosofia C04 4 3 Algebra C03 4 4 Fisica I C02 4 4 Matemtica C01 Horas Creditos Nombre CursoID 4 3 Simulacin C05 2 2 Filosofia C04 4 3 Algebra C03 4 4 Fisica I C02 4 4 Matemtica C01 Horas Creditos Nombre CursoID

8.

Sentencia UPDATE (1)

o o 9.

Esta sentencia nos permite modificar la informacin de las tablas

Sintaxis

UPDATE

SET =

[WHERE ]

Sentencia UPDATE (2) Requerimiento Modificar el numero de horas de todos los cursos. Set horas = 0 TABLA: CURSO Como se puede observar actualiza a todas las filas de la tabla Sentencia Update Curso Set horas = 0 Resultado 4 3 Simulacin C05 2 2 Filosofia C04 4 3 Algebra C03 4 4 Fisica I C02 4 4 Matemtica C01 Horas Creditos Nombre CursoID 0 3 Simulacin C05 0 2 Filosofa C04 0 3 Algebra C03 0 4 Fsica I C02 0 4 Matemtica C01 Horas Creditos Nombre CursoID

10.

Sentencia UPDATE (3) Sentencia Update Curso Set horas = 5, creditos=3 Where CursoID = C01 TABLA: CURSO Como se puede observar actualiza a solo aquella fila, donde el cdigo es igual a C01 Requerimiento Modificar el numero de horas y crditos del curso que tiene el cdigo C01. Resultado 4 3 Simulacin C05 2 2 Filosofia C04 4 3 Algebra C03 4 4 Fisica I C02 4 4 Matemtica C01 Horas Creditos Nombre CursoID 4 3 Simulacin C05 2 2 Filosofa C04 4 3 Algebra C03 4 4 Fsica I C02 5 3 Matemtica C01 Horas Creditos Nombre CursoID

11.

Sentencia DELETE (1)

o o o o12.

La instruccin DELETE permite eliminar una o ms filas de una tabla.

Sintaxis

DELETE

[WHERE ]

Sentencia DELETE (2) TABLA: CURSO Como se puede observar solo permanecen aquellas filas donde, el valor de la columna crditos es diferente a 3 Resultado Sentencia Delete from Curso Where creditos=3 Requerimiento Modificar el numero de horas y crditos del curso que tiene el cdigo C01. 4 3 Simulacin C05 2 2 Filosofa C04 4 3 Algebra C03 4 4 Fsica I C02 4 4 Matemtica C01 Horas Crditos Nombre CursoID 2 2 Filosofa C04 4 4 Fsica I C02 4 4 Matemtica C01 Horas Crditos Nombre CursoID

heber + FOLLOW 10020 views, 0 favs, 4 embeds

Related

Java Sobrecarga y Recursividad2670 views

Manual S Q L Sever2000( C E P S U N I)3751 views

Aprenda SQL Server1804 views

Administracin de Oracle - Tema 4 - Interaccin con la B5883 views

Ansi Sql703 views

Ansi Sql298 views

Ansi Sql214 views

Ansi Sql315 views

Curso Bsico de JDBC4591 views

Disparadores1886 views

Disparadores418 views

Disparadores479 views

Disparadores419 views

PL/SQL8113 views

Sentencias Select6035 views

More by user

Disparadores Trigger En Sql Y My Sql364 views

Modelo E R9875 views

Modelado De Datos11196 views

Introduccion De Base De Datos4018 views

Sql4735 views

Taller 1 6642 views

View all presentations from this user

Taller 1 76292 views

About this presentation USAGE RIGHTS All Rights Reserved

STATS

0Favorites 0Comments 139Downloads 9,968Views onSlideShare

52Views onEmbeds

10,020Total ViewsEMBED VIEWS

46 views on http://www.slideshare.net

3 views on http://hgomezh.blogspot.com

2 views on http://www.hgomezh.blogspot.com

1 views on http://www.educlic.net ACCESSIBILITY View text version ADDITIONAL DETAILS

Uploaded via SlideShare

Uploaded as Microsoft PowerPoint Flag as inappropriate

File a copyright complaint

Categories

Technology

Follow SlideShare

Twitter

Facebook

SlideShare Blog

4tweets 2sharesWordPress

Blogger

More

SQL es un lenguaje de manipulacin de datos completo que puede usarse tambin para modificar los datos de la base de datos y no solo para consultarlos. Los comandos para modificar la base de datos no son tan complejos como la instruccin SELECT. En esta seccin vamos a describir las tres instrucciones SQL disponibles para modificar los contenidos de las tablas de la base de datos.

INSERT: aade nuevas filas de datos a una tabla UPDATE: modifica los datos existentes en una tabla DELETE: elimina filas de datos de una tabla

Adicin de datos a la base de datos (INSERT) Hay dos formas de instruccin INSERT. La primera permite insertar una nica fila en una tabla especificada y tiene el siguiente formato:

INSERT INTO NombreTabla [(ListaColumnas)] VALUES (ListaValoresDatos)

NombreTabla puede ser una tabla base o una vista actualizable y ListaColumnas representa una lista de uno o mas nombres de columnas, separados por comas. La ListaColumnas es opcional; si se la omite, SQL utilizar de forma predeterminada una lista de todas las columnas en su orden original especificado en la instruccin CREATE TABLE. Si se especifica esta lista de columnas, todas las columnas omitidas de la lista debern haber sido declaradas como columnas NULL en el momento de crear la tabla, a menos que se hubiera utilizado la opcin DEFAULT al crear la columna. La ListaValoresDatos debe corresponderse con la ListaColumnas de la forma siguiente:

El numero de elementos de cada lista debe ser el mismo. Debe haber una correspondencia directa entre las posiciones de los elementos de ambas listas, de modo que el primer elemento de ListaValoresDatos se aplique al primer elemento de ListaColumnas, el segundo elemento de ListaValoresDatos se aplique al segundo elemento de LsitaColumnas, etc. El tipo de datos de cada elemento de ListaValoresDatos debe ser compatible con el tipo de datos de la correspondiente columna.

Ejemplo Insertar una nueva fila en la tabla Staff suministrando datos para todas las columnas. INSERT INTO Staff VALUES (SG16,Alan,Brown, Assistant, M, DATE 19570525, 8300, B003); Puesto que estamos insertanto los datos en cada columna en el mismo orden en el que fue creada la tabla, no hay necesidad de especificar ninguna lista de columnas. Observe que los literales de caracteres, como Alan, deben encerrarse entre comillas simples. Ejemplo inserter una nueva fila en la table Staff suministrando datos para todas las columnas obligatorias: staffNo, fName, IName, position, salary, branchNo. INSERT INTO Staff (staffNo, fName, IName, position, salary, branchNo)

VALUES (SG44, Anne, Jones, Assistant, 8100, B003); Puesto que estamos insertando datos en ciertas columnas, podemos especificar los nombres de las columnas en las que los estamos insertando. El orden de los nombres de las columnas no es significativo, aunque lo normal es especificarlas en el orden en que aparece en la Tabla. La segunda forma de la instruccin INSERT permite copiar multiples filas de una o mas tablas en otra tabla, y tiene el siguiente formato. INSERT INTO NombreTabla [( ListaColumnas)] SELECT NombreTabla y ListaColumnas se definen de la misma forma que en el caso anterior en el que solo insertbamos una fila. La clausula SELECT puede ser cualquier instruccin SELECT valida. La fila que se insertan en la tabla especificada ser idntica a la tabla de resultados producida por la subseleccin. Aqu se aplican las mismas restricciones que ya hemos indicado para la primera forma de instruccin INSERT. Ejemplo Suponga que hay una tabla StaffPropCount que contiene los nombres de los empleados y el nmero de inmuebles que gestionan: Rellenar la table StaffPropCount utilizando los detalles contenidos en las tablas Staff y PropertyForRen. INSERT INTO StaffPropCount (SELECT s.staffNo, fName, IName, COUNT (*) FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo GROUP BY s.staffNo, fName, IName) UNION (SELECT staffNo, fName, IName, 0

FROM Staff s WHERE NOT EXISTS (SELECT * FROM PropertyForRent p WHERE p.staffNo = s.staffNo)); Tabla de resultados del ejemplo staffNo SG14 SL21 SG37 SA9G5 SL41 fName John Ann Mary Susan Julie IName White Beech Howe Brand Lee propCount 0 2 1 0 1

Modificacin de datos en la base de datis (UPDATE) La instruccin UPDATE permite modificar el contenido de filas ya existentes en una tabla especificada el formato del comando es: UPDATE NombreTabla SET NombreColumna1 = valorDatos1 [, NombreColumna2 = valorDatos2] [WHERE condicionBusqueda] NombreTabla puede ser el nombre de una tabla base o de una vista actualizable. La clausula SET especfica los nombres de una o ms columnas que hay que actualizar. La clausula WHERE es opcional; si se la omite, las columnas especificadas se actualizarn para todas de las filas de la tabla. Si se especifica una clausula WHERE, solo se actualizarn aquellas filas que satisfagan la condicionBusqueda. Los nuevos valores valorDatos deber ser compatibles con los tipos de datos de las columnas correspondientes. Ejemplo Incrementar un 3% el salario de todos los empleados

UPDATE Staff SET salary = salary * 1.03; Puesto que la actualizacin se aplica a todas las filas de la table Staff, omitimos la clausula WHERE. Ejemplo Incrementar un 5% el salario de todos los gerentes. UPDATE Staff SET salary = salary * 1.05 WHERE position = Manager; La clausula WHERE localiza las filas que contienen datos para los gerentes (Manager) y la actualizacion salary = salary * 1.05 se aplica nicamente a dichas filas concretas. Ejemplo Ascender a David Ford (staffNo = SG14) a Gerente e incrementar su salario a 18000 euros. UPDATE Staff SET position = Manager, salary = 18000 WHERE staffNo = SG14; Borrado de datos de la base de datos (DELETE) La instruccin DELETE permite borrar filas de una tabla especificada. El formato del comando es: DELETE FROM NombreTabla [WHERE condicionBusqueda] Al igual que sucede con las instrucciones INSERT y UPDATE, NombreTabla puede ser el nombre de una tabla base o de una vista

actualizable. La condicionBusqueda es opcional; si se la omite, todas las filas sern borradas de la tabla, esto no hace que se borre la propia tabla; para borrar tanto el contenido de la tabla como su definicin, es necesario utilizar la instruccin DROP TABLE. Si se especifica una condicionBusqueda, solo se borraran aquellas filas que satisfagan la condicin indicada. Ejemplo Borrar todas las visitas relativas al inmueble PG4 DELETE FROM Viewing WHERE propertyNo = PG4; La clausula where localiza las filas correspondientes al inmueble PG4 y la operacin de borrado se aplica nicamente a esas filas concretas. Ejemplo Borrar todas las filas de la tabla visitas DELETE FROM Viewing; No se ha especificado ninguna clausula WHERE, por lo que la operacin de borrado se aplica a todas las filas de la tabla. Esto elimina de la tabla el contenido de todas las filas, dejando nicamente la definicin de la tabla, por lo que continuaremos siendo capaces de insertar datos en la tabla posteriormente.

Bibliografa: 1.- Thomas M. Connolly, Carol E. Begg; "Sistemas de base de datos, un enfoque prctico para diseo, implementacin y gestin. ",Cuarta edicin; Addison Wesley; Madrid; 2005. Captulo 4: Introduccin a SQL.

Pgina anterior