mysql存储过程的多表查询

#创建学生表
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;
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值