Vous êtes sur la page 1sur 43

Unidad 3.

Consultas y Lenguaje de Manipulacin de Datos (DML)


3.1 Instrucciones INSERT, UPDATE, DELETE.
Consultas de Actualizacin
Las consultas de actualizacin son aquellas que no devuelven ningn registro, son las encargadas de acciones como aadir y borrar y modificar registros.

5.1 DELETE
Crea una consulta de eliminacin que elimina los registros de una o ms de las tablas listadas en la clusula FROM que satisfagan la clusula WHERE. Esta consulta elimina los registros completos, no es posible eliminar el contenido de algn campo en concreto. Su sintaxis es:
DELETE Tabla.* FROM Tabla WHERE criterio

DELETE es especialmente til cuando se desea eliminar varios registros. En una instruccin DELETE con mltiples tablas, debe incluir el nombre de tabla (Tabla.*). Si especifica ms de una tabla desde la que eliminar registros, todas deben ser tablas de muchos a uno. Si desea eliminar todos los registros de una tabla, eliminar la propia tabla es ms eficiente que ejecutar una consulta de borrado. Se puede utilizar DELETE para eliminar registros de una nica tabla o desde varios lados de una relacin uno a muchos. Las operaciones de eliminacin en cascada en una consulta nicamente eliminan desde varios lados de una relacin. Por ejemplo, en la relacin entre las tablas Clientes y Pedidos, la tabla Pedidos es la parte de muchos por lo que las operaciones en cascada solo afectaran a la tabla Pedidos. Una consulta de borrado elimina los registros completos, no nicamente los datos en campos especficos. Si desea eliminar valores en un campo especificado, crear una consulta de actualizacin que cambie los valores a Null. Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede deshacer la operacin. Si desea saber qu registros se eliminarn, primero examine los resultados de una consulta de seleccin que utilice el mismo criterio y despus ejecute la consulta de borrado. Mantenga copias de seguridad de sus datos en todo momento. Si elimina los registros equivocados podr recuperarlos desde las copias de seguridad.
DELETE * FROM Empleados WHERE Cargo = 'Vendedor';

5.2 INSERT INTO


Agrega un registro en una tabla. Se la conoce como una consulta de datos aadidos. Esta consulta puede ser de dos tipos: Insertar un nico registro Insertar en una tabla los registros contenidos en otra tabla.

5.2.1 Para insertar un nico Registro:


En este caso la sintaxis es la siguiente:
INSERT INTO Tabla (campo1, campo2, .., campoN) VALUES (valor1, valor2, ..., valorN)

Esta consulta graba en el campo1 el valor1, en el campo2 y valor2 y as sucesivamente. Hay que prestar especial atencin a acotar entre comillas simples (') los valores literales (cadenas de caracteres) y las fechas indicarlas en formato mm-dd-aa y entre caracteres de almohadillas (#).

5.2.2 Para insertar Registros de otra Tabla:


En este caso la sintaxis es:
INSERT INTO Tabla [IN base_externa] (campo1, campo2, ..., campoN) SELECT TablaOrigen.campo1, TablaOrigen.campo2, ..., TablaOrigen.campoN FROM TablaOrigen

En este caso se seleccionarn los campos 1,2, ..., n de la tabla origen y se grabarn en los campos 1,2,.., n de la Tabla. La condicin SELECT puede incluir la clusula WHERE para filtrar los registros a copiar. Si Tabla y TablaOrigen poseen la misma estructura podemos simplificar la sintaxis a:
INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigen

De esta forma los campos de TablaOrigen se grabarn en Tabla, para realizar esta operacin es necesario que todos los campos de TablaOrigen estn contenidos con igual nombre en Tabla. Con otras palabras que Tabla posea todos los campos de TablaOrigen (igual nombre e igual tipo). En este tipo de consulta hay que tener especial atencin con los campos contadores o autonumricos puesto que al insertar un valor en un campo de este tipo se escribe el valor que contenga su campo homlogo en la tabla origen, no incrementndose como le corresponde.

Se puede utilizar la instruccin INSERT INTO para agregar un registro nico a una tabla, utilizando la sintaxis de la consulta de adicin de registro nico tal y como se mostr anteriormente. En este caso, su cdigo especfica el nombre y el valor de cada campo del registro. Debe especificar cada uno de los campos del registro al que se le va a asignar un valor as como el valor para dicho campo. Cuando no se especifica dicho campo, se inserta el valor predeterminado o Null. Los registros se agregan al final de la tabla. Tambin se puede utilizar INSERT INTO para agregar un conjunto de registros pertenecientes a otra tabla o consulta utilizando la clusula SELECT ... FROM como se mostr anteriormente en la sintaxis de la consulta de adicin de mltiples registros. En este caso la clusula SELECT especifica los campos que se van a agregar en la tabla destino especificada. La tabla destino u origen puede especificar una tabla o una consulta. Si la tabla destino contiene una clave principal, hay que asegurarse que es nica, y con valores no-Null ; si no es as, no se agregarn los registros. Si se agregan registros a una tabla con un campo Contador, no se debe incluir el campo Contador en la consulta. Se puede emplear la clusula IN para agregar registros a una tabla en otra base de datos. Se pueden averiguar los registros que se agregarn en la consulta ejecutando primero una consulta de seleccin que utilice el mismo criterio de seleccin y ver el resultado. Una consulta de adicin copia los registros de una o ms tablas en otra. Las tablas que contienen los registros que se van a agregar no se vern afectadas por la consulta de adicin. En lugar de agregar registros existentes en otra tabla, se puede especificar los valores de cada campo en un nuevo registro utilizando la clusula VALUES. Si se omite la lista de campos, la clusula VALUES debe incluir un valor para cada campo de la tabla, de otra forma fallar INSERT.
INSERT INTO Clientes SELECT Clientes_Viejos.* FROM Clientes_Nuevos; INSERT INTO Empleados (Nombre, Apellido, Cargo) VALUES ('Luis', 'Snchez', 'Becario'); INSERT INTO Empleados SELECT Vendedores.* FROM Vendedores WHERE Fecha_Contratacion < Now() - 30;

5.3 UPDATE
Crea una consulta de actualizacin que cambia los valores de los campos de una tabla especificada basndose en un criterio especfico. Su sintaxis es:
UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ... CampoN=ValorN WHERE Criterio;

UPDATE es especialmente til cuando se desea cambiar un gran nmero de registros o cuando stos se encuentran en mltiples tablas. Puede cambiar varios campos a la vez. El ejemplo siguiente incrementa los valores Cantidad pedidos en un 10 por ciento y los valores Transporte en un 3 por ciento para aquellos que se hayan enviado al Reino Unido.:
UPDATE Pedidos SET Pedido = Pedidos * 1.1, Transporte = Transporte * 1.03 WHERE PaisEnvo = 'ES';

UPDATE no genera ningn resultado. Para saber qu registros se van a cambiar, hay que examinar primero el resultado de una consulta de seleccin que utilice el mismo criterio y despus ejecutar la consulta de actualizacin.
UPDATE Empleados SET Grado = 5 WHERE Grado = 2; UPDATE Productos SET Precio = Precio * 1.1 WHERE Proveedor = 8 AND Familia = 3;

Si en una consulta de actualizacin suprimimos la clusula WHERE todos los registros de la tabla sealada sern actualizados.
UPDATE Empleados SET Salario = Salario * 1.1

http://www.maestrosdelweb.com/editorial/tutsql5/

Sentencia INSERT
La sentencia de INSERT se utiliza para aadir registros a las tablas de la base de datos. El formato de la sentencia es: INSERT INTO nombre_tabla [(nombre_columna, ...)] VALUES (expr, ...) nombre_tabla puede ser nicamente el nombre de la tabla. nombre_columna es una lista opcional de nombres de campo en los que se insertarn valores en el mismo nmero y orden que se especificarn en la clusula VALUES. Si no se especifica la lista de campos, los valores de expr en la clusula VALUES deben ser tantos como campos tenga la tabla y en el mismo orden que se definieron al crear la tabla. expr es una lista de expresiones o valores constantes, separados por comas, para dar valor a los distintos campos del registro que se aadir a la tabla. Las cadenas de caracteres debern estar encerradas entre comillas . Ejemplo para aadir un registro a una tabla:

INSERT INTO RUBROS (CLAVE, NOMBRE) VALUES 9, 'Otros'); Cada sentencia INSERT aade un nico registro a la tabla. En el ejemplo solo se han especificado 2 campos con sus respectivos valores, el resto de campos quedaran a nulo. Un valor nulo NULL no significa blancos o ceros sino simplemente que el campo nunca ha tenido un valor.

