Sunteți pe pagina 1din 31

Instituto Tecnolgico Superior de Felipe Carrillo Puerto

Unidad VI
PRESENTA: Roger Caamal Santiago No. De Control: 111K0033 Aula: J-4 Semestre: IV Grupo: B

CARRERA: Ingeniera en Sistemas Computacionales

MATERIA: Fundamentos de Base de Datos

UNIDAD VI: Lenguaje SQL

DOCENTE: MC. Arizbe del Socorro Arana Kantun

Felipe Carrillo Puerto Quintana Roo a 31 de Mayo del 2013

Indice

Introduccin.....3 6.1 Introduccin..4 6.2 Definicin de Datos.....5 6.3 Estructura Bsica de las Consultas..6 6.4 Operaciones Sobre Conjuntos10 6.5Funciones de Agregacin..14 6.6 Valores Nulos.....16 6.7 Consultas Anidadas..17 6.8 Consultas Complejas....................................23 6.9 Visitas..25 6.10 Modificacin de las Bases de Dato..27 Conclusin.31

Introduccion
MySQL es un sistema gestor de bases de datos relacionales en SQL, esto significa que permite la gestion de los datos de una BBDD relacional usando un lenguaje de consulta estructurado. Y, por tanto, que a partir de una oracion, MySQL llevar a cabo una determinada accion sobre nuestra base de datos. MySQL es un excelente gestor de bases de datos que la sitan despus de Oracle cmo la mejor solucin a nivel tcnico por las caractersticas que detallaremos en este artculo. Esta unidad va de la mano con lo que es el algebra relacional ya que todo lo que vimos en teora , en este software se realiza las consultas, como es la unin, intesecion , etc. Donde podemos crear las tablas con varios comandos que se ven en esta unidad.

6.1 Introduccin SQL usa una combinacin de lgebra relacional y construcciones del clculo relacional. El lenguaje SQL se considera un lenguaje de consultas, contiene muchas otras capacidades adems de la consulta en bases de datos. Incluye caractersticas para definir la estructura de los datos, para la modificacin de los datos en la base de datos y para la especificacin de restricciones de seguridad. El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por los diferentes motores de bases de datos para realizar determinadas operaciones sobre los datos o sobre la estructura de los mismos. Pero como sucede con cualquier sistema de normalizacin hay excepciones para casi todo; de hecho, cada motor de bases de datos tiene sus peculiaridades y lo hace diferente de otro motor, por lo tanto, el lenguaje SQL normalizado (ANSI) no nos servir para resolver todos los problemas, aunque si se puede asegurar que cualquier sentencia escrita en ANSI ser interpretable por cualquier motor de datos. Actualmente, est en marcha un proceso de revisin del lenguaje por parte de los comits ANSI e ISO, que debera terminar en la definicin de lo que en este momento se conoce como SQL3. Las caractersticas principales de esta nueva encarnacin de SQL deberan ser su transformacin en un lenguaje stand-alone (mientras ahora se usa como lenguaje hospedado en otros lenguajes) y la introduccin de nuevos tipos de datos ms complejos que permitan, por ejemplo, el tratamiento de datos multimediales.

6.2 Definicin de datos


Conceptualmente, SQL es un lenguaje de definicin de datos (LDD), un lenguaje de definiciones de vistas (LDV) y un lenguaje de manipulacin de datos (LMD), que posee tambin capacidad para especificar restricciones y evolucin de esquemas. El lenguaje SQL est compuesto por comandos, clusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos. Comandos Existen dos tipos de comandos SQL:
o o

DLL ==> que permiten crear y definir nuevas bases de datos, campos e ndices. DML ==> que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.

El lenguaje de definicin de datos (en ingls Data Definition Language, o DDL), es el que se encarga de la modificacin de la estructura de los objetos de la base de datos. Incluye rdenes para modificar, borrar o definir las tablas en las que se almacenan las base de datos. Existen cuatro operaciones bsicas: CREATE, ALTER, DROP y TRUNCATE.

