SlideShare una empresa de Scribd logo
Tema 5. SQL

El estándar de las Bases de Datos Relacionales
                      Elmasri/Navathe 07



   • Definición de datos y restricciones (CREATE TABLE),
     y cambios en el esquema (DROP y ALTER)
   • Consultas (SELECT...FROM...WHERE) → restringidas *
   • Actualización (INSERT, DELETE, UPDATE)




 restringidas *
 En este curso NO se cubren todos los aspectos de SELECT.
 No se estudian, por ejemplo, SELECT anidados o la cláusula HAVING
 (consultar el temario de la asignatura).

 En el examen NO se admiten soluciones que incluyan aspectos de
 SQL no cubiertos en la asignatura.




                  FBD Tema 5 – Dpto. LSI - Donostia             1
SQL
               (Structured Query Language)


    Álgebra relacional → orden de las operaciones
•
    SQL: lenguaje declarativo →
•
     – Se indica cuál es el resultado esperado
     – Permite que el SGBD seleccione las operaciones y
       el orden más adecuados para obtener el resultado:
       optimización

    SGBD comerciales → son variantes de SQL
•
•   Estándares SQL: SQL1 1986, SQL2 1992, SQL3
    (extiende SQL2 con conceptos de BD y OO)

•   SQL:
     – Lenguaje de Definición de Datos (LDD)
     – Lenguaje de Manipulación de Datos (LMD):
       consulta y actualización
     – Definición de vistas
     – Especificación de seguridad y autorización
     – Definición de restricciones de integridad
     – Especificación de control de transacciones
     – Reglas para inclusión en lenguajes (C, PASCAL,...)
•   Nos centraremos en SQL2
                 SQL             Mod. Relacional
                 Tabla              Relación
                  Fila               Tupla
                Columna             Atributo

                FBD Tema 5 – Dpto. LSI - Donostia     2
Esquema y catálogo en SQL2

  •   Esquema de BD: el término se incorporó en SQL2

 CREATE SCHEMA Nombre [AUTHORIZATION Usuario];

                                Cuenta propietaria del esquema


  •   Catálogo del SGBD: colección de esquemas en un
      entorno SQL
            Catálogo del SGBD
              Esquema 1          Esquema 2             INFORMATION
                                                         _SCHEMA
                 Tablas

                                                 ...
              Restricciones
Elementos
                Vistas
  de un
 esquema       Dominios
              Autorizaciones


                                         Esquema especial que da
                                         a los usuarios autorizados
                                          información de todos los
                                         esquemas del catálogo del
                                                   SGBD

      – RI: sólo entre relaciones del mismo catálogo del
        SGBD
      – Esquemas del catálogo del SGBD: pueden
        compartir elementos (por ejemplo dominios)

                   FBD Tema 5 – Dpto. LSI - Donostia                  3
Instrucción CREATE TABLE
                                Fig 8.1(a)                          No pueden tomar
                                                                       valor nulo
                                 CREATE TABLE DEPARTAMENTO
               Atributos
              Atributos




                                 ( NOMBRED       VARCHAR(15) NOT NULL,
                                  NUMEROD         INT             NOT NULL,
                                  NSS_JEFE        CHAR(9)         NOT NULL,
                                  FECHA_INIC_JEFE DATE, Clave primaria
               Restricciones
              Restricciones




                                                                 Integridad de entidades
                                  PRIMARY KEY(NUMEROD),
                                                      Clave candidata
                                  UNIQUE(NOMBRED),
                                  FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)
                                );                  Clave extranjera (o externa)


                       Fig 8.1(b)
       Atributos




                                                                                  Valor por
      Atributos




                        CREATE TABLE DEPARTAMENTO
                                                                                   defecto
                        ( NOMBRED       VARCHAR(15) NOT NULL,
                               NUMEROD           INT            NOT NULL DEFAULT ‘888665555’,
                           NSS_JEFE              CHAR(9)        NOT NULL,
                           FECHA_INIC_JEFE       DATE,
(con nombre)
  Restricciones
 (connombre)
 Restricciones




                               CONSTRAINT CLP_DPTO PRIMARY KEY(NUMEROD),
                               CONSTRAINT CLS_DPTO UNIQUE(NOMBRED),
                CONSTRAINT CLE_JEFES_DPTO FOREIGN KEY(NSS_JEFE)
                    REFERENCES EMPLEADO(NSS)
                        ON DELETE SET DEFAULT
                        ON UPDATE CASCADE
              );
                         Acciones: a realizar en caso de borrado (ON DELETE) o
                            modificación (ON UPDATE) del valor referenciado
            Constraint:
            se pone
          nombre a la                                           Opciones:
         RI, para poder                        • CASCADE
          cambiarla o                          • SET DEFAULT
         eliminarla con
                                               • SET NULL
            ALTER y
                                               • RESTRICT (no poner ON UPDATE – ON DELETE)
                        DROP

                                            FBD Tema 5 – Dpto. LSI - Donostia                4
Tipos de datos en SQL2
                                        Fecha:
Enteros de diversos tamaños:
                                              – DATE
      – INTEGER / INT
                                              – Sólo admite fechas válidas
      – SMALLINT
                                              – Generalmente YYYY-MM-
Reales:
                                                 DD
      – FLOAT
                                              – Componentes: YEAR,
      – REAL
                                                 MONTH, DAY
      – DOUBLE PRECISION
                                        Hora:
Números con formato:
                                              – TIME(i)
      – NUMERIC(i,j)
                                              – Sólo admite horas válidas
      – DECIMAL(i,j) / DEC(i,j)
                                              – Normalmente HH-MM-SS
      – i dígitos enteros y j dígitos
                                              – Componentes: HOUR,
          decimales
                                                 MINUTE, SECOND
      – Por defecto: i según la
                                              – i = posiciones de fracciones
          implementación, j=0
                                                 de sg.
Cadena de caracteres de longitud
                                        Hora con desplazamiento de huso
    fija:
                                            horario:
      – CHAR(n)
                                              – TIME WITH TIME ZONE
      – CHARACTER(n)
                                              – +13:00 a -12:59
Cadena de caracteres de longitud
                                              – Sin ‘WITH TIME ZONE’:
    variable:
                                                 huso local de la sesión
      – CHARACTER
                                        Marca de tiempo:
          VARYING(n)
                                              – TIMESTAMP [WITH
      – VARCHAR(n)
                                                 TIME ZONE]
      – CHAR VARYING(n)
                                              – Componentes: DATE, TIME
      – n=máximo definido. Por                   y mínimo 6 posiciones de
          defecto n=1                            fracciones de sg.
Cadena de bits de longitud fija:        Intervalo de tiempo:
      – BIT(n)                                – INTERVAL
      – n = número de bits                    – valor relativo (de tiempo)
      – Por defecto n=1                          para incrementar o
                                                 decrementar a un valor de
Cadena de bits de longitud
                                                 fecha, hora o marca de
    variable:
                                                 tiempo
      – BIT VARYING(n)
                                              – Se pueden calificar con
      – n=máximo definido. Por
                                                 YEAR/MONTH o
          defecto n=1
                                                 DAY/TIME (unidad
                                                 mayor/unidad menor)
                       FBD Tema 5 – Dpto. LSI - Donostia               5
Dominios en SQL2

•   Un dominio es un tipo de datos definido por el
    usuario

     CREATE DOMAIN TIPO_NSS AS CHAR(9);


•   En CREATE TABLE se pueden usar para definir
    atributos:
     CREATE TABLE EMPLEADO
     ( NSS TIPO_NSS NOT NULL, ...


•   DEFAULT:
     – CREATE DOMAIN TIPO_NSS AS CHAR(9)
                       DEFAULT ‘987654321’;
     – Valor por defecto de los atributos declarados
       con ese dominio
     – si no se especifica ‘DEFAULT’ el valor por
       defecto es NULL




                FBD Tema 5 – Dpto. LSI - Donostia      6
CREATE TABLE:
especificación de restricciones y valores por omisión

•   Definición de atributos:
                     no se permite que el atributo tome valor nulo
     –   NOT NULL:

                    un-valor: se indica qué valor tomará el atributo
     –   DEFAULT
         si no se le asigna nada. Si no se indica DEFAULT, el valor
         por defecto es el valor nulo
•   Especificación de restricciones (tras las definiciones de atributo):
     – PRIMARY KEY: clave primaria
     – UNIQUE: clave candidata
     – FOREIGN KEY: clave extranjera
          • Se puede calificar con:
              – ON DELETE: en caso de borrarse la tupla a la
                 que se hace referencia con un valor de la clave
                 extranjera
              – ON UPDATE: en caso de modificarse el valor
                 de clave primaria al que se hace referencia con
                 el valor de clave extranjera

    CREATE TABLE DEPARTAMENTO
    ( NOMBRED       VARCHAR(15) NOT NULL,
      NUMEROD          INT         NOT NULL DEFAULT 1,
      NSS_JEFE         CHAR(9)     NOT NULL,
      FECHA_INIC_JEFE DATE,
      PRIMARY KEY(NUMEROD),
      UNIQUE(NOMBRED),
      FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)
               ON UPDATE CASCADE ON DELETE SET NULL
    );

                   FBD Tema 5 – Dpto. LSI - Donostia              7
CREATE TABLE:
especificación de restricciones y valores por omisión (2)
FOREIGN KEY (clave extranjera):
•   Acciones posibles (en ON DELETE / ON UPDATE):
     – SET NULL: el valor de clave extranjera en cuestión se
        sustituye por el valor nulo
     – SET DEFAULT: el valor de clave extranjera en cuestión se
        sustituye por el valor por defecto del atributo clave extranjera
     – CASCADE: en caso de ON DELETE se borran las tuplas que
        hacen referencia a la tupla que desaparece.
        En caso de ON UPDATE se aplica la misma modificación en las
        claves extranjeras que la realizada sobre la clave primaria a la
        que hacen referencia.
        CASCADE es adecuada para:
          • vínculos (TRABAJA_EN)
          • atributos multivaluados (LOCALIZACIONES_DEPT)
          • tipos de entidad débiles (DEPENDIENTE)
     – RESTRICT (cuando NO se pone ON DELETE / ON UPDATE):
        impide el borrado (si falta ON DELETE) o la modificación (si
        falta ON UPDATE) de cualquier tupla referenciada desde un valor
        de la clave extranjera en cuestión.


     CREATE TABLE DEPARTAMENTO
     ( NOMBRED       VARCHAR(15) NOT NULL,
       NUMEROD          INT         NOT NULL DEFAULT 1,
       NSS_JEFE         CHAR(9)     NOT NULL,
       FECHA_INIC_JEFE DATE,
       PRIMARY KEY(NUMEROD),
       UNIQUE(NOMBRED),
       FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS)
                ON UPDATE CASCADE ON DELETE SET NULL
     );

                   FBD Tema 5 – Dpto. LSI - Donostia                8
Borrar esquemas (DROP SCHEMA)
         y borrar tablas (DROP TABLE)
•   Borrar un esquema completo:

        DROP SCHEMA EMPRESA CASCADE

    – RESTRICT:borra el esquema sólo si NO contiene
       ningún elemento
    – CASCADE: borra el esquema y todos sus
       contenidos

•   Borrar una tabla de un esquema:

        DROP TABLE DEPENDIENTE CASCADE

    – RESTRICT: borra la tabla sólo si NO existen
       referencias a la misma:
        – Desde claves externa de otra tabla
        – Desde alguna vista
    – CASCADE: borra tabla y todas las restricciones
       (constraints) y vistas donde haya referencias a ésta




               FBD Tema 5 – Dpto. LSI - Donostia       9
Evolución del esquema: columnas
                    (ALTER TABLE)

•   Añadir columnas:
         ALTER TABLE EMPRESA.EMPLEADO ADD PUESTO
           VARCHAR(12);
     – En las tuplas existentes se asignan valores NULL.
       Alternativas: definir DEFAULT o introducir valores con
       la orden UPDATE (se estudiará más adelante)
     – NOT NULL no está permitido

•   Borrar columnas:
         ALTER TABLE EMPRESA.EMPLEADO DROP
           DIRECCIÓN CASCADE;
                  borra también las restricciones
     – CASCADE
       (constraints) y vistas que hagan referencia a la
       columna (DIRECCIÓN)
                  sólo borra la columna (DIRECCIÓN) si no
     – RESTRICT
       hay restricciones ni vistas que le hagan referencia
•   Modificar la definición de columnas:
         ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
           NSS_JEFE DROP DEFAULT;
         ALTER TABLE EMPRESA.DEPARTAMENTO ALTER
           NSS_JEFE SET DEFAULT ‘333445555’;
     – Elimina la definición DEFAULT ‘888665555’
     – Inserta una nueva definición de DEFAULT para el
       atributo NSS_JEFE
                FBD Tema 5 – Dpto. LSI - Donostia         10
Evolución del esquema: restricciones (constraints)
                    (ALTER TABLE)

 •   Borrar restricciones:
          ALTER TABLE EMPRESA.EMPLEADO DROP
           CONSTRAINT CLE_SUPERV_EMP;
      – Es preciso haberle dado un nombre con
        CONSTRAINT en la definición (por ejemplo en
        CREATE TABLE)


 •   Añadir restricciones:
          ALTER TABLE EMPRESA.EMPLEADO ADD
           CONSTRAINT CLE_SUPERV_EMP
            FOREIGN KEY (NSS_SUPERV) REFERENCES
            EMPLEADO(NSS)
                  ON DELETE SET NULL
                  ON UPDATE CASCADE;




                FBD Tema 5 – Dpto. LSI - Donostia     11
OPERACIONES DE ACTUALIZACIÓN
            INSERT
A1: INSERT INTO EMPLEADO
   VALUES (‘Richard’, ‘K’, ‘Marini’, ‘653298653’, ‘1962-12-30’, ’98
    Oak Forest, Katy, TX’, ‘H’, 37000, ‘987654321’, 4)
     – Mismo orden en el que se especificaron los atributos
       en CREATE TABLE

A1A: INSERT INTO EMPLEADO(NOMBRE, APELLIDO, NSS)
     VALUES (‘Richard’, ‘Marini’, ‘653298653’)
     – Así los atributos con valor NULL o DEFAULT se
       pueden omitir
     – Los valores de VALUES en el mismo orden que se
       especifican los atributos en INSERT INTO
     – También se pueden incluir varias tuplas en la misma
       instrucción: INSERT ... INTO ... VALUES (tupla1), (tupla2),
       ... (tuplaN)

A2:INSERT INTO EMPLEADO (NOMBRE, APELLIDO, NSS, ND)
   VALUES (‘Robert’, ‘Hatcher’, ‘980760540’, 2)
     – Rechazada por la inexistencia del departamento
       número 2

A2A: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, ND)
     VALUES (‘Robert’, ‘Hatcher’, 5)
     – Rechazada por no proporcionar valor para NSS
       (clave primaria: NOT NULL)

                  FBD Tema 5 – Dpto. LSI - Donostia           12
OPERACIONES DE ACTUALIZACIÓN
         INSERT (2)
A3A: CREATE TABLE INFO_DEPTOS (
        NOMBRE_DEPTO VARCHAR(15),
        NÚM_DE_EMPS INTEGER,
        SAL_TOTAL INTEGER);



A3B: INSERT INTO INFO_DEPTOS (NOMBRE_DEPTO,
         NÚM_DE_EMPS, SAL_TOTAL)
         SELECT NOMBRED, COUNT (*), SUM(SALARIO)
         FROM DEPARTAMENTO INNER JOIN EMPLEADO
               ON NÚMEROD=ND
         GROUP BY NOMBRED;
   – Inserta varias tuplas (el resultado de la consulta)
   – Utilidad: tabla temporal donde realizar consultas
       • Sus datos pueden perder actualidad
       • Alternativa sin este problema: vista




              FBD Tema 5 – Dpto. LSI - Donostia      13
OPERACIONES DE ACTUALIZACIÓN
          DELETE
A4A: DELETE FROM EMPLEADO
                 APELLIDO=‘Brown’
     WHERE
    – Una sola tabla
    – WHERE: selección de tuplas a eliminar
    – El borrado se puede propagar (RI referencial)


A4B: DELETE FROM EMPLEADO
                 NSS=‘123456789’
     WHERE



A4C: DELETE FROM EMPLEADO
                 ND IN
     WHERE
                 (SELECT NÚMEROD
                  FROM DEPARTAMENTO
                  WHERE NOMBRED=‘Investigación’)

A4D: DELETE FROM EMPLEADO
    – Sin WHERE se borran todas las tuplas (quedaría
      la tabla vacía)
    – Usando DROP TABLE se hubiera eliminado
      además la definición de la tabla




              FBD Tema 5 – Dpto. LSI - Donostia       14
OPERACIONES DE ACTUALIZACIÓN
          UPDATE
A5: UPDATE PROYECTO
           LOCALIZACIÓNP=‘Bellaire’, NÚMD=5
    SET
    WHERE NÚMEROP=10
    – Una sola tabla
    – WHERE: selección de tuplas a modificar
    – SET: atributos a modificar y nuevos valores
    – SET: el nuevo valor puede ser NULL o DEFAULT
    – Modificaciones de clave primaria pueden
      propagarse a clave/s extranjera/s (debido a las
      acciones declaradas en la RI, como CASCADE)



A6: UPDATE EMPLEADO
           SALARIO=SALARIO*1.1
    SET
     WHERE ND IN (SELECT NÚMEROD
                  FROM DEPARTAMENTO
                  WHERE NOMBRED= ‘Investigación’)
    – A la izda se refiere al nuevo valor de SALARIO
    – A la dcha al valor antiguo




               FBD Tema 5 – Dpto. LSI - Donostia       15
Consultas básicas

                                       El temario de FBD NO cubre
       SELECT columnas                  El temario de FBD NO cubre
                                      todos los aspectos de SELECT.
                                       todos los aspectos de SELECT.
       FROM tablas                    En particular NO estudiaremos
                                       En particular NO estudiaremos
       [WHERE condición]                     SELECT anidados
                                              SELECT anidados




•   Fecha de nacimiento y dirección de John Smith
    EMPLEADO
                                                                     ...
     NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
                           ...   SEXO SALARIO NSS_SUPERV ND


                                           πFECHA_NCTO, DIRECCIÓN (1)
C0: SELECT FECHA_NCTO, DIRECCIÓN
    FROM EMPLEADO
    WHERE NOMBRE=‘John’ AND (1) = σNOMBRE=‘John’ Y
                               APELLIDO=‘Smith’(EMPLEADO)
          APELLIDO=‘Smith’


     – Secuencia σ- π
     – Condiciones en WHERE:
            {=, <>, <, >, <=, >=}, AND, OR, NOT


    El resultado de una
                                    tuplas repetidas
       consulta SQL
     puede contener ...


                FBD Tema 5 – Dpto. LSI - Donostia               16
Consultas básicas (2)

•    Nombre y dirección de los empleados del departamento
     de Investigación

    EMPLEADO
                                                                         ...
     NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
                              ...   SEXO SALARIO NSS_SUPERV ND
    DEPARTAMENTO
    NOMBRED NÚMEROD NSS_JEFE                 FECHA_INIC_JEFE




                                            πNOMBRE, APELLIDO, DIRECCIÓN (2)

C1: SELECT NOMBRE, APELLIDO, DIRECCIÓN
    FROM EMPLEADO, DEPARTAMENTO
    WHERE NOMBRED=‘Investigación’ AND NÚMEROD=ND

       (2) = σNOMBRED=‘Investigación’ (1)      (1) = DEPARTAMENTO |×|NÚME-
                                                           ROD=ND EMPLEADO



      – Secuencia: |×| - σ - π
                                      de σ y |×|
      – WHERE:condiciones




                     FBD Tema 5 – Dpto. LSI - Donostia                   17
Consultas básicas (3)

•     Nº de proyecto, nº de departamento que lo controla,
      apellido, dirección y fecha de nacimiento del jefe del
      departamento, de todos los proyectos realizados en
      ‘Stafford’
         EMPLEADO
                                                                           ...
          NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
         DEPARTAMENTO
         NOMBRED NÚMEROD NSS_JEFE            FECHA_INIC_JEFE
         PROYECTO
          NOMBREP NÚMEROP LOCALIZACIÓNP              NÚMD

                                     4
    πNÚMEROP, NÚMD, APELLIDO, DIRECCIÓN, FECHA_NCTO (JEFE_DP_PR)

C2: SELECT NÚMEROP, NÚMD , APELLIDO, DIRECCIÓN,
                FECHA_NCTO
         FROM PROYECTO, DEPARTAMENTO, EMPLEADO
         WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND
                      LOCALIZACIÓNP=‘Stafford’

                       1
                             PR_STF ←
                 σLOCALIZACIÓNP=‘Stafford’(PROYECTO)
     2
           DP_CN←
                                             3
     PR_STF |×|NÚMD=NÚME-                          JEFE_DP_PR←
                                                 DP_CN |×| NSS_JEFE
     ROD DEPARTAMENTO
                                                  = NSS EMPLEADO

                      FBD Tema 5 – Dpto. LSI - Donostia               18
Calificar atributos

•   Nombre, apellido y dirección de los empleados del
    departamento de investigación

C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIÓN
               EMPLEADO,            DEPARTAMENTO
      FROM
      WHERE DEPARTAMENTO.NOMBRE = ‘Investigación’ AND
        DEPARTAMENTO.NÚMEROD=EMPLEADO.NÚMEROD



    EMPLEADO
                                                         ...
    NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN
                 ...   SEXO SALARIO NSS_SUPERV NÚMEROD
    DEPARTAMENTO
    NOMBRE NÚMEROD NSS_JEFE           FECHA_INIC_JEFE




     – Con EMPLEADO.NOMBRE se distingue el atributo
                 de la tabla EMPLEADO del atributo
        NOMBRE
                 de la tabla DEPARTAMENTO
        NOMBRE




                FBD Tema 5 – Dpto. LSI - Donostia       19
Alias
 •   Nombre y apellido de cada empleado junto al nombre y
     apellido de su supervisor
EMPLEADO S
                                                   ...   NSS_SUPERV ND
NOMBRE INIC APELLIDO NSS FECHA_NCTO

EMPLEADO E
                                                   ...   NSS_SUPERV ND
NOMBRE INIC APELLIDO NSS FECHA_NCTO


 C8: SELECT E.NOMBRE, E.APELLIDO, S.NOMBRE, S.APELLIDO
                                                    Uso de alias
     FROM EMPLEADO E, EMPLEADO S
     WHERE E.NSS_SUPERV=S.NSS        Declaración de alias
                                    Uso de alias
      – Admite varias referencias a una misma tabla (útil para
        consultas recursivas de un nivel)
      – E y S representan dos copias diferentes de la tabla
        EMPLEADO, pero no hay más que una copia de EMPLEADO
        en la BD

 •   Para cambiar los nombres de atributo:
      FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR,
                         SEX, SAL, NSSS, ND), ...

 •   Se pueden usar alias aunque no haya varias referencias a
     una misma tabla→ para manejar nombres más cortos
 •   Por ejemplo, C1A se puede escribir:
 C1B:SELECT E.NOMBRE, E.APELLIDO, E.DIRECCIÓN
      FROM EMPLEADO E, DEPARTAMENTO D
      WHERE D.NOMBRE = ‘Investigación’ AND
            D.NÚMEROD=E.NÚMEROD

                  FBD Tema 5 – Dpto. LSI - Donostia              20
Omisión de WHERE

•   Indica selección de tuplas incondicional
•   Equivale a WHERE TRUE
•   Producto cartesiano:
     sin WHERE y más de una relación en FROM

•   NSS de todos los empleados:

C9: SELECT NSS
    FROM EMPLEADO


•   Combinaciones posibles de NSS de empleados con
    nombres de departamento:

C10: SELECT NSS, NOMBRED
     FROM EMPLEADO , DEPARTAMENTO



