sql 7

-- sc表
-- #给定cid 计算其平均分(函数 和 存储过程)
CREATE FUNCTION avg1(_cid int)
RETURNS VARCHAR (10)
BEGIN
DECLARE avg1 FLOAT;
SELECT sum(score)/COUNT(score)  INTO  avg1 FROM sc WHERE Cid=_cid;

RETURN avg1;
end 
SELECT avg1(1) 平均分 ;

DROP PROCEDURE IF EXISTS avg2;
CREATE PROCEDURE avg2( in _cid int ,out  avg2 FLOAT)
BEGIN  

SELECT  sum(score)/COUNT(score)  INTO  avg2 FROM sc WHERE Cid=_cid;

end 

set @avg_2='';

CALL avg2(1,@avg_2);
SELECT @avg_2;

-- teacher 表
-- #给定老师名得出学这些课程的学生id(函数 和 存储过程)

DROP FUNCTION IF EXISTS SELECTid;
CREATE FUNCTION SELECTid(_tName VARCHAR(30) )
RETURNS VARCHAR(60)
BEGIN
DECLARE sids VARCHAR   (60);
SELECT GROUP_CONCAT(sid)   INTO sids  FROM sc WHERE cid=
(SELECT cid FROM course WHERE 
 tid=(SELECT tid FROM teacher  WHERE Tname=_tName));

RETURN sids;
end
SELECT SELECTid('贺高');




-- #给定分数得高于此分和低于此份的人数(存储过程)
DROP PROCEDURE IF EXISTS 计算人数;
CREATE 	PROCEDURE 计算人数(in _sc int )
BEGIN
DECLARE low int;
DECLARE pow int;
SELECT count(score) INTO  low FROM sc  WHERE score<_sc;
SELECT count(score) INTO  pow FROM sc  WHERE score>_sc;

SELECT low 低于此分人数 ,pow 高于此分人数;
end 

call 计算人数(50);



-- 贷款表


-- #指定所属销售得出负责的客户个数(函数 和 存储过程)


CREATE FUNCTION 客户个数( _name VARCHAR (10))
RETURNS int
BEGIN
DECLARE count_name int;
SELECT COUNT(`所属销售`) INTO count_name FROM `贷款表` WHERE `所属销售`=_name;
RETURN count_name;

end

SELECT 客户个数('王伟伟')  客户个数;

CREATE PROCEDURE 客户个数(in _name VARCHAR (10))
BEGIN
DECLARE count_name int;
SELECT COUNT(`所属销售`) INTO count_name FROM `贷款表` WHERE `所属销售`=_name;
SELECT count_name 客户个数;
end 

CALL 客户个数('王伟伟');



-- 
-- #预制语句(存储过程)



-- #1.找到指定表的前几行  (biaoming, topn)


CREATE PROCEDURE 查信息 (in tableName VARCHAR(20),in  titleName VARCHAR(20),in n int  )
BEGIN 
set @str =CONCAT('SELECT ',titleName,' FROM ',tableName,' LIMIT ',n);

PREPARE seek FROM @str;
EXECUTE seek;
 
end 

CALL 查信息('贷款表','所属销售',3)

-- #2 对学生表指定字段,指定条件进行查找(ziduan, zhi)
DROP PROCEDURE if EXISTS 指定条件;
CREATE PROCEDURE 指定条件 (in tableName VARCHAR(20),in  titleName VARCHAR(20),in ifTure VARCHAR(20)  )
BEGIN 
set @str =CONCAT('SELECT * FROM ',tableName,' where ',titleName,'=',ifTure,);
s
PREPARE seek FROM @str;
EXECUTE seek;
 
end 

CALL 指定条件('贷款表','所属销售','"王伟伟"');

SELECT  CONCAT('SELECT * FROM ',tableName,' where ',titleName,'=',ifTure);

-- #触发器
-- 对teacher 建立tid 为主键


-- 对course  建立tid 外键  类型为 Restrict

-- 通过触发器的形式能在course 表中录入 cid 为  5  cname 为 物理   tid 为 5的记录


BEFORE
course 表

BEGIN 
INSERT   teacher (tid)VALUE(new.tid) ;
end

INSERT   course VALUEs(5,'物理',5) ;
-- 通过触发器的形式成删除 teacher 表中 tid 为 5的记录 
-- 类型:
before
-- 位置
teacher
-- 语句
BEGIN 
DELETE FROM course WHERE tid=OLD.tid;
end 


DELETE FROM teacher WHERE tid=5;





-- #事件
-- 每隔 5分钟写出一次 teacher 表
-- 
-- 新建 一个表 ,有时间字段 , 每隔5分钟插入当前系统时间
-- 
-- 
发布了70 篇原创文章 · 获赞 14 · 访问量 2618

猜你喜欢

转载自blog.csdn.net/Captain_DUDU/article/details/103555684
今日推荐