Comandos DLL ComandoDescripcin CREATE Utilizado para crear nuevas tablas, campos e ndices DROP Empleado para eliminar tablas e ndices Utilizado para modificar las tablas agregando campos o cambiando la definicin ALTER de los campos.

Comandos DML ComandoDescripcin Utilizado para consultar registros de la base de datos que satisfagan un criterio SELECT determinado Utilizado para cargar lotes de datos en la base de datos en una nica INSERT operacin. UPDATE Utilizado para modificar los valores de los campos y registros especificados DELETE Utilizado para eliminar registros de una tabla de una base de datos

6.3 Estructura bsica de las consultas La estructura bsica de una expresin SQL consiste en tres clusulas: select, from y where. La clusula select corresponde a la operacin proyeccin del lgebra relacional. Se usa para listar los atributos deseados del resultado de una consulta. La clusula from corresponde a la operacin producto cartesiano del lgebra relacional. Lista las relaciones que deben ser analizadas en la evaluacin de la expresin. La clusula where corresponde al predicado seleccin del lgebra relacional. Es un predicado que engloba a los atributos de las relaciones que aparecen en la clusula from. Una consulta tpica en SQL tiene la forma select A1, A2,, An from r1, r2,, rm where P Cada Ai representa un atributo, y cada ri una relacin. P es un predicado. La consulta es equivalente a la expresin del lgebra relacional A1, A2,, An (P (r1 r2 rm ))

CLAUSULAS Las clusulas son condiciones de modificacin utilizadas para definir los datos que desea seleccionar o manipular. Clusula FROM WHERE GROUP BY HAVING ORDER BY Descripcin Utilizada para especificar la tabla de la cual se van a seleccionar los registros Utilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar Utilizada para separar los registros seleccionados en grupos especficos Utilizada para expresar la condicin que debe satisfacer cada grupo Utilizada para ordenar los registros seleccionados de acuerdo con un orden especfico

Ejemplos: 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, Telfono FROM Clientes Esta sentencia devuelve un conjunto de resultados con el campo nombre y telfono de la tabla clientes. En determinadas ocasiones nos puede interesar incluir una columna con un texto fijo en una consulta de seleccin, por ejemplo, supongamos que tenemos una tabla de empleados y deseamos recuperar las tarifas semanales de los electricistas, podramos realizar la siguiente consulta: SELECT Empleados.Nombre, 'Tarifa semanal: ', Empleados.TarifaHora 40 FROM Empleados WHERE Empleados.Cargo = 'Electricista Operadores Lgicos Operador Uso AND OR NOT Es el "y" lgico. Evala dos condiciones y devuelve un valor de verdad slo si ambas son ciertas. Es el "o" lgico. Evala dos condiciones y devuelve un valor de verdad si alguna de las dos es cierta. Negacin lgica. Devuelve el valor contrario de la expresin. *

Operadores de Comparacin Operador < > <> <= >= = BETWEEN LIKE In Uso Menor que Mayor que Distinto de Menor o igual que Mayor o igual que Igual que Utilizado para especificar un intervalo de valores. Utilizado en la comparacin de un modelo Utilizado para especificar registros de una base de datos 7