•   Es importante especificar todas las condiciones de
    σ y |×| en WHERE ya que el resultado puede ser
    una tabla incorrecta y de gran tamaño




                FBD Tema 5 – Dpto. LSI - Donostia    21
SELECT *

•   Selecciona todos los atributos de las tablas de FROM

C1C:SELECT *
    FROM EMPLEADO
    WHERE ND=5

C1D:SELECT *
    FROM EMPLEADO, DEPARTAMENTO
    WHERE NOMBRED=‘Investigación’ AND
           ND=NÚMEROD

C10A:SELECT *
    FROM EMPLEADO, DEPARTAMENTO



•   También se puede usar en SELECT la calificación de
    atributos con *. Ejemplo: EMPLEADO.*




                FBD Tema 5 – Dpto. LSI - Donostia    22
DISTINCT y ALL
                                        Poner SELECT ALL es lo
C11:SELECT ALL SALARIO               mismo que poner sólo SELECT
                                            (sin DISTINCT)
     FROM EMPLEADO

•   SQL NO elimina automáticamente tuplas repetidas
    porque:
     – Es una operación costosa: ordenar+eliminar
       duplicados
     – El usuario puede desear ver las tuplas repetidas
     – Usando funciones agregadas suele interesar no
       eliminarlos. Ejemplo: al calcular el salario
       medio, NO interesa considerar únicamente los
       valores de salario diferentes entre sí


C11:SELECT DISTINCT SALARIO
     FROM EMPLEADO

•   Si sólo nos interesan los salarios distintos


SELECT DISTINCT SALARIO, APELLIDO
    FROM EMPLEADO
•   En el resultado:
     – Puede haber dos filas con el mismo salario.
     – No puede haber dos filas con igual salario y
       apellido


                 FBD Tema 5 – Dpto. LSI - Donostia            23
UNION y UNION ALL
      INTERSECT e INTERSECT ALL
         EXCEPT y EXCEPT ALL

•   En SQL existen las operaciones UNION (∪),
    INTERSECT (∩) y EXCEPT (resta).

•   Por defecto las tuplas repetidas se eliminan del
    resultado
•   Usando UNION ALL se conservan las repeticiones
•   Se exige compatibilidad de unión (ver en tema anterior)

•   Números de proyecto donde participa Smith como
    trabajador o como jefe del departamento controlador:

C4: SELECT NUMEROP
              PROYECTO, DEPARTAMENTO, EMPLEADO
     FROM
     WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND
       APELLIDO=‘Smith’
     UNION
     SELECT NP
              TRABAJA_EN, EMPLEADO
     FROM
     WHERE NSSE=NSS AND APELLIDO=‘Smith’




                FBD Tema 5 – Dpto. LSI - Donostia        24
Comparar subcadenas
                   (LIKE en WHERE)

•   Empleados que viven en Houston, Texas:

C12: SELECT NOMBRE, APELLIDO
     FROM EMPLEADO
     WHERE DIRECCIÓN LIKE ‘%Houston, TX%’
     – Compara parte de una cadena de caracteres
       (DIRECCIÓN)
     – % sustituye a un nº arbitrario de caracteres
     – _ sustituye a un solo carácter



•   Empleados que nacieron en la década de 1950:

C12A: SELECT NOMBRE, APELLIDO
      FROM EMPLEADO
      WHERE FECHA_NCTO LIKE ’195_ _ _ _ _ _ _’




                FBD Tema 5 – Dpto. LSI - Donostia     25
Operaciones aritméticas: ‘+’, ‘-’, ‘*’, ‘/’
      y operación de concatenación: ‘||’
•   Nombre y salario de los empleados que trabajan en
    ‘ProductoX’ tras aumentarles el sueldo un 10% :

C13: SELECT NOMBRE, APELLIDO, 1.1*SALARIO
     FROM EMPLEADO, TRABAJA_EN, PROYECTO
     WHERE NSS=NSSE AND NP=NÚMEROP AND
       NOMBREP=‘ProductoX’


     – ‘+’, ‘-’,’*’ y ‘/’ son operadores aritméticos
     – ‘||’ concatena cadenas de caracteres. Ejemplo:
       SELECT ‘Nombre=‘ || NOMBRE
     – ‘+’, ‘-’ también sirven para sumar/restar a una
       fecha, hora o marca de tiempo, un intervalo
       compatible
     – Se puede calcular un intervalo como la
       diferencia entre fechas, horas o marcas de
       tiempo




¿Qué produce 1.1 * SALARIO cuando SALARIO vale
    NULL?




                FBD Tema 5 – Dpto. LSI - Donostia       26
Ordenación de tuplas
                       (ORDER BY)

•   Empleados y proyectos donde trabajan, ordenados por
    departamento y, dentro de cada departamento, ordenados
    alfabéticamente por apellido y nombre :

C15: SELECT NOMBRED, APELLIDO, NOMBRE, NOMBREP
     FROM DEPARTAMENTO, EMPLEADO, TRABAJA_EN,
          PROYECTO
    WHERE NÚMEROD=ND AND NSS=NSSE AND NP=NÚMEROP
    ORDER BY NOMBRED, APELLIDO, NOMBRE


     – Por defecto, el orden es ascendente
     – DESC indica orden descendente
     – ASC indica orden ascendente



                  NOMBRED DESC, APELLIDO ASC,
     ORDER BY
                  NOMBRE ASC




                 FBD Tema 5 – Dpto. LSI - Donostia   27
Operador BETWEEN y
        conjuntos explícitos de valores

Operador BETWEEN:
• Información de los empleados del departamento 5
  cuyo salario está entre 30.000 y 40.000
C14: SELECT *
     FROM EMPLEADO
     WHERE (SALARIO BETWEEN 30000 AND 40000)
           AND ND=5

     – La condición de WHERE es equivalente a:
       SALARIO >= 30000 AND SALARIO <= 40000 AND ND=5


Conjuntos explícitos de valores:
• NSS de los empleados que trabajan en los proyectos
  1, 2 o 3
C17: SELECT DISTINCT NSSE
     FROM TRABAJA_EN
     WHERE NP IN (1,2,3)

     – El conjunto explícito se encierra entre paréntesis


•   La consulta anterior utilizando BETWEEN:
C14’: SELECT DISTINCT NSSE
     FROM TRABAJA_EN
     WHERE NÚMP BETWEEN 1 AND 3



                FBD Tema 5 – Dpto. LSI - Donostia     28
IS NULL e IS NOT NULL

•   Nombre y apellido de empleados sin supervisores

C18: SELECT NOMBRE, APELLIDO
     FROM EMPLEADO
     WHERE NSS_SUPERV IS NULL

     – En lugar de = y ≠ se usa IS e IS NOT
     – SQL considera el valor nulo de diferente forma
     – Las tuplas con valores nulos en el atributo de
       reunión no se incluyen en el resultado (salvo en
       reunión externa)

•   Si pusiera WHERE NSS_SUPERV = NULL
     – Para las filas con NSS_SUPERV nulo se estaría
        comparando si NULL = NULL
     – Esta comparación NO devuelve cierto
     – Tampoco devuelve falso
     – La comparación devuelve NULL (UNKNOWN)

                          Una condición puede NO verificarse
                                por FALSE o por NULL


•   Cualquier cosa operada con NULL devuelve NULL
    (UNKNOWN)



                FBD Tema 5 – Dpto. LSI - Donostia              29
Renombrar atributos del resultado con AS


C8A: SELECT E.APELLIDO AS NOMBRE_EMPLEADO,
            S.APELLIDO AS NOMBRE_SUPERVISOR
     FROM EMPLEADO AS E, EMPLEADO AS S
     WHERE E.NSS_SUPERV = S.NSS


   – Cambia el nombre de cualquier columna
     (atributo) que aparezca en el resultado
   – Antes hemos visto que la construcción AS
     también sirve para declarar alias de tablas:

                                                  SQL1
                      EMPLEADO E, ...
            FROM
                                                  SQL2
                      EMPLEADO AS E, ...
            FROM
                                                  SQL2

            FROM EMPLEADO AS E(NP, IN, AP,
              NSS, FN, DIR, SEX, SAL, NSSS, ND), ...




              FBD Tema 5 – Dpto. LSI - Donostia          30
Tablas combinadas
         (INNER y NATURAL JOIN en FROM)

•   Nombre y dirección de los empleados del departa-
    mento de Investigación

C1: SELECT NOMBRE, APELLIDO, DIRECCIÓN
    FROM EMPLEADO, DEPARTAMENTO
    WHERE NOMBRED=‘Investigación’ AND ND=NÚMEROD


C1A: SELECT NOMBRE, APELLIDO, DIRECCIÓN
     FROM (EMPLEADO INNER JOIN DEPARTAMENTO
            ON ND=NÚMEROD)
     WHERE NOMBRED=‘Investigación’


     – Este concepto se incorporó a SQL2
     – La consulta se entiende más fácilmente, al evitar la
       mezcla de condiciones de |×| y σ en el WHERE
     – Se pueden especificar diferentes tipos de reunión:
         INNER JOIN (o JOIN) y NATURAL JOIN
     – También de reunión externa (que este curso NO usaremos):
         OUTER JOIN, LEFT [OUTER] JOIN, RIGHT [OUTER]
           JOIN y FULL [OUTER] JOIN


     – NO se pueden definir alias de tablas combinadas:

          FROM (EMPLEADO INNER JOIN DEPARTAMENTO

                                    AS ED ...
            ON ND=NÚMEROD)


                 FBD Tema 5 – Dpto. LSI - Donostia        31
Tablas combinadas (2)
        (INNER y NATURAL JOIN en FROM)

Uso de NATURAL JOIN:

C1B: SELECT NOMBRE, APELLIDO, DIRECCIÓN
     FROM (EMPLEADO NATURAL JOIN (DEPARTAMEN-
           TO AS DEPTO (NOMBRED, ND, NSSG, FECHAIG)))
    WHERE NOMBRED=‘Investigación’

    – Renombra DEPARTAMENTO.NÚMEROD por ND
    – condición de reunión implícita:
        EMPLEADO.ND = DEPARTAMENTO.ND


Anidamiento de INNER y de NATURAL JOIN:

C2: SELECT NÚMERO, NÚMD, APELLIDO, DIRECCIÓN,
           FECHA_NCTO
    FROM PROYECTO, DEPARTAMENTO, EMPLEADO
    WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND
           LOCALIZACIÓNP=‘Stafford’


C2A:SELECT NÚMEROP, NÚMD, APELLIDO, DIRECCIÓN
           FECHA_NCTO
    FROM (PROYECTO INNER JOIN DEPARTAMENTO
             ON NÚMD=NÚMEROD)
           INNER JOIN EMPLEADO ON NSS_JEFE=NSS
    WHERE LOCALIZACIÓNP=‘Stafford’


              FBD Tema 5 – Dpto. LSI - Donostia   32
Funciones agregadas y de agrupación

       COUNT (cuenta), SUM (suma), MAX (máximo), MIN
•
       (mínimo), AVG (media)
         – El argumento de una función agregada puede ser
           una expresión: AVG(1.1*SALARIO)
         – MAX y MIN se pueden aplicar a atributos NO
           numéricos (con orden total en el dominio)


•      Suma de los salarios de todos los empleados, junto a
       los salarios máximo, mínimo y medio:
C19: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO),
            AVG(SALARIO)
     FROM EMPLEADO



                                                 DEPARTAMENTO
EMPLEADO
                                                  NOMBRED NÚMEROD
NOMBREP              SALARIO         ND
      John                           5            Investigación      5
                      NULL
                                                                            ...
    Franklin          15.000         5           Administración      4
    Ramesh            10.000         5
                               ...
               ...                                  Dirección        1
                      10.000         5
     Joyce
                      10.000         4
     Alicia
                      20.000         4
    Jennifer                                     SUM(SA- MAX(SA- MIN(SA- AVG(SAL-
                                          C19:
                      20.000         4
    Ahmad                                        LARIO) LARIO) LARIO)     ARIO)

                      20.000         1           105.000 20.000 10.000 15.000
     James




                         FBD Tema 5 – Dpto. LSI - Donostia                    33
Funciones agregadas y de agrupación (2)

•     Suma de los salarios de los empleados del departamen-
      to de ‘Investigación’, junto a los salarios máximo,
      mínimo y medio del mismo:
C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO),
            AVG(SALARIO)
      FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
            ND=NÚMEROD
      WHERE NOMBRED=‘Investigación’


•     Cuántos empleados hay en la compañía y cuántos en el
      departamento ‘Investigación’:
                                                 **se refiere aatuplas
C21: SELECT COUNT(*)
                                                    se refiere tuplas
      FROM EMPLEADO
C22: SELECT COUNT(*)
      FROM EMPLEADO INNER JOIN DEPARTAMENTO ON
            ND=NÚMEROD
      WHERE NOMBRED=‘Investigación’
                                                 DEPARTAMENTO
EMPLEADO
                                                  NOMBRED NÚMEROD
NOMBREP              SALARIO         ND
      John                           5            Investigación        5
                      NULL
                                                                             ...
    Franklin          15.000         5           Administración        4
    Ramesh            10.000         5
                               ...
               ...                                  Dirección          1
                      10.000         5
     Joyce
                                                 SUM(SA- MAX(SA- MIN(SA- AVG(SAL-
                      10.000         4
     Alicia                               C20:   LARIO) LARIO) LARIO)     ARIO)
                      20.000         4
    Jennifer                                     35.000 15.000 10.000 11.666
                      20.000         4
    Ahmad
                      20.000         1
     James                                                                 35.000 / / 3
                                                                            35.000 3
                                          C21: COUNT(*) C22: COUNT(*)
                                                   8               4
                        FBD Tema 5 – Dpto. LSI - Donostia                     34
Funciones agregadas y de agrupación (3)

•    Cuántos valores de salario diferentes hay:
C23: SELECT COUNT(DISTINCT SALARIO)
                                                           NO cuenta
      FROM EMPLEADO
                                                       los valores nulos
•    Cuántos valores de salario hay (con repeticiones):
                                                Cuenta las filas con
C23’: SELECT COUNT(SALARIO)
                                                  salario NO nulo
      FROM EMPLEADO


•    Cuántos empleados hay:
                                                     Cuenta todas las
C23’’: SELECT COUNT(*)
                                                     filas de la tabla
       FROM EMPLEADO


    EMPLEADO                                  C23:
                                                 COUNT(DISTINCT SALARIO)
    NOMBREP           SALARIO         ND
                                                             3
       John                             5
                       NULL
     Franklin          15.000                 C23’:
                                      NULL
     Ramesh            10.000           5
                                ...
                ...                                    COUNT( SALARIO)
                       10.000           5
      Joyce                                                  7
                       10.000           4
      Alicia                                  C23’’:
                       20.000           4
     Jennifer                                             COUNT( *)
                       20.000           4
     Ahmad
                                                             8
                       20.000           1
      James


    ¿Qué ocurre cuando todos los salarios valen NULL?
    ¿Qué ocurre cuando la tabla está vacía?


                      FBD Tema 5 – Dpto. LSI - Donostia                  35
Atributos de agrupación: GROUP BY

•     Obtener cada número de departamento junto a su
      número de empleados y salario medio:
C24: SELECT ND, COUNT(*), AVG(SALARIO)
      FROM EMPLEADO
      GROUP BY ND
        – En GROUP BY está el/los atributo/s de agrupación
        – NO confundir GROUP BY y ORDER BY (que ordena)
        – Todos los atributos de SELECT deben estar en
             GROUP BY
        – Los atributos de GROUP BY no es obligatorio que
          estén en SELECT
        – Se suelen poner en SELECT algunos/todos los de
             GROUP BY

                                                  C24:
EMPLEADO
                                                  ND COUNT(*) AVG(SALARIO)
    NOMBREP           SALARIO          ND
                                                   5       4       16.250
       John            30.000          5
                                                   4       3       16.666
     Franklin          15.000          5
                                                   1       1       20.000
     Ramesh            10.000          5
                                ...
                ...    10.000          5
      Joyce
                                                   Fig. 8.4 (a)
                       10.000          4
      Alicia
                       20.000          4
     Jennifer
                                                             Los valores
                       20.000          4
     Ahmad
                                                           nulos forman su
                       20.000          1
      James
                                                            propio grupo
EMPLEADO                                       C24:
                                                 ND    COUNT(*) AVG(SALARIO)
    NOMBREP           SALARIO           ND
                                                           2         10
       Jon                                     NULL
                       NULL            NULL
                                                 5         2         10
      Juan              10             NULL
      Rosa              10               5
                                 ...
                ...
      Ana               10               5
                       FBD Tema 5 – Dpto. LSI - Donostia              36
Atributos de agrupación: GROUP BY (2)
•   Obtener por cada proyecto su número y nombre
    junto al número de empleados que trabajan en él
C25: SELECT NÚMEROP, NOMBREP, COUNT(*)
      FROM PROYECTO INNER JOIN TRABAJA_EN
            ON NÚMEROP=NP              Agrupación por
                                       varios atributos
      GROUP BY NÚMEROP, NOMBREP

                                                    NP   HORAS
                  NOMBREP          NÚMEROP
  PROYECTO
                                                     1    32.5
                  ProductoX          1
 INNER JOIN
                                                     1    20.0
                  ProductoX          1
 TRABAJA_EN
                                                     2     7.5
                  ProductoY          2
     ON
                                                     2    20.0
                  ProductoY          2
NÚMEROP=NP :
                                                     2    10.0
                  ProductoY          2
                                                     3    40.0
                  ProductoZ          3
                                                     3    10.0
                  ProductoZ          3
                                              ...   10    10.0
                Automatización       10
                                                    10    10.0
                Automatización       10
                                                    10    35.0
                Automatización       10
                                                    20    10.0
                Reorganización       20
                                                    20    15.0
                Reorganización       20
                                                    20    nulo
                Reorganización       20
                                                    30     5.0
               Nuevos beneficios     30
                                                    30    20.0
               Nuevos beneficios     30
                                                    30    30.0
               Nuevos beneficios     30

               NÚMEROP       NOMBREPR          COUNT(*)
        C25:
                  1          ProductoX              2
                  2          ProductoY              3
                  3          ProductoZ              2
                  10       Automatización           3
                  20       Reorganización           3
                  30      Nuevos beneficios         3

En C25, ¿se puede eliminar NOMBREP del GROUP BY?
               FBD Tema 5 – Dpto. LSI - Donostia                 37
GROUP BY con ORDER BY

•   Obtener por cada proyecto su número y nombre
    junto al número de empleados que trabajan en él,
    ordenado ascendentemente por el número de
    empleados
C25’: SELECT NÚMEROP, NOMBREP, COUNT(*)
     FROM PROYECTO INNER JOIN TRABAJA_EN
            ON NÚMEROP=NP
     GROUP BY NÚMEROP, NOMBREP
     ORDER BY COUNT(*) ASC


•   Si se renombran los atributos del resultado con AS, el
    nuevo nombre NO se puede usar en ORDER BY (en
    general, no sólo con funciones agregadas):

C25’: SELECT NÚMEROP, NOMBREP, COUNT(*) AS
             NUM_EMP
     FROM PROYECTO INNER JOIN TRABAJA_EN
            ON NÚMEROP=NP
     GROUP BY NÚMEROP, NOMBREP
     ORDER BY NUM_EMP ASC


                                NO se puede usar
                                el nuevo nombre
                                (AS) del atributo
                                 del resultado en
                                  ORDER BY


                 FBD Tema 5 – Dpto. LSI - Donostia           38
Constructor de valor de tupla

•   Una sola comparación incluye todos los valores de
    dos tuplas:

     WHERE (NOMBRE,EDAD,ESTADO_CIVIL) =
          (“José María”, 18, ‘S’)

     WHERE NOMBRE= “José María” AND EDAD=18 AND
       ESTADO_CIVIL=‘S’




     WHERE (C1, C2, C3) < (T1, T2, T3)

     WHERE C1<T1 OR
                  (C1=T1 AND C2<T2) OR
                  (C1=T1 AND C2=T2 AND C3<T3)




                 FBD Tema 5 – Dpto. LSI - Donostia   39
Análisis de consultas SQL

                                                     También hay
         SELECT <atributos y funciones>
                                                    HAVING, que
         FROM <tablas>
                                                     este curso no
         [WHERE <condición>]                         estudiaremos
         [GROUP BY <atributos agrupación>]
         [ORDER BY <atributos ordenación>]



•   Una consulta SQL se evalúa conceptualmente así:

     – Primero FROM, seguido de WHERE, en tercer
       lugar GROUP BY y por último ORDER BY

     – Si no hay GROUP BY ni ORDER BY, para cada
       combinación de tuplas (una de cada tabla de
       FROM), se evalúa la condición de WHERE. Si es
       cierta se colocan en el resultado los valores
       correspondientes a los atributos del SELECT.

     – Esta NO es una forma eficiente de implementar
       una consulta SQL. Así pues, cada SGBD tiene
       rutinas para optimizar la evaluación.




                FBD Tema 5 – Dpto. LSI - Donostia            40
Análisis de consultas SQL (2)

•   En SQL hay varias alternativas para especificar la
    misma consulta :

     – Ventaja: el programador elige la técnica que le
       resulte más cómoda.

     – Desde el punto de vista de optimización de
       consultas, conviene que las consultas tengan el
       menor anidamiento y el menor ordenamiento
       implícito posible.

     – Desventaja: el programador puede desconocer
       cuál es la técnica más eficiente en cada caso

     – Idealmente, el SGBD debería procesar la consulta
       de la misma manera sin importar cómo se haya
       escrito.

     – En la práctica esto resulta muy difícil, y es
       conveniente que el usuario sea consciente de qué
       construcciones tienen un costo más elevado que
       otras.



                FBD Tema 5 – Dpto. LSI - Donostia        41
Características adicionales de SQL

•   Especificación de vistas (CREATE VIEW)
•   Especificación de restricciones de integridad
    generales (CREATE ASSERTION)
•   Concesión y revocación de privilegios (GRANT y
    REVOKE)
•   Sentencias SQL en lenguajes de programación:
     – Metodología para insertarlas.
     – Ligaduras con varios lenguajes de programación.
     – El concepto de cursor para recorrer el resultado de
        las consultas.
•   Instrucciones de control de transacciones.
•   Cada SGBD contará con un conjunto de instrucciones
    para especificar parámetros de diseño físico:
     – Se denomina LDA, o lenguaje de definición de
        almacenamiento
     – Las primeras versiones de SQL tenían
        instrucciones para crear índices, pero se
        eliminaron porque no aparecían en el nivel del
        esquema conceptual.
•   Operadores CASE, NULLIF, COALESCE, CAST




                FBD Tema 5 – Dpto. LSI - Donostia     42
Ejercicios


  FBD Tema 5 – Dpto. LSI - Donostia   43
Ejercicio: consultas SQL EMPRESA
            (8.13 (7.18) Elmasri/Navathe 02)

Sobre el esquema de BD de la figura 7.7 (ver pg. siguiente):

a) Empleados del departamento 5 que trabajan más de
   10 horas/semana en el proyecto ‘Producto X’
b) Empleados con un dependiente con su mismo nombre
   de pila
c) Empleados cuyo jefe directo es Franklin Wong
d) Nombre de cada proyecto junto al número total de
   horas trabajadas por los empleados en él.
e) Nombres de todos los empleados que trabajan en          NO:
                                                         división
   cada uno de los proyectos
f) Empleados que no trabajan en ningún proyecto
g) Nombre de cada departamento junto al salario medio
   de los empleados asignados al mismo
h) Salario medio de las empleadas de la compañía
i) Nombre y dirección de los empleados que trabajan
   en algún proyecto situado en Houston pero         NO:
                                                   anidados

   departamento no está situado allí
j) Jefes de departamento sin dependientes

8.14
b) Número de empleados de sexo masculino de cada
   departamento
                FBD Tema 5 – Dpto. LSI - Donostia        44