Sentencia UPDATE
La sentencia UPDATE se utiliza para cambiar el contenido de los registros de una tabla de la base de datos. Su formato es: UPDATE nombre_tabla SET nombre_columna = expr, ... [WHERE { condicin }] nombre_tabla puede ser nicamente el nombre de la tabla. nombre_columna es el nombre de columna o campo cuyo valor se desea cambiar. En una misma sentencia UPDATE pueden actualizarse varios campos de cada registro de la tabla. expr es el nuevo valor que se desea asignar al campo que le precede. La expresin puede ser un valor constante o una subconsulta. Las cadenas de caracteres debern estar encerradas entre comillas . Las subconsultas entre parntesis. La clusula WHERE sigue el mismo formato que la vista en la sentencia SELECT y determina que registros se modificarn. Por ejemplo, cambiar los nombres de los de la tabla RUBROS de aquellos de aquelos cuya clave sea mayor que 2, sera: UPDATE RUBROS SET NOMBRE = 'Nuevo' WHERE CLAVE = 9,

Sentencia DELETE
La sentencia DELETE se utiliza para borrar registros de una tabla de la base de datos. El formato de la sentencia es: DELETE FROM nombre_tabla [WHERE { condicin }] nombre_tabla puede ser nicamente el nombre de la tabla. La clusula WHERE sigue el mismo formato que la vista en la sentencia SELECT y determina que registros se borrarn. Cada sentencia DELETE borra los registros que cumplen la condicin impuesta o todos si no se indica clusula WHERE. DELETE FROM RUBROS WHERE CLAVE = 9 Con el ejemplo anterior se borraran todos los registros de la tabla rubros cuya clave sea igual a 2. http://www.lania.mx/biblioteca/seminarios/basedatos/sql.html#cgroupby

SQL, cuenta con mdulos DDL, para la definicin de datos que nos permite crear o modificar la estructura de las tablas. Las instrucciones para realizar estas operaciones son: CREATE TABLE: Nos permite crear una tabla de datos vaca. INSERT: Permite almacenar registros en una tabla creada. UPDATE: Permite modificar datos de registros almacenados en la tabla. DELETE: Borra un registro entero o grupo de registros de una tabla. CREATE INDEX: Crea un ndice que nos puede auxiliar para las consultas. DROP TABLE: Permite borrar una tabla. DROP INDEX: Borra el ndice indicado. Para ejemplificar las instrucciones anteriores consideremos el ejemplo ALUMNO cursa - MATERIA, que tienen los siguientes atributos: NControl NControl Clave NombreA Clave NombreM Especialidad Calif Creditos Direccin * Estructura de la sentencia CREATE TABLE.

CREATE TABLE <Nombre de la tabla> ( Atributo1: tipo de dato longitud , Atributo2: tipo de dato longitud , Atributo3: tipo de dato longitud , : : Atributon: tipo de dato longitud , PRIMARY KEY (Opcional) ) ; Los campos pueden definirse como NOT NULL de manera opcional excepto en la llave primaria para lo cual es obligatorio. Adems al definir la llave primaria se genera automticamente un ndice con respecto al campo llave; para definir la llave la denotamos dentro de los parntesis de PRIMARY KEY. Ejemplo: Crear la tabla alumno con los atributos antes descritos, tomando como llave el numero de control. CREATE TABLE Alumno ( NControl char(8) NOT NULL, NombreA char(20), Especialidad char(3), Direccin char(30), PRIMARY KEY (NControl) ); Tabla Alumno: NControl NombreA Especialidad Direccin

Pueden existir ms de una llave primaria, esto es si se requiere, se crearn tantos ndices como llaves primarias se establezcan. Pueden existir tantos campos Not Null (No nulos) como se requieran; En si estructurar la creacin de una tabla es siempre parecida al ejemplo anterior. * Estructura de la sentencia INSERT INSERT INTO Nombre de la tabla a la que se le va a insertar el registro VALUES (Conjunto de valores del registro ) ; Ejemplo: Insertar en la tabla Alumno, antes creada los datos del alumno Daniel coln, con numero de control 95310518 de la especialidad de Ingeniera civil, con domicilio Abasolo Norte #45. INSERT INTO Alumno VALUES("95310518","Daniel Coln","IC","Abasolo Norte #45") ;

Ntese que la insercin de los datos se realiza conforme la estructura que se implanto en la tabla, es decir en el orden en que se creo dicha tabla. En caso de querer omitir un dato que no sean no nulos solamente se ponen las comillas indicando el vaco de la cadena. * Estructura de la Sentencia CREATE INDEX CREATE INDEX Nombre que se le asignara al ndice. ON Nombre de la taba a la cual se le creara el ndice (Campo(s) por el cual se creara el ndice); Ejemplo: Crear un ndice de la tabla Alumno por el campo Especialidad. CREATE INDEX Indice1 ON Alumno(Especialidad); Este ndice contendr a todos los alumnos ordenados por el campo especialidad. CREATE INDEX UNIQUE INDEX Indice2 ON Alumno (Especialidad); En la creacin de este ndice utilizamos la sentencia UNIQUE, es un indicador para permitir que se cree un ndice nico por especialidad, esta sentencia siempre se coloca antes de CREATE INDEX. En este ejemplo se creara un ndice que contenga un alumno por especialidad existente. * Estructura de la sentencia UPDATE UPDATE Nombre de la tabla en donde se modificaran los datos. SET Valores WHERE (Condicin); Ejemplo: Modificar el nmero de control del registro de Daniel Coln de la Tabla alumno por el nmero 96310518. UPDATE Alumno SET NControl 96310518 WHERE NombreA=Daniel Coln; * Estructura de la sentencia DROP TABLE DROP TABLE Nombre de la tabla a borrar ; Ejemplo: Borrar la tabla Alumno creada anteriormente. DROP TABLE Alumno; * Estructura de la sentencia DROP INDEX

DROP INDEX Nombre del ndice a borrar; Ejemplo: Borrar el ndice Indice1 creado anteriormente. DROP INDEX Indice1; * Estructura de la sentencia DELETE DELETE FROM Nombre de la tabla WHERE Condicin; Ejemplos: - Borrar el registro cuyo nmero de control es 95310386. DELETE FROM Alumno WHERE Control=95310386; - Borrar todos los registros de la tabla alumno. DELETE FROM Alumno; En el primer ejemplo, se borrara todo el registro(todos los datos), del alumno con nmero de control = 95310386. En el segundo ejemplo se borraran todos los registros de la tabla alumno, pero sin borrar la estructura de la tabla, ya que la orden Delete solo borra registros, la sentencia Drop Table es la que borra toda la estructura de la tabla junto con los registros de la misma.

3.2 Consultas Bsicas SELECT, WHERE y funciones a nivel de registro.


La estructura bsica de una expresin en SQL contiene 3 partes, Select, From y Where. La clusula Select se usa para listar los atributos que se desean en el resultado de una consulta. From, Lista las relaciones que se van a examinar en la evaluacin de la expresin. Where, es la definicin de las condiciones a las que puede estar sujeta una consulta. La consulta tpica de SQL tiene la siguiente forma: Select A1,A2,A3...An From r1,r2,r3...rm

Where Condicin(es) Donde: A1,A2,A3...An: Representan a cada atributo(s) o campos de las tablas de la base de datos relacional. R1,r2,r3...rm: Representan a la(s) tabla(s) involucradas en la consulta. Condicin: Es el enunciado que rige el resultado de la consulta. Si se omite la clusula Where, la condicin es considerada como verdadera, la lista de atributos (A1,A2..An) puede sustituirse por un asterisco (*), para seleccionar todos los atributos de todas las tablas que aparecen en la clusula From. Funcionamiento del SQL. El SQL forma el producto cartesiano de las tablas involucradas en la clusula From, cumpliendo con la condicin establecida en la orden Where y despus proyecta el resultado con la orden select. Para nuestros ejemplos consideremos una tabla llamada CURSO, que contiene los siguientes campos: Nombre del campo NumC NombreC DescC Creditos Costo Depto Descripcin Nmero del curso, nico para identificar cada curso Nombre del curso, tambin es nico Descripcin del curso Crditos, nmero de estos que gana al estudiante al cursarlo Costo del curso. Departamento acadmico que ofrece el curso.