Ejemplos: select nmero-prstamo from prstamo where nombresucursal = Navacerrada and importe > 1200 SELECT * FROM Empleados WHERE (Sueldo > 100 AND Sueldo < 500) OR (Provincia = 'Madrid' AND Estado = 'Casado') select nmero-prstamo from prstamo where importe between 90000 and 100000 La clusula from define por s misma un producto cartesiano de las relaciones que aparecen en la clusula. Escribir una expresin SQL para la reunin natural es una tarea relativamente fcil, puesto que la reunin natural se define en trminos de un producto cartesiano, una seleccin y una proyeccin. La expresin del lgebra relacional se escribe como sigue: nombre-cliente, nmero-prstamo,importe (prestatario |x| prstamo) para la consulta Para todos los clientes que tienen un prstamo en el banco, obtener los nombres, nmeros de prstamo e importes. Esta consulta puede escribirse en SQL como select nombre-cliente, prestatario. Nmero-prstamo, importe from prestatario, prstamo where prestatario.nmero-prstamo =prstamo.nmero-prstamo Para asegurar la eliminacin de duplicados en el resultado de los ejemplos de consultas, se usar la clusula distinct siempre que sea necesario. En la mayora de las consultas donde no se utiliza distinct, el nmero exacto de copias duplicadas de cada tupla que resultan de la consulta no es importante. Podemos ver cmo funciona en el siguiente ejemplo, en el que preguntamos por los distintos oficios de nuestros empleados. select oficio from emp Sin utilizar la clusula DISTINCT obtendremos la siguiente respuesta OFICIO ----------Presidente Director Secretario Contable Comercial Comercial Director 8

Analista Programador Programador Director Analista Programador Programador 14 rows selected. Pero si incluimos la clusula DISTINCT la respuesta vara para adecuarse ms a nuestras espectativas. select OFICIO ----------Analista Comercial Contable Director Presidente Programador Secretario 7 rows selected. SQL proporciona un mecanismo para renombrar tanto relaciones como atributos. Para ello utiliza la clusula as, que tiene la forma siguiente:nombre-antiguo as nombre-nuevo la clusula as puede aparecer tanto en select como en from. select nombre-cliente,prestatario.nmero-prstamo as id-prstamo,importe from prestatario,prstamo where prestatario.nmero-prstamo = prstamo.nmero-prstamo La clusula order by hace que las tuplas resultantes de una consulta se presenten en un cierto orden. Si deseamos seleccionar todos los empleados que residen en el estado de Hidalgo ordenados por edad. Select * from empleados where estado='Hidalgo' order by edad distinct oficio from emp

6.4 Operaciones sobre conjuntos


Las operaciones de SQL unin, intersect y except operan sobre relaciones y corresponden a las operaciones del lgebra relacional , y . Al igual que la unin, interseccin y diferencia de conjuntos en el lgebra relacional, las relaciones que participan en las operaciones han de ser compatibles; esto es, deben tener el mismo conjunto de atributos. UNION La operacin de unin permite combinar datos de varias relaciones. Supongamos que una determinada empresa internacional posee una tabla de empleados para cada uno de los pases en los que opera. Para conseguir un listado completo de todos los empleados de la empresa tenemos que realizar una unin de todas las tablas de empleados de todos los pases. No siempre es posible realizar consultas de unin entre varias tablas, para poder realizar esta operacin es necesario e imprescindible que las tablas a unir tengan las mismas estructuras, que sus campos sean iguales. Nom_TablaA UNION Nom_TablaB Su sintaxis es: [TABLE] consulta1 UNION [ALL] [TABLE] consulta2 [UNION [ALL] [TABLE] consultan [... ]] El ejemplo siguiente combina una tabla existente llamada Nuevas Cuentas y una instruccin SELECT: TABLE NuevasCuentas UNION ALL SELECT * FROM Clientes WHERE CantidadPedidos > 1000 Si no se indica lo contrario, no se devuelven registros duplicados cuando se utiliza la operacin UNION, no obstante puede incluir el predicado ALL para asegurar que se devuelven todos los registros. Esto hace que la consulta se ejecute ms rpidamente. Todas las consultas en una operacin UNION deben pedir el mismo nmero de campos, no obstante los campos no tienen por qu tener el mismo tamao o el mismo tipo de datos.

10