Ejercicio: consultas SQL EMPRESA (2)
                   (8.13 Elmasri/Navathe 02)


EMPLEADO
                                                               ...
NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN

                                   ... SEXO    SALARIO NSS_SUPERV ND

          DEPARTAMENTO
           NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE


                        LOCALIZACIONES_DEPT
                          NÚMEROD LOCALIZACIÓND

               PROYECTO
                NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD


                         TRABAJA_EN
                          NSSE    NP    HORAS

DEPENDIENTE
 NSSE   NOMBRE_DEPENDIENTE          SEXO FECHA_NCTO       PARENTESCO



        Figura 7.7 restricciones de integridad referencial
                   representadas en el esquema de la base de
                   datos relacional EMPRESA




                     FBD Tema 5 – Dpto. LSI - Donostia               45
Ejercicio: consultas SQL BIBLIOTECA
            (8.11 (7.23) Elmasri/Navathe 02)
a) Número de copias de la tribu perdida en la sucursal
   de ‘Sharpstown’.
b) Identificador de sucursal y número de copias del libro
   ‘La tribu Perdida’ en cada una de las sucursales.
c) Lectores sin libros en préstamo.
d) Título del libro, nombre y dirección del lector de los
   préstamos de la sucursal de ‘Sharpstown’ con fecha de
   devolución la de hoy.
e) Por cada sucursal: nombre y total de ejemplares de
   libro en préstamo.
f) Para los lectores con más de 5 libros en préstamo,
                                                         NO:
   obtener su nombre, dirección y nº de libros.               HAVING


g) Por cada libro escrito (o coescrito) por ‘Stephen
   King’, obtener su título y el nº de copias en la sucursal
   ‘Central’.
                                        AUTORES_LIBROS
 LIBRO
IdLibro Título NombreEditorial           IdLibro NombreAutor

                                 COPIAS_LIBRO
 EDITORIAL
Nombre Dirección Teléfono       IdLibro IdSucursal NúmCopias

 PRÉSTAMOS
IdLibro IdSucursal NúmTarjeta ...                     Figura 7.20:
                                                    Esquema de BDR
              ... FechaSale FechaDevol
                                                       para la BD
 SUCURSAL_BIBLIOTECA                                 BIBLIOTECA
IdSucursal NombreSucursal Dirección
 LECTOR
NúmTarjeta Nombre Dirección Teléfono

                FBD Tema 5 – Dpto. LSI - Donostia            46
Ejercicios consultas SQL BIBLIOTECA (2)

h) Tiempo medio que duran los préstamos de libros (en
   conjunto).
i) Tiempo medio que duraron los préstamos de libros (en
   conjunto) que se prestaron el año 2002.
j) Número total de préstamos, número de socios de la
   biblioteca que han tomado libros en préstamo y
   número medio de libros que han tomado en préstamo
   los socios.
k) Número medio de copias por libro de la biblioteca
   “central” (en conjunto)
l) Número de socio junto al número de préstamos que ha
   tomado hasta el momento, ordenado por número de
   préstamos
m) Identificador de libro junto al número de veces
   actualmente en préstamo
n) Identificadores de cada libro y sucursal junto al
   número de veces que ha sido prestado el libro en la
   sucursal.
o) Para cada libro: identificador de libro y número de
   autores.
p) Para cada libro: título y número de autores.
q) Para cada día del mes pasado en el que hubiera
   préstamos, número de libros distintos que se prestaron
   ese día.

               FBD Tema 5 – Dpto. LSI - Donostia    47
Ejercicio: consultas SQL UNIVERSIDAD
              (8.16 Elmasri/Navathe 02)

a) Nombres de los alumnos de 4º de la carrera ‘CC’
b) Nombre de los cursos impartidos por el profesor
   ‘King’ en los años 1998 y 99
c) Para cada sección impartida por el profesor ‘King’,
   obtener el número de curso, semestre, año y número
   de alumnos que se matricularon en esa sección.
d) Nombre y boletín de notas de los alumnos de 5º de la
   carrera ‘CC’. El boletín incluye el nombre y número
   del curso, las horas-crédito, el semestre, el año y las
   notas de los cursos concluidos por el alumno.
e) Nombre y carrera de los estudiantes calificados con
   nota ‘A’ en todos sus cursos.
f) Nombre y carrera de los estudiantes que NO tengan
   nota ‘A’ en ningún curso.
ALUMNO
      Nombre NúmAlumno            Grado Carrera

CURSO
      NombreCurso NúmCurso HorasCrédito Departamento

REQUISITO
      NúmCurso NúmRequisito

SECCION
      IdentSección NúmCurso Semestre Año Profesor

INFORME_
CALIFICACIONES
        NúmAlumno IdentSección Nota
                FBD Tema 5 – Dpto. LSI - Donostia     48
Ejercicio: consultas SQL BANCOS

Sobre el esquema que aparece en la siguiente página:
a) Código de banco y DNI de cliente, para todos aquellos
   clientes que tienen cuenta en más de una sucursal del
   banco, ordenada por código de banco y DNI
b) Nombre de banco, número de sucursal, préstamo medio
   y número de TAE diferentes en la sucursal, ordenado
   descendentemente por préstamo medio.
c) DNI y nombre de clientes que tienen solicitado algún
   préstamo igual o superior a 60.000 €, en sucursales de la
   calle Urbieta de Donostia
d) Nombre del banco y media de los TAE ofrecidos en sus
   sucursales a clientes de Donostia, para aquellos bancos
   cuyo código comienza por ‘011’ y donde los préstamos
   sean de un importe superior a 60.000 €. El resultado
   deberá estar ordenado crecientemente por media de
   TAE.
e) Todos los datos de clientes y código del banco donde
   tienen solicitado préstamo, para aquellos clientes que
   tengan algún préstamo en sucursales de Donostia pero
   que no tengan cuentas en el mismo banco donde tienen
   el préstamo.




               FBD Tema 5 – Dpto. LSI - Donostia     49
Ejercicio: consultas SQL BANCOS (2)



 BANCO                                 SUCURSAL
  Código Nombre            Banco NúmSucursal Ciudad Dir

  CUENTA
  NúmCta Interés Saldo Banco NúmSucursal
  CLIENTE
  DNI Nombre Dir Tfno

  PRÉSTAMO
  NúmPrés TAE Importe Banco NúmSucursal


 CUENTA_CLIENTE                PRÉSTAMO_CLIENTE
  NúmCta DNI                   NúmPrés DNI




    BDR correspondiente al esquema ER de la figura 3.17
Salvo que se ha añadido el atributo Ciudad a SUCURSAL y se
   ha cambiado el atributo Dir de BANCO a SUCURSAL




                 FBD Tema 5 – Dpto. LSI - Donostia      50
Ejercicio: consultas SQL BIBLIOTECA-2

                             (1,1)             (0,N)
             EJEMPLAR                ESTA_EN           BIBLIOTECA
              (0,N)
                                                        Día
             PRESTAMO                FechaPréstamo      Mes
                                                        Año
              (0,N)
               SOCIO
                                                               Puede haber varios
                                                                ejemplares con el
  BIBLIOTECA COD_BIB FACULTAD TFNO BIBLIOTECARIA                   mismo título
   EJEMPLAR COD_EJE TÍTULO AUTOR EDITORIAL ÁREA COD_BIB

       SOCIO DNI NOM_SOCIO TFNO            CIUDAD CARRERA

   PRÉSTAMO DNI COD_EJE DÍA MES AÑO DIAS_PRESTADO


Escribe las siguientes consultas SQL sobre la BD anterior:

a) Pares de títulos distintos del área de informática sacados
   en préstamo por el mismo socio. Posible salida:
                     título                        título
             “Fundamentos de BD”            “BD:, ¡Qué gozada!”
             “Fundamentos de BD”            “SQL para novatos”
              “BD:, ¡Qué gozada!”          “Fundamentos de BD”


b) Lista de pares ordenados de bibliotecas que tengan
   ejemplares de libros de la misma área. Por ejemplo, si
   las bibliotecas A, B y C tienen libros de informática y
   las bibliotecas A y C de filosofía, deberán aparecer:
   <A,B,Informática>, <A,C,Informática>,
   <A,C,Filosofía>, <B,A,Informática>,
   <B,C,Informática>, ...
                      FBD Tema 5 – Dpto. LSI - Donostia                     51
Ejercicio: definición y actualización SQL
                 de ITINERARIOS
Matricula                                                              Codigo
Cod-bast
                VEHICULO                                        PAIS   Nombre
  Marca
                     (0,N)                                  (0,N)
                                 (1,1)           (1,N)                 Moneda
    Clase
                    V_I                   De                    P_C
                                         donde
            Fecha
                      (1,N)                                 (1,1)
                                 (1,1)           (1,N)                 Cod-c
  Cod_iti                                  A
               ITINERARIO                                    CIUDAD
                                         donde                         Nombre
   Dieta
                                 (0,N)           (1,N)                 Habit
                                          Por
                                         donde
                                          pasa
                                                    Orden


 a) Completa las instrucciones de creación de la BD para el
    esquema ER anterior (ver páginas siguientes).
 b) Incluir el itinerario (111, 50000, 95, 141) que sale de Sevilla
    (95, quot;Sevillaquot;, 500000, 34) y llega a Friburgo (141,
    quot;Friburgoquot;, 300000, 49), pasando por Zaragoza (93,
    quot;Zaragozaquot;, 450000, 34), París (16, quot;Parísquot;, 6000000, 33) y
    Karlstadt (148, quot;Karlstadtquot;, 200000, 49). Los países
    correspondientes son España (34, quot;Españaquot;, quot;Pesetaquot;), Francia
    (33, quot;Franciaquot;, quot;Francoquot;) y Alemania (49, quot;Alemaniaquot;,
    quot;Marcoquot;). Ninguno de los datos está en la BD.
 c) Todos los itinerarios que pasan por Sevilla (solo pasar, no salir
    o llegar) se han desviado por Córdoba. Los datos de Córdoba
    (957, “Córdoba”, 134000, 34) no están en la BD.
 d) El vehículo con nº de bastidor 3 ha tenido un accidente y lo
    han llevado a la chatarra. Se ha cambiado el vehículo a los
    itinerarios donde figuraba por (345, quot;Renaultquot;, quot;BI-9999-XXquot;,
    quot;Expressquot;), que no está aún en la BD.

                          FBD Tema 5 – Dpto. LSI - Donostia              52
Ejercicio: definición y actualización SQL
           de ITINERARIOS (2)
CREATE TABLE VEHICULO (
   Cod-bast INTEGER NOT NULL,
   Marca                VARCHAR (15),
   Matricula            VARCHAR (8) NOT NULL,
   Clase                VARCHAR (8),
   PRIMARY KEY (Cod-bast),
   UNIQUE (Matrícula));

CREATE TABLE PAIS (
   Codigo             INTEGER NOT NULL,
   Nombre             VARCHAR (15) NOT NULL,
   Moneda             VARCHAR (10),




CREATE TABLE ITINERARIO (
   Cod-iti           INTEGER NOT NULL,
   Dieta             INTEGER,
   Cod-dedonde       INTEGER,
   Cod-adonde        INTEGER,
   PRIMARY KEY (Cod-iti),
   FOREIGN KEY (Cod-dedonde) REFERENCES CIUDAD (Cod-c)
           ON DELETE CASCADE ON UPDATE CASCADE,
   FOREIGN KEY (Cod-adonde) REFERENCES CIUDAD (Cod-c)
           ON DELETE CASCADE ON UPDATE CASCADE);

CREATE TABLE CIUDAD (
   Cod-c           INTEGER NOT NULL,
   Nombre          VARCHAR (15) NOT NULL,
   Habit           INTEGER,
   Codigo          INTEGER,




                   FBD Tema 5 – Dpto. LSI - Donostia     53
Ejercicio: definición y actualización SQL
            de ITINERARIOS (3)
CREATE TABLE VEHI-ITINE (
   Cod-bast INTEGER NOT NULL,
   Cod-iti            INTEGER NOT NULL,
   Fecha              DATE,
   PRIMARY KEY (Cod-bast, Cod-iti),
   FOREIGN KEY (Cod-bast) REFERENCES VEHICULO (Cod-bast)
            ON DELETE CASCADE ON UPDATE CASCADE,
   FOREIGN KEY (Cod-iti             ) REFERENCES ITINERARIO (Cod-iti)
            ON DELETE CASCADE ON UPDATE CASCADE);

CREATE TABLE POR-DONDE (
   Cod-iti         INTEGER NOT NULL,
   Cod-c           INTEGER NOT NULL,
   Orden           INTEGER,




    FOREIGN KEY (Cod-c) REFERENCES CIUDAD (Cod-c)
          ON DELETE CASCADE ON UPDATE CASCADE);




                    FBD Tema 5 – Dpto. LSI - Donostia                   54
Ejercicio: análisis de restricciones de
             integridad en BANCOS
     Analizar todas las R.I. violadas por cada operación cuando
     se ejecuta sobre la BD de la figura de la siguiente página:

a) INSERT INTO CUENTA VALUES (7, 7, 20000, null, null)
b) INSERT INTO CLIENTE VALUES (123, Pepi, null, null)
c) INSERT INTO CUENTA-CLIENTE VALUES (4, null)
d) INSERT INTO CUENTA VALUES (10, 4, 100000, 2, 3)
e) DELETE FROM CLIENTE WHERE DNI=999
f)   DELETE FROM CUENTA-CLIENTE WHERE NCta=0 and
     DNI>000
g) UPDATE CUENTA-CLIENTE SET NCta=5, DNI=111
     WHERE NCta=0 and DNI=111
h) UPDATE CUENTA-CLIENTE SET NCta=3, DNI=222
     WHERE NCta=0
     UPDATE CLIENTE SET Nombre=‘Ataulfo A.’ WHERE
i)
     DNI>888
     UPDATE CUENTA SET Banco=2, NSuc=2 WHERE NCta=0
j)
k) UPDATE CUENTA SET Banco=2 WHERE Banco=1
     UPDATE CUENTA SET Banco=null, NSuc=null WHERE
l)
     Banco=1
m) UPDATE CUENTA SET Banco=null WHERE NCta=3




                    FBD Tema 5 – Dpto. LSI - Donostia         55
Ejercicio: análisis de restricciones de
        integridad en BANCOS (2)
BANCO                              CLIENTE
Código Nombre          Dir         DNI Nombre          Dir             Tfno
  1     BBVA       Gran Vía, 17     111    Juan     Legazpi, 1        111111
  2    Santander    Espolón, 1      222    Pedro     Guridi, 5        222222
 2101    Kutxa      Garibai, 6      333   Gaizka   Lardizabal, 1      333333
 2102    BBK       Salaberría, 3    444    Luisa    Nagusia, 2        444444
                                    555 Ceferina    Elkano, 3         555555
SUCURSAL
                                    666 Yolanda Av. Madrid, 9         666666
Banco NSuc Ciudad
   1   1    Bilbao                  777 Segismundo H. Cortés, 9       777777
   1   2 S. Sebastián               888   Ataulfo  Cervantes, 1       888888
   1   3    Vitoria                 999 Teodorico Velázquez, 7        999999
   2   1   Santander                000   Atenea    Sorolla, 13       101010
   2   2 S. Sebastián                   CUENTA
 2101  1 S. Sebastián                   NCta Interés     Saldo   Banco NSuc
 2101  2    Pasajes PRÉSTAMO-            1      1        20000     1    1
 2102  1    Bilbao                       2      1        30000     1    2
                      CLIENTE
 2102  2    Sestao                       3      1        40000     1    3
                      NPres DNI
                        0 111
 2102  3 Portugalete                     4      2        30000     2    1
                        0 000            5      2        40000     2    2
  CE
                        1 111            6      3        50000   2101   1
CUENTA-
                        2 111
CLIENTE                                  7      3        60000   2101   2
NCta DNI                2 222            8      3        60000   2102   1
               ...
   0 111                3 111            9      4        70000   2102   2
   0 222    6 111       3 333            0      4        80000   2102   3
   0 555    6 222       4 111                                       CE    CE
                                        PRÉSTAMO
   0 000    6 333       4 444           NPres TAE        Importe   Banco NSuc
   1 111    6 666       5 111             1    10         200000     1    1
   2 111    7 111       5 555             2    10         300000     1    2
   2 222    7 777       6 111             3    10         400000     1    3
   3 111    8 111       6 666             4    20         300000     2    1
   3 333    8 222       7 111             5    20         400000     2    2
   4 111    8 444       7 777             6    30         500000   2101   1
   4 222    8 888       8 111             7    30         600000   2101   2
   4 444    9 111       8 888             8    30         600000   2102   1
   5 111    9 333       9 111             9    40         700000   2102   2
   5 555    9 999       9 999             0    40         800000   2102   3
   ...       CE     CE        CE   CE                                CE    CE
                     FBD Tema 5 – Dpto. LSI - Donostia                    56
Junio 00
                   Nombre     Características
        Especie

                   NombreCientífico       Origen Hábitat     EsperanzaVida
       Mariposa                                                                 NomEspecie

                   DNI   Nombre      Dirección     Tfno                      EsPrincipal
        Persona                                            CódColección

                   Código     Ubicación         PrecioEstimado
       Colección

                   NombreCientífico       Número Procedencia Tamaño CódColección
       Ejemplar

                   Nombre      Código      MejorEjemplar
EspecieColección

                   NombreCientífico       Color
ColoresMariposa




   a) Obtener el nombre científico, hábitat y esperanza
      de vida de las mariposas de la colección de José
      Mari Poza ordenadas por esperanza de vida. Hay
      que asegurarse de que sólo se obtiene una tupla por
      mariposa (y no por cada ejemplar de la misma).
   b) Obtener el nombre científico y esperanza de vida
      de todas las mariposas que tienen algún ejemplar
      de mayor tamaño que el ejemplar número 5 de la
      mariposa con nombre científico Papilio macaon
      perteneciente a la colección de José Mari Poza.




                            FBD Tema 5 – Dpto. LSI - Donostia                              57
Septiembre 00
 ZonaUrbana NombreZona Categoría

 BloqueCasas Calle Número    Npisos     NombreZona

                                       M2
CasaParticular NombreZona Número

                                                     M2
         Piso Calle Número    Planta        Puerta

               DNI   Nombre Edad NombreZona NúmCasa Calle NúmBloque Planta Puerta
     Persona

               DNI NombreZona NúmCasa
      PoseeC

               DNI   Calle NúmBloque Planta Puerta
      PoseeP



a) Obtener el DNI, nombre y edad de dueños de casas
   particulares, con la peculiaridad de que todas sus casas
   (las que posee) están situadas en una Zona Urbana cuya
   categoría es de “lujo”.
b) Obtener DNI, nombre y edad de las personas que viven
   en un piso de menos m2 que algún piso que cumpla al
   mismo tiempo las dos condiciones siguientes:
    a) Esté situado en otro bloque distinto.
    b) Ese otro bloque pertenezca a una Zona Urbana de
        categoría “Residencial”.
c) Obtener datos de los pisos habitados por personas de
   más de 60 años y situados en un Bloque de Casas que no
   supere los 10 pisos. Por cada piso queremos obtener la
   calle y número donde se encuentra, además de la
   siguiente información:
    – “Piso pequeño” si tiene menos de 50 m2
    – “Piso mediano” si tiene entre 50 y 75 m2
    – “Piso grande” si tiene más de 75 m2
                         FBD Tema 5 – Dpto. LSI - Donostia                 58
Junio 01
       Artículo Nom Tipo Precio Tam
                   Art             año             Art_Ingr NomArt NomIngr

    Ingrediente Nom Precio Sum
                   Ingr       inistrador           Prd_Ingr NomArt NomPrd NomIngr

        Pedido NúmeroFechaHoraPedidoHoraServidoTfno Ped_Art Número NomArt Cantidad

         icilio Tfno Dirección                     Ped_Prd NúmeroNomArt NomPrd Cantidad
      Dom

ProductoEspecial NomArt NomPrd


      a) Media de tiempo que se tarda en servir cada uno de
         los productos especiales a ser consumidos en el
         local (y no en el domicilio).
      b) Considera los artículos de tipo “pizza” que llevan
         “pimiento”. Se desea conocer todos los datos de
         productos especiales que se basan en tales artículos
         y llevan “champiñón” entre los ingredientes para el
         producto especial.
      c) Dirección de aquellos domicilios que hayan
         solicitado pedidos de artículos con precios
         superiores al artículo de nombre “Pizza 3 quesos”




                            FBD Tema 5 – Dpto. LSI - Donostia                 59
Septiembre 01
Película CódigoTítuloGénero        Producida Código Nombre

  Cine Nom Dirección Tfno             Actor Código Nombre

Persona Nom Sexo Nacionalidad
           bre                      Dirigida Código Nombre

Prem Categoría Año Euros Código Proyectada Código Nom Número FechaInicioFechaFin
    io

   Sala Nom Núm Aforo
               ero                 PremPers Categoría Año Nombre


   a) Para cada película de género policiaco obtener su
      título y el número total de premios que se le han
      concedido.
   b) Nombres de los cines, con alguna sala de aforo
      igual o superior a 100 butacas, que no han
      proyectado la película premiada con la categoría
      “mejor actriz” del año 2001.
   c) Obtener los nombres de los distintos actores que
      han participado en películas dirigidas por una
      persona que haya conseguido el premio al “mejor
      director” del festival en alguna ocasión. Queremos
      los actores participantes en cualquier película
      dirigida por esa persona, no sólo en las premiadas
      al mejor director.




                         FBD Tema 5 – Dpto. LSI - Donostia                60
Junio 02
  HOTEL Código_H Nombre Dirección Teléfono Código_E NºHabitaciones

                                                               ÁRBITROCódigo_E1Código_E2 Fecha Árbitro
 EQUIPO Código_E País Camiseta Total_Goles

                                                           CLUBES_AÑO DNI Club
JUGADOR DNI Nombre FechaN Goles Código_E

PARTIDO Código_E1 Código_E2 Fecha Resultado      CONTROL_ANTIDOPAJE DNI Fecha Lugar



     a) Buscando casualidades que se hayan producido en el mundial,
        deseamos obtener los nombres de aquellos jugadores
        (JUGADOR.Nombre contiene el nombre seguido del apellido)
        cuyo nombre de pila comience por “Carlos” y se hayan
        hospedado en el hotel del mismo nombre (“Carlos”), además de
        los nombres de aquellos jugadores que cumplían años el día de
        la inauguración (el 31/05/2002).
     b) Mostrar, junto al nombre de cada país participante en el
        mundial, el número total de sus jugadores que hayan pasado al
        menos un control antidopaje. Téngase en cuenta que un mismo
        jugador ha podido pasar varios controles y deseamos contar el
        número de jugadores (NO el número de controles realizados a
        los jugadores de un país). Se desea que el resultado quede
        ordenado alfabéticamente por nombre de país de forma
        descendente.
     c) Para aquellos equipos tales que entre dos de sus jugadores hayan
        marcado más de la mitad de los goles totales del equipo, se
        desea obtener el código del equipo, los nombres de ambos
        jugadores, el total de goles del equipo y los goles que ha
        marcado cada uno de los dos jugadores. No queremos que una
        misma pareja de jugadores aparezca repetida en el resultado (el
        primer jugador deberá ser menor alfabéticamente que el
        segundo). Por ejemplo:
          a) ESP, Gaizka Mendieta, Raul González, 25, 10, 5
          b) FRA, Francois Republique, Zinedine Zidane, 24, 9, 9


                               FBD Tema 5 – Dpto. LSI - Donostia                             61
Septiembre 02
                                              P E L C ueblo N bre
                                               U B O ód_P    om             Provincia
C N R C entro N bre D
 E T O ód_C    om    irección

                                              P R D C ueblo Calle
AT BS Matrícula   N sientos C pañía C entro
                   _A        om                A A A ód_P
 UOÚ                                 ód_C

