MySQL基础命令笔记
MySQL基础命令笔记
上学期间学习记录的笔记,放这里方便查阅。
-- 创建数据库
-- CREATE 创建; DATABASE 数据库;
CREATE DATABASE stuinfo
-- 默认字符集
DEFAULT CHARACTER SET utf8mb4
-- 排序规则
DEFAULT COLLATE utf8mb4_general_ci;
-- 显示当前服务器下,所有数据库
SHOW DATABASES;
-- 选择数据库
USE stuinfo
-- 修改数据库
-- 选择数据库
ALTER DATABASE webinfo
-- 修改默认字符集
DEFAULT CHARACTER SET utf8
-- 修改排列规则
DEFAULT COLLATE utf8_general_ci;
-- 删除数据库
-- 使用 DROP 权限
DROP DATABASE webinfo;
-- 数据类型P28
-- 创建表
CREATE TABLE student1 (
-- INT整数型, UNSIGNED无符号, NOT NULL不得为空,auto_increment自动填充, PRIMARY KEY设为主键;
id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY
-- CHAR定长字符串
sNo CHAR(10) NOT NULL,
-- VARCHAR变长字符串
sName VARCHAR(20) NOT NULL,
sex CHAR(2),
-- DATE"年-月-日"日期类型
birthday DATE,
deptName VARCHAR(30),
remark VARCHAR(80)
-- ENGINE....之后可不写,默认使用一下形式
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
-- 选择数据库
USE stuinfo;
-- 显示该数据库下所有表
SHOW TABLES;
-- 查看表结构
DESC student;
-- 查看数据库的创建语句
-- \G使表纵向输出显示
SHOW CREATE TABLE student \G
-- 修改表结构
-- 选择要修改的表
ALTER TABLE student
-- 在birthday后面添加一个entryDate字段
ADD entryDate DATE AFTER birthday
-- 把entryDate字段的数据类型改为 TIMESTAMP
MODIFY entryDate TIMESTAMP
-- 把entryDate字段的名字改为rxDate,数据类型改为 datetime
CHANGE entryDate rxDate datetime
-- 删除rxDate字段
DROP rxDate;
-- 删除数据表
DROP TABLE course;
-- 插入表数据
-- 向student表中插入数据(可多行输入)
INSERT INTO student(sNo,sName,sex,birthday,deptName,remark)
VALUES('1308013101','陈斌','男','1993-03-20','软件131','NULL')
('1308013102','张洁','女','1996-02-08','机电131','NULL');
-- 修改表数据
-- 选择需要更新的表
UPDATE student
-- 修改为以下字段数据
SET birthday='1993-11-25',remark='班长'
-- 修改符合此条件的数据
WHERE sNo='130813101';
-- 删除表数据
-- 选择需要删除数据的表
DELETE FROM student
-- 删除符合此条件的数据信息
WHERE sNo='1308013102'
-- 查询表的数据
SELECT deptName,sNo FROM student;
-- 查询所选表,所选的 字段名数据,并将字段名用AS后字符所代替
SELECT sNo AS '学名', sName '姓名' FROM student;
-- 查询所选表格,字段名中符合条件的数据
SELECT * FROM student
WHERE sex='女';
-- 查询课程表中,学分大于4的课程
SELECT * FROM course
WHERE credit > 4;
-- 查询所选表格,字段名
SELECT * FROM student
WHERE birthday>='1995-01-01' AND birthday<='1995-12-31';
-- 模糊查询
-- %:显示所有含关键字的数据
SELECT * FROM student
WHERE sName LIKE '杨%';
-- _:模糊代替一个字符
SELECT * FROM student
WHERE sName LIKE '杨_';
SELECT * FROM student
WHERE birthday BETWEEN '1995-01-01' AND '1995-12-31';
SELECT * FROM score
WHERE grade NOT BETWEEN 60 AND 89;
-- 找出符合指定的条件的数据(常用于离散,不连续)
SELECT * FROM student
WHERE sNo IN('1308013101','1309122503','1312054904');
-- 检索符合条件值的数据
SELECT * FROM course
WHERE remark IS NULL;
-- 查询指定内容,并按birthday降序排列
SELECT * FROM student
WHERE sex='男'
ORDER BY birthday DESC;
-- 查询指定内容,并按birthday升序排列(不加desc,默认升序)
SELECT * FROM student
WHERE sex='男'
ORDER BY birthday;
-- 选取查询的指定内容中(此例未选),指定范围的记录
SELECT * FROM student
ORDER BY birthday DESC
-- [初始位置,] 记录数;默认从0开始
LIMIT 0,5;
-- LIMIT 5;可省略0
-- 查询时不查看重复数据,可对多个字段列表进行处理
SELECT DISTINCT birthday
FROM student;
-- 5.3高级查询
-- 内连接
-- 查询所有女生的学号、姓名、性别、课程ID、成绩
-- 语法一
-- 显示内容
SELECT sNo, sName, sex, cId, grade
-- 数据来源表(基于student)
FROM student
-- 内连接方式,等值连接这两个表
INNER JOIN score ON student.id= score.sId
-- 筛选条件
WHERE sex='女';
-- 语法二
-- 显示这些内容
SELECT sNo, sName, sex, cId, grade
-- 数据来源于student score 这两个表
FROM student, score
-- 连接条件与筛选条件,默认内连接
WHERE student.id=score.sId
AND sex='女';
-- 查询学号为“1308013101”学生的学号、姓名、性别、班级、课程名称和成绩
-- 语法一
SELECT sNo, sName, sex, deptName, cName, grade
FROM student
INNER JOIN score ON student.id=score.sId
INNER JOIN course ON course.id=score.cId
WHERE sNo='1308013101';
-- 语法二
SELECT sNo, sName, sex, deptName, cName, grade
FROM student, score, course
WHERE student.id=score.sId AND course.id=score.cId
AND sNo='1308013101';
-- 外连接(左连接)
SELECT sNo, sName, sex, deptName, cId, grade
FROM student
LEFT OUTER JOIN score ON student.id=score.sId
WHERE deptName='网络131';
-- 对比(内连接)
SELECT sNo, sName, sex, deptName, cId, grade
FROM student
INNER JOIN score ON student.id= score.sId
WHERE deptName='网络131';
-- 外连接(右连接)
SELECT sNo, sName, sex, deptName, cId, grade
FROM score
RIGHT OUTER JOIN student ON student.id=score.sId
WHERE deptName='网络131';
-- 外连接(全连接)(oracle支持)
-- SELECT sNo, sName, sex, deptName, cId, grade
-- FROM student
-- FULL OUTER JOIN score ON student.id=score.sId
-- WHERE deptName='网络131';
-- 统计函数
-- 统计student表中男生的人数
-- count统计数据记录行数
SELECT COUNT(*) AS '男生人数'
FROM student
WHERE sex='男';
-- 统计学号为'1308013101'的学生选修课程的最高分、最低分、平均分、总分
-- max求最大值,min求最小值,avg求平均值,sum求总分,AS可省略
SELECT MAX(grade) AS '最高分', MIN(grade) AS '最低分',
AVG(grade) AS '平均分', SUM(grade) AS '总分'
FROM score
-- 默认使用内连接
JOIN student ON student.id=score.sId
WHERE sNo='1308013101';
-- 加上disinct取消字段的重复值后再进行统计
SELECT course(DISTINCT sId) AS '已选修课程学生人数'
FROM score;
-- 分组统计男、女学生的人数。
-- 显示出列,count(*)统计范围为所有
SELECT sex AS'性别', COUNT(*)AS '学生人数'
FROM student
-- 分组统计sex
GROUP BY sex
-- 对字符串 '男'、'女'进行排序
ORDER BY sex DESC;
-- 分组统计被选修过1次以上的课程的课程名、选修次数、和平均分
SELECT cName AS '课程名称', COUNT(*) AS'选修次数', AVG(grade)AS '平均分'
FROM course
JOIN score ON course.id=score.cId
-- 对cName进行分组汇总
GROUP BY cName
HAVING COUNT(*) > 1;
-- 第6章 视图的创建和使用
-- 创建视图v_stu, 列出所有1995年9月1日及之后出生的学生名单;然后在该视图中查询“网络131”班级的学生记录
CREATE VIEW v_stu -- 创建视图v_stu
AS
SELECT * FROM student -- 查询student表
WHERE birthday >= '1995-9-1'; -- 出生日期在1995年9月1日及之后
-- 查询“网络131”班级的学生记录
SELECT * FROM v_stu WHERE deptName = '网络131';
-- 创建视图 v_stu_grade,列出学号、姓名、性别、班级、课程名称、成绩,然后在该视图中查询所有女生的数据记录
CREATE VIEW v_stu_grade(sNo, sName, sex, deptName, cName, grade)
AS
SELECT student.sNo, sName, sex, deptName, course.cName, score.grade FROM score
INNER JOIN student ON student.id = score.sId
INNER JOIN course ON course.id = score.cId;
SELECT * FROM v_stu_grade WHERE sex = '女';
-- 查看视图
DESC v_stu;
SHOW TABLE STATUS LIKE 'v_stu'\G -- 查看视图的基本信息 -- 在命令行内可运行,且\G属于制表符同时含有“;”的意思,\g仅表示“;”的含义
SHOW CREATE VIEW v_stu\G -- 查看视图的详细信息
SELECT * FROM information_schema.views WHERE TABLE_NAME = 'v_stu'\G -- 在 information_schema的views表中查看v_stu视图的详细信息
-- 修改视图(法一)
CREATE OR REPLACE VIEW v_stu -- 修改视图,若已存在,则修改视图;若不存在,则创建视图
AS
SELECT sNo, sName, sex, birthday, deptName FROM student
WHERE birthday >= '1995-9-1' AND sex = '女';
SELECT * FROM v_stu;
-- 修改视图(法二)
ALTER VIEW v_stu_grade -- 修改视图,若已存在,则修改视图;若不存在,则报错
AS
SELECT student.sNo, sName, deptName, course.CNo, cName, score.grade FROM score
INNER JOIN student s ON student.id = score.sId
INNER JOIN course c ON course.id = score.cId
WHERE deptName = '网络131';
SELECT * FROM v_stu_grade;
-- 更新视图
INSERT v_stu(sNo, sName, sex, birthday, deptName) -- 插入学生数据
VALUES('123123123', '更新插入', '女', '1996-5-3', '软件131');
-- 按条件修改视图
UPDATE v_stu -- 更新视图
SET deptName = '网络131' -- 更新内容
WHERE sNo = '1308013110'; -- 更新条件
-- 按条件删除视图
DELETE FROM v_cou -- 指定删除视图的内容
WHERE cNo = '01004'; -- 删除条件
-- 删除视图
DROP VIEW v_stu;
-- mysql 编程基础
-- 显示全部的系统变量
SHOW GLOBAL VARIABLES;
-- 显示版本号,主机名,现在的用户
SELECT @@VERSION, @@HOSTNAME, CURRENT_USER;
-- 显示基本目录,数据目录
SELECT @@BASEDIR, @@DATADIR;
-- 显示现在的路径,现在的时间,现在的具体时间
SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;
-- 初始化用户变量‘myHH’,并赋值为‘Rin’
SET @myHH='Rin';
SELECT @myHH;
-- 初始化用户变量‘myYY’,并赋值学生表中学号为‘1308013101’学生的班级信息
SET @myYY=(SELECT deptName FROM student WHERE sNo='1308013101');
SELECT * FROM student WHERE deptName=@myYY;
-- 算术运算符的使用
-- DIV整除,MOD相除取余
SELECT 5+2, 5-2, 5*2, 5/2, 5 DIV 2, 5%2, 5 MOD 2;
-- 建立用户变量A,b并赋值
SET @A=3,@b=12;
-- 显示同时满足a<4且b>12的数值
SELECT @a<4 AND @b>12;
-- 显示所有字段,将greade的数值减5,并命名为newGrade,数据来源于score
SELECT *, grade-5 AS 'newGrade' FROM score;
-- CEILING(a)显示大于a的最小整数,FLOOR(X)显示小于X的最大整数
SELECT CEILING(1.73),FLOOR(1.73);
-- ROUND(X,D)保留X小数点后D位,并四舍五入。若无D,则直接四舍五入取整数;TRUNCATE(X,D)保留X小数点后D位,不进行四舍五入
SELECT ROUND(1.76,1), TRUNCATE(1.76,1);
-- RAND()返回0~1之间的随机数
SELECT ROUND(RAND()*9+1);
SELECT RAND();
-- CHAR_LENGTH返回字符串的字符数,一个多字节算一个字符;LENGTH返回字符串的字符数,在utf8中,一个汉字算3个字符
SELECT CHAR_LENGTH('MySQL'), CHAR_LENGTH('数据库'),
LENGTH('MySQL'), LENGTH('数据库');
-- NOW()返回当前时间
SELECT NOW();
-- MD5()加密括号内的字符串
SELECT MD5('DSZhhh');
SELECT 16-3*5, (5+9)/4, 7%3, 7 DIV 3;
-- <=>是否相等,TRUE则返回1,FALSE则返回0
SELECT 35>=25, 36<=25, 18<=>18, NULL<=>NULL;
-- POW(X,Y)返回X的Y次方
SELECT POW(2,5),
ROUND(3.45678,2),
FLOOR(-7.2),
CEIL(-7.2);
SELECT LOWER('MYSQL'),
SUBSTRING('default-character-set',9,4),
TRIM(LEADING 'Hi' FROM 'Hi Tom,Tom Hi'),
POSITION('char' IN 'default-character-set')
;
SELECT YEAR(NOW()),
MONTH(NOW()),
DAYNAME(NOW());
-- 用户变量
SET @vstuNo='1308013103', @vcouNo='01001';
SELECT @vstuNo ,@vcouNo , grade FROM score
INNER JOIN student ON student.id=score.sId
INNER JOIN course ON course.id=score.cId
WHERE sNo=@vstuNo && cNo=@vcouNo;
-- 创建不带有参数的存储过程,查询出所有1994年9月之前出生的学生
CREATE PROCEDURE up_studentInfo()
BEGIN
SELECT * FROM student WHERE birthday < '1994-09-01';
END;
-- 创建带有输入参数的存储过程,通过一个给定的班,查出该班级的所有学生记录
CREATE PREPARE up_deptStudentInfo(IN stuDeptName VARCHAR(30))
BEGIN
SELECT * FROM student WHERE deptName = stuDeptName;
END
-- 创建一个带有输入参数和输出参数的存储过程 up_scoreGradeInfo, 通过一个给定的学号,查询出该学生选修课程的数量及平均值,并通过输出参数返回
CREATE PROCEDURE up_scoreGradeInfo(IN stuNo CHAR(10), OUT countNum INT, OUT avgGrade FLOAT)
BEGIN
SELECT COUNT(*) INTO countNum FROM score
INNER JOIN student ON student.id = score.sId WHERE sNo = stuNo;
SELECT AVG(grade) INTO avgGrade FROM score
INNER JOIN student ON student.id = score.sId WHERE sNo = stuNo;
END
-- 创建函数func_getStudentName, 通过一个给定的学号,返回该学生的姓名
CREATE FUNCTION func_getStudentName(stuNo CHAR(10)
RETURNS VARCHAR(20)
BEGIN
RETURN (SELECT FROM student WHERE sNo = stuNo);
END
-- 局部变量的使用
-- 定义变量
-- 定义一个名为 myVar 的变量, INT类型, 默认值为10
DECLARE myVar INT DEFAULT 10;
-- 给变量赋值
-- 为变量myVar 赋值30
SET myVar = 30;
-- 在成绩表(score)中查询学号为“1308013101”、课程编号为“01003”的成绩,并把它赋给变量myVar
SELECT grade INTO myVar
FROM score WHERE sNo = '1308013101' && cNo='01003';
-- 定义条件和处理程序
-- 定义“ERROR 1146(42S02)” 这个错误,名称为can_not_find
DELETE can_not_find CONDITION FOR SQLSTATE '42S02';
-- 或者
DECLARE can_not_find CONDITION FOR 1146;
-- 定义处理程序( CONTINUE表示遇到错误不进行处理,继续向下执行;EXIT表示遇到错误后马上退出;UNDO 表示遇到错误撤回之前的操作
#方法一:捕捉 sqlstata_value
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info='CAN NOT FIND';
#方法二:捕捉 mysql_error_code
DECLARE CONTINUE HANDLER FOR 1146 SET @info='CAN NOT FIND';
#方法三:先定义条件,然后调用
DECLARE can_not_find CONDITION FOR 1146;
DECLARE CONTINUE HANDLER FOR can_not_find SET @info='CAN NOT FIND';
#方法四:使用 SQLWARNING (捕捉所有以01开头的sqlstate_value值,然后执行exit,并输出“error”)
DECLARE EXIT HANDLER FOR SQLWARNING SET @info='ERROR';
#方法五:使用 NOT FOUND (捕捉所有以02开头的sqlstate_value值,然后执行exit,并输出“can not find”)
DECLARE EXIT HANDLER FOR NOT FOUND SET @info = 'CAN NOT FIND';
#方法六:使用 SQLEXCEPTION (捕捉所有没有被sqlwarning或not found捕获的sqlstate_value值,然后执行exit操作,并输出“error”信息)
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info='ERROR';
-- 流程控制语句
-- IF语句
-- 创建存储过程 up_scoreStateInfo, 通过给定的学号和课程号,查询出该学生指定课程的成绩,如果成绩合格,则返回1;否则返回0
CREATE PROCEDURE up_scoureStateInfo(IN stuNo CHAR(10), IN couNo CHAR(5), OUT stateScore INT)
BEGIN
DECLARE stuScore INT;
SELECT grade INTO stuScore FROM score
INNER JOIN student ON student.id=score.sId
INNER JOIN course ON course.id=score.cId
WHERE sNo=stuNo && cNo=couNo;
IF stuScore >= 60 THEN SET stateScore = 1;
ELSE SET stateScore=0;
END IF;
END
-- CASE语句
-- (法二)用case语句实现上述过程(法一:先出结果再一一对比;法二:一一运算并对比)
CREATE PROCEDURE up_scoreStateInfo(IN stuNo CHAR(10), IN couNo CHAR(5), OUT stateScore INT)
BEGIN
DECLARE stuScore INT;
SELECT grade INTO stuScore FROM score
INNER JOIN student ON student.id=score.sId
INNER JOIN course ON course.id=score.cId
WHERE sNo=stuNo && cNo=couNo;
CASE
WHEN stuScore>=60 THEN SET stateScore=1;
ELSE SET stateScore=0
END CASE;
END
-- (法二)查询成绩表,输出学号、课程编号、成绩以及成绩等级
SELECT sNo '学号', sName '姓名', cName '课程名称', grade '成绩',
CASE
WHEN grade>=90 THEN '优秀'
WHEN grade>=80 THEN '良好'
WHEN grade>=70 THEN '中等'
WHEN grade>=60 THEN '及格'
ELSE '不及格'
END '成绩等级'
FROM score
INNER JOIN student ON student.id=score.sId
INNER JOIN course ON course.id=score.cId;
-- (法一)查询学生表,输出学号、姓名、性别和班级,要求将性别“男”换成“1”,性别“女”换成“0”
SELECT sNo '学号', sName '性别',
CASE sex
WHEN '男' THEN '1'
WHEN '女' THEN '0'
ELSE '未知'
END AS '性别', deptName '班级'
FROM student;
-- WHILE语句(当满足特定条件时,则进入循环)
-- 创建函数func_sum, 计算1+2+3+..+n的和。
CREATE FUNCTION func_sum(n INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE i, sum INT;
SET i=1, sum=0;
WHILE i<=n DO
SET sum=sum+1;
SET i=i+1;
END WHERE;
RETURN sum;
END
-- repeat语句(当满足特定条件时,则会终止循环,跳出循环体)
-- 改写以上内容
CREATE FUNCTION func_sum(n INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE i, sum INT;
SET i=1, sum=0;
PREPARE
SET sum=sum+1;
SET i=i+1;
UNTIL i>n
END REPEAT;
RETURN sum;
END
-- LOOP语句(本身无终止循环语句,需配合leave使用)
-- 改写以上内容
CREATE FUNCTION func_sum(n INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE i, sum INT;
SET i=1, sum=0;
num:LOOP
SET sum=sum+1;
SET i=i+1;
IF i>n THEN LEAVE num;
END IF;
END LOOP num;
RETURN sum;
END
-- ITERATE语句(跳过该语句后面的任何语句)
-- 创建函数func_sum1, 计算1+2+3+..+n的和,但不包括同时能被3和7整除的数。
CREATE FUNCTION func_sum1(n INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE i, sum INT;
SET i=1, sum=0;
num:WHILE i<=n DO
IF i%3=0 && i%7=0 THEN
SET i=i+1;
ITERATE num;
END IF;
SET sum=sum+i;
SET i=i+1;
END WHILE num;
RETURN sum;
END
-- 游标的操作
-- 声明游标
CREATE PROCEDURE up_mngrade(IN snumb INT)
BEGIN
SELECT * FROM score,course,student
WHERE student.id=score.sId AND course.id=score.cId;
DECLARE i INT;
SET i=1;
WHERE i<=snumb DO
SET i=i+1
INSERT INTO score(sId, cId, sex, grade)
VALUES(i ,ROUND(RAND()*9+1) ,'女' ,ROUND(RAND()*50+50));
END WHILE;
CALL up_mngrade(10);
SELECT * FROM score
END
INSERT INTO score(sId, cId, grade)
VALUES(i ,ROUND(RAND()*9+1) ,ROUND(RAND()*50+50));
-- 4
CREATE PROCEDURE up_190217103insscore(IN snumb INT) -- 创建存储过程
BEGIN -- 存储过程开始
DECLARE i, c INT; -- 声明局部变量i,c 且为int类型
DECLARE grade1 TINYINT; -- 声明局部变量grade1 且为tinyint类型
SET i=0; -- 给局部变量i赋值为0
-- chaRu为iterate定义的范围
chaRu: WHILE i<=snumb DO -- while循环条件i<=snumb
SET c=ROUND(RAND()*8+1); -- 给局部变量c赋值为1~9之间的随机数
SET i=i+1; -- 给局部变量i赋值为i+1后的值
IF (SELECT COUNT(*) FROM score WHERE sId = i AND cId = c) = 1 THEN -- if语句开始;select中查询满足sId=i并且cId=c时的数量,如果为1,则跳过本次循环,并不执行iterate后的语句
ITERATE chaRu;
SET i=i-1; -- 给局部变量i赋值为i-1
END IF; -- 结束if循环
SET grade1=ROUND(RAND()*50+50); -- 给局部变量grade1赋值为50~100之间的随机数
INSERT INTO score(sId, cId, grade) -- 向score插入sId,cId,grade的值
VALUES(i ,c ,grade1); -- sId,cId,grade的值
END WHILE chaRu;
END; -- 存储过程结束
CALL up_190217103insscore(10);
SELECT * FROM score;
CREATE PROCEDURE up_190217103getscore(IN stuId CHAR(10), IN coName CHAR(10), OUT gradee INT)
BEGIN
SELECT grade INTO gradee FROM score
INNER JOIN student ON student.id = score.sId
INNER JOIN course ON course.id = score.cId
WHERE student.sNo=stuId AND course.cName=coName;
END;
CALL up_190217103getscore('1308013101','C语言程序设计',@gradee);
SELECT @gradee;
set global log_bin_trust_function_creators=1;
CREATE FUNCTION fun_190217103cmp(a CHAR(10),b CHAR(10),c CHAR(10))
RETURNS CHAR(10)
BEGIN
DECLARE numMax INT;
CASE
WHEN a>=b AND a>=c THEN SET numMax=a;
WHEN b>=a AND b>=c THEN SET numMax=b;
ELSE SET numMax=c;
END CASE;
RETURN (SELECT numMax);
END;
SELECT fun_190217103cmp('3','4','5');
DECLARE a1,b1,c1 INT;
SET a1=2, b1=3, c1=4;
SELECT MAX(a,b);
-- 创建一个存储过程up_学号state,给定学号与课程号,如果成绩大于等于60则显示“通过!”,如果成绩小于60则显示‘不通过!’,如果该学号没有修读指定课程,则显示“没有该课程记录!”
CREATE PROCEDURE up_190217103state(IN stuNo CHAR(10),IN couNo CHAR(5))
BEGIN
SELECT course.cName '课程名称',COUNT(*),
CASE
WHEN grade>=60 THEN '通过!'
WHEN grade<60 THEN '不通过!'
ELSE '没有该课程记录'
END '结果'
FROM score
INNER JOIN student ON student.id=score.sId
INNER JOIN course ON course.id=score.cId
WHERE student.sNo=stuNo AND course.cNo=couNo;
END;
CALL up_190217103state('1308013104','09001');
-- 创建插入触发器tr_insertStudent,当在学生表中插入数据时,检查性别是否为“男”或“女”,如果不是,则默认设为“男”
CREATE TRIGGER tr_insertStudent
BEFORE INSERT
ON student
FOR EACH ROW #逐行
BEGIN
IF new.sex!='男' && new.sex!='女' THEN
SET new.sex='男';
END IF;
END;