SELECT NombreCompania, Ciudad FROM Proveedores WHERE Pais = 'Brasil' UNION SELECT NombreCompania, Ciudad FROM Clientes WHERE Pais = 'Brasil' (Recupera los nombres y las ciudades de todos proveedores y clientes de Brasil) SELECT NombreCompania, Ciudad FROM Proveedores WHERE Pais = 'Brasil' UNION SELECT NombreCompania, Ciudad FROM Clientes WHERE Pais = 'Brasil' ORDER BY Ciudad (Recupera los nombres y las ciudades de todos proveedores y clientes radicados en Brasil, ordenados por el nombre de la ciudad) SELECT NombreCompania, Ciudad FROM Proveedores WHERE Pais = 'Brasil' UNION SELECT NombreCompania, Ciudad FROM Clientes WHERE Pais = 'Brasil' UNION SELECT Apellidos, Ciudad FROM Empleados WHERE Region = 'Amrica del Sur' (Recupera los nombres y las ciudades de todos los proveedores y clientes de brasil y los apellidos y las ciudades de todos los empleados de Amrica del Sur) 11

TABLE Lista_Clientes UNION TABLE ListaProveedores (Recupera los nombres y cdigos de todos los proveedores y clientes) INTERSECCIN La operacin de interseccin permite identificar filas que son comunes en dos relaciones. Supongamos que tenemos una tabla de empleados y otra tabla con los asistentes que han realizado un curso de ingls (los asistentes pueden ser empleados o gente de la calle). Queremos crear una figura virtual en la tabla denominada "Empleados que hablan Ingls", esta figura podemos crearla realizando una interseccin de empleados y curso de ingls, los elementos que existan en ambas tablas sern aquellos empleados que han asistido al curso. Nom_TablaA INTERSEC Nom_tablaB Para encontrar todos los clientes que tienen tanto un prstamo como una cuenta en el banco, se escribir: (selectdistinctnombre-cliente fromimpositor) intersect (selectdistinctnombre-cliente from prestatario) La operacin intersect (interseccin) elimina duplicados automticamente. As, en la consulta anterior, si un cliente por ejemplo, Santos tiene varias cuentas o prstamos (o ambas cosas) en el banco, entonces Santos aparecer solo una vez en el resultado. Para conservar los duplicados se utilizar intersect all en lugar de intersect: (selectnombre-cliente fromimpositor)intersectall (selectnombre-cliente from prestatario) El nmero de tuplas duplicadas en el resultado es igual al mnimo nmero de duplicados que aparecen en i y p. As, si Santos tuviese tres cuentas y dos prstamos en el banco, entonces en el resultado de la consulta apareceran dos tuplas con el nombre de Santos. EXCEPT Para encontrar todos los clientes que tienen cuenta pero no tienen ningn prstamo en el banco se escribir: (selectdistinctnombre-cliente-from-impositor) except (selectdistinctnombre-cliente from prestatario)

12

La operacin except (excepto) elimina duplicados automticamente. As, en la consulta anterior, una tupla con el nombre de Santos aparecer en el resultado (exactamente una vez), slo si Santos tiene una cuenta en el banco, pero no tiene ningn prstamo en el mismo. Para conservar los duplicados, se utilizar except all en lugar de except: (selectnombre-cliente fromimpositor) exceptall (selectnombre-cliente from prestatario) El nmero de copias duplicadas de una tupla en el resultado es igual al nmero de copias duplicadas de dicha tupla en i menos el nmero de copias duplicadas de la misma tupla en p, siempre que la diferencia sea positiva. As, si Santos tuviese tres cuentas y un prstamo en el banco, entonces en el resultado apareceran dos tuplas con el nombre de Santos. Si, por el contrario, dicho cliente tuviese dos cuentas y tres prstamos en el banco, no habr ninguna tupla con el nombre de Santos en el resultado.

13

6.5 Funciones de agregacin