Datos contenidos en la tabla CURSO NumC A01 S01 C01 B01 E01 S02 C02 Liderazgo Introduccin a la inteligencia artificial Construccin de torres Situacin actual y perspectivas de la alimentacin y la nutricin Historia presente y futuro de la energa solar Tecnologa OLAP Tecnologa del concreto y de las Estructuras NombreC DescC Para pblico General Para ISC y LI Para IC y Arquitectura Para IB IE e II Para ISC y LI Para IC Creditos 10 10 8 8 10 8 10 Costo 100.00 90.00 0.00 80.00 100.00 100.00 100.00 Depto Admn. Sistemas. Ciencias Bioqumica Electromecnica. Sistemas Ciencias

B02 E02 S03 A01 C03 S04 S05 I01

Metabolismo de lpidos en el camarn Los sistemas elctricos de potencia Estructura de datos Diseo bioclimtico Matemticas discretas Circuitos digitales Arquitectura de Computadoras Base de Datos Relacionales Ejemplos de consultas: OBTENCIN DE UNA TABLA ENTERA

Para IB Para IE Para ISC y LI Para Arquitectura General Para ISC Para ISC Para ISC y LI

10 10 8 10 8 10 10 10

0.00 100.00 0.00 0.00 0.00 0.00 50.00 150.00

Bioqumica Electromecnica Sistemas Arquitectura Ciencias Sistemas Sistemas Informtica

Obtener toda la informacin disponible sobre un curso donde Costo sea 0.

SELECT * FROM CURSO WHERE Costo=0.00 Resultado de la consulta anterior. NumC C01 B02 S03 A01 C03 NombreC Construccin de torres Metabolismo de lpidos en el camarn Estructura de datos Diseo bioclimtico Matemticas discretas DescC Para IC y Arquitectura Para IB Para ISC y LI Para Arquitectura General Creditos 8 10 8 10 8 Costo 0.00 0.00 0.00 0.00 0.00 Depto Ciencias Bioqumica Sistemas Arquitectura Ciencias

Colocamos un * debido a que no nos limitan la informacin de la tabla, es decir nos piden que mostremos todos los datos atributo de la tabla CURSO. Como la nica condicin en la sentencia WHERE es que la tarifa del curso sea igual a 0, esta consulta regresa todas las tuplas donde se encuentre que Costo = 0.00. Debido a que Costo es un campo numrico, la condicin solo puede comparar con campos del mismo tipo. Para representar valores negativos se antepone a la izquierda el signo (-), en este ejemplo se considera solo el signo (=) para establecer la condicin, sin embargo otros operadores que se pueden utilizar son: Menor que <

Mayor que > Menor o igual que <= Mayor o igual que >= Diferente <> Adems de los operadores booleanos AND, NOT, OR. Cabe sealar que en la sentencia Where cuando se requiere establecer condiciones con cadenas, estas son delimitadas por apstrofos (). Las expresiones de cadenas son comparadas carcter por carcter, dos cadenas son iguales solo si coinciden todos los caracteres de las mismas. Ejemplos de consultas con cadenas: Obtener toda la informacin sobre cualquier curso que ofrezca el departamento de Ciencias.

SELECT * FROM CURSO WHERE Depto = 'Ciencias'; Resultado de la consulta. NumC C01 C02 S04 NombreC Construccin de torres Tecnologa del concreto y de las Estructuras Circuitos digitales DescC Para IC y Arquitectura Para IC Para ISC Creditos 8 10 10 Costo 0.00 100.00 0.00 Depto Ciencias Ciencias Sistemas

VISUALIZACIN DE COLUMNAS ESPECIFICADAS. En los ejemplos anteriores obtenamos toda la tabla completa, ahora veremos como mostrar solo algunos atributos especficos de una tabla. Obtener los valores NumC,NombreC y Depto, en este orden de toda la tabla curso.

SELECT NumC, NombreC, Depto FROM CURSO; Resultado de la consulta: NumC A01 Liderazgo NombreC Depto Admn.

S01 C01 B01 E01 S02 C02 B02 E02 S03 A01 C03 S04 S05 I01

Introduccin a la inteligencia artificial Construccin de torres Situacin actual y perspectivas de la alimentacin y la nutricin Historia presente y futuro de la energa solar Tecnologa OLAP Tecnologa del concreto y de las Estructuras Metabolismo de lpidos en el camarn Los sistemas elctricos de potencia Estructura de datos Diseo bioclimtico Matemticas discretas Circuitos digitales Arquitectura de Computadoras Base de Datos Relacionales

Sistemas. Ciencias Bioqumica Electromecnica. Sistemas Ciencias Bioqumica Electromecnica Sistemas Arquitectura Ciencias Sistemas Sistemas Informtica

Observamos que en este caso no se tiene la sentencia Where, no existe condicin, por lo tanto, todas las filas de la tabla CURSO se recuperan, pero solo se visualizaran las tres columnas especificadas. As mismo, empleamos la (,) para separar los campos que deseamos visualizar.

VISUALIZACIN DE UN SUBCONJUNTO DE FILAS Y COLUMNAS Seleccionar los valores NumC, Depto y Costo para todos los cursos que tengan un Costo inferior a $100

SELECT NumC, Depto, Costo FROM CURSO WHERE Costo < 100.00 Como resultado de esta consulta se obtendrn todas aquellas tuplas que tengan un costo en CTARIFA menor que 100, y se visualizaran solo los campos de NumC, Depto,Costo. Podemos observar que este ejemplo cubre el formato general de una consulta SQL. La palabra clave DISTINCT DISTINCT, es una palabra reservada que elimina las filas que duplicadas en el resultado de una consulta.

Visualizar todos los departamentos acadmicos que ofrezcan cursos, rechazando los valores duplicados.

SELECT DISTINCT Depto FROM CURSO; Resultado de la consulta Depto Administracin Sistemas Ciencias Bioqumica electromecnica Arquitectura Informtica La palabra DISTINCT va estrictamente despus de la palabra SELECT. De no haberse utilizado la palabra DISTINCT, el resultado hubiera mostrado todas las tuplas del atributo Depto que se encontraran, es decir, se hubiera visualizado la columna de Depto completamente. EMPLEO DE LOS CONECTORES BOOLEANOS (AND, OR, NOT) Para emplear las condiciones mltiples dentro de la sentencia WHERE, utilizamos los conectores lgicos. El conector AND. Este conector pide al sistema que seleccione una sola columna nicamente si ambas condiciones se cumplen. Obtener toda la informacin sobre todos los cursos que ofrece el departamento Sistemas que tengan una tarifa igual a 0.

SELECT * FROM CURSO WHERE Depto=Sistemas AND Costo=0.00; El resultado de esta consulta sera todas aquellas tuplas que cumplan exactamente con las dos condiciones establecidas. El conector OR.

Este conector al igual que el AND permite conectar condiciones mltiples en la sentencia WHERE, a diferencia del conector AND, el OR permite la seleccin de filas que cumplan con una sola de las condiciones establecidas a travs de este conector. Obtener toda la informacin existente sobre cualquier curso ofrecido por los departamentos Arquitectura o Bioqumica.

SELECT * FROM CURSO WHERE Depto = Arquitectura OR Depto= Bioqumica; El resultado de esta consulta ser la de visualizar todas aquellas tuplas donde se cumpla cualquiera de las 2 condiciones, es decir mostrara todas las tuplas que tengan en el atributo Depto=Arquitectura o Bioqumica. El conector NOT Este nos permite marcar aquellas tuplas que por alguna razn no deseamos visualizar. Obtener el nombre del curso y del departamento de todos los cursos que no sean ofrecidos por el departamento Sistemas.

