Unidad 6 base de datos

download Unidad 6 base de datos

of 34

Transcript of Unidad 6 base de datos

  • 8/10/2019 Unidad 6 base de datos

    1/34

    Alumnos:

    Bravo Garca Emmanuel.

    De Luna Martn Eutiquio.

    Puebla Valencia Jess.

    Ramrez Gervacio Daniel.

    Velasco Velzquez Germn.

    ProfesorA:

    Mara Teresa De Len.

    Unidad 6 Lenguaje SQL

    IngenIerA en sIstemAs

    comPutAcIonAles (I.s.c)

  • 8/10/2019 Unidad 6 base de datos

    2/34

  • 8/10/2019 Unidad 6 base de datos

    3/34

    6.1 Introduccin al lenguaje SQL

    El SQL es el lenguaje estndar ANSI/ISO de definicin, manipulacin y controlde bases de datos relacionales. Es un lenguaje declarativo: slo hay que indicar

    qu se quiere hacer. En cambio, en los lenguajes procedimentales es necesarioespecificar cmo hay que hacer cualquier accin sobre la base de datos. El SQLes un lenguaje muy parecido al lenguaje natural; concretamente, se parece alingls, y es muy expresivo. Por estas razones, y como lenguaje estndar, el SQLes un lenguaje con el que se puede acceder a todos los sistemas relacionalescomerciales.

    Empezamos con una breve explicacin de la forma en que el SQL ha llegado a serel lenguaje estndar de las bases de datos relacionales:

    Al principio de los aos setenta, los laboratorios de investigacin Santa Teresa

    de IBM empezaron a trabajar en el proyecto System R. El objetivo de esteproyecto era implementar un prototipo de SGBD relacional; por lo tanto, tambinnecesitaban investigar en el campo de los lenguajes de bases de datos relacionales.

    A mediados de los aos setenta, el proyecto de IBM dio como resultado un primerlenguaje denominado SEQUEL (Structured English Query Language), que porrazones legales se denomin ms adelante SQL (Structured Query Language). Alfinal de la dcada de los setenta y al principio de la de los ochenta, una vezfinalizado el proyecto System R, IBM y otras empresas empezaron a utilizar elSQL en sus SGBD relacionales, con lo que este lenguaje adquiri una granpopularidad.

    En 1982, ANSI (American National Standards Institute) encarg a uno de sus comits(X3H2) la definicin de un lenguaje de bases de datos relacionales. Este comit,despus de evaluar diferentes lenguajes, y ante la aceptacin comercial del SQL, eligiun lenguaje estndar que estaba basado en ste prcticamente en su totalidad. ElSQL se convirti oficialmente en el lenguaje estndar de ANSI en el ao 1986, y deISO (International Standards Organization) en 1987. Tambin ha sido adoptado comolenguaje estndar por FIPS (Federal Information Processing Standard), Unix X/Openy SAA (Systems Application Architecture) de IBM.

    En el ao 1989, el estndar fue objeto de una revisin y una ampliacin que dieronlugar al lenguaje que se conoce con el nombre de SQL1 o SQL89. En el ao

    1992 el estndar volvi a ser revisado y ampliado considerablemente para cubrircarencias de la versin anterior. Esta nueva versin del SQL, que se conoce conel nombre de SQL2 o SQL92.

    Aunque aparezca slo la sigla SQL, siempre nos estaremos refiriendo al SQL92,ya que ste tiene como subconjunto el SQL89; por lo tanto, todo lo que era vlidoen el caso del SQL89 lo continuar siendo en el SQL92.

    1

  • 8/10/2019 Unidad 6 base de datos

    4/34

    De hecho, se pueden distinguir tres niveles dentro del SQL92:El nivel introductorio (entry), que incluye el SQL89 y las definiciones de claveprimaria y clave fornea al crear una tabla.

    El concepto de clave primaria y su importancia en una relacin o tabla se ha visto

    en la unidad El modelo relacional y el lgebra relacional.

    El nivel intermedio (intermediate), que, adems del SQL89, aade algunasampliaciones del SQL92.

    El nivel completo (full), que ya tiene todas las ampliaciones del SQL92.

    El modelo relacional tiene como estructura de almacenamiento de los datos lasrelaciones. La intensin o esquema de una relacin consiste en el nombre quehemos dado a la relacin y un conjunto de atributos. La extensin de una relacines un conjunto de tuplas.

    Hablaremos de tablas en lugar de relaciones.

    Hablaremos de columnas en lugar de atributos.

    Hablaremos de filas en lugar de tuplas.

    Sin embargo, a pesar de que la nomenclatura utilizada sea diferente, los conceptosson los mismos.

    Para utilizar SQL desde un lenguaje de programacin necesitaremos sentencias

    especiales que nos permitan distinguir entre las instrucciones del lenguaje deprogramacin y las sentencias de SQL. La idea es que trabajando bsicamente

    con un lenguaje de programacin anfitrin se puede cobijar SQL como si fuese

    un husped. Por este motivo, este tipo de SQL se conoce con el nombre de SQL

    hospedado. Para trabajar con SQL hospedado necesitamos un precompilador

    que separe las sentencias del lenguaje de programacin de las del lenguaje de

    bases de datos. Una alternativa a esta forma de trabajar son las rutinas

    SQL/CLI* (SQL/Call-Level Interface), que resolviendo tambin el problema de

    acceder a SQL desde un lenguaje de programacin, no necesitan precompilador.

    2

  • 8/10/2019 Unidad 6 base de datos

    5/34

    6.2 Definicin de datos

    El DDL, lenguaje de definicin de datos. Es la parte del SQL que ms vara de unsistema a otro ya que esa rea tiene que ver con cmo se organizan internamentelos datos y eso, cada sistema lo hace de una manera u otra.

    Un lenguaje de definicin de datos (Data Definition Language, DDL por sus siglasen ingls) es un lenguaje proporcionado por el sistema de gestin de base de datosque permite a los usuarios de la misma llevar a cabo las tareas de definicin de lasestructuras que almacenarn los datos as como de los procedimientos o funcionesque permitan consultarlos.

    Un Data Definition Language o Lenguaje de descripcin de datos (DDL) es unlenguaje de programacin para definir estructuras de datos. El trmino DDL fueintroducido por primera vez en relacin con el modelo de base de datos CODASYL,donde el esquema de la base de datos ha sido escrito en un lenguaje de descripcin

    de datos que describe los registros, los campos, y "conjuntos" que conforman elusuario modelo de datos. Ms tarde fue usado para referirse a un subconjunto deSQL, pero ahora se utiliza en un sentido genrico para referirse a cualquier lenguajeformal para describir datos o estructuras de informacin, como los esquemas XML.

    A diferencia de muchos lenguajes de descripcin de datos, SQL utiliza una coleccinde verbos imperativo cuyo efecto es modificar el esquema de la base de datos,aadiendo, cambiando o eliminando las definiciones de tablas y otros objetos. Estasdeclaraciones se pueden mezclar libremente con otras sentencias SQL, por lo queel DDL no es realmente una lengua independiente. La declaracin ms comn esCREATE TABLE, que se utiliza para Crear una tabla nueva. El lenguaje de

    programacin SQL, el ms difundido entre los gestores de bases de datos, admitelas siguientes sentencias de definicin: CREATE (crear), DROP (borrar) y ALTER(actualizar, modificar), cada una de las cuales se puede aplicar a las tablas, vistas,procedimientos almacenados y triggers de la base de datos.

    3

  • 8/10/2019 Unidad 6 base de datos

    6/34

    6.3 Estructura bsica de las consultas

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

    SELECTFROM

    WHERE

    La clusulaSELECT se usa para listar los atributos que se desean en el resultadode una consulta, es un modo literal de decir seleccionar

    La clusulaFROM lista las relaciones que se van a examinar en la evaluacin de laexpresin es un modo literal de decir de

    La clusulaWHERE costa de un predicado que implica atributos de las relaciones

    que aparecen en la clusula FROM. Es un modo literal de decir donde

    Una consulta bsica en SQL tiene la forma: (seleccionar, de, donde)

    SELECT A1, A2, A3

    FROM r1,r2, r3WHERE A1=Federico ;

    Donde A1 = atributo o campo de la tabla, si se pone * o la palabra ALL seseleccionar todo.

    r1 = relacin ( Tabla )A1=Federico = predicado o condicin

    Ejemplo 2: Seleccionar todos los nombres de las personas que tengan el apellido

    MARQUESI de la tabla personaSELECT nombreFROM personaWHERE apellido = " MARQUESI";

    4

  • 8/10/2019 Unidad 6 base de datos

    7/34

    El resultado de una consulta es por supuesto otra relacin. Si se omite la clusulaWHERE, el predicado P es verdadero. La lista A1, A2,..., An puede sustituirse porun asterisco (*) para seleccionar todos los atributos de todas las relaciones que

    aparecen en la clusulaFROM, aunque no es conveniente elegir esta ultima opcinsalvo que sea necesario pues desperdiciamos mucho tiempo en obtenerlo

    Alias: Es posible renombrar los atributos y las relaciones, a veces por convenienciay otras veces por ser necesario, para esto usamos la clusula AS como en elsiguiente ejemplo.

    Ejemplo 2.2

    SELECT P.nombreAS[PRIMER NOMBRE]

    FROM personaP

    WHERE apellido= "MARQUESI"

    En este ejemplo cabe destacar un par de cosas. Cuando nos referimos a un atributocomo es el caso de nombre, podemos referirnos a este usando la relacin (o el aliasen este ejemplo) a la que pertenece el atributo seguido de un punto seguido delatributo , a veces esta notacin ser necesaria para eliminarambigedades. Los corchetes los usamos cuando usamos espacios en blancos oel carcter () en el nombre de atributo o alias.

    Usar alias en los atributos nos permite cambiar el nombre de los atributos de larespuesta 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 nombrede la relacin.

    En las consultas que contienen subconsultas, se aplica una regla de mbito a lasvariables de tupla. En una subconsulta est permitido usar solo variables de tupladefinidas en la misma subconsulta o en cualquier consulta que tenga la subconsulta.

    5

  • 8/10/2019 Unidad 6 base de datos

    8/34

    Predicados y conectoresLos conectores lgicos en SQL son:

    ANDOR

    NOT

    La lgica de estos conectores es igual que en cualquier lenguaje de programaciny sirven para unir predicados.Las operaciones aritmticas en SQL son:

    + (Suma)- (Resta)* (Multiplicacin)/ (Divisin)

    Tambin incluye el operador de comparacin BETWEEN, que se utiliza para valorescomprendidos entre

    Ejemplo: Encontrar todos los nombres y dni de las personas cuyos dni sea mayorque 26 millones y menor a 28 millones

    SELECT nombre, dniFROM personaWHERE dni BETWEEN 26000000 and 28000000

    Anlogamente podemos usar el operador de comparacin NOT BETWEEN.

    SQL tambin incluye un operador de seleccin para comparaciones de cadena decaracteres. Los modelos se describen usando los caracteres especiales:

    El carcter (%) es igual a cualquier sub cadena.

    El operador (_) es igual a cualquier carcter.

    Estos modelos se expresan usando el operador de comparacin LIKE. Un error muyfrecuente es tratar de utilizar los modelos mediante el operador de igualdad (=) locual es un error de sintaxis.

    Ejemplo: encontrar los nombres que comiencen con la letra p o el nombre tengaexactamente 6 caracteres de la relacin persona

    SELECT nombre.FROM persona.WHERE (nombre LIKE "P%") OR (nombre LIKE "_ _ _ _ _ _")

    6

  • 8/10/2019 Unidad 6 base de datos

    9/34

    SQL incluye las operaciones de conjuntos UNION, INTERSECT, MINUS, queoperan sobre relaciones y corresponden a las operaciones del lgebra unin,interseccin y resta de conjuntos respectivamente. Para realizar esta operacin deconjuntos debemos tener sumo cuidado que las relaciones tengan las mismasestructuras.

    Incorporemos ahora una nueva relacin, llamada jugadores que representa laspersonas que juegan al ftbol, sus atributos sern DNI, puesto y nro_camiseta.

    Supongamos que esta nueva tabla est conformada de la siguiente manera

    Ejemplo: Obtener todos los nombres de la relacin persona cuyos apellidos seanMarquesi o Serrat.

    SELECT nombreFROM PERSONAWHERE apellido = "MARQUESI"

    UNIONSELECT nombreFROM PERSONAWHERE apellido = "SERRAT"

    Obtener todos los DNI de los que juegan al ftbol y, adems, estn en la lista de larelacin persona

    SELECT dniFROM personaINTERSECTSELECT dniFROM jugadores

    Por omisin, la operacin de union elimina las tuplas duplicadas. Para retenerduplicados se debe escribir UNION ALL en lugar de UNION.

    El conector IN prueba si se es miembro de un conjunto, donde el conjunto es unacoleccin de valores producidos en lo general por una clusula SELECT.

    Anlogamente el conector NOT IN prueba la no pertenencia al conjunto

    Ejemplo: Encontrar los nombres de las personas que juegan al ftbol y, adems, seencuentran en la relacin persona

    SELECT nombre, apellidoFROM personaWHERE dni IN(SELECT dni FROM jugadores)

    7

  • 8/10/2019 Unidad 6 base de datos

    10/34

    Es posible probar la pertenencia de una relacin arbitraria SQL usa la notacin deelementos para representar una tupla de elementos de n que contienelos valores v1,v2,...,vn.

    Comparacin de conjuntos

    En conjuntos la frase > se representa en SQL por (>SOME),tambin podra entenderse esto como >, su sintaxis esigual que la del conector IN. SQL tambin permite las comparaciones (>SOME),(=SOME) (>=SOME), (ALL), que corresponde a la frase >. Al igual que el operador SOME, puede escribirse (>ALL), (=ALL) (>=ALL),(

  • 8/10/2019 Unidad 6 base de datos

    11/34

    6.4 Operaciones sobre conjuntosSQL permite tres tipos de operaciones con conjuntos:

    UNION, disponible en todas las versiones SQL Server.

    EXCEPT, nuevo en SQL Server 2005.

    INTRESECT, nuevo en SQL Server 2005.

    Para utilizar operaciones de conjuntos debemos cumplir una serie de normas:

    Las consultas a unir deben tener el mismo nmero de campos, y adems los

    campos deben ser del mismo tipo.

    Slo puede haber una nica clausula ORDER BY al final de la sentencia

    SELECT.

    UNION

    UNION devuelve la suma de dos o ms conjuntos de resultados. El conjuntoobtenido como resultado deUNION tiene la misma estructura que los conjuntosoriginales. El siguiente ejemplo muestra el uso de UNION

    SELECTNombre,Apellido1 ,Apellido2,NifCif,FxNacimiento

    FROMEMPLEADOS

    UNION

    SELECTNombre,Apellido1 ,Apellido2,NifCif,FxNacimiento

    FROMCLIENTES

    Cuando realizamos una consulta con UNION internamente se realiza unaoperacinDISTINCT sobre el conjunto de resultados final. Si queremos obtenertodos los valores debemos utilizaUNION ALL.

    SELECTNombre,Apellido1 ,Apellido2,NifCif,FxNacimiento

    FROMEMPLEADOS

    UNIONALL

    SELECTNombre,Apellido1 ,Apellido2,NifCif,FxNacimiento

    FROMCLIENTES

    9

  • 8/10/2019 Unidad 6 base de datos

    12/34

    EXCEPT

    EXCEPTdevuelve la diferencia (resta) de dos o ms conjuntos de resultados. Elconjunto obtenido como resultado de EXCEPT tiene la misma estructura que losconjuntos originales.

    El siguiente ejemplo muestra el uso deEXCEPT

    SELECTNombre,Apellido1 ,Apellido2,NifCif,FxNacimiento

    FROMEMPLEADOS

    EXCEPT

    SELECTNombre,Apellido1 ,Apellido2,NifCif,FxNacimiento

    FROMCLIENTES

    El uso de EXCEPT, como norma general, es mucho ms rpido queutilizar condicionesNOT INoEXISTSen la clusulaWHERE.

    INTERSECT

    Devuelve la interseccin entre dos o ms conjuntos de resultados en uno. El

    conjunto obtenido como resultado de INTERSECTtiene la misma estructura quelos conjuntos originales.

    El siguiente ejemplo muestra el uso deINTERSECT

    SELECTNombre,Apellido1 ,Apellido2,NifCif,FxNacimiento

    FROMEMPLEADOS

    INTERSECT

    SELECTNombre,Apellido1 ,Apellido2,NifCif,FxNacimiento

    FROMCLIENTES

    10

  • 8/10/2019 Unidad 6 base de datos

    13/34

    11

  • 8/10/2019 Unidad 6 base de datos

    14/34

    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:

    Funcin Descripcin

    COUNT Nos da el nmero total de filasseleccionadas

    SUM Suma los valores de una columna

    MIN Nos da el valor mnimo de unacolumna

    MAX Nos da el valor mximo de unacolumna

    AVG Calcula el valor medio de unacolumna

    En general, las funciones de agregacin se aplican a una columna, excepto lafuncin de agregacin COUNT, que normalmente se aplica a todas las columnas dela tabla o tablas seleccionadas. Por lo tanto, COUNT (*) contar todas las filas de latabla o las tablas que cumplan las condiciones. Si se utilizase COUNT (distinctcolumna), slo contara los valores que no fuesen nulos ni repetidos, y si seutilizase 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 clusulaSELECT, para hacer la consulta Cuntos departamentos estn ubicados en laciudad de Lleida?:

    SELECT COUNT (*) AS numero_depFROM departamentosWHERE ciudad_dep = Lleida;

    La respuesta a esta consulta sera la que aparece reflejada en la tabla queencontraris en el margen.

    COUNT

    Regresa la cuneta de todos los valores del SELECT. Tambin se puede usar laopcin DISTINCT para solamente contar los valores distintos.

    COUNTBIG

    Igual que COUNT, pero regresa un BIGINT.

    numero_dep

    1

    12

  • 8/10/2019 Unidad 6 base de datos

    15/34

    AVG

    Regresa el promedio de todos los valores del SELECT. Tambin se puede usar laopcin DISTINCT para calcular el promedio de los valores distintos.

    MINRegresa el valor mnimo de todos los valores del SELECT.

    MAXRegresa el Valor mximo de todos los valores del SELECT.

    SUMRegresa la suma de todos los valores del SELECT.

    STDEVRegresa la desviacin estndar de una muestra de todos los valores del SELECT.

    STDEVPRegresa la desviacin estndar de todos los valores del SELECT.

    VARRegresa la variacin de una muestra de todos los valores del SELECT

    VARPRegresa la variacin de todos los valores del SELECT.

    GROUPINGUsado con el GROUP BY y ROLLUP, se puede ver el nivel de los resultados

    CHECKSUM AGGRegresa la suma de verificacin de todos los valores del SELECT.

    13

  • 8/10/2019 Unidad 6 base de datos

    16/34

    6.6 Valores nulos SQL

    Null (nulo) es un marcador especial usado en el lenguaje de consulta estructurado(SQL) para indicar que no existe un valor dentro de una base de datos. Introducidopor el creador del modelo relacional de bases de datos E. F. Codd, su funcin es la

    de solventar el requisito de que los sistemas de gestin relacionales de base dedatos (en ingls: Database management system, abreviado DBMS) verdaderospuedan representar informacin desconocida o no aplicable. Asimismo, Coddtambin introdujo el uso de la letra griega omega () en minscula para representarel Null en la teora de la teora de las bases de datos. NULL es tambin una palabrareservada en el lenguaje SQL para identificar el marcador especial Null.

    Null ha sido un foco de controversia y una fuente de debate debido a su asociacina la lgica ternaria (en ingls: Three-Valued Logic, abreviado 3VL), a susrestricciones de uso en SQL y a la dificultad de su manejo en SQL. Aunque lasfunciones especiales y predicados sirven para manejar eficazmente el Nulls, la

    competencia opina que resolver este tipo de cuestiones aade complejidades ycontradicciones innecesarias dentro del modelo relacional de bases de datos.

    "null" significa "dato desconocido" o "valor inexistente". No es lo mismo que un valor"0", una cadena vaca o una cadena literal "null".

    A veces, puede desconocerse o no existir el dato correspondiente a algn campode un registro. En estos casos decimos que el campo puede contener valores nulos.

    Por ejemplo, en nuestra tabla de libros, podemos tener valores nulos en el campo"precio" porque es posible que para algunos libros no le hayamos establecido el

    precio para la venta.

    En contraposicin, tenemos campos que no pueden estar vacos jams.

    Veamos un ejemplo. Tenemos nuestra tabla "libros". El campo "titulo" no deberaestar vaco nunca, igualmente el campo "autor". Para ello, al crear la tabla, debemosespecificar que dichos campos no admitan valores nulos:

    create table libros(

    titulo varchar(30) not null,

    autor varchar(20) not null,

    editorial varchar(15) null,

    precio float

    );

    14

  • 8/10/2019 Unidad 6 base de datos

    17/34

    Para especificar que un campo no admita valores nulos, debemos colocar "not null"luego de la definicin del campo.

    En el ejemplo anterior, los campos "editorial" y "precio" si admiten valores nulos.

    Cuando colocamos "null" estamos diciendo que admite valores nulos (caso delcampo "editorial"); por defecto, es decir, si no lo aclaramos, los campos permitenvalores nulos (caso del campo "precio").

    Si ingresamos los datos de un libro, para el cual an no hemos definido el preciopodemos colocar "null" para mostrar que no tiene precio:

    insert into libros (titulo,autor,editorial,precio)

    values('El aleph','Borges','Emece',null);

    Note que el valor "null" no es una cadena de caracteres, no se coloca entre comillas.

    Entonces, si un campo acepta valores nulos, podemos ingresar "null" cuando noconocemos el valor.

    Tambin podemos colocar "null" en el campo "editorial" si desconocemos el nombrede la editorial a la cual pertenece el libro que vamos a ingresar:

    insert into libros (titulo,autor,editorial,precio)

    values('Alicia en el pais','Lewis Carroll',null,25);

    Si intentamos ingresar el valor "null" en campos que no admiten valores nulos (como"titulo" o "autor"), SQL Server no lo permite, muestra un mensaje y la insercin nose realiza; por ejemplo:

    insert into libros (titulo,autor,editorial,precio)

    values(null,'Borges','Siglo XXI',25);

    Para ver cules campos admiten valores nulos y cules no, podemos emplear elprocedimiento almacenado "sp_columns" junto al nombre de la tabla. Nos muestra

    mucha informacin, en la columna "IS_NULLABLE" vemos que muestra "NO" en loscampos que no permiten valores nulos y "YES" en los campos que si los permiten.

    Para recuperar los registros que contengan el valor "null" en algn campo, nopodemos utilizar los operadores relacionales vistos anteriormente: = (igual) y (distinto); debemos utilizar los operadores "is null" (es igual a null) y "is not null" (noes null):

    15

  • 8/10/2019 Unidad 6 base de datos

    18/34

    select * from libros

    where precio is null;

    La sentencia anterior tendr una salida diferente a la siguiente:

    select * from libros

    where precio=0;

    Con la primera sentencia veremos los libros cuyo precio es igual a "null"(desconocido); con la segunda, los libros cuyo precio es 0.

    Igualmente para campos de tipo cadena, las siguientes sentencias "select" noretornan los mismos registros:

    select * from libros where editorial is null;

    select * from libros where editorial='';

    Con la primera sentencia veremos los libros cuya editorial es igual a "null", con lasegunda, los libros cuya editorial guarda una cadena vaca.

    Entonces, para que un campo no permita valores nulos debemos especificarlo luegode definir el campo, agregando "not null". Por defecto, los campos permiten valoresnulos, pero podemos especificarlo igualmente agregando "null".

    16

  • 8/10/2019 Unidad 6 base de datos

    19/34

    6.7 Consultas anidadas

    Una consulta anidada, como su nombre indica, es aquella que est contenidadentro de otra. Los resultados de una la consulta anidada se utilizan como valoresde comparacin de la clusula WHERE de la consulta que la anida. Se evaluar

    antes la sentencia SELECT anidada y una vez obtenido el valor o conjunto devalores se evaluar la otra. El formato es el siguiente:

    SELECT col1, col1, ... , coln

    FROM tabla1

    WHERE col

    (SELECT col

    FROM tabla2

    WHERE condiciones);

    Se deben tener en cuenta los siguientes aspectos para ejecutar este tipo desentencias:

    -La tabla de la sentencia SELECT anidada no tiene por qu ser la misma que la dela sentencia SELECT que la anida.

    - El tipo de datos de la 'col' de la sentencia SELECT superior y de la 'col' de la

    anidada debe ser el mismo.

    - Siempre se seleccionarn el mismo nmero de columnas de la sentenciaSELECT anidada que el de columnas que forman parte de la clusula WHERE enla superior.

    - Las filas devueltas por la consulta anidada deben corresponderse con el tipo deoperador lgico indicado. Si el operador lgico es '=' la sentencia SELECT anidadasolo podr devolver una nica fila.

    17

  • 8/10/2019 Unidad 6 base de datos

    20/34

    6.8 Consultas complejas

    El SQL soporta dos grupos de consultas multitabla:

    - la uninde tablas.

    - la composicinde tablas.

    La unin de tablas

    Esta operacin se utiliza cuando tenemos dos tablascon las mismas columnasyqueremos obtener una nueva tablacon las filas de la primera y las filas de lasegunda. En este caso la tabla resultante tiene las mismas columnas que laprimera tabla (que son las mismas que las de la segunda tabla).

    Cuando hablamos de tablas pueden ser tablas realesalmacenadas en la base dedatos o tablas lgicas (resultados de una consulta), esto nos permite utilizar laoperacin con ms frecuencia ya que pocas veces tenemos en una base de datostablas idnticas en cuanto a columnas. El resultadoes siempre una tabla lgica.

    Por ejemplo queremos en un slo listado los productos cuyas existencias seaniguales a cero y tambin los productos que aparecen en pedidos del ao 90. En estecaso tenemos unos productos en la tabla de productos y los otros en la tabla depedidos, las tablas no tienen las mismas columnas no se puede hacer una unin deellas pero lo que interesa realmente es el identificador del producto (id fab, idproducto), luego por una parte sacamos los cdigos de los productos conexistencias cero (con una consulta), por otra parte los cdigos de los productos queaparecen en pedidos del ao 90 (con otra consulta), y luego unimos estas dos tablaslgicas.

    El operador que permite realizar esta operacin es el operador UNION.

    18

  • 8/10/2019 Unidad 6 base de datos

    21/34

    La composic in de tablas

    La composicin de tablas consiste en concatenar filas de una tabla con filas deotra. En este caso obtenemos una tabla con las columnas de la primeratablaunidasa las columnasde la segunda tabla, y las filas de la tabla resultante

    son concatenacionesde filasde la primera tabla confilas de la segunda tabla.

    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 lasdos tablas, esto es muy til cuando queremos visualizar filas cuyos datos seencuentran en dos tablas.

    Existen distintos tipos de composicin, aprenderemos a utilizarlos todos y a elegirel tipo ms apropiado a cada caso.

    Los tipos de composicinde tablas son:

    El producto cartesiano

    El INNER JOIN

    19

  • 8/10/2019 Unidad 6 base de datos

    22/34

    El producto cartesiano

    El producto cartesiano es un tipo de composicin de tablas, aplicando el productocartesiano a dos tablas se obtiene una tabla con las columnas de la primeratablaunidasa las columnasde la segunda tabla, y las filas de la tabla resultante

    son todas las posibles concatenacionesde filas de la primera tablacon filas dela segunda tabla.

    La sintaxis es la siguiente:

    * El producto cartesianose indica poniendoen la FROMlas tablasque queremos

    componer separadas por comas, podemos obtener as el producto cartesiano dedos, tres, o ms tablas.

    *nb tablapuede ser un nombre de tablao un nombre de consulta. Si todas lastablas estn en una base de datos externa, aadiremos la clusula INbasedatosexternadespusde la ltima tabla. Pero para mejorar el rendimiento yfacilitar el uso, se recomienda utilizar una tabla vinculada en lugar de la clusula IN.

    * Se puede componer una tabla consigo misma, en este casoes obligatorioutilizar un nombre de aliaspor lo menos para una de las dos.

    Ejemplo:

    SELECT*FROM [existencias cero],[pedidos 90]

    Obtenemos la siguiente tabla:

    20

  • 8/10/2019 Unidad 6 base de datos

    23/34

    El INNER JOIN

    El INNER JOINes otro tipo de composicin de tablas, permite emparejar filasdedistintas tablas de forma ms eficienteque con el producto cartesiano cuandounade las columnas de emparejamientoest indexada. Ya que en vez de hacer el

    producto cartesiano completo y luego seleccionar la filas que cumplen la condicinde emparejamiento, para cada fila de una de las tablas busca directamenteen laotra tabla las filas quecumplen la condicin, con lo cual se emparejan slo las filasque luego aparecen en el resultado.

    La sintaxis es la siguiente:

    Ejemplo:

    SELECT*FROM pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie

    *tabla1y tabla2son especificaciones de tabla(nombre de tabla con alias o no,nombre de consulta guardada), de las tablas cuyos registros se van a combinar.

    Pueden ser las dos la misma tabla, en este caso es obligatoriodefinir al menosun aliasde tabla.

    *col1, col2son las columnas de emparejamiento.

    Observar que dentro de la clusula ON los nombres de columna debenser nombres cualificados(lleva adelante el nombre de la tabla y un punto).

    * Las columnasde emparejamiento deben contener la misma clase de datos, lasdos de tipo texto, de tipo fecha etc... los campos numricos deben ser de tipossimilares. Por ejemplo, se puede combinar campos Auto Numrico y Long puestoque son tipos similares, sin embargo, no se puede combinar campos de tipo Simpley Doble. Adems las columnas no pueden ser de tipo Memo ni OLE.

    *comprepresenta cualquier operador de comparacin( =, , =, o ) y

    se utiliza para establecer la condicin de emparejamiento.

    *Se pueden definir varias condiciones de emparejamiento unidas por losoperadores AND y OR poniendo cada condicin entre parntesis . Ejemplo:

    21

  • 8/10/2019 Unidad 6 base de datos

    24/34

    SELECT *FROM pedidos INNER JOIN productos ON (pedidos.fab = productos.idfab)

    AND (pedidos.producto = productos.idproducto);

    El LEFT / RIGHT JOIN

    El LEFT JOIN y RIGHT JOIN son otro tipo de composicin de tablas, tambindenominada composicin externa. Son una extensin del INNER JOIN.

    Las composiciones vistas hasta ahora (el producto cartesianoy el INNER JOIN)son composiciones internasya que todos los valores de las filas del resultado sonvalores que estn en las tablas que se combinan.

    La sintaxis del LEFT JOINes la siguiente:

    Esta operacin consiste en aadir al resultado del INNER JOIN las filas dela tabla de la izquierda que no tienen correspondencia en la otra tabla,y rellenaren esas filas los campos de la tablade la derechacon valores nulos.

    Ejemplo:

    SELECT *

    FROM empleados LEFT JOIN oficinas ON empleados.oficina =oficinas.oficina;

    Con el ejemplo anterior obtenemos una lista de los empleados con los datos de suoficina, y el empleado 110 que no tiene oficina aparece con sus datos normales ylos datos de su oficina a nulos.

    La sintaxis del RIGHT JOINes la siguiente:

    Esta operacin consiste en aadir al resultado del INNER JOIN las filas de

    la tabla de la derecha que no tienen correspondencia en la otra tabla,y rellenaren esas filas los camposde la tablade la izquierdacon valores nulos.

    22

  • 8/10/2019 Unidad 6 base de datos

    25/34

    Ejemplo:

    SELECT *FROM empleados RIGHT JOIN oficinas ON empleados.oficina =oficinas.oficina;

    Con el ejemplo anterior obtenemos una lista de los empleados con los datos de suoficina, y adems aparece una fila por cada oficina que no est asignada a ningnempleado con los datos del empleado a nulos.

    Una operacin LEFT JOIN o RIGHT JOIN se puede anidar dentro de unaoperacin INNER JOIN, pero una operacin INNER JOIN no sepuede anidardentrode LEFTJOIN o RIGHT JOIN.

    23

  • 8/10/2019 Unidad 6 base de datos

    26/34

    6.9 Vistas

    En el modelo de datos relacional la forma de guardar la informacin no es la mejorpara ver los datos

    Una vista es una consulta, que refleja el contenido de una o ms tablas, desde laque 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 lainformacin que hay en una tabla, pero no a toda la tabla.

    Comodidad, como hemos dicho el modelo relacional no es el ms comodo paravisualizar los datos, lo que nos puede llevar a tener que escribir complejassentencias SQL, tener una vista nos simplifica esta tarea.

    Las vistas no tienen una copia fsica de los datos, son consultas a los datos que hayen las tablas, por lo que si actualizamos los datos de una vista, estamosactualizando realmente la tabla, y si actualizamos la tabla estos cambios sernvisibles desde la vista.

    Nota: No siempre podremos actualizar los datos de una vista, depender de lacomplejidad de la misma (depender de si el conjunto de resultados tiene acceso ala clave principal de la tabla o no), y del gestor de base de datos. No todos losgestores de bases de datos permiten actualizar vistas, ORACLE, por ejemplo, no lopermite, mientras que SQL Server s.

    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 VIEWAS( ) ;

    24

  • 8/10/2019 Unidad 6 base de datos

    27/34

  • 8/10/2019 Unidad 6 base de datos

    28/34

    No todas las bases de datos soportan los sinnimos.

    Para crear un sinnimo hay que utilizar la sentencia CREATESYNONYM especificando el nombre que deseamos utilizar como sinnimo y la tablapara la que estamos creando elsinnimo.

    CREATE SYNONYMFOR ;

    Ejemplo: El siguiente ejemplo crea el sinnimo Coches para la tabla tCoches.

    CREATE SYNONYMCochesFOR t Coches;

    Para eliminar el sinnimo creado debemos emplear la sentencia DROP SYNONYM.

    DROP SYNONYM Coches;

    26

  • 8/10/2019 Unidad 6 base de datos

    29/34

    6.10 Modificacin de las bases de datosSQL posee comandos destinados tambin para modificar la base de datos, entre

    estos se tienen operaciones de borrado, insercin y actualizacin.

    BORRADOLa operacin de borrado se expresa de igual manera que una consulta. Se puedenborrar slo tuplas completas, es decir, no se pueden borrar valores de atributos

    concretos.

    La expresin SQL relacionada con el borrado es:

    delete from r where p

    Donde r es una relacin y p es una condicin lgica que determina las tuplas a sereliminadas de r, si la condicin p es omitida, se eliminan todas la tuplas de r.

    Hay que sealar que una orden delete opera slo sobre una relacin. Si se deseaborrar tuplas de varias relaciones, se deber utilizar una orden delete por cadarelacin. El predicado de la clusula where puede ser tan complicado como el wherede cualquier clusula select, o tan simple como una clusula where vaca.

    Ejemplo: Borrar todas las tuplas de la relacin Prstamo (Los sistemas biendiseados requerirn una confirmacin del usuario antes de ejecutar una consultacomo esta).

    Solucin: delete from Prstamo

    Ejemplo: Borrar todas las cuentas de la Sucursal Subtiava

    Solucin: delete from Cuenta where nombre_sucursal=Subtiava

    Ejemplo: Borrar todas las cuentas de la Sucursal Subtiava

    Solucin: delete from Cuenta where nombre_sucursal=Subtiava

    Ejemplo: Borrar todos los prstamos en los que el monto del prstamo est entreC$ 5,000 y

    C$ 10,000 crdobas.

    Solucin: delete from Prestamo where importe between 5000 and 10000

    Ejemplo: Borrar las cuentas de todas las sucursales de Granada

    27

  • 8/10/2019 Unidad 6 base de datos

    30/34

    En este caso la solucin se genera mediante una sub consulta que muestra losnombres de las sucursales ubicadas en Masaya. De modo que la expresin SQLrequerida es:

    Solucin: delete from Cuenta where nombre_sucursal in (select

    nombre_sucursal from Sucursal where ciudad_sucursal = Granada)

    En este borrado se se selecciona primero todas las sucursales con sede en Granaday a continuacin borra todas las tuplas Cuenta pertenecientes a esas sucursales.

    Uso de funciones de agregacin en una sub consulta de borrado.

    Ejemplo: Borrar todas las cuentas cuyos saldos sean inferiores a la media del banco

    Solucin: delete from Cuenta where saldo <

  • 8/10/2019 Unidad 6 base de datos

    31/34

    La instruccin insert ms sencilla corresponde a la de insercin de una tupla.

    Ejemplo: Insertar en la base los datos asociados a la cuenta C?0045 en la Sucursal

    Lon y que tiene como saldo C$ 6000.00

    Solucin Caso 1: insert into Cuenta values ( C?0045, Len, 6000)

    En este ejemplo los valores se especifican en el mismo orden en que los atributos

    se listan en el esquema de la relacin Cuenta. Para beneficio de los usuarios que

    no pueden recordar el orden de los atributos se especifican en la clusula insert.

    Solucin Caso 2: insert into Cuenta (nombre_sucursal, numero_cuenta, saldo)

    values

    (Len,C?0045,6000)

    Solucin: insert into Cuenta (numero_cuenta, nombre_sucursal, saldo) values

    (C?

    0045,Len,6000)

    El efecto es similar al ejemplo anterior con la diferencia de que se han listado

    explcitamente, los nombres de los atributos, esto debido a que en la clusula

    values no se ha guardado el orden que estos tienen en la estructura de la tabla.

    Generalmente se desea insertar las tuplas que resultan de una consulta.

    Ejemplo: Si a todos los clientes que tienen un prstamo en la sucursal Subtiava se

    les quisiera regalar, como gratificacin una cuenta de ahorro con C$ 5000.00 por

    cada cuenta de prstamo que posee.

    Solucin: insert into Cuenta select nombre_sucursal,numero_prestamo, 1000

    from

    Prestamo where nombre_sucursal = Subtiava

    La instruccin select se evala primero, produciendo un conjunto de tuplas que a

    continuacin se insertan en la relacin Cuenta. Cada tupla tiene un

    nombre_sucursal (Subtiava), un numero_prestamo (que sirve como nmero para lanueva cuenta) y un saldo inicial de la cuenta (C$ 1000).

    Es necesario aadir tuplas a la relacin Impositor, a travs de la siguiente consulta:

    Solucin: insert into Impositor select nombre_cliente, numero_prestamo from

    Prestatario, Prestamo where Prestatario.numero_prestamo =

    Prstamo.numero_prestamo and nombre_sucursal = Subtiava

    29

  • 8/10/2019 Unidad 6 base de datos

    32/34

    Esta consulta inserta en la relacin Impositor una tupla (nombre_cliente,

    numero_prestamo) por cada nombre_cliente que posea un prstamo en la sucursal

    Subtiva, con nmero de prstamo numero_prestamo.

    30

  • 8/10/2019 Unidad 6 base de datos

    33/34

    Conclusiones Personales

    Bravo Garca Emmanuel:

    Es fundamental que como desarrollador de bases de datos, conozca el

    funcionamiento interno de SQL Server para que las consultas que usted codificasean eficientes en SQLServer. La figura de Desarrollador de Bases de Datos (DBD)

    es una figura en extincin en estos das en los que se tiende a entender la base de

    datos como un simple repositorio de informacin.

    De Luna Martn Eutiquio:

    Podemos concluir el proceso de normalizacin cuando analizando nuestras tablascomprobamos que somos capaces de realizar una actualizacin sin tener quecambiar ms de un dato para cada actualizacin.

    Mencionar que el proceso de normalizacin ha ido evolucionando, losinvestigadores de bases de datos han incluido dos formas normales a las tres quehemos explicado, la forma normal D y E.

    Estas dos ltimas formas pertenecen a la normalizacin avanzada, y no sonaplicables a la mayora de las bases de datos, ya que es muy difcil alcanzar unnivel de complejidad tan alto como para tener que aplicarlas. Incluso se aconseja alos diseadores que revisen sus estructuras cuando es necesario aplicar lasformas normales D y E, ya que posiblemente si son necesarias es porque eldesarrollador a cometido errores en su diseo.

    Puebla Valencia Jess:

    La importancia principal de las multibase de datos y ms concretamente de lasbases de datos federadas fuertemente acopladas radica principalmente en su bi-procesamiento. Es decir, en su capacidad de atender consultas globales, al mismotiempo que permite que las bases de datos componentes sigan atendiendo a susaplicaciones locales.

    Ramrez Gervacio Daniel:

    SQL nos permite ingresar comandos o sentencias de tal manera quepodemos administrar o crear una base de datos esta variedad de comandos nospermite generar informacin datos desde la creacin , modificacin omantenimiento a tablas las cuales tambin nos permiten recuperar datos o

    31

  • 8/10/2019 Unidad 6 base de datos

    34/34

    importarlas de varias maneras es difcil imaginar hoy en da la concentracin uinformacin sin base de datos las pequeas o grandes industrias tiene comobase de su sistema informacin la construccin de bases de datos con las quepodemos tener una gran versatilidad.

    Velasco Velzquez Germn:

    Es especialmente interesante que el lenguaje SQL sea declarativo y, por tanto resulta muy natural

    su manejo y aprendizaje porque no hay que especificar cada accin que se lleva a cabo en una

    base de datos. En este trabajo se muestran las sentencias ms utilizadas del lenguaje estndar

    ANSI/ISO SQL92 de definicin, manipulacin y control de bases de datos relacionales. SQL es un

    lenguaje muy potente, las sentencias y opciones utilizadas seguramente pueden ser muy

    numerosas, por lo menos ms que las de los sistemas relacionales.

    Conociendo el SQL92 podemos trabajar con cualquier sistema relacional comercial; slo

    tendremos que dedicar unas cuantas horas a ver qu variaciones se dan con respecto al estndar.

    Creo que es importante recopilar la creacin de una base de datos con SQL:

    1. En primer lugar, tendremos que dar nombre a la base de datos, con la sentencia CREATE

    DATABASE, si la hay, o con CREATE SCHEMA.

    2. A continuacin definiremos las tablas, los dominios, las aserciones y las vistas que

    formarn nuestra base de datos.

    3. Una vez definidas las tablas, que estarn completamente vacas, se debern llenar con

    la sentencia INSERT INTO.

    Cuando la base de datos tenga un conjunto de filas, la podremos manipular, ya sea

    actualizando filas o bien haciendo consultas. Adems, podemos usar todas las sentencias

    de control que se vieron.