El SQL nos ofrece las siguientes funciones de agregacin para efectuar varias operaciones sobre los datos de una base de datos: Funciones de agregacin Funcin Descripcin COUNT Nos da el nmero total de filas seleccionadas SUM Suma los valores de una columna MIN Nos da el valor mnimo de una columna MAX Nos da el valor mximo de una columna AVG Calcula el valor medio de una columna En general, las funciones de agregacin se aplican a una columna, excepto la funcin de agregacin COUNT, que normalmente se aplica a todas las columnas de la tabla o tablas seleccionadas. Por lo tanto, COUNT (*) contar todas las filas de la tabla o las tablas que cumplan las condiciones. Si se utilizase COUNT (distinct columna), slo contara los valores que no fuesen nulos ni repetidos, y si se utilizase COUNT (columna), slo contara los valores que no fuesen nulos. Ejemplo de utilizacin de la funcin COUNT (*) Veamos un ejemplo de uso de la funcin COUNT, que aparece en la clusula SELECT, para hacer la consulta Cuntos departamentos estn ubicados en la ciudad de Pachuca?:

SELECT COUNT(*) AS numero_dep FROM departamentos WHERE ciudad_dep = Pachuca; numero_dep 1 La respuesta a esta consulta sera la que aparece reflejada en la tabla que encontraris en el margen. Considrese la consulta Obtener la media de saldos de las cuentas de la sucursal Navacerrada . Esta consulta se puede formular del modo siguiente: select avg (saldo) from cuenta where nombre-sucursal = Navacerrada

14

El resultado de esta consulta ser una relacin con un nico atributo, que contendr una nica fila con un valor numrico correspondiente al saldo medio de la sucursal Navacerrada.

15

6.6 Valores nulos


En muchas ocasiones es necesario emplear como criterio de seleccin valores nulos en los campos. Podemos emplear el operacin IS NULL para realizar esta operacin. Por ejemplo: SELECT * FROM Empleados WHERE DNI IS NULL Encontrar todos los nmeros de prstamo que aparecen en la relacin prstamo con valores nulos para importe se escribe select nmero-prstamo from prstamo where importe is null El predicado is not null pregunta por la ausencia de un valor nulo.

16

6.7 Consultas anidadas


SQL proporciona un mecanismo para las subconsultas anidadas. Una subconsulta es una expresin select-from-where que se anida dentro de otra consulta. Un uso comn de subconsultas es llevar a cabo comprobaciones sobre pertenencia a conjuntos, comparacin de conjuntos y cardinalidad de conjuntos. Estos usos se estudiarn en los apartados siguientes. 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 expresin instruccin SQL Es una expresin y un operador de comparacin que compara la expresin con el resultado de la subconsulta. 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 ) 17

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:

18

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 19

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 <#07/01/1993# ) (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.IdEmpleado = E.IdEmpleado ) (Selecciona el nombre de todos los empleados que han reservado al menos un pedido.) SELECT DISTINCT Pedidos.Id_Producto, Pedidos.Cantidad, ( 20

SELECT Productos.Nombre FROM Productos WHERE Productos.IdProducto = Pedidos.IdProducto ) 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.) SELECT NumVuelo, Plazas FROM Vuelos WHERE Origen = 'Madrid' AND Exists ( SELECT T1.NumVuelo FROM Vuelos AS T1 WHERE T1.PlazasLibres > 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 ) ) 21

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 3 3 3 3 3 Operador > ANY = ANY = ANY > ALL < ALL Valor 2 (2,5,7) (2,5,7) (2,3,5,7) (2,5,7) (5,6,7) Resultado Cierto Falso Cierto Falso Falso

El operacion =ANY es equivalente al operador IN, ambos devuelven el mismo resultado. Para concluir este apartado comentar que: la clusula EXISTS se puede emplear para generar la interseccin entre dos consultas y, por tanto, la clusula NOT EXISTS para generar la diferencia entre consultas.

22

6.8 Consultas Complejas