SELECT NombreC, Depto FROM CURSO WHERE NOT (Depto=Sistemas); JERARQUIA DE OPERADORES BOOLEANOS. En orden descendente (de mayor a menor prioridad) NOT AND OR Existen dos formas para realizar consultas: Join de Querys y Subquerys. Cuando en la sentencia From colocamos los nombres de las tablas separados por comas se dice que efectuamos una consulta de la forma Join de Querys, en este caso se requiere anteponer el nombre de la tabla y un punto al nombre del atributo. En el Join de Querys el resultado que se produce con las tablas que intervienen en la consulta es la concatenacin de las tablas, en donde los valores de una columna de la primera tabla coinciden con los valores de una segunda tabla, la tabla de resultado tiene una fila por cada valor coincidente que resulte de las dos tablas originales. Para ejemplificar esto, consideremos 2 tablas: Tabla1 y Tabla2, entonces: C1 A C2 AAA C3 10 CA 35 CB R

B C D E F G H

BBB CCC DDD EEE FFF GGG HHH

45 55 20 20 90 15 90

10 65 20 90 90 75 90 35

S T U V W X Y Z

Resultado de la operacin Join: C1 A D E F F F H H H C2 AAA DDD EEE FFF FFF FFF HHH HHH HHH C3 10 20 20 90 90 90 90 90 90 CA 10 20 20 90 90 90 90 90 90 CB S U U V W Y V W Y

Como podemos observar, la comparacin se efectu por las columnas C3 y CA, que son donde se encontraron valores iguales, el resultado muestra una tupla por cada coincidencia encontrada. Cuando las consultas se anidan se conoce como Subquerys o subconsultas. Este tipo de consulta obtiene resultados parciales reduciendo el espacio requerido para realizar una consulta. Nota: Todas las consultas que se resuelven con subquerys pueden resolverse con Join de Querys, pero no todas las consultas hechas con Join de Querys pueden resolverse utilizando Subquerys. Para ejemplificar lo anterior consideremos el ejemplo ALUMNO cursa NControl NControl NombreA Clave Especialidad Calif Direccin - MATERIA, que tienen los siguientes atributos: Clave NombreM Creditos

Representando en tablas a los atributos quedaran de la siguiente forma:

Tabla alumno: NControl NombreA Especialidad Direccin

Tabla cursa: NControl Clave Calif

Tabla materia: Clave NombreM Creditos

Obtener el nombre de la materia que cursa el alumno con nmero de control 97310211 con crditos igual a ocho.

SELECT NombreA FROM Materia WHERE creditos=8 and clave in(SELECT clave FROM cursa WHERE NControl=97310211; Obtener el nmero de control del alumno que tenga alguna calificacin igual a 100

SELECT DISTINC(NControl) FROM Cursa WHERE Calif=100; Obtener el nombre de las materias que cursa el alumno Salvador Chvez. SELECT NombreM FROM Materia WHERE Clave in (SELECT DISTINC (Clave) FROM Cursa WHERE NControl in (SELECT NControl) FROM Alumno WHERE NombreA=Salvador Chvez));

FUNCIONES AVANZADAS APLICABLES A CONSULTAS Existen funciones que permiten la agilizacin de consultas similares a una hoja de clculo, ya que trabajan en base a renglones y columnas. COUNT ( ): Cuenta el nmero de tuplas en la columna establecida MIN ( ): Localiza el valor mnimo de la columna establecida

MAX ( ): Localiza el valor mximo de la columna establecida. AVG ( ): Obtiene el promedio de valores de la columna establecida SUM ( ): Obtiene el valor total que implican los valores obtenidos en la columna establecida. Ejemplos: Obtener el nmero de alumnos que existen en la carrera de Ingeniera en Sistemas Computacionales.

SELECT Count (*) FROM Alumno WHERE especialidad=ISC; Obtener la mximo calificacin que ha obtenido J.M. Cadena.

SELECT Max(Calif) FROM Cursa WHERE NControl IN (SELECT NControl FROM Alumno WHERE NombreA= J.M. Cadena ); Obtener el promedio de calificaciones de Salvador Chvez.

SELECT Avg (Calif) FROM Cursa WHERE NCotrol IN (SELECT NControl FROM Alumno WHERE NombreA=Salvador Chvez); Obtener la suma total de las calificaciones obtenidas por Daniel Coln.

SELECT Sum (Calif) FROM Cursa WHERE NControl IN (SELECT NControl FROM Alumno WHERE NombreA=Daniel Coln); Hasta aqu hemos visto el manejo sencillo de realizar consultas con SQL, hay que destacar que en la realizacin de consultas anidadas se tiene que poner cuidando a la prioridad de los operadores, teniendo cuidado tambin al momento de agrupar los parntesis que involucran las condiciones con los operadores.

La estructura bsica de una expresin para consulta SQL consta de tres clusulas: SELECT FROM WHERE

La clusula SELECT se usa para listar los atributos que se desean en el resultado de una consulta. La clusula FROM lista las relaciones que se van a examinar en la evaluacin de la expresin La clusula WHERE costa de un predicado que implica atributos de las relaciones que aparecen en la clusula FROM. Una consulta bsica en SQL tiene la forma: SELECT A1,A2,...,An FROM r1,r2,...,rn WHERE P Donde Ai = atributo ( Campo de la tabla ) ri = relacin ( Tabla ) P = predicado ( condicin ) Ejemplo 2.1 : Seleccionar todos los nombres de las personas que tengan el apellido MARQUESI de la tabla persona SELECT nombre FROM persona WHERE apellido = " MARQUESI" ANSWER 1 2 NOMBRE MARTIN PABLO

El resultado de una consulta es por supuesto otra relacin. Si se omite la clusula WHERE, el predicado P es verdadero. La lista A1, A2,..., An puede sustituirse por un asterisco (*) para seleccionar todos los atributos de todas las relaciones que aparecen en la clusula FROM, aunque no es conveniente elegir esta ultima opcin salvo que sea necesario pues desperdiciamos mucho tiempo en obtenerlo Alias Es posible renombrar los atributos y las relaciones, a veces por conveniencia y otras veces por ser necesario, para esto usamos la clausula AS como en el siguiente ejemplo. Ejemplo 2.2 SELECT P.nombre AS [PRIMER NOMBRE] FROM persona P WHERE apellido = "MARQUESI" ANSWER 1 2 PRIMER NOMBRE MARTIN PABLO

En este ejemplo cabe destacar un par de cosas. Cuando nos referimos a un atributo como es el caso de nombre, podemos referirnos a este usando la relacin ( o el alias en este ejemplo ) a la que pertenece el atributo seguido de un punto seguido del atributo <P.nombre>, a veces esta notacin ser necesaria para eliminar ambigedades. Los corchetes los usamos cuando usamos espacios en blancos o el caratr () en el nombre de atributo o alias. Usar 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. En las consultas que contienen subconsultas, se aplica una regla de mbito a las variables de tupla. En una subconsulta esta permitido usar solo variables de tupla definidas en la misma subconsulta o en cualquier consulta que tenga la subconsulta.

http://www.monografias.com/trabajos11/prosq/prosq.shtml#es

Consultas de Seleccin
Las consultas de seleccin se utilizan para indicar al motor de datos que devuelva informacin de las bases de datos, esta informacin es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset. Este conjunto de registros es modificable.

2.1 Consultas bsicas


La sintaxis bsica de una consulta de seleccin es la siguiente:
SELECT Campos FROM Tabla;

En donde campos es la lista de campos que se deseen recuperar y tabla es el origen de los mismos, por ejemplo:
SELECT Nombre, Telefono FROM Clientes;

Esta consulta devuelve un recordset con el campo nombre y telfono de la tabla clientes.

2.2 Ordenar los registros


Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la clasula ORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar. Ejemplo:
SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY Nombre;

Esta consulta devuelve los campos CodigoPostal, Nombre, Telefono de la tabla Clientes ordenados por el campo Nombre. Se pueden ordenar los registros por mas de un campo, como por ejemplo:
SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY

CodigoPostal, Nombre;

Incluso se puede especificar el orden de los registros: ascendente mediante la clasula (ASC -se toma este valor por defecto) descendente (DESC)
SELECT CodigoPostal, Nombre, Telefono FROM Clientes ORDER BY CodigoPostal DESC , Nombre ASC;

2.3 Consultas con Predicado


