Base de datos

Informática. Elementos. Tablas y apartados

  • Enviado por: Nyd
  • Idioma: catalán
  • País: España España
  • 5 páginas
publicidad

2) Donada la base de dades de l'HOSPITAL resoleu les consultes següents amb SQL d'Informix (sense repeticions i utilitzant la clàusula DISTINCT només quan calgui):

  • Obtenir els números i noms dels metges que han fet dues o més visites amb el mateix import i que guanyen un sou inferior al sou màxim (el sou mes gran) dels metges menys 50000.

  • Obtenir els noms i les especialitats dels metges que no han fet mai cap visita a cap malalt i tals que en el seu carrer (adreça) no hi viu cap malalt.

  • Obtenir els metges pels quals es compleix que el 10% del seu sou és superior a la suma dels imports de totes les visites que han fet. Concretament cal donar els números, els noms, els sous i la suma dels imports de totes les visites que han fet aquests metges, ordenats descendentment per sou i per nom.

  • d) Obtenir els números i els noms dels metges que tenen un sou inferior al promig del sou de tots els metges i que han fet una o més visites amb data_visita diferent de NULL a malalts que viuen a un carrer (adreça) diferent del carrer (adreça) on viu el metge. Mostrar el resultat ordenat ascendentment per número de metge i descendentment per nom de metge.

    PRACTICA 2 IBD.

    Apartat a)

    SELECT DISTINCT m.num_met, m.nom_met

    FROM metges m, visites v

    WHERE (m.sou < (SELECT MAX(m.sou) FROM metges m ) -50000) AND m.num_met=v.num_met

    GROUP BY m.num_met, m.nom_met, v.import

    HAVING COUNT(*) >= 2;

    Resultat:

    Num_met

    Nom_met

    7215

    MIQUEL L.

    12528

    JORDI G.

    Apartat b)

    SELECT m.nom_met, m.especialitat

    FROM metges m

    WHERE NOT EXISTS (SELECT * FROM visites v WHERE v.num_met=m.num_met)

    AND m.adreca NOT IN (SELECT m.adreca FROM malalts mt WHERE m.adreca=mt.adreca);

    Resultat:

    Nom_met

    Especialitat

    CARME M.

    ENDOCRINOLOGIA

    Apartat c)

    SELECT DISTINCT m.num_met, m.nom_met, m.sou, SUM(v.import) AS import_total

    FROM metges m , visites v

    WHERE (m.sou/10) > (SELECT SUM (v.import) FROM visites v WHERE m.num_met=v.num_met)

    AND m.num_met=v.num_met

    GROUP BY m.num_met, m.nom_met, m.sou;

    Resultat:

    Num_met

    Nom_met

    Sou

    Import_total

    1214

    DOLORS P.

    150000

    14000

    Apartat d)

    SELECT DISTINCT m.num_met, m.nom_met

    FROM metges m, visites v, malalts mt

    WHERE m.sou < (SELECT AVG(m.sou) FROM metges m)

    AND m.num_met =v.num_met

    AND v.num_mal=mt.num_mal

    AND v.data_visita IS NOT NULL

    AND m.adreca <>MT.adreca

    ORDER BY m.num_met ASC, m.nom_met DESC;

    Resultat:

    Num_met

    Nom_met

    1214

    DOLORS P.

    7215

    MIQUEL L.

    12528

    JORDI G.