Code icon

MySQL - FUNCTIONS

Links


    // FUNCTIONS

    //--Se encuentra en Programacion Funciones, Escalares (solo un valor, no tabla)
    CREATE FUNCTION dameLaMedia(@id int) returns flota
    AS
        BEGIN
        declare @media float;
        set @media = (SELECT AVG(nota*1.0) FROM Nota WHERE idAlumno = @id)
        END
    GO
    
    SELECT nombre, apellidos, dbo.dameLaMedia (idAlumno) from Alumno;
    
    
    GO
    //--hacer consulta sql que me de la relacion de alumnos del 811ma con su nota media calculada mediante una función
    CREATE FUNCTION nMedia (@id INT) RETURNS float
    AS
    
    BEGIN
        DECLARE @nmedia float 
        set @nMedia= (SELECT AVG(Nota*1.0) FROM Nota WHERE idAlumno = @id)
        return @nmedia
    END
    
    GO
    
    SELECT nombre, apellidos, dbo.nMedia (idAlumno) AS 'Nota Media' FROM ALUMNO A WHERE idGrupo = '811nma'
    
    SELECT nombre, apellidos, dbo.nMedia (idAlumno) AS 'Nota Media' FROM alumno WHERE dbo.nMedia(idAlumno) between 5 and 8
    
    
    //--FUNCIONES TABLA
    //--vista con parámetros
    
    GO
    
    create FUNCTION AlumnosDeUnGrupo (@codGrupo char(6)) returns TABLE -- // DEVUELVE TABLA
    as
    
    RETURN select idGrupo,apellidos,nombre from alumno where idgrupo = @codGrupo
    
    go
    
    SELECT * from AlumnosDeUnGrupo('913nma')
    
    //--SELECT * FROM ALUMNOSDeUnGrupo('811nma'),alumnonota where alumnosDeUngrupo.codigo=alumnonota.codigoalumno
    
    GO
    
    DECLARE @tabla TABLE( id INT, nombre varchar(100))
    
    INSERT INTO @tabla values (1, 'hola')
    INSERT INTO @tabla values (2, 'adios')
    
    SELECT * FROM @tabla
    
    GO
    
    
    
    create function AlumnosDeBonitos( @codGrupo char(6)) returns @NombreTabla TABLE ( campo1 int, campo2 varchar(100) )--- se especifica la tabla que va a devolver 
    
    as
    
    BEGIN
        insert into @NombreTabla select top 3 idAlumno,apellidos+' '+nombre from alumno where idgrupo = @codGrupo
        insert into @nombretabla values (999,'ULTIMO***') -- Debemos insertar en ella
        return
    END
    go
    
    SELECT * FROM AlumnosDeBonitos('811nma')
    
    
    
    //--EJERCICIOS
    //--Listado de grupos con sus tutores. (escalar) Funcion que da tutor de un grupo
    GO
    CREATE OR ALTER FUNCTION GruposYTutores (@idGrupo VARCHAR(10)) RETURNS varchar(50)
    AS
    
    BEGIN
        DECLARE @tutor VARCHAR(50) 
        set @tutor = (SELECT P.Nombre FROM Profesor P INNER JOIN Grupo G on P.idProfesor = G.idProfesorTutor WHERE G.idGrupo = @idGrupo)
        if (@tutor is null)
        BEGIN	
            SET @tutor = 'No hay profesor'
        END
        return @tutor
    END
    
    GO
    
    SELECT idGrupo, idProfesorTutor, dbo.GruposYTutores(idGrupo) AS 'Nombre Profesor' FROM Grupo 
    
    
    //--Listado de profesores con numero de asignaturas distintas que imparte. Hacer 2 versiones:
    create function fTablaAsg ( @idProfe tinyint) returns table 
    as
       return select distinct idAsignatura from AsignaturasGrupo where idProfesor=@idProfe
    
    go
    
    select idProfesor,nombre , (select COUNT(*) from dbo.fTablaAsg(profesor.idProfesor) AG) 
    from profesor