El predicado se incluye entre la clasula y el primer nombre del campo a recuperar, los posibles predicados son:
Predicado Descripcin

Devuelve todos los campos de la tabla Devuelve un determinado nmero de registros de la tabla Omite los registros cuyos campos seleccionados DISTINCT coincidan totalmente Omite los registros duplicados basandose en la totalidad DISTINCROW del registro y no slo en los campos seleccionados. ALL TOP ALL: Si no se incluye ninguno de los predicados se asume ALL. El Motor de base de datos selecciona todos los registros que cumplen las condiciones de la instruccin SQL. No se conveniente abusar de este predicado ya que obligamos al motor de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene, es mucho ms rpido indicar el listado de campos deseados.
SELECT ALL FROM Empleados; SELECT * FROM Empleados;

TOP: Devuelve un cierto nmero de registros que entran entre al principio o al final de un rango especificado por una clusula ORDER BY. Supongamos que queremos recuperar los nombres de los 25 primeros estudiantes del curso 1994:
SELECT TOP 25 Nombre, Apellido FROM Estudiantes ORDER BY Nota DESC;

Si no se incluye la clusula ORDER BY, la consulta devolver un conjunto arbitrario de 25 registros de la tabla Estudiantes .El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si la nota media nmero 25 y la 26 son iguales, la consulta devolver 26 registros. Se puede utilizar la palabra reservada

PERCENT para devolver un cierto porcentaje de registros que caen al principio o al final de un rango especificado por la clusula ORDER BY. Supongamos que en lugar de los 25 primeros estudiantes deseamos el 10 por ciento del curso:
SELECT TOP 10 PERCENT Nombre, Apellido FROM Estudiantes ORDER BY Nota DESC;

El valor que va a continuacin de TOP debe ser un Integer sin signo.TOP no afecta a la posible actualizacin de la consulta. DISTINCT: Omite los registros que contienen datos duplicados en los campos seleccionados. Para que los valores de cada campo listado en la instruccin SELECT se incluyan en la consulta deben ser nicos. Por ejemplo, varios empleados listados en la tabla Empleados pueden tener el mismo apellido. Si dos registros contienen Lpez en el campo Apellido, la siguiente instruccin SQL devuelve un nico registro:
SELECT DISTINCT Apellido FROM Empleados;

Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la clusula SELECT posean un contenido diferente. El resultado de una consulta que utiliza DISTINCT no es actualizable y no refleja los cambios subsiguientes realizados por otros usuarios. DISTINCTROW: Devuelve los registros diferentes de una tabla; a diferencia del predicado anterior que slo se fijaba en el contenido de los campos seleccionados, ste lo hace en el contenido del registro completo independientemente de los campo indicados en la clusula SELECT.
SELECT DISTINCTROW Apellido FROM Empleados;

Si la tabla empleados contiene dos registros: Antonio Lpez y Marta Lpez el ejemplo del predicado DISTINCT devuleve un nico registro con el valor Lpez en el campo Apellido ya que busca no duplicados en dicho campo. Este ltimo ejemplo devuelve dos registros con el valor Lpez en el apellido ya que se buscan no duplicados en el registro completo.

2.4 Alias
En determinadas circunstancias es necesario asignar un nombre a alguna columna determinada de un conjunto devuelto, otras veces por simple capricho o por otras circunstancias. Para resolver todas ellas tenemos la palabra reservada

AS que se encarga de asignar el nombre que deseamos a la columna deseada. Tomado como referencia el ejemplo anterior podemos hacer que la columna devuelta por la consulta, en lugar de llamarse apellido (igual que el campo devuelto) se llame Empleado. En este caso procederamos de la siguiente forma:
SELECT DISTINCTROW Apellido AS Empleado FROM Empleados;

2.5 Recuperar Informacin de una base de Datos Externa


Para concluir este captulo se debe hacer referencia a la recuperacin de registros de bases de datos externa. Es ocasiones es necesario la recuperacin de informacin que se encuentra contenida en una tabla que no se encuentra en la base de datos que ejecutar la consulta o que en ese momento no se encuentra abierta, esta situacin la podemos salvar con la palabra reservada IN de la siguiente forma:
SELECT DISTINCTROW Apellido AS Empleado FROM Empleados IN 'c:\databases\gestion.mdb';

En donde c:\databases\gestion.mdb es la base de datos que contiene la tabla Empleados. http://www.maestrosdelweb.com/editorial/tutsql3/