El SQL soporta dos grupos de consultas multitabla: - la unin de tablas. - la composicin de tablas. La unin de tablas Esta operacin se utiliza cuando tenemos dos tablas con las mismas columnas y queremos obtener una nueva tabla con las filas de la primera y las filas de la segunda. En este caso la tabla resultante tiene las mismas columnas que la primera tabla (que son las mismas que las de la segunda tabla). Cuando hablamos de tablas pueden ser tablas reales almacenadas en la base de datos o tablas lgicas (resultados de una consulta), esto nos permite utilizar la operacin con ms frecuencia ya que pocas veces tenemos en una base de datos tablas idnticas en cuanto a columnas. Elresultado es siempre una tabla lgica. Por ejemplo queremos en un slo listado los productos cuyas existencias sean iguales a cero y tambin los productos que aparecen en pedidos del ao 90. En este caso tenemos unos productos en la tabla de productos y los otros en la tabla de pedidos, las tablas no tienen las mismas columnas no se puede hacer una unin de ellas pero lo que interesa realmente es el identificador del producto (idfab, idproducto), luego por una parte sacamos los cdigos de los productos con existencias cero (con una consulta), por otra parte los cdigos de los productos que aparecen en pedidos del ao 90 (con otra consulta), y luego unimos estas dos tablas lgicas. El operador que permite realizar esta operacin es el operador UNION.

La composicin de tablas La composicin de tablas consiste en concatenar filas de una tabla con filas de otra. En este caso obtenemos una tabla con las columnas de la primera tabla unidas a las columnas de lasegunda tabla, y las filas de la tabla resultante son concatenaciones de filas de la primera tabla con filas de la segunda tabla.

23

El ejemplo anterior quedara de la siguiente forma con la composicin:

A diferencia de la unin la composicin permite obtener una fila con datos de las dos tablas, esto es muy til cuando queremos visualizar filas cuyos datos se encuentran en dos tablas. Existen distintos tipos de composicin, aprenderemos a utilizarlos todos y a elegir el tipo ms apropiado a cada caso. Los tipos de composicin de tablas son:

El producto cartesiano
El producto cartesiano es un tipo de composicin de tablas, aplicando el producto cartesiano a dos tablas se obtiene una tabla con las columnas de la primera tabla unidas a las columnas de lasegunda tabla, y las filas de la tabla resultante son todas las posibles concatenaciones de filasde la primera tabla con filas de la segunda tabla. La sintaxis es la siguiente:

* El producto cartesiano se indica poniendo en la FROM las tablas que queremos componerseparadas por comas, podemos obtener as el producto cartesiano de dos, tres, o ms tablas. * nbtabla puede ser un nombre de tabla o un nombre de consulta. Si todas las tablas estn en una base de datos externa, aadiremos la clusula IN basedatosexterna despus de la ltima tabla. Pero para mejorar el rendimiento y facilitar el uso, se recomienda utilizar una tabla vinculada en lugar de la clusula IN. * Se puede componer una tabla consigo misma, en este caso es obligatorio utilizar un nombre de alias por lo menos para una de las dos. Ejemplo: SELECT * FROM [existencias cero],[pedidos 90] obtenemos la siguiente tabla:

24

6.9 Vistas
Una vista es una consulta, que refleja el contenido de una o ms tablas, desde la que se puede acceder a los datos como si fuera una tabla. Dos son las principales razones por las que podemos crear vistas.

Seguridad, nos pueden interesar que los usuarios tengan acceso a una parte de la informacin que hay en una tabla, pero no a toda la tabla. Comodidad, como hemos dicho el modelo relacional no es el ms cmodo para visualizar los datos, lo que nos puede llevar a tener que escribir complejas sentencias SQL, tener una vista nos simplifica esta tarea.