AU N DI
 L MO N       N bre C entro
               om                             P R _E M
                                               A A N atrícula   C ueblo C
                                                                 ód_P    alle
                     ód_C       C ueblo
                                 ód_P

                                                                         Fecha_Inscripción
 C RO D I
       N      Id_Curso                        V JA N D I
                                               IA _E
  US                                                  N      Matrícula

   a) Obtener el nombre de los alumnos que viajan en autobuses
      contratados por centros universitarios distintos a donde estudian,
      junto al nombre de su pueblo, la compañía del autobús y la fecha de
      inscripción del alumno en el autobús.
      Si el autobús no pertenece a ninguna compañía tendrá que figurar en
      vez de la compañía el código del centro. Si todavía no figurase en la
      BD el centro que contrata al autobús deberá aparecer en su lugar la
      matrícula.
      Las filas del resultado deberán aparecer ordenadas por nombre de
      pueblo y las que tengan el mismo nombre de pueblo ordenadas por
      fecha de inscripción.
      Téngase en cuenta que un alumno puede viajar en varios autobuses
      de estas características y que el resultado deberá recoger cada
      alumno junto a cada autobús en el que viaja que cumpla las
      condiciones anteriores.
   b) Obtener el listado de las paradas (Cód_Pueblo, Calle) por las que
      pasan los autobuses que tienen alguna parada en “Beasain” y los ha
      contratado el centro de código “IFSS”.
   c) Obtener para cada centro su nombre y el número de alumnos
      matriculados en él que viajan en algún autobús que:
        – Figura en la BD como ya contratado por algún centro (suponer
            que pueden figurar en la BD autobuses que no están todavía
            contratados).
        – Realiza alguna parada en la calle “Gorosabel” del pueblo de
            código “TLS”.
        – Cuenta con más de 40 plazas.
                         FBD Tema 5 – Dpto. LSI - Donostia                    62
Junio 03


C PIST R N D
 O E ÍA IF irección Precio       A N T R IdAsignatura C C
                                                       urso arrera NIF
                                  SIG A U A

  AU N DI C
   L M O N lave Dirección           A N E IdAsignatura Tem N eroH
                                                          a úm ojas
                                     PU T S

           DI
            N     IdAsignatura        FIC A D I IdA
                                         HN        signatura Tem FechaPetición N eroC
                                                                a               úm opias FechaRecogida
    CR
    U SA




    a) DNI y Dirección, sin tuplas repetidas en el resultado,
       de aquellos alumnos que hayan rellenado fichas de
       petición de apuntes de al menos dos asignaturas
       distintas.
    b) Indica por cada copistería (NIF) y asignatura
       (IdAsignatura) cuál es la facturación pendiente de
       pago por los alumnos de la asignatura.




                                  FBD Tema 5 – Dpto. LSI - Donostia                            63
Septiembre 03
APAREJADOR N_Identificación Nombre Tfno NombreMunicipio

  MUNICIPIO Nombre Dirección Tfno

  INMUEBLE N_Propiedad Tipo Dirección DNI NombreMunicipio M2

                                                                          ...
    PERMISO N_Propiedad DNI FechaPetición Descripción N_Identificación

          ...   FechaAsignación Presupuesto FechaResolución EstáConcedido
                                                               Dominio
   PERSONA DNI Nombre Dirección
                                                               booleano
   TRABAJA NombreMunicipio N_Identificación

   PETICIÓN N_Propiedad DNI




 a) DNI, nombre y dirección de las personas solicitantes
    de algún permiso de obra asignado a un aparejador de
    la plantilla de “Aduna” (donde “Aduna” es el nombre
    de un municipio).
 b) Obtener el nombre del aparejador y a cuántos
    inmuebles distintos ha denegado algún permiso de
    obra. Sólo queremos tener en cuenta aquellos permisos
    de obra donde el inmueble haya obtenido otro permiso
    de obra, solicitado con posterioridad y con el mismo
    presupuesto (el aparejador que acepta el permiso NO
    tiene por qué ser el mismo que el que lo denegó
    previamente).




                          FBD Tema 5 – Dpto. LSI - Donostia                     64
Septiembre 03
APAREJADOR N_Identificación Nombre Tfno NombreMunicipio

  MUNICIPIO Nombre Dirección Tfno

  INMUEBLE N_Propiedad Tipo Dirección DNI NombreMunicipio M2

                                                                          ...
    PERMISO N_Propiedad DNI FechaPetición Descripción N_Identificación

          ...   FechaAsignación Presupuesto FechaResolución EstáConcedido
                                                               Dominio
   PERSONA DNI Nombre Dirección
                                                               booleano
   TRABAJA NombreMunicipio N_Identificación

   PETICIÓN N_Propiedad DNI



c) Obtener la descripción, nº de propiedad y el
   presupuesto máximo para aquellos permisos de obra
   que cumplen:
    – El permiso está concedido, su campo descripción
       tiene como valor “cerramiento” y corresponde a
       un inmueble de “Lasarte” de menos de 60 m2.
   Junto a tuplas con los mismos campos, para aquellos
   permisos de obra que cumplen:
    – El permiso está concedido, el campo descripción
       tiene como valor “fachada” y está asignado a un
       aparejador de la plantilla de “Lasarte”




                         FBD Tema 5 – Dpto. LSI - Donostia                      65
Junio 04


 E U O N bre D
        om    irector                                 CL AD  orsal N bre FechaN EnC
                                                                    om         cto arrera Equipo
  Q IP                                                IC IST


M IL O C Prem M
 A L T olor  io etálico                            R IC A IÓ orsal Etapa Tiempo
                                                 PA T IP C N D
                                                                                    Suponiendoque
                                                                                    haya undom  inio
                                                                                      que incluya
 E A A N ero K Salida L
        úm m           legada Ganador            LEA A L T C  olor Etapa Dorsal
  TP                                              L V _M IL O
                                                                                     horas-min-seg.

P E T N Etapa N O
               úm rdenA C
                       ltitud ategoría Prim
 U R O úm                                  ero




    a) Obtener la clasificación general de la vuelta, es decir,
       el dorsal, nombre del ciclista y nombre del equipo
       junto al tiempo total invertido en las etapas disputadas,
       para aquellos ciclistas que continúan en carrera,
       ordenados de menor a mayor tiempo consumido.
    b) Obtener el dorsal y el nombre de los ciclistas que
       pertenecen al equipo del ciclista ganador de la décima
       etapa (incluido este) y que participaron en dicha etapa




                              FBD Tema 5 – Dpto. LSI - Donostia                      66
Septiembre 04
DEPORTISTA NúmeroId Nombre Apellido Dirección Teléfono NúmeroIdVolunt FechaCom FechaFin CódigoDeporte País


    EVENTO Ciudad Nombre       Fecha                           VOLUNTARIO NúmeroId Nombre Procedencia Profesión

                                                                    EQUIPO CódigoDeporte País Entrenador
   DEPORTE Código Nombre Historia Equipamiento


   RECORD CódigoDeporte NúmeroIdDeportista Fecha Hora Ciudad    PARTICIPA CódigoDeporte NúmeroIdDeportista


TIPO RECORD CódigoDeporte NúmeroIdDeportista Fecha Hora Tipo      DESTACA CódigoDeporte NúmeroIdDeportista

                                                                            NúmeroIdVolunt Idioma
                                                                  IDIOMA
             CódigoDeporte Ciudad Nombre
 TIENE



     a) Nombre y procedencia de los voluntarios que hablan
        francés y acompañan a deportistas que participan en
        deportes cuyos eventos de clasificación se celebraron
        en París.
     b) Nombre, apellido e identificación de aquellos
        deportistas del equipo de Jorge Sánchez que cumplan
        la siguiente condición: han logrado algún record y
        todos los records que han conseguido son de tipo
        mundial. En el resultado debe excluirse a Jorge
        Sánchez.




                                       FBD Tema 5 – Dpto. LSI - Donostia                              67
Junio 05

    V J D o ech alid D P D C d S a D I H T LId Htel Nmre L calid C acid
     IAE estin VF aS a ías recio ía iu ad alid N O E Id o o b o ad ap ad
                                                    L_
    HTL
     OE _
    V J D o ech alid Id Htel C IE T D I Nmre D n NT o G ÍAD I Nmre NT o
     IAE estin VF aS a _ o L N E N o b irecció _ fn U D o b _ fn
                                                        ÍA N

E C RIÓ _
 XUS N
O C N L D o ech alid Nm D o x rsió HraS a L g alid P
  P IO A estin VF aS a ú ero estin E cu n o alid u arS a recio ID M D I Id m
                                                                 IO AD io a
                                                                    AN

H T LV J
 O E _ IAE                                   E C RO C
                                              XU_ P
                                              _ L N E D o ech alid Nm D I
                                               C IE T estin VF aS a ú ero N
 _ L N E D o ech alid Id o D I Nm Nch
  C IE T estin VF aS a Htel N ú ero o es




    a) Nombre y dirección de aquellos clientes (sin
       repeticiones) que hayan participado en algún viaje en
       el que se hayan hospedado más noches en un mismo
       hotel que las noches que se hospedó en el hotel
       “Gabriella” el cliente con DNI “15238432”, en el viaje
       que realizó a Roma el “3/05/2005”.
    b) Obtener, para cada destino de viaje DV, el número de
       guías que hablen “italiano” que han llevado o llevarán
       algún viaje a ese destino DV, con posibilidad de
       alojarse (en el destino de viaje DV) en algún hotel de
       “Roma”.




                        FBD Tema 5 – Dpto. LSI - Donostia             68
Septiembre 05

                                                                    N serep
                                                                      o ite
      R SE ecieC talR ech ctoM eroC talP reC talM reD IG jaNm ran
       E sp ro azaF aN atad ro ad ro ad N ran o G ja
                                                                       ecieenlas
                                                                   esp
                                                                       claves
                                              G N D R D INmreE ail ex jerasd
                                                                     tran e
   G A J D INmreD nT oAm istrad r
    R NA N o b ireccio fn d in o               A A E O N o b -m
                                                                   p reym re
                                                                    ad ad
                                                                     p rserla
                                                                       o
E F R E A Nmre
 N E MD D o b                               T A A IE T NmreDració
                                             R T M N ON b u n
                                                        o              maism

  A L A E ferm adT ien sp ro _ icio E F RT A A E ferm adT ien
   P IC R n ed ratam toE ecieC talF In N E _ R T M n ed ratam to

  S T M E ferm adS to a
   ÍN O A n ed in m                         MD A E T T ien ed en
                                             E IC MN O ratam toM icam to


   a) Especie, crotal y fecha de nacimiento de las reses de la
      raza “Angus” con padre y madre conocidos (están en
      la BD) y cuyo propietario es “Domecq”. Sólo se
      obtendrán reses que NUNCA hayan padecido la
      enfermedad “Brucelosis”.
   b) Obtener la especie y crotal de las reses que, habiendo
      padecido la enfermedad “Encefalopatía”, se les aplicó
      para dicha enfermedad alguno de los tratamientos
      usados para esa misma enfermedad en la res de la
      especie “bovina” con crotal número 1. Esta última res
      no debe aparecer en el resultado.




                          FBD Tema 5 – Dpto. LSI - Donostia                69
ER-Relacional
                         Junio y Septiembre 00

                                                              Calle
         NombreZona          Categoría                                         Dir         NPisos
                                                              Número
                                         1                     N
                                                                          BLOQUE_CASAS
              ZONA_URBANA

                         1                                                                 1

                                                                                                              Planta
                                                                                                      P_P
                         N                                                                 N
Número                               N                                N
                                                                                                              Puerta
                                                                                    PISO
                                                       POSEEP
             CASA_PARTICULAR             POSEEC
     2
 M                       1                                                      1                     M2
                                             M            M
                                N                                     N
                                             PERSONA
                 VIVEC                                                           VIVEP


                                     DNI         Nombre       Edad




                                                                              Nombre        Dirección
                                                                      DNI                            Tfno
                Nombre         Características
                                                                                     PERSONA
                         ESPECIE
                                 1                 M
                                                                                            N
   NombreCientífico                                       MejorEjemplar
                                 N
   Origen
                                                                                                        EsPrincipal
                      MARIPOSA
   Hábitat
                                1
EsperanzaVida
                                                                          N
            Colores                                                                            1
                                 N
                                                  N                   1
                      EJEMPLAR                                                      COLECCIÓN

             Número                                                                                Código
                                             Tamaño                PrecioEstimado
                      Procedencia
                                                                                     Ubicación




                               FBD Tema 5 – Dpto. LSI - Donostia                                             70
ER-Relacional
                    Junio y Septiembre 01

                   Precio            NomIngr         Suministrador
                           (0,N)                        (0,N)
                                   INGREDIENTE
                LLEVA                                            LLEVA
 NomArt
                                                                (1,N)
                   (1,N)
  Tipo                                                                           NomPrd
                            (0,N)                      (1,1) PRODUCTO
 Precio                                BASE DE
              ARTÍCULO
                                                                ESPECIAL
 Tamaño
                   (0,N)                                                (0,N)
   Cantidad                                                                      Cantidad
                            (0,N)                     (0,N)
                                       PEDIDO
              INCLUIDO                                          INCLUIDO
                                                        Hora
                         Número                        pedido
                             Fecha                      Hora
                                                       servido
                                       (0,1)
  Dirección
                            (0,N)
   Tfno       DOMICILIO               LLEVAR_A



                                                     Categoría          Año
                                        Euros          Cód
                         (0,1)                                (0,N)
                                             PREMIO
                CONCEDIDO                                             CONCEDIDO

                (0,N)                                                           (0,N)
                             (1,N)                              (0,N)
                                            PRODUCIDA
     Código
               PELÍCULA (1,N) ACTOR (0,N)
       Título                               PERSONA
      Género
               (1,N)   (1,N) DIRIGIDA (0,N)
 Fecha                                        Sexo
 Inicio                                Nombre Nacionalidad
              PROYECTADA
FechaFin
                 (1,N)
                                    (1,1)                (1,N)
                   SALA
     Número                                                           CINE
                                                DE

      Aforo                                            Nom Tfno Dirección
                         FBD Tema 5 – Dpto. LSI - Donostia                          71
ER-Relacional
                                  Junio y Septiembre 02
 Cód        Direcc    Tfno.             Cód            País                                                 Fecha    Resultado
                                                                                (1,N)
                                                                              Equip1
                                               (1,N)                                                  (1,1)
                         (1,1)                                                 (1,N)
                                  RESIDE                                                   JUEGA
        HOTEL                                            EQUIPO                                               PARTIDO
                                                                              Equip2

                              NºHabit        Camiseta                   Total_Goles                             Árbitros
          Nombre                                         (1,N)

                                                    COMPUESTO POR
    Fecha        Lugar
                                                         (1,1)                            DNI
                          (1,1)              (0,N)
    CONTROL                       PASADO
                                                        JUGADOR                         Nombre
                                     A
   ANTIDOPAJE
                                                                                        FechaN
                                               Clubes_Año                Goles




                              Nombre
                                                                                  Cód_Pueblo         Nombre         Provincia
                      DNI               Cursos
                                               (1,1)                                    (0,N)
                                                                      VIVE_EN
                              ALUMNO                                                               PUEBLO
              (1,1)                            (1,N)
                                                                                                   (1,N)
                                                                Fecha_Inscripción
       ESTUDIA_EN                                      VIAJA_EN                                       POSEE


              (0,N)                                           (0,N)
                                                                                                    (1,1)
                      (1,N)                 (1,1)                     (1,N)               (1,N)
                              CONTRATA_A                                      PARA_EN
       CENTRO                                       AUTOBÚS                                        PARADA

                                                                  Compañía
Cód_Centro        Dirección                Matrícula                                                  Calle
                                                       N_Asientos
             Nombre




                                    FBD Tema 5 – Dpto. LSI - Donostia                                               72
MANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQL
MANUAL COMPLETO DE SQL

Más contenido relacionado

La actualidad más candente

Sql Consultas MáS Complejas
Sql Consultas MáS ComplejasSql Consultas MáS Complejas
Sql Consultas MáS Complejas
alexmerono
 
Trigger Data Base
Trigger Data BaseTrigger Data Base
Trigger Data Base
Roberto Ramírez Amaya
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logico
josecuartas
 
Sql comandos
Sql comandosSql comandos
Sql comandos
Jose
 
Base de datos relacionales
Base de datos relacionalesBase de datos relacionales
Base de datos relacionales
Iris Yadira Moreno Aguirre
 
mongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y ComponentesmongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y Componentes
omenar
 
Unidad1 Bases De Datos Distribuidas
Unidad1 Bases De Datos DistribuidasUnidad1 Bases De Datos Distribuidas
Unidad1 Bases De Datos Distribuidas
Deysi Hdz
 
Presentacion BD NoSQL
Presentacion  BD NoSQLPresentacion  BD NoSQL
Presentacion BD NoSQL
Andrea Antunes
 
Candados bd
Candados bdCandados bd
Candados bd
Henry Maltez
 
Couchdb
CouchdbCouchdb
Comandos básicos mysql
Comandos básicos mysqlComandos básicos mysql
Comandos básicos mysql
Carmen Rios Zapata
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
testgrupocomex
 
Guía 03. Ejercicios. Realización de consultas SQL - José J Sánchez H
Guía 03. Ejercicios. Realización de consultas SQL - José J Sánchez HGuía 03. Ejercicios. Realización de consultas SQL - José J Sánchez H
Guía 03. Ejercicios. Realización de consultas SQL - José J Sánchez H
José Ricardo Tillero Giménez
 
Efficient Pagination Using MySQL
Efficient Pagination Using MySQLEfficient Pagination Using MySQL
Efficient Pagination Using MySQL
Surat Singh Bhati
 
Bases de datos NoSQL Multi-Modelos, caso de estudio: OrientDB
Bases de datos NoSQL Multi-Modelos, caso de estudio: OrientDBBases de datos NoSQL Multi-Modelos, caso de estudio: OrientDB
Bases de datos NoSQL Multi-Modelos, caso de estudio: OrientDB
Wilmer Gonzalez
 
Modelo de datos
Modelo de datosModelo de datos
Modelo de datos
Cristian Salazar C.
 
Database in Kubernetes: Diagnostics and Monitoring
Database in Kubernetes: Diagnostics and MonitoringDatabase in Kubernetes: Diagnostics and Monitoring
Database in Kubernetes: Diagnostics and Monitoring
Sveta Smirnova
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQL
Cycle-IT
 
Diseño de base de datos Relacionales
Diseño de base de datos RelacionalesDiseño de base de datos Relacionales
Diseño de base de datos Relacionales
Juan Soubervielle
 
Tipos de sentencias sql
Tipos de sentencias sqlTipos de sentencias sql
Tipos de sentencias sql
Solucionesjpv.blogspot.com
 

La actualidad más candente (20)

Sql Consultas MáS Complejas
Sql Consultas MáS ComplejasSql Consultas MáS Complejas
Sql Consultas MáS Complejas
 
Trigger Data Base
Trigger Data BaseTrigger Data Base
Trigger Data Base
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logico
 
Sql comandos
Sql comandosSql comandos
Sql comandos
 
Base de datos relacionales
Base de datos relacionalesBase de datos relacionales
Base de datos relacionales
 
mongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y ComponentesmongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y Componentes
 
Unidad1 Bases De Datos Distribuidas
Unidad1 Bases De Datos DistribuidasUnidad1 Bases De Datos Distribuidas
Unidad1 Bases De Datos Distribuidas
 
Presentacion BD NoSQL
Presentacion  BD NoSQLPresentacion  BD NoSQL
Presentacion BD NoSQL
 
Candados bd
Candados bdCandados bd
Candados bd
 
Couchdb
CouchdbCouchdb
Couchdb
 
Comandos básicos mysql
Comandos básicos mysqlComandos básicos mysql
Comandos básicos mysql
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Guía 03. Ejercicios. Realización de consultas SQL - José J Sánchez H
Guía 03. Ejercicios. Realización de consultas SQL - José J Sánchez HGuía 03. Ejercicios. Realización de consultas SQL - José J Sánchez H
Guía 03. Ejercicios. Realización de consultas SQL - José J Sánchez H
 
Efficient Pagination Using MySQL
Efficient Pagination Using MySQLEfficient Pagination Using MySQL
Efficient Pagination Using MySQL
 
Bases de datos NoSQL Multi-Modelos, caso de estudio: OrientDB
Bases de datos NoSQL Multi-Modelos, caso de estudio: OrientDBBases de datos NoSQL Multi-Modelos, caso de estudio: OrientDB
Bases de datos NoSQL Multi-Modelos, caso de estudio: OrientDB
 
Modelo de datos
Modelo de datosModelo de datos
Modelo de datos
 
Database in Kubernetes: Diagnostics and Monitoring
Database in Kubernetes: Diagnostics and MonitoringDatabase in Kubernetes: Diagnostics and Monitoring
Database in Kubernetes: Diagnostics and Monitoring
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQL
 
Diseño de base de datos Relacionales
Diseño de base de datos RelacionalesDiseño de base de datos Relacionales
Diseño de base de datos Relacionales
 
Tipos de sentencias sql
Tipos de sentencias sqlTipos de sentencias sql
Tipos de sentencias sql
 

Destacado

Base de-datos-cine
Base de-datos-cineBase de-datos-cine
Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)
Jsrfs Montemayor
 
Ejercicio2 mysql
Ejercicio2 mysqlEjercicio2 mysql
Ejercicio2 mysql
María Luisa Velasco
 
Scrip de la base de datos cine
Scrip de la base de datos cineScrip de la base de datos cine
Scrip de la base de datos cine
LSCA Hermilo Salazar Chávez
 
Ejercicios De Sql (actualizado)
Ejercicios De Sql (actualizado)Ejercicios De Sql (actualizado)
Ejercicios De Sql (actualizado)
capver digital
 
Ejercicios resueltos de sql
Ejercicios resueltos de sqlEjercicios resueltos de sql
Ejercicios resueltos de sql
Julian Benavidez
 

Destacado (6)

Base de-datos-cine
Base de-datos-cineBase de-datos-cine
Base de-datos-cine
 
Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)Ejercicio sql tienda informatica (1)
Ejercicio sql tienda informatica (1)
 
Ejercicio2 mysql
Ejercicio2 mysqlEjercicio2 mysql
Ejercicio2 mysql
 
Scrip de la base de datos cine
Scrip de la base de datos cineScrip de la base de datos cine
Scrip de la base de datos cine
 
Ejercicios De Sql (actualizado)
Ejercicios De Sql (actualizado)Ejercicios De Sql (actualizado)
Ejercicios De Sql (actualizado)
 
Ejercicios resueltos de sql
Ejercicios resueltos de sqlEjercicios resueltos de sql
Ejercicios resueltos de sql
 

Similar a MANUAL COMPLETO DE SQL

05 Sql Profundizacion
05 Sql Profundizacion05 Sql Profundizacion
05 Sql Profundizacion
Kudos S.A.S
 
Bases de datos relacionales
Bases de datos relacionalesBases de datos relacionales
Bases de datos relacionales
Ashley Stronghold Witwicky
 
Nava sqlcompleto
Nava sqlcompletoNava sqlcompleto
Nava sqlcompleto
ELISEOMANUELNAVARODR
 
Tm13 introduccion al_sql
Tm13 introduccion al_sqlTm13 introduccion al_sql
Tm13 introduccion al_sql
Julio Pari
 
T12 ORACLE
T12 ORACLET12 ORACLE
T12 ORACLE
rmonago
 
Abd3 sql
Abd3 sqlAbd3 sql
Abd3 sql
John Anthony
 
Bd 2 1 fundamentos transact sql
Bd 2   1 fundamentos transact sqlBd 2   1 fundamentos transact sql
Bd 2 1 fundamentos transact sql
Carlos Lopez
 
José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]
RootedCON
 
Bdii 09 ddl_new
Bdii 09 ddl_newBdii 09 ddl_new
Bdii 09 ddl_new
Rody Paredes
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
guest0c9485
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
guest0c9485
 