3. Criterios de Seleccin
En el captulo anterior se vio la forma de recuperar los registros de las tablas, las formas empleadas devolvan todos los registros de la mencionada tabla. A lo largo de este captulo se estudiarn las posibilidades de filtrar los registros con el fin de recuperar solamente aquellos que cumplan unas condiciones preestablecidas. Antes de comenzar el desarrollo de este captulo hay que recalcar tres detalles de vital importancia. El primero de ellos es que cada vez que se desee establecer una condicin referida a un campo de texto la condicin de bsqueda debe ir encerrada entre comillas simples; la segunda es que no se posible establecer condiciones de bsqueda en los campos memo y; la tercera y ltima hace referencia a las fechas. Las fechas se deben escribir siempre en formato mm-ddaa en donde mm representa el mes, dd el da y aa el ao, hay que prestar atencin a los separadores -no sirve la separacin habitual de la barra (/), hay que utilizar el guin (-) y adems la fecha debe ir encerrada entre almohadillas (#). Por ejemplo si deseamos referirnos al da 3 de Septiembre de 1995 deberemos hacerlo de la siguiente forma; #09-03-95# #9-3-95#.

3.1 Operadores Lgicos

Los operadores lgicos soportados por SQL son: AND, OR, XOR, Eqv, Imp, Is y Not. A excepcin de los dos ltimos todos poseen la siguiente sintaxis: <expresin1> operador <expresin2> En donde expresin1 y expresin2 son las condiciones a evaluar, el resultado de la operacin vara en funcin del operador lgico. La tabla adjunta muestra los diferentes posibles resultados:
<expresin1> Operador AND AND AND AND OR OR OR OR XOR XOR XOR XOR Eqv Eqv Eqv Eqv Imp Imp Imp Imp Imp Imp Imp Imp Imp <expresin2> Resultado

Verdad Verdad Falso Falso Verdad Verdad Falso Falso Verdad Verdad Falso Falso Verdad Verdad Falso Falso Verdad Verdad Verdad Falso Falso Falso Null Null Null

Falso Verdad Verdad Falso Falso Verdad Verdad Falso Verdad Falso Verdad Falso Verdad Falso Verdad Falso Verdad Falso Null Verdad Falso Null Verdad Falso Null

Falso Verdad Falso Falso Verdad Verdad Verdad Falso Falso Verdad Verdad Falso Verdad Falso Falso Verdad Verdad Falso Null Verdad Verdad Verdad Verdad Null Null

Si a cualquiera de las anteriores condiciones le anteponemos el operador NOT el resultado de la operacin ser el contrario al devuelto sin el operador NOT. El ltimo operador denominado Is se emplea para comparar dos variables de tipo objeto <Objeto1> Is <Objeto2>. Este operador devuelve verdad si los dos objetos son iguales.

SELECT * FROM Empleados WHERE Edad > 25 AND Edad < 50; SELECT * FROM Empleados WHERE (Edad > 25 AND Edad < 50) OR Sueldo = 100; SELECT * FROM Empleados WHERE NOT Estado = 'Soltero'; SELECT * FROM Empleados WHERE (Sueldo > 100 AND Sueldo < 500) OR (Provincia = 'Madrid' AND Estado = 'Casado');

3.2 Intervalos de Valores


Para indicar que deseamos recuperar los registros segn el intervalo de valores de un campo emplearemos el operador Between cuya sintaxis es: (campo [Not] Between valor1 And valor2 (la condicin Not es opcional) En este caso la consulta devolvera los registros que contengan en "campo" un valor incluido en el intervalo valor1, valor2 (ambos inclusive). Si anteponemos la condicin Not devolver aquellos valores no incluidos en el intervalo.
SELECT * FROM Pedidos WHERE CodPostal Between 28000 And 28999; (Devuelve los pedidos realizados en la provincia de Madrid) SELECT IIf(CodPostal Between 28000 And 28999, 'Provincial', 'Nacional') FROM Editores; (Devuelve el valor 'Provincial' si el cdigo postal se encuentra en el intervalo, 'Nacional' en caso contrario)

3.3 El Operador Like


Se utiliza para comparar una expresin de cadena con un modelo en una expresin SQL. Su sintaxis es:
expresin Like modelo

En donde expresin es una cadena modelo o campo contra el que se compara expresin. Se puede utilizar el operador Like para encontrar valores en los campos que coincidan con el modelo especificado. Por modelo puede especificar un valor completo (Ana Mara), o se pueden utilizar caracteres comodn como los reconocidos por el sistema operativo para encontrar un rango de valores (Like An*). El operador Like se puede utilizar en una expresin para comparar un valor de un campo con una expresin de cadena. Por ejemplo, si introduce Like C* en una consulta SQL, la consulta devuelve todos los valores de campo que comiencen por la letra C. En una consulta con parmetros, puede hacer que el usuario escriba el modelo que se va a utilizar.

El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de cualquier letra entre A y F y de tres dgitos: Like 'P[A-F]###' Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A a la D seguidas de cualquier cadena. Like '[A-D]*' En la tabla siguiente se muestra cmo utilizar el operador Like para comprobar expresiones con diferentes modelos.
Tipo de coincidencia Modelo Planteado Coincide No Coincide

Varios caracteres Carcter especial Varios caracteres Un solo carcter Un solo dgito Rango de caracteres Fuera de un rango Distinto de un dgito Combinada

'a*a' 'a[*]a' 'ab*' 'a?a' 'a#a' '[a-z]' '[!a-z]' '[!0-9]' 'a[!b-m]#'

'aa', 'aBa', 'aBBBa' 'a*a' 'abcdefg', 'abc' 'aaa', 'a3a', 'aBa' 'a0a', 'a1a', 'a2a' 'f', 'p', 'j' '9', '&', '%' 'A', 'a', '&', '~' 'An9', 'az0', 'a99'

'aBC' 'aaa' 'cab', 'aab' 'aBBBa' 'aaa', 'a10a' '2', '&' 'b', 'a' '0', '1', '9' 'abc', 'aj0'

3.4 El Operador In
Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los indicados en una lista. Su sintaxis es: expresin [Not] In(valor1, valor2, . . .)
SELECT * FROM Pedidos WHERE Provincia In ('Madrid', 'Barcelona', 'Sevilla');

3.5 La clusula WHERE


La clusula WHERE puede usarse para determinar qu registros de las tablas enumeradas en la clusula FROM aparecern en los resultados de la instruccin SELECT. Despus de escribir esta clusula se deben especificar las condiciones expuestas en los apartados 3.1 y 3.2. Si no se emplea esta clusula, la consulta devolver todas las filas de la tabla. WHERE es opcional, pero cuando aparece debe ir a continuacin de FROM.
SELECT Apellidos, Salario FROM Empleados WHERE Salario > 21000;

SELECT Id_Producto, Existencias FROM Productos WHERE Existencias <= Nuevo_Pedido; SELECT * FROM Pedidos WHERE Fecha_Envio = #5/10/94#; SELECT Apellidos, Nombre FROM Empleados WHERE Apellidos = 'King'; SELECT Apellidos, Nombre FROM Empleados WHERE Apellidos Like 'S*'; SELECT Apellidos, Salario FROM Empleados WHERE Salario Between 200 And 300; SELECT Apellidos, Salario FROM Empl WHERE Apellidos Between 'Lon' And 'Tol'; SELECT Id_Pedido, Fecha_Pedido FROM Pedidos WHERE Fecha_Pedido Between #1-1-94# And #30-6-94#; SELECT Apellidos, Nombre, Ciudad FROM Empleados WHERE Ciudad In ('Sevilla', 'Los Angeles', 'Barcelona');

http://www.maestrosdelweb.com/editorial/tutsql3/

3.3 Consultas sobre mltiples tablas. 3.3.1 Subconsultas.


SubConsultas
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) expresin [NOT] IN (instruccin sql) [NOT] EXISTS (instruccin sql)

En donde: comparacin: Es una expresin y un operador de comparacin que compara la expresin con el resultado de la subconsulta. expresin: Es una expresin por la que se busca el conjunto resultante de la subconsulta. instruccin sql : 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. 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 DISTINCTROW NombreProducto, Precio_Unidad FROM Productos WHERE (Precio_Unidad = (SELECT Precio_Unidad FROM Productos WHERE Nombre_Producto = "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 DISTINCTROW Nombre_Contacto, Nombre_Compaia, Cargo_Contacto, Telefono FROM Clientes WHERE (ID_Cliente IN (SELECT DISTINCTROW ID_Cliente FROM Pedidos WHERE Fecha_Pedido >= #04/1/93# <#07/1/93#);

Obtiene una lista de las compaas y los contactos de todos los clientes que han realizado un pedido en el segundo trimestre de 1993.
SELECT Nombre, Apellidos FROM Empleados AS E WHERE EXISTS (SELECT * FROM Pedidos AS O WHERE O.ID_Empleado = E.ID_Empleado);

Selecciona el nombre de todos los empleados que han reservado al menos un pedido.
SELECT DISTINCTROW Pedidos.Id_Producto, Pedidos.Cantidad, (SELECT DISTINCTROW Productos.Nombre FROM Productos WHERE Productos.Id_Producto = Pedidos.Id_Producto) AS ElProducto FROM Pedidos WHERE Pedidos.Cantidad > 150 ORDER BY Pedidos.Id_Producto;

Recupera el Cdigo del Producto y la Cantidad pedida de la tabla pedidos, extrayendo el nombre del producto de la tabla de productos.
http://www.maestrosdelweb.com/editorial/tutsql7/

3.3.2 Operadores JOIN.


1. Para las siguientes relaciones

computar

1. 2. 3. 4. 5. 6. 7.
Operadores Join-Like Existen varios operadores del estilo del join que son provistos por bases de datos comerciales.

El semijoin de las relaciones y , es el multiconjunto de tuplas tal que hay al menos una tupla en que concuerda con en todos los atributos comunes de y . El antisemijoin , es la bolsa de tuplas en que no concuerdan con ninguna tupla de en los atributos . El outerjoin se forma con ms el agregado de las dangling tuples de o , donde una tupla est colgando si esta no se junta con ninguna de la otra relacin. Las tuplas agregadas se rellenan con el smbolo de indefinido o nulo , en aquellos atributos que la tupla colgante no posee pero que si aparecen en la relacin resultante. El leftouterjoin es como el outerjoin, pero solo las tuplas colgantes de son rellenadas con y agregadas al resultado.

o o

El rightouterjoin tambin es como el outerjoin, pero esta vez el argumento que genera las dangling tuples es el derecho. 2. Dar expresiones para los cinco operadores definidos en el prrafo anterior usando solamente los operadores standard del lgebra relacional. Para las variantes ``outerjoin'' puede usar una relacin nula tupla con en cada componente. 3. Un operador unario es idempotente si, que consiste de una nica

. Para cada uno de los

operadores , explique por que son idempotentes o muestre un contraejemplo. 4. Cuando es posible empujar una seleccin en los dos argumentos de un operador binario, es necesario decidir si hacerlo o no. Cmo afectara la existencia de

ndices en uno de los argumentos?. Considere, por ejemplo, una expresin , donde se tiene un ndice sobre . 5. Dar ejemplos donde se muestre que la eliminacin de duplicados no puede ser empujada por debajo de la unin o diferencia de multiconjuntos. 6. Los operadores similares al join del ejercicio 2 obedecen algunas reglas comunes y otras no. Para cada caso pruebe o de un contraejemplo para las siguientes leyes.
o o o o

7. Reemplace los join naturales en las expresiones siguientes por theta-joins y proyecciones. Diga cuando los theta-join resultantes forman un grupo asociativo y conmutativo. 0. 1. 2. 8. Dar reglas para convertir cada una de las siguientes formas de condicin en lgebra relacional. Asuma que las condiciones se aplican a una relacin y no estn correlacionadas a ella. Tenga especial cuidado para no introducir o eliminar duplicados respecto a la definicion formal de SQL.
o o

, donde es un atributo de

o , donde es un atributo de 9. Transforme la siguiente query en un plan lgico y trate de mejorarlo aplicando leyes algebraicas. 10. 11. 12. 13. SELECT starName FROM Actor1996 WHERE studioName="Paramount";

donde hay dos vistas definidas


CREATE VIEW Actor1996 AS SELECT starName, studioName FROM MoviesOf1996 NATURAL JOIN starsIn; CREATE VIEW MovieOf1996 AS SELECT * FROM Movie

WHERE year=1996; y los esquemas son

Movie(title,year,length,inColor,studioName,producerC#)

StarsIn(title,year,starName)

http://hal.famaf.unc.edu.ar/~bdd/Practico6/

JOIN (unir)
La sentencia JOIN, si es proveida, nombra una funcin de estimacin selectiva join para el operador (nota que esto es un nombre de una funcin, no un nombre de un operador). Las sentencias JOIN solamente tienen sentido para operadores binarios que retorna valores bouleanos. La idea detrs de un estimador selectivo join es suponer que fraccin de las filas de un par de tablas satisfacern la condicin de la sentencia WHERE del formulario
table1.field1 OP table2.field2

para el operador corriente. Como la sentencia RESTRICT, esta ayuda al optimizador muy sustancialmente permitiendole deducir cual de las posibles secuencias join es probable que tome el menor trabajo. como antes, este captulo no procurar explicar como escribir una funcin estimadora selectiva join, pero solamente sugeriremos que tu uses uno de los estimadores estandars si alguna es aplicable:
eqjoinsel for neqjoinsel for scalarltjoinsel for scalargtjoinsel for areajoinsel for positionjoinsel for contjoinsel for = <> < or <= > or >= 2D area-based comparisons 2D position-based comparisons 2D containment-based comparisons

http://es.tldp.org/Postgresql-es/web/navegable/todopostgresql/xoper.html

3.4 Agregacin GROUP BY, HAVING.


Agrupamiento de Registros 4.1 GROUP BY
Combina los registros con valores idnticos, en la lista de campos especificados, en un nico registro. Para cada registro se crea un valor sumario si se incluye una funcin SQL agregada, como por ejemplo Sum o Count, en la instruccin SELECT. Su sintaxis es:
SELECT campos FROM tabla WHERE criterio GROUP BY campos del grupo

GROUP BY es opcional. Los valores de resumen se omiten si no existe una funcin SQL agregada en la instruccin SELECT. Los valores Null en los campos GROUP BY se agrupan y no se omiten. No obstante, los valores Null no se evalan en ninguna de las funciones SQL agregadas. Se utiliza la clusula WHERE para excluir aquellas filas que no desea agrupar, y la clusula HAVING para filtrar los registros una vez agrupados. A menos que contenga un dato Memo u Objeto OLE , un campo de la lista de campos GROUP BY puede referirse a cualquier campo de las tablas que aparecen en la clusula FROM, incluso si el campo no esta incluido en la instruccin SELECT, siempre y cuando la instruccin SELECT incluya al menos una funcin SQL agregada. Todos los campos de la lista de campos de SELECT deben o bien incluirse en la clusula GROUP BY o como argumentos de una funcin SQL agregada.
SELECT Id_Familia, Sum(Stock) FROM Productos GROUP BY Id_Familia;

Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier registro agrupado por la clusula GROUP BY que satisfaga las condiciones de la clusula HAVING. HAVING es similar a WHERE, determina qu registros se seleccionan. Una vez que los registros se han agrupado utilizando GROUP BY, HAVING determina cuales de ellos se van a mostrar.
SELECT Id_Familia Sum(Stock) FROM Productos GROUP BY Id_Familia HAVING Sum(Stock) > 100 AND NombreProducto Like BOS*;

4.2 AVG

Calcula la media aritmtica de un conjunto de valores contenidos en un campo especificado de una consulta. Su sintaxis es la siguiente Avg(expr) En donde expr representa el campo que contiene los datos numricos para los que se desea calcular la media o una expresin que realiza un clculo utilizando los datos de dicho campo. La media calculada por Avg es la media aritmtica (la suma de los valores dividido por el nmero de valores). La funcin Avg no incluye ningn campo Null en el clculo.
SELECT Avg(Gastos) AS Promedio FROM Pedidos WHERE Gastos > 100;

4.3 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 en los registros. La funcin Count no 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 ('*').
SELECT Count(*) AS Total FROM Pedidos;

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 (&).
SELECT Count(FechaEnvo & Transporte) AS Total FROM Pedidos;

4.4 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) Max(expr) En donde expr es el campo sobre el que se desea realizar el clculo. 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).
SELECT Min(Gastos) AS ElMin FROM Pedidos WHERE Pais = 'Espaa'; SELECT Max(Gastos) AS ElMax FROM Pedidos WHERE Pais = 'Espaa';

4.5 StDev, StDevP


Devuelve estimaciones de la desviacin estndar para la poblacin (el total de los registros de la tabla) o una muestra de la poblacin representada (muestra aleatoria) . Su sintaxis es: StDev(expr) StDevP(expr) En donde expr representa el nombre del campo que contiene los datos que desean evaluarse 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) StDevP evala una poblacin, y StDev evala una muestra de la poblacin. Si la consulta contiene menos de dos registros (o ningn registro para StDevP), estas funciones devuelven un valor Null (el cual indica que la desviacin estndar no puede calcularse).
SELECT StDev(Gastos) AS Desviacion FROM Pedidos WHERE Pais = 'Espaa'; SELECT StDevP(Gastos) AS Desviacion FROM Pedidos WHERE Pais= 'Espaa';

4.6 Sum
Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su sintaxis es: SumP(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).
SELECT Sum(PrecioUnidad * Cantidad) AS Total FROM DetallePedido;

4.7 Var, VarP


Devuelve una estimacin de la varianza de una poblacin (sobre el total de los registros) o una muestra de la poblacin (muestra aleatoria de registros) sobre los valores de un campo. Su sintaxis es: Var(expr) VarP(expr) VarP evala una poblacin, y Var evala una muestra de la poblacin. Expr el nombre del campo que contiene los datos que desean evaluarse 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) Si la consulta contiene menos de dos registros, Var y VarP devuelven Null (esto indica que la varianza no puede calcularse). Puede utilizar Var y VarP en una expresin de consulta o en una Instruccin SQL.
SELECT Var(Gastos) AS Varianza FROM Pedidos WHERE Pais = 'Espaa'; SELECT VarP(Gastos) AS Varianza FROM Pedidos WHERE Pais = 'Espaa';

