#创建学生表
create table st_table(
id int auto_increment primary key,
name varchar(10),
sex varchar(1)
);
#创建学生选修课信息表
create table course_table(
id int,
course1 varchar(20) default null,
course2 varchar(20) default null,
course3 varchar(20) default null,
course4 varchar(20) default null,
course5 varchar(20) default null,
course6 varchar(20) default null,
course7 varchar(20) default null,
course8 varchar(20) default null,
course9 varchar(20) default null,
course10 varchar(20) default null
);
#添加外键
alter table course_table add constraint fk_id foreign key(id) references st_table(id);
#向学生表里面插入数据
insert into st_table(name,sex)
values('张三','男'),
('李四','男'),
('小倩','女'),
('小青','女');
#学生选修课里面插入信息
insert into course_table(id,course1,course2) values(1,'搬砖',null),(2,'手劈榴莲',null),(3,'奶茶',null),(4,'手摇奶茶','手摇咖啡');
delimiter $
create procedure check_sex(in st_sex varchar(10))
comment '学生名选修课信息'
begin
select * from(
select a.name,a.sex,b.course1,b.course2,b.course3,b.course4,b.course5,b.course6,b.course7,b.course8,b.course9,b.course10 from
st_table a left outer join course_table b on a.id=b.id) c#作为一个新的多表联合查询的派生表,必须要有一个别名
where c.sex=st_sex;
end $
delimiter ;
call check_sex('女');
call check_sex("男");
#需要注意的是,这两个表里面时有同字段名字的存在(id),所以在选择显示的时候应该区分a表的id与b表的id
#(如果字段是不一样的则可以使用select *来进行简写)
#使用到的左外连接:select * from st_table a left outer join course_table b on a.id=b.id;
mysql存储过程的多表查询
最新推荐文章于 2023-02-27 09:38:24 发布