-- 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分钟插入当前系统时间
--
--
sql 7
最新推荐文章于 2024-06-29 12:12:59 发布