http://www.maestrosdelweb.com/editorial/tutsql4/

Clusula GROUP BY
La clusula GROUP BY especifica una consulta sumaria. En vez de producir un fila de resultados por cada fila de datos de la base de datos, una consulta sumaria agrupa todas las filas similares y luego produce una fila sumaria de resultados para cada grupo. Seguido de la clusula GROUP BY se especifican los nombres de uno o ms campos cuyos resultados se desean agrupados. Tiene la forma: GROUP BY expresin_columna

expresin_columna debe coincidir con la expresin de columna utilizada en la clusula SELECT. Puede ser uno o ms nombres de campo de una tabla, separados por coma o una o ms expresiones separadas por comas. SELECT RUBRO_CLAVE, COUNT(*) FROM ACTIVOS WHERE TIPO = 'Compra' GROUP BY RUBRO_CLAVE Esta sentencia nos devolver una fila por cada area RUBRO_CLAVE, y el numero de veces de cada uno.

Clusula HAVING
La clusula HAVING dice a SQL que incluya solo ciertos grupos producidos por la clusula GROUP BY en los resultados de la consulta. Al igual que la clusula WHERE, utiliza una condicin de bsqueda para especificar los grupos deseados. En otras palabras, especifica la condicin que deben de cumplir los grupos. Slo es vlida si previamente se ha especificado la clusula GROUP BY. La clusula HAVING tiene la forma: HAVING expresin1 operador expresin2 expresin1 y expresin2 pueden ser nombres de campos, valores constantes o expresiones y estas deben coincidir con una expresin de columna en la clusula SELECT. operador es un operador relacional que une las dos expresiones. Ms tarde se vern los distintos operadores que se pueden utilizar. La sentencia siguiente nos mostrar el nmero de RUBRO_CLAVE, y el numero de los mismos en cada RUBRO_CLAVE cuyo numero supera el 1:

SELECT RUBRO_CLAVE, COUNT(*) FROM ACTIVOS WHERE TIPO = 'Compra' GROUP BY RUBRO_CLAVE HAVING RUBRO_CLAVE > 1 http://www.lania.mx/biblioteca/seminarios/basedatos/sql.html#cgroupby

3.5 Funciones de conjunto de registros COUNT, SUM, AVG, MAX, MIN


Funciones de agrupamiento
Las funciones de agrupamiento pueden ser tambin parte de una clusula SELECT. Devuelven un nico valor de un conjunto de registros.

Pueden usarse con un nombre de campo (por ejemplo, AVG(PROY_COSTO) o en combinacin con una expresin de columna ms compleja (por ejemplo, AVG(PROY_COSTO* 1.07). La expresin de columna puede ir precedida por el operador DISTINCT. El operador DISTINCT eliminar los valores repetidos de una expresin de agrupamiento. Por ejemplo, SELECT COUNT(DISTINCT RESP_CLAVE) FROM ACTIVOS En este ejemplo, slo aparecern el n de los responsables que se encuentran en ACTIVOS Las funciones de agrupamiento permitidas son: SUM Devuelve la suma total de los valores de una expresin de columna o campo numrica . Por ejemplo, SUM(COSTOS) devolver el total costos de los proyectos. AVG Devuelve la media de los valores de una expresin de columna. Por ejemplo, AVG(COSTOS) devolver la media de costos de los proyectos. COUNT Devuelve el nmero de valores en una expresin de columna. Por ejemplo, COUNT(AREA_CLAVE) devolver el nmero de registros con valores no nulos en ese campo. Un ejemplo especial es COUNT(*), que nos devuelve el nmero de registros incluyendo aquellos registros con valores nulos. MAX Devuelve el valor ms alto de los contenidos en una expresin de columna. Por ejemplo, MAX(FREGISTRO) devolver la fecha de registro mas lata que existe en el tabla ACTIVOS. MIN Devuelve el valor ms bajo de los contenidos en una expresin de columna. Por ejemplo, SELECT MIN(FREGISTRO) FROM ACTIVOS nos devolver la fecha de mas antigua. http://www.lania.mx/biblioteca/seminarios/basedatos/sql.html

Funciones Agregadas de la clusula SELECT


SQL provee algunas funciones especiales que pueden ser usadas con el comando SELECT. Esas funciones son las siguientes:
COUNT SUM AVG MAX MIN COUNT(*)

COUNT : La funcin COUNT se usa para obtener el nmero de valores en la columna. Opera sobre una coleccin de valores en una columna de la tabla. La palabra clave DISTINCT se puede usar conjuntamente con COUNT. Si el resultado del argumento es el conjunto vaco la funcin COUNT retorna el valor cero. Un ejemplo de COUNT es: SELECT COUNT (DISTINCT MARCA) FROM MOVIL; SUM : La funcin SUM se usa para sumar los valores de una columna. La funcin opera sobre una coleccin de valores en una columna de la tabla. Los valores deben ser numricos. Si el resultado del argumento es el conjunto vaco, SUM retorna NULL. Un ejemplo de SUM es: SELECT SUM (HORA_HASTA - HORA_DESDE) FROM VIAJE WHERE PATENTE_MOVIL = 'HL-8483'; AVG : La Funcin AVG se usa para promediar todos los valores seleccionados en una columna, opera sobre una coleccin de valores (numricos) en una sola columna de la tabla. La funcin AVG puede ir precedida por la palabra clave DISTINCT lo cual promediar slo los valores nicos. Si el resultado del argumento es el conjunto vaco, AVG retorna NULL.

Ejemplo :
SELECT AVG (HORA_HASTA - HORA_DESDE) FROM VIAJE WHERE PATENTE_MOVIL = 'HL-8483'; MIN (MAX): La funcin MIN (MAX) se usa para obtener el menor (mayor) valor en una columna. Ambas funciones operan sobre una coleccin de valores en una columna. Los valores no necesitan ser numricos. Si el resultado del argumento es el conjunto vaco, ambas retornan NULL.

Ejemplo:
SELECT MAX (HORA_HASTA - HORA_DESDE) FROM VIAJE; SELECT MIN (HORA_HASTA - HORA_DESDE) FROM VIAJE; COUNT(*): La funcin COUNT(*) se usa para contar la cardinalidad de una tabla sin eliminacin de valores duplicados. En las funciones anteriores, cualquier valor nulo en el argumento se elimina antes que la funcin se aplique (indiferentemente de si se usa o no la clusula DISTINCT) . COUNT(*) retorna cero si el resultado del argumento es el conjunto vaco. Ejemplo: SELECT COUNT(*) FROM VIAJES WHERE PATENTE_MOVIL = 'HL-8483';

http://macine.epublish.cl/tesis/index-A_2_.html 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 en los registros. La funcin Count no 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 ('*'). SELECT Count(*) AS Total FROM Pedidos 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 (&). SELECT Count(FechaEnvo & Transporte) AS Total FROM Pedidos Podemos hacer que el gestor cuente los datos diferentes de un determinado campo SELECT Count(DISTINCT Localidad) AS Total FROM Pedidos 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) Max(expr) En donde expr es el campo sobre el que se desea realizar el clculo. 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). SELECT Min(Gastos) AS ElMin

FROM Pedidos WHERE Pais = 'Espaa' SELECT Max(Gastos) AS ElMax FROM Pedidos WHERE Pais = 'Espaa' StDev, StDevP Devuelve estimaciones de la desviacin estndar para la poblacin (el total de los registros de la tabla) o una muestra de la poblacin representada (muestra aleatoria). Su sintaxis es: StDev(expr) StDevP(expr) En donde expr representa el nombre del campo que contiene los datos que desean evaluarse 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). StDevP evala una poblacin, y StDev evala una muestra de la poblacin. Si la consulta contiene menos de dos registros (o ningn registro para StDevP), estas funciones devuelven un valor Null (el cual indica que la desviacin estndar no puede calcularse). SELECT StDev(Gastos) AS Desviacin FROM Pedidos WHERE Pas = 'Espaa' SELECT StDevP(Gastos) AS Desviacin FROM Pedidos WHERE Pas = 'Espaa' http://www.mailxmail.com/curso/informatica/sql/capitulo28.htm Sum

Devuelve la suma del conjunto de valores contenido en un campo especifico 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). SELECT Sum(PrecioUnidad * Cantidad) AS Total FROM DetallePedido Var, VarP Devuelve una estimacin de la varianza de una poblacin (sobre el total de los registros) o una muestra de la poblacin (muestra aleatoria de registros) sobre los valores de un campo. Su sintaxis es: Var(expr) VarP(expr) VarP evala una poblacin, y Var evala una muestra de la poblacin. Expr el nombre del campo que contiene los datos que desean evaluarse 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) Si la consulta contiene menos de dos registros, Var y VarP devuelven Null (esto indica que la varianza no puede calcularse). Puede utilizar Var y VarP en una expresin de consulta o en una Instruccin SQL. SELECT Var(Gastos) AS Varianza FROM Pedidos WHERE Pas = 'Espaa' SELECT VarP(Gastos) AS Varianza FROM Pedidos WHERE Pas = 'Espaa'

COMPUTE de SQL-SERVER Esta clusula aade una fila en el conjunto de datos que se est recuperando, se utiliza para realizar clculos en campos numricos. COMPUTE acta siempre sobre un campo o expresin del conjunto de resultados y esta expresin debe figurar exactamente igual en la clusula SELECT y siempre se debe ordenar el resultado por la misma o al memos agrupar el resultado. Esta expresin no puede utilizar ningn ALIAS. SELECT IdCliente, Count(IdPedido) FROM Pedidos GROUP BY IdPedido HAVING Count(IdPedido) > 20 COMPUTE Sum(Count(IdPedido)) SELECT IdPedido, (PrecioUnidad * Cantidad - Descuento) FROM [Detalles de Pedidos] ORDER BY IdPedido COMPUTE Sum((PrecioUnidad * Cantidad - Descuento)) // Calcula el Total BY IdPedido // Calcula el Subtotal

Vous aimerez peut-être aussi