学生表:Student (Sno, Sname, Ssex , Sage, Sdept)
学号,姓名,性别,年龄,所在系 Sno为主键
课程表:Course (Cno, Cname,)
课程号,课程名
Cno为主键学生选课表:SC (Sno, Cno, Score)
学号,课程号,成绩 Sno,Cno为主键
1. 用SQL语句创建学生表student,定义主键,姓名不能重名,性别只能输入男或女,所在系的默认值是 “计算机”。
```mysql
create table student(
-> sno int(10) unique primary key auto_increment,
-> sname varchar(20) unique not null,
-> ssec varchar(10) check(ssec in('男','女')),
-> sage int(10)
-> sdept varchar(20) default '计算机');
create table course(
-> cno int(10) primary key,
-> cname varchar(16));
create table sc(
-> sno int(10),
-> cno int(10),
-> score int(10),
-> primary key (sno,cno),
-> foreign key(sno) references student(sno),
-> foreign key(cno) references course(cno));
-
修改student 表中年龄(age)字段属性,数据类型由int 改变为smallint。
alter table student modify sage smallint;
-
为SC表建立按学号(sno)和课程号(cno)组合的升序的主键索引,索引名为SC_INDEX 。
alter table sc add unique index SC_INDEX(sno asc,cno asc);
-
创建一视图 stu_info,查询全体学生的姓名,性别,课程名,成绩。
mysql> view stu_info
-> select student.sname,student.ssec,course.cname,sc.score from student,sc,course
-> where student.sno=sc.sno and sc.cno=course.cno;
创建表并插入数据
字段名 id | 数据类型 INT | 主键 是 | 外键 否 | 非空 是 | 唯一 是 | 自增 否 |
---|---|---|---|---|---|---|
name | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
glass | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
sc表内容
id | name | glass |
---|---|---|
1 | xiaommg | glass 1 |
2 | xiaojun | glass 2 |
create table sch(
id int primary key unique not null,
name varchar(50) not null,
glass varchar(50) not null);
insert into sch values(1,'xiaoming','glass 1');
insert into sch values(2,'xiaojun','glass 2');
1、创建一个可以统计表格内记录条数的存储函数 ,函数名为count_sch()
mysql> \d $$
mysql> create function count_sch()
-> returns int
-> deterministic
-> begin
-> declare count int default 0;
-> select count(1) into count from sch;
-> return count;
-> end $$
mysql> \d;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gtLodLpx-1659775258223)(C:\Users\YYJ15\Desktop\sql\第四天\作业.png)]
2、创建一个存储过程avg_sai,有3个参数,分别是deptno,job,接收平均工资, 功能查询emp表dept为30,job为销售员的平均工资
\d $$
create procedure avg_sai(IN p1 int,IN p2 varchar(20),out avg_salary float)
begin
select avg(sal) into avg_salary from emp
where deptno=p1 and job=p2;
end $$
\d;
call avg_sai(30,'销售员',@a);
select @a;