Las vistas no tienen una copia fsica de los datos, son consultas a los datos que hay en las tablas, por lo que si actualizamos los datos de una vista, estamos actualizando realmente la tabla, y si actualizamos la tabla estos cambios sern visibles desde la vista. Nota: No siempre podremos actualizar los datos de una vista, depender de la complejidad de la misma (depender de si el cojunto de resultados tiene acceso a la clave principal de la tabla o no), y del gestor de base de datos. No todos los gestores de bases de datos permiten actualizar vistas, ORACLE, por ejemplo, no lo permite, mientrar que SQL Server si. Creacin de vistas. Para crear una vista debemos utilizar la sentencia CREATE VIEW, debiendo proporcionar un nombre a la vista y una sentencia SQLSELECT vlida.

CREATE VIEW <nombre_vista> AS (<sentencia_select>); Ejemplo:Crear una vista sobre nuestra tabla alquileres, en la que se nos muestre el nombre y apellidos del cliente en lugar de su cdigo.

CREATE VIEW vAlquileres AS ( SELECT nombre, apellidos, matricula FROM tAlquileres, tClientes WHERE ( tAlquileres.codigo_cliente = tClientes.codigo ) )

25

Si queremos, modificar la definicin de nuestra vista podemos utilizar la sentencia ALTER VIEW, de forma muy parecida a como lo haciamos con las tablas. En este caso queremos aadir los campos fx_alquiler y fx_devolucion a la vista.

ALTER VIEW vAlquileres AS ( SELECT nombre, apellidos, matricula, fx_alquiler, fx_devolucion FROM tAlquileres, tClientes WHERE ( tAlquileres.codigo_cliente = tClientes.codigo ) )

Por ltimo podemos eliminar la vista a travs de la sentencia DROP VIEW. Para eliminar la vista que hemos creado anteriormente se uitlizara:

DROP VIEW vAlquileres;

Una vista se consulta como si fuese una tabla.

26

6.10 Modificacin de las bases de datos


Como se mencion al inicio de esta unidad del SQL, est 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: Clave NombreM Creditos

NControl NControl NombreA Clave Especialidad Calif 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.

27

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. 28

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 29

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.

30

Conclusion
El lenguaje SQL est compuesto por comandos, clusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos. El objetivo bsico de toda base de datos es el almacenamiento de smbolos, nmeros y letras carentes de un significado en s, que con un tratamiento adecuado se hace necesario la creacin de un sistema que ayude al diseador a crear estructuras correctas y fiables, minimizando los tiempos de diseo y explotando todos los datos, Un sistema de gestin de bases de datos (SGBD) consiste en una coleccin de datos interrelacionados y una coleccin de programas para acceder a esos datos. Los datos describen un desarrollo particular. Los sistemas de bases de datos se disean para almacenar grandes cantidades de informacin. Un propsito principal de un sistema de base de datos es proporcionar a los usuarios una visin abstracta de los datos. Por debajo de la estructura de datos est el modelo de datos: una coleccin de herramientas conceptuales para describir los datos, las relaciones, la semntica de los datos y las ligaduras de los datos. Los diferentes modelos de datos que se han propuesto se dividen en tres grupos diferentes: modelos lgicos basados en objeto, modelos lgicos basados en registros y modelos de datos fsicos. o LDD: que permiten crear y definir nuevas bases de datos, campos e ndices. La coleccin de informacin almacenada en la base de datos en un momento en particular se llama un ejemplar de la base de datos. El diseo completo de la base de datos se llama esquema de la base de datos. Hay dos niveles de independencia de datos: independencia de datos fsica e independencia de datos lgica. Un esquema de base de datos se especifica mediante un conjunto de definiciones que se expresa en un lenguaje de definicin de datos (LDD). oLMD: que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos. Un lenguaje de manipulacin de datos (LMD) es un lenguaje que permite a los usuarios acceder o manipular los datos. Hay bsicamente dos tipos: LMD procedimentales, que requieren que un usuario especifique que datos se necesitan y como obtener esos datos, y LMD no procedimentales, que requieren especificar que datos se necesitan sin especificar como obtener esos datos.

31

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