Informixsql
InformixsqlInformixsql
Informixsql
Jesus Cortes
 
Lenguaje de defincion de datos
Lenguaje   de  defincion de datosLenguaje   de  defincion de datos
Lenguaje de defincion de datos
IrisMTF16
 
Unidad iv ddl
Unidad iv ddlUnidad iv ddl
Unidad iv ddl
Orlando Verdugo
 
Base De Datos I
Base De Datos IBase De Datos I
Base De Datos I
Videoconferencias UTPL
 
Trabajo grupal - Base de Datos
Trabajo grupal - Base de DatosTrabajo grupal - Base de Datos
Trabajo grupal - Base de Datos
MIROSLAVY
 
Base de datos - Clase 2
Base de datos - Clase 2Base de datos - Clase 2
Base de datos - Clase 2
Luis Miguel De Bello
 
Restricciones bd
Restricciones bdRestricciones bd
Restricciones bd
Alondra Katt
 
Lenguajes de Transformación
Lenguajes de TransformaciónLenguajes de Transformación
Lenguajes de Transformación
jesus.sanchez
 
Curso sql server_administracion
Curso sql server_administracionCurso sql server_administracion
Curso sql server_administracion
Salvador Ramos
 

Similar a MANUAL COMPLETO DE SQL (20)

05 Sql Profundizacion
05 Sql Profundizacion05 Sql Profundizacion
05 Sql Profundizacion
 
Bases de datos relacionales
Bases de datos relacionalesBases de datos relacionales
Bases de datos relacionales
 
Nava sqlcompleto
Nava sqlcompletoNava sqlcompleto
Nava sqlcompleto
 
Tm13 introduccion al_sql
Tm13 introduccion al_sqlTm13 introduccion al_sql
Tm13 introduccion al_sql
 
T12 ORACLE
T12 ORACLET12 ORACLE
T12 ORACLE
 
Abd3 sql
Abd3 sqlAbd3 sql
Abd3 sql
 
Bd 2 1 fundamentos transact sql
Bd 2   1 fundamentos transact sqlBd 2   1 fundamentos transact sql
Bd 2 1 fundamentos transact sql
 
José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]
 
Bdii 09 ddl_new
Bdii 09 ddl_newBdii 09 ddl_new
Bdii 09 ddl_new
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
 
Informixsql
InformixsqlInformixsql
Informixsql
 
Lenguaje de defincion de datos
Lenguaje   de  defincion de datosLenguaje   de  defincion de datos
Lenguaje de defincion de datos
 
Unidad iv ddl
Unidad iv ddlUnidad iv ddl
Unidad iv ddl
 
Base De Datos I
Base De Datos IBase De Datos I
Base De Datos I
 
Trabajo grupal - Base de Datos
Trabajo grupal - Base de DatosTrabajo grupal - Base de Datos
Trabajo grupal - Base de Datos
 
Base de datos - Clase 2
Base de datos - Clase 2Base de datos - Clase 2
Base de datos - Clase 2
 
Restricciones bd
Restricciones bdRestricciones bd
Restricciones bd
 
Lenguajes de Transformación
Lenguajes de TransformaciónLenguajes de Transformación
Lenguajes de Transformación
 
Curso sql server_administracion
Curso sql server_administracionCurso sql server_administracion
Curso sql server_administracion
 

Más de Edgar Sandoval

Trabajo en clase 1. modulo ii manejo de encuestas
Trabajo en clase 1. modulo ii manejo de encuestasTrabajo en clase 1. modulo ii manejo de encuestas
Trabajo en clase 1. modulo ii manejo de encuestas
Edgar Sandoval
 
Presentacion proyecto e-tic
Presentacion proyecto e-ticPresentacion proyecto e-tic
Presentacion proyecto e-tic
Edgar Sandoval
 
Manual de xmind
Manual de xmindManual de xmind
Manual de xmind
Edgar Sandoval
 
Razones para contratar en la nube
Razones para contratar en la nubeRazones para contratar en la nube
Razones para contratar en la nube
Edgar Sandoval
 
Mapa mental planeacion estrategica
Mapa mental planeacion estrategicaMapa mental planeacion estrategica
Mapa mental planeacion estrategica
Edgar Sandoval
 
Manual de instalacion y tecnico JOOMLA
Manual de instalacion y tecnico JOOMLAManual de instalacion y tecnico JOOMLA
Manual de instalacion y tecnico JOOMLA
Edgar Sandoval
 
Plataformas web 2.0 actualizado
Plataformas web 2.0 actualizadoPlataformas web 2.0 actualizado
Plataformas web 2.0 actualizado
Edgar Sandoval
 
Exportacion e importacion de los datos en oracle
Exportacion e importacion de los datos en oracleExportacion e importacion de los datos en oracle
Exportacion e importacion de los datos en oracle
Edgar Sandoval
 
Guia y resumen de las funciones de excel
Guia y resumen de las funciones de excelGuia y resumen de las funciones de excel
Guia y resumen de las funciones de excel
Edgar Sandoval
 
Factores Ambintales
Factores AmbintalesFactores Ambintales
Factores Ambintales
Edgar Sandoval
 
Taller N0 1 Software
Taller N0 1 SoftwareTaller N0 1 Software
Taller N0 1 Software
Edgar Sandoval
 
El Ritual De Los Indios Cherokee
El Ritual De Los Indios CherokeeEl Ritual De Los Indios Cherokee
El Ritual De Los Indios Cherokee
Edgar Sandoval
 
Norma Ntc 1486
Norma Ntc 1486Norma Ntc 1486
Norma Ntc 1486
Edgar Sandoval
 
Programa De Base De Datos 5 To Semestre
Programa De Base De Datos 5 To SemestrePrograma De Base De Datos 5 To Semestre
Programa De Base De Datos 5 To Semestre
Edgar Sandoval
 
Programa Informatica Básica
Programa Informatica BásicaPrograma Informatica Básica
Programa Informatica Básica
Edgar Sandoval
 
Instalación De PáGina Web En Servidor Linux
Instalación De PáGina Web En Servidor LinuxInstalación De PáGina Web En Servidor Linux
Instalación De PáGina Web En Servidor Linux
Edgar Sandoval
 
Manual De Bakup And Recovery Mananger
Manual De Bakup And Recovery ManangerManual De Bakup And Recovery Mananger
Manual De Bakup And Recovery Mananger
Edgar Sandoval
 
Manual Instalacion Linux Centos5
Manual Instalacion Linux Centos5Manual Instalacion Linux Centos5
Manual Instalacion Linux Centos5
Edgar Sandoval
 
Manual web 2.0
Manual web 2.0Manual web 2.0
Manual web 2.0
Edgar Sandoval
 

Más de Edgar Sandoval (20)

Trabajo en clase 1. modulo ii manejo de encuestas
Trabajo en clase 1. modulo ii manejo de encuestasTrabajo en clase 1. modulo ii manejo de encuestas
Trabajo en clase 1. modulo ii manejo de encuestas
 
Presentacion proyecto e-tic
Presentacion proyecto e-ticPresentacion proyecto e-tic
Presentacion proyecto e-tic
 
Manual de xmind
Manual de xmindManual de xmind
Manual de xmind
 
Que es la innovacion
Que es la innovacionQue es la innovacion
Que es la innovacion
 
Razones para contratar en la nube
Razones para contratar en la nubeRazones para contratar en la nube
Razones para contratar en la nube
 
Mapa mental planeacion estrategica
Mapa mental planeacion estrategicaMapa mental planeacion estrategica
Mapa mental planeacion estrategica
 
Manual de instalacion y tecnico JOOMLA
Manual de instalacion y tecnico JOOMLAManual de instalacion y tecnico JOOMLA
Manual de instalacion y tecnico JOOMLA
 
Plataformas web 2.0 actualizado
Plataformas web 2.0 actualizadoPlataformas web 2.0 actualizado
Plataformas web 2.0 actualizado
 
Exportacion e importacion de los datos en oracle
Exportacion e importacion de los datos en oracleExportacion e importacion de los datos en oracle
Exportacion e importacion de los datos en oracle
 
Guia y resumen de las funciones de excel
Guia y resumen de las funciones de excelGuia y resumen de las funciones de excel
Guia y resumen de las funciones de excel
 
Factores Ambintales
Factores AmbintalesFactores Ambintales
Factores Ambintales
 
Taller N0 1 Software
Taller N0 1 SoftwareTaller N0 1 Software
Taller N0 1 Software
 
El Ritual De Los Indios Cherokee
El Ritual De Los Indios CherokeeEl Ritual De Los Indios Cherokee
El Ritual De Los Indios Cherokee
 
Norma Ntc 1486
Norma Ntc 1486Norma Ntc 1486
Norma Ntc 1486
 
Programa De Base De Datos 5 To Semestre
Programa De Base De Datos 5 To SemestrePrograma De Base De Datos 5 To Semestre
Programa De Base De Datos 5 To Semestre
 
Programa Informatica Básica
Programa Informatica BásicaPrograma Informatica Básica
Programa Informatica Básica
 
Instalación De PáGina Web En Servidor Linux
Instalación De PáGina Web En Servidor LinuxInstalación De PáGina Web En Servidor Linux
Instalación De PáGina Web En Servidor Linux
 
Manual De Bakup And Recovery Mananger
Manual De Bakup And Recovery ManangerManual De Bakup And Recovery Mananger
Manual De Bakup And Recovery Mananger
 
Manual Instalacion Linux Centos5
Manual Instalacion Linux Centos5Manual Instalacion Linux Centos5
Manual Instalacion Linux Centos5
 
Manual web 2.0
Manual web 2.0Manual web 2.0
Manual web 2.0
 

Último

CALCULO DE AMORTIZACION DE UN PRESTAMO.pdf
CALCULO DE AMORTIZACION DE UN PRESTAMO.pdfCALCULO DE AMORTIZACION DE UN PRESTAMO.pdf
CALCULO DE AMORTIZACION DE UN PRESTAMO.pdf
cesareduvr95
 
Gracias papá voz mujer_letra y acordes de guitarra.pdf
Gracias papá voz mujer_letra y acordes de guitarra.pdfGracias papá voz mujer_letra y acordes de guitarra.pdf
Gracias papá voz mujer_letra y acordes de guitarra.pdf
Ani Ann
 
La filosofía presocrática y los filosofos más relvantes del periodo.
La filosofía presocrática y los filosofos más relvantes del periodo.La filosofía presocrática y los filosofos más relvantes del periodo.
La filosofía presocrática y los filosofos más relvantes del periodo.
DobbieElfo
 
Mi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste BlancoMi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste Blanco
Ruth Noemí Soto Villegas
 
Secuencia didáctica de la noticia para alumnos de primaria
Secuencia didáctica de la noticia para alumnos de primariaSecuencia didáctica de la noticia para alumnos de primaria
Secuencia didáctica de la noticia para alumnos de primaria
EricaCouly1
 
Business Plan -rAIces - Agro Business Tech
Business Plan -rAIces - Agro Business TechBusiness Plan -rAIces - Agro Business Tech
Business Plan -rAIces - Agro Business Tech
johnyamg20
 
Lecciones 11 Esc. Sabática. El conflicto inminente docx
Lecciones 11 Esc. Sabática. El conflicto inminente docxLecciones 11 Esc. Sabática. El conflicto inminente docx
Lecciones 11 Esc. Sabática. El conflicto inminente docx
Alejandrino Halire Ccahuana
 
Carnavision: anticipa y aprovecha - hackathon Pasto2024 .pdf
Carnavision: anticipa y aprovecha - hackathon Pasto2024 .pdfCarnavision: anticipa y aprovecha - hackathon Pasto2024 .pdf
Carnavision: anticipa y aprovecha - hackathon Pasto2024 .pdf
EleNoguera
 
Programación de la XI semana cultural del CEIP Alfares
Programación de la XI semana cultural del CEIP AlfaresProgramación de la XI semana cultural del CEIP Alfares
Programación de la XI semana cultural del CEIP Alfares
Alfaresbilingual
 
1.- manual-para-la-creacion-33-dias-de-manifestacion-ulises-sampe.pdf
1.- manual-para-la-creacion-33-dias-de-manifestacion-ulises-sampe.pdf1.- manual-para-la-creacion-33-dias-de-manifestacion-ulises-sampe.pdf
1.- manual-para-la-creacion-33-dias-de-manifestacion-ulises-sampe.pdf
MiNeyi1
 
Prueba/test conoce tus heridas de la infancia
Prueba/test conoce tus heridas de la infanciaPrueba/test conoce tus heridas de la infancia
Prueba/test conoce tus heridas de la infancia
LudmilaOrtega3
 
TRABAJO FINAL CADENA, DE SUMINISTROS.pdf
TRABAJO FINAL CADENA, DE SUMINISTROS.pdfTRABAJO FINAL CADENA, DE SUMINISTROS.pdf
TRABAJO FINAL CADENA, DE SUMINISTROS.pdf
RojasEstradaEsther
 
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Juan Martín Martín
 
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACIONANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
carla466417
 
CINE COMO RECURSO DIDÁCTICO para utilizar en TUTORÍA
CINE COMO RECURSO DIDÁCTICO para utilizar en TUTORÍACINE COMO RECURSO DIDÁCTICO para utilizar en TUTORÍA
CINE COMO RECURSO DIDÁCTICO para utilizar en TUTORÍA
Fernández Gorka
 
Presentación de la historia de PowerPoint y sus características más relevantes.
Presentación de la historia de PowerPoint y sus características más relevantes.Presentación de la historia de PowerPoint y sus características más relevantes.
Presentación de la historia de PowerPoint y sus características más relevantes.
genesiscabezas469
 
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZACORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
Sandra Mariela Ballón Aguedo
 
Leyes de los gases según Boyle-Marriote, Charles, Gay- Lussac, Ley general de...
Leyes de los gases según Boyle-Marriote, Charles, Gay- Lussac, Ley general de...Leyes de los gases según Boyle-Marriote, Charles, Gay- Lussac, Ley general de...
Leyes de los gases según Boyle-Marriote, Charles, Gay- Lussac, Ley general de...
Shirley Vásquez Esparza
 
Desarrollo-Embrionario-y-Diferenciacion-Celular.pptx
Desarrollo-Embrionario-y-Diferenciacion-Celular.pptxDesarrollo-Embrionario-y-Diferenciacion-Celular.pptx
Desarrollo-Embrionario-y-Diferenciacion-Celular.pptx
TatianaHerrera46
 
REGIMÉN ACADÉMICO PARA LA EDUCACIÓN SECUNDARIA - RESOC-2024-1650-GDEBA-DGC...
REGIMÉN ACADÉMICO PARA LA EDUCACIÓN SECUNDARIA - RESOC-2024-1650-GDEBA-DGC...REGIMÉN ACADÉMICO PARA LA EDUCACIÓN SECUNDARIA - RESOC-2024-1650-GDEBA-DGC...
REGIMÉN ACADÉMICO PARA LA EDUCACIÓN SECUNDARIA - RESOC-2024-1650-GDEBA-DGC...
carla526481
 

Último (20)

CALCULO DE AMORTIZACION DE UN PRESTAMO.pdf
CALCULO DE AMORTIZACION DE UN PRESTAMO.pdfCALCULO DE AMORTIZACION DE UN PRESTAMO.pdf
CALCULO DE AMORTIZACION DE UN PRESTAMO.pdf
 
Gracias papá voz mujer_letra y acordes de guitarra.pdf
Gracias papá voz mujer_letra y acordes de guitarra.pdfGracias papá voz mujer_letra y acordes de guitarra.pdf
Gracias papá voz mujer_letra y acordes de guitarra.pdf
 
La filosofía presocrática y los filosofos más relvantes del periodo.
La filosofía presocrática y los filosofos más relvantes del periodo.La filosofía presocrática y los filosofos más relvantes del periodo.
La filosofía presocrática y los filosofos más relvantes del periodo.
 
Mi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste BlancoMi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste Blanco
 
Secuencia didáctica de la noticia para alumnos de primaria
Secuencia didáctica de la noticia para alumnos de primariaSecuencia didáctica de la noticia para alumnos de primaria
Secuencia didáctica de la noticia para alumnos de primaria
 
Business Plan -rAIces - Agro Business Tech
Business Plan -rAIces - Agro Business TechBusiness Plan -rAIces - Agro Business Tech
Business Plan -rAIces - Agro Business Tech
 
Lecciones 11 Esc. Sabática. El conflicto inminente docx
Lecciones 11 Esc. Sabática. El conflicto inminente docxLecciones 11 Esc. Sabática. El conflicto inminente docx
Lecciones 11 Esc. Sabática. El conflicto inminente docx
 
Carnavision: anticipa y aprovecha - hackathon Pasto2024 .pdf
Carnavision: anticipa y aprovecha - hackathon Pasto2024 .pdfCarnavision: anticipa y aprovecha - hackathon Pasto2024 .pdf
Carnavision: anticipa y aprovecha - hackathon Pasto2024 .pdf
 
Programación de la XI semana cultural del CEIP Alfares
Programación de la XI semana cultural del CEIP AlfaresProgramación de la XI semana cultural del CEIP Alfares
Programación de la XI semana cultural del CEIP Alfares
 
1.- manual-para-la-creacion-33-dias-de-manifestacion-ulises-sampe.pdf
1.- manual-para-la-creacion-33-dias-de-manifestacion-ulises-sampe.pdf1.- manual-para-la-creacion-33-dias-de-manifestacion-ulises-sampe.pdf
1.- manual-para-la-creacion-33-dias-de-manifestacion-ulises-sampe.pdf
 
Prueba/test conoce tus heridas de la infancia
Prueba/test conoce tus heridas de la infanciaPrueba/test conoce tus heridas de la infancia
Prueba/test conoce tus heridas de la infancia
 
TRABAJO FINAL CADENA, DE SUMINISTROS.pdf
TRABAJO FINAL CADENA, DE SUMINISTROS.pdfTRABAJO FINAL CADENA, DE SUMINISTROS.pdf
TRABAJO FINAL CADENA, DE SUMINISTROS.pdf
 
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
 
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACIONANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
ANALISIS CRITICO DEL PENSAMIENTO COLONIAL Y DESCOLONIZACION
 
CINE COMO RECURSO DIDÁCTICO para utilizar en TUTORÍA
CINE COMO RECURSO DIDÁCTICO para utilizar en TUTORÍACINE COMO RECURSO DIDÁCTICO para utilizar en TUTORÍA
CINE COMO RECURSO DIDÁCTICO para utilizar en TUTORÍA
 
Presentación de la historia de PowerPoint y sus características más relevantes.
Presentación de la historia de PowerPoint y sus características más relevantes.Presentación de la historia de PowerPoint y sus características más relevantes.
Presentación de la historia de PowerPoint y sus características más relevantes.
 
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZACORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
 
Leyes de los gases según Boyle-Marriote, Charles, Gay- Lussac, Ley general de...
Leyes de los gases según Boyle-Marriote, Charles, Gay- Lussac, Ley general de...Leyes de los gases según Boyle-Marriote, Charles, Gay- Lussac, Ley general de...
Leyes de los gases según Boyle-Marriote, Charles, Gay- Lussac, Ley general de...
 
Desarrollo-Embrionario-y-Diferenciacion-Celular.pptx
Desarrollo-Embrionario-y-Diferenciacion-Celular.pptxDesarrollo-Embrionario-y-Diferenciacion-Celular.pptx
Desarrollo-Embrionario-y-Diferenciacion-Celular.pptx
 
REGIMÉN ACADÉMICO PARA LA EDUCACIÓN SECUNDARIA - RESOC-2024-1650-GDEBA-DGC...
REGIMÉN ACADÉMICO PARA LA EDUCACIÓN SECUNDARIA - RESOC-2024-1650-GDEBA-DGC...REGIMÉN ACADÉMICO PARA LA EDUCACIÓN SECUNDARIA - RESOC-2024-1650-GDEBA-DGC...
REGIMÉN ACADÉMICO PARA LA EDUCACIÓN SECUNDARIA - RESOC-2024-1650-GDEBA-DGC...
 

MANUAL COMPLETO DE SQL

  • 1. Tema 5. SQL El estándar de las Bases de Datos Relacionales Elmasri/Navathe 07 • Definición de datos y restricciones (CREATE TABLE), y cambios en el esquema (DROP y ALTER) • Consultas (SELECT...FROM...WHERE) → restringidas * • Actualización (INSERT, DELETE, UPDATE) restringidas * En este curso NO se cubren todos los aspectos de SELECT. No se estudian, por ejemplo, SELECT anidados o la cláusula HAVING (consultar el temario de la asignatura). En el examen NO se admiten soluciones que incluyan aspectos de SQL no cubiertos en la asignatura. FBD Tema 5 – Dpto. LSI - Donostia 1
  • 2. SQL (Structured Query Language) Álgebra relacional → orden de las operaciones • SQL: lenguaje declarativo → • – Se indica cuál es el resultado esperado – Permite que el SGBD seleccione las operaciones y el orden más adecuados para obtener el resultado: optimización SGBD comerciales → son variantes de SQL • • Estándares SQL: SQL1 1986, SQL2 1992, SQL3 (extiende SQL2 con conceptos de BD y OO) • SQL: – Lenguaje de Definición de Datos (LDD) – Lenguaje de Manipulación de Datos (LMD): consulta y actualización – Definición de vistas – Especificación de seguridad y autorización – Definición de restricciones de integridad – Especificación de control de transacciones – Reglas para inclusión en lenguajes (C, PASCAL,...) • Nos centraremos en SQL2 SQL Mod. Relacional Tabla Relación Fila Tupla Columna Atributo FBD Tema 5 – Dpto. LSI - Donostia 2
  • 3. Esquema y catálogo en SQL2 • Esquema de BD: el término se incorporó en SQL2 CREATE SCHEMA Nombre [AUTHORIZATION Usuario]; Cuenta propietaria del esquema • Catálogo del SGBD: colección de esquemas en un entorno SQL Catálogo del SGBD Esquema 1 Esquema 2 INFORMATION _SCHEMA Tablas ... Restricciones Elementos Vistas de un esquema Dominios Autorizaciones Esquema especial que da a los usuarios autorizados información de todos los esquemas del catálogo del SGBD – RI: sólo entre relaciones del mismo catálogo del SGBD – Esquemas del catálogo del SGBD: pueden compartir elementos (por ejemplo dominios) FBD Tema 5 – Dpto. LSI - Donostia 3
  • 4. Instrucción CREATE TABLE Fig 8.1(a) No pueden tomar valor nulo CREATE TABLE DEPARTAMENTO Atributos Atributos ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, Clave primaria Restricciones Restricciones Integridad de entidades PRIMARY KEY(NUMEROD), Clave candidata UNIQUE(NOMBRED), FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ); Clave extranjera (o externa) Fig 8.1(b) Atributos Valor por Atributos CREATE TABLE DEPARTAMENTO defecto ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL DEFAULT ‘888665555’, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, (con nombre) Restricciones (connombre) Restricciones CONSTRAINT CLP_DPTO PRIMARY KEY(NUMEROD), CONSTRAINT CLS_DPTO UNIQUE(NOMBRED), CONSTRAINT CLE_JEFES_DPTO FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ON DELETE SET DEFAULT ON UPDATE CASCADE ); Acciones: a realizar en caso de borrado (ON DELETE) o modificación (ON UPDATE) del valor referenciado Constraint: se pone nombre a la Opciones: RI, para poder • CASCADE cambiarla o • SET DEFAULT eliminarla con • SET NULL ALTER y • RESTRICT (no poner ON UPDATE – ON DELETE) DROP FBD Tema 5 – Dpto. LSI - Donostia 4
  • 5. Tipos de datos en SQL2 Fecha: Enteros de diversos tamaños: – DATE – INTEGER / INT – Sólo admite fechas válidas – SMALLINT – Generalmente YYYY-MM- Reales: DD – FLOAT – Componentes: YEAR, – REAL MONTH, DAY – DOUBLE PRECISION Hora: Números con formato: – TIME(i) – NUMERIC(i,j) – Sólo admite horas válidas – DECIMAL(i,j) / DEC(i,j) – Normalmente HH-MM-SS – i dígitos enteros y j dígitos – Componentes: HOUR, decimales MINUTE, SECOND – Por defecto: i según la – i = posiciones de fracciones implementación, j=0 de sg. Cadena de caracteres de longitud Hora con desplazamiento de huso fija: horario: – CHAR(n) – TIME WITH TIME ZONE – CHARACTER(n) – +13:00 a -12:59 Cadena de caracteres de longitud – Sin ‘WITH TIME ZONE’: variable: huso local de la sesión – CHARACTER Marca de tiempo: VARYING(n) – TIMESTAMP [WITH – VARCHAR(n) TIME ZONE] – CHAR VARYING(n) – Componentes: DATE, TIME – n=máximo definido. Por y mínimo 6 posiciones de defecto n=1 fracciones de sg. Cadena de bits de longitud fija: Intervalo de tiempo: – BIT(n) – INTERVAL – n = número de bits – valor relativo (de tiempo) – Por defecto n=1 para incrementar o decrementar a un valor de Cadena de bits de longitud fecha, hora o marca de variable: tiempo – BIT VARYING(n) – Se pueden calificar con – n=máximo definido. Por YEAR/MONTH o defecto n=1 DAY/TIME (unidad mayor/unidad menor) FBD Tema 5 – Dpto. LSI - Donostia 5
  • 6. Dominios en SQL2 • Un dominio es un tipo de datos definido por el usuario CREATE DOMAIN TIPO_NSS AS CHAR(9); • En CREATE TABLE se pueden usar para definir atributos: CREATE TABLE EMPLEADO ( NSS TIPO_NSS NOT NULL, ... • DEFAULT: – CREATE DOMAIN TIPO_NSS AS CHAR(9) DEFAULT ‘987654321’; – Valor por defecto de los atributos declarados con ese dominio – si no se especifica ‘DEFAULT’ el valor por defecto es NULL FBD Tema 5 – Dpto. LSI - Donostia 6
  • 7. CREATE TABLE: especificación de restricciones y valores por omisión • Definición de atributos: no se permite que el atributo tome valor nulo – NOT NULL: un-valor: se indica qué valor tomará el atributo – DEFAULT si no se le asigna nada. Si no se indica DEFAULT, el valor por defecto es el valor nulo • Especificación de restricciones (tras las definiciones de atributo): – PRIMARY KEY: clave primaria – UNIQUE: clave candidata – FOREIGN KEY: clave extranjera • Se puede calificar con: – ON DELETE: en caso de borrarse la tupla a la que se hace referencia con un valor de la clave extranjera – ON UPDATE: en caso de modificarse el valor de clave primaria al que se hace referencia con el valor de clave extranjera CREATE TABLE DEPARTAMENTO ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL DEFAULT 1, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, PRIMARY KEY(NUMEROD), UNIQUE(NOMBRED), FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ON UPDATE CASCADE ON DELETE SET NULL ); FBD Tema 5 – Dpto. LSI - Donostia 7
  • 8. CREATE TABLE: especificación de restricciones y valores por omisión (2) FOREIGN KEY (clave extranjera): • Acciones posibles (en ON DELETE / ON UPDATE): – SET NULL: el valor de clave extranjera en cuestión se sustituye por el valor nulo – SET DEFAULT: el valor de clave extranjera en cuestión se sustituye por el valor por defecto del atributo clave extranjera – CASCADE: en caso de ON DELETE se borran las tuplas que hacen referencia a la tupla que desaparece. En caso de ON UPDATE se aplica la misma modificación en las claves extranjeras que la realizada sobre la clave primaria a la que hacen referencia. CASCADE es adecuada para: • vínculos (TRABAJA_EN) • atributos multivaluados (LOCALIZACIONES_DEPT) • tipos de entidad débiles (DEPENDIENTE) – RESTRICT (cuando NO se pone ON DELETE / ON UPDATE): impide el borrado (si falta ON DELETE) o la modificación (si falta ON UPDATE) de cualquier tupla referenciada desde un valor de la clave extranjera en cuestión. CREATE TABLE DEPARTAMENTO ( NOMBRED VARCHAR(15) NOT NULL, NUMEROD INT NOT NULL DEFAULT 1, NSS_JEFE CHAR(9) NOT NULL, FECHA_INIC_JEFE DATE, PRIMARY KEY(NUMEROD), UNIQUE(NOMBRED), FOREIGN KEY(NSS_JEFE) REFERENCES EMPLEADO(NSS) ON UPDATE CASCADE ON DELETE SET NULL ); FBD Tema 5 – Dpto. LSI - Donostia 8
  • 9. Borrar esquemas (DROP SCHEMA) y borrar tablas (DROP TABLE) • Borrar un esquema completo: DROP SCHEMA EMPRESA CASCADE – RESTRICT:borra el esquema sólo si NO contiene ningún elemento – CASCADE: borra el esquema y todos sus contenidos • Borrar una tabla de un esquema: DROP TABLE DEPENDIENTE CASCADE – RESTRICT: borra la tabla sólo si NO existen referencias a la misma: – Desde claves externa de otra tabla – Desde alguna vista – CASCADE: borra tabla y todas las restricciones (constraints) y vistas donde haya referencias a ésta FBD Tema 5 – Dpto. LSI - Donostia 9
  • 10. Evolución del esquema: columnas (ALTER TABLE) • Añadir columnas: ALTER TABLE EMPRESA.EMPLEADO ADD PUESTO VARCHAR(12); – En las tuplas existentes se asignan valores NULL. Alternativas: definir DEFAULT o introducir valores con la orden UPDATE (se estudiará más adelante) – NOT NULL no está permitido • Borrar columnas: ALTER TABLE EMPRESA.EMPLEADO DROP DIRECCIÓN CASCADE; borra también las restricciones – CASCADE (constraints) y vistas que hagan referencia a la columna (DIRECCIÓN) sólo borra la columna (DIRECCIÓN) si no – RESTRICT hay restricciones ni vistas que le hagan referencia • Modificar la definición de columnas: ALTER TABLE EMPRESA.DEPARTAMENTO ALTER NSS_JEFE DROP DEFAULT; ALTER TABLE EMPRESA.DEPARTAMENTO ALTER NSS_JEFE SET DEFAULT ‘333445555’; – Elimina la definición DEFAULT ‘888665555’ – Inserta una nueva definición de DEFAULT para el atributo NSS_JEFE FBD Tema 5 – Dpto. LSI - Donostia 10
  • 11. Evolución del esquema: restricciones (constraints) (ALTER TABLE) • Borrar restricciones: ALTER TABLE EMPRESA.EMPLEADO DROP CONSTRAINT CLE_SUPERV_EMP; – Es preciso haberle dado un nombre con CONSTRAINT en la definición (por ejemplo en CREATE TABLE) • Añadir restricciones: ALTER TABLE EMPRESA.EMPLEADO ADD CONSTRAINT CLE_SUPERV_EMP FOREIGN KEY (NSS_SUPERV) REFERENCES EMPLEADO(NSS) ON DELETE SET NULL ON UPDATE CASCADE; FBD Tema 5 – Dpto. LSI - Donostia 11
  • 12. OPERACIONES DE ACTUALIZACIÓN INSERT A1: INSERT INTO EMPLEADO VALUES (‘Richard’, ‘K’, ‘Marini’, ‘653298653’, ‘1962-12-30’, ’98 Oak Forest, Katy, TX’, ‘H’, 37000, ‘987654321’, 4) – Mismo orden en el que se especificaron los atributos en CREATE TABLE A1A: INSERT INTO EMPLEADO(NOMBRE, APELLIDO, NSS) VALUES (‘Richard’, ‘Marini’, ‘653298653’) – Así los atributos con valor NULL o DEFAULT se pueden omitir – Los valores de VALUES en el mismo orden que se especifican los atributos en INSERT INTO – También se pueden incluir varias tuplas en la misma instrucción: INSERT ... INTO ... VALUES (tupla1), (tupla2), ... (tuplaN) A2:INSERT INTO EMPLEADO (NOMBRE, APELLIDO, NSS, ND) VALUES (‘Robert’, ‘Hatcher’, ‘980760540’, 2) – Rechazada por la inexistencia del departamento número 2 A2A: INSERT INTO EMPLEADO (NOMBRE, APELLIDO, ND) VALUES (‘Robert’, ‘Hatcher’, 5) – Rechazada por no proporcionar valor para NSS (clave primaria: NOT NULL) FBD Tema 5 – Dpto. LSI - Donostia 12
  • 13. OPERACIONES DE ACTUALIZACIÓN INSERT (2) A3A: CREATE TABLE INFO_DEPTOS ( NOMBRE_DEPTO VARCHAR(15), NÚM_DE_EMPS INTEGER, SAL_TOTAL INTEGER); A3B: INSERT INTO INFO_DEPTOS (NOMBRE_DEPTO, NÚM_DE_EMPS, SAL_TOTAL) SELECT NOMBRED, COUNT (*), SUM(SALARIO) FROM DEPARTAMENTO INNER JOIN EMPLEADO ON NÚMEROD=ND GROUP BY NOMBRED; – Inserta varias tuplas (el resultado de la consulta) – Utilidad: tabla temporal donde realizar consultas • Sus datos pueden perder actualidad • Alternativa sin este problema: vista FBD Tema 5 – Dpto. LSI - Donostia 13
  • 14. OPERACIONES DE ACTUALIZACIÓN DELETE A4A: DELETE FROM EMPLEADO APELLIDO=‘Brown’ WHERE – Una sola tabla – WHERE: selección de tuplas a eliminar – El borrado se puede propagar (RI referencial) A4B: DELETE FROM EMPLEADO NSS=‘123456789’ WHERE A4C: DELETE FROM EMPLEADO ND IN WHERE (SELECT NÚMEROD FROM DEPARTAMENTO WHERE NOMBRED=‘Investigación’) A4D: DELETE FROM EMPLEADO – Sin WHERE se borran todas las tuplas (quedaría la tabla vacía) – Usando DROP TABLE se hubiera eliminado además la definición de la tabla FBD Tema 5 – Dpto. LSI - Donostia 14
  • 15. OPERACIONES DE ACTUALIZACIÓN UPDATE A5: UPDATE PROYECTO LOCALIZACIÓNP=‘Bellaire’, NÚMD=5 SET WHERE NÚMEROP=10 – Una sola tabla – WHERE: selección de tuplas a modificar – SET: atributos a modificar y nuevos valores – SET: el nuevo valor puede ser NULL o DEFAULT – Modificaciones de clave primaria pueden propagarse a clave/s extranjera/s (debido a las acciones declaradas en la RI, como CASCADE) A6: UPDATE EMPLEADO SALARIO=SALARIO*1.1 SET WHERE ND IN (SELECT NÚMEROD FROM DEPARTAMENTO WHERE NOMBRED= ‘Investigación’) – A la izda se refiere al nuevo valor de SALARIO – A la dcha al valor antiguo FBD Tema 5 – Dpto. LSI - Donostia 15
  • 16. Consultas básicas El temario de FBD NO cubre SELECT columnas El temario de FBD NO cubre todos los aspectos de SELECT. todos los aspectos de SELECT. FROM tablas En particular NO estudiaremos En particular NO estudiaremos [WHERE condición] SELECT anidados SELECT anidados • Fecha de nacimiento y dirección de John Smith EMPLEADO ... NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN ... SEXO SALARIO NSS_SUPERV ND πFECHA_NCTO, DIRECCIÓN (1) C0: SELECT FECHA_NCTO, DIRECCIÓN FROM EMPLEADO WHERE NOMBRE=‘John’ AND (1) = σNOMBRE=‘John’ Y APELLIDO=‘Smith’(EMPLEADO) APELLIDO=‘Smith’ – Secuencia σ- π – Condiciones en WHERE: {=, <>, <, >, <=, >=}, AND, OR, NOT El resultado de una tuplas repetidas consulta SQL puede contener ... FBD Tema 5 – Dpto. LSI - Donostia 16
  • 17. Consultas básicas (2) • Nombre y dirección de los empleados del departamento de Investigación EMPLEADO ... NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN ... SEXO SALARIO NSS_SUPERV ND DEPARTAMENTO NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE πNOMBRE, APELLIDO, DIRECCIÓN (2) C1: SELECT NOMBRE, APELLIDO, DIRECCIÓN FROM EMPLEADO, DEPARTAMENTO WHERE NOMBRED=‘Investigación’ AND NÚMEROD=ND (2) = σNOMBRED=‘Investigación’ (1) (1) = DEPARTAMENTO |×|NÚME- ROD=ND EMPLEADO – Secuencia: |×| - σ - π de σ y |×| – WHERE:condiciones FBD Tema 5 – Dpto. LSI - Donostia 17
  • 18. Consultas básicas (3) • Nº de proyecto, nº de departamento que lo controla, apellido, dirección y fecha de nacimiento del jefe del departamento, de todos los proyectos realizados en ‘Stafford’ EMPLEADO ... NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN DEPARTAMENTO NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE PROYECTO NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD 4 πNÚMEROP, NÚMD, APELLIDO, DIRECCIÓN, FECHA_NCTO (JEFE_DP_PR) C2: SELECT NÚMEROP, NÚMD , APELLIDO, DIRECCIÓN, FECHA_NCTO FROM PROYECTO, DEPARTAMENTO, EMPLEADO WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND LOCALIZACIÓNP=‘Stafford’ 1 PR_STF ← σLOCALIZACIÓNP=‘Stafford’(PROYECTO) 2 DP_CN← 3 PR_STF |×|NÚMD=NÚME- JEFE_DP_PR← DP_CN |×| NSS_JEFE ROD DEPARTAMENTO = NSS EMPLEADO FBD Tema 5 – Dpto. LSI - Donostia 18
  • 19. Calificar atributos • Nombre, apellido y dirección de los empleados del departamento de investigación C1A:SELECT EMPLEADO.NOMBRE, APELLIDO, DIRECCIÓN EMPLEADO, DEPARTAMENTO FROM WHERE DEPARTAMENTO.NOMBRE = ‘Investigación’ AND DEPARTAMENTO.NÚMEROD=EMPLEADO.NÚMEROD EMPLEADO ... NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN ... SEXO SALARIO NSS_SUPERV NÚMEROD DEPARTAMENTO NOMBRE NÚMEROD NSS_JEFE FECHA_INIC_JEFE – Con EMPLEADO.NOMBRE se distingue el atributo de la tabla EMPLEADO del atributo NOMBRE de la tabla DEPARTAMENTO NOMBRE FBD Tema 5 – Dpto. LSI - Donostia 19
  • 20. Alias • Nombre y apellido de cada empleado junto al nombre y apellido de su supervisor EMPLEADO S ... NSS_SUPERV ND NOMBRE INIC APELLIDO NSS FECHA_NCTO EMPLEADO E ... NSS_SUPERV ND NOMBRE INIC APELLIDO NSS FECHA_NCTO C8: SELECT E.NOMBRE, E.APELLIDO, S.NOMBRE, S.APELLIDO Uso de alias FROM EMPLEADO E, EMPLEADO S WHERE E.NSS_SUPERV=S.NSS Declaración de alias Uso de alias – Admite varias referencias a una misma tabla (útil para consultas recursivas de un nivel) – E y S representan dos copias diferentes de la tabla EMPLEADO, pero no hay más que una copia de EMPLEADO en la BD • Para cambiar los nombres de atributo: FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR, SEX, SAL, NSSS, ND), ... • Se pueden usar alias aunque no haya varias referencias a una misma tabla→ para manejar nombres más cortos • Por ejemplo, C1A se puede escribir: C1B:SELECT E.NOMBRE, E.APELLIDO, E.DIRECCIÓN FROM EMPLEADO E, DEPARTAMENTO D WHERE D.NOMBRE = ‘Investigación’ AND D.NÚMEROD=E.NÚMEROD FBD Tema 5 – Dpto. LSI - Donostia 20
  • 21. Omisión de WHERE • Indica selección de tuplas incondicional • Equivale a WHERE TRUE • Producto cartesiano: sin WHERE y más de una relación en FROM • NSS de todos los empleados: C9: SELECT NSS FROM EMPLEADO • Combinaciones posibles de NSS de empleados con nombres de departamento: C10: SELECT NSS, NOMBRED FROM EMPLEADO , DEPARTAMENTO • Es importante especificar todas las condiciones de σ y |×| en WHERE ya que el resultado puede ser una tabla incorrecta y de gran tamaño FBD Tema 5 – Dpto. LSI - Donostia 21
  • 22. SELECT * • Selecciona todos los atributos de las tablas de FROM C1C:SELECT * FROM EMPLEADO WHERE ND=5 C1D:SELECT * FROM EMPLEADO, DEPARTAMENTO WHERE NOMBRED=‘Investigación’ AND ND=NÚMEROD C10A:SELECT * FROM EMPLEADO, DEPARTAMENTO • También se puede usar en SELECT la calificación de atributos con *. Ejemplo: EMPLEADO.* FBD Tema 5 – Dpto. LSI - Donostia 22
  • 23. DISTINCT y ALL Poner SELECT ALL es lo C11:SELECT ALL SALARIO mismo que poner sólo SELECT (sin DISTINCT) FROM EMPLEADO • SQL NO elimina automáticamente tuplas repetidas porque: – Es una operación costosa: ordenar+eliminar duplicados – El usuario puede desear ver las tuplas repetidas – Usando funciones agregadas suele interesar no eliminarlos. Ejemplo: al calcular el salario medio, NO interesa considerar únicamente los valores de salario diferentes entre sí C11:SELECT DISTINCT SALARIO FROM EMPLEADO • Si sólo nos interesan los salarios distintos SELECT DISTINCT SALARIO, APELLIDO FROM EMPLEADO • En el resultado: – Puede haber dos filas con el mismo salario. – No puede haber dos filas con igual salario y apellido FBD Tema 5 – Dpto. LSI - Donostia 23
  • 24. UNION y UNION ALL INTERSECT e INTERSECT ALL EXCEPT y EXCEPT ALL • En SQL existen las operaciones UNION (∪), INTERSECT (∩) y EXCEPT (resta). • Por defecto las tuplas repetidas se eliminan del resultado • Usando UNION ALL se conservan las repeticiones • Se exige compatibilidad de unión (ver en tema anterior) • Números de proyecto donde participa Smith como trabajador o como jefe del departamento controlador: C4: SELECT NUMEROP PROYECTO, DEPARTAMENTO, EMPLEADO FROM WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND APELLIDO=‘Smith’ UNION SELECT NP TRABAJA_EN, EMPLEADO FROM WHERE NSSE=NSS AND APELLIDO=‘Smith’ FBD Tema 5 – Dpto. LSI - Donostia 24
  • 25. Comparar subcadenas (LIKE en WHERE) • Empleados que viven en Houston, Texas: C12: SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE DIRECCIÓN LIKE ‘%Houston, TX%’ – Compara parte de una cadena de caracteres (DIRECCIÓN) – % sustituye a un nº arbitrario de caracteres – _ sustituye a un solo carácter • Empleados que nacieron en la década de 1950: C12A: SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE FECHA_NCTO LIKE ’195_ _ _ _ _ _ _’ FBD Tema 5 – Dpto. LSI - Donostia 25
  • 26. Operaciones aritméticas: ‘+’, ‘-’, ‘*’, ‘/’ y operación de concatenación: ‘||’ • Nombre y salario de los empleados que trabajan en ‘ProductoX’ tras aumentarles el sueldo un 10% : C13: SELECT NOMBRE, APELLIDO, 1.1*SALARIO FROM EMPLEADO, TRABAJA_EN, PROYECTO WHERE NSS=NSSE AND NP=NÚMEROP AND NOMBREP=‘ProductoX’ – ‘+’, ‘-’,’*’ y ‘/’ son operadores aritméticos – ‘||’ concatena cadenas de caracteres. Ejemplo: SELECT ‘Nombre=‘ || NOMBRE – ‘+’, ‘-’ también sirven para sumar/restar a una fecha, hora o marca de tiempo, un intervalo compatible – Se puede calcular un intervalo como la diferencia entre fechas, horas o marcas de tiempo ¿Qué produce 1.1 * SALARIO cuando SALARIO vale NULL? FBD Tema 5 – Dpto. LSI - Donostia 26
  • 27. Ordenación de tuplas (ORDER BY) • Empleados y proyectos donde trabajan, ordenados por departamento y, dentro de cada departamento, ordenados alfabéticamente por apellido y nombre : C15: SELECT NOMBRED, APELLIDO, NOMBRE, NOMBREP FROM DEPARTAMENTO, EMPLEADO, TRABAJA_EN, PROYECTO WHERE NÚMEROD=ND AND NSS=NSSE AND NP=NÚMEROP ORDER BY NOMBRED, APELLIDO, NOMBRE – Por defecto, el orden es ascendente – DESC indica orden descendente – ASC indica orden ascendente NOMBRED DESC, APELLIDO ASC, ORDER BY NOMBRE ASC FBD Tema 5 – Dpto. LSI - Donostia 27
  • 28. Operador BETWEEN y conjuntos explícitos de valores Operador BETWEEN: • Información de los empleados del departamento 5 cuyo salario está entre 30.000 y 40.000 C14: SELECT * FROM EMPLEADO WHERE (SALARIO BETWEEN 30000 AND 40000) AND ND=5 – La condición de WHERE es equivalente a: SALARIO >= 30000 AND SALARIO <= 40000 AND ND=5 Conjuntos explícitos de valores: • NSS de los empleados que trabajan en los proyectos 1, 2 o 3 C17: SELECT DISTINCT NSSE FROM TRABAJA_EN WHERE NP IN (1,2,3) – El conjunto explícito se encierra entre paréntesis • La consulta anterior utilizando BETWEEN: C14’: SELECT DISTINCT NSSE FROM TRABAJA_EN WHERE NÚMP BETWEEN 1 AND 3 FBD Tema 5 – Dpto. LSI - Donostia 28
  • 29. IS NULL e IS NOT NULL • Nombre y apellido de empleados sin supervisores C18: SELECT NOMBRE, APELLIDO FROM EMPLEADO WHERE NSS_SUPERV IS NULL – En lugar de = y ≠ se usa IS e IS NOT – SQL considera el valor nulo de diferente forma – Las tuplas con valores nulos en el atributo de reunión no se incluyen en el resultado (salvo en reunión externa) • Si pusiera WHERE NSS_SUPERV = NULL – Para las filas con NSS_SUPERV nulo se estaría comparando si NULL = NULL – Esta comparación NO devuelve cierto – Tampoco devuelve falso – La comparación devuelve NULL (UNKNOWN) Una condición puede NO verificarse por FALSE o por NULL • Cualquier cosa operada con NULL devuelve NULL (UNKNOWN) FBD Tema 5 – Dpto. LSI - Donostia 29
  • 30. Renombrar atributos del resultado con AS C8A: SELECT E.APELLIDO AS NOMBRE_EMPLEADO, S.APELLIDO AS NOMBRE_SUPERVISOR FROM EMPLEADO AS E, EMPLEADO AS S WHERE E.NSS_SUPERV = S.NSS – Cambia el nombre de cualquier columna (atributo) que aparezca en el resultado – Antes hemos visto que la construcción AS también sirve para declarar alias de tablas: SQL1 EMPLEADO E, ... FROM SQL2 EMPLEADO AS E, ... FROM SQL2 FROM EMPLEADO AS E(NP, IN, AP, NSS, FN, DIR, SEX, SAL, NSSS, ND), ... FBD Tema 5 – Dpto. LSI - Donostia 30
  • 31. Tablas combinadas (INNER y NATURAL JOIN en FROM) • Nombre y dirección de los empleados del departa- mento de Investigación C1: SELECT NOMBRE, APELLIDO, DIRECCIÓN FROM EMPLEADO, DEPARTAMENTO WHERE NOMBRED=‘Investigación’ AND ND=NÚMEROD C1A: SELECT NOMBRE, APELLIDO, DIRECCIÓN FROM (EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NÚMEROD) WHERE NOMBRED=‘Investigación’ – Este concepto se incorporó a SQL2 – La consulta se entiende más fácilmente, al evitar la mezcla de condiciones de |×| y σ en el WHERE – Se pueden especificar diferentes tipos de reunión: INNER JOIN (o JOIN) y NATURAL JOIN – También de reunión externa (que este curso NO usaremos): OUTER JOIN, LEFT [OUTER] JOIN, RIGHT [OUTER] JOIN y FULL [OUTER] JOIN – NO se pueden definir alias de tablas combinadas: FROM (EMPLEADO INNER JOIN DEPARTAMENTO AS ED ... ON ND=NÚMEROD) FBD Tema 5 – Dpto. LSI - Donostia 31
  • 32. Tablas combinadas (2) (INNER y NATURAL JOIN en FROM) Uso de NATURAL JOIN: C1B: SELECT NOMBRE, APELLIDO, DIRECCIÓN FROM (EMPLEADO NATURAL JOIN (DEPARTAMEN- TO AS DEPTO (NOMBRED, ND, NSSG, FECHAIG))) WHERE NOMBRED=‘Investigación’ – Renombra DEPARTAMENTO.NÚMEROD por ND – condición de reunión implícita: EMPLEADO.ND = DEPARTAMENTO.ND Anidamiento de INNER y de NATURAL JOIN: C2: SELECT NÚMERO, NÚMD, APELLIDO, DIRECCIÓN, FECHA_NCTO FROM PROYECTO, DEPARTAMENTO, EMPLEADO WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND LOCALIZACIÓNP=‘Stafford’ C2A:SELECT NÚMEROP, NÚMD, APELLIDO, DIRECCIÓN FECHA_NCTO FROM (PROYECTO INNER JOIN DEPARTAMENTO ON NÚMD=NÚMEROD) INNER JOIN EMPLEADO ON NSS_JEFE=NSS WHERE LOCALIZACIÓNP=‘Stafford’ FBD Tema 5 – Dpto. LSI - Donostia 32
  • 33. Funciones agregadas y de agrupación COUNT (cuenta), SUM (suma), MAX (máximo), MIN • (mínimo), AVG (media) – El argumento de una función agregada puede ser una expresión: AVG(1.1*SALARIO) – MAX y MIN se pueden aplicar a atributos NO numéricos (con orden total en el dominio) • Suma de los salarios de todos los empleados, junto a los salarios máximo, mínimo y medio: C19: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO), AVG(SALARIO) FROM EMPLEADO DEPARTAMENTO EMPLEADO NOMBRED NÚMEROD NOMBREP SALARIO ND John 5 Investigación 5 NULL ... Franklin 15.000 5 Administración 4 Ramesh 10.000 5 ... ... Dirección 1 10.000 5 Joyce 10.000 4 Alicia 20.000 4 Jennifer SUM(SA- MAX(SA- MIN(SA- AVG(SAL- C19: 20.000 4 Ahmad LARIO) LARIO) LARIO) ARIO) 20.000 1 105.000 20.000 10.000 15.000 James FBD Tema 5 – Dpto. LSI - Donostia 33
  • 34. Funciones agregadas y de agrupación (2) • Suma de los salarios de los empleados del departamen- to de ‘Investigación’, junto a los salarios máximo, mínimo y medio del mismo: C20: SELECT SUM(SALARIO), MAX(SALARIO), MIN(SALARIO), AVG(SALARIO) FROM EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NÚMEROD WHERE NOMBRED=‘Investigación’ • Cuántos empleados hay en la compañía y cuántos en el departamento ‘Investigación’: **se refiere aatuplas C21: SELECT COUNT(*) se refiere tuplas FROM EMPLEADO C22: SELECT COUNT(*) FROM EMPLEADO INNER JOIN DEPARTAMENTO ON ND=NÚMEROD WHERE NOMBRED=‘Investigación’ DEPARTAMENTO EMPLEADO NOMBRED NÚMEROD NOMBREP SALARIO ND John 5 Investigación 5 NULL ... Franklin 15.000 5 Administración 4 Ramesh 10.000 5 ... ... Dirección 1 10.000 5 Joyce SUM(SA- MAX(SA- MIN(SA- AVG(SAL- 10.000 4 Alicia C20: LARIO) LARIO) LARIO) ARIO) 20.000 4 Jennifer 35.000 15.000 10.000 11.666 20.000 4 Ahmad 20.000 1 James 35.000 / / 3 35.000 3 C21: COUNT(*) C22: COUNT(*) 8 4 FBD Tema 5 – Dpto. LSI - Donostia 34
  • 35. Funciones agregadas y de agrupación (3) • Cuántos valores de salario diferentes hay: C23: SELECT COUNT(DISTINCT SALARIO) NO cuenta FROM EMPLEADO los valores nulos • Cuántos valores de salario hay (con repeticiones): Cuenta las filas con C23’: SELECT COUNT(SALARIO) salario NO nulo FROM EMPLEADO • Cuántos empleados hay: Cuenta todas las C23’’: SELECT COUNT(*) filas de la tabla FROM EMPLEADO EMPLEADO C23: COUNT(DISTINCT SALARIO) NOMBREP SALARIO ND 3 John 5 NULL Franklin 15.000 C23’: NULL Ramesh 10.000 5 ... ... COUNT( SALARIO) 10.000 5 Joyce 7 10.000 4 Alicia C23’’: 20.000 4 Jennifer COUNT( *) 20.000 4 Ahmad 8 20.000 1 James ¿Qué ocurre cuando todos los salarios valen NULL? ¿Qué ocurre cuando la tabla está vacía? FBD Tema 5 – Dpto. LSI - Donostia 35
  • 36. Atributos de agrupación: GROUP BY • Obtener cada número de departamento junto a su número de empleados y salario medio: C24: SELECT ND, COUNT(*), AVG(SALARIO) FROM EMPLEADO GROUP BY ND – En GROUP BY está el/los atributo/s de agrupación – NO confundir GROUP BY y ORDER BY (que ordena) – Todos los atributos de SELECT deben estar en GROUP BY – Los atributos de GROUP BY no es obligatorio que estén en SELECT – Se suelen poner en SELECT algunos/todos los de GROUP BY C24: EMPLEADO ND COUNT(*) AVG(SALARIO) NOMBREP SALARIO ND 5 4 16.250 John 30.000 5 4 3 16.666 Franklin 15.000 5 1 1 20.000 Ramesh 10.000 5 ... ... 10.000 5 Joyce Fig. 8.4 (a) 10.000 4 Alicia 20.000 4 Jennifer Los valores 20.000 4 Ahmad nulos forman su 20.000 1 James propio grupo EMPLEADO C24: ND COUNT(*) AVG(SALARIO) NOMBREP SALARIO ND 2 10 Jon NULL NULL NULL 5 2 10 Juan 10 NULL Rosa 10 5 ... ... Ana 10 5 FBD Tema 5 – Dpto. LSI - Donostia 36
  • 37. Atributos de agrupación: GROUP BY (2) • Obtener por cada proyecto su número y nombre junto al número de empleados que trabajan en él C25: SELECT NÚMEROP, NOMBREP, COUNT(*) FROM PROYECTO INNER JOIN TRABAJA_EN ON NÚMEROP=NP Agrupación por varios atributos GROUP BY NÚMEROP, NOMBREP NP HORAS NOMBREP NÚMEROP PROYECTO 1 32.5 ProductoX 1 INNER JOIN 1 20.0 ProductoX 1 TRABAJA_EN 2 7.5 ProductoY 2 ON 2 20.0 ProductoY 2 NÚMEROP=NP : 2 10.0 ProductoY 2 3 40.0 ProductoZ 3 3 10.0 ProductoZ 3 ... 10 10.0 Automatización 10 10 10.0 Automatización 10 10 35.0 Automatización 10 20 10.0 Reorganización 20 20 15.0 Reorganización 20 20 nulo Reorganización 20 30 5.0 Nuevos beneficios 30 30 20.0 Nuevos beneficios 30 30 30.0 Nuevos beneficios 30 NÚMEROP NOMBREPR COUNT(*) C25: 1 ProductoX 2 2 ProductoY 3 3 ProductoZ 2 10 Automatización 3 20 Reorganización 3 30 Nuevos beneficios 3 En C25, ¿se puede eliminar NOMBREP del GROUP BY? FBD Tema 5 – Dpto. LSI - Donostia 37
  • 38. GROUP BY con ORDER BY • Obtener por cada proyecto su número y nombre junto al número de empleados que trabajan en él, ordenado ascendentemente por el número de empleados C25’: SELECT NÚMEROP, NOMBREP, COUNT(*) FROM PROYECTO INNER JOIN TRABAJA_EN ON NÚMEROP=NP GROUP BY NÚMEROP, NOMBREP ORDER BY COUNT(*) ASC • Si se renombran los atributos del resultado con AS, el nuevo nombre NO se puede usar en ORDER BY (en general, no sólo con funciones agregadas): C25’: SELECT NÚMEROP, NOMBREP, COUNT(*) AS NUM_EMP FROM PROYECTO INNER JOIN TRABAJA_EN ON NÚMEROP=NP GROUP BY NÚMEROP, NOMBREP ORDER BY NUM_EMP ASC NO se puede usar el nuevo nombre (AS) del atributo del resultado en ORDER BY FBD Tema 5 – Dpto. LSI - Donostia 38
  • 39. Constructor de valor de tupla • Una sola comparación incluye todos los valores de dos tuplas: WHERE (NOMBRE,EDAD,ESTADO_CIVIL) = (“José María”, 18, ‘S’) WHERE NOMBRE= “José María” AND EDAD=18 AND ESTADO_CIVIL=‘S’ WHERE (C1, C2, C3) < (T1, T2, T3) WHERE C1<T1 OR (C1=T1 AND C2<T2) OR (C1=T1 AND C2=T2 AND C3<T3) FBD Tema 5 – Dpto. LSI - Donostia 39
  • 40. Análisis de consultas SQL También hay SELECT <atributos y funciones> HAVING, que FROM <tablas> este curso no [WHERE <condición>] estudiaremos [GROUP BY <atributos agrupación>] [ORDER BY <atributos ordenación>] • Una consulta SQL se evalúa conceptualmente así: – Primero FROM, seguido de WHERE, en tercer lugar GROUP BY y por último ORDER BY – Si no hay GROUP BY ni ORDER BY, para cada combinación de tuplas (una de cada tabla de FROM), se evalúa la condición de WHERE. Si es cierta se colocan en el resultado los valores correspondientes a los atributos del SELECT. – Esta NO es una forma eficiente de implementar una consulta SQL. Así pues, cada SGBD tiene rutinas para optimizar la evaluación. FBD Tema 5 – Dpto. LSI - Donostia 40
  • 41. Análisis de consultas SQL (2) • En SQL hay varias alternativas para especificar la misma consulta : – Ventaja: el programador elige la técnica que le resulte más cómoda. – Desde el punto de vista de optimización de consultas, conviene que las consultas tengan el menor anidamiento y el menor ordenamiento implícito posible. – Desventaja: el programador puede desconocer cuál es la técnica más eficiente en cada caso – Idealmente, el SGBD debería procesar la consulta de la misma manera sin importar cómo se haya escrito. – En la práctica esto resulta muy difícil, y es conveniente que el usuario sea consciente de qué construcciones tienen un costo más elevado que otras. FBD Tema 5 – Dpto. LSI - Donostia 41
  • 42. Características adicionales de SQL • Especificación de vistas (CREATE VIEW) • Especificación de restricciones de integridad generales (CREATE ASSERTION) • Concesión y revocación de privilegios (GRANT y REVOKE) • Sentencias SQL en lenguajes de programación: – Metodología para insertarlas. – Ligaduras con varios lenguajes de programación. – El concepto de cursor para recorrer el resultado de las consultas. • Instrucciones de control de transacciones. • Cada SGBD contará con un conjunto de instrucciones para especificar parámetros de diseño físico: – Se denomina LDA, o lenguaje de definición de almacenamiento – Las primeras versiones de SQL tenían instrucciones para crear índices, pero se eliminaron porque no aparecían en el nivel del esquema conceptual. • Operadores CASE, NULLIF, COALESCE, CAST FBD Tema 5 – Dpto. LSI - Donostia 42
  • 43. Ejercicios FBD Tema 5 – Dpto. LSI - Donostia 43
  • 44. Ejercicio: consultas SQL EMPRESA (8.13 (7.18) Elmasri/Navathe 02) Sobre el esquema de BD de la figura 7.7 (ver pg. siguiente): a) Empleados del departamento 5 que trabajan más de 10 horas/semana en el proyecto ‘Producto X’ b) Empleados con un dependiente con su mismo nombre de pila c) Empleados cuyo jefe directo es Franklin Wong d) Nombre de cada proyecto junto al número total de horas trabajadas por los empleados en él. e) Nombres de todos los empleados que trabajan en NO: división cada uno de los proyectos f) Empleados que no trabajan en ningún proyecto g) Nombre de cada departamento junto al salario medio de los empleados asignados al mismo h) Salario medio de las empleadas de la compañía i) Nombre y dirección de los empleados que trabajan en algún proyecto situado en Houston pero NO: anidados departamento no está situado allí j) Jefes de departamento sin dependientes 8.14 b) Número de empleados de sexo masculino de cada departamento FBD Tema 5 – Dpto. LSI - Donostia 44
  • 45. Ejercicio: consultas SQL EMPRESA (2) (8.13 Elmasri/Navathe 02) EMPLEADO ... NOMBRE INIC APELLIDO NSS FECHA_NCTO DIRECCIÓN ... SEXO SALARIO NSS_SUPERV ND DEPARTAMENTO NOMBRED NÚMEROD NSS_JEFE FECHA_INIC_JEFE LOCALIZACIONES_DEPT NÚMEROD LOCALIZACIÓND PROYECTO NOMBREP NÚMEROP LOCALIZACIÓNP NÚMD TRABAJA_EN NSSE NP HORAS DEPENDIENTE NSSE NOMBRE_DEPENDIENTE SEXO FECHA_NCTO PARENTESCO Figura 7.7 restricciones de integridad referencial representadas en el esquema de la base de datos relacional EMPRESA FBD Tema 5 – Dpto. LSI - Donostia 45
  • 46. Ejercicio: consultas SQL BIBLIOTECA (8.11 (7.23) Elmasri/Navathe 02) a) Número de copias de la tribu perdida en la sucursal de ‘Sharpstown’. b) Identificador de sucursal y número de copias del libro ‘La tribu Perdida’ en cada una de las sucursales. c) Lectores sin libros en préstamo. d) Título del libro, nombre y dirección del lector de los préstamos de la sucursal de ‘Sharpstown’ con fecha de devolución la de hoy. e) Por cada sucursal: nombre y total de ejemplares de libro en préstamo. f) Para los lectores con más de 5 libros en préstamo, NO: obtener su nombre, dirección y nº de libros. HAVING g) Por cada libro escrito (o coescrito) por ‘Stephen King’, obtener su título y el nº de copias en la sucursal ‘Central’. AUTORES_LIBROS LIBRO IdLibro Título NombreEditorial IdLibro NombreAutor COPIAS_LIBRO EDITORIAL Nombre Dirección Teléfono IdLibro IdSucursal NúmCopias PRÉSTAMOS IdLibro IdSucursal NúmTarjeta ... Figura 7.20: Esquema de BDR ... FechaSale FechaDevol para la BD SUCURSAL_BIBLIOTECA BIBLIOTECA IdSucursal NombreSucursal Dirección LECTOR NúmTarjeta Nombre Dirección Teléfono FBD Tema 5 – Dpto. LSI - Donostia 46
  • 47. Ejercicios consultas SQL BIBLIOTECA (2) h) Tiempo medio que duran los préstamos de libros (en conjunto). i) Tiempo medio que duraron los préstamos de libros (en conjunto) que se prestaron el año 2002. j) Número total de préstamos, número de socios de la biblioteca que han tomado libros en préstamo y número medio de libros que han tomado en préstamo los socios. k) Número medio de copias por libro de la biblioteca “central” (en conjunto) l) Número de socio junto al número de préstamos que ha tomado hasta el momento, ordenado por número de préstamos m) Identificador de libro junto al número de veces actualmente en préstamo n) Identificadores de cada libro y sucursal junto al número de veces que ha sido prestado el libro en la sucursal. o) Para cada libro: identificador de libro y número de autores. p) Para cada libro: título y número de autores. q) Para cada día del mes pasado en el que hubiera préstamos, número de libros distintos que se prestaron ese día. FBD Tema 5 – Dpto. LSI - Donostia 47
  • 48. Ejercicio: consultas SQL UNIVERSIDAD (8.16 Elmasri/Navathe 02) a) Nombres de los alumnos de 4º de la carrera ‘CC’ b) Nombre de los cursos impartidos por el profesor ‘King’ en los años 1998 y 99 c) Para cada sección impartida por el profesor ‘King’, obtener el número de curso, semestre, año y número de alumnos que se matricularon en esa sección. d) Nombre y boletín de notas de los alumnos de 5º de la carrera ‘CC’. El boletín incluye el nombre y número del curso, las horas-crédito, el semestre, el año y las notas de los cursos concluidos por el alumno. e) Nombre y carrera de los estudiantes calificados con nota ‘A’ en todos sus cursos. f) Nombre y carrera de los estudiantes que NO tengan nota ‘A’ en ningún curso. ALUMNO Nombre NúmAlumno Grado Carrera CURSO NombreCurso NúmCurso HorasCrédito Departamento REQUISITO NúmCurso NúmRequisito SECCION IdentSección NúmCurso Semestre Año Profesor INFORME_ CALIFICACIONES NúmAlumno IdentSección Nota FBD Tema 5 – Dpto. LSI - Donostia 48
  • 49. Ejercicio: consultas SQL BANCOS Sobre el esquema que aparece en la siguiente página: a) Código de banco y DNI de cliente, para todos aquellos clientes que tienen cuenta en más de una sucursal del banco, ordenada por código de banco y DNI b) Nombre de banco, número de sucursal, préstamo medio y número de TAE diferentes en la sucursal, ordenado descendentemente por préstamo medio. c) DNI y nombre de clientes que tienen solicitado algún préstamo igual o superior a 60.000 €, en sucursales de la calle Urbieta de Donostia d) Nombre del banco y media de los TAE ofrecidos en sus sucursales a clientes de Donostia, para aquellos bancos cuyo código comienza por ‘011’ y donde los préstamos sean de un importe superior a 60.000 €. El resultado deberá estar ordenado crecientemente por media de TAE. e) Todos los datos de clientes y código del banco donde tienen solicitado préstamo, para aquellos clientes que tengan algún préstamo en sucursales de Donostia pero que no tengan cuentas en el mismo banco donde tienen el préstamo. FBD Tema 5 – Dpto. LSI - Donostia 49
  • 50. Ejercicio: consultas SQL BANCOS (2) BANCO SUCURSAL Código Nombre Banco NúmSucursal Ciudad Dir CUENTA NúmCta Interés Saldo Banco NúmSucursal CLIENTE DNI Nombre Dir Tfno PRÉSTAMO NúmPrés TAE Importe Banco NúmSucursal CUENTA_CLIENTE PRÉSTAMO_CLIENTE NúmCta DNI NúmPrés DNI BDR correspondiente al esquema ER de la figura 3.17 Salvo que se ha añadido el atributo Ciudad a SUCURSAL y se ha cambiado el atributo Dir de BANCO a SUCURSAL FBD Tema 5 – Dpto. LSI - Donostia 50
  • 51. Ejercicio: consultas SQL BIBLIOTECA-2 (1,1) (0,N) EJEMPLAR ESTA_EN BIBLIOTECA (0,N) Día PRESTAMO FechaPréstamo Mes Año (0,N) SOCIO Puede haber varios ejemplares con el BIBLIOTECA COD_BIB FACULTAD TFNO BIBLIOTECARIA mismo título EJEMPLAR COD_EJE TÍTULO AUTOR EDITORIAL ÁREA COD_BIB SOCIO DNI NOM_SOCIO TFNO CIUDAD CARRERA PRÉSTAMO DNI COD_EJE DÍA MES AÑO DIAS_PRESTADO Escribe las siguientes consultas SQL sobre la BD anterior: a) Pares de títulos distintos del área de informática sacados en préstamo por el mismo socio. Posible salida: título título “Fundamentos de BD” “BD:, ¡Qué gozada!” “Fundamentos de BD” “SQL para novatos” “BD:, ¡Qué gozada!” “Fundamentos de BD” b) Lista de pares ordenados de bibliotecas que tengan ejemplares de libros de la misma área. Por ejemplo, si las bibliotecas A, B y C tienen libros de informática y las bibliotecas A y C de filosofía, deberán aparecer: <A,B,Informática>, <A,C,Informática>, <A,C,Filosofía>, <B,A,Informática>, <B,C,Informática>, ... FBD Tema 5 – Dpto. LSI - Donostia 51
  • 52. Ejercicio: definición y actualización SQL de ITINERARIOS Matricula Codigo Cod-bast VEHICULO PAIS Nombre Marca (0,N) (0,N) (1,1) (1,N) Moneda Clase V_I De P_C donde Fecha (1,N) (1,1) (1,1) (1,N) Cod-c Cod_iti A ITINERARIO CIUDAD donde Nombre Dieta (0,N) (1,N) Habit Por donde pasa Orden a) Completa las instrucciones de creación de la BD para el esquema ER anterior (ver páginas siguientes). b) Incluir el itinerario (111, 50000, 95, 141) que sale de Sevilla (95, quot;Sevillaquot;, 500000, 34) y llega a Friburgo (141, quot;Friburgoquot;, 300000, 49), pasando por Zaragoza (93, quot;Zaragozaquot;, 450000, 34), París (16, quot;Parísquot;, 6000000, 33) y Karlstadt (148, quot;Karlstadtquot;, 200000, 49). Los países correspondientes son España (34, quot;Españaquot;, quot;Pesetaquot;), Francia (33, quot;Franciaquot;, quot;Francoquot;) y Alemania (49, quot;Alemaniaquot;, quot;Marcoquot;). Ninguno de los datos está en la BD. c) Todos los itinerarios que pasan por Sevilla (solo pasar, no salir o llegar) se han desviado por Córdoba. Los datos de Córdoba (957, “Córdoba”, 134000, 34) no están en la BD. d) El vehículo con nº de bastidor 3 ha tenido un accidente y lo han llevado a la chatarra. Se ha cambiado el vehículo a los itinerarios donde figuraba por (345, quot;Renaultquot;, quot;BI-9999-XXquot;, quot;Expressquot;), que no está aún en la BD. FBD Tema 5 – Dpto. LSI - Donostia 52
  • 53. Ejercicio: definición y actualización SQL de ITINERARIOS (2) CREATE TABLE VEHICULO ( Cod-bast INTEGER NOT NULL, Marca VARCHAR (15), Matricula VARCHAR (8) NOT NULL, Clase VARCHAR (8), PRIMARY KEY (Cod-bast), UNIQUE (Matrícula)); CREATE TABLE PAIS ( Codigo INTEGER NOT NULL, Nombre VARCHAR (15) NOT NULL, Moneda VARCHAR (10), CREATE TABLE ITINERARIO ( Cod-iti INTEGER NOT NULL, Dieta INTEGER, Cod-dedonde INTEGER, Cod-adonde INTEGER, PRIMARY KEY (Cod-iti), FOREIGN KEY (Cod-dedonde) REFERENCES CIUDAD (Cod-c) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (Cod-adonde) REFERENCES CIUDAD (Cod-c) ON DELETE CASCADE ON UPDATE CASCADE); CREATE TABLE CIUDAD ( Cod-c INTEGER NOT NULL, Nombre VARCHAR (15) NOT NULL, Habit INTEGER, Codigo INTEGER, FBD Tema 5 – Dpto. LSI - Donostia 53
  • 54. Ejercicio: definición y actualización SQL de ITINERARIOS (3) CREATE TABLE VEHI-ITINE ( Cod-bast INTEGER NOT NULL, Cod-iti INTEGER NOT NULL, Fecha DATE, PRIMARY KEY (Cod-bast, Cod-iti), FOREIGN KEY (Cod-bast) REFERENCES VEHICULO (Cod-bast) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (Cod-iti ) REFERENCES ITINERARIO (Cod-iti) ON DELETE CASCADE ON UPDATE CASCADE); CREATE TABLE POR-DONDE ( Cod-iti INTEGER NOT NULL, Cod-c INTEGER NOT NULL, Orden INTEGER, FOREIGN KEY (Cod-c) REFERENCES CIUDAD (Cod-c) ON DELETE CASCADE ON UPDATE CASCADE); FBD Tema 5 – Dpto. LSI - Donostia 54
  • 55. Ejercicio: análisis de restricciones de integridad en BANCOS Analizar todas las R.I. violadas por cada operación cuando se ejecuta sobre la BD de la figura de la siguiente página: a) INSERT INTO CUENTA VALUES (7, 7, 20000, null, null) b) INSERT INTO CLIENTE VALUES (123, Pepi, null, null) c) INSERT INTO CUENTA-CLIENTE VALUES (4, null) d) INSERT INTO CUENTA VALUES (10, 4, 100000, 2, 3) e) DELETE FROM CLIENTE WHERE DNI=999 f) DELETE FROM CUENTA-CLIENTE WHERE NCta=0 and DNI>000 g) UPDATE CUENTA-CLIENTE SET NCta=5, DNI=111 WHERE NCta=0 and DNI=111 h) UPDATE CUENTA-CLIENTE SET NCta=3, DNI=222 WHERE NCta=0 UPDATE CLIENTE SET Nombre=‘Ataulfo A.’ WHERE i) DNI>888 UPDATE CUENTA SET Banco=2, NSuc=2 WHERE NCta=0 j) k) UPDATE CUENTA SET Banco=2 WHERE Banco=1 UPDATE CUENTA SET Banco=null, NSuc=null WHERE l) Banco=1 m) UPDATE CUENTA SET Banco=null WHERE NCta=3 FBD Tema 5 – Dpto. LSI - Donostia 55
  • 56. Ejercicio: análisis de restricciones de integridad en BANCOS (2) BANCO CLIENTE Código Nombre Dir DNI Nombre Dir Tfno 1 BBVA Gran Vía, 17 111 Juan Legazpi, 1 111111 2 Santander Espolón, 1 222 Pedro Guridi, 5 222222 2101 Kutxa Garibai, 6 333 Gaizka Lardizabal, 1 333333 2102 BBK Salaberría, 3 444 Luisa Nagusia, 2 444444 555 Ceferina Elkano, 3 555555 SUCURSAL 666 Yolanda Av. Madrid, 9 666666 Banco NSuc Ciudad 1 1 Bilbao 777 Segismundo H. Cortés, 9 777777 1 2 S. Sebastián 888 Ataulfo Cervantes, 1 888888 1 3 Vitoria 999 Teodorico Velázquez, 7 999999 2 1 Santander 000 Atenea Sorolla, 13 101010 2 2 S. Sebastián CUENTA 2101 1 S. Sebastián NCta Interés Saldo Banco NSuc 2101 2 Pasajes PRÉSTAMO- 1 1 20000 1 1 2102 1 Bilbao 2 1 30000 1 2 CLIENTE 2102 2 Sestao 3 1 40000 1 3 NPres DNI 0 111 2102 3 Portugalete 4 2 30000 2 1 0 000 5 2 40000 2 2 CE 1 111 6 3 50000 2101 1 CUENTA- 2 111 CLIENTE 7 3 60000 2101 2 NCta DNI 2 222 8 3 60000 2102 1 ... 0 111 3 111 9 4 70000 2102 2 0 222 6 111 3 333 0 4 80000 2102 3 0 555 6 222 4 111 CE CE PRÉSTAMO 0 000 6 333 4 444 NPres TAE Importe Banco NSuc 1 111 6 666 5 111 1 10 200000 1 1 2 111 7 111 5 555 2 10 300000 1 2 2 222 7 777 6 111 3 10 400000 1 3 3 111 8 111 6 666 4 20 300000 2 1 3 333 8 222 7 111 5 20 400000 2 2 4 111 8 444 7 777 6 30 500000 2101 1 4 222 8 888 8 111 7 30 600000 2101 2 4 444 9 111 8 888 8 30 600000 2102 1 5 111 9 333 9 111 9 40 700000 2102 2 5 555 9 999 9 999 0 40 800000 2102 3 ... CE CE CE CE CE CE FBD Tema 5 – Dpto. LSI - Donostia 56
  • 57. Junio 00 Nombre Características Especie NombreCientífico Origen Hábitat EsperanzaVida Mariposa NomEspecie DNI Nombre Dirección Tfno EsPrincipal Persona CódColección Código Ubicación PrecioEstimado Colección NombreCientífico Número Procedencia Tamaño CódColección Ejemplar Nombre Código MejorEjemplar EspecieColección NombreCientífico Color ColoresMariposa a) Obtener el nombre científico, hábitat y esperanza de vida de las mariposas de la colección de José Mari Poza ordenadas por esperanza de vida. Hay que asegurarse de que sólo se obtiene una tupla por mariposa (y no por cada ejemplar de la misma). b) Obtener el nombre científico y esperanza de vida de todas las mariposas que tienen algún ejemplar de mayor tamaño que el ejemplar número 5 de la mariposa con nombre científico Papilio macaon perteneciente a la colección de José Mari Poza. FBD Tema 5 – Dpto. LSI - Donostia 57
  • 58. Septiembre 00 ZonaUrbana NombreZona Categoría BloqueCasas Calle Número Npisos NombreZona M2 CasaParticular NombreZona Número M2 Piso Calle Número Planta Puerta DNI Nombre Edad NombreZona NúmCasa Calle NúmBloque Planta Puerta Persona DNI NombreZona NúmCasa PoseeC DNI Calle NúmBloque Planta Puerta PoseeP a) Obtener el DNI, nombre y edad de dueños de casas particulares, con la peculiaridad de que todas sus casas (las que posee) están situadas en una Zona Urbana cuya categoría es de “lujo”. b) Obtener DNI, nombre y edad de las personas que viven en un piso de menos m2 que algún piso que cumpla al mismo tiempo las dos condiciones siguientes: a) Esté situado en otro bloque distinto. b) Ese otro bloque pertenezca a una Zona Urbana de categoría “Residencial”. c) Obtener datos de los pisos habitados por personas de más de 60 años y situados en un Bloque de Casas que no supere los 10 pisos. Por cada piso queremos obtener la calle y número donde se encuentra, además de la siguiente información: – “Piso pequeño” si tiene menos de 50 m2 – “Piso mediano” si tiene entre 50 y 75 m2 – “Piso grande” si tiene más de 75 m2 FBD Tema 5 – Dpto. LSI - Donostia 58
  • 59. Junio 01 Artículo Nom Tipo Precio Tam Art año Art_Ingr NomArt NomIngr Ingrediente Nom Precio Sum Ingr inistrador Prd_Ingr NomArt NomPrd NomIngr Pedido NúmeroFechaHoraPedidoHoraServidoTfno Ped_Art Número NomArt Cantidad icilio Tfno Dirección Ped_Prd NúmeroNomArt NomPrd Cantidad Dom ProductoEspecial NomArt NomPrd a) Media de tiempo que se tarda en servir cada uno de los productos especiales a ser consumidos en el local (y no en el domicilio). b) Considera los artículos de tipo “pizza” que llevan “pimiento”. Se desea conocer todos los datos de productos especiales que se basan en tales artículos y llevan “champiñón” entre los ingredientes para el producto especial. c) Dirección de aquellos domicilios que hayan solicitado pedidos de artículos con precios superiores al artículo de nombre “Pizza 3 quesos” FBD Tema 5 – Dpto. LSI - Donostia 59
  • 60. Septiembre 01 Película CódigoTítuloGénero Producida Código Nombre Cine Nom Dirección Tfno Actor Código Nombre Persona Nom Sexo Nacionalidad bre Dirigida Código Nombre Prem Categoría Año Euros Código Proyectada Código Nom Número FechaInicioFechaFin io Sala Nom Núm Aforo ero PremPers Categoría Año Nombre a) Para cada película de género policiaco obtener su título y el número total de premios que se le han concedido. b) Nombres de los cines, con alguna sala de aforo igual o superior a 100 butacas, que no han proyectado la película premiada con la categoría “mejor actriz” del año 2001. c) Obtener los nombres de los distintos actores que han participado en películas dirigidas por una persona que haya conseguido el premio al “mejor director” del festival en alguna ocasión. Queremos los actores participantes en cualquier película dirigida por esa persona, no sólo en las premiadas al mejor director. FBD Tema 5 – Dpto. LSI - Donostia 60
  • 61. Junio 02 HOTEL Código_H Nombre Dirección Teléfono Código_E NºHabitaciones ÁRBITROCódigo_E1Código_E2 Fecha Árbitro EQUIPO Código_E País Camiseta Total_Goles CLUBES_AÑO DNI Club JUGADOR DNI Nombre FechaN Goles Código_E PARTIDO Código_E1 Código_E2 Fecha Resultado CONTROL_ANTIDOPAJE DNI Fecha Lugar a) Buscando casualidades que se hayan producido en el mundial, deseamos obtener los nombres de aquellos jugadores (JUGADOR.Nombre contiene el nombre seguido del apellido) cuyo nombre de pila comience por “Carlos” y se hayan hospedado en el hotel del mismo nombre (“Carlos”), además de los nombres de aquellos jugadores que cumplían años el día de la inauguración (el 31/05/2002). b) Mostrar, junto al nombre de cada país participante en el mundial, el número total de sus jugadores que hayan pasado al menos un control antidopaje. Téngase en cuenta que un mismo jugador ha podido pasar varios controles y deseamos contar el número de jugadores (NO el número de controles realizados a los jugadores de un país). Se desea que el resultado quede ordenado alfabéticamente por nombre de país de forma descendente. c) Para aquellos equipos tales que entre dos de sus jugadores hayan marcado más de la mitad de los goles totales del equipo, se desea obtener el código del equipo, los nombres de ambos jugadores, el total de goles del equipo y los goles que ha marcado cada uno de los dos jugadores. No queremos que una misma pareja de jugadores aparezca repetida en el resultado (el primer jugador deberá ser menor alfabéticamente que el segundo). Por ejemplo: a) ESP, Gaizka Mendieta, Raul González, 25, 10, 5 b) FRA, Francois Republique, Zinedine Zidane, 24, 9, 9 FBD Tema 5 – Dpto. LSI - Donostia 61
  • 62. Septiembre 02 P E L C ueblo N bre U B O ód_P om Provincia C N R C entro N bre D E T O ód_C om irección P R D C ueblo Calle AT BS Matrícula N sientos C pañía C entro _A om A A A ód_P UOÚ ód_C AU N DI L MO N N bre C entro om P R _E M A A N atrícula C ueblo C ód_P alle ód_C C ueblo ód_P Fecha_Inscripción C RO D I N Id_Curso V JA N D I IA _E US N Matrícula a) Obtener el nombre de los alumnos que viajan en autobuses contratados por centros universitarios distintos a donde estudian, junto al nombre de su pueblo, la compañía del autobús y la fecha de inscripción del alumno en el autobús. Si el autobús no pertenece a ninguna compañía tendrá que figurar en vez de la compañía el código del centro. Si todavía no figurase en la BD el centro que contrata al autobús deberá aparecer en su lugar la matrícula. Las filas del resultado deberán aparecer ordenadas por nombre de pueblo y las que tengan el mismo nombre de pueblo ordenadas por fecha de inscripción. Téngase en cuenta que un alumno puede viajar en varios autobuses de estas características y que el resultado deberá recoger cada alumno junto a cada autobús en el que viaja que cumpla las condiciones anteriores. b) Obtener el listado de las paradas (Cód_Pueblo, Calle) por las que pasan los autobuses que tienen alguna parada en “Beasain” y los ha contratado el centro de código “IFSS”. c) Obtener para cada centro su nombre y el número de alumnos matriculados en él que viajan en algún autobús que: – Figura en la BD como ya contratado por algún centro (suponer que pueden figurar en la BD autobuses que no están todavía contratados). – Realiza alguna parada en la calle “Gorosabel” del pueblo de código “TLS”. – Cuenta con más de 40 plazas. FBD Tema 5 – Dpto. LSI - Donostia 62
  • 63. Junio 03 C PIST R N D O E ÍA IF irección Precio A N T R IdAsignatura C C urso arrera NIF SIG A U A AU N DI C L M O N lave Dirección A N E IdAsignatura Tem N eroH a úm ojas PU T S DI N IdAsignatura FIC A D I IdA HN signatura Tem FechaPetición N eroC a úm opias FechaRecogida CR U SA a) DNI y Dirección, sin tuplas repetidas en el resultado, de aquellos alumnos que hayan rellenado fichas de petición de apuntes de al menos dos asignaturas distintas. b) Indica por cada copistería (NIF) y asignatura (IdAsignatura) cuál es la facturación pendiente de pago por los alumnos de la asignatura. FBD Tema 5 – Dpto. LSI - Donostia 63
  • 64. Septiembre 03 APAREJADOR N_Identificación Nombre Tfno NombreMunicipio MUNICIPIO Nombre Dirección Tfno INMUEBLE N_Propiedad Tipo Dirección DNI NombreMunicipio M2 ... PERMISO N_Propiedad DNI FechaPetición Descripción N_Identificación ... FechaAsignación Presupuesto FechaResolución EstáConcedido Dominio PERSONA DNI Nombre Dirección booleano TRABAJA NombreMunicipio N_Identificación PETICIÓN N_Propiedad DNI a) DNI, nombre y dirección de las personas solicitantes de algún permiso de obra asignado a un aparejador de la plantilla de “Aduna” (donde “Aduna” es el nombre de un municipio). b) Obtener el nombre del aparejador y a cuántos inmuebles distintos ha denegado algún permiso de obra. Sólo queremos tener en cuenta aquellos permisos de obra donde el inmueble haya obtenido otro permiso de obra, solicitado con posterioridad y con el mismo presupuesto (el aparejador que acepta el permiso NO tiene por qué ser el mismo que el que lo denegó previamente). FBD Tema 5 – Dpto. LSI - Donostia 64
  • 65. Septiembre 03 APAREJADOR N_Identificación Nombre Tfno NombreMunicipio MUNICIPIO Nombre Dirección Tfno INMUEBLE N_Propiedad Tipo Dirección DNI NombreMunicipio M2 ... PERMISO N_Propiedad DNI FechaPetición Descripción N_Identificación ... FechaAsignación Presupuesto FechaResolución EstáConcedido Dominio PERSONA DNI Nombre Dirección booleano TRABAJA NombreMunicipio N_Identificación PETICIÓN N_Propiedad DNI c) Obtener la descripción, nº de propiedad y el presupuesto máximo para aquellos permisos de obra que cumplen: – El permiso está concedido, su campo descripción tiene como valor “cerramiento” y corresponde a un inmueble de “Lasarte” de menos de 60 m2. Junto a tuplas con los mismos campos, para aquellos permisos de obra que cumplen: – El permiso está concedido, el campo descripción tiene como valor “fachada” y está asignado a un aparejador de la plantilla de “Lasarte” FBD Tema 5 – Dpto. LSI - Donostia 65
  • 66. Junio 04 E U O N bre D om irector CL AD orsal N bre FechaN EnC om cto arrera Equipo Q IP IC IST M IL O C Prem M A L T olor io etálico R IC A IÓ orsal Etapa Tiempo PA T IP C N D Suponiendoque haya undom inio que incluya E A A N ero K Salida L úm m legada Ganador LEA A L T C olor Etapa Dorsal TP L V _M IL O horas-min-seg. P E T N Etapa N O úm rdenA C ltitud ategoría Prim U R O úm ero a) Obtener la clasificación general de la vuelta, es decir, el dorsal, nombre del ciclista y nombre del equipo junto al tiempo total invertido en las etapas disputadas, para aquellos ciclistas que continúan en carrera, ordenados de menor a mayor tiempo consumido. b) Obtener el dorsal y el nombre de los ciclistas que pertenecen al equipo del ciclista ganador de la décima etapa (incluido este) y que participaron en dicha etapa FBD Tema 5 – Dpto. LSI - Donostia 66
  • 67. Septiembre 04 DEPORTISTA NúmeroId Nombre Apellido Dirección Teléfono NúmeroIdVolunt FechaCom FechaFin CódigoDeporte País EVENTO Ciudad Nombre Fecha VOLUNTARIO NúmeroId Nombre Procedencia Profesión EQUIPO CódigoDeporte País Entrenador DEPORTE Código Nombre Historia Equipamiento RECORD CódigoDeporte NúmeroIdDeportista Fecha Hora Ciudad PARTICIPA CódigoDeporte NúmeroIdDeportista TIPO RECORD CódigoDeporte NúmeroIdDeportista Fecha Hora Tipo DESTACA CódigoDeporte NúmeroIdDeportista NúmeroIdVolunt Idioma IDIOMA CódigoDeporte Ciudad Nombre TIENE a) Nombre y procedencia de los voluntarios que hablan francés y acompañan a deportistas que participan en deportes cuyos eventos de clasificación se celebraron en París. b) Nombre, apellido e identificación de aquellos deportistas del equipo de Jorge Sánchez que cumplan la siguiente condición: han logrado algún record y todos los records que han conseguido son de tipo mundial. En el resultado debe excluirse a Jorge Sánchez. FBD Tema 5 – Dpto. LSI - Donostia 67
  • 68. Junio 05 V J D o ech alid D P D C d S a D I H T LId Htel Nmre L calid C acid IAE estin VF aS a ías recio ía iu ad alid N O E Id o o b o ad ap ad L_ HTL OE _ V J D o ech alid Id Htel C IE T D I Nmre D n NT o G ÍAD I Nmre NT o IAE estin VF aS a _ o L N E N o b irecció _ fn U D o b _ fn ÍA N E C RIÓ _ XUS N O C N L D o ech alid Nm D o x rsió HraS a L g alid P P IO A estin VF aS a ú ero estin E cu n o alid u arS a recio ID M D I Id m IO AD io a AN H T LV J O E _ IAE E C RO C XU_ P _ L N E D o ech alid Nm D I C IE T estin VF aS a ú ero N _ L N E D o ech alid Id o D I Nm Nch C IE T estin VF aS a Htel N ú ero o es a) Nombre y dirección de aquellos clientes (sin repeticiones) que hayan participado en algún viaje en el que se hayan hospedado más noches en un mismo hotel que las noches que se hospedó en el hotel “Gabriella” el cliente con DNI “15238432”, en el viaje que realizó a Roma el “3/05/2005”. b) Obtener, para cada destino de viaje DV, el número de guías que hablen “italiano” que han llevado o llevarán algún viaje a ese destino DV, con posibilidad de alojarse (en el destino de viaje DV) en algún hotel de “Roma”. FBD Tema 5 – Dpto. LSI - Donostia 68
  • 69. Septiembre 05 N serep o ite R SE ecieC talR ech ctoM eroC talP reC talM reD IG jaNm ran E sp ro azaF aN atad ro ad ro ad N ran o G ja ecieenlas esp claves G N D R D INmreE ail ex jerasd tran e G A J D INmreD nT oAm istrad r R NA N o b ireccio fn d in o A A E O N o b -m p reym re ad ad p rserla o E F R E A Nmre N E MD D o b T A A IE T NmreDració R T M N ON b u n o maism A L A E ferm adT ien sp ro _ icio E F RT A A E ferm adT ien P IC R n ed ratam toE ecieC talF In N E _ R T M n ed ratam to S T M E ferm adS to a ÍN O A n ed in m MD A E T T ien ed en E IC MN O ratam toM icam to a) Especie, crotal y fecha de nacimiento de las reses de la raza “Angus” con padre y madre conocidos (están en la BD) y cuyo propietario es “Domecq”. Sólo se obtendrán reses que NUNCA hayan padecido la enfermedad “Brucelosis”. b) Obtener la especie y crotal de las reses que, habiendo padecido la enfermedad “Encefalopatía”, se les aplicó para dicha enfermedad alguno de los tratamientos usados para esa misma enfermedad en la res de la especie “bovina” con crotal número 1. Esta última res no debe aparecer en el resultado. FBD Tema 5 – Dpto. LSI - Donostia 69
  • 70. ER-Relacional Junio y Septiembre 00 Calle NombreZona Categoría Dir NPisos Número 1 N BLOQUE_CASAS ZONA_URBANA 1 1 Planta P_P N N Número N N Puerta PISO POSEEP CASA_PARTICULAR POSEEC 2 M 1 1 M2 M M N N PERSONA VIVEC VIVEP DNI Nombre Edad Nombre Dirección DNI Tfno Nombre Características PERSONA ESPECIE 1 M N NombreCientífico MejorEjemplar N Origen EsPrincipal MARIPOSA Hábitat 1 EsperanzaVida N Colores 1 N N 1 EJEMPLAR COLECCIÓN Número Código Tamaño PrecioEstimado Procedencia Ubicación FBD Tema 5 – Dpto. LSI - Donostia 70
  • 71. ER-Relacional Junio y Septiembre 01 Precio NomIngr Suministrador (0,N) (0,N) INGREDIENTE LLEVA LLEVA NomArt (1,N) (1,N) Tipo NomPrd (0,N) (1,1) PRODUCTO Precio BASE DE ARTÍCULO ESPECIAL Tamaño (0,N) (0,N) Cantidad Cantidad (0,N) (0,N) PEDIDO INCLUIDO INCLUIDO Hora Número pedido Fecha Hora servido (0,1) Dirección (0,N) Tfno DOMICILIO LLEVAR_A Categoría Año Euros Cód (0,1) (0,N) PREMIO CONCEDIDO CONCEDIDO (0,N) (0,N) (1,N) (0,N) PRODUCIDA Código PELÍCULA (1,N) ACTOR (0,N) Título PERSONA Género (1,N) (1,N) DIRIGIDA (0,N) Fecha Sexo Inicio Nombre Nacionalidad PROYECTADA FechaFin (1,N) (1,1) (1,N) SALA Número CINE DE Aforo Nom Tfno Dirección FBD Tema 5 – Dpto. LSI - Donostia 71
  • 72. ER-Relacional Junio y Septiembre 02 Cód Direcc Tfno. Cód País Fecha Resultado (1,N) Equip1 (1,N) (1,1) (1,1) (1,N) RESIDE JUEGA HOTEL EQUIPO PARTIDO Equip2 NºHabit Camiseta Total_Goles Árbitros Nombre (1,N) COMPUESTO POR Fecha Lugar (1,1) DNI (1,1) (0,N) CONTROL PASADO JUGADOR Nombre A ANTIDOPAJE FechaN Clubes_Año Goles Nombre Cód_Pueblo Nombre Provincia DNI Cursos (1,1) (0,N) VIVE_EN ALUMNO PUEBLO (1,1) (1,N) (1,N) Fecha_Inscripción ESTUDIA_EN VIAJA_EN POSEE (0,N) (0,N) (1,1) (1,N) (1,1) (1,N) (1,N) CONTRATA_A PARA_EN CENTRO AUTOBÚS PARADA Compañía Cód_Centro Dirección Matrícula Calle N_Asientos Nombre FBD Tema 5 – Dpto. LSI